             guard let m0 = _offset_point(0.25 * (t - s) + s) else { continue }
             guard let m1 = _offset_point(0.5 * (t - s) + s) else { continue }
             guard let m2 = _offset_point(0.75 * (t - s) + s) else { continue }
-            guard let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { continue }
-            
-            try calback(s...t, CubicBezier(q0, q0 + c0 * d0, q3 - c1 * d3, q3))
+            
+            if let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) {
+                try calback(s...t, CubicBezier(q0, q0 + c0 * d0, q3 - c1 * d3, q3))
+            } else {
+                try calback(s...t, QuadBezier(q0, QuadBezierFitting(q0, q3, d0, -d3), q3).elevated()))
+            }
             
             s = t
         }

            guard let m2 = self._offset_point(a, 0.75 * (t - s) + s) else { return }
            
            if a.sign == angle.sign {
                guard let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { return }
                try calback(s...t, CubicBezier(q0, q0 + c0 * d0, q3 - c1 * d3, q3))
                
            } else {
                guard let (c0, c1) = CubicBezierFitting(q0, q3, -d0, d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { return }
                try calback(s...t, CubicBezier(q0, q0 - c0 * d0, q3 + c1 * d3, q3))
            }
        }
    }

            let angle_signed = angle.sign == .minus
            
            if signed == angle_signed {
                if let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) {
                    try calback(s...t, CubicBezier(q0, q0 + c0 * d0, q3 - c1 * d3, q3))
                } else {
                    try calback(s...t, QuadBezier(q0, QuadBezierFitting(q0, q3, d0, -d3), q3).elevated()))
                }
            } else {
                if let (c0, c1) = CubicBezierFitting(q0, q3, -d0, d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) {
                    try calback(s...t, CubicBezier(q0, q0 - c0 * d0, q3 + c1 * d3, q3))
                } else {
                    try calback(s...t, QuadBezier(q0, QuadBezierFitting(q0, q3, -d0, d3), q3).elevated()))
                }
            }
        }
    }
