     }
 }
 
+private extension MainViewController {
+    func resetCellViewFlashedStatus() {
+        cellViewFlashed = [:]
+    }
+
+    func setCellViewFlashedStatus(messageNo: Int, tableColumnIdentifier: String, flashed: Bool) {
+        let key = _cellViewFlashedKey(messageNo, tableColumnIdentifier)
+        cellViewFlashed[key] = flashed
+    }
+
+    func isCellViewFlashed(messageNo: Int, tableColumnIdentifier: String) -> Bool {
+        let key = _cellViewFlashedKey(messageNo, tableColumnIdentifier)
+        return cellViewFlashed[key] == true
+    }
+
+    func _cellViewFlashedKey(_ messageNo: Int, _ tableColumnIdentifier: String) -> String {
+        return "\(messageNo):\(tableColumnIdentifier)"
+    }
+}
+
 // MARK: - NSControlTextEditingDelegate Functions
 extension MainViewController: NSControlTextEditingDelegate {
     func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {

        }
        let color = HandleNameManager.shared.color(for: chat.userId, in: live.communityId)
        view.setBackgroundColor(color)
        if [.emotion, .gift, .nicoad].contains(chat.slashCommand) {
            view.flash(NSColor.red)
        } else {
            view.cancelFlash()
        }
    }

    // MARK: Utility
    private func contentAndAttributes(forMessage message: Message) -> (String, [String: Any]) {

    private var activeUserCount = 0
    private var maxActiveUserCount = 0
    private var activeUserHistory: [(Date, Int)] = []

    private var cellViewFlashed: [String: Bool] = [:]

    // AuthWindowController
    private lazy var authWindowController: AuthWindowController = {
