1101010111000010100000110011001010111101100101001101010110010011011110001110011000010111010110110110011000010000011110000111011100001001010011000000111101001100111100010001011110111001010011100000100100010110101011001111110001010010010000000011101111111101000011100101011001001100101000101011010000101011110110101001001010011111101010011100101001100000010100111110010010100100000110000110001001100000 1111000001011000100001101101010010100001000000110000101000001010010010110010111111101111110000011110101001011110001011111001110111101100110010001011010010000010110010111011000011110101001000011001000000111010101010011011101000101111001000111000001000001101011010110110010101111111001000011010010100111111111111010000111001011100010000111001101110011110100101000101011000110101111011001010011001001011 0011000101010011100111010000101110111101000010111010010100010000011010001110000110100010001101110000110111000010001111001111000101101111100100101011010100011000101011101110110100100110101011110100110111001110000010010111011011010111000001111110000100011011001000111001010011001000010000011011101010010001100110111011011001010011010111101010100111111000110111000100101101001100010111010000110111010111 1111000001110111110101110110110000111000000110001001100101101011111011100010010011010011011111101000101011111101000111101110101010000010110001101010000100111100111001011101101011100100100100000101011011001101000011010111110000111110001100000011100000011100011100011010011100101000000010001111001001101100011010110101101011100001010010011000001110111101101010000100101001011001111110011010101010101011 0101110101100100001100101101111010110010110110110101000100010101010010101101111011000011000111111110000110111101010111001101001010011100010110110101001001001111011001111000011100001110110111001011001010011110011011010100110110110111000011001000010101011000110000010111000010010101101100001111000100010000010110100100111011110111101100011000100100000101000001011000111010011000100100010101101100111110 0010100000010001011011111101101101010011100000011000000011011101111010011111010001110001001111100011100001100010001111000110100101000100110001111001010000111000000000011101111011000110101101010110000101100111001100101101111100111101011011111010101000110101010011110010001010100101001110111011011111110110101101001011010001110011001101000110100111000000110001100101010111011011001111010111001101110011 1111001101110101100001101110000010010110110111001001101100011001110110000001000110001101100011100100010011100110111101110100001101010011110100111011111000001000000000011100010101011101100100101101100100000011000001111011011011000001010100111111010011110001001011111011011001100101100001001111110011000000100011101010001110111110101111000101000000100100001001110100000011010010001111001101011101001111 0110010111000101101001110011111101000110101010011010010000001101000011110001100000101001110010011100001101010100110111100010000000001111100110011111100011101110100000010000001100000111000100001011100000100001111101110101001010000001100110000010110101001011110110011000100011000000100111101110000001011111000001101101110101011010111101000000001001110011111111100111100011100000001010000011110100011110 0111111111111101101110111111000011011000101110011110110100101001100001101011111010001111001100100111001010010010000010101101000101111110000100011011001000110111110000101101000110101111010100001101101110111000111101010111110111100111111100101010110110101000110111101110010000101110000100101011011001111111011111001111010010110000100011011011111111000110011010100110001010010001010110000001001100101011 0000100111100100011000110110011100110111100100011110100010111011101010001110000000111010101111011001111100100001000010111111110010001010011010001101001100111101110101101000010110101001010110010110101010011101010110011100100111010110101001111010000010110110010010101111111001010011101011010110010111000111001011011101000111010000110101100000110101011101110101100111111111100001000101110000010001101111 0011111010001011000011100000111100011110100011111111101011011010011100101000001010101010111100011000011101000010011110010110010010110010100111011100010010010110100100010100000000011100011111111000111111000001110101100001011100101000001001010001110010110010100000010111101100010101110001011110110110011111000001110001010111110000101111010010100010111011100001010000000011010100000100011100011001010001 0110010111010001101101001111011001010001101000101110111000001010101100010111010010100111010010000111111101111000010110110110101001111000101111011000010001101001111011010100011011001010110111000000010011101011010001100010101010100111111011001100000101101011100111010111111101100010001101010111101011110101111000100001001101011000101111111101000111111011101011000000000001110001100010110000100000101100 1100101101100101110011101110101111101011100101110101000110110000110100111011101010100110101100110000010100100011000110000000001001011001111000010111100011011111001000100110000101010101011111101011100001101000111111110111110011010001011011100000111100101000111100011110100001111001101101100000100001001111001100100001010001101011111101100111100001010001110011111110011110101010010000010001011101000110 1110111011001100101101011000101011110011011000011011110010000110011000110001110111100111001110010110011011110100111101011001000010011100110011011010110111011001001111101000001000111101000110001001010011100100100001000000110101101100000001001010101001111111010011010110111110100000001111100010001101001101110000001100010010111100110000100010010001000011000100011111111100101000100111000110010001100000 1101001000010000000000100000111110011000100100111001110101100010001101001100110011011110011101011010001101110010110110010001000111011111000100101011010110111011011100000010001111001001101010001111101001000100001110000000000101111110000100100100110011100101110100101000100010101001110100000010111110011111010100111110000100011000110101100010110101010010001101100100000100011111110001011001110110100010 0000011110110101111010110000100101101111110010001101101101011110111011010000101100000011011000100101001011001010001111110000110000101110111100100010000010001101100111101011011101111001101101001110000010001000101000111010110011000010100001011100011111100001110001011101010000110011110100000000100100111111000110111010101110111010011001100110011010111010010011001101101010111000011101010101110100100001 1111111011110001100110101010111001110100100010100000000111100001111110011011000001001100111000110000000111010110001111011110001001110110101001011101110011011010010001011000110001000100010011101010111111101100111011110001011011000111000111011110100010111001110010100010001010111010011010011000000101011001000011100011100011011000000000011000100011001011110100000010000110010001011000001000101111010101 1101100111101010100000110011110110011101110100111000010100101101111000010001000011010001001000000011101011010011001101011001001111010001010001001100100000010110000001101100100100101010000100010100001011111001101111011011111001110011001110111100110110111100010011100101001011011001110100100000110011011000011101100010010011010001010110110000101010100001011001010000010001101010101101010100111011100010 0001111110100001000001001100110010010111100101111010001001100011100000111110100001011100101110010101000111011000101011010011110111111110110010010011110110110010100101000111100000101000010110001010110000011001101111010011100001011011011001001011011110011100001010011110101000000011010000001101110100101001010111110111111001110010111110000101101000111110111001001010101100111100111110110001100101001000 0111000010000110000100010000000100110101110110010110001011000101100011101110010110110110010000011011111011100000000101011101100110111101001001100110000111001100011110101011100011110000011111100110110010000001101101010011000100100011110110101111101001100001111101010100000011001000101011100000011010001001110011000111100010110100111000000110000001010000001011110011000111000111000010100011100000000110 0111110001000010010011100010110110010100011110111101111111110001000000110000000101110001100010111111100101000010010011101000101101001111100100110100110000101101100110100011001000000110101111100101011010101101110111010101101011010000101001001101110010001111110110110001011011001100111100111001001111100011101010000111010001111010110111111110100010000100000000111111101110111101101000110111010100010110 0101010000010101111110001110010011110111010111110000101101100101000000000111011110111111100111001100001010010000010111000101110111110000000000110001101100000100111101011111011110101010111011111000011011001100000110101100101100001001100011101101011000110011100001000000001111001100110011100110010100110001001110100000110000101010111011101101010000010110001101010010111001000100010101011001001001101010 0000100101100000011100110010110010001101111110111101101010100100101010110101111010111101001000101010100000001111101111010100001011001100000100010001011010100101010001110011011011000100101111001001111101000011010110100100101001111011110000001100111000110011001010110000000001000110000100101110110111101000100111101100001010110110101011011000100000100111000000100110001110110000100010011110011111010110 1001011110101101100111110011010110000100100101000010110101111000101010011011000110110010011110001101100010111101001101111100110001100101010010010010001010011101111000000000011100100011111001000101100000110110100010111100111000011000010010010111111001110110000011110111101111011010110001001001110101011110100101000101010100010101100111001111010111010111001011110001001111010011001010001101001110100110 0111111010000001001001001101000111110010000111110111110011011110011001110001100001000100110010010011011100001000001011111100100010001111001101111110110010100110000100001011100001000110001110011001101111010100010010101010010010101110111100100010001111111100000111110001111110110001111011001101000101000111110100001110000110011101111101100111101110110000011011011001110010101100011100100001111111010000 1001101010001100101101010100010101010001111000111001011000111101110010010101010110001010000101100111100000000110101011001001010110101001100101110001111010000011001101001000101101000010010100001000111000010000100011000101100101001111111001110110110010110111111010000000111001011001010010011100000011110011101100001101011011010010100000100111001001111111110101010111001111000000010001100110001101000111 1010000001010110011100101111001011100000010111110000010111000110000011111110101010001011010101100011110101000000110100001110010110010000101100110111100011111101101000101010010100001010100100110111001101110110010011001000001011110100111000111000001001010101001001101000101110011000011100101011001011101111001001111110100000111100010001111010100010000011000101000111100111100100111101001001000011101110 1010110111110100010011111011101011110101001001101001100101011001100101000010011100100100110110101111001111010111001001010111111111001100010110001010101100000101101110000101100111011101010101101001000011010111000111100100101110100001111110111010101001111000010100100001011111000110100100000111010010101010011101011011000001000111010000000110110000001000111111111011101111001110000011010110100110100000 1111111101111101111001000110010101010000101011010011100111011111001111111111001111100000101100011000110001011100101000001000011111000110110000001110011100010010010100101001101000010100000001001011111101101000101111111101000001101101100000100001110101111101001011001001111000100110000110100011100000101111101111101101101010000101111001110001101111001110001100101010001001000111110100000000010001100101 1111011101011001101101110001110111111110110111100011110110110101011110110100101111110101010000001000011101110110101100011010111001111011000100001001011110111011100000001110111010111011101111111101110010001001011011101101101010110100000100100011000010101011110011110011100101110001101110010101001000110111000111000110011101000100010101010000011001000001101010000100100001000110000100000001001000000100 0100011000000001001111001011101010010000110011110110000100111000001001110101100001110010000011000110000011110010000111011000010111001100010010111000100001101011000111000011101000000010011001100011010111111011000100101010111000110100000100101100111000001110110001110101011100011000111110101011101111100001000111100011100011010100000010110011101110011010110111001000100010111110000011100101011101010011 0001110000000111111110110101110010100111010100110001000011100011001101010010100000001111100011100110100111111101010110010011001111011110011100011000110010110000110011110111101001101001100011010001100101001010010000001001101011110001100111111111011101001011010000111000011001010010000110101101001011010001111100100000001000011110110101101111000100111110110000011000111100101000000000010110011101001001 1111111111011001000101011001110011010011100111100110001100000000000110100001110001001011010111100000011000101011010010011000010100010100001001010110111100010100010011010100010111100111001101001001010101111001000101010100111011100011110110101110011101000000100010011111011010011110100010011000101010101000100011100000110010100010110011100001111000101001100111111101111111100000011110001000100101100101 1010101101011000110111000100100001000011101110010110100011101100111010100110000011011010111001001101000111001010011100100110011000001010101010001101100111100011010000010110110110000100100101100111111100100010101110100101001001001010011001101000110011011010011100101100100100110011001110110011001000111010001100101000100010000111011010111000000001010010001101000110010100000011000100100110001111001100 0101111000101111010111010110110011110011101010011111001011101101100101111010000111110001001011111010011010011011100101100011010101110010001111010000111100001000100001100010010100100000110010000110001111011111110011001000011010110000010011101011100100000000100000110111011010110011110110000001010001010100011010010101011001111110111001110011110011010111101011010101101011011001100000001010001011110000 1100111000101001001110111011000000011100011101100010110001000100100110111000101011001110111100101011100000101101110010111101001100011100010000101101001001111110110010010011110101000101000001100011111111111110101100110000111001111110001000100000010100110101110110110110100001110011000101110101101100111111111101111011001111010110111110101100101110100011001011001000100101111001100011110100111000100010 1011101100010010100001100001000110110100001100011100111111000100001100100000100011010101101011101011011010000101000010111011011110001000100101010010100010111111111111101111001100011100110100010101101101111010110101001101110100100111011110010011010000010111101010111010101101101101011110011110111000100011100001000100011010111001111001101001100001101101001000101100000001011111011000101011001100100100 0111111001010011111110100111000110100110100111111010000010111001100110010100110111000101000100011000111100010011000011110010111011010001100000100100001011000100110011010000010011010100101101001001010011100001111011001101000101010010101001011001011101010001010010111010110001010010100111010011010111001010101011100100000011011001110010101101011100100110110001101100100101010100111110100000110100010100 0011010011011010011111001110010001011011011111000011010000010010101100100111111111110111111010111011010101101100100000010000101100111000010011000111011101101101001000111000000100111100000111001101100110001101101001111111011110110000111011000110011110001010001111000011010000010001001110000011101101001101011100111110010100101001001100011000100101000101100011101101111011110001100101000001100010101100 1001101000011111100001100011110110000100001110100010111011100110000100100110110001111001011010000001111100100101111010100000110111000101010101010010010000010010110100000000000100000110111001011100001000111100100101000001011101001111010011001000100010100101001101111011010101111000000010100010001000011000011100110110001100110001010111010101001101011000110110101000001100000110001011100111001010001100 0001000111010011010111000010101000001110000111000110000011001110011111100111001100101110111010011101001110001101010111100110111000101000001101110010000110011001000001110010001101001001101110101111110110001111010111000100101000001000001100011111001100010110001110110111011001011000000111011011010000000011110110111101001010101110011000101000100110110111000011100001110010111011100100000011011011010000 0100111100110101001000111010010110101111110001011100010110000000000101100010101000111010000001111001111100010001101110001100011110100011111111001110001110110111001101111001000001011110010110101011101000101010110010011010000100101101110111010010001100010001100100101000011111101100011100101110111010111110101100100010111000100001010100111010110000101011000000100010010001001100101000111111010011001010 1001010100111110000000100100101000110111100010111110000010111010011100101100010010101100010010001100100110001011101000011110000100010100111100101101110111100010111010100100001111100000100110001101001101101111011010001011100100111011100010010111110011011111101000010000110110100111111010011100110110110001111111011001011001111010010100111000001100001101110101110111011101110001111111100000000101100101 1001010110000100000101010111110000111001000101110111000011001110101110101001000110111100000001011111101100110100001110010010111110111010011000110010111010110011101001101001001100101001110000001010010111111111011011100111101111100011110101011010110101100011110011001110101001101001001000100110100100001001001010110110100011100001111100010010011110110101001111011011001111011010101101101111101101111010 1011011000010011000010011101010100100001011111000101111110100000001000011100011101001101110111110111001001000101111111001010111101100011111101001000100111011011011011010100111011110011011100000000011110010010100100000011011011111110001100110000001001110101000000110011111001110011001001000111100010101001110000111011101110110100100101001100000010110000011100100011000001001001010111010000011101000000 0101001101111000001011111000110010001001000010001101010010101001001010111110101000110011011101100101101011100101000110000000011000010001000000001010000000111000011100011110111001001100011000010101111110010110101100100101110011011100101000111111111000011000101000111100101100100000000101110100001100000010110101111011110111100100111110000101010000000111110111111011110001010011111010110101100111101111 1110011110001101111111100111011010010001000011111111100000101011100111011110000111111010101110101010101101011101010011010100110101100101100001011110011110001011110000101101001011110100100111100100011111111011001110101011011011100011101100101111111100111111111111001011101001101101110111100010100011110000011010111110010000000111010111100010001000101110101010110101000010101101111001011010010100000101 0101000010000000001000110001000110111001110110111010010110000010100000111101001011000011100111100011101001100100010000011100101010010110100111100010111100010000111001110110111101100101010110011000001011001001001000011010010001101000011010010010010001111111111101101100111010001010110101100000010001010111011110100111100000011011011101011101010101110010000111101111110000101010100111101011101101000010 0111111010001000011010101000100010100110100010111100000011110001100001111011000101111101010011011000000111110111100000000011010011011001111001001110010100111000010001010100010010100010010110110001111110000100111000100101111000011000110000100000010010111101000111000001010011000000011110110101101100110010011011100100110111101001001010110110011110011001110111111100101110101001100100001111110011100010 1110001001101000101000111110110101000001101001110100111101000001000111101101111011100010100111010011111110001000010111000010001101111000101011011110000111000010100000110111101001101001101000000000111010111010110100000000111011001001000011100111100110011010101111001111001000000010010011111111000110000010100001110010010111010101001101011110000111011011011010110011111001001111101001101111001010010010 0111101011001011001101010101011010000000010110100110111100000100001010001010000111100010111110001000001101110111100000100000010110101111100011010011011001010001001110011111110000101111010110011001110011001100011011011110101100011101010011100101011000100010111010001111000100110110001001001110010000010011101010111111111000001101100010110000110111010110000101010000110110100000101101100011010000101101 0100001100011111101101001110000110010111011000100111110111011110100100111001000100100111001100101010010101011011001101110011110111101100000010000011100010111010000001010111001111101000101110111110001001110000110000110111100100011000010111011010111001101110000011001001110011000011110010001101001001010010011001000100101011100100100101010011010011001111110000101010010011101110011000011011011000010111 1011011111000110011101011110001110111101111111101001000101101110010011010100011100101111010011100010010010100110010101011100010011101010010000001111001011101001000001010010011110000110100111101110110111111001100010110011110010110101111000100100111010111111001010100110110010000100010110010001110010100111010100001111011111111100100111010001110101001100011111010111110111111000001001010010010000110001 0000000100011001111010010011000010010000000011001000101101010110010000001010001110011011100000110010111000011111100001100011001101110010011100001001000100011010001011111001101111110011110100001000110010111011011010101101100001010111111110001001011111011000011010101000101101011011001011111101010000011110111111101000111110010010011100001011111110011111110101110000000011010110000011000000001000111100 1110011111100101010110001111110100110011000010111010010111001001011111010000010111000110011111111000111101001000000011011101101101110101010101110100100110110000100010101011111111000100011100111101110101100110101011110110110100111110110011100010101100101100100100000011110001110001011100111101000111101001001011010110000110100001010000011000011100101100011101101110101001101011011000111111101010100011 1101111101000111101000000110011010100100001110001011001110001101000101000111001000010001000110111001011110100010111000010111110000101111000110011111100010000111100110011111010111111110001010011101000011010111000101110111111110010000110000000000111111011111011110010111011100101110100100001111101000000101010101111101110110100110101000000100010110111001001000001011001111101100100101110001111111001101 0001101010000011110101001011101011001100011100110111000100000111100110011010110001101010010010000011100001001001001100101001011001001010011101110110001011110110000010101000101100100001000011101110101010100011101100110000011000101110000101010111101011000111111001001110101000010110000101100000000100110110100000110100010000100000111110101001100010010011100110011011000000110001111100010010111000100100 1010001010101100110100100110000110111111000101101011001111000100010010000001010111001100000111010110001011011101100011010011101100000111111011100000110011111000110110110001001111110101110111110101010011000001010110101011000000000010001011010000010010011110111111110000100110011100100101110110010011001010100010011111101001100000111001000010000010011011010100000000011111100000101101001111101101011000 0101001110010000001001010001101110001110111101010101001001100111000011111100100001100010111101111111010101000100011011111101001000011000010010010110100000011111111101000111111000101000001110100000000100111000110101110111010001011001110001101111000010110100001010011111111001101110001110011011001000101001100100111100101101110110000101001101000110111011110011010000000011001101100001110110110110000011 0000100111001101110010000011001000110011011110110001010100001010011000010100110001011010011011000110011010010110010000001111001011111101011100111110100010001111000000010110101100101000100100011110110001000001000101001110001100101111101111010001001001011000000011000100110001010111111111011001101011001010100111101101001001111111100000010110111011111010010110000101101001110010110001010111001111001100 1011110111010101000100111111011010100101101011100000000011011011101010100111000000010000101000010101111011110011011000000010101001010010000111101100101010000000110101010001110000000010100100010001000011101101100001001010001101110110000110101000110000110101111011011100010111010111110111010011110110010101110000110100100011101010000010010100100110101101011110011101110100011010000010001110101000010110 0011101110000011000000110100111011101101110000000000110010110001101011001010110011010100000101010011001000100110101011100000100111011000101011001100001001001010100011011111001011111101011010100000000011111101111110010001010000101101010001011001111001101011111100011001011101000100110100010001111101111001110011101011101101001001001110100011000000100110011001101011001010010001010100000100100100101001 1110011010111000000111100001111111111111110011011101010110001100000000010001110011110000011001011010100101001110111000101011010001111100010100110001011001100101010010100111101100001000000011101010101111000111101111110101000111001011111100010110011010001110010111011110000000001111000110101010000101011011011011111000001010100100011011000100101000100111011101110010110101001100111010010110101111101010 1111101000011100100011001001000110011100111110000010111101010010110110000001001011010101111001100111110100100111111001111001100100001110111001110001001011010100000101000100110000000011110101101010011110001110010000011110100110000110010010001011010011011111101010000001010111001110010101101001010000100010100101000001101111100110100111011100001000110101110110110100011010001110111101010101101110111010 0001011111010100010110110111110000101000111101010111010011111111101000111001110110010010111101100100010001011110000010001001100010111100011001001100000111111110100000101110110111101111010010110001001110010110111100000111111110101000100010100001101111001110000010001110000101011101110110001111000101110101101000111000100000010011010011011010000100000110000011111000100000001101011011001000110001010111 1101101110111100101010001000001101101111010010010110011110101101011100101000001111100101100100100000001101011111101011011011001101101000010000100001111010001001100111101001001101011101111101100100110011101111010111000001001011001111011011110100101000101010001100011111110000100011101100001000111110110011100110101011100100001100001001110110100100000101011100010101011011001010000000010100010010001000 1101111111111111111011001101010111111110001011110010100000110100000001100010001010000101001110111011000110100110101000111111010010001100100001011011010010000110101100000101001101101010110110100000000010000111011100110100000000101110110110101010100001000010011111100001100111011000101000010110111111101011011010100100101111110010110111010101101010000100110000101101011010111000011101010111011011101100 1100110000001111000011011111110110101001001110100011111100100001100010001111010000110011011111010101011111101110110001001101111011110010101110111000110011111010101100001010101110011100110011110010011000001111101101100101100100000010100011000000101010001110011101111100001000010110010010011010100110000001011110001100001011111000110011001010100000010011011001111000010001001101001110110100000101101100 0110111000000111101101110111111101000110111000010010001101101001011110100000110100000100011010110111010000101001000001010001100000111110000111111001001111110000111001010101100000010001011111011011110010111101110110011010100110001010101001010000111100001111101000101010110010011100011000010111101010010011111010100110001100010010010110110100010110011010001001101101111110111111011111100010101000001101 0010111001101101110000011110110100101110110101000110011100110110111000101011100000100110000001111100010110101010101101000100011110110101101110110100110000101011001101101111001100110011100000000010111100011101101010110110010011001110011000111001010000000000101111110000010101111100000010011000101000100000101101011101111100101100111011110110111000111111001010001100100001011001001100111001000111010000 0001110010011110010011111011110000011110100010101111000101100001101010110100001001001000000011010010101101111000100101001001110101011110100011100001000101010011110001101101011001000111011000000101000111111101100010101001001111010010101111011001000100100110110111111000010100110000000000111011111010010011001101011000001100110110001101101111100110011110011011110100101101100101101111011111001100011000 0010110111001110011000010110000001100000101110000101000110100000000101000011011001100011101111010111001101111001000100110001111111000000111110001110100100100011000000110010111101101011101011011100000010101001001101011110000011001110011000001000001111000110111000011110000000001110110011110011011000110111011111010111010110000000100110100011111001111100000100111100010000001010101000001011011110001011 0111010111000010101100000100001010010010010111110010100111110011000000001101110110110101001010101111010010111100110101100000001010100001100010010110111110101111100000111001010000000110000000100100011000010011100101001010000010000101111101001101110111001101101010010111111001110110010110000110101011100000110111100000000010111110011000111010111011111101001101001101111010010001001110111010111001111001 0000101111011110001000100001010011100111001001111111110011101001010111101111101001110111010110100010001001101011110111000010100100101101111100100010000111100000100101100110111111101101011100101100110001010111100011001011100111100000011011101010001011001101011010011011110111110111010110100010100001010111010011000000011110100111110110000001110110111001001011111001001000001011011011101001001100100110 0011010101100010100000101010010110011111111000001010100000011100101000010001011101001011100011011110110111010010110010100100101010000001010111100111010000110100101110010100001110100100101101100001110111110001101011100001011000000011100100001110001011100000101111101010010000111100100000110010111000110100000010010111101111111011001100110011000101111111010100110101001111011010010100010111110011010100 1010010100011101011000110000110011001100001100101111001011111110101100010001011110000001111101000011011001111001110101010101100101110000010111111000000010000001000111111000111011101111101110011011011000011100010000001101101001110001101111010110111001001100111111101100110001111001000111001010101110101011000101101011001001110001100010110111010111111011110100111111001010111110100110001111010000110000 0011011100100111011101010000100111010100101010000010110000110101110010101101010000110101010101011110010011001011100001001100101111000001011101001110011010101100101100100111101111101010100011001100110111000111100110011000001100100100001011011111101111100100111111101111111100110100000000111001100111010100111101001000001011110101011110100001000111001100001000101000110101000110011001101101100000110010 0110100010000010100111000010100100011111110100100100100000010000111010001010001101001101100110111010001111010010101100001011000010011110101100001101110011101000101101001000111011010011000000000100101011000100001000111001111110010011001001100101100100011010000010010001000001000111010001110111110101111001001101100001010001000010010100100110111101111001111011100101011100101001111010110011101111001101 0101110111011110110110011010000111111011101011001010011010101111011101111001111011101111011010000000010110010100111100010101101100110100000001001111100100011101000101111011011011010110100111110101100001001011100111101110110000000101110001110010011011100010101010010100000010110100011101111111011001010110001110000010110100001001001110001010001011101111110100100100111111000110111011001001000111010111 0000011110101001100000001011100011110010101110000000100101001000101101100110110011000110001011111111111111010111110111100011000101011111000110011101110111010101110101000101100111001110001001111110000101101101000001001100010001100110111111111101011110111111110011110111111011110110010100110110011110110001000100000000001110011000100000001100111101101100101100110100010000001001100001001111011101100001 1111000101010000101010100101001001000110111001011011001110110100010001011011100010011111100000101101000110110110000111101110011000010001000011011011011111110011110011100100000011000100100010000100101001011010001111010001101010101010100000100101100000011001011111100001011000011110010100100110010010110101100010000001001110000111010101111101100101101111000111100100010010101110011100110100110111100001 0110011011101000010010001100010111010101101100111101111010000000100100010000001000010110011100010110010101101101011101000100110100001011110101101010011111010000111110011001010101010100100100101100101101001001001110100100101110011000110101000011100100011011010110100110010101011100111001011100010001011111010110011000111110110010001011001001001000010011101011001110001100011111001111000110111101000000 1101010001011011000111010100110101100010111001111111001111001100101011001110100010001011001000110111101110010110000101110111010110111101000100101111001011000101100001011111011011011010011000111010001001011110010000110100110111111001001101111101110100110001010100000110110111001010100010111110110100111101100011000111011000011111001000011100110000001001111101010001101110010101000101011011111011111110 0010100001101010011010100011000010001110111101110001110001001110000001111111011101101001110101001101001111000001101011110111111001010110001100110100101111000100100101010110101111011111010000010011001011101100110001110101110110011010101111011011010010011001110110010101000011000010111110010100011011100110110010010001100011011000111101001101010001110111010011001100000101011111000001000000110000101011 0011110000101011110101011010001111011000010100111011010011110010000000101001001011111110011110000010110111100110000100011001100001001100011010111101011110011101001111101000000000000001010100100111110110000011010001010100000000110111001000010011011000011100111110111111010101101100111101111010110011010101110000100110111011110100100111111111011001100011000001101100000011101000000010010100101101010101 0011111011100011111110000110101101011101101010100011001100001001100101110010111101000100001111101011111010110000000010110000000100100100110101011101001010111101000001000010001101010100010111000101101011100011001101001110100111100110010000000000010101001001001100010100110100100110010101010010100100100111001101010101101110010011100001111000011111001100001100111010111100010011001010101001011111001110 1011000010111000111000001101101001111001101110001100010001010101111001111101000011011001111000111010000100010000001100011111100001101011110100000001100000001010101110100000001101001101100100100011010001111101011001000011000010010111000000010110101000001111000110000000010101100001011010111000011001101111110101100001001101011001111011111011110110100010111100000100110101100001101001000010001001011001 0111110000011000100100000111000101101110111010111010101110000100010011000011000101101000110101100101111010011011100111010100101110000000100000111100010011000001100101001011000100101110001110111100011100001000110001011001100010001100100101010001010100100010100111110101111110101111000111110101010101001001010011001111101000010010110111101010101011111011110110000010011000000011100001010010100011010100 1110010111111101000011011100100110000101010000001111010010001001110100101000111101011111111000110000101010110100111101100101101000001011100111110100001010100011100101110100001010111001110101001101101001010100111001111000001001010001011110110001010010011100100110101011101101001100110000101010111110001000011000001010000011011001111100001000001011110110001011001010101000111010110010011111110111101111 0101110011111011101001110011110101101011110010000101100110100111011010001011000101100110000011111110111000001000100010010100011011101110110111110011011101001100011110110101001011111110011011101111101000101101011111100111000000010110010000011000101010101000100000110010101010010101011011111111011101110001111000100011111010001110111000111111011100010010110010111110110111100101001111101001111111111110 1001110000010111110010001010110100101010101111100001111111101011110010001110000111101011011000000011100001100111010010100110101010001010111100011011010001001010011000001110010011110101110010110000001100111101001100010101010111101100010001101011010101100000011001111001000000011010010111011010000010010100001110110011000010111001100111101111000101111001010001000001110101000111101110100011101111101001 1011001100011011111110011110101110010011010000011110000010110101001011101011101110100101010011011001001111100111110111101001101100110111010010110111110010001010111101000111111100011100010101000011010011101101001011110100011000101010101010010000001001101011111010110101100110101010111100101111000111101110110001110001101001111100110011100010101001110001010100100010100011011101011000010111001010011100 1000011000010001010000000101001101110101000101011001111100000111011001110001001101101101110111000001100100001100101111001101100000010101100011100111010011110101010011011011111001101011101010011001000001111001001001011101111101100100110010001111011010111111010100110011111111010011011111111000010100010100000101010111000001011001011011010011001010110010111011101111101001001110101100010010001001010001 1011100010011000000101000001000001101100100010110110001011111010111010100100101001110001000110101011011000100011011000010011100100000101101100101101011010010011101101011111011100110010110110000111011001001010111011001101011100101111010010110110010100000110100101010011100000101100000100110001101111000000001000000011100101010011010001000011111101001111010110010111001101000100100001011001000110101000 0010001111011000000010001101101111010010100011001100011111110100111111001100100111100010101011101010100110110010110111101110100010110101110001000000011111100100001110111011111010110010101000000010101110111000000011010111110000100001100001000110101011101110010011000100001010011100010110100100101110010100110111001001010000000111110000101000110101011001100011100010110011011010000110110001101011010101 1111001000001011001101001011001011100001101100100000111011101111111110100101000111010011110111011010000100101100010101000000111110111000101001010110011100111100011110010111111001001011001101011001110000101101011110111110010000001100011100011100110110000111010111011010011111010010100101111010011011010100000010100011000001111010111011101011010010010110110000111001000000011010011101101110001110001111 0011111100100010111100000001110110101000100000101010100010100001000001101100001111001000001001011001010011110010000000111100000000010010000010011010011000100110001100100100011000011101001010101011000100001111100001001010110011000001110111110011011110110100011100011001110011101111010010101110101111100100000000100110011001111001101101101011000001100011100000110100010110010101111001100101101111011000 0100101110110011110111110001110010001111110101101000101110011010100100110001010100001010011011001010011101110001111011001100111110011101101100010001001111101111011010111001001101001111010101011100010010111100111001101001011000110100010001010110011100001011111110001011010011110101100010010100011010100100011110000001001101100000011100101011000011010111101001000100011111110100011101000111111000110101 1101000010000001011100001000001110000111011011100101011000100001111001111000000100101001101101000010101111001010100111111111000101011111101101100011101111000100010011110100011100111000110011101111100111110101101101110000110000100100001101011101001000000101111101010001010001000101001001100011111100101011011001110010000010000001101000110101000100111101010111010100111100101100010101111001011000010110 0000000000001100101010111110001010000110010100010100011110110111111000011111001110011010010110101111100010111010111110000010000010001100010111011101100001011111111101011110011101010101001001100110011010100000011110101011011010111101011101010010001000100111111010100100111111110100001000010001011101011001001000001000101111100001011010011101010100000100101101010011010101111100010100110010011000100110
cTrader AlgocTrader

【cTrader】LineAlert【Tools】

2/22/2021 3/12/2021

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

ラインに価格が触れてから考えたい

水平線やトレンドラインを使ってトレードしてる方にはわかってもらえると思うのですが、こう目安となるラインを引いたところで現在の価格がまったくラインにからまないと何もしようがなかったりしますよね。

とりあえずライン触れるまで待つんだ、話はそれからだ」と自分に言い聞かせてそっとチャートを閉じるわけです。

でも結局ライン触れたかどうか気になってちょくちょくチャートを見てしまったり、見るたびに「ラインからは遠いけど入れそうだな」とか邪念が湧いてきたり・・・ばかばかしいことこの上ない。

もうね、こんな無意味なこと考えなくてもすむように、ライン触れたら自動でお知らせしてほしいわけですよ。

 

LineAlert

というわけで、水平線やトレンドラインに触れたら音鳴らして教えてくれるインジケーターを作成しました。単純なインジケーターなのでソースコードも公開します。好きなようにカスタマイズして使ってください。

 

機能概要

チャート上のすべての線を見張って、どれかに価格がタッチしたら音を鳴らしてお知らせします。

どの音を鳴らすか、水平線とトレンドラインどっちかだけを対象にするか両方対象にするかも選べます。

即時Alertの場合はローソク足当たり1回しか音が鳴りません。次にローソク足更新するまでは複数回タッチしても、別のラインにタッチしても鳴りませんのでご注意ください。

 

パラメータ

TrendLine

トレンドラインをアラートの対象にするか指定します。

HorizontalLine

水平線をアラートの対象にするか指定します。

SoundFile

サウンドファイル名を指定します。ファイル名のみの場合はC:\Windows\Mediaを探します。それ以外の場合は必ずフルパスで指定してください。また.wavじゃない場合は必ず拡張子まで指定してください。

BarWait

ローソク足確定を待つか、タッチ後即アラート出すか指定します。Yesならローソク足確定を待ちます。

 

ダウンロード

(2021/3/12 修正済み 下記参照)

 

ソースコード

using System;
using System.Linq;
using System.Collections.Generic;
using cAlgo.API;

namespace cAlgo {
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class LineAlert : Indicator {
        [Parameter(DefaultValue = true)]
        public bool TrendLine { get; set; }
        [Parameter(DefaultValue = true)]
        public bool HorizontalLine { get; set; }
        [Parameter(DefaultValue = "Alarm01")]
        public string SoundFile { get; set; }
        [Parameter(DefaultValue = false)]
        public bool BarWait { get; set; }

        private List<double> _targets;
        private string _soundFile;
        private bool _isTouched;
        private double _exBid;
        private DateTime _exOpenTime;

        //---------
        // init
        protected override void Initialize() {
            //--- soundFileセット
            if (SoundFile.Contains("\\")) {
                _soundFile = SoundFile;
            } else {
                _soundFile = "C:\\Windows\\Media\\" + SoundFile;
            }
            if (!_soundFile.Contains(".")) {
                _soundFile += ".wav";
            }

            // 最初はこうしようと思ったが、AccessRights.FileSystemが必要っぽいのでやめた
            //if (!File.Exists(_soundFile)) {
            //    _soundFile = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\\Media\\" + _soundFile;
            //    if (!File.Exists(_soundFile)) {
            //        Print(_soundFile + " is not found!");
            //        throw new FileNotFoundException();
            //    }
            //}

            // --- ターゲット設定、更新
            _exBid = Bid;
            _exOpenTime = new DateTime();
            _updateTarget();
            Chart.ObjectAdded += _ => _updateTarget();
            Chart.ObjectRemoved += _ => _updateTarget();
            Chart.ObjectUpdated += _ => _updateTarget();
        }

        //------------------------
        // update target
        private void _updateTarget() {
            _targets = new Listt<double>();
            if (HorizontalLine) {
                var hls = Chart.FindAllObjectst<ChartHorizontalLine>();
                _targets.AddRange(hls.Select(hl => hl.Y));
            }
            if (TrendLine) {
                var tls = Chart.FindAllObjectst<ChartTrendLine>();
                _targets.AddRange(tls.Select(tl => tl.CalculateY(Bars.Count - 1)));
            }
        }

        //-----------------------
        // Calculate でタッチ判定
        public override void Calculate(int index) {
            if (!IsLastBar) return;
            // OnBar
            if(_exOpenTime != Bars.LastBar.OpenTime) {
                _exOpenTime = Bars.LastBar.OpenTime;
                if (_isTouched) {
                    _isTouched = false;
                    if (BarWait) Notifications.PlaySound(_soundFile);
                }
            }
            // OnTick
            if (!_isTouched && _targets.Any(t => ((_exBid < t && t <= Bid) || (_exBid > t && t >= Bid)))) {
                _isTouched = true;
                if (!BarWait) {
                    Notifications.PlaySound(_soundFile);
                }
            }
            _exBid = Bid;
        }
    }
}

本当は最初にサウンドファイルの存在確認したほうがいいです。今回はAccessRights.FileSystemが必要っぽかったのであきらめました。

ポイントらしいポイントもないんですが、線の追加、更新、削除時に対応するため、Chart.Object~のイベントでターゲット更新を行うようにしておきます。チャートオブジェクトを使う場合はこの辺の処理を忘れないようにしましょう。

あとはCalculateでOnBar的な部分を作ってるところでしょうか。最後のローソク足のOpenTimeで確認してます。TickVolumeは値が飛ぶことがあるのであてになりません。確かMT4のEAでも同じでしたよね。if(TickVolume==1)とかしないようにご注意ください。

 

(2021/3/12追記)

たぶんバグあります

申し訳ありません、アップデート用にいじってて気づいたのですが、このコードだとトレンドラインのアラートがうまく機能しないと思います。OnBarでのターゲット更新処理が抜けてます

上記のダウンロードリンクは修正済みです。すでに自分用に手を加えている場合は下記のように1行追加してください。

        public override void Calculate(int index) {
            if (!IsLastBar) return;
            // OnBar
            if(_exOpenTime != Bars.LastBar.OpenTime) {
                _exOpenTime = Bars.LastBar.OpenTime;
                _updateTarget();//←この行追加
                if (_isTouched) {
                    _isTouched = false;
                    if (BarWait) Notifications.PlaySound(_soundFile);
                }
            }

 

(2021/3/2追記)

他のツールにも組み込んでみた

この前作ったMTFストキャスティクスでも音なるようにしてみました。


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

新しいコメント

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

cTrader's Life

© 2026 ajinori