<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def target_range(self):
 """Get the range on the target strand :return: target range :rtype: GenomicRange """

    if not self.is_aligned(): return None
    if self._target_range: return self._target_range # check cache
    global _sam_cigar_target_add
    tlen = sum([x[0] for x in self.cigar_array if _sam_cigar_target_add.match(x[1])])
    self._target_range = GenomicRange(self.entries.rname,self.entries.pos,self.entries.pos+tlen-1)
    return self._target_range