Skip to content
This repository has been archived by the owner on Jul 12, 2023. It is now read-only.

Latest commit

 

History

History
494 lines (373 loc) · 56 KB

README.md

File metadata and controls

494 lines (373 loc) · 56 KB

Overview

This project translates a reduced set of x86 assembly code into brainfuck-code.

Language overview

The language contains (infinite) registers: $0, $1, ... Every value is treated as unsigned (comparisons, memory lookups, ..) The translated brainfuck-code is optimized for unsigned 8-bit-cells with rotating increment/decrement (so 0-1 = 255, 255+1 = 0), but should work for other cell-sizes as well.

A complete overview of every available instruction:

* mov $0, $1            //$0 = $1
* mov $0, 0
* mov $0, [0]           //memory lookup at position 0
* mov $0, [$1]          //memory lookup at position $0
* mov [0], 0
* mov [0], $0
* mov [$0], 0
* mov [$0], $0
* add $0, 0             //$0 = S0+0
* add $0, $1            //$0 = S0+$1
* sub $0, 0
* sub $0, $1
* mul $0, $1, $2        //$0 = $1*$2
* div $0, $1, $2, $3    //$0 = $2 / $3, $1 = $2 % $3
* out 0                 //print character '\0'
* out $0                //print character in $0
* in $0                 //read character to $0
* push 0
* push $0
* pop $0
* labelName:            //'jmp labelName' will jump to that position
* jmp labelName
* jz $0, labelName      //jump to labelName if $0 is 0
* jnz $0, labelName
* je $0, $1, labelName  //jump to labelName if $0 == $1
* jne $0, $1, labelName
* jg $0, $1, labelName  //jump to labelName if $0 > $1 (unsigned comparison)
* jge $0, $1, labelName //jump to labelName if $0 >= $1 (unsigned comparison)
* jl $0, $1, labelName  //jump to labelName if $0 < $1 (unsigned comparison)
* jle $0, $1, labelName //jump to labelName if $0 <= $1 (unsigned comparison)
* call labelName       //call function 'labelName'
* ret                   //return from current function
* stacksize 0           //defines the stack-size, if you use the stack above that size, it will overwrite the memory
* global 0 0,1,2        //initialize the memory at position 0 with the given numbers
* global 0 "abc\n\0"    //initialize the memory at position 0 with the given string

Build

If you are used to java-code, just take the sourcecode in src/ and use it however you want. (build a jar as example) Otherwise you can use the minimal build-bash-script in the directory src.

  • Make sure you have a java jdk installed (version 8 or higher should be fine)
  • Navigate to the main-directory and execute the build-bash-script
  • It will create a build-directory in the main-directory containing the compiled java-files. You can run them with:
java -cp build/ Main samples/fibonacci.asm -e

Examples

A simple 'Hello world'

Sample output:

Hello world.

Asm-code:

global 0 "Hello world.\n\0"

mov $0, 0

print_loop:
	mov $1, [$0]
	jz $1, break_print

	out $1
	add $0, 1
	jmp print_loop

break_print:

Brainfuck-code:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++++++[-<++++++++>]>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<+++++++++++>]<+>>>>+++++[-<++++++>]<++>>>>++++++++++[-<+++++++++++>]<+++++++++>>>>++++++++++[-<+++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]>>>++++++[-<+++++++>]<++++>>>++++++++++<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+[[-]>[-<+>]<[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<[-]>>>+<+++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<++++++++++++++++>[-]<[->>>>>>>>>>>>+<<<<<<<<<<<<]>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<+>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<+>>>>>>>>>>>>]<<<<<<<<<<<<---------------->[->>>>>>>+<+<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]+<[<<<<++>>>>[-]>-<]>[<<<<<+++>>>>>-]<<<<<<+++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<.>>>>>>+[-<<<<<<<+>>>>>>>]<<<<+<+++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<+++<[-]>>>]<<<]

A fibonacci number generator

Sample output:

Fibonacci number generator
==========================

Please enter 2 digits: 12


  -> Number 0 is: 1
  -> Number 1 is: 1
  -> Number 2 is: 2
  -> Number 3 is: 3
  -> Number 4 is: 5
  -> Number 5 is: 8
  -> Number 6 is: 13
  -> Number 7 is: 21
  -> Number 8 is: 34
  -> Number 9 is: 55
  -> Number 10 is: 89
  -> Number 11 is: 144

Asm-code:

stacksize 16
global 2 "  -> Number %u is: %u\n\0"
global 25 "\n\n\0"
global 28  "Fibonacci number generator\n==========================\n\nPlease enter 2 digits: \0"



jmp __start



//$0 is offset of string (has to end with \0)	(will be changed)
//$1 is offset of arguments						(will be changed)
//$2-$8 reserved (will be written)
//%u is the only replacement possibility (% can be escaped with \%)
printf:
	printf_loop:
		mov $3, [$0]
		jz $3, printf_end

		add $0, 1
		mov $4, [$0]

		mov $2, 92
		jne $3, $2, printf_skip_escape 	// '\'

		je $4, $2, printf_escape        // '\'
		mov $2, 37
		je $4, $2, printf_escape        // '%'
		jmp printf_error

		printf_escape:

		mov $3, $4
		add $0, 1

		printf_skip_escape:

		mov $2, 37
		jne $3, $2, printf_replace_escape  // '%'

		mov $2, 117						   // 'u'
		jne $4, $2, printf_error

		add $0, 1
		mov $7, $0
		mov $8, $1
		mov $0, [$1]
		add $8, 1
		call print_decimal
		mov $1, $8
		mov $0, $7
		jmp printf_loop

		printf_replace_escape:
		out $3
		jmp printf_loop

	jmp printf_end
	printf_error:
		out 73
		out 78
		out 86

	printf_end:
	ret

//$0 is the decimal
//$1-$6 will be changed
print_decimal:
	mov $5, $0
	mov $6, 0

	print_decimal_loop0:
		mov $3, 10
		div $0, $1, $5, $3
		add $1, 48
		push $1
		add $6, 1
		mov $5, $0
		jnz $5, print_decimal_loop0

	print_decimal_loop1:
		jz $6, print_decimal_end
		sub $6, 1
		pop $5
		out $5
		jmp print_decimal_loop1

	print_decimal_end:
	ret


__start:

mov $0, 28
call printf

mov $9, 1
mov $10, 0
mov $12, 0
in $14
in $15
sub $14,48
sub $15,48
mov $16, 10
mul $13, $14, $16
add $13, $15

mov $0, 25
call printf

main_loop:
	mov $11, $9
	add $11, $10
	mov $9, $10
	mov $10, $11

	mov $0, 2
	mov $1, 0
	mov [0], $12
	mov [1], $11
	call printf

	add $12, 1
	jl $12, $13, main_loop

Brainfuck-code:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++[-<++++++>]<++>>>>+++++[-<++++++>]<++>>>>++++++[-<+++++++>]<+++>>>>+++++++[-<++++++++>]<++++++>>>>+++++[-<++++++>]<++>>>>++++++++[-<+++++++++>]<++++++>>>>++++++++++[-<+++++++++++>]<+++++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>+++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>+++++[-<++++++>]<++>>>>++++++[-<++++++>]<+>>>>++++++++++[-<+++++++++++>]<+++++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>+++++++[-<++++++++>]<++>>>>+++++[-<++++++>]<++>>>>++++++[-<++++++>]<+>>>>++++++++++[-<+++++++++++>]<+++++++>>>++++++++++>>>>>>++++++++++>>>++++++++++>>>>>>>++++++++[-<++++++++>]<++++++>>>>++++++++++[-<++++++++++>]<+++++>>>>+++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<+++++++++++>]<+>>>>+++++++++++[-<++++++++++>]>>>+++++++++[-<++++++++++>]<+++++++>>>>+++++++++[-<++++++++++>]<+++++++++>>>>+++++++++[-<++++++++++>]<+++++++++>>>>++++++++++[-<++++++++++>]<+++++>>>>+++++[-<++++++>]<++>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<+++++++++++>]<+++++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>+++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+++>>>>++++++++++[-<++++++++++>]<+>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>+++++++++[-<++++++++++>]<+++++++>>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<+++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>++++++++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>++++++++++>>>++++++++++>>>>++++++++[-<+++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>+++++++++[-<++++++++++>]<+++++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>+++++[-<++++++>]<++>>>>+++++++[-<+++++++>]<+>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>+++++++[-<++++++++>]<++>>>>+++++[-<++++++>]<++<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+[[-]>[-<+>]<[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<++++++++++++++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<<<++++++++++++++++<[-]>[->>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<----------------<[->>>>>>>>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>]+<[<<<<++>>>>[-]>-<]>[<<<<<++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<++++++++++++++++>[-]<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------->>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<+++++++>>>>[-]>-<]>[<<<<<+++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<++++>>>>[-]>-<]>[<<<<<++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++<[->>>>>>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<+++++>>>>[-]>-<]>[<<<<<++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<+++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<<<<[-]>>[->>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<+>>]>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]+[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<+++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<+++++++++++>>>>[-]>-<]>[<<<<<++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<[->>>>>>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<+++++++++++++>>>>[-]>-<]>[<<<<<+++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<[-]<<<[->>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<+<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<[-]>[->>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<+>]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<++++++++++++++++<<<<<[-]>>>>>[->>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<---------------->>>>>>>>>>>>>>>>>>+[-<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>]<[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<+++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]<[->>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<+<]>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[-]>>>[->>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<+>>>]>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>]<<<<+<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<<<<.>>>>>>>>>>>>>>>>>>>>+<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<[-]>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<+>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[-]<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<+<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<<<<[-]++++++++++>[-]>>>>>[-]>>>>>>>>>>>[-]<<<<<<<<<<[->>>>>>>>>>>>>>>>>+<<<<<<<+<<<<<<<<<<]>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]<<<<<<[-]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<+<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<[->>>>>>>>+<+<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]+<[<<<<+++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<[->>>>>>>+<+<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]+<[<<<<++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<+>>>>>>>]<<<<+++++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>[->>>>>>+<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>]>>>>>>[-<<<<<<+>>>>>>]<<<<++++++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>>]+[-<<<<<<<->>>>>>>]<<<<<<<[->>>>>>>>+<+<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]+<[<<<<+++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>]+<[<<<<++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<+++++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<->>>>>>]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>]<[-<<<<<<->>>>>>]<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>[->>>>>>+<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>]>>>>>>[-<<<<<<+>>>>>>]<<<<++++++++++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[->>>>>>+<<<<<<]<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+>+[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<[-]<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<+<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]+<[<<<<++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]+<[<<<<++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>]<-<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<<<<<<<<<<<<<.>>>>>>>>>>>>>+++++++++++++++++++++++++<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<[-]>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<+>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++>>>>>>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+++++++++++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<+<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<[-]+>[-]>[-]>,>,>>>>>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<<->>>>>>>>>>>>]++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<->>>>>>>>>>>]<<<<<<<<<<[-]++++++++++>[-]<[->>>>>>>>>>>>>+<<<+<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<[>[->>+<+<]>>[-<<+>>]<[-<<<<<<<<<<<+>>>>>>>>>>>]<<-]>[-]<<<<<<<<<<<<[->>>>>>>>>>>>+<+<<<<<<<<<<<]>>>>>>>>>>>>[-<<<<<<<<<<<<+>>>>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++>>>>>>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]++++++++++++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<+<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<[-]<<<<<<<[->>>>>>>>>>>>>>>+<<<<<<<<+<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<[-<<<<<<<<+>>>>>>>>]<<<<<<<<<<<<<<<[-]>[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<<+>]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<<<[-]>>>>>>[->>>>>>>>+<<<<<<<<<<<<<<+>>>>>>]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<[-]++>>>>>[-]>>>>>>>>>>>>>>>>>>>>>>>++++++++++++++++<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>+<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-]+++++++++++++++++<<<<<<<<<<<<<[->>>>>>>>>+<+<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-]<<<<<<[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+++++++++++++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<+<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<<<<[->>>>>>>>>>>+<+<<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>]<[<[->>>>+<+<<<]>>>>[-<<<<+>>>>]<<+>[<->[-]]<<-<->]<[-]>>[-<<+>>]<+<[<<<<++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++++++++++>>>>>-]<<<<<<++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<++++++++++++++++++++++++++++++++<[-]>>>]<<<]

primetest

Sample output:

Prime test
==========

Please enter 3 digits (between 001 and 255): 120




120 is not a prime-number.

  -> 2 is divisor.
  -> 3 is divisor.
  -> 4 is divisor.
  -> 5 is divisor.
  -> 6 is divisor.
  -> 8 is divisor.
  -> 10 is divisor.
  -> 12 is divisor.
  -> 15 is divisor.
  -> 20 is divisor.
  -> 24 is divisor.
  -> 30 is divisor.
  -> 40 is divisor.
  -> 60 is divisor.

Asm-code:

stacksize 32

global 1 "  -> %u is divisor.\n\0"
global 22 "%u is a prime-number.\0"
global 44 "%u is not a prime-number.\0"
global 70 "\n\n\0"
global 73  "Prime test\n==========\n\nPlease enter 3 digits (between 001 and 255): \0"



mov $0, 73
call printf

in $0
sub $0, 48
in $1
sub $1, 48
in $2
sub $2, 48
mov $5, 100
mul $3, $0, $5
mov $5, 10
mul $4, $1, $5
add $3, $4
add $3, $2

mov $0, 70
push $3
call printf
pop $3

mov $4, $3
mov $5, 2
mov $6, 0
jle $4, $5, skip_primetest_loop

sub $4, 1

primetest_loop:
	div $0, $1, $3, $4
	jnz $1, primetest_loop_no_divisor

	push $4
	add $6, 1

	primetest_loop_no_divisor:
	sub $4, 1
	mov $5, 2
	jge $4, $5, primetest_loop

skip_primetest_loop:
mov $0, 70
push $3
push $6
call printf
pop $6
pop $3

jz $6, is_prime

push $6
mov $0, 44
mov $1, 0
mov [0], $3
call printf
mov $0, 70
call printf
pop $6

primetest_print_primes_loop:
	pop $0
	mov [0], $0
	mov $0, 1
	mov $1, 0
	push $6
	call printf
	pop $6
	sub $6, 1
	jnz $6, primetest_print_primes_loop

jmp __end

is_prime:

mov $0, 22
mov $1, 0
mov [0], $3
call printf
mov $0, 70
call printf


jmp __end


//$0 is offset of string (has to end with \0)	(will be changed)
//$1 is offset of arguments						(will be changed)
//$2-$8 reserved (will be written)
//%u is the only replacement possibility (% can be escaped with \%)
printf:
	printf_loop:
		mov $3, [$0]
		jz $3, printf_end

		add $0, 1
		mov $4, [$0]

		mov $2, 92
		jne $3, $2, printf_skip_escape 	// '\'

		je $4, $2, printf_escape        // '\'
		mov $2, 37
		je $4, $2, printf_escape        // '%'
		jmp printf_error

		printf_escape:

		mov $3, $4
		add $0, 1

		printf_skip_escape:

		mov $2, 37
		jne $3, $2, printf_replace_escape  // '%'

		mov $2, 117						   // 'u'
		jne $4, $2, printf_error

		add $0, 1
		mov $7, $0
		mov $8, $1
		mov $0, [$1]
		add $8, 1
		call print_decimal
		mov $1, $8
		mov $0, $7
		jmp printf_loop

		printf_replace_escape:
		out $3
		jmp printf_loop

	jmp printf_end
	printf_error:
		out 73
		out 78
		out 86

	printf_end:
	ret

//$0 is the decimal
//$1-$6 will be changed
print_decimal:
	mov $5, $0
	mov $6, 0

	print_decimal_loop0:
		mov $3, 10
		div $0, $1, $5, $3
		add $1, 48
		push $1
		add $6, 1
		mov $5, $0
		jnz $5, print_decimal_loop0

	print_decimal_loop1:
		jz $6, print_decimal_end
		sub $6, 1
		pop $5
		out $5
		jmp print_decimal_loop1

	print_decimal_end:
	ret


__end:

Brainfuck-code:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+++++[-<++++++>]<++>>>>+++++[-<++++++>]<++>>>>++++++[-<+++++++>]<+++>>>>+++++++[-<++++++++>]<++++++>>>>+++++[-<++++++>]<++>>>>++++++[-<++++++>]<+>>>>++++++++++[-<+++++++++++>]<+++++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++[-<+++++++>]<++++>>>++++++++++>>>>>>>++++++[-<++++++>]<+>>>>++++++++++[-<+++++++++++>]<+++++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>+++++[-<++++++>]<++>>>>+++++++++[-<++++++++++>]<+++++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<+++++++++++>]<++>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++[-<+++++++>]<+++>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<+++++++++++>]<+++++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>+++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++[-<+++++++>]<++++>>>>>>>++++++[-<++++++>]<+>>>>++++++++++[-<+++++++++++>]<+++++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>+++++[-<++++++>]<++>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<+++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++++>>>>+++++[-<++++++>]<++>>>>+++++++++[-<++++++++++>]<+++++++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<+++++++++++>]<++>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++[-<+++++++>]<+++>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<+++++++++++>]<+++++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>+++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++[-<+++++++>]<++++>>>>>>++++++++++>>>++++++++++>>>>>>>++++++++[-<+++++++++>]<++++++++>>>>++++++++++[-<+++++++++++>]<++++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+++++++++>>>>++++++++++[-<++++++++++>]<+>>>>+++++[-<++++++>]<++>>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<++++++>>>++++++++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>>+++++++[-<++++++++>]<+++++>>>++++++++++>>>++++++++++>>>>++++++++[-<+++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>+++++++++[-<++++++++++>]<+++++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]<+>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++>>>>+++++[-<++++++>]<++>>>>+++++++[-<+++++++>]<++>>>>+++++[-<++++++>]<++>>>>++++++++++[-<++++++++++>]>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<++++++++++>]<+++>>>>++++++++++[-<++++++++++>]<+++++>>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<+++++++++++>]<+++++>>>>+++++[-<++++++>]<++>>>>++++++[-<++++++>]<++++>>>>+++++++++[-<++++++++++>]<++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<+++++++++++>]<++++++>>>>++++++++++[-<+++++++++++>]<+++++++++>>>>++++++++++[-<++++++++++>]<+>>>>++++++++++[-<++++++++++>]<+>>>>+++++++++++[-<++++++++++>]>>>+++++[-<++++++>]<++>>>>++++++[-<+++++++>]<++++++>>>>++++++[-<+++++++>]<++++++>>>>+++++++[-<+++++++>]>>>+++++[-<++++++>]<++>>>>+++++++++[-<++++++++++>]<+++++++>>>>+++++++++++[-<++++++++++>]>>>++++++++++[-<++++++++++>]>>>+++++[-<++++++>]<++>>>>+++++++[-<+++++++>]<+>>>>+++++++[-<+++++++>]<++++>>>>+++++++[-<+++++++>]<++++>>>>++++++[-<++++++>]<+++++>>>>+++++++[-<++++++++>]<++>>>>+++++[-<++++++>]<++<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+[[-]>[-<+>]<[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<,>>>>>>>>>>>>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<,>>>>>>>>>>>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<,>>>>>>>>>>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]<[->>>>>>>>>>>>>>>>>>+<<<+<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>]<<<[>[->>+<+<]>>[-<<+>>]<[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>]<<-]>[-]<<<<<<<<<<<<<<<<[-]++++++++++>>[-]<<[->>>>>>>>>>>>>>>>>>+<<<+<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>]<<<[>[->>+<+<]>>[-<<+>>]<[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<-]>[-]<<<<<<<<<<<<<<[->>>>>>>>>>>>>>+<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<<<<<<<<<<<[-]>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<<<<<<<<<[-]<[->>>>>>>>>>>>>>+<<<<<<<<<<<<<+<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<[-]++>>>[-]<[->>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]<+[<[->>>>+<+<<<]>>>>[-<<<<+>>>>]<<+>[<->[-]]<<-<->]<[-]>>[-<<+>>]<+<[<<<<+++++++++++++++>>>>[-]>-<]>[<<<<<+++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<->>>>>>>>>>>>>]<<<<++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]>[-]>>>>>>>>[-]<<<<<[->>>>>>>>>>>>>>+<<<<<<<<<+<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<[-]<<<<<[->>>>>>>>>>>>>+<<<<<<<<+<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]<<<<<<<<<[->>>>>>>>>>+<+<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]+<[<<<<+++++>>>>[-]>-<]>[<<<<<++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<[->>>>>>>>>+<+<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]+<[<<<<++++++>>>>[-]>-<]>[<<<<<++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<+>>>>>>>>>]<<<<+++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[-]>>>>>>>>>[->>>>>>>>+<<<<<<<<<<<<<<<<<+>>>>>>>>>]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>]+[-<<<<<<<<<->>>>>>>>>]<<<<<<<<<[->>>>>>>>>>+<+<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]+<[<<<<+++++++++>>>>[-]>-<]>[<<<<<+++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]+<[<<<<++++++++>>>>[-]>-<]>[<<<<<++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<+++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<->>>>>>>>]<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<->>>>>>>>]<<<<<<<<<<<<<<<<<[-]>>>>>>>>>[->>>>>>>>+<<<<<<<<<<<<<<<<<+>>>>>>>>>]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]+<[<<<<++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->[->>>>>>+<<<<<<]<<<<<<<<<<<<[->>>>>>>>>>>>>>+<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+>+[-<<<<<<<<<<<<+>>>>>>>>>>>>]<<<<++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<->>>>>>>>>>>>>]<<<<<<<<<<<<<<<[-]++[->>>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<+[<[->>>>+<+<<<]>>>>[-<<<<+>>>>]<<+>[<->[-]]<<-<->]<[-]>>[-<<+>>]<+<[<<<<++++>>>>[-]>-<]>[<<<<<+++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+[->>>>>>+<<<<<<]<<<<<<<<<<<[->>>>>>>>>>>>>+<+<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<<<<<<<<<[-]>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<+>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<-<<<<<<<<<<<<<[-]>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>+<+<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]+<[<<<<+++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->[->>>>>>+<<<<<<]<<<<<<<<<<<[->>>>>>>>>>>>>+<+<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+<<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++++++++++++++++++>[-]>>>>>>>>>>>>>>>>>>>>>>++++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-]<<<<<<[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<<<<<<<<<[-]>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<+>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]++++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<[-]+>[-]>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]<<<<<<<<<<<[->>>>>>>>>>>>>+<+<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<<<<<<<<<[-]>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<+>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<+[-<<<<<<<<<<<<->>>>>>>>>>>>]<<<<<<<<<<<<[->>>>>>>>>>>>>+<+<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]+<[<<<<++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<+++++++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++>[-]>>>>>>>>>>>>>>>>>>>>>>++++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-]<<<<<<[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]++++++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+++++++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<+++++++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<<++++++++++++++++++++++++++++++++>>>>[-]<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<-------------------------------->>>>[->>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]+<[<<<<+++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<++++++++++++++++++++++++++++++++>>>>>[-]<<<<<[->>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<+>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<-------------------------------->>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>[->>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<[->>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<+++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++>>>[->>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<[-]>[->>>>>>>>>>>>>+<<<<<<<<<<<<<<+>]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]+[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++>>[->>>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>[->>>>>>>>>>>>>>>+<<+<<<<<<<<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<->]+<[<<<<++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<[-]<<<<<<<[->>>>>>>>>>>>>>>>>>+<<<<<<<<<<<+<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<[-]<<<<<<<[->>>>>>>>>>>>>>>>>+<<<<<<<<<<+<<<<<<<]>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<++++++++++++++++++++++++++++++++<[-]>[->>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<-------------------------------->>>>>>>>>>>>>>>>>+[-<<<<<<<<<<+>>>>>>>>>>]<[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-]+++++++++++++++++++++++++++++++++++<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<[-<<<<<<+>>>>>>]<<<<<<+<<<++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[-]>>>>>>>[->>>>>>>>>>+<<<<<<<<<<<<<<<<<+>>>>>>>]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<[-]>>>>>>>[->>>>>>>>>>>+<<<<<<<<<<<<<<<<<<+>>>>>>>]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>]<<<<++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<.>>>>>>>>>>++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<+++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<+++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<[-]>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<+>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<[-]<<<[->>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<+<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<[-]>>>>>>>>+++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<[-]++++++++++<<<<[-]>[-]>>>>>>>>[-]<<<<<<[->>>>>>>>>>>>>>>+<<<<<<<<<+<<<<<<]>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]<<<<<<<<[-]<<<<<<[->>>>>>>>>>>>>>+<<<<<<<<+<<<<<<]>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<[->>>>>>>>>>+<+<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]+<[<<<<++++++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<[->>>>>>>>>+<+<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]+<[<<<<+++++++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<+>>>>>>>>>]<<<<++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[-]>>>>>>>>>[->>>>>>>>+<<<<<<<<<<<<<<<<<+>>>>>>>>>]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<+++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<->>>>>>>>>>>>>>>>>]+[-<<<<<<<<<->>>>>>>>>]<<<<<<<<<[->>>>>>>>>>+<+<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]+<[<<<<++++++++++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]+<[<<<<+++++++++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<+++++++++++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<->>>>>>>>]<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<->>>>>>>>]<<<<<<<<<<<<<<<<<[-]>>>>>>>>>[->>>>>>>>+<<<<<<<<<<<<<<<<<+>>>>>>>>>]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<+++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>++++++++++++++++++++++++++++++++++++++++++++++++[-<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>]<[->>>>>>+<<<<<<]<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<+>+[-<<<<<<<<<<<<+>>>>>>>>>>>>]<<<<<<<<<<<<<<<[-]<<<[->>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<+<<<]>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>+<+<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>]+<[<<<<+++++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<<<<<<<<<[->>>>>>>>>>>>>+<+<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]+<[<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++>>>>[-]>-<]>[<<<<<++++++++++++++++++++++++++++++++++++++++++++++++++++>>>>>-]<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->>+[-<<<<<<<<<<<<->>>>>>>>>>>>]<-<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<<<<<<<<<<<.>>>>>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[->-<<<[-]>>>[->>>>>>+<<<<<<]>>>>>>+[-[->>+>+<<<]>>>]<<[-<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<+>>>>>+[-[->>+>+<<<]>>>]<<]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->+<<<<<+>>>>]>[-<+>]>>>>+[-[->>+>+<<<]>>>]<<[-]<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<[->>>>>+[-[->>+>+<<<]>>>]<<+<<[<<<[>>>[-]<<<<<<]]>>>[-<<+>>]<<<<<<<]>>>>>[-<<<<<<+>>>>>>]<<<<<<<<<<+++++++++++++++++++++++++++++++++++++++++++++++++++++++>>>]<<<-[->>>+<+<<]>>>[-<<<+>>>]+<[[-]>-<]>[-<<+++++++++++++++++++++++++++++++++++++++++++++++++++++<[-]>>>]<<<]

But why?

Why not? :)