diff --git a/tools/asmifier.py b/tools/asmifier.py
index bfb1226..9af1499 100755
--- a/tools/asmifier.py
+++ b/tools/asmifier.py
@@ -13,45 +13,51 @@
 ASM_VERSION = '9.5'
 ASM_JAR = os.path.join(utils.DEPENDENCIES_DIR, 'org', 'ow2', 'asm', 'asm',
                        ASM_VERSION, 'asm-' + ASM_VERSION + '.jar')
-ASM_UTIL_JAR = os.path.join(utils.DEPENDENCIES_DIR, 'org', 'ow2', 'asm', 'asm-util',
-                       ASM_VERSION, 'asm-util-' + ASM_VERSION + '.jar')
+ASM_UTIL_JAR = os.path.join(utils.DEPENDENCIES_DIR, 'org', 'ow2', 'asm',
+                            'asm-util', ASM_VERSION,
+                            'asm-util-' + ASM_VERSION + '.jar')
+
 
 def run(args):
-  cmd = []
-  cmd.append(jdk.GetJavaExecutable())
-  cp = ":".join([ASM_JAR, ASM_UTIL_JAR])
-  print(cp)
-  cmd.extend(['-cp', cp])
-  cmd.append('org.objectweb.asm.util.ASMifier')
-  cmd.extend(args)
-  utils.PrintCmd(cmd)
-  result = subprocess.check_output(cmd).decode('utf-8')
-  print(result)
-  return result
+    cmd = []
+    cmd.append(jdk.GetJavaExecutable())
+    cp = ":".join([ASM_JAR, ASM_UTIL_JAR])
+    print(cp)
+    cmd.extend(['-cp', cp])
+    cmd.append('org.objectweb.asm.util.ASMifier')
+    cmd.extend(args)
+    utils.PrintCmd(cmd)
+    result = subprocess.check_output(cmd).decode('utf-8')
+    print(result)
+    return result
+
 
 def main():
-  help = True
-  args = []
-  for arg in sys.argv[1:]:
-    if arg == "--no-debug":
-      args.append("-debug")
-    elif arg in ("-help", "--help", "-debug"):
-      help = True
-      break
-    else:
-      help = False
-      args.append(arg)
-  if help:
-    print("asmifier.py [--no-debug] <classfile>*")
-    print("  --no-debug    Don't include local variable information in output.")
-    return
-  try:
-    run(args)
-  except subprocess.CalledProcessError as e:
-    # In case anything relevant was printed to stdout, normally this is already
-    # on stderr.
-    print(e.output)
-    return e.returncode
+    help = True
+    args = []
+    for arg in sys.argv[1:]:
+        if arg == "--no-debug":
+            args.append("-debug")
+        elif arg in ("-help", "--help", "-debug"):
+            help = True
+            break
+        else:
+            help = False
+            args.append(arg)
+    if help:
+        print("asmifier.py [--no-debug] <classfile>*")
+        print(
+            "  --no-debug    Don't include local variable information in output."
+        )
+        return
+    try:
+        run(args)
+    except subprocess.CalledProcessError as e:
+        # In case anything relevant was printed to stdout, normally this is already
+        # on stderr.
+        print(e.output)
+        return e.returncode
+
 
 if __name__ == '__main__':
-  sys.exit(main())
+    sys.exit(main())
