Program: 192397
Project: 192397
Buggy source:
void dumpPackageLPr(PrintWriter pw,String prefix,String checkinTag,ArraySet<String> permissionNames,PackageSetting ps,SimpleDateFormat sdf,Date date,List<UserInfo> users,boolean dumpAll){
  if (checkinTag != null) {
    pw.print(checkinTag);
    pw.print("String_Node_Str");
    pw.print(ps.realName != null ? ps.realName : ps.name);
    pw.print("String_Node_Str");
    pw.print(ps.appId);
    pw.print("String_Node_Str");
    pw.print(ps.versionCode);
    pw.print("String_Node_Str");
    pw.print(ps.firstInstallTime);
    pw.print("String_Node_Str");
    pw.print(ps.lastUpdateTime);
    pw.print("String_Node_Str");
    pw.print(ps.installerPackageName != null ? ps.installerPackageName : "String_Node_Str");
    pw.println();
    if (ps.pkg != null) {
      pw.print(checkinTag);
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.println(ps.pkg.baseRevisionCode);
      if (ps.pkg.splitNames != null) {
        for (int i=0; i < ps.pkg.splitNames.length; i++) {
          pw.print(checkinTag);
          pw.print("String_Node_Str");
          pw.print("String_Node_Str");
          pw.print(ps.pkg.splitNames[i]);
          pw.print("String_Node_Str");
          pw.println(ps.pkg.splitRevisionCodes[i]);
        }
      }
    }
    for (    UserInfo user : users) {
      pw.print(checkinTag);
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.print(user.id);
      pw.print("String_Node_Str");
      pw.print(ps.getInstalled(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getHidden(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getSuspended(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getStopped(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getNotLaunched(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print("String_Node_Str");
      pw.print(ps.getEnabled(user.id));
      String lastDisabledAppCaller=ps.getLastDisabledAppCaller(user.id);
      pw.print("String_Node_Str");
      pw.print(lastDisabledAppCaller != null ? lastDisabledAppCaller : "String_Node_Str");
      pw.println();
    }
    return;
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.print(ps.realName != null ? ps.realName : ps.name);
  pw.print("String_Node_Str");
  pw.print(Integer.toHexString(System.identityHashCode(ps)));
  pw.println("String_Node_Str");
  if (ps.frozen) {
    pw.print(prefix);
    pw.println("String_Node_Str");
  }
  if (ps.realName != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.name);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.appId);
  if (ps.sharedUser != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.sharedUser);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.pkg);
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.codePathString);
  if (permissionNames == null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.resourcePathString);
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.legacyNativeLibraryPathString);
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.primaryCpuAbiString);
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.secondaryCpuAbiString);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.print(ps.versionCode);
  if (ps.pkg != null) {
    pw.print("String_Node_Str");
    pw.print(ps.pkg.applicationInfo.minSdkVersion);
    pw.print("String_Node_Str");
    pw.print(ps.pkg.applicationInfo.targetSdkVersion);
  }
  pw.println();
  if (ps.pkg != null) {
    if (ps.pkg.parentPackage != null) {
      PackageParser.Package parentPkg=ps.pkg.parentPackage;
      PackageSetting pps=mPackages.get(parentPkg.packageName);
      if (pps == null || !pps.codePathString.equals(parentPkg.codePath)) {
        pps=mDisabledSysPackages.get(parentPkg.packageName);
      }
      if (pps != null) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(pps.realName != null ? pps.realName : pps.name);
      }
    }
 else     if (ps.pkg.childPackages != null) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      final int childCount=ps.pkg.childPackages.size();
      for (int i=0; i < childCount; i++) {
        PackageParser.Package childPkg=ps.pkg.childPackages.get(i);
        PackageSetting cps=mPackages.get(childPkg.packageName);
        if (cps == null || !cps.codePathString.equals(childPkg.codePath)) {
          cps=mDisabledSysPackages.get(childPkg.packageName);
        }
        if (cps != null) {
          if (i > 0) {
            pw.print("String_Node_Str");
          }
          pw.print(cps.realName != null ? cps.realName : cps.name);
        }
      }
      pw.println("String_Node_Str");
    }
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.pkg.mVersionName);
    pw.print(prefix);
    pw.print("String_Node_Str");
    dumpSplitNames(pw,ps.pkg);
    pw.println();
    final int apkSigningVersion=PackageParser.getApkSigningVersion(ps.pkg);
    if (apkSigningVersion != PackageParser.APK_SIGNING_UNKNOWN) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.println(apkSigningVersion);
    }
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.pkg.applicationInfo.toString());
    pw.print(prefix);
    pw.print("String_Node_Str");
    printFlags(pw,ps.pkg.applicationInfo.flags,FLAG_DUMP_SPEC);
    pw.println();
    if (ps.pkg.applicationInfo.privateFlags != 0) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      printFlags(pw,ps.pkg.applicationInfo.privateFlags,PRIVATE_FLAG_DUMP_SPEC);
      pw.println();
    }
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.pkg.applicationInfo.dataDir);
    pw.print(prefix);
    pw.print("String_Node_Str");
    boolean first=true;
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    pw.println("String_Node_Str");
    if (ps.pkg.libraryNames != null && ps.pkg.libraryNames.size() > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.libraryNames.size(); i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.libraryNames.get(i));
      }
    }
    if (ps.pkg.usesLibraries != null && ps.pkg.usesLibraries.size() > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.usesLibraries.size(); i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.usesLibraries.get(i));
      }
    }
    if (ps.pkg.usesOptionalLibraries != null && ps.pkg.usesOptionalLibraries.size() > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.usesOptionalLibraries.size(); i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.usesOptionalLibraries.get(i));
      }
    }
    if (ps.pkg.usesLibraryFiles != null && ps.pkg.usesLibraryFiles.length > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.usesLibraryFiles.length; i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.usesLibraryFiles[i]);
      }
    }
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  date.setTime(ps.timeStamp);
  pw.println(sdf.format(date));
  pw.print(prefix);
  pw.print("String_Node_Str");
  date.setTime(ps.firstInstallTime);
  pw.println(sdf.format(date));
  pw.print(prefix);
  pw.print("String_Node_Str");
  date.setTime(ps.lastUpdateTime);
  pw.println(sdf.format(date));
  if (ps.installerPackageName != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.installerPackageName);
  }
  if (ps.volumeUuid != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.volumeUuid);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.signatures);
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.print(ps.installPermissionsFixed);
  pw.print("String_Node_Str");
  pw.println(ps.installStatus);
  pw.print(prefix);
  pw.print("String_Node_Str");
  printFlags(pw,ps.pkgFlags,FLAG_DUMP_SPEC);
  pw.println();
  if (ps.pkg != null && ps.pkg.permissions != null && ps.pkg.permissions.size() > 0) {
    final ArrayList<PackageParser.Permission> perms=ps.pkg.permissions;
    pw.print(prefix);
    pw.println("String_Node_Str");
    for (int i=0; i < perms.size(); i++) {
      PackageParser.Permission perm=perms.get(i);
      if (permissionNames != null && !permissionNames.contains(perm.info.name)) {
        continue;
      }
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.print(perm.info.name);
      pw.print("String_Node_Str");
      pw.print(PermissionInfo.protectionToString(perm.info.protectionLevel));
      if ((perm.info.flags & PermissionInfo.FLAG_COSTS_MONEY) != 0) {
        pw.print("String_Node_Str");
      }
      if ((perm.info.flags & PermissionInfo.FLAG_REMOVED) != 0) {
        pw.print("String_Node_Str");
      }
      if ((perm.info.flags & PermissionInfo.FLAG_INSTALLED) != 0) {
        pw.print("String_Node_Str");
      }
      pw.println();
    }
  }
  if ((permissionNames != null || dumpAll) && ps.pkg.requestedPermissions != null && ps.pkg.requestedPermissions.size() > 0) {
    final ArrayList<String> perms=ps.pkg.requestedPermissions;
    pw.print(prefix);
    pw.println("String_Node_Str");
    for (int i=0; i < perms.size(); i++) {
      String perm=perms.get(i);
      if (permissionNames != null && !permissionNames.contains(perm)) {
        continue;
      }
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.println(perm);
    }
  }
  if (ps.sharedUser == null || permissionNames != null || dumpAll) {
    PermissionsState permissionsState=ps.getPermissionsState();
    dumpInstallPermissionsLPr(pw,prefix + "String_Node_Str",permissionNames,permissionsState);
  }
  for (  UserInfo user : users) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.print(user.id);
    pw.print("String_Node_Str");
    pw.print("String_Node_Str");
    pw.print(ps.getInstalled(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getHidden(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getSuspended(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getStopped(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getNotLaunched(user.id));
    pw.print("String_Node_Str");
    pw.println(ps.getEnabled(user.id));
    String lastDisabledAppCaller=ps.getLastDisabledAppCaller(user.id);
    if (lastDisabledAppCaller != null) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.println(lastDisabledAppCaller);
    }
    if (ps.sharedUser == null) {
      PermissionsState permissionsState=ps.getPermissionsState();
      dumpGidsLPr(pw,prefix + "String_Node_Str",permissionsState.computeGids(user.id));
      dumpRuntimePermissionsLPr(pw,prefix + "String_Node_Str",permissionNames,permissionsState.getRuntimePermissionStates(user.id),dumpAll);
    }
    if (permissionNames == null) {
      ArraySet<String> cmp=ps.getDisabledComponents(user.id);
      if (cmp != null && cmp.size() > 0) {
        pw.print(prefix);
        pw.println("String_Node_Str");
        for (        String s : cmp) {
          pw.print(prefix);
          pw.print("String_Node_Str");
          pw.println(s);
        }
      }
      cmp=ps.getEnabledComponents(user.id);
      if (cmp != null && cmp.size() > 0) {
        pw.print(prefix);
        pw.println("String_Node_Str");
        for (        String s : cmp) {
          pw.print(prefix);
          pw.print("String_Node_Str");
          pw.println(s);
        }
      }
    }
  }
}

Fixed version (ground truth):
void dumpPackageLPr(PrintWriter pw,String prefix,String checkinTag,ArraySet<String> permissionNames,PackageSetting ps,SimpleDateFormat sdf,Date date,List<UserInfo> users,boolean dumpAll){
  if (checkinTag != null) {
    pw.print(checkinTag);
    pw.print("String_Node_Str");
    pw.print(ps.realName != null ? ps.realName : ps.name);
    pw.print("String_Node_Str");
    pw.print(ps.appId);
    pw.print("String_Node_Str");
    pw.print(ps.versionCode);
    pw.print("String_Node_Str");
    pw.print(ps.firstInstallTime);
    pw.print("String_Node_Str");
    pw.print(ps.lastUpdateTime);
    pw.print("String_Node_Str");
    pw.print(ps.installerPackageName != null ? ps.installerPackageName : "String_Node_Str");
    pw.println();
    if (ps.pkg != null) {
      pw.print(checkinTag);
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.println(ps.pkg.baseRevisionCode);
      if (ps.pkg.splitNames != null) {
        for (int i=0; i < ps.pkg.splitNames.length; i++) {
          pw.print(checkinTag);
          pw.print("String_Node_Str");
          pw.print("String_Node_Str");
          pw.print(ps.pkg.splitNames[i]);
          pw.print("String_Node_Str");
          pw.println(ps.pkg.splitRevisionCodes[i]);
        }
      }
    }
    for (    UserInfo user : users) {
      pw.print(checkinTag);
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.print("String_Node_Str");
      pw.print(user.id);
      pw.print("String_Node_Str");
      pw.print(ps.getInstalled(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getHidden(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getSuspended(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getStopped(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print(ps.getNotLaunched(user.id) ? "String_Node_Str" : "String_Node_Str");
      pw.print("String_Node_Str");
      pw.print(ps.getEnabled(user.id));
      String lastDisabledAppCaller=ps.getLastDisabledAppCaller(user.id);
      pw.print("String_Node_Str");
      pw.print(lastDisabledAppCaller != null ? lastDisabledAppCaller : "String_Node_Str");
      pw.println();
    }
    return;
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.print(ps.realName != null ? ps.realName : ps.name);
  pw.print("String_Node_Str");
  pw.print(Integer.toHexString(System.identityHashCode(ps)));
  pw.println("String_Node_Str");
  if (ps.frozen) {
    pw.print(prefix);
    pw.println("String_Node_Str");
  }
  if (ps.realName != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.name);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.appId);
  if (ps.sharedUser != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.sharedUser);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.pkg);
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.codePathString);
  if (permissionNames == null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.resourcePathString);
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.legacyNativeLibraryPathString);
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.primaryCpuAbiString);
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.secondaryCpuAbiString);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.print(ps.versionCode);
  if (ps.pkg != null) {
    pw.print("String_Node_Str");
    pw.print(ps.pkg.applicationInfo.minSdkVersion);
    pw.print("String_Node_Str");
    pw.print(ps.pkg.applicationInfo.targetSdkVersion);
  }
  pw.println();
  if (ps.pkg != null) {
    if (ps.pkg.parentPackage != null) {
      PackageParser.Package parentPkg=ps.pkg.parentPackage;
      PackageSetting pps=mPackages.get(parentPkg.packageName);
      if (pps == null || !pps.codePathString.equals(parentPkg.codePath)) {
        pps=mDisabledSysPackages.get(parentPkg.packageName);
      }
      if (pps != null) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(pps.realName != null ? pps.realName : pps.name);
      }
    }
 else     if (ps.pkg.childPackages != null) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      final int childCount=ps.pkg.childPackages.size();
      for (int i=0; i < childCount; i++) {
        PackageParser.Package childPkg=ps.pkg.childPackages.get(i);
        PackageSetting cps=mPackages.get(childPkg.packageName);
        if (cps == null || !cps.codePathString.equals(childPkg.codePath)) {
          cps=mDisabledSysPackages.get(childPkg.packageName);
        }
        if (cps != null) {
          if (i > 0) {
            pw.print("String_Node_Str");
          }
          pw.print(cps.realName != null ? cps.realName : cps.name);
        }
      }
      pw.println("String_Node_Str");
    }
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.pkg.mVersionName);
    pw.print(prefix);
    pw.print("String_Node_Str");
    dumpSplitNames(pw,ps.pkg);
    pw.println();
    final int apkSigningVersion=PackageParser.getApkSigningVersion(ps.pkg);
    if (apkSigningVersion != PackageParser.APK_SIGNING_UNKNOWN) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.println(apkSigningVersion);
    }
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.pkg.applicationInfo.toString());
    pw.print(prefix);
    pw.print("String_Node_Str");
    printFlags(pw,ps.pkg.applicationInfo.flags,FLAG_DUMP_SPEC);
    pw.println();
    if (ps.pkg.applicationInfo.privateFlags != 0) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      printFlags(pw,ps.pkg.applicationInfo.privateFlags,PRIVATE_FLAG_DUMP_SPEC);
      pw.println();
    }
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.pkg.applicationInfo.dataDir);
    pw.print(prefix);
    pw.print("String_Node_Str");
    boolean first=true;
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    if ((ps.pkg.applicationInfo.flags & ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES) != 0) {
      if (!first)       pw.print("String_Node_Str");
      first=false;
      pw.print("String_Node_Str");
    }
    pw.println("String_Node_Str");
    if (ps.pkg.libraryNames != null && ps.pkg.libraryNames.size() > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.libraryNames.size(); i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.libraryNames.get(i));
      }
    }
    if (ps.pkg.usesLibraries != null && ps.pkg.usesLibraries.size() > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.usesLibraries.size(); i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.usesLibraries.get(i));
      }
    }
    if (ps.pkg.usesOptionalLibraries != null && ps.pkg.usesOptionalLibraries.size() > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.usesOptionalLibraries.size(); i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.usesOptionalLibraries.get(i));
      }
    }
    if (ps.pkg.usesLibraryFiles != null && ps.pkg.usesLibraryFiles.length > 0) {
      pw.print(prefix);
      pw.println("String_Node_Str");
      for (int i=0; i < ps.pkg.usesLibraryFiles.length; i++) {
        pw.print(prefix);
        pw.print("String_Node_Str");
        pw.println(ps.pkg.usesLibraryFiles[i]);
      }
    }
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  date.setTime(ps.timeStamp);
  pw.println(sdf.format(date));
  pw.print(prefix);
  pw.print("String_Node_Str");
  date.setTime(ps.firstInstallTime);
  pw.println(sdf.format(date));
  pw.print(prefix);
  pw.print("String_Node_Str");
  date.setTime(ps.lastUpdateTime);
  pw.println(sdf.format(date));
  if (ps.installerPackageName != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.installerPackageName);
  }
  if (ps.volumeUuid != null) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.println(ps.volumeUuid);
  }
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.println(ps.signatures);
  pw.print(prefix);
  pw.print("String_Node_Str");
  pw.print(ps.installPermissionsFixed);
  pw.print("String_Node_Str");
  pw.println(ps.installStatus);
  pw.print(prefix);
  pw.print("String_Node_Str");
  printFlags(pw,ps.pkgFlags,FLAG_DUMP_SPEC);
  pw.println();
  if (ps.pkg != null && ps.pkg.permissions != null && ps.pkg.permissions.size() > 0) {
    final ArrayList<PackageParser.Permission> perms=ps.pkg.permissions;
    pw.print(prefix);
    pw.println("String_Node_Str");
    for (int i=0; i < perms.size(); i++) {
      PackageParser.Permission perm=perms.get(i);
      if (permissionNames != null && !permissionNames.contains(perm.info.name)) {
        continue;
      }
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.print(perm.info.name);
      pw.print("String_Node_Str");
      pw.print(PermissionInfo.protectionToString(perm.info.protectionLevel));
      if ((perm.info.flags & PermissionInfo.FLAG_COSTS_MONEY) != 0) {
        pw.print("String_Node_Str");
      }
      if ((perm.info.flags & PermissionInfo.FLAG_REMOVED) != 0) {
        pw.print("String_Node_Str");
      }
      if ((perm.info.flags & PermissionInfo.FLAG_INSTALLED) != 0) {
        pw.print("String_Node_Str");
      }
      pw.println();
    }
  }
  if ((permissionNames != null || dumpAll) && ps.pkg != null && ps.pkg.requestedPermissions != null && ps.pkg.requestedPermissions.size() > 0) {
    final ArrayList<String> perms=ps.pkg.requestedPermissions;
    pw.print(prefix);
    pw.println("String_Node_Str");
    for (int i=0; i < perms.size(); i++) {
      String perm=perms.get(i);
      if (permissionNames != null && !permissionNames.contains(perm)) {
        continue;
      }
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.println(perm);
    }
  }
  if (ps.sharedUser == null || permissionNames != null || dumpAll) {
    PermissionsState permissionsState=ps.getPermissionsState();
    dumpInstallPermissionsLPr(pw,prefix + "String_Node_Str",permissionNames,permissionsState);
  }
  for (  UserInfo user : users) {
    pw.print(prefix);
    pw.print("String_Node_Str");
    pw.print(user.id);
    pw.print("String_Node_Str");
    pw.print("String_Node_Str");
    pw.print(ps.getInstalled(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getHidden(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getSuspended(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getStopped(user.id));
    pw.print("String_Node_Str");
    pw.print(ps.getNotLaunched(user.id));
    pw.print("String_Node_Str");
    pw.println(ps.getEnabled(user.id));
    String lastDisabledAppCaller=ps.getLastDisabledAppCaller(user.id);
    if (lastDisabledAppCaller != null) {
      pw.print(prefix);
      pw.print("String_Node_Str");
      pw.println(lastDisabledAppCaller);
    }
    if (ps.sharedUser == null) {
      PermissionsState permissionsState=ps.getPermissionsState();
      dumpGidsLPr(pw,prefix + "String_Node_Str",permissionsState.computeGids(user.id));
      dumpRuntimePermissionsLPr(pw,prefix + "String_Node_Str",permissionNames,permissionsState.getRuntimePermissionStates(user.id),dumpAll);
    }
    if (permissionNames == null) {
      ArraySet<String> cmp=ps.getDisabledComponents(user.id);
      if (cmp != null && cmp.size() > 0) {
        pw.print(prefix);
        pw.println("String_Node_Str");
        for (        String s : cmp) {
          pw.print(prefix);
          pw.print("String_Node_Str");
          pw.println(s);
        }
      }
      cmp=ps.getEnabledComponents(user.id);
      if (cmp != null && cmp.size() > 0) {
        pw.print(prefix);
        pw.println("String_Node_Str");
        for (        String s : cmp) {
          pw.print(prefix);
          pw.print("String_Node_Str");
          pw.println(s);
        }
      }
    }
  }
}