class_docstr: Find all footnote references and store for later use. 
class_docstr_tok: ["Find","all","footnote","references","and","store","for","later","use","."]
docstr: Find, set, and remove footnote definitions. 
docstr_tok: ["Find",",","set",",","and","remove","footnote","definitions","."]
code: def run(self, parent: etree.Element, blocks: list[str]) -> bool:
      """Find, set, and remove footnote definitions."""
      block = blocks.pop(0)
      m = self.RE.search(block)
      if m:
          id = m.group(1)
          fn_blocks = [m.group(2)]
  
          # Handle rest of block
          therest = block[m.end() :].lstrip("\n")
          m2 = self.RE.search(therest)
          if m2:
              # Another footnote exists in the rest of this block.
              # Any content before match is continuation of this footnote, which may be lazily indented.
              before = therest[: m2.start()].rstrip("\n")
              fn_blocks[0] = "\n".join(
                  [fn_blocks[0], self.detab(before)]
              ).lstrip("\n")
              # Add back to blocks everything from beginning of match forward for next iteration.
              blocks.insert(0, therest[m2.start() :])
          else:
              # All remaining lines of block are continuation of this footnote, which may be lazily indented.
              fn_blocks[0] = "\n".join(
                  [fn_blocks[0], self.detab(therest)]
              ).strip("\n")
  
              # Check for child elements in remaining blocks.
              fn_blocks.extend(self.detectTabbed(blocks))
  
          footnote = "\n\n".join(fn_blocks)
          self.footnotes.setFootnote(id, footnote.rstrip())
  
          if block[: m.start()].strip():
              # Add any content before match back to blocks as separate block
              blocks.insert(0, block[: m.start()].rstrip("\n"))
          return True
      # No match. Restore block.
      blocks.insert(0, block)
      return False
  
imports: from __future__ import annotations
  from .None import Extension
  from ..blockprocessors import BlockProcessor
  from ..inlinepatterns import InlineProcessor
  from ..treeprocessors import Treeprocessor
  from ..postprocessors import Postprocessor
  from ..None import util
  from collections import OrderedDict
  import re
  import copy
  import xml.etree.ElementTree
label_desc: Use image node_id 3 for calling the FootnoteBlockProcessor obj's underlying member method code with example usage: obj.run(parent, blocks) and returns: False, True