public class org.jsoup.safety.Cleaner
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jsoup.safety.Cleaner
  super_class: java.lang.Object
{
  private org.jsoup.safety.Whitelist whitelist;
    descriptor: Lorg/jsoup/safety/Whitelist;
    flags: (0x0002) ACC_PRIVATE

  public void <init>(org.jsoup.safety.Whitelist);
    descriptor: (Lorg/jsoup/safety/Whitelist;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jsoup.safety.Cleaner this
        start local 1 // org.jsoup.safety.Whitelist whitelist
         0: .line 42
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 43
            aload 1 /* whitelist */
            invokestatic org.jsoup.helper.Validate.notNull:(Ljava/lang/Object;)V
         2: .line 44
            aload 0 /* this */
            aload 1 /* whitelist */
            putfield org.jsoup.safety.Cleaner.whitelist:Lorg/jsoup/safety/Whitelist;
         3: .line 45
            return
        end local 1 // org.jsoup.safety.Whitelist whitelist
        end local 0 // org.jsoup.safety.Cleaner this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lorg/jsoup/safety/Cleaner;
            0    4     1  whitelist  Lorg/jsoup/safety/Whitelist;
    MethodParameters:
           Name  Flags
      whitelist  

  public org.jsoup.nodes.Document clean(org.jsoup.nodes.Document);
    descriptor: (Lorg/jsoup/nodes/Document;)Lorg/jsoup/nodes/Document;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.jsoup.safety.Cleaner this
        start local 1 // org.jsoup.nodes.Document dirtyDocument
         0: .line 54
            aload 1 /* dirtyDocument */
            invokestatic org.jsoup.helper.Validate.notNull:(Ljava/lang/Object;)V
         1: .line 56
            aload 1 /* dirtyDocument */
            invokevirtual org.jsoup.nodes.Document.baseUri:()Ljava/lang/String;
            invokestatic org.jsoup.nodes.Document.createShell:(Ljava/lang/String;)Lorg/jsoup/nodes/Document;
            astore 2 /* clean */
        start local 2 // org.jsoup.nodes.Document clean
         2: .line 57
            aload 1 /* dirtyDocument */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            ifnull 4
         3: .line 58
            aload 0 /* this */
            aload 1 /* dirtyDocument */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            aload 2 /* clean */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            invokevirtual org.jsoup.safety.Cleaner.copySafeNodes:(Lorg/jsoup/nodes/Element;Lorg/jsoup/nodes/Element;)I
            pop
         4: .line 60
      StackMap locals: org.jsoup.nodes.Document
      StackMap stack:
            aload 2 /* clean */
            areturn
        end local 2 // org.jsoup.nodes.Document clean
        end local 1 // org.jsoup.nodes.Document dirtyDocument
        end local 0 // org.jsoup.safety.Cleaner this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           this  Lorg/jsoup/safety/Cleaner;
            0    5     1  dirtyDocument  Lorg/jsoup/nodes/Document;
            2    5     2          clean  Lorg/jsoup/nodes/Document;
    MethodParameters:
               Name  Flags
      dirtyDocument  

  public boolean isValid(org.jsoup.nodes.Document);
    descriptor: (Lorg/jsoup/nodes/Document;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // org.jsoup.safety.Cleaner this
        start local 1 // org.jsoup.nodes.Document dirtyDocument
         0: .line 75
            aload 1 /* dirtyDocument */
            invokestatic org.jsoup.helper.Validate.notNull:(Ljava/lang/Object;)V
         1: .line 77
            aload 1 /* dirtyDocument */
            invokevirtual org.jsoup.nodes.Document.baseUri:()Ljava/lang/String;
            invokestatic org.jsoup.nodes.Document.createShell:(Ljava/lang/String;)Lorg/jsoup/nodes/Document;
            astore 2 /* clean */
        start local 2 // org.jsoup.nodes.Document clean
         2: .line 78
            aload 0 /* this */
            aload 1 /* dirtyDocument */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            aload 2 /* clean */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            invokevirtual org.jsoup.safety.Cleaner.copySafeNodes:(Lorg/jsoup/nodes/Element;Lorg/jsoup/nodes/Element;)I
            istore 3 /* numDiscarded */
        start local 3 // int numDiscarded
         3: .line 79
            iload 3 /* numDiscarded */
            ifne 6
         4: .line 80
            aload 1 /* dirtyDocument */
            invokevirtual org.jsoup.nodes.Document.head:()Lorg/jsoup/nodes/Element;
            invokevirtual org.jsoup.nodes.Element.childNodes:()Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 6
         5: .line 79
            iconst_1
            ireturn
      StackMap locals: org.jsoup.nodes.Document int
      StackMap stack:
         6: iconst_0
            ireturn
        end local 3 // int numDiscarded
        end local 2 // org.jsoup.nodes.Document clean
        end local 1 // org.jsoup.nodes.Document dirtyDocument
        end local 0 // org.jsoup.safety.Cleaner this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lorg/jsoup/safety/Cleaner;
            0    7     1  dirtyDocument  Lorg/jsoup/nodes/Document;
            2    7     2          clean  Lorg/jsoup/nodes/Document;
            3    7     3   numDiscarded  I
    MethodParameters:
               Name  Flags
      dirtyDocument  

  public boolean isValidBodyHtml(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // org.jsoup.safety.Cleaner this
        start local 1 // java.lang.String bodyHtml
         0: .line 84
            ldc ""
            invokestatic org.jsoup.nodes.Document.createShell:(Ljava/lang/String;)Lorg/jsoup/nodes/Document;
            astore 2 /* clean */
        start local 2 // org.jsoup.nodes.Document clean
         1: .line 85
            ldc ""
            invokestatic org.jsoup.nodes.Document.createShell:(Ljava/lang/String;)Lorg/jsoup/nodes/Document;
            astore 3 /* dirty */
        start local 3 // org.jsoup.nodes.Document dirty
         2: .line 86
            iconst_1
            invokestatic org.jsoup.parser.ParseErrorList.tracking:(I)Lorg/jsoup/parser/ParseErrorList;
            astore 4 /* errorList */
        start local 4 // org.jsoup.parser.ParseErrorList errorList
         3: .line 87
            aload 1 /* bodyHtml */
            aload 3 /* dirty */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            ldc ""
            aload 4 /* errorList */
            invokestatic org.jsoup.parser.Parser.parseFragment:(Ljava/lang/String;Lorg/jsoup/nodes/Element;Ljava/lang/String;Lorg/jsoup/parser/ParseErrorList;)Ljava/util/List;
            astore 5 /* nodes */
        start local 5 // java.util.List nodes
         4: .line 88
            aload 3 /* dirty */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            iconst_0
            aload 5 /* nodes */
            invokevirtual org.jsoup.nodes.Element.insertChildren:(ILjava/util/Collection;)Lorg/jsoup/nodes/Element;
            pop
         5: .line 89
            aload 0 /* this */
            aload 3 /* dirty */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            aload 2 /* clean */
            invokevirtual org.jsoup.nodes.Document.body:()Lorg/jsoup/nodes/Element;
            invokevirtual org.jsoup.safety.Cleaner.copySafeNodes:(Lorg/jsoup/nodes/Element;Lorg/jsoup/nodes/Element;)I
            istore 6 /* numDiscarded */
        start local 6 // int numDiscarded
         6: .line 90
            iload 6 /* numDiscarded */
            ifne 7
            aload 4 /* errorList */
            invokevirtual org.jsoup.parser.ParseErrorList.isEmpty:()Z
            ifeq 7
            iconst_1
            ireturn
      StackMap locals: org.jsoup.safety.Cleaner java.lang.String org.jsoup.nodes.Document org.jsoup.nodes.Document org.jsoup.parser.ParseErrorList java.util.List int
      StackMap stack:
         7: iconst_0
            ireturn
        end local 6 // int numDiscarded
        end local 5 // java.util.List nodes
        end local 4 // org.jsoup.parser.ParseErrorList errorList
        end local 3 // org.jsoup.nodes.Document dirty
        end local 2 // org.jsoup.nodes.Document clean
        end local 1 // java.lang.String bodyHtml
        end local 0 // org.jsoup.safety.Cleaner this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    8     0          this  Lorg/jsoup/safety/Cleaner;
            0    8     1      bodyHtml  Ljava/lang/String;
            1    8     2         clean  Lorg/jsoup/nodes/Document;
            2    8     3         dirty  Lorg/jsoup/nodes/Document;
            3    8     4     errorList  Lorg/jsoup/parser/ParseErrorList;
            4    8     5         nodes  Ljava/util/List<Lorg/jsoup/nodes/Node;>;
            6    8     6  numDiscarded  I
    MethodParameters:
          Name  Flags
      bodyHtml  

  private int copySafeNodes(org.jsoup.nodes.Element, org.jsoup.nodes.Element);
    descriptor: (Lorg/jsoup/nodes/Element;Lorg/jsoup/nodes/Element;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // org.jsoup.safety.Cleaner this
        start local 1 // org.jsoup.nodes.Element source
        start local 2 // org.jsoup.nodes.Element dest
         0: .line 141
            new org.jsoup.safety.Cleaner$CleaningVisitor
            dup
            aload 0 /* this */
            aload 1 /* source */
            aload 2 /* dest */
            invokespecial org.jsoup.safety.Cleaner$CleaningVisitor.<init>:(Lorg/jsoup/safety/Cleaner;Lorg/jsoup/nodes/Element;Lorg/jsoup/nodes/Element;)V
            astore 3 /* cleaningVisitor */
        start local 3 // org.jsoup.safety.Cleaner$CleaningVisitor cleaningVisitor
         1: .line 142
            aload 3 /* cleaningVisitor */
            aload 1 /* source */
            invokestatic org.jsoup.select.NodeTraversor.traverse:(Lorg/jsoup/select/NodeVisitor;Lorg/jsoup/nodes/Node;)V
         2: .line 143
            aload 3 /* cleaningVisitor */
            getfield org.jsoup.safety.Cleaner$CleaningVisitor.numDiscarded:I
            ireturn
        end local 3 // org.jsoup.safety.Cleaner$CleaningVisitor cleaningVisitor
        end local 2 // org.jsoup.nodes.Element dest
        end local 1 // org.jsoup.nodes.Element source
        end local 0 // org.jsoup.safety.Cleaner this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    3     0             this  Lorg/jsoup/safety/Cleaner;
            0    3     1           source  Lorg/jsoup/nodes/Element;
            0    3     2             dest  Lorg/jsoup/nodes/Element;
            1    3     3  cleaningVisitor  Lorg/jsoup/safety/Cleaner$CleaningVisitor;
    MethodParameters:
        Name  Flags
      source  
      dest    

  private org.jsoup.safety.Cleaner$ElementMeta createSafeElement(org.jsoup.nodes.Element);
    descriptor: (Lorg/jsoup/nodes/Element;)Lorg/jsoup/safety/Cleaner$ElementMeta;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=9, args_size=2
        start local 0 // org.jsoup.safety.Cleaner this
        start local 1 // org.jsoup.nodes.Element sourceEl
         0: .line 147
            aload 1 /* sourceEl */
            invokevirtual org.jsoup.nodes.Element.tagName:()Ljava/lang/String;
            astore 2 /* sourceTag */
        start local 2 // java.lang.String sourceTag
         1: .line 148
            new org.jsoup.nodes.Attributes
            dup
            invokespecial org.jsoup.nodes.Attributes.<init>:()V
            astore 3 /* destAttrs */
        start local 3 // org.jsoup.nodes.Attributes destAttrs
         2: .line 149
            new org.jsoup.nodes.Element
            dup
            aload 2 /* sourceTag */
            invokestatic org.jsoup.parser.Tag.valueOf:(Ljava/lang/String;)Lorg/jsoup/parser/Tag;
            aload 1 /* sourceEl */
            invokevirtual org.jsoup.nodes.Element.baseUri:()Ljava/lang/String;
            aload 3 /* destAttrs */
            invokespecial org.jsoup.nodes.Element.<init>:(Lorg/jsoup/parser/Tag;Ljava/lang/String;Lorg/jsoup/nodes/Attributes;)V
            astore 4 /* dest */
        start local 4 // org.jsoup.nodes.Element dest
         3: .line 150
            iconst_0
            istore 5 /* numDiscarded */
        start local 5 // int numDiscarded
         4: .line 152
            aload 1 /* sourceEl */
            invokevirtual org.jsoup.nodes.Element.attributes:()Lorg/jsoup/nodes/Attributes;
            astore 6 /* sourceAttrs */
        start local 6 // org.jsoup.nodes.Attributes sourceAttrs
         5: .line 153
            aload 6 /* sourceAttrs */
            invokevirtual org.jsoup.nodes.Attributes.iterator:()Ljava/util/Iterator;
            astore 8
            goto 10
      StackMap locals: org.jsoup.safety.Cleaner org.jsoup.nodes.Element java.lang.String org.jsoup.nodes.Attributes org.jsoup.nodes.Element int org.jsoup.nodes.Attributes top java.util.Iterator
      StackMap stack:
         6: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jsoup.nodes.Attribute
            astore 7 /* sourceAttr */
        start local 7 // org.jsoup.nodes.Attribute sourceAttr
         7: .line 154
            aload 0 /* this */
            getfield org.jsoup.safety.Cleaner.whitelist:Lorg/jsoup/safety/Whitelist;
            aload 2 /* sourceTag */
            aload 1 /* sourceEl */
            aload 7 /* sourceAttr */
            invokevirtual org.jsoup.safety.Whitelist.isSafeAttribute:(Ljava/lang/String;Lorg/jsoup/nodes/Element;Lorg/jsoup/nodes/Attribute;)Z
            ifeq 9
         8: .line 155
            aload 3 /* destAttrs */
            aload 7 /* sourceAttr */
            invokevirtual org.jsoup.nodes.Attributes.put:(Lorg/jsoup/nodes/Attribute;)Lorg/jsoup/nodes/Attributes;
            pop
            goto 10
         9: .line 157
      StackMap locals: org.jsoup.safety.Cleaner org.jsoup.nodes.Element java.lang.String org.jsoup.nodes.Attributes org.jsoup.nodes.Element int org.jsoup.nodes.Attributes org.jsoup.nodes.Attribute java.util.Iterator
      StackMap stack:
            iinc 5 /* numDiscarded */ 1
        end local 7 // org.jsoup.nodes.Attribute sourceAttr
        10: .line 153
      StackMap locals: org.jsoup.safety.Cleaner org.jsoup.nodes.Element java.lang.String org.jsoup.nodes.Attributes org.jsoup.nodes.Element int org.jsoup.nodes.Attributes top java.util.Iterator
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        11: .line 159
            aload 0 /* this */
            getfield org.jsoup.safety.Cleaner.whitelist:Lorg/jsoup/safety/Whitelist;
            aload 2 /* sourceTag */
            invokevirtual org.jsoup.safety.Whitelist.getEnforcedAttributes:(Ljava/lang/String;)Lorg/jsoup/nodes/Attributes;
            astore 7 /* enforcedAttrs */
        start local 7 // org.jsoup.nodes.Attributes enforcedAttrs
        12: .line 160
            aload 3 /* destAttrs */
            aload 7 /* enforcedAttrs */
            invokevirtual org.jsoup.nodes.Attributes.addAll:(Lorg/jsoup/nodes/Attributes;)V
        13: .line 162
            new org.jsoup.safety.Cleaner$ElementMeta
            dup
            aload 4 /* dest */
            iload 5 /* numDiscarded */
            invokespecial org.jsoup.safety.Cleaner$ElementMeta.<init>:(Lorg/jsoup/nodes/Element;I)V
            areturn
        end local 7 // org.jsoup.nodes.Attributes enforcedAttrs
        end local 6 // org.jsoup.nodes.Attributes sourceAttrs
        end local 5 // int numDiscarded
        end local 4 // org.jsoup.nodes.Element dest
        end local 3 // org.jsoup.nodes.Attributes destAttrs
        end local 2 // java.lang.String sourceTag
        end local 1 // org.jsoup.nodes.Element sourceEl
        end local 0 // org.jsoup.safety.Cleaner this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   14     0           this  Lorg/jsoup/safety/Cleaner;
            0   14     1       sourceEl  Lorg/jsoup/nodes/Element;
            1   14     2      sourceTag  Ljava/lang/String;
            2   14     3      destAttrs  Lorg/jsoup/nodes/Attributes;
            3   14     4           dest  Lorg/jsoup/nodes/Element;
            4   14     5   numDiscarded  I
            5   14     6    sourceAttrs  Lorg/jsoup/nodes/Attributes;
            7   10     7     sourceAttr  Lorg/jsoup/nodes/Attribute;
           12   14     7  enforcedAttrs  Lorg/jsoup/nodes/Attributes;
    MethodParameters:
          Name  Flags
      sourceEl  
}
SourceFile: "Cleaner.java"
NestMembers:
  org.jsoup.safety.Cleaner$CleaningVisitor  org.jsoup.safety.Cleaner$ElementMeta
InnerClasses:
  private final CleaningVisitor = org.jsoup.safety.Cleaner$CleaningVisitor of org.jsoup.safety.Cleaner
  private ElementMeta = org.jsoup.safety.Cleaner$ElementMeta of org.jsoup.safety.Cleaner