1110000001100111101001000001100001110100001110011101011100001100111010111011010100010010101001010110110111000010101111110110000111111001010100000110101001101110111000010111001111101111010011000110111010010000101111011011011110100110000100111111100000010001110111011111011000101111010111110110100011101001110100011010110010101110100101010000000100101001111101110111110011110010001100011101101101010010 0100010001111011000011011000111111100010111111111110000010000101110010011001101111010011110000010011111001001011100111001111010111010011100011111010100011000111101011011101000001010010001111001111101100101111010101100011000110001101011001010001111000101010001000100100001011010111101000101111101100101001000000111100010001001001111010110001100110111100011011011110110001110011011011100011111001110110 1001110001101100110101111000111000001011100111000011010110111010110010101001101011011100001111110101111110000110000011011000011010110110010000001001111100110010111011101101001001100010010111110110101100100011111000110101110110010000011110110110011111111101011100000001010000110011110101000110111001010000100000101010110000001100011011000011011001000110101010111001101011101100011101101111111100100001 0111100101000111000010011100010001010101111101011011011001010001100001111001000000111110101000001101101111000001101111000100100001001010001101111000000101000010100000101000011111100010001000001101001111110111001001110000100100000110111101100010011101100110100100001011111100110000101111100011011000111000001111001101010010011100111000001110000101111101010101101001011110100010101011000001011001011011 0111101111110011110101110111110010110111110110010011001110111010011010101000100000011000100110001111101001010010100110110111001111011000101010011110110011110011110101100110001010011001001111111010001110100011110000111111001011100011010100101100000000001100111001100001101110110111000111111110001101011101111111010100000111110010100100000001110110011111001101100001111110101010011111110001111101110110 1100011011100000000111101011001011011010111101010101100011010010110110001001111011100110111100011011000101000110001001011101111011101110011111000001001000000100111100100000111000001110110011111110000101111001110000111000101000101010000010011011101111101010011110110100010110010110010010000100000010010100010001011101010000100001011111110100110111110010100111000010001101001010011010011011100110100101 1000010001010110011001101000011101110100000111100010010001010010001010101000001010101001000100011101101100110000000110100100001101011111101000001001110111000001010000111110001011010100101000111001001100010101110011000010000110101010011011110110010011111100100100001101111111010101000011100110000001010001100010000011000101110000101100101010000100101100011000100111100110010100011011100100011000100101 0110001100000011110001100000011001011000000110011001010110011010100101101110001001100110111001011100101101111100100001110110111101010001111110010101000110001100100111111011111010100001100010111100101110011100001001000010110111011111000010111011111001001000110101001110100100011011011100011001111011100111101100111110011101101010110100001101111011111000011111001001101110001000100111010001010110101001 1100011000011011000100101011100001100100001000010101100000001010011101011011001110010001111101001011001000010111000001011101011001001010101001000000111001111111011000110001010000000011111101000000001010010010110011000101001111101000110011001000111110101010101011100110011001010110101101101100000000001000110011000110110100011110001111010101011011011001000011000001000010101111010101100001010000101011 1101110110110111100000000010101100100011011011010011001110011110010001010111001101000010100110001110010110111100111110001101111100000100000110111100011010100110101101110110100001000001110010111110111001011011011110010011111011000000010111100010101000010100101011000100010001110111011000110010010001110000101101111010111100011001011001100011000011011001011001101000000111110000011111001110010000000100 0000010110100111111101001111011101111001110000001101101010010000001010110101101101100010000011100010111110101000010110101001110010110011101000111001011000110010111010010011101110010010001011110011100100110100111011110011010101001011010110011101000111101101010000110011010111000010111111011100100000100110100100111001100010000000001101010110010000110100111010100001010001000110001111010110101101011010 1001100000100011110010110001001100110001000011010101111110011000110010000100010001010010000100101001110110010101110110001111101101001110010100001100110011110011000101101000111010101000100110110111100101011001000100100000101111110000001100010110111100000010110001011100101010111011000100111011111001101101000111101100110010001111110000010111010000111010100110111010000011100111111110010011000010010000 1110000101011001000000110010010101010000100111110000101010001001100111100111010100011011101110011101111110101100011111000111111100101111011001001111010110101110110001000011110011011001010111010000100000101000101111100010000000110011100110100011011011000110100000100001100001010011110010111100001100001100101011011110011111000111110100000010001100011011101111001110110000110000010011011111010010011100 1111111110001101011110010010010111000101100000011001000110001001010101111101011110111010100001001100000100000110010100011001100101100111000111001000101010011110001100101111010000011110001101100010001101101110010111000100111000100111111110101010111000101000110110100001110100101110100111000000001000010000101010101111111111101101100100110101100010111000110011100001110001010010010000100001000001100101 1001111001000111100101011100000001010100000101111000011010000100100000011011011101101101010001010000101111010001010110010111101100010101011100111001111100101100110111110100110000000011100101000001101000110100101001100000001010010010010011010000011111011111111111011110110011000000011001011001000001100011100001100110100010101001000110011101010011100001101001101101011001101000001010111101011010001000 1100101000111100000000000100100111000110110000111000111010101100110011111011000010000000000101100100010100111011111111101001010010101111010110001111110011101000000110110111011010100111111010001011000110100100001111011011111010111011000101100000010111001110001101001010001011111111011001101000011011100011010101110001000011111011011101010011100101000101111001111100001111101111101100111000001000011111 0111100110111111100111010001101010001000100000001110000001001101101111110101101011000110111000010101101111101100110001010111101001001010100110001001101010011111100101111111010000001100110010011111011111010101010110100001111001101011010010100001110100000001111001101101000101111010100000000011110011011001101111011001110000001010000011001010110110000011011000110000111000000001110101101000011110100110 1101111101110101110101110110001101001010111001000100001100100011110101010110100001000111010000101011111100110010101100000100010100110010100001011001101101100101110000101101101000101111110011110111010101100100110111010011001011001000011010011100101011100011100110100111000001110011111111011101110001001011100100110101110100110100001111011100100001000000101011100111101011000101011010011001110110000100 1000011111001011110101111000001011100101001101101000001001101111011100111001111111111010001110011001000000010110110111101101111001111011000111100010110110110001000011001101011101101101000110001011011000011000100000111111011011001010010010011001100001001100000100100000111000010111100001111111001100100110110000111110111001101011111100101111010101001100000111100110001110111100110011010010101001110100 1101110010010110101010111001001101001111111010000010101101110100010100111001011100110101000110001110000101011101111101011101100001000000110100000011111100000101001011110111011101010111111010001001110000101001011110000011001001100010011101001111011011000100110111101000100001011100101100101111111111001100011011101010101101010000011010100010010110011011001100111110100110110001011100001111001110101001 1100010001100001100111100111101011011101111111100111110101000010110010000000101011011000010000100100001110100010011011101100100100101010001000001001110001100011110101010000001100110101110011110111110101011001001111111101010010111110011110011010000100100000111011000000001101101010001100010010010100100000010011111110100001010000110010101010110101001110011001011000011100001010001010011101110100000010 0101010111101100110100110011101010010010001100101110010000100110000110100110111001001001011110011011111001011001010110010000010010001100001100011100110101111111100110101111000000101100010110110110100011110001001010101010001100011010001100000110100111001100101010101110110110001100010110110011111100110001110011111101000010101001101001001110101011001001111011011001000000000011010001011110010111100100 1110011001011101010110010110101001000111111100010110001010100100101010001110010011101000101101001000110011101001010011101000100101111000110000001110101100010000111000010100010001001000111100100010001010001110000101011011001111100110101000000100111000000011011011010010010101001111100111101011101111100111110001100000100101101010110100000111101001100100110100111110101010101010100001010000000000111101 1000110110000100110011011101001111011011001110101110000110101001010010000101110011100100000011010110111110110100000011011100100000011011011001101101010000110110000110001000001100010100011100000001000001111111111100111110000101001111110010101000110110011001111001000110001111111010001101010011100101101100110001011100110000111101011011101100110100000111100011111000101001000001111011001110110110000001 0100000100000010100011100010010111110101010011100010110111110101111000101011101101101100110001111110110000101001110000101011111000110010101101010010100111010010000000100000111100001001101010110101000011000001010001001101001001100100010111101100000101011000101101010101001111011110110000011100100100110001001011100011111010101111101110000010110101110001111100110100010101111100101011101111010110000001 0001111011101011001001101110100011001011000101000110110001000000100001001110110101110101110110011111010101101100011111000010100010010111010011011010001110001101001110110100110011110110101011101100011110100001000110100000000110011101100000110101001111110111100011110000101101100010111111011100100011111001100101110100010111011010010111011101100101011110010011110000011010000110100001000110100100101110 0110001011001001110111110110111101001111011100101101111001110001111001000010011111110101110000111101000000110001010100101100011110110010101100101010010110011010100001000000010000100001000110000010110010011111111011010010011011000001111100010010001011011010101101110001011100010010011000010001101001001000100011000110010111110001111001000001001101010101100110000001110000110011101010010010101000100000 1000010101101101001101000010010001001000000101100011100110010011010000001001011101100000010000011001111010101110111111101110011110010001001010001101110110110010111000110110111111001111111100110010011010101010000110001101001010011000110101011011001111011110101000001011111101000110111011010111010000000100111111101010110110000011010000111100100000001100010011110101000010110100110101001101011110000111 1001010111111001111101001001111000000111000011101100000110101010000111000011100010011000010111001010100000011111011000111110000001001010101001111011011010110001101000110101010001110101010011110100001000101010011110010100010100111110010011110100010010111101110001000110110010011001010011001000100110100011011011001110110101011101110000101101001111010011001101001111001010010111000001001010000101101101 1110101001001110000111001011010111000001101111100001101110101101000110011001111010001011110011111110101001101100011100101111001010001001001011010100000010010010110111011101101101010010100000100000101101011010000101000100100011001101100111100111000011101001110000110011010000010000011001001001100000100101100000011110101100001000000011010100100000101011101000000011110100100100011101001001110111000000 1000111000100110100010010110100010011001010010001001001110110110111111100100100111101110110101110001101001110010101100110110011101000111001011001001010101010010001110101100011000110011101110011000010001011000110010000111111111000001110000101010100010100010001001100000010011000000001101000000001100000111111011100000011010010010101001001111011001100100101100110100111110100011100010000110100000110110 0011101011010111100010010111000001111110010110100001011111000100100101100101011101100000011011000000110010101011010110111110010011111000110011011101100001010010101100111101110001000110110001000011011111110010101100000111001010111010101010110111101110011011110101001100111100100000010101100000100010101001100101000111011111111000100101001101011110000011010011000010110111001111010111100010101000010100 1001101101000001000100110110010101011101110110101110001100001000011000010011011110100100001100111110100110011011001011100011001011110100010110010000011101110110000101001100101011011000110011111100010110101011010010111000110000101001000101000101001010010101011100100000101101110100100110110111000101001110101010110101011011111101010111110100100100001111010000000100100001001101001011100011010010000010 1000011001101011101011100011111100100110001110100011010101011111001001001011110000011000000011101001001011110100000011100110001101110010010101011110100110011011110110010110001111010110110011011110010011011100010000000001000011110000011011011111011101100011110000011010010011110001000010110110100000000010100111100011010001011111111000100010011101110111101001011000011111100001111100110011010011110001 0101110101101010010010001010111100011101101101110100010110100011010101111101101001010000100001000101100011111011000010111100010100101100011110010001110011110110011110100101111101010001001011111011011011110100110000011010100101100000011001011001101100001100001000011000010011010111111000000100001101011001101101010010000011110011000001010000111110010111100000001101011111001110011010010110111011010000 0101110101100001110100100000000111101000111010000111111010101110001101110010000011010111010111110011010111010100000101101111101010101010010010011111110011010011100110000011111100111010111101100001100101111010011101101000001100101010100001001011101101101100011110101000011110000110100001001000011011111111111001100101001100011110010111100001111001110111101001100010111000001001010110111111111010111111 0110000100111101011001111010000101011100111100101001010101100110010100110011001111000001000000001010110011101001001100100110000000100101100111101000011011110011100011101101111001110001100010100101011111111001011010010101111101001000001110100101000000100011000101001100101010010100111100000101011110011001001100000101001100111110010010101111101000101101011101001011011111000110110001011010000110111110 0001100011101011100001000101011011101001010000010111000010001000000111111010001001101101110101011100110111000000100000001011011110100000010101001100000000101100001101110000110010010010101100010111101001011101010000000011101010011010101101010010000011011101000000111110101110110101100000001101101001101100111111100001010001111110000110010010001001000100110000101110011000100000100110111100010001001000 1001010110001011111101110010101100010110100001100100110110111110111010110110010010100100001010010000011010010101111101110010000100111000100111010011010110111100000000111110010100111110111110110001011111110110001010001001001000001001111000010011110001100110100110010111111001101010100000011111010101101000100010000100000011011000111111001110000001100010111101011101000100010001111101001111110100010010 0111001111101001101101101010111110110011010100011110011101101011001001101010100111011100111010000100110110101111100001010101011011101000011010001011110001101101001011011100001010100001011001111000000101100010001100111001000001101001011000110010000001110111011001100010010010101100000001110010010000110100100101100010011111001000001110001100110001001010101111111010100001001110010100100101101111011100 1011010001111000001100010111110101101111101111111110101000100010110011001000000001000001000001110101000101111011001111000101010111101100100000110001001011111011000110111101010001010111010110010100110110000100100111010101100010010010100011001011001111001110101101111101000000110000011110000001110111011101110100010110100001100001010000101100011010000010000111111110001000110111011010100101010110100110 0011000101111000110110111011011100101100010001000010011001010101101011111101010011101011000100110110001100010110011111110110001011011011101101100011100100010111010001111010100000110100101110000110110010011000101010110100110110100010101111101110100111111010001101011110100101011101101000100110011010100111101001110000000011101010101100000100100110000110000011011001010100111000011110011100011010001010 1111110110001111110111110110000000000001010001001011110011101100011110010010111111101110110100111110001010110001101100100100111001111001111100011110101000001001010011111010001100100100101000111001001101000111111110011010011111001011101101011101001001011000000111010101010010001110111100011010010100000001001011001010100110011010001000111010101010001110100100000101101010000010001001001011101000100001 0100101100101001011100100111011100100011111000010001010111010100011111110001011110111110011101001101010001010101101111100010100010111010110110011001111000101101000111001001011000110110010010100110101101101010011110110001101000111100001011011001000010111100010010100001001010110101111100010111110101101001000000000111111010001110011000101101100000000110010110011110011000010111000010110101101101110010 1111111110110111011110001100010110100011101100110111001011101001101101011011111100111001001001110001010110010100101110000110101000010010011000001100000100111001111000111011001101000100001110000100100010111000101001111010011011010101010110111011010110000110101011100010101000000011011100010110101000101010110101001100101110111011101111100000000111001100011010111100001001100001111110010111110001101100 0010100010100011111110100010100111111100011110111111111011001001010001101010100101011101000000001111111001011011001100000000100111011000100010001010001011100110000010101100110010011100010010001001001010111011010100011011010101111010000111101011011111101110011111011011011111010000001010101010001100001110100011110110001110100000011011001011101110111000101001010101001001000001000110000111111000100110 1111110111010001100101100100100000100100011001110101011100110010110001110110000110100011011111101011000101000011001001111110101001101001011001010110000001111111111011101110011011001000011011010100011110010111001001011111001010000110010001110000000001111011101110101100110100010101010101111110010010000001011011001101000100010010000110100100101001011001010100110110010010110110111111110110110001100010 1010111000011101100100011000001000000011010010011100010100110000110011101101100111100001101010111000010011101010001001011000111110000011101011000100011011111000001110101101001110010001000100010110011111011010010101110101011111001111111100001111100100011010011001100001110000010101010110100111001101001000000101101100101101001111111010010010111011001111001011101110010100000011111111111100001110011000 0100110010101011101011100010111001110100100111001010000000110100101011111010010011011110110101001111010000100011101110101101001110010010011001011100110100101111000011110110010100001011011101100001101110011110010111000001011011101100011100010011011110000000011010100010010110010010011011110100100000110100111001101111101100111011000010001000001101001011011000111010001110101010101011010011010001110000 0011101101100110011100111010110110011001111111011010010100000001011110011101100000100110101100101111011000011101111100000011101000011110111110000100010110111011111011111110011010011101111001000111110111111000111101001000100000001001100000110001011100110110000110111001010101110111010101000001111111100101110101001100111011000010011000100110111101111010111011100010010110001010101100011011111101100011 0111001111111101111110001011001001010011110010000110101110010001101000101110010111100001110001100111011100010000001111010111110010000010101000001111111010101110001101010111010000100010010010011100010001101110111100100100001111111100011011111111110010001110000011111110010101011001111000101100101100001111100010001001110110101110101011000100011111110010010000100011011101101010000100110100011110101101 1011111110100001001110010000010001010001011110010111000000001100011100000011000010000000101011101001110011101110011000101011001100000110100011111001011000001011101110000101011110101111110100011110100010111101110000101010001101111101110011010001111000001011100011101000110011000000010110001110011110100000011010101010110001111010001000000111000110001110100010010101110011001000000000000001111010100100 1110001100010100000011110110100111100010111001010111000010111010111011110001000010100111001111111000100001110001101110010111101101100110110100100110100110011110001100110111110010000100001000010100001001011100110000001100001100010011010001001001111110110010000100011010101011011111101011101010100011001000110000010000010111111011011001001101101000001010011011011011111010000010110011100000011010001011 1001101001001011100110110000000111100011110110000010111101111100100100101011011110110000010011011010110011111000111011101011110101001110100101110100101111111110100001101100000101000000101110001001001010110001000101010100000101011000011010110101010010011011110011100100110101100001000011111011101000110010101010110000000110001111111001011001011010111001101110101111111001000111000000011010011111110111 0010001111101100100110011111011111100101011110111111101001010100001011111100100001011001011110111001011100011001100001110110011100101011101111000111111001100101100010010111000001011101001010111110001110001110100100110101000111001010101010010111100101010110110000100001101000111000001000101001111001101011110010101000110110010111001110000010111100100000111011001111011011011111010100100000101001111101 0110100000001011100011111111001100000101101101100110101001101100101100010111101011000100101001100100000110011101001000001101001001011110100101101100111000011110001011101001111110010000000110100100100001101111110111010110010110011110000101001001011110001011010010100011110000111101110000100011000111110101001111000110111011001001110010110110110010100101011101110010011101101000001000011000011100011001 0100111011010011111110111011011000101000101011101001000111100111101000100101001000011110001110010111010011000100001100110000001111110110100110110110010100111010110010100011000001101000011001111011110010010001110110100011101111110000000110100010110001001001010100101101011011110000100011010001010010111001111001100011010110010001110001100111100010110111111101111111110100011011001110010101111101011111 0001001011110010110100101100010011011001111010100001101101110111100010110000110101100011100011100001001110111110110101110000101100110100000010111010100000010010000111111001011100000000111110010001000111010101010110111010010110101011110111111001100100001101010111010111110110101001000010001000001111011100001110010001000110100000111010000101010011101101010011011001111001101100101001111111011101111110 0000011100111000011001010010101011000000010000101111111001011010001111010000010111010101111111011101111110011011011010011111011110000010010100110000011110001001101101100011001111100011101110111110111111011000110000101111101101000101011101000000111110010100011101010101110001010100100110011110111011000101100111000100000100101101111100000100111010111011100010010001111101000000111011010111010110010101 1111011000010111000001011001101110001100101001011110011010011001111111000001111110000101011110111111010110010101001110001101111001000111011110100001110101100110011000000010100110100111100000110101000010010001110101100110011000000001000111100101001010100000100011000111011011111010101110011000100111010100011011010111001111001101111011100001100000010101010100101011101101100101111101110011100111110100 1001001000011110100010110110110000101100110001001100011001111110110001111101010100111000010011101110101011110100010010110000111010111011000111110000011001100101000100011101011001000110101110011010110000110000001011000110010110110101110100111001100011111001101001000110101101010000010111111001100101000001111101100110010000011010010010110000011011101011110111101101001001111011110001001110010101010011 1000100001110111101011010000111011100111110111000100101010000010010011000000001000111111010110110111000111011110111000011111100001110010111011001001001000110111101011101110000100001000100110100101100110100100000010101011010111010000001011110101001111000101011101111100110110101100110010110001100010100010011100110110111100110011010011001111010110011111101110010001001010011010001111010011010110001010 1011000010010011110000000010000100100100101001000111100001111011110000001111011110111100000110001101000000100010000111110101011010000110001010010001011001100101101011110111110001110001101110111100000011110110011011101011010000101010010111101101110011000010101010101000101110101101011011010100001110100101000111001101111100010011110010001110001010000101111000100110100110111101100101010011001000100011 0010110000001100000111010101111001010011101000000011001000010001110011111011001010000000011001010010111111001000101110010010100001111111100010100101001000000111001011011001110101111001100111111111000000111100001100100111100111111100111000111011000000011101100000000100111110100111100010001100110110001000000111100000101011110001101011011011101011100110110011110000100000001100001000110010100001101000 0000010000001011110110110110110101011000000000000010111110100100110101001110001011100100010011000110110101001011000111111100101110101110000001101001100011000010111001101001010101001001100111111101010000111011001011011000110110010101110101011011110010001000001101001111110101010010001111001001111001001101101110110111100100101011101100010110110000100011010001000111100001010100001100011011000001000100 1010111001001001110111111110110010001111100101011100011000101110011110100010111001100101100010011000000111111100001000100010110110101010010110011010100011111001111010000000010011101101001011011001000111100111001011001100101011001001100010100100010001001011111111001111000001100101100011101110110000101000110001000101001100000011010111001110011111100110011111010001011011110010101111011100000010011001 0110010010011111110001101100000001111100010001000101101111000100010100011101101101001101011011010001001110100100100110111100111000001100001001010000111100101111010011101001010000011110001011110010100001100100100101101011010010110110100111001011100110011100100101001000001100110000111101011110011011101001000010110011111100010010010011110101001011100101000000000010010101011010100001000100000011101011 1000010101010001001101011100111110011101111100111110000001100100010110001111010101001110111110001101010011000111100011100111110001001100000000000010110110100110000110001000100010110101101001111111110101100101110101110101101110111001000011000011101000001110100001000100010111110000001010110110110011000011010010001110111011000110110010111010111010010001100011010100011000111010010000000001110111011010 0111001010011110111101100011010001011110011111010011101101111011101100000000011000101010111000001000101011101011011101000010110100101010010001001010101001000111010110011100110000110101100000000111001011010010111001101100011011110010100100001011100101110000000101111111100011010100100011000101111001011100010010101101100111110001011011001111101100011000111101111110011000110010010101110110100111101001 1011000111011011100000001110110010101101110010101000100110110100100001101100010100000000000000010001101000100110000111101100100100111101010111110001110110010001110011101110011000000101100001110010011101110001010111000011100001100001000100110101001101111100010010001101110011011110111110110000001000001011110011010000110100101010101010111101101111110001000111110111010100011111001011100110111100100000 0101000000100010110101010000010000000101010010110101011101000110101110001101101111100001000011010101010011010100010100101110000010010111001111100010110000100000100000101101010111011001011101100011010111000110110101110010010000010001101011111110111100101010010101101100110010100000001101001000110100101101010001011001001001101000000101111000111011111101011111100010000111111110011010001101010010011000 1011001010101110100101110001100101111001110101001101010011000111111101001011111101110011001100000010110100010100011011011010110101000111100010101110011101011001010110000000001010010000001011111100011111100001100010101010010010101001001011100110111011111100011010010100111110111111111111110110111011101011010111001111000101101011100011011010000101010000000011011001001101111011000111110010000011101100 0011011110100000011010011110111011000100110110101110110010001000011011110111100001100010010100101101101110010100000100011010111100111100010111111010010100101110000000111001100010000010011100011010100110011010011010010011111100101111000100001001011111011100000100001010010001100111101110100011100100111111011101000101110111000011011011000111010100110010111101111010110011001010010000000011111010100001 1011011111100110110011111010001001111000011110000110000011101000010001111010000001001100111001010100001000110001010011110001000001011101001100100001011010110110111101001111101100010011001011101011010000010000011101110011110110011111000000001011110101011100110000101101011110001101000001010011101111101010110111011100000001101010011011101101100010101100010011101010010110011000001110010001010101011011 0000110111110101000111011011010010101011101100000001111111011001100000000100110001111001010010111111000010110011010111111011111100011101000000111000001000111100110101001011010010000000111001100110111111000011110110110110001010011011010000100101111010110001001000111111000010010100001100101111101101000111111000100000010110100111010100110111000101110110001111011011101100100011000100111100011111111101 1111111001000010100101000001000010110110111000110000101101000001100111001001111000011000111000100010111000011000100011001101100010100101001111101010001011101000110001001000101110101000100010001010100000011110111000011000001001111010111010111110001100011101111011101110001101010011110101001110111000000101101011010000110001111101100100000110011001101000110101001101100110101001101111111000111100011010 0011111010010111011110011101001100111111011001100010110101100100010001001101101101110001011100110010011110010011110100000010001001011000101100101011010001110100100110111100111111100110110010110010111001110010110111011100100100000001111110100100011100110100100101111001001000010000111001001001000111110011011111000101011110110100010100110110101010111001011011000110100101010110000110101001101010011011 0100000001101000111011111011111100101101001101010101100110001000110110111100111000110110100110100100101000000010111011010010000000101111011111010011110011101111011111110010110011110011101011011101100111000000001111101010111010001010000001011011111001101101111100011110000010101101010110101001011010110011000111011010000110100011101000011100010100001000000010011011111010000001010100011011101100011100 1101000101011110110110001000011000101010000111010100011101110110010100001100011110110010110001100010100100110100001010111100000110110000101001101110101111011000101000110010010110001011101000101001110111001010011001111111100011000111100111010100011101111010011001001110001111110110010000110001010111111100110101011011110101010111101001011001110110111000110111000001011001110100000111101100100000001010 0000011110101111010000101101100100000000010100111010000000010000111010001100000011011111010001100011010000101000000110100000011010110101101100101101111111001101010001110110110110100101100101100011110110110000111100000101100010101111101001010111110100110100010000011000101111001001000001000100111111100101110110011000000110100100101010001001010001011111111011011110100100111000010110001011011101000000 0000111000111000101000011110111100101001111001010001100111001110100100100001110111010110100001111000001001000011011010101111111000101101001001010010010011100100011100001000001010110111111001110101110011110001111101001110111010110010101110100110110010111111010100111100110001011001110111110001111000010001000010001111010000001001011001001010110101001001000110101100011000100101000111110101000000000101 1000000011100010010010010110011010011110101010101010001001010000010100110100110110110001110110100110101100010111101111101110111101000000100011001001010110110101100010011110001011100111011101001010001010101010001100011010110001101010110110000000011110100111100011110101010111100110000100000001100100110001000001101001111111001101001011011010101011000010000100110010001011110010000010001001000010110101 0000101010101001100110110010000100111111001001100001111000011010011100110101000010001100110011101111000001100100101101001000101110000000101110010011000010100111000101111111111111011000101010011101110011100110100100000100111010111000100011000101111001010010101000000110000110101110010101101001011110011011001111001110001100010000111010010110010001010110010100011010011101000111101100100010111101100011 0000001110101101011001010110011000011101011101101111111100001100010111100011100101010110001101111111011000100001101010010110100000101001011111111010000101100110000100011000001100110100010101001110101100111010111001110101100110001001110011011101100101000010101000101110100011101111010010111100001110010011110001100111000110000110100101011100000100001000101000001101000010111001001001100001011100100011 1000101100100100101100010110110100100001000000011000001000000111111101110010001101000101001101010001000101000100100111001000010001101110101001011001010111100111011100001000100111010010101001110111011001100000100010001100111010111010100100101010110110110000110101110010110001011001010101111110011101000111111101011011110111111001000111100001110001111100110010011001000011001111111110010110111101111001 0100010101111100101010011001100100001000101100110011110100000100001000011011001111111100110100101011010001001001100100000010010100101010100010110111101111000110110001000110000110101011110111010100111101110010101101111110111101111000010101100010100001000100001101101000111000000101001011100000101101101100011100001010110100101011111000010100000011111101010101111001111000010101001000000110100111110111 0001010010011100000110001011101001101100111111001111110110001010100110101101101011001001011111101111001100111000010111010011100111101011011110100001101001110111101011111001111011100111110011100100001011010101010111010111000010000111111110001011110010010011111011111011000101011110000011100100110110011000001011000101011010011100110101010100001001011101000101011011101101100001010111101011110110110000 1010110100111101111111100000010100111100011111100101111010100101111001101100111010110000000110001110011011010100111001111001001101000101000111100011011111010000001101111111010000000001010110101010101101100111110010010100101000101101100010011011111000010011011000010010100100000010011101101100011001010011101000010110000010001110001110100100001001100001111100101000100010111111010101001111101011100010 1101111100110000110111010011000111111101011010011000000101000101111111101010000100100101111011100100100000011011100001111001010101110001111011011001001000000101100100010001111110011101010011000001100011000011101100000010111110011110001011011101100101001110101101000000100000110001111001000000000011100101100001000111010101110000010001011011000101111110001010010100001111011100011100000000001010100111 1111101000100110110000000000111111000100110001100100101010001001000110010111111010101110011110100101000101011010010000111001011010111101000001000110011000100000100110111000101101010100100101111010111010000100110110000110100110100000011011101000111011101110101010000101110100110111000111000111000100000110001010001000111100110010100101101011100000010000001010110101110011011100011110101111010111011011 1010100110011111101110011010100101100110111101111011101011110111110011100010110010011011000100111111110101111111010000101101010001111100101100110110111100100100000010101010101101000000011011001001010000111110101101011000110000111101110110001101010110010010011111110110000100000001010001110010000000111111110001101000111001100000101100111011001000100111101101100101111001010010111000010111101011110111 0100101100010001100101001100011111010111100010000101110100100001000111101011011000011001011011101011001011011011010110000011100111010000101001000011101001111011100101110011110010111110111110000101110100101010100111100010010001000101110010000000010010011100100000100101011100100011011001010100000101101110100100110000000010111101110010001101101000110111101010100111101101101011100100110011111001110101 0001100001100101101100100010001001100100011011011101111011111101101010001101011101110100010001000111111010111011111011111000000001101000000110011000001011010100100101010100101110010000010001000010011101000110111100010010010001100111100011101000000010110000000111001010001000010111010010011101001101001111100000010101101001000001101101001000110001110001111000101000100110110010000101101111011011111100 1101100000110010001101111111000110010111010100111011111101101001111101101100100001110010011011110111111101101001011100010111010011110111101000100101101100100101011100101111100010000111101000101010111111110111100001000000001000010110001110101101101011000000110011000100010000001110010010100111011010110001000111010100100011110011101010011010101011011000111011001000010100001100101110110100101000001110 0111010110001101011111101111000101001110110010101011010011110011111110110100001100110110010100001011001001011011010001101100011101110110100100000100111011010011001010011111000100100101110111100101001000011111100110010001100101001100110110010110101010010111100101011000111000100111110101010101110001101011001010011111111100101011001010101100100100001000111011001101111111010101110111001010110110010111 1111100110011001101001111011011111010011111111100010101000110000000000001000011000001111101110100001011111100100101001000010110111001111110000101011101101001100000101100011011100001101111100100000001100011100001101111110001100100001001100100011000000000000010111101000001110001111000100010101100001000001011001110100001000101110110111000110011000110100011101011001001001010001001110010111010001000101 1110001000010000101110100100000110011010111101011010001000101001100000111001110010100011010010101001101110111110111110110001001100100110110100010111111010111010000010010000101100111001100101110101001010110001110010111110001100010011100100111000010000011010101101011011011000000100001001010010110001010101001101111000000111001001011000010100010101101110010100001100111001010010110111011100101100110110 1000000111010110111101100011100111110100111110101110111100011000011010111010000101111011100011100011011101011011010011100101000110001010001101101000110011101100011010011011100001000101100011100010000111110101011111001001011000010000001100010000110000001000001111101101101010101001011010011000101100010010000010000000011010110101000001101100100110010010110000001010110111101111000100010001000000100111 1110110100000101001111010110011110101000110001111001110010100111010111100110110010111011111110111101000111011011110001011110101110110100111111010001111101101100000001000001111111011110010010101101111100101000110000100111000100000100010110100011001101010010101001101101101011000010011011110101100001111100111001101011111110111011100101001111011110001100100010110011100011010100101101011101111110100111 0011011000011010101000010101111111010010000010011111010101010000110001011101100010110111110000100101010010101011001011000011010010011010001000010100010110010010010111101010010100011110000001001001100011111011110000011011000101010101011101011110100000100000000001101000110011101101101110100111000001000000010011100110101010000011001001110011001000010001000011010101101100011010000000111010000110110110
cTrader Algo

【cTrader】水平線で音鳴らす【SampleIndicator】

6/6/2022 8/18/2023

3年以上前の記事です。内容が古くなっている可能性があります。

水平線到達で音を鳴らすだけのインジケーター

久しぶりにcTraderプログラムのサンプルコード代わりの単純インジケーターを公開してみます。

コメント欄から「水平線で音鳴らすcBotできませんか?」という感じのコメントをいただいたため作ってみました。(コメントありがとうございます!)

機能としては「チャート上の水平線に価格が到達したら設定したサウンドファイルを再生する」というだけのものです。

cBotではなくIndicatorとして作ってあります。

単純ですが人によっては有用に使えるのではないでしょうか。

 

ソースコード解説

全ソースコード

using System.Linq;
using cAlgo.API;

namespace cAlgo {
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class HorizontalLineChaim : Indicator {
        [Parameter(DefaultValue = "Alarm01.wav")]
        public string SoundFile1 { get; set; }
        [Parameter(DefaultValue = "Alarm02.wav")]
        public string SoundFile2 { get; set; }

        private double _exBid;
        protected override void Initialize() {
            _exBid = Bid;
        }

        public override void Calculate(int index) {
            if (!IsLastBar) return;
            var lines = Chart.FindAllObjects < ChartHorizontalLine >();
            if (lines.Select(l => l.Y).Any(price => price < _exBid && price >= Bid)) {
                Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile1);
            } else if (lines.Select(l => l.Y).Any(price => price > _exBid && price <= Bid)) {
                Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile2);
            }

            _exBid = Bid;
        }
    }
}

はい、これだけです。短いですよね。自動生成されたテンプレートに数行追加しただけです。

インジケーター始めてで自動生成コードの意味がさっぱりわからんという方は先にこちらをどうぞ。

今回は表示させるものがないので5行目のIsOverlayはfalseからtrueに変更しておいてください。falseだと空っぽの別窓が出てきてしまいます。

7~10行目はインジケーターのパラメータとして音声ファイル名を指定するようにしました。

“C:\Windows\Mediaフォルダ内ファイルで指定する形にしてありますが、自分で使うために改変するならパラメータ自体なくしてしまって21,23行目の命令文に直接ファイル名指定してやっても構いません。

 

「到達したら音を鳴らす」やり方

「到達したら音を鳴らす」をプログラムで表現するにはどうしたらいいでしょう。

単純に値動きがあるたびに「その値動きにより水平線をまたいだ(もしくは重なった)か」を確認して、音を鳴らせばいいですよね。

式で表すなら上抜けなら「1Tick前の価格」<「水平線の価格」<=「動いた今の価格」、下抜けなら「1Tick前の価格」>「水平線の価格」>=「動いた今の価格」ということです。

インジケーターにはCalculateという毎Tick実行される関数がありますので、そこで上記の判定をして音鳴らす処理を入れてあげるだけの話です。

・・・と、その前に「今の価格」はBidという変数が用意されてるのですが、「1Tick前の価格」というのはIndicator側で用意してくれていないため、自分で用意する必要があります。

12行目で定義してる_exBidがそれです。毎Tick更新する必要があるためCalculateの最後(26行目)で_exBid=Bidというように更新しています。

 

Calculateのコード

if (!IsLastBar) return;

18行目のこれは今計算してるのが最後の(=今現在の)ローソク足分じゃなかったらなにもしないようにするためのおまじないです。

インジケーターは初期化後ローソク足の本数分だけCalculate()を実行します。このインジについては過去ローク足分の計算は不要なのでこうしてます。

var lines = Chart.FindAllObjects();

19行目のここでChartのFindAllObjectsメソッドを使ってチャート上の水平線を全部集めてます。

毎Tickこの処理をするのに抵抗があれば、初期化時に集めてフィールド(メンバ変数)に持たせておいても構いません。ただし、その場合は水平線の追加削除時にフィールドの値も変更する必要がありますので注意してください。

次の20~24行目部分が本インジケーターのメイン機能部分ですね。処理としてはこうしてます。

if(価格が水平線のどれかを上に抜けてたら){
    File1の音を鳴らす
}else if(価格が水平線のどれかを下に抜けてたら){
    File2の音を鳴らす
}

ifの中はC#のLinqという機能を使ってるため、知らない方にはわかりにくいかもしれませんが、下記と全く同じことをしています。

foreach(var line in lines){
    var price = line.Y;
    if(price < _exBid && price >= Bid){
        Notifications.PlaySound("C:\\Windows\\Media\\" + SoundFile1);
    }
    break;
}

(「価格が水平線のどれかを上に抜けてたらFile1の音を鳴らす」部分のみ)

Notirications.PlaySoundはcAlgoの機能で指定した音声ファイルを再生してくれます。

注意点としてはフルファイルパスを指定すること、文字列内のパス区切りは\\で表現すること、ぐらいでしょうか。

 

これで完成です。

これだけじゃさすがに機能少なすぎるかもしれませんが、自分で作るならここから好きに編集していくことができます。

ぜひ理想のインジケーターを作ってみてください。

 

(2022/8/12 追記)

現時点ではcTrader4.2で機能しません(泣)

先日アップデートされたcTrader4.2ではFindAllObjectsが効かず機能しないようです。明らかにcTrader(Automate)側のバグですね。

cTrader4.2で機能させるためには18行目あたりに以下の1行を追加してください。

Chart.Objects.Count();

コード自体に意味は無いです。意味は無いですがこれで機能するようになります。

FindAllObjectsが普通に使えないというのは結構致命的なので早く修正してほしいです・・・

 

(2023/8/18 追記)

上記気づいたら直ってるようです。cTrader4.8で追記なしでこのまま動くこと確認済み。

 


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

新しいコメント

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

cTrader's Life

© 2025 ajinori