code: def decode(self):
          
          if self.encoding >= self.public_key.n:
              # Should be mod n
              raise ValueError('Attempted to decode corrupted number')
          elif self.encoding <= self.public_key.max_int:
              # Positive
              mantissa = self.encoding
          elif self.encoding >= self.public_key.n - self.public_key.max_int:
              # Negative
              mantissa = self.encoding - self.public_key.n
          else:
              raise OverflowError('Overflow detected in decrypted number')
  
          if self.exponent >= 0:
              # Integer multiplication. This is exact.
              return mantissa * self.BASE ** self.exponent
          else:
              # BASE ** -e is an integer, so below is a division of ints.
              # Not coercing mantissa to float prevents some overflows.
              try:
                  return mantissa / self.BASE ** -self.exponent
              except OverflowError as e:
                  raise OverflowError(
                      'decoded result too large for a float') from e
docs: Decode plaintext and return the result.
  
          Returns:
            an int or float: the decoded number. N.B. if the number
              returned is an integer, it will not be of type float.
  
          Raises:
            OverflowError: if overflow is detected in the decrypted number.