 
 extension CubicBezierPatch {
     
+    @_inlineable
     public func warping(_ bezier: Bezier<Point>) -> [Bezier<Point>] {
         
         let u = Bezier(bezier.points.map { $0.x }).polynomial

    return poly.all(where: { $0.almostZero() }) ? nil : poly.roots
}

public func CubicBezierLineIntersect(_ b0: Point, _ b1: Point, _ b2: Point, _ b3: Point, _ l0: Point, _ l1: Point) -> [Double]? {
    
    let a = b0 - l0


// MARK: Path Intersection

@_inlineable
public func CubicBezierSelfIntersect(_ p0: Point, _ p1: Point, _ p2: Point, _ p3: Point) -> (Double, Double)? {
    
    let q1 = 3 * (p1 - p0)
