     (say state side {:user "__system__" :text (str username " " text ".")})))
 
 (declare prompt! forfeit trigger-event handle-end-run trash update-advancement-cost update-all-advancement-costs
-         update-all-ice update-ice-strength update-breaker-strength all-installed)
+         update-all-ice update-ice-strength update-breaker-strength all-installed resolve-steal-events)
 
 (defn can-pay? [state side & args]
   (let [costs (merge-costs (remove #(or (nil? %) (= % [:forfeit])) args))

(defn optional-ability [state side card msg ability targets]
  (show-prompt state side card msg ["Yes" "No"] #(if (= % "Yes")
                                                   (resolve-ability state side ability card targets)
                                                   (when-let [no-msg (:no-msg ability)]
                                                     (system-msg state side (:no-msg ability))))))

(defn resolve-trace [state side boost]
  (let [runner (:runner @state)

                                      {:cost cost
                                       :effect (effect (system-msg (str "pays " (costs-to-symbol cost)
                                                                        " to steal " (:title c)))
                                                       (resolve-steal c))
                                       :no-effect {:effect (effect (resolve-steal-events c))}} nil)
                    (resolve-ability state :runner
                                     {:prompt (str "You access " (:title c)) :choices ["Steal"]
                                      :effect (req (resolve-steal state :runner c))} c nil)))
                (do (resolve-steal-events state side c)
                    (prompt! state :runner c (str "You accessed but cannot steal " (:title c)) ["OK"] {}))))
        (do (when-let [access-effect (:access cdef)]
              (resolve-ability state (to-keyword (:side c)) access-effect c nil))
