     case .up:
       baloonFrame = CGRect(x: 0, y: 0, width: rect.size.width - borderWidth * 2, height: rect.size.height - arrowSize.height - borderWidth * 2)
       
-      let arrowStartPoint = CGPoint(x: arrowPosition.x + arrowSize.width/2, y: arrowPosition.y - arrowSize.height)
-      let arrowEndPoint = CGPoint(x: arrowPosition.x - arrowSize.width/2, y: arrowPosition.y - arrowSize.height)
-      let arrowVertex = arrowPosition
-      let cornerPoint = self.roundCornerCircleCenter(start: arrowStartPoint, vertex: arrowVertex, end: arrowEndPoint, radius: arrowRadius)
-      
-      // 1: Arrow starting point
-      path.move(to: CGPoint(x: arrowStartPoint.x, y: arrowStartPoint.y))
-      // 2: Arrow vertex arc
-      path.addArc(withCenter: cornerPoint.center, radius: arrowRadius, startAngle: cornerPoint.startAngle, endAngle: cornerPoint.endAngle, clockwise: true)
+      let arrowStartPoint = CGPoint(x: arrowPosition.x + arrowSize.width / 2, y: arrowPosition.y - arrowSize.height)
+      let arrowEndPoint = CGPoint(x: arrowPosition.x - arrowSize.width / 2, y: arrowPosition.y - arrowSize.height)
+      let arrowVertex = arrowPosition
+      
+      // 1: Arrow starting point
+      path.move(to: CGPoint(x: arrowStartPoint.x, y: arrowStartPoint.y))
+      // 2: Arrow vertex arc
+      if let cornerPoint = self.roundCornerCircleCenter(start: arrowStartPoint, vertex: arrowVertex, end: arrowEndPoint, radius: arrowRadius) {
+        path.addArc(withCenter: cornerPoint.center, radius: arrowRadius, startAngle: cornerPoint.startAngle, endAngle: cornerPoint.endAngle, clockwise: true)
+      }
       // 3: End drawing arrow
       path.addLine(to: CGPoint(x: arrowEndPoint.x, y: arrowEndPoint.y))
       // 4: Bottom left line

      let arrowStartPoint = CGPoint(x: arrowPosition.x - arrowSize.height, y: arrowPosition.y - arrowSize.width / 2)
      let arrowEndPoint = CGPoint(x: arrowPosition.x - arrowSize.height, y: arrowPosition.y + arrowSize.width / 2)
      let arrowVertex = arrowPosition
      let cornerPoint = self.roundCornerCircleCenter(start: arrowStartPoint, vertex: arrowVertex, end: arrowEndPoint, radius: arrowRadius)
      
      // 1: Arrow starting point
      path.move(to: CGPoint(x: arrowStartPoint.x, y: arrowStartPoint.y))
      // 2: Arrow vertex arc
      path.addArc(withCenter: cornerPoint.center, radius: arrowRadius, startAngle: cornerPoint.startAngle, endAngle: cornerPoint.endAngle, clockwise: true)
      // 3: End drawing arrow
      path.addLine(to: CGPoint(x: arrowEndPoint.x, y: arrowEndPoint.y))
      // 4: Right bottom line

    return path
  }
  
  private class func roundCornerCircleCenter(start: CGPoint, vertex: CGPoint, end: CGPoint, radius: CGFloat) -> CornerPoint? {
    
    let firstLineAngle: CGFloat = atan2(vertex.y - start.y, vertex.x - start.x)
    let secondLineAngle: CGFloat = atan2(end.y - vertex.y, end.x - vertex.x)
    
    let firstLineOffset = CGVector(dx: -sin(firstLineAngle) * radius, dy: cos(firstLineAngle) * radius)
    let secondLineOffset = CGVector(dx: -sin(secondLineAngle) * radius, dy: cos(secondLineAngle) * radius)
