0100111001110101000010101001111010010001110000010100100100111000000001011110110010101110011101001011011000100111010000011110100010000111011011111111111010010010101101101000111100110110011011101100101100011000011011000001100001011000011101001100100100111101011100000100011011010001010111110011110100101010111101000101101010010101001111111010101110000011110100010011101011010100101011110100010001011000 1011111010101011110111001110011001010010101001011110111111001011011001001100011111110000000110101110111011111100011001000000001011011010000110000110001011110001011000101100100110101011001001001000110111000010000010001110011100101111011010100110100000010010101110101010010001100000000011111110110010100110111010011110111110000111101100101100101101010101000011110111010010010000110010111110110010010101 1100101000011110010011111010011010101001101001111001110000101001111101001100000101010100000111001011000010100101111011101010001001000100010110100011110010011011110000111011001100010101100111100001000001100111000010001100111000111111110010001101011001000111001000100111110111101100110111001101000100001001111010010001011101100100101101001000011010010100000011011010000001011111010111111001011010010110 1111111111011111101101000110110010011110111010111001010100001110001111101001111110011000011001000000000011000110101101001100100110111101100000001000001110101110101111110011000111000101000001001101000101110001111111000000100111000101001001100111000100011101101010100110000100011101101011000100100011000001101100000100100111100010111010001011100001010011110111011110011100101010111001100010010000010011 0000101011110001100110110000000010011001011001110110001110010011000001010011000000111111111000010111100101101000110111100110101010101110011110100010000110111111011010100100110101000000101010001100000111110101001110011111111011010101000101010001101101001111101011100111000101011100111010111100101011100000100001110000011010101110110000100001010110100000100101000110001100111100011011100101110100001011 1010100101100010001011000111001111111111010110010011100010010110111011011110000111111000110101111110101110011100111110100101011010001010111111100010001111000010010110010111110111011011100000001010000001000010111000010001100110111100011011101000100110100111001000011100001000101100000010111100001110001100111111010101100001101011101110011111111010000001111001000000010010001000111100111000111000010101 1001111011011011101010101111000010100000001010000001110101001011001011011100010110100100010110110010001101101110000010001000011011011011010011001111101101001001001010110100011011111001110001011001100110001110000000111101011101100111101101010000100011011101011010001100001011011001001001100100101111111100101000011000001110011100111111101101111100000100001000110111001111110100110001001111010000100110 1011010100100011010010010111001100100001110000100111100010101100010010100010011100010111001011101001000001110010001101011111101011110001110101011010100100000011111111000111000111111011100010000001001010010000100111100001010000000110101001001000101101000011001000001000010100101010111000010010000100100011100111111011111001000000011001000111101000011101111110010001101011000110011010000100100010001000 1110011111111000110011100011011111000011010100010010010001011011101100111111111100000101000100001001011101011010000101110000100000000010110000001100010101110001100000011111110111000111011010011001101111110110111010001011100111100000001011110100000011101100110001111111100111101110001001001011100110010011111110100100111100000111010010101100001001110000011001100001110111010000110000110101100111010110 1110010110100101111011111000010011110111010101001011100110101010011011101001000100000010101001100000101000011101111100111011101011011100001000010001100011110101101010001111011010100000111101010110010010010100011010011100001101101100010111011010011010101011010011100101011100010010001111011101011000001001111010100001111101000101101010100011001110110010111111100101010000001010111001011011001010100000 1010110100110000011011011001011101100000100100000110011010101100001011100110011100000010111010111011011111100110011010001101000001100110111000101011010100011100001001010110011010110001000001101110000110001001100010010110110111110111111101010000011000111000101000001110110100111000100100110101011011110011101011011011101110111101011000100111000001101011110001000010110011111000101000110100010010001011 1010110110011111111101100110001101100001010001000101011110110001011011001100111010011100110100010001011101111010101001011011110010101111010001000000011110101100010000110111011000101111011110000110000000110001001000000001011011001110010110111001111111101111111110100001001111100011011101001110000100101100010110101001100011001101111001011010001011011001001110101000111110000111000101111000110000010011 1100101001101101101011000001111000000001111010000010010110110010110100110100010111010011110010111111000101100010011001010101000010000100010101010000101010010000011001110001001101010011111101110000001111110011000101100100001011001001000110011010000100111100101111111010101011111110001000100001100100010101110011101110101010011001101111000010010000010110101001000111100000011000010110011000111111011000 1101100001000001101001111110100100000101101111100100011010000110001000011101001010110011101101010010011110111110010011101001011011101001100100011100110101100110000001110100100011100101000111100110101001110001011010000100110000010001100111010101111101100011011011000000101111110100100110011011110101100111010111110010000010001111000110111101001010101101001100111010111111001001010111000110111000001110 1101111100000000111000010000110100010011011101000010010010100111110101000001101101111000111100110111111000010100001100010100111100100101110101111010011101001110101000011101100010000000001010000111000100110001100100101110011010001001001001001001001110000110010000100101010010010000000111010111100100111000001011101011010010100011011100001000111011001011100010011100010101010111000000111000101100110111 0001001011111101010010101101100111110100010001011100001011111111001110101101010010001110110000010111011111110111111001011000111101000011011100001000011100010100110101000000111111011100010100111010011110011111100110110001010111000011111110111010100110111001110111100010011011000001110010011011011001010001010110111100000000010111001111001101010010011001101010000011101100011100010100001011011000001110 0101011100111000101001110101000111100111101001011111101110010011001101111110100011001100010000101111010101011100101010110011111000011111110001111111000110001011010000001100101111001111101010010010101101101000001101000101011001010100011001101111110100010010010100001010100010001010110011100101100110010100000001010011110101011011011111010010100111000101110111011111011011000000101011001011111011000101 1000001010110100010000100111101101100011000100110100000001010011000011011100011101001110000001111100001010111011111010110101011111110010001101011001001011111100101000000101000110100010111011100100111010000100111001000101001111110110011001011101010100001101001110011110001101001100111110100110000111000000100001000100110011011100101001001011010001100101101101011011111011000000101011010100011001010110 1110100111010000000010110110100100101010000000110000001000111100010000100101100010111001011011110100100010100111111011000001000110101001011111101011100110111110001110010000011111000000010011011100010111101111111101100100101011111010100010111110011111110100001000000000000110001011100110000100010010000011010011101111001111011011011101001000000011101001011111101000010110101001010000110010011101010010 0000101111000111100011010100001000000100001101010000011101001101101011100101001011101110011011011110010001100111110011000010110010101010100101100101110001110010110100000101010101000100011000111001100100000111110100011101110011110100000100111011100111111011100101110110101101110101110111111111101110010000111100001010110101001111011010010101111111111010101011011100000000100101110000100101000001110110 1010000111111110100000001101000100100100100110111100110000101001011110011100001011101111010101010011011111110011101111011100000101101000010100100001101110100101010000010110011000001100111101010100001101010111011101111110100000010000010011111001101101001100111111000011001101010110101101010011000101000100111100000110111100000110000100010000000010000001101011000010010010110011111001101111100011101111 1011011111001101011111110011000000010100100110101010110110001010001001110110011100001111010100110010001101101111111010111101101011111100110100101100110011111110010001101000110010111001101100011110010010010011001000011010011011101000000101001010110000011001100000111110111000101011000000100111100101000111011000011000101111011100011110001100100101000010011101011110110111010000100100000110010000111101 1111101011110111100110011101001000000100001001110000101001010010111001011101110100011000001010101100011001000100110101110111010110111000000101110100001001010111100101100001101100011110101011001110110001111100111101010000010111000101000001101011100001110110100010111110000100011101101110110011010000010010000101111101010000100110100100101100101010101001110010011010100010000010111001100010010111011011 0010000101000001001110011001111110000111100111001011001101011010010110100111110110100101101100111111000111001010110111001011001010010110010110100111100010110000101110011100001000110101101110110001111011100111011011010000010110110000110111110111101110001011110110001000001010010111101110111010111000101011111110110011101100000110110011111101100101101100110100100011001100000011110101100000011001001110 0100110110010110001101100100011101111000011100101010101100100101001111110000000001010011111011100101111101010111101000001101011001110011011011110111111001101001000010110000101001001001111000101000000110100010111011111001110100111001100011110000011001101100110111011101111000011101011000001100110001100100110111001111111101000000011100001111010011001011001010101100000000100010110000000011100001100011 0110111001000111110100111100100100110100011000010100010000111101000011110011011100110001110011010000001001101010110000010011110111000001101111010110001100101001000110111010011010110111010111010011010100010111001010100011001000100011011011010001011000010100010101011010100010100111001110110111111101011011111001011100110100111000100101111101001001100001101100100000010110010111100110111010010100010011 0001101110111001111001100000010010101111000010000011100010001000000000100011101110111010111011001111011011100100111100010000111101100101010100010010101101000010101111110001001100011101110101100011010011010111101010100011011100000010100101000100111011111011100010101100011000001110011111111101111100011000110110110001000100100011110110100001001010010110100010111101111101001101001011110001101000011000 1011001101001010010011100110100011010101011110011011101001000001100001001011011101111001001011111011010111100101000000100001000001010001100001000000100111110001101110000011100010010000011110101011111110001010011010110100111100000001101011111011001010010000010111110011000000001110100011001101111011001000000000001001110011011001000000100000001111100100101101101000110001000001101001110101100111100110 0100100010100000101011001011010001101110001110110110100100111001100110010110011110000110001010111111010100110100100010111100100000111110100010110011011111010111101110100101110000101110101000111011110011110100001101001001101100101110111000001110101111101100011001100111100110111100111100011011110101000011011001101001001010011111100001011111000000000011110100111100111011011110000100110111101101011001 0100110111000111111110111110000011100100011110000110100101111010011110010010000011110110011010001101101111010100011110001001101000101111011000110000101100001100000011000001000010010100011100001000100111110111011100111110100010000101010111101110011000101110001010101110011000110011111001111101111101001000011110010110000111010101111110101110111011001001000111001110010011000000011010000010011100110110 0011101010011010000001010110111011110110010000101011100001010110101010010000001011100001010000001110110111001010010001011001110110000111110111000011011100010001100011000101111011110110001101110010110011101011100011110011001100010111011010111100111111011001111010111010110111011010110111110010010100001011010101110011000111011000010100000101111100000000111000011100011001111110000001110001110110011101 0111000110001110000111111010101100000000111111011000101101111110001100100011000010011111110011001011110010110011000100101010101000011100100111100111011111000011010111101101011011001000011111010000110110100010011101000101001011011010111011101000100001010000010110101011110000000000000110001111001000000000011110001001011010000011111101000010000001001010001000110001111000110111011110111011111001111111 0011010110010110011010010110010010110110000110111100110010001001111111011110110010000000111010001111000010100100010011000101111111011110010110111000011010001110010110001101011000000001001010101111011001100100001110110011011011001010001010101100111000011011010111001110110010101100001100000101001000110110111101000001000010111110001100100100010001011000101101101110100001011110101111101101001011001100 0001011110111101000111001011001110001000000000000010100111110111100011110010100011100100110110111010001111001100110100110010001101111110001101111111010100011100001110101111111000101001111010001100110111001101111101101011110000000001011010100101001111110100010000011011110100100010000100001110011000000001100001111010111001110000111011001100000000011001100010011100001110101101100010100010000011100111 1011001001110110000011011011001110010000111101111011001000101110110010010011110001110001010001110101011011011000000010011111011100100011000111101100100110011111110001110001000110001001010100110100001110000010111011011011001110111000111100000011110010101010111000000110010000110011001111010111010001110110101101001001000001101011010111010110010100001011111001111000011011111001110111101100101101100001 0011011011000110001110000101000001011101011000000101110101010011001010000010100100101001110111110011110111001101001001011110001101111100000110111111110101110110110010001000101010101010011100111000111000111111101011001110011100001101100011001101011100001001101011010010011101100011011111010000000000010111110101000101101001001011111010010000100010111011000100101100111110110100001001100110100011111010 1001101011111000011010000010010001001100111011010101101100001010010010110010011111000101100100100011111010001110011001111110001101101101111010100110011111010011001011010100100011110010001001000011111111001010111111010000101101101101111010001011110001111011100011101101111110011100101101111100010011001110011101100110000000101111111110111101101000101100101010111110111100101011000111111010101111110101 0000110101000101110001101000111001110101100110110000100101111110001001011111111000011000010001010110000000101011000100010000101010110111111111000000001110111001111110101110110110111101100101001100011111001101011010001010101000100010011110001111101000010011111100001000010100101000010001011111010001110110001011011010101011101000111000000101000101111100110111010100010100101110000100001001110110001010 0111000000001001101111110000000111100011100000101101011111110000100110101110001010110111101001101011101101101000011100100110011100110111100101010000101101001110101101110001001111110110100100111001100100000100110010010110111100010001110110111101111011110110001011001011011101111111110111001000000000010010010001011101010110010111101001100110011001101001111101011010110101011010001000011010100101100111 1111110101110100101110100001000011101000010101111111100100000110001111000001000101110000111101001101010001011011100010001110000110100001101000111101101100110000000110011010110110001001010000110011001100111110101110101101011001100100011001001000110010011001000100111010110000010100100001001110011100101000100000011011000100001100100100000000000101011110110000000001111010001000000001000101010000100011 1111110011011101110110010100111110111010110101010001000000100110111001100111001010011110101111110110010000111111110010010101100100001011011000000110100100111101101101010011110101111101100011111101111010101011001001001111101111001001100100101111000011010000011101110010000011000011001010001111111010001110101000111001111100111011110001101011110111011001101001111100011111100001001010111111010100110101 1100101111010100010011001111011100001000010000100001010100001000111100001000000110110100100111001010000100000000110010010010110010101001010000110101100000000000110000011001011100010110100010111111001110011111100011011010100010100010010001111001000000000111000100101011110110001010000100000100110011010011101010111111100000101011001011101000000010110010010011001001101100011100001110011011010000110001 1000111100010001100001001011100101111010001001111111100011001011111110100011100010000101111010000010001000000001000010001101010100111000100110110010000010010010001001011010001001111111100010000110110100001110010000101101101111110101110000100010010110010011010111100000000100010111110000010111011110010001000111101110010000111001111011101001100010100111100001010011110111111001001000100100100101100000 0011010101101111101110110101001011011000111000101000001101111110111100100111000011000101000101101101001011000010000001100001101111011010000001101100010010101011010000111010111110110100101100110011110100101011010001011101110111111011110010011000110000101001000101011101111000011100000000001000000110001010101111110001001100101000000100111010100000011100001000011001001000000100100110000010011101101001 1110110101101000110001001011011100001000111101111110010010101101111100010100000100011110011001111010011000111111011011110110010110101000010110110101100101111001001101001100110110010100001000111011001110111110000111101011101111000101100111110101011010000010001000011100110011100111011010110010101111000001101101100101100111000011101001101001001111110111101001010001010110100000010100100000110010001000 1010100100101100100011010000111010101001110100000110111001010100010101101000110001001000110110101011011001001011011011001101111001110100111111100011100001110100100110101000011100100100101100011101101001101001100010111111101111101100100111110010011110111000100111110100110011011000101111110011000110001010101110001001110000011010011111000001011100010001100111000001111011111011101011010100100011010011 1010100110111100110001000100100101101001010000011101111100011011110101110000011011110000100010110000100110111110000111101010111100101000000101010010110110101111110011110010100111011110110101001101001010110010101101111011110001111101011001111100110100011000010011111000101100000010101101101100111011001111001011010001011111111110110111101000110000001010101100000010000000011110011101101110010010101110 1010000000000010011000010000100011000001010110001010101110111011111101000100111111100011101101000000000001100100011001001110101000011100111101110100001110000110111000101111010111010100110100100110000000110001010111100011011011011100101001000110010111100001010001111000000010010111110011100001000001111101001110011010111101111000110010001101010100010100011010011100011010110001111000001010101011010011 1110011111001010011011000101011111011110100101110011001101101110100011110001110011000010010010111110010011110000001110001100010100100010111111011011001010100110100000110110111101111100100111101111111010101110111000100100101100111111011101101110111000011011101110101000111111011100011100001101011101010000001000100001111001100111001010101101011010101011010010011111000010001100111111100000111011000110 0110111100000000001111100110011001100110100101001101101111111010101001101110100010011001000110100110111010101100110100000010111000011110101100100001011111011100010111100000111000011011011110000011101001010111101000011100011101101100111110101100000101000001101101111001010010011100011111010101001000110010101011110000010011111010010110100000110100111101000100101111000111011111100110111011001010100101 0100001010000010010001000000010000000110110100110101010010111010110100000011101111001101010100001101000101011101111111100110100111100111110110010011100101100100011111111100110001010111001000000111011001111011001011101000101110110110001101111101100000011011100101110101010101111110111111101010010110010011101010010101111011100100001110110110010010100011100111101000010001001010000110111111111010111110 1011101000000010111000010101011111011101010011111010111110101100101011110110111100111010010110010000101110010100101000100000010000101000110110100100101000011101100110010000101110110000100110000010111000000110000011000001000010111100000111100100000110111111110101010101100101000000101110111000110110111001000011011110101110010100011000000101010011111011111001100101100010010101100000101000011101101110 1001011100001111100110011011100000111101010100110111010110001011000101011000110001010101001001111101000011100101000011101101011111000001010011011000001100010100000011001010011101000001011110000111001001011011111100000010001011010101001111100011111010010110000010100000000000011101010000001010111110110110101111111010100010011110011100100000000111101111000100001110111100000010100000001011010111010101 1110011100110100100100100101010011110000011111111111110011100000001101001110101000101010101100110100111100011100000100111100100111110111100111101101010011001110101111011110011111100100101010110010100111011001100011101010001110111101110110001011000010001011100110010000110001011001100101001010100111010001000101000011011111000011110111110000011000100001100011000101011101101001101010111110111111000010 1000001101110001110011011101001100001001010000001111100001001000000111111111111011011110111111100111110100111000001011001110110100110101010011011011111010001101011111110000100011001110011010110101001111111000011101110000111000000011010110100100100001010010111100110110100011010110011001111011101000110100011001001110111010010110111000100110101100101010001111011100010100001111010100101111010000000011 0000000101111100000000001011101000101011001111000000110010110111110001001010010011011011001001110100001100110111011000111101010010110110111111100001010010010000101100011100100000001010100101011100101111000110010111000010011110010111110101111011111101101011011001011100000011101001110101000000011000110011100010111100111010011100110010010100100000100101011000101101000101011011011100000001110110111011 1000110111011010100001010100100001100001001011110111011101110010110011101011100111100101101111011110001011001100001111011110111101011101010111001110001001110010010101110011000000000000000101010101010001100000100010011000100001100100010000000010000110101111111101101001111010111000101000100011101000001100111001111001101111110000011001010000100001100100111001101001111001100110101100000001111101000110 1011011100010000000110110100001111111011101010111000111100110100010111110110100000000011001010011011010000000011101101000101001011110011111101010101101111111011001110111011010110011101101100111010011010101010100011101100101100000111110011110110010101011000010110001111001001100101100111111110110000100111100001001010111000111111010001110101001110011011111111001001111001101000110011110101101010010010 0110001111010110010001111110101011001000000010001111101101001110010110010000110010111101000011111010011010001111111101010000110111110111100001011111000100111110011010010011110000110010110100100011101001101001001101011001101101010001001101011100110101111110101000110101000100101110011001010100110000010000010000010011101100010110101000110011111111000000010000010001011011111001110000011011011110110101 0111101010101011011001000011011100101100010011110101111001101011101000100100100011100001100000110011101000000110001110110100000001010000110110101111110101000001101010111000011011001010000110111101001100111010110010011000010000001101101101010011011010011111101001101001110000011110100010111110100110010110111101101010111010110100101001101010001101110111100001111001001000111010011110110111011111000011 1100110101000010110100111001010101110001110011100001000011100001000011110110010111101011111100111111000111000111101000100011010001011110110001101010110010010011110010000110011000100000000111100110000011101100000010110001100101110101001101101011001001011000000110010011001011101101110000111011000111001111001011111101101100010111011110110110110001100000001110010000000100111010011001100110101110110011 1000111001100010010100010010101001100011001001010100011010110000110111110010111111110011101101010101011001000000001010110111000001100010100011000001011100100010101010001111001101010101001100010110010010010011100010001100110000000010100111111011110110010010111000101100100011110100101010111110111001110010010100001111111000011111000111010101100000100110111001111100010111011110011111100011010010000010 0110000010111101101011111010010001101011110000110010101101111111101110011101010011000000010110001100100100001100110010101001100111011110101111101011101101110111011010100101011101001100111101101010110000100101101110001000100101101100010100110010000110111101011101011010011010111100100001011100010010011100101110000110100000110010010101001000010011111111010000101000010111110111000011011101011101000001 0001100100100011110110010001010010101010111111000010010101101000101111110101101100011011111110001101110011100001001110000101100001010110100101100100011100111001111110011101100000010110011011101111010001100110000100100011011011110101011101000010000001100000110001100101011010011000000001001001001010101011001001001001101110111011011010110000011011011011100010101100111100010111000001010000001001111000 0100001010110010011110111100110001110011110001010111110111111101100101100101100000100100101111110001011011010010000101010010010101100001101011110100001110010010111101000101000010101000101110010011101010100000010100011100111001101011011101100010100001001000101010101110011011100011011000010111111110110010101100100011110101011100001111101111010010000111000011100011110011111011001000001100111110001100 1000001000100010101100111011100000011010000011101100000011111110000000111010111000101010111110110111111011000110100111100010110100001101011101111010101001111101001100011111100000100011110111100110110110010100000001110000010111111000011000010111100101010011001010101011111100000100001100011011001001100001011100001001111111101101110101000110001000110111001101000100011010101001111010110001000110110001 0010011000110110111011011100101001111010111011100011101101001000100101010000101001001000101000111011111010010000001001100100101011110100001010100100111111000101000010010000000001010011101011001100010000100000100110011011000011111110001011000111001110000111010001110000110001010001110011011100111100101011100010001000101001111110100010101010110100011011100001001001000110001000101110000001000111101011 0011101011000010100011111101000110011000101010010100101101110101100100001001000100101110011101011111010101110001010000100010000010000111010011100001011010011101011000011111101100100110100010111111101101111100110011111011010011101001000100110110011100011010111110000101110010000001111100101101011110111000011000001101100001001111100110110101011100001100011010000111010000000100011110110111011001110110 1000100111001100110110010010011001011111100001101101100101011011011100000011000110011110000101100001101010011001010111011101110000111101101111000011010011010010101000100101011000010110010100100001011110110001101101100000100111101100101011101101100011110101010001101011101001000000001011010101100001101011101100011011100000000110100001000100011101101100110111010000101110011011010010100011110111010111 0111100010111011100100110110010110010101010111011111011110011011110011110001010001000000101100101110001111000100010011100010001011010000110100000100011001011000001110100011111000100000000001011101001110010111111010001101001001100010101100011000010011011100101101111100111110011001101000000000000010000010000100010111101100100011011010010111101111110011110101010000010110101011001110101000000001110000 1011101111010010111010001000000011011110000110001100001011110111100101001010011100001000111110101001101110001000011010000100011001101101010110001001101101001001000001111001101001100001110001101101101111110101000111111010100100101101010001110001110011110000101100010111011001001111000100000011110010011111100000011000110001100111010001110101010011100110101000101111111100101011010111101000100011100100 1100001001011100001010010011110011110101011011101100000111101111111001111010110010011111010010000010100001001011000001011110100010100001100011001011000111101011011010111010110011101111000000011001111101110001100111000000011011000110111100010100010111001110110001001101111110001100011001001000000000110001001000011101110110000000001000000000001000011101100100010110111100010001000111001111111101110000 1000001101010010001010001100100101010100010111000101000011010101000111110001100110101111010001011011010011111100111101100011011011001011110111010101101101101010011111011111110011011010110111101000101000010100111111100100100101111001001101001100100010110100000110101011010111101010010110101010001110101101001010100000011101001111100111011110110001110101101001111101010011000011100110100101111101111010 1001111100111110001001110000001000100011001011110010000110100010100010100101100001111001011110001110011000100111000111111100100011100001010010110011111001000101111000101100100110010010010111101001110110101010010000100111000100101001000011111010010001101000010001100011110011111110101000110111000010001001111000011000010011111011011000110010010100100111001000110101010101101000101100010110001001011011 1110010111010100100001111111111001110110000010111000100001001101001111001010010001001101000010001011000111000101100100111111001001011011111000000010010011110111101001010101000111001000101101000000011110000100001111000111110001001010010111011001101010110101010111111100010011011111010101001000011111111001101100010011001001000111010101100011011001011001101101000011111100110000011100101011100000000011 1001000100000000110101110110110110001111011110001000000110000010001010101010111101000011000101010111011100100011110001001111000010001010111100010000011011000110000010111100111001010111010011010011101110010100001110011111010000111100011011100110111111001011101010110110100110001010101010011001110100100100011100001000010011000010010010011001010011011010101110111010111010100001101111000010110010110000 0010011101110100010101010101011000011011001110111000001010101101101010100001010111101100111000100000101001011100110010100000110101010101110011010000010111111000001111011011100011000100011101100100110011011100011011100100101010111100101010100101001000001000111011011010011001100000110110111101101001010111100100001010100100000110010110000010000100011010100000000100100000101110011010010100100011101000 0110100111101011011100010011001001010111100010111100101001111100101110111000000001101010101001101111101111110111100011100111101101110011100100010010111001110101001000001111100011100110100011010110000010011010111110110111110110100100001011000101000100000000101000010001100111011000110010100011111111110111110001100110111101100001110000010011100110010100010100001011000111010001000101000010011001110111 0101001111001010001110010010001101100111001000011110000111100111101000010101110110101110110101110000100000100100100100111100100111101011111010011100111101100110001101000100001100101110100010000001100000100100000100100000100000110001101001100010110011100101001100011101001000100001001010000101100111000011110110011010110000111001110100001010010100000001000100001011100111011011011010010101001000100000 0110000010101110110001100100100011110110000101010011101011101111000111100110101111011001110111000100001100100011000101100111100001111001101011011100101010010100001010110000100100110101100111001111101011101011010001010111111000110111110101010111100000010011011101000101100110111010110011001101001100101000011100000111101111010100000001110111111101000000101010000010110001010011100111000110001100000000 0011011001000101110010111111110010111010100111000100110110011100100101101001101001011011100001011010000111101100100110101000101000110100110001010100100110100001111110011001010100100111101101100001100111001000011010011010111000110111001101101100100101100010100111110101110001011010110011010111110101100001110110110000000101100101101001001111011010001111011000000101111101000010111111011011000100101010 1010110001001101110011010101001011111111110101001110100011100011111011100001010101110011100100101101100000011000000001010001010111011101001001010000101111111010001111011100110100110110001011100101011001101010000111100110111101100111110100110011101101010101000101101101110111101001010000111010001110110100010000000110111011010011101011011100010100010110001100011010110100110110001110111001101001100011 1010101100001101110110001010011010000000010101100101110001010010110111110000111011101011111110000111010100010101001001111010100010101100100011001010001011000000101000111000010000101011100101011110100011101000010111000101011110110101110001001001111000100001110100000101110011010011101111101101000110010000111101110010010001011001110101011001100111010100101111010011001011000111100011101101010000100100 1110010111011000110010011111001010010101000010000001011010000101011010000001110111111000010000011011100111011001011111101001101001100110000100010101001001001000010110010011101000100101110111000100001111111011001010011100111010011000100111010111010001010101111011101100000111101000010111111010001111011110101001000101101010010010011101001101100101100100111100010001100101110010110111001001110010010100 0101010101100001110101111000011001110001001100001101010110111010100101101101110110000111011011110110000101010010100011100010010010100001100111010010001100001001110101000111010101001111010001110110111001111010111010100110111001100011101101000101111000010010010000010010111000110101000111011010100111100011010000001110100001010110100011011001100001100111000110111100001011000111011010000100011111100010 1011011111010100110010001011011100101010100010010111100111011000111110110000111111101011001010011001010001011000101000111110110011110001110111111111101111110011100111000000000010000011110100010010111001000011010011010100011010101110011111000111011010010011101110010010000100100000100011000001111011111001110100011011110010111000110101011000111011000110111000111100010000001001001001111100101100111101 0100110111011110100011010000001100111100111111110100110110011010010011101100000100000011111111100111101010011111110010110010000100000000101101010111101011101011010010101011000110110001100010101101100100100000001010000101111000100010000001010010010001100101000110000010010101101000010000101000111110101100011010011101111101010100000001010110101111010110111001101000111010000111000001011110100001101001 1001011010111010110100010101001100011001100001010100001110001110011000011110100000001010011101000101001001010000001101011101011111000111101001100110111010000110100001110100100100001111011110110110111000001010111111010100101111101101000011011100101100010011000111100100110010011100011111110010000111110101100111001011010110101110100010000111011110010001001010101110101000110001111000101011011101000001 1011110011110001110011000001011001000101110000001100001001111110101111111100101111001110100101000011001011010111110010001011101000011010101110110000111101110101100110000111011001001011101110101100101000010010001001111101101100100000111000100100111011111010110101001011011010011111111110110101101101010010000100001011100011001001110111111110011111101010010010111011011010010111110111011100100111110011 1110110011011010111001001000010001110111001111100011001011001011011010111111100010001100110001111001111000001000111011110111000011000111110010101100101110101001100111100110110001110101000101001110110000100111000000011100110011011100100011010101010001101101001111001111011100011111011101011000011000100111100110111100001111101100100000100000111110001100101010000001101100000011011100001001101000001110 1111011011110010010101000010100100101100111101100101011000101100000111111100101010001101101111000101011011001010010101101000110101011100000101011010110001101110011010111100010011110110010011101100111110110010101000100111001100000100001011001011100011100010000001010101101001110110101001010000100011001101100100100111001001111110001110000100001010101011110101001101111101010010110101111101100011010001 1100100000111001110110110011110001010101110111011011000011001110111100101000011110001111001000011010100011100011010100001110000011010000001001101011110110000011101001111000010111000111001100100110011110010111110000100011100000110001101000100100011010001001100010100011100010111110000101000101100110010001011000001011100100010110111100000010110110001010110011000100011101111010011001110110000110000110 1101111001100010001000010001110010100011110111001100101100010010100110001110011010000101110001010000001110001110101100000101101100011000111010100110010111001010111101111000101101111001001001011011110011011011110100011111100101110111001000111001101101100110110011010110101000001010101100001110010011010010001101110101101111011101111110011110001101100110110011110110001001100100001100101100100000001001 0010111101111110010101011000000110001110011000011010001000000110101000100111000001000111111111000101000010100110101111000111000111011101111111110110100101000101110110100110100011100001100110110110110110000101101001110000110111100101000101010111000001011000001010101111011000011100111001000100101011001010100101101100100001101011011101010111001000100110011010010111111110100001101101110010000010001010 0011000010011101100001011010001100111101011000110000010011011011101100001001000000000111010110000010010000101100001001001000010110000000011101111011011101011110000101111010011010101010010100000011000100111001111000001111100010010100111100000100001000001011110101101000000110110101000101010010000100010100011100001110000001111000111011100011100101100000011000111011001100111010011100100011001110000001 1100010110001110100000110100110001010010101000000010111101110110111000101000101001101110111001100111100101111101101000100111000010111001100000100100101111001010010101011101110010011101001000101110001100001001100011110110101110010000010110100101101001111000010110110000111111001010010100001011111100000001010000000011111100111010100110000101100101001100101000001000101110011101110011000010000001110000 0101010111010000110000100110111110000100111001100111000100000011001000101111110001011100110010001111001100100011001010000101110111111100100001001011100001010000011100010101111111001010001101110001111010011110101000011011010001000000110011010010001110001000000001100111111111101101000111110011010111001110001000001000000011110101110000110111000101110100000110000001010011010011110011111100001101111111 1100001000010101010101101010011111001010010011111110110010100101111110111100001010000010000101001100010111110011100111111101000001011010001101000101000101111100001101001111110111000010100100110101001010111101111111100110111000110101111100001000110000011011111100110001101111100001101001101110000011000101110110111001101110001100110010001010110000100010101111111000010010100100011000101010010010011111 1110001100100010100000100100101001011000110011011100011111101011011110101111001101011110011011110101010100100100000001001101101000011100001001101011100111100111101111001110010010111000111001010111101111011100000111011100100100010111100000101101110110111111110001000100011001111000100000101111011100011111110111110001100111101100110001011110101100100101001111011010101000000001000111110010111010001000 0011011111011101001010111001111101001010100101100110001000111101111101000001100000110100101011110001011001010101111010101111001001110111100111100011100010111111011100110011111010011000101010010001101111111010101011110011000111100001100100111010100101110011010010001001000110001001110010011110110110101000001000111001001010100010111010110111111110011000000010010101011111011010001001000110011101011100
cTrader Algo

ChartArea【cAlgo API】

10/21/2020 3/3/2021

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

チャート窓のベースとなるインターフェース

まずはこちらをごらんください。cTraderのTrade画面です。左のチャートには別窓でインジケーターが2種類、右のチャートには1種類表示されてます。

このような場合、それぞれの窓がChartインスタンスとIndicatorAreaインスタンスと考えてください。チャート上に何か描いたりするためには、目的のインスタンスを取得して、そのメンバメソッドを呼び出します。

左側ではcBotが動いていますが、左のチャートのcBotが取得できるのは①②③のみです。④⑤には触れることができません。①はRobotのプロパティのChartそのものです。②はChart.IndicatorAreas[0]、③はChart.IndicatorAreas[1]でそれぞれ取得可能です。例えば②の窓にテキストを描き込みたいならChart.IndicatorAreas[0].DrawText(…)という感じですね。

 

ChartAreaインターフェース

ChartとIndicatorAreaともにChartAreaインターフェースを実装しています。

public interface ChartArea

関連するインターフェース:ChartIndicatorArea

 

メンバーが多いため、機能別にカテゴリー分けして説明します。

このインターフェースの機能は大きく分けて3つです。

Ⅰ. エリア内のオブジェクト(トレンドラインとか文字とか)を操作する

Ⅱ. エリア内の表示設定を取得、更新する

Ⅲ. エリア内で起きたイベント(マウスのクリックとか)を処理する

それぞれ見ていきましょう。

 

Ⅰ. エリア内のオブジェクト操作にかかわるメンバ

プロパティ
(IReadonlyList) Objects

オブジェクトのリストを取得します。IReadOnlyListは単に読み取り専用のリストです。

 

メソッド

Draw~系メソッドの引数はほぼ共通の枠組みをもっています。Draw~(オブジェクトの名前, オブジェクトの位置, オブジェクトの色)です。

例えばDrawTrendLIneであれば下記が基本形です。

DrawTrendLine(string name, DateTime time1, double y1, DateTime time2, double y2, Color color);
 DrawTrendLine(string name, int barIndex1, double y1, int barIndex2, double y2, Color color);

nameはオブジェクトの名前で、他と被らないように自由に指定します。すでにチャート上にあるオブジェクトと同じ名前で描画すると、先に書いてあったオブジェクトが消えます。

time1,y1,time2…の部分は描画位置を指定します。この部分はオブジェクトの種類によって引数の数が異なります。トレンドラインは始点と終点を指定する必要があるのでtimeとyを2つずつ渡しますが、フィボナッチエクスパンジョンであれば3つになりますし、水平線であればyを1つだけになります。

上と下の違いは横位置を直接時間で指定するか、Barのインデックスで指定するかだけです。その時々で使いやすい方を使えばいいです。

colorは描画する線の色です。colorの後ろに線の太さとラインスタイルを指定するオーバーロードもありますが、基本の形が使えれば困ることはありません。線の太さやスタイルなどは描画後にチャートオブジェクトのプロパティを直接変更できます。

下記で引数が…となってるのはすべてこの形で使用可能です

(ChartTrendLine) DrawTrendLine(…)

トレンドラインを描きます。

(ChartFibonacciRetracement) DrawFibonacciRetracement(…)

フィボナッチリトレースメントを描きます。

(ChartHorizontalLine) DrawHorizontalLine(…)

水平線を描きます。

(ChartVerticalLine) DrawVerticalLine(…)

垂直線(縦線)を描きます。

(ChartEquidistantChannel) DrawEquidistantChannel(…)

チャネルライン(トレンドラインが2本平行に並んだみたいなやつ)を描きます

(ChartFibonacciExpansion) DrawFibonacciExpansion(…)

フィボナッチエクスパンジョンを描きます

(ChartFibonacciFan) DrawFibonacciFan(…)

フィボナッチファンを描きます

(ChartAndrewsPitchfork) DrawAndrewsPitchfork(…)

アンドリューピッチフォークを描きます

(ChartStaticText) DrawStaticText(string name,
                                                        string text,
                                                        VerticalAlignment verticalAlignment,
                                                        HorizontalAlignment horizontalAlignment,
                                                        Color color)

固定文字列を描きます。チャートの決まった位置に表示されて、チャートをスクロールしても動かない文字列です。

Draw~系の中でこのメソッドだけ引数が少し異なりますが、名前と位置の間に表示するtextが入って、あとはtimeとyの代わりに列挙型で縦位置と横位置を指定するだけです。サンプルコード参照。

(ChartText) DrawText(string name, string text, DateTime time, double y, Color color)

文字列を描きます。価格や時間に紐づいた文字列でチャートをスクロールすると一緒に動きます。nameとtimeの間に表示するテキストの文字列型引数textを指定する必要があります。

(ChartTriangle) DrawTriangle(…)

三角形を描きます。

(ChartRectangle) DrawRectangle(…)

四角形を描きます。

(ChartEllipse) DrawEllipse(…)

楕円を描きます。

(ChartIcon) DrawIcon(string name, ChartIconType iconType, DateTime time, double y, Color color)

アイコンを描きます。nameとtimeの間にアイコンの形を表すiconTypeを指定します。

(ChartObject[]) FindAllObjects<チャートオブジェクト名>()

すべての<チャートオブジェクト名>のオブジェクトを取得します。チャートオブジェクト名はChartObjectを継承した型のうちどれかの型名を指定します。サンプルコード参照。

(ChartObject) FindObject(string name)

nameという名前のオブジェクトを取得します。

(void) RemoveObject(string name)

nameという名前のオブジェクトを削除します。

(void) RemoveAllObjects()

エリア内すべてのオブジェクトを削除します。

(void) AddControl(ControlBase control)

control(ボタン等)をエリアに追加します。表示位置はcontrol自身の設定に従います。

(void) RemoveControl(ControlBase control)

controlをエリアから削除します。

 

サンプルコード
protected override void OnStart() {
    // チャートの左上に通貨ペア名を灰色文字で表示する
    // VerticalAlignmentは.Top .Center .Bottomのいずれか HorizontalAlignmentは .Left .Cnter .Rightのいずれか
    Chart.DrawStaticText("symbol_name_text", SymbolName, VerticalAlignment.Top, HorizontalAlignment.Left, Color.Gray);

    // Bidの位置に黄色で水平線を引いて、太さ3の点線にする
    var hl = Chart.DrawHorizontalLine("bid_line", Bid, Color.Yellow);
    hl.Thickness = 3;
    hl.LineStyle = LineStyle.Dots;

    // チャート上すべてのトレンドラインを取得する
    ChartTrendLine[] trendLines = Chart.FindAllObjects <ChartTrendLine> ();

    // こんな感じですべてのトレンドラインに対して処理が書ける
    foreach (var trendLine in trendLines) {
        // 例:色を赤に変える
        trendLine.Color = Color.Red;
    }
}
protected override void OnBar() {
    // ローソク足更新と同時に最初に描いたの消して自分を止める
    Chart.RemoveObject("symbol_name_text");
    Chart.RemoveObject("bid_line");
    Stop();
}

トレンドラインを何本かチャートに引いたうえで実行してみてください。

左上に通貨ペア名が表示され、太さ3の黄色点線で水平線が描かれて、もともとあったトレンドラインはすべて赤に変わったのがわかると思います。

 

 

Ⅱエリア内の表示設定を取得、更新するメンバ

プロパティ
(bool) IsAlive

エリアが表示されているかどうか取得します。インジケーターエリア用です。

(double) Width

エリアの幅とピクセルで取得します。Y軸の内側で測ります。

(double) Height

エリア高さをピクセルで取得します。X軸の内側で測ります。

(double) TopY

エリアに表示されているY軸の最大値を取得します。

(double) BottomY

エリアに表示されているY軸の最小値を取得します。

 

メソッド
(void) SetYRange (double bottomY, double topY)

TopYとBottomYを設定します。引数の順番に注意しましょう。下限、上限の順です。逆にすると何も起きません。

 

 

Ⅲ エリア内のイベント

こんなイベントを検知して処理することができます。ChartAreaのイベントは、特にツール系を作る際は利用頻度が高いです。

(2021/3/3 追記、更新) cTrader4.0からオブジェクトが複数選択できるようになり、一部変更されました。旧イベントも動きますが今後は使用しないほうがいいでしょう。

イベントの使い方はこちら、各イベント情報を持つEventArgsについてはこちらで。

イベント
Drag、DragEnd、DragStart

マウスドラッグの開始、ドラッグ中、終了

MouseDown、MouseUp

マウスのボタンが押された、離された

MouseEnter、MouseLeave

マウスカーソルがエリア内に入った、出た

MouseMove

マウスがエリア内で動いた

MouseWheel

マウスホイールが回された

ObjectsAdded、ObjectsRemoved、ObjectsUpdated

オブジェクトが追加された、削除された、更新された

ObjectHoverChanged

オブジェクトがホバーが変更された(=マウスカーソルがオブジェクトの上に乗った、離れた)

ObjectsSelectionChanged

選択されたオブジェクトが変わった

ScrollChanged

チャートがスクロールした

SizeChanged

チャートサイズが変わった


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

新しいコメント

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

cTrader's Life

© 2025 ajinori