     (when (or (has? card :subtype "Virus") (= (:counter-type card) "Virus"))
       (set-prop state :runner card :counter 0)))
   (trigger-event state side :purge))
+
+(defn get-virus-counters [state side card]
+   (let [hiveminds (filter #(= (:title %) "Hivemind") (get-in @state [:runner :rig :program]))]
+        (reduce + (map :counter (cons card hiveminds)))))
 
 (defn play-instant
   ([state side card] (play-instant state side card nil))

               (or (not req) (req state side card targets)))
      (if choices
        (if (map? choices)
          (show-select state (or player side) card ability)
          (let [cs (if-not (fn? choices)
                     choices
                     (let [cards (choices state side card targets)]
                             (if not-distinct
                               cards (distinct-by :title cards))))]
            (prompt! state (or player side) card prompt cs (dissoc ability :choices))))
        (when (and (or (not counter-cost) (<= counter-cost counter))
                   (or (not advance-counter-cost) (<= advance-counter-cost advance-counter))
                   (apply pay (concat [state side card] cost)))

               p (assoc p :current-strength nil))))
    (system-msg state side "continues the run")))


(defn play-ability [state side {:keys [card ability targets] :as args}]
      (system-msg state side (str "play ability"))
  (let [cdef (card-def card)
        abilities (:abilities cdef)
        ab (if (= ability (count abilities))
