   ;; 1.3ms (dissoc wild & catch-all from children)
   ;; 1.3ms (reified protocols)
   ;; 0.8ms (flattened matching)
+  ;; 0.8ms (return route-data)
   (cc/quick-bench (dotimes [_ 1000] (lookup tree-new "/v1/orgs/1/topics" {}))))

      Node
      (lookup [this path params]
        (if (.equals segment path)
          params
          (let [p (if (>= (count path) size) (subs path 0 size))]
            (if (.equals segment p)
              (let [child (impl/fast-get children' (char-key path size))

  [segment o]
  (cond
    (wild-param? segment)
    (wild-node segment (keyword (subs segment 1)) nil o)

    (catch-all-param? segment)
    (catch-all-node segment (keyword (subs segment 1)) nil o)

    :else
    (static-node segment nil o)))

(defn- new-node
  "Given a path-spec and a payload object, return a new tree node. If
