def visit_ArraySelect(self, expression, *operands):
arr, index = operands<EOL>if isinstance(arr, ArrayVariable):<EOL><INDENT>return<EOL><DEDENT>if isinstance(index, BitVecConstant):<EOL><INDENT>ival = index.value<EOL>while isinstance(arr, ArrayStore) and isinstance(arr._operands[<NUM_LIT:1>], BitVecConstant) and arr._operands[<NUM_LIT:1>]._value != ival:<EOL><INDENT>arr = arr._operands[<NUM_LIT:0>]  <EOL><DEDENT><DEDENT>if isinstance(index, BitVecConstant) and isinstance(arr, ArrayStore) and isinstance(arr.index, BitVecConstant) and arr.index.value == index.value:<EOL><INDENT>return arr.value<EOL><DEDENT>else:<EOL><INDENT>if arr is not expression.array:<EOL><INDENT>return arr.select(index)<EOL><DEDENT><DEDENT>
ArraySelect (ArrayStore((ArrayStore(x0,v0) ...),xn, vn), x0)
                -> v0