def read(self, address, size):
        if arbitrary(self, address):
            raise ArbitraryRead(self, address)

        as_ = concretise(self, address)
        try:
            if len(as_) > 1:
                e = None
                value = bv.Symbol(size, unique_name('read'))

                for a in as_:
                    v = None
                    for i in range(0, size // 8):
                        if v is None:
                            v = self.memory.read_byte(self, a.value + i)
                        else:
                            v = self.memory.read_byte(self, a.value + i).concatenate(v)

                    if e is None:
                        e = (address == a) & (value == v)
                    else:
                        e = e | ((address == a) & (value == v))

                self.solver.add(e)
            else:
                value = self.memory.read_byte(self, as_[0].value)

                for i in range(1, size // 8):
                    value = self.memory.read_byte(self, as_[0].value + i).concatenate(value)
        except KeyError:
            raise InvalidRead(self, address)

        return value
dataset/ETHPy150Open c01db33f/concolica/state.py/State.read/original