1011111001101011111001101111100000000100010101000000011010000110000111010011111110011001101000101000000010101100011000000100000111100101111100110111111010010000110010000011101100011101010101111010100001111000110110011101000101111001111100100111110100000001101100111111110100101100001001011101100111010101010010011100000100000000011110000110101000011001010001010101011100000001001111011101110110000010 0101010111101000010101111100101000010110110111010101100110111001110100001110011111101010110011100000100110101110000010011101100011100000010000110011111011001010001010000100011011110001000001001100001000001110010001100110010110100001101011010110110011110011001111010100001101110111000111111000000100110100001100100100000010010000101110111000001100110101101100111010001110110111010000001011001011001100 0100001001100010100100011000000101100111110000000000001010111000101100100010100110110010011000011111001010000001000101110011100011001110101010000111100001110101010100111101010111010100000001100101101100110111101110110001000010010111010101110000000100101101101000011100101110000110111110100011011010111000001000000110111000100101101000011101111000100011001111001010000111111000110001011011000100010000 1000010001111110101000011010100000110111011100011110101111011011000110010010010001100001110101001010001100101001000001111101000110001101100011101100011001111100110000110011111001110001110011011010001110111110101101100110001101110110000110010011101000111010011000010101001011111001111010100000100000100000011110001010101001011011000001000110001000100101100111000111010111111101010000110101000011001110 1110001101000001001100001101110101011111011101101110010111001011001101000100111001010000110110011001000110010111011101001010010111000000011100011000001010000101100000010110011110010011011011011100001010110010010110100100011100000110010000011110000000011001001000111011001000100000011100010001110110001100010110110111000111111010100101101101110111001011101011000010101111110101010101111101010011000000 0011110011011110000111110000010011010000100000010011100001111110111110110000000100110011100011110101001010110111000011011110010010011011010011000001110000000100011001110011011110100111010110001110000010010011110000101110110011110110011111111111010000010110001111101010101011001111100100011100100001010001011001101011000011000000111001010110110001111101001000110101000110100010001100001001010010011110 0001101111111011111111011000111110010110110111000011101111010000101001001000010101011001111000010010010010101110101011010111000111101010001001000001101110011111011111000100011100010001011110010100111111001111100011111000000010001111100110100010000010010110100010000100111110011110010010011100011011100100011101000111001000101001000111010000001011100011011110000001000011010010000110100100001010001000 1111111111111001101010010101001111011001110110111010100010111100111001100100010100101000011000011101110110110011110001111001100010011111101100001011000011100101010100100010010011100111101011000110001010111101011110001001011101101101100110110100011011000000111011000101011001011001101000001011010110100011110111101100001010101111000001001111011110011000100011111011110010110010010011010101000000011011 0001100000110000010110100001110110001111100000101110000000110101000110110110111110110010001010111011111100001100010010101011100010110101010110010110000101011010010101011101011011101011101010001110001110001110011000111110110111101010100110000011010111101000010101111100110010000110000001101100001101110110000011000110100101001101111000011110101110000111111110101110100101100110100011101101111001110111 1010110000110011010011001000010111101011010010000111100111110100000111111001010011000011010100111101010110011101011011100111000010000110011100100111010011011011000101110110001110010010010011111110011111001111101111010000010010011110100100100110001010100010101110110100111100100001000011010110011100001000101101100110101100011111101110010011100101001011110011111011000001110011100001101011001101001111 1111010001100011011110001101010010100010010101011011100110000011101101100010011111010100000101110100010101100111101100111110001001000011010011001101010011100011101010101101101001001110100111100010101000100100101111110010011000100010011111100001011100001110011111100101011100010010001001100011110101000110101111101100000111010000110011010011111100110001011100000000011110110110000110001111011010100010 1111010100111010000101110110000100010100100010000001100001001101011011011100101000110111011001111111100111001110001110100101110011100101001110111010010011101010111001100101101011100100011001000100100111101100011101100101010011010001000101100010101011110101010001100110010110110111111101000110101011110111101001001001100011100101010110111100110010101011000100001011100101000000111111001001110111011110 1111000000000100000010100011101011011101111000100011011100010001100011010001000001011001001110100110011011011101011001001011111011001001011101100100000101101100111001100110100100101110101010111110100001100110010100010111011110011101110100111101001000010110001100100001110111011111100001000101010110000011100111011000100110100010000001111100011101010010000111010011100110101110111011111011010010111100 0011010001111110000100001100011101111100011010010100110001110110011010100111011001010010111100111101111000001010111011001110001000010001010111100101101100111000001110011111110011100111000010011101101100010110111111111010101111101001010100100110110110010101001101001101111100001001111111010011111100111001000100000001010111100110000001100001011011100010111010001101010111110010000111100010100001011001 0000100110101101000000001100110000011100010010010010100001011110010011001110111011110110110011111101010011011111110100111001010000001001111010110001111100000000101100010100001111110111010110001001101100101101011101101001011101110110110101010001010001101010011011011111111000100111010010000010100111100111110001110101111110000011001110001010101110011011100011101101111001001110000000101000001011001000 1000100111000110100100101001101011110000011010100001110110001000111010001101101101111000010101110101100011011010000010010001001100010110110000011100100001011010110000000010001011100110101001110100100111100010010010100100100100010001010000111110110111001101111011000000100010011100011111001101010000011110001001011010111011000000100100111110100010110000100100011110010100110000100000111001011100101001 0010011110110111001000000110111011011101011010011100111011101100000001011011000111000010001101000001001010101100110011101001110110010010010100101001001101111000111101010000010001100011001110000000101101010110001010010101010010101011110001110110101011010011110110000101100011011001011111001001100001110101101111100110111011001001011111101100010000011011111111010111000010001110110100111010101100011010 0101000110001101001101110110101110101100100111000010111011011000011110011011111100000111101011011000111011010001000000000000001001011101010100111010100000011001101100111011110001101000111011101010011101110111110110001011000010111000000011010010001111100001111011110011100110101001110110111100100110111110010001100001011000100000001001101101101011010011101001101010001110001001010101010001101001011100 1011011111111111101011111111011011110011111111010111010111011000001000111000101111000010010110001011000110100100011000001110101011001101111010001101100111011001101010011000000011001111100011110111011000001110110010001011110110100000011000101111100110010100001110101101010011111101111111110000000110101101011100110001010001101000011001101001001111100111001101111111101110110110010011011110100010011010 1001011100001110101111101110111000100100001111011100100111011111000001100010101111111100100011000011010000100110110101010100100011001110001010110011101111001111101110011010011111000101010100001110100010100111010101111101000001000111110000011011101000010000111011000110000100110000111011010110101010101001010110000110010010001110000010101100101001011001000101111100110101001000000100000110111100011101 0101101000110011001001001100001011110010101011101001110011100100100110100011110111110100100001000101011111101110111001011000011100100001011001111010111101110011110011110011010100111110100001110100011100001100111101111001111000100000110000110110000000011110010001011110001110100110010001001111101011110100001001000001010101100011000001111001110000001011100010111011000010110011100011001011101110111110 0001100010000100001110001110001000010000110100100110111111001100000110110000100011001010010011010011100011000000000110001000110111101100101110101001101011100101110101010001000011001110111111101001010000100101000100111101011100111111110010011111101010110111100110100000110100110101000110111111001101101001001000111110011001101011000111111101100100011111001000001011000111111111100011101110100100001010 1000010110101010000111001011010000110011111010011100110101001110111100111101110101110110011011111010010101000100000100001111100110010111001101100100010100011011111101000101011011111010111001001010101010001001101000111011000010110000010100011100101100111100011000101000100011011000100110010010010110100010011100000100010110001100011001010000110010111000111011100011110101011101101101101010010001111011 1010000101001111111101100101101101001011110000110100111010100001100111110011100111100000100100001000100110010010001010111001111111111001001011010000010100010001000011100101011001110001111010010100001110110110001010110001011001000101111000111101111101010000000100011100100110001110000111010111000010000111010000001001011000001001100101001111111110011000100001001101010100011101110100001110101010101001 0110011010010101011011000111000100100110001001101011010100011000101101001100011010111001001001110010011011010010110110010010011000001000101111010010001000010011101011110001110000101110001011011010011111110011001011100001001100100010010010000101000000000101001001000010011101011011111011001010101110000101111111001000111011010001110111010001111100101011111001100111100110101100110010111101001110010100 0111001110101100000010011001011111011100000101001001011000001110001111010111000010110011001010111011100100110100111011000100100100100011001111011001011001110000011100000111010110000111111010011000010110101010111011000100011101000001110010111101111111110000111000001111010101011001011111011000100111110011101010011110000111001100110011001100100011100100001110001110011101110010000111011010000101011010 1001111000110011111100101101001000010010001100000000011111000000100011011111000111111100000100010011000011100110001101010110110111001011110000000001111110100110001010010000011010000001000001101010100100010010001010101111001010111001011100010101000001110000101001000111101110101101100001101100011110011001000100110010111101001101101110100011001000001011101100010111110011111010010100000111101100001100 0100011010101100101010100011000110101001100110110100010100100100000101110010100100010000000110001101111010100101110100001001011010000011101000000011011010011010110011101000111000100101110110110100111000110100001010101010011101001110001100000000101010010100001101001100011100010010111001111111011110110100100111100101011011111101000101100110100011111001100010011110110001110011000010100001100101110001 1101000111111100000110110011101110111011001100001011101000001111111110100011001010110110010100010111011111010010101000111000000111010010010100011110000010011111000011101010100110110011110100010010000001010010100001011001000100110101000111100011010100001101110011100001110000010100000000110010000011111111110100010111101101010110111010011011001111110101100001011111000000110110111011001000111100101110 0000110110101100011111100010111010011000100001010111100000010000101001000010110110101111010110000100010100001001110111000111100010000001111100001011010110011011111011100000110010010011101101000011100010100111011011010010110011110011101001111000001100010000001111011101011010011011001100111011111001110111101110110011000100000111101001101101111010010000000001011000001110101010000011001000100011101101 1110000111111100101001000010000100011110001101000111000001001110100111011001101110110100111111110100101011110110100000010101111001000011011100010100101110100001010010001011100111000100011010111011111011000110101100011100111100101101011011010110110000111011011001111001010010011111101110001111111010111100101011100100101100101011111110000111000101101010101111111001001001101110011101101010110000011100 0101101100000000110100011010100110100010101101101001010001111111111101110001011000011110110110011110000011000111100000011000001001011000111000010111011011110010110100011011010010111101000101001001111111001100110001101110111111000001110001111010100110000110010100100000001100001111010101001111001111101110111111011011001100100010001101011010011111111100011110010100110111110000111001110010001011010011 1110100010001100110010100001111100001110101111011011101001101000100100100100010100110111100000001001111101010000101000100111101101010001000110001001110100011010101000101011001001011100001000111010101000100011100110010011010011100110010001101011001000000110100001110000101100100100110011100010110101011111100110111101011000101000010001101010100010011000010110010010000000010101110001010101101100111001 0010110100100100001000110101111001101011011100011101000111100101101001000100110100011001011011100110010000000110000100011101010100001010000000001000100000111010011000000010011011111100010011110110000101100000100011010000110100100010000100001110000111101010111110110011111111110011101101000110000001001011011000100010010111100000010000010101110111001011111111011100000011011000111100000001101010110000 1000000000101010000001110100101010111110111001101111010101010111100000101011110111100111101001101111100000010001000110010110111010010011000011100101111010010100011011001111100011011101101100100010011111110000010100111010111010000010010000000100000011000101100100001111000010110001100011110011101101111001000111000101100100101111010001111110111000001000111110001010110010101010011110010000111011111011 0001100111100001011000101101000111101010110111011011101011000011001111110011111011010010010011100010001101011010010110001111010010001111011100110110000000001010100101110100110010001010010011000101101011101011010110011100111010100010000100101001011001110111111101101101110000011111010100001100101100101110101010011101111010101001110101100001000110100110100101001110000101110011111110110010100010011011 0000011000010111000111111011110011100000001111100100011111011100100011010110110000101011111010100011110000010100111101000111111101001110000100100101000100100010111100101010011100001000111100000100000011000101100011100101011101101110011000110111001111011010010010111000000011010000011111010011010100110010000001101001001010100100111100101000010100010110001000111000100100011101000101111101110010101001 0100110110010011001111000100011011010100010011100100011010100111111110100100110110111011000010011111110100111110111000101010010010011111001011101010100110001110010111101110100100100011001101010001010001001011000011100110111001001110100111101011101100100110111011010011001111110100101011011111000110100110111010100010100101011100011010111110111101100111111000100100000000111011011010001111001101110111 0001011011110110111011110010001111010100011100001010010100000011010111001110100000111100100011110100101101110100000010000011100011000100110100011001011110001110001011101011011011010000011011000001110010011101011011011001111100000010100110011010100000001010010111010100111011101001101000110010111100011111000001110111011111000101100001110011101000000010100110010110010001011111010110001111001011001000 0000011100011111111101101100010101110110111000100010010100101011001010111001010100011110001000001101010001101101000000001110010000001011110101000000001000010110111010011000100011010001101000100011011101100101100010010101110001110010110001100111001110000010100000011000000110011010100010011011000111011010101000011110011100101010101001001010111110000110101010101101011110010000100010001010011011010100 0110111110010110001101011111011010001111100101011011110010000101010011110101110010111111111100101000101011000011100001000001001110001001111110110001110011011010000010011010100001001001010100101100110101001101001000000000110011001100000000110100010000110101111011101101101001000000000110101000010100001011011111010110001100011111110110011111001111001001111010010000000111011010110001111111001100011101 1011111101100100101000111000010010001100001001100100010000001111101010001001101010000111000010111100100110100000111010100001100110100110001110101110001111100001011110010100011011111000110110010011101100011101001111101011001001100100111011010100111011110001011101110000001111011111101011111011010011000111011011100100010101001101011000110100011001100100110110000001001101101000111100100101011000100100 1110101110101110110110110000101010001111111001011111001001110110100000001101010110001100111001000011100110001000010100000101110000100110001000110100101101010000100001101001011101111110110010100100001011000001100111100100101010101000000110110001000110110101000101000010100010000010111010101101011110000100101110011100110101111011011011010101100000100110110001000111010101000000010101101000110111110010 0111100100101101011101011101100110001011011111001101010001101000100000000101100110001000100111111101001011110110110111101101001000101010110010100100011101100110100100101001111110110011000010000001101000001110110000110111100001111011000011101101011000101111110010111010111110111111110011001000111111100010101111111010011100100000000101101011010100100001010011000111001100000000101100100010100110100111 0100001000000101111000001011101101110000110110101001101001100100111011110010001101110110111110001101110111111011111000011000111101100101010101011101110001010011000101110000100001000100011101011011100000000110101101100010011101111111000111110101011101101010011101100111000011010011010001101101101111001101110100010000111011011001010111110001000001111110110100011000101111000000010001100010011111101001 1111010100111100101001110111101000101011111010100110011100000100110111101101111101110111100111110011111010011000110011001101011100000111100110001001110110010110000010110101100110110101011010011101110001100001000111011000111111100010100000111011110011111011010100000110101101010101010110011111100110111000010000011110001110100111100011101010011000101001111011100101001100101100110100000011010100100000 1100100011100001000010010001100111100101110010011110000111100001110110111111100001111011010000110111101011011010010100100011101101100001000001011101011001111010010101100000111110011010000110101110011111100101001000110101000101010101000001101100111101101110011111111110000110000110010100001011011111110011110001100110110100010110111110010101111101010011001010001000000000110100101111011011101101100000 0111100111100101011111101110101011001101011110111111000000110101001100001000010000011001010010111101100001110111101101011111011011000100010110001100100100010110101011110000100011001010111100010010001000010011111101011010010001110110110000001111110100111001010110110010000110000010010100111100101101001101010110101010101000011010110100100001100101110000111111100000100010011010010000101011101100101010 1001001111110100010101111101110110100011111011010110000010110100111001111111111010001000111110111110011110111010111101000100100001100001110100101000010111000011111001110011001110110000101000011000111001101010010101100100111111110110101111110110010111101100101010010011101001101111010010111111111011011010001110111010010011001100101010110011100101000011100001110000101000000000000001110111001110001001 0011101110010110100011011000100111101011011110000100000110011010011100010100001111000010000111000001011100101000111011000001110111111001111101111011111110110110011000010000110010011111000000100011010011001001001111100101001010111011011111000011000110010011011010100111100100000110101001011000001100111111110111000010011110011100000100110011000010111101110101011010010010101111011111101011110011000001 1011001100100010110010100011001110010101000111111110011111010111000100101101010111010010110000100100011000011101000111101011011101100000100101001110111010001111001010111011110011110010001111011010001110000101001010000111000000011110110111001111010110001111001110100001001001100111001111000001110101111111011000000001111011101111101100101111111011101111100111010110101111111001110000100011111110000010 1011001000000001110111011011011101011101111110010101001001111001010011001010010000101000110000001001111101100001110100101001111100011011000101111000010100100100000011000001110100110011100000010001010111001010000010011011000001100100010111001100010110110101010010011111100100100110100100111111010111111000000000101100110101000101011110001010110110101101010010100000111110100000000100101000101000001110 1101000101111000111010100100001110011000010011000110100001111111100000100010000100110111001011101001000111000011100011110000001011001010000100000101100100101111111011001100001111100111110111010001111100001110010001010011001001111010001100001010101001111110010001010111000110101101110111110010011101001100110000011110001000000110011001010100000101110010011001011100000000001010001001001010101000101101 1000011110101111010111101011010101101110001110110011010100010111010001001000100010001100011101111101011111110111111100000101101101111101001110100100011001100011011101100001101100100000011001110110001011110000101011101011101100111011111100100101110000010101100000000110101111011011001111111000110001111001111101101010100101001001101111111010001111111111000111011100110011100110010011010010000010110111 1100111100001111001101101100000110110011011100011000000010001110010100110010000010101011101001111000001110100010100100001001001011011010000001011001110000100010001100010010101001000100001101000010100111011000110000010110011001111010001101001011000111101000011110110100001101111001101010100110010000001111111110001011111000100010010110111111100010110111001000110011001101000010100000110010001110111111 1000101011111110110111001010100101100011101011011110010011111011000100110101110011001110010010001101100101011111011111100110001000101100010011110101100111100001110000111110111001011000011000111100001100001001011111010001011011010011101001101001111100111100100110011100100110101010111010101111111001111111011000011101111110110101010111101100101110001011101100001110000101110001010000000100110111001100 1000101010000101011001000110100011101010011000111110100000110110000101100111100001110001110100011110111010000110010110110100100000001010100000000101111001011010100110011111000101000100101110111111110100110111110000101000100111101001011110000111101110011111000111001110001111100101001011000101001110111011111011100100110010101110001011011100010110111010111010101110110011100011101000101111101111010001 0000001110110111011101011001100001011111100110011011101111101110010010110000110001101111110000101000010000010101010001000011010011111011100001111100111011000100100111010001011111000011010010110111001000111111001100001110101101011110101010110110100100000000111011110101001000000010001001100110100111001000010100000100000001010000010010110100010000111101110000100111000011000001100010001011111001000110 0111100100110011111011011100011011101100100010101101010111010110110000000101001111011001111110000100111001101000000001101101110110000110111011111111111110100001010111111111101111011000100010010001101001100001101010100111000110000010000110000010001110001101111001100011111011111011011101010001111010010000011110100100110100001100111000101101001101001110100110001011110111101000000001110101111010100110 0000110110001100101011111011100011011111100100100000000010001010001110100101101100100101011010100011001011000001101011101101000111100100000111101000110000011111000011000000111101010100001100000101111010010000000101010100010100010110100000110111011101010011000111101101111000101111110000000010011000111100011100101001111011011100101001011010101010111101101011111001001000010100001001111010101111000100 0001000100011110101101110100111101110001011001110001101111000010101101101111000100000010101001111010100100111011001101000110111011011101100011110110001100110111000110111101101111010001110011010110001101010000010010100000101111101100000000011110111011101010000010101110100000110110001101100011010000001010011010110000001101011001111101111100111100000111111000010000100111101101000100000011111110001010 0001100011000011101111110100010110000100011011011011010100001010001100110010000010110000011110110100101011001100000000001010001011101110000101011000011101010111001000101101000110011000101110001100100011110101101111111111010001110000010010101111001110100001010010001011111000100010100111111001000000001011101101110101010010010101101111011100010011001111101010010010111111000110001011010111011011100110 1111110011101101110111000011011000111000100101111111101011000101111010000111000001011111100101011000110010001110000010101010111010001100110100010110010011000111011011111010001000101011000100000010010110001011001000011100101011011100110011011101010011100100010011010111001011111110001011011001011100111111011010000011011100111100010000100110001100010100111101001010110111110000101001001111010111000101 0111100111011011111101110100111110010101101111000011110001101100100101111111110010010100001110010011110101010011001010011110101010011011010010011010100100110010110001010100110111101010000000001100010011011011100110001011101101101100110000100011111011001111101100101001100111011001000110000010100101000101100100010000100000001110010111100010110010011111001001101001111001001000001011010110000110110011 0001001001100100010001010011101101010011000101101111100010000110010001001011000001101001101111101100000111001101011101000000010001110010101001101001001000110110101010101110011100101110111101100110111100100111101111010001000100010101110101110100011100010111010101010100011010101000001011010101010101111101001010100010010100100101100011101001100101001100111011000101101110100011101101011001100111000010 0110111001101010010010001101011100000110111110000001010101100101010111010101100001010111000100010101111110000010000010010000100111010001110100011100100010010100011010111101000101101010111100100000110110000110011101010000100000101010011101011011110010100111111000100111010110110011000000101010100011110001011001010010010100101010100000011101111001100011000111011011001101101010110100001011011111110100 0111000010000010000101001110001110100101001011111001000110101111000010101010000000110110010110100010110010110110101001001000111001000011000110011001001111010110100101100001100001101001011001100111000111110010011111100010111001010010001010000001011001000001110110010000011111100100110010110010101100101111001001001000100101111010011001111100011110011001100101001001001011100000001010101011011110101100 1110001101100010110101111101111001101111000010101111000111011001110111110001101010011001000000111111011001010100100000000001011110001011010101110000110110111000111101010001110100100010000110100001110110110000001110001111100111000010110111000111101000000011000000001011111011010010100010111100001000100111110000100010000110101000110110010111011001011000111000101110101001100111000101101100001000110001 1111010010101110111110011011000111100100101100111100010010001000110110000011111010111000000100101001010000110000111000010010000010011110100011111011001011110010001100110001001010010101111010100101011010010100011110001111001001011111001100000010000001001101110001100110011101111100111100100011000011010001011001011000011011000101001111000111000101010111001001100000000010101100100111101110010000010101 1010011000100101001101011110010111011110100000011100101010100000100001001111011010000011011010101001000101100011101010001110011001100001111001110000011110101111011010101010100010001101010100110110111010101100100011100101001101001011001001011111110010011100001100010100110110111001110001111101010010111110111001011100100000011100111000000110111010100100000001110111001100111000001111011101010011010110 0010000100011110010110000100100111000000011000011101111000000100101100110100010010110101111011010001101111011000011000110100000101101000000111110110000101001111110101000101010110101011110001101101101111110100001111111100110100101000101111000101110100010001111111010111010110101100110100000110010001100100100110110000100111011000001001110111110000011101010011110000100011011100111111100111010111111101 1100001011010000111111010100101111001001011001010001111100110110010010001000011001110010110110011101011101000010001000010110000001110011100001001111000110001101000101001010100111000111110110100100110010001100001010110100110100111110111110111000000100000101000100001110100101011011100011100110101011001100100110001110000001101010010100000100101011011011000011111000001011111111101001011011001010011111 1110001111000000000101101011001011100111010101011010001011110010001011000111100010000110001101111100110110110110111101101110110101100001101101001010111111001101001110001000001111011100010100010000100110101000010000101000011110000010000100011111001000000101001100100100010101010111110111010101001100010111100011110000010001011110100000010110110111011111110010100110111000000101000111001001100010000101 1001001011001000010111100111010000110001100011001100000000000111011000001011111101111000011101100011101001010111101000110100111001101010110111110000001101101001011100001110101100101010000101001001100010100000001100111111010001001010100001010111001000110101100111111010010111000001010111011001101000110101000000111001000010110111110111010101101011001000010010111110000111001010100000111110000010000110 0010100101010011000001000110000100010011011111011000000011110001110000101101001110101111001111100100110100011110101011100101100101110010000001110100100101000001111001101011000101101111011111100100111110101101011010111111000001110000110111110101010100000001111111000011001100010110000010111111111111000101111100001100100111111110010001110001011111100111000000101111110110100110000111001111101001111000 1110001100010111101101001111100010110111111100110111000000111010100011001000011000000101110110110110001011111001000100110011001010000110110111010001110010111011001011000101111011000101110111101001111000000011010001110001111011111110001011100111101111110111010000100101010111011111001111011110100011111001101110100111111011110101101101111111011000111101001010011100011001110101111110010110001111111111 1001010011000000010101101000110011111110110000110110101001100101000001100101000001011101011101101100011100000111010111110110111111011111111011111100000101100111010001011101001101001111011101110000011111100011100011110111010101100110010100011100010110100101100011001010111010101111110010001101111011001110011111001111010111000011101101000011111100010001100000110100111011001010011001001110011110110001 1011111111010110010111000000001001001010011101100000001110111101001010001100011011011101101111101111100110000101100000010100010111100000111010100100011001010110110111111001011001011011110010100010110110000000001100100000001100001101101101101011101010001110100111011100101011000001000100010011011100000001010100110101010000000111011111010100011001010010100100010010010011111101100101010001000001110111 1000010111000101001111001001010101111100000110111000110111000011011001101001011110001100100001001101010110100000101010110010010001100101011111010011100100110111111110100110100001100011101111001100001001111101110111101001000010010000000011111100110101100110011001011100011100110011110100100101011111000110100000011010101110010011001110101110111101010100011000011100111010101101010101110000010011010000 0010010110101010111010100010111000001011100110101101001101001111010011001111011110101010100111001100000111001100000101101000100100010101110110010101100010011111001101110111101011100101111011110100101011100010010010100001100111111100011010111100101110101100101011010101010101101001000000011110111110101001000100001010111000010110111011101010010000001010100110101110111000111001010010011111100010110110 1111111110010011000101110001100101011011000010000111001011010101010000010100110010101101001110000110111010010111001000110101111010101101101010100111001010100011010000101011010000000010010101011001011101010100111110110001000010010010101101011011001111111010001100111001111111110011101000000101101101111010000001001101101011110001101101001100100000010101101000011000101111110111001010110000010110011101 1100101000101100001111000010001010101000101011101111101111011001111101011111001001000101001000000000001011111001100000001000100011000010101000010001011111000101010011100000001011010111011101010000010010100100111011001111011110111011111111010111101101111011111011001011001000100111001110000010011110010101011110001011000101011000000010101010001011110110010001010111011100111100001110010111000100100001 1001111011010111010111100110101101011111011110111110111001010010001010101100101000001010111111001001011001100100100110011100111010011100011000000110000110100110000111010111100110110001111011100100111101000000001100010111111101100010110010100010101000011110111110101010100010000011000111101100110000000011110101011100011111010111110010001000011101100110001100101000000010101100011110110100010100110011 1000001010111111110110010001100011100001001011010011000010111000011100101100110001010111011111111101001101111001111100100010010001000010011111000100010101101110000100000011111110011000110101010101010110000001000001010110101100100001001001110010001110110000110100101110010100000000011111111100011111000000001010010011001110110100110101111100010110001100000010110101101010000101101111000000010101001100 1100001000000110100101111101111110000011100110001111111100001110110110100000011101001100010100111100100010001100100001100010100111011000011000111110001000110101100001101110111101110111111100101010001001111011111010101111111100101011111011101110001110101101001111100001101000100000010010110101011111111100111001110001010111110101110010111110000101011001110111100111010110110101111000101100100111111011 1110010011010110001110001100001100111010111111000110101010001000011001001101000100011110011001111100001100010000100011110011100011010100101111100111110001110000110011010010110011010111010111101101011010000111100101110000100001101111101001100001110000111100001011010100100010100100011110111111101110001101111110100101111000110011111100010010001101010011101000010110010100011010110101011000110100100111 1111111010010110011001111000000110110100010111000111010001000111001011011111111000100111110111001111010011110110110111110101001010110111110110000110110010001011010000110000010111100101001001110011111101000100011111110000010111000000101010010100000001001001000000000000000000001001110101100100101010111000101010011101001010110010110000110010010111111010011010000000100000101100111011101001111000000011 0101111010110101110110000010010010110100000000001001000000111000100101011110111110101010001000011010111000101101001111001000111110001000000011011100001011001001111110000001100100110100110001100011101001001101110111001001000100001110001000101100000101110110010100010111011110100110110001001100010001101010011010001110110010010000011100000110010001101000010101000100111111111101000001011010100111010101 1100111010111001110111111101110001000011101001011010010101000011101111011000100010110100100011000110101000000011010001000101110010010010100011111100000100100011010011000000100001100000101011100010001011100111100101011011010100001010100101000110100011001101011101010101000010111010010010000010000000001111010000001011111111110101110010100011000011111000100000100111000110100100011110110111111000110011 0110011110111000111000111011001010111110000001000011100000101100110000011111101111010110111111110010100111101111000100101101001000100100110111101001010101110011010011100110110000111010000000100010110111101101001111001111111011001001100100111011111111001110111000001101010011100001100011011010111000100110110011111010011101011010011001110001110101000101101100101100000111001011011000000110101111010001 0101110001000001011111000111110101110111001110110000100100010101000010010110110000110000111011101000011101010110110110010010001111010101101110101100111110000010010110101101010111110110011101111110100011001001001011010001101100001000101000110001010000011101100100011000001010111111001011110000101000111100001011111011111001101110000011010110111000111000110110000000101101111100111111010000110100010110 1010100101110110101100100000011011000110101111110100000110001101110001111001011011001110111011101001101111010101011101001110100000001011111100011011001100001011000110000000011101010000000111101100000110111101000100001000010111011101101001110001100100011110000101000101010010000100101111011001110000100110111011111010011001111100001100101100100110001000111000111011001110111110111011001011001100111001 1010010000010111010011101100010011001110000000100110110010110110000101101000100011111010100100111010110001110001111101010100111111111101101101101111110101111010000111101111111110101100111110100110110011001011101000001101000101100111010010010101111110111011101101100101100011100001001001010111101010010110100110111110101100010010110110100011011000111000011100001101111000011000010100011001100001001100 1101100011011010100001000010110100011011000000010110111001100111011110111110001001000111010110010111000101100110011100001000100110101011100111000111011110011110000110011100001000000011001011111000001111110110100010111000110110111111011111000100101100111110111101001010101011110101011100110010111010100111101001101001111011011001000101010010000110001110110010100100011010011010001011110000100110101100 0011100100110010110110101000110001101110111010000100000001111111010001111001010100001001001010011010100110101010001111000101101111011110100011001001001110000110111110100111111011010101011001111111000100010000010010011010100111101111000100011000000011111111011111000101000101111001010000011001010110011011110100010000110110011100001010111010010101101001011110110101010010110110110011110010001001011001 1100001011110011000001001111111101010011010111101010000010001110101011100110100100001101110101111001111100101010111001100011010010100110010101111100001010100010011001001001111011001110011010110111010100100000110101010001011110010001000000101000110011010010111111111111101000110001100010100001000110001010111001111011100000101000010000001001100111011110100101110111001010111001010010000101100110001101 0011000001101100110001011100100011101001110101011101110011010100111100110010011011110110001111100101000100001110111010001111110010001011000100000011101101100001010101111100101010010000101111100001010101000110001101011010110101110100001101001100010001111100101110110100101000001000011011011001000000110011110110010100110001110001011101001101011000011101000001110000101111010011011000110111011110111000 1111110101110010001101110000101111100011010101011100110111100101010000001100111100110011100000001011101110000010101010101111010000011011001011000111100010100011111011111010101010111101011000001101010101000010000001001100000010110101111011000000000110100001010101100110110011100100111111000110100100000100010000110100110100100010100101101101101101101100101111010110000111000110110001101100101101010110 1011111100000011001101000000100110101010111011110100010100001100000101100111000101110111111100101000000000001110010001100001001111000100110011000010011110001100100101110010110011011101101011000111111111010110110110100110011101000011110111000111010100100000111100011111100100001101100111000001010011010010001001010011001101111111001011010000111100000111001011101001011111100110101000100100001111000101 0010010011000110001011000001011101100110010011010010100000001110100000010000001010111011101001101010001100011010110101010000110101010111001001000011110101011011110000101001000100101100101010101100110010010110010010100100111011010101000111000111001010001001110111001100001010110101101010001111011110010001101011110010110011110001010101100111000110111111010110011101011001101101100000101101011010001101
cTrader AlgocTrader

【cTrader】VS CodeでcBotを作る方法【Automate】

8/11/2022 8/13/2023

この記事の内容は古くなっています。
cTrader4.8以降ではより手軽にVSCodeが利用できるようになっています。(記事内追記部分)
またcTrader5.3以降では組込環境でもMonacoが採用されたため、そのままでもそこそこ使いやすくなっています。

cTraderがなくてもcBotが作れる!

cTraderなしにcBot作る人なんているのかわかりませんが、まぁとにかくcTrader4.2からはcBotやインジケーターを作る際にcTrader本体は不要になりました。

これにより開発環境の縛りが一切なくなったため、普段使い慣れた環境でcBotやインジケーターが作成できます。

ここではVS CodeでのcBot開発方法を紹介しようと思います。Windows前提で話は進めますが、MacやLinuxでも適宜読み替えていただければ開発自体は可能です。

あえて「VS Codeで開発したい!!」と思う人なんてVS Code使ってる人以外にはいないと思うので、VS Codeについては詳しく説明しませんし、この記事はある程度プログラム経験がある方向けと思って書きます。

 

cTrader公式ページ

なお、VisualStudio Codeを使った開発方法については公式でもちゃんと説明があります。

Using Visual Studio / Other .NET IDEs – cTrader Automate API

以下はこの公式の情報を参考に手順を解説したものです。

 

(2023/8/13追記)

cTrader 4.8以降ではVS Codeでの編集に対応済み

cTrader4.8からは組み込み開発環境のツールバーから「Visual Studio Codeで編集」を選ぶだけでVS Codeが利用できるようになりました。

下記の手順は基本的にcTrader 4.7以前をお使いの方向けの説明です。

(cTrader4.8以降だとしても.Net 6 SDK & C#拡張機能までは必要です。)

 

VS Codeを使ったcBot開発

ちなみにIndicatorも最初にフォルダ作る場所が違うのと、コピペするテンプレートが違う以外は完全に同じです。

前準備

.Net 6のSDKが必要です。SDKだけ入れてもいいですが、何も考えずにVisual Studio 2022をインストールしてしまうのが楽です。

Visual Studio 2022 の新機能 | 無料ダウンロード – Visual Studio (microsoft.com)

画像のCommunity2022をクリックするとダウンロードされますので、それを実行します。

インストーラーが準備されこの画面がでたら.Netデスクトップ開発だけチェック入れてインストールしておけば必要なものが一式入ります。

 

VS Codeの拡張機能

VS Codeはインストール済みですよね?

C#拡張機能が必要です。入ってない場合は追加しておいてください。

必須の拡張機能はこれだけです。

この先も一応説明しますが、この後の手順は自動化スクリプトを用意しましたので、よかったら記事最後のダウンロードリンクからどうぞ。

 

フォルダ作成

マイドキュメントのcAlgo/Sources/Robotsに新しいフォルダを作成して好きな名前をつけます。HellocBotとでもしときましょうか。

そしたらこれを右クリックして「Codeで開く」を選択します。

「Codeで開く」がメニューになければシェルでも開いてcode ./HelloCBotとでもしてVSCodeでこのフォルダを開いてください。

 

プロジェクト作成

VS Codeが開いたらターミナルを開いておいてください。Ctrl+Jで開くはず。

あとはここに公式にある通りのdotnetコマンドをひたすら打ち込むべし。

dotnetコマンドはVisualStudio入れてれば使えるようになってるはずです。(多分SDKだけでも使えるはず。)

HelloCBotの部分は自分でつけた名前に読み替えてくださいね。

dotnet new sln
dotnet new classlib --name HelloCBot -f net6.0
dotnet sln add .\HelloCBot\HelloCBot.csproj
dotnet add .\HelloCBot\HelloCBot.csproj package cTrader.Automate

順番にソリューションの作成 – クラスライブラリプロジェクトの作成 – プロジェクトをソリューションに追加- cTrader用のNugetPackageを追加しています。

(cTraderのcBotやインジケーターの実態はライブラリなのでクラスライブラリプロジェクトとして作成します。)

 

テンプレートをコピペ

Class1.csというファイルにcBotテンプレートをコピペします。Class1.csという名前が気に食わなければ変えても構いません。

このファイルがcBotのメインソースコードになり、cTrader組み込みの環境で開いたときはこのファイルが表示されます。

ここにcBot用テンプレートをコピペします。

using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None)]
public class MyRobot : Robot
{
    [Parameter(DefaultValue = "Hello world!")]
    public string Message { get; set; }

    protected override void OnStart()
    {
        // To learn more about cTrader Automate visit our Help Center:
        // https://help.ctrader.com/ctrader-automate

        Print(Message);
    }

    protected override void OnTick()
    {
        // Handle price updates here
    }

    protected override void OnStop()
    {
        // Handle cBot stop here
    }
}

インジケーターならこっち。


using cAlgo.API;

namespace cAlgo;

[Indicator(AccessRights = AccessRights.None)]
public class MyIndicator : Indicator
{
    [Parameter(DefaultValue = "Hello world!")]
    public string Message { get; set; }

    [Output("Main")]
    public IndicatorDataSeries Result { get; set; }

    protected override void Initialize()
    {
        // To learn more about cTrader Automate visit our Help Center:
        // https://help.ctrader.com/ctrader-automate

        Print(Message);
    }

    public override void Calculate(int index)
    {
        // Calculate value at specified index
        // Result[index] =
    }
}

 

cTraderで「新規作成」したときにでてくる初期テンプレートですね。

ここからあとは好きに編集してください。

 

ビルド

ビルドもコマンドで一発

dotnet build --configuration Release

ソースコード付きならこう

dotnet build --configuration Release -p:IncludeSource=True

 

出来上がり

ここまでで(Windows環境なら)もうcTraderで使える形で配置されています。

実際は作ったものを動かしてみないとなんとも言えないのでcTraderを一切開かずに開発するというのは非現実的ですが、ちょっとしたインジケーターであればAutomate画面は一切開かずに作れちゃいますね。

 

一つずつコマンド打つのが面倒な人へ

「VS Codeは使いたいけどdotnetコマンドで一つずつ作ってくのめんどくない?」という私のようなものぐささんのために(というか私のために)コマンド一発で新しいcBotやインジケーターのテンプレートを作成するスクリプトを用意しました。Windows専用です。

 

ダウンロード方法

下記リンクをクリックするとブラウザ上に中身が表示されます。コマンドが羅列してあるだけなので、なんとなく何してるかわかると思います。

(2023/5/7 追記) PCに.net7が入ってると7を使おうとしてしまいビルドできないため、フレームワークを.net6指定にしました。 (追記終わり)

使用する場合は右クリックから「名前をつけてリンク先を保存」を選んでパスの通ってるところにダウンロードしてください。

 

使い方

ctindi 新indicator名
ctbot 新cbot名

このコマンドで勝手にプロジェクト作成からテンプレート挿入、VS Codeを開くところまで一気にやってくれます。

ついでにビルドタスクも作るのでVS CodeでCtrl+Shift+Bでビルド可能になります。

 

使用上の注意

コマンド実行用です。ダブルクリックしないでください。(多分何も起きません)

また、実行には.Net6 SDKとVisualStudioCodeがインストールされてる必要があります。ない状態で実行すると中途半端にフォルダとか作られた状態で落ちると思いますのでご注意ください。

ざっと作って自分で使ってるだけであまりテストしてません。自己責任のもと利用いただけるようお願いします。

なにを血迷ったかbatファイルなんぞで書いてしまったのであまり編集したくないのですが、おかしなところくらいは直しますので言ってください。

使う人が多いようであればなんかしら別の方法でちゃんと作ります。

 

(2023/5/9 追記)

Windows11での注意点

Windows11ではOneDrive同期が自動的に有効になっており、そのままだとcAlgoフォルダがOneDriveフォルダ内に作られてしまうことがあるようです。この場合はbatファイルはそのままでは使えません。(動きますが、ソースコードが別のところに入ってしまいます)

そもそもこの機能、無料のままではすぐに容量不足のエラーに見舞われるやっかいなものですので、OneDriveに課金予定のない方はWindows11を使い始めたらまずはOneDrive同期機能をOFFにすることのをお忘れなく。(私は気づかずあとから面倒なことになりました・・・)

OneDrive有料会員の方は同期機能を使う方もいるかもしれません。その場合に上記batファイルを使うなら内部のフォルダ名を書き換えて利用してください。

 

(2022/8/17 追記)

新規作成後インテリセンスがうまく効かない場合

私の環境だけかもしれませんが、新規作成後にomniSharpのエラーがでてインテリセンスが効かないことがあったので、解決方法をメモしておきます。どうもスクリプトの使用有無にかかわらずときどき起きる現象のようです。

  • dotnet clean
  • obj/Debug下の.Net6.0をフォルダごと削除
  • ビルド
  • コマンドパレットから restart omniSharp  する

これでインテリセンスが効くようになるはずです。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2026 ajinori