This commit is contained in:
Li 2023-04-24 23:53:22 +12:00
parent e726931b86
commit b51b7a7312
16 changed files with 373 additions and 154 deletions

View File

@ -3,6 +3,7 @@ using GameBuilder.Pops;
using GameBuilder.Psp;
using LibChovy;
using LibChovy.VersionKey;
using System.Text;
namespace ChovySign_CLI
{
@ -19,6 +20,10 @@ namespace ChovySign_CLI
private static PbpMode? pbpMode = null;
private static NpDrmRif? rifFile = null;
private static NpDrmInfo? drmInfo = null;
private static byte[]? actDat = null;
private static byte[]? idps = null;
private static string? rifFolder = null;
enum PbpMode
{
PSP = 0,
@ -35,15 +40,12 @@ namespace ChovySign_CLI
VERSIONKEY_EXTRACT = 4,
VERSIONKEY_GENERATOR = 5,
POPS_INFO = 6,
RIF = 7
KEYS_TXT_GEN = 7,
RIF = 8
}
public static int Error(string errorMsg, int ret)
{
ConsoleColor prevColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.Error.WriteLine("ERROR: "+errorMsg);
Console.ForegroundColor = prevColor;
return ret;
}
public static byte[] StringToByteArray(string hex)
@ -61,6 +63,40 @@ namespace ChovySign_CLI
Console.Write(msg + emptySpace + "\r");
}
private static void generateKeysTxt()
{
if (rifFolder is null || actDat is null || idps is null) return;
UInt64 accountId = BitConverter.ToUInt64(actDat, 0x8);
if (File.Exists("KEYS.TXT"))
KeysTxtMethod.KeysTxt = File.ReadAllText("KEYS.TXT");
else
File.WriteAllText("KEYS.TXT", KeysTxtMethod.KeysTxt);
HashSet<string> knownKeys = new HashSet<string>();
foreach (string contentId in KeysTxtMethod.ContentIds)
knownKeys.Add(contentId);
StringBuilder addKeys = new StringBuilder();
foreach (string rifFile in Directory.GetFiles(rifFolder, "*.rif"))
{
NpDrmRif rif = new NpDrmRif(File.ReadAllBytes(rifFile));
if (knownKeys.Contains(rif.ContentId)) continue;
if(rif.AccountId != accountId) { Error(rif.ContentId + " account id does not match: " + accountId.ToString("X") + " (was " + rif.AccountId.ToString("X") + ")", 10); continue; }
string[] keys = new string[4];
for (int i = 0; i < keys.Length; i++)
keys[i] = BitConverter.ToString(ActRifMethod.GetVersionKey(actDat, rif.Rif, idps, i).VersionKey).Replace("-", "");
string[] keysTxtLine = new string[] { rif.ContentId, keys[0], keys[1], keys[2], keys[3] };
string keysTxt = String.Join(' ', keysTxtLine);
addKeys.AppendLine(keysTxt);
Console.WriteLine(keysTxt);
}
File.AppendAllText("KEYS.TXT", addKeys.ToString());
}
private static int complete()
{
switch (mode)
@ -103,6 +139,12 @@ namespace ChovySign_CLI
if (parameters.Count > 2)
popsPic0File = parameters[2];
break;
case ArgumentParsingMode.KEYS_TXT_GEN:
if (parameters.Count != 3) return Error("--keys-txt-gen takes 3 arguments, (" + parameters.Count + " given)", 4);
actDat = File.ReadAllBytes(parameters[0]);
idps = StringToByteArray(parameters[1]);
rifFolder = parameters[2];
break;
case ArgumentParsingMode.RIF:
if (parameters.Count != 1) return Error("--rif expects only 1 argument,", 4);
rifFile = new NpDrmRif(File.ReadAllBytes(parameters[0]));
@ -127,6 +169,7 @@ namespace ChovySign_CLI
Console.WriteLine("--vkey [versionkey] [contentid] [key_index]");
Console.WriteLine("--vkey-extract [eboot.pbp]");
Console.WriteLine("--vkey-gen [act.dat] [license.rif] [console_id] [key_index]");
Console.WriteLine("--keys-txt-gen [act.dat] [console_id] [psp_license_folder]");
}
@ -180,6 +223,12 @@ namespace ChovySign_CLI
return Error("versionkey is already set", 3);
break;
case "--keys-txt-gen":
mode = ArgumentParsingMode.KEYS_TXT_GEN;
if (rifFolder is not null)
return Error("rif folder already set", 3);
break;
case "--rif":
mode = ArgumentParsingMode.RIF;
@ -209,9 +258,11 @@ namespace ChovySign_CLI
int res = complete();
if(res != 0) return res;
generateKeysTxt();
if (drmInfo is null) return Error("no versionkey was found, exiting", 6);
Console.WriteLine("Version Key: " + BitConverter.ToString(drmInfo.VersionKey).Replace("-", "") + ", " + drmInfo.KeyIndex);
//Console.WriteLine("Version Key: " + BitConverter.ToString(drmInfo.VersionKey).Replace("-", "") + ", " + drmInfo.KeyIndex);
if (pbpMode is null) return Error("no pbp mode was set, exiting", 7);

View File

@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<History>True|2023-04-19T20:33:00.3404616Z;False|2023-04-20T08:29:02.1306599+12:00;True|2023-04-19T21:53:45.1116925+12:00;True|2023-04-19T20:46:20.2756012+12:00;True|2023-04-19T19:58:40.3825010+12:00;True|2023-04-18T00:00:51.4131559+12:00;True|2023-04-17T09:56:35.5065135+12:00;True|2023-04-17T09:22:54.8607008+12:00;True|2023-04-17T08:27:16.5281469+12:00;True|2023-04-17T08:22:02.0531219+12:00;</History>
<History>True|2023-04-23T20:18:55.4774877Z;True|2023-04-20T08:33:00.3404616+12:00;False|2023-04-20T08:29:02.1306599+12:00;True|2023-04-19T21:53:45.1116925+12:00;True|2023-04-19T20:46:20.2756012+12:00;True|2023-04-19T19:58:40.3825010+12:00;True|2023-04-18T00:00:51.4131559+12:00;True|2023-04-17T09:56:35.5065135+12:00;True|2023-04-17T09:22:54.8607008+12:00;True|2023-04-17T08:27:16.5281469+12:00;True|2023-04-17T08:22:02.0531219+12:00;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@ -53,4 +53,8 @@
<ProjectReference Include="..\GameBuilder\GameBuilder.csproj" />
<ProjectReference Include="..\LibChovy\LibChovy.csproj" />
</ItemGroup>
<ItemGroup>
<UpToDateCheckInput Remove="Global\DevkitToggle.axaml" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,10 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="80"
x:Class="ChovySign_GUI.Global.DevkitToggle">
<Grid>
<CheckBox Name="devkitCheckbox" Content="I have a DevKit, TestKit or IDU Vita"/>
</Grid>
</UserControl>

View File

@ -0,0 +1,84 @@
using Avalonia.Controls;
using Avalonia.Interactivity;
using ChovySign_GUI.Popup.Global;
using LibChovy.Config;
using System;
using System.Collections.Generic;
using static ChovySign_GUI.Popup.Global.MessageBox;
namespace ChovySign_GUI.Global
{
public partial class DevkitToggle : UserControl
{
private static List<DevkitToggle> instances = new List<DevkitToggle>();
private const string useDevkitModeConfigKey = "USE_DEVKIT_ACCOUNT_ID";
internal bool disableEvents = false;
private async void onDevkitModeChecked(object? sender, RoutedEventArgs e)
{
if (disableEvents) return;
CheckBox? checkBox = sender as CheckBox;
if (checkBox is null) return;
bool? devMode = checkBox.IsChecked;
if (devMode is null) devMode = false;
Window? currentWindow = this.VisualRoot as Window;
if (currentWindow is not Window) throw new Exception("could not find current window");
MessageBoxResult res = await MessageBox.Show(currentWindow, "This option will force the CMA Account ID to be all 0's\nWhich is how it is on Devkit, Testkit and IDU Firmware\nEnabling this if you have a retail firmware will result in the games just *not* showing up\n\nIf you DON'T know what this means, DON'T enable this.\ndo you want to continue?", "Are you sure?", MessageBoxButtons.YesNo);
if (res == MessageBoxResult.Yes)
{
IsDevkitMode = true;
}
else
{
IsDevkitMode = false;
}
}
private void onDevkitModeUnchecked(object? sender, RoutedEventArgs e)
{
if (disableEvents) return;
CheckBox? checkBox = sender as CheckBox;
if (checkBox is null) return;
bool? devMode = checkBox.IsChecked;
if (devMode is null) devMode = false;
IsDevkitMode = (bool)devMode;
}
public bool IsDevkitMode
{
get
{
if (this.devkitCheckbox.IsChecked is null) return false;
return (bool)this.devkitCheckbox.IsChecked;
}
set
{
foreach (DevkitToggle instance in instances)
{
instance.disableEvents = true;
instance.devkitCheckbox.IsChecked = value;
instance.disableEvents = false;
}
ChovyConfig.CurrentConfig.SetBool(useDevkitModeConfigKey, value);
}
}
public DevkitToggle()
{
InitializeComponent();
devkitCheckbox.IsChecked = ChovyConfig.CurrentConfig.GetBool(useDevkitModeConfigKey);
devkitCheckbox.Unchecked += onDevkitModeUnchecked;
devkitCheckbox.Checked += onDevkitModeChecked;
instances.Add(this);
}
}
}

View File

@ -29,7 +29,7 @@
</Grid>
<!-- Credits -->
<CheckBox Name="devkitAccount" Content="I have a DevKit, TestKit or IDU Vita" VerticalAlignment="Bottom" HorizontalAlignment="Left"/>
<Global:DevkitToggle Name="devkitAccount" VerticalAlignment="Bottom" HorizontalAlignment="Left"/>
<Label Content="Li, Dots TB, SquallATF, Motoharu, Davee" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
</Grid>
</UserControl>

View File

@ -14,45 +14,9 @@ namespace ChovySign_GUI.Ps1
{
public partial class Ps1Tab : UserControl
{
private const string useDevkitModeConfigKey = "USE_DEVKIT_ACCOUNT_ID";
private async void onDevkitModeChecked(object? sender, RoutedEventArgs e)
{
CheckBox? checkBox = sender as CheckBox;
if (checkBox is null) return;
bool? devMode = checkBox.IsChecked;
if (devMode is null) devMode = false;
Window? currentWindow = this.VisualRoot as Window;
if (currentWindow is not Window) throw new Exception("could not find current window");
MessageBoxResult res = await MessageBox.Show(currentWindow, "This option will force the CMA Account ID to be all 0's\nWhich is how it is on Devkit, Testkit and IDU Firmware\nEnabling this if you have a retail firmware will result in the games just *not* showing up\n\nIf you DON'T know what this means, DON'T enable this.\ndo you want to continue?", "Are you sure?", MessageBoxButtons.YesNo);
if (res == MessageBoxResult.Yes)
{
ChovyConfig.CurrentConfig.SetBool(useDevkitModeConfigKey, (bool)devMode);
}
else
{
e.Handled = true;
checkBox.IsChecked = false;
}
}
private void onDevkitModeUnchecked(object? sender, RoutedEventArgs e)
{
CheckBox? checkBox = sender as CheckBox;
if (checkBox is null) return;
bool? devMode = checkBox.IsChecked;
if (devMode is null) devMode = false;
ChovyConfig.CurrentConfig.SetBool(useDevkitModeConfigKey, (bool)devMode);
}
public Ps1Tab()
{
InitializeComponent();
devkitAccount.IsChecked = ChovyConfig.CurrentConfig.GetBool(useDevkitModeConfigKey);
devkitAccount.Unchecked += onDevkitModeUnchecked;
devkitAccount.Checked += onDevkitModeChecked;
discSelector.DiscsSelected += onDiscSelected;
keySelector.ValidStateChanged += onKeyValidityChanged;
@ -69,6 +33,7 @@ namespace ChovySign_GUI.Ps1
{
keySelector.IsEnabled = true;
discSelector.IsEnabled = true;
devkitAccount.IsEnabled = true;
gameInfo.IsEnabled = true;
Window? currentWindow = this.VisualRoot as Window;
@ -82,6 +47,7 @@ namespace ChovySign_GUI.Ps1
{
keySelector.IsEnabled = false;
discSelector.IsEnabled = false;
devkitAccount.IsEnabled = false;
gameInfo.IsEnabled = false;
if (keySelector.Rif is null) return;
@ -101,7 +67,7 @@ namespace ChovySign_GUI.Ps1
popsParameters.Pic0 = gameInfo.Pic0;
popsParameters.Pic1 = gameInfo.Pic1;
if (devkitAccount.IsChecked == true)
if (devkitAccount.IsDevkitMode)
popsParameters.Account = new Account(0);
progressStatus.Parameters = popsParameters;

View File

@ -26,7 +26,7 @@
</Grid>
<!-- Credits -->
<CheckBox Name="devkitAccount" Content="I have a DevKit, TestKit or IDU Vita" VerticalAlignment="Bottom" HorizontalAlignment="Left"/>
<Global:DevkitToggle Name="devkitAccount" VerticalAlignment="Bottom" HorizontalAlignment="Left"/>
<Label Content="Li, Dots TB, SquallATF, Motoharu, Davee" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
</Grid>
</UserControl>

View File

@ -12,39 +12,6 @@ namespace ChovySign_GUI.Psp
{
public partial class PspTab : UserControl
{
private const string useDevkitModeConfigKey = "USE_DEVKIT_ACCOUNT_ID";
private async void onDevkitModeChecked(object? sender, RoutedEventArgs e)
{
CheckBox? checkBox = sender as CheckBox;
if (checkBox is null) return;
bool? devMode = checkBox.IsChecked;
if (devMode is null) devMode = false;
Window? currentWindow = this.VisualRoot as Window;
if (currentWindow is not Window) throw new Exception("could not find current window");
MessageBoxResult res = await MessageBox.Show(currentWindow, "This option will force the CMA Account ID to be all 0's\nWhich is how it is on Devkit, Testkit and IDU Firmware\nEnabling this if you have a retail firmware will result in the games just *not* showing up\n\nIf you DON'T know what this means, DON'T enable this.\ndo you want to continue?", "Are you sure?", MessageBoxButtons.YesNo);
if (res == MessageBoxResult.Yes)
{
ChovyConfig.CurrentConfig.SetBool(useDevkitModeConfigKey, (bool)devMode);
}
else
{
e.Handled = true;
checkBox.IsChecked = false;
}
}
private void onDevkitModeUnchecked(object? sender, RoutedEventArgs e)
{
CheckBox? checkBox = sender as CheckBox;
if (checkBox is null) return;
bool? devMode = checkBox.IsChecked;
if (devMode is null) devMode = false;
ChovyConfig.CurrentConfig.SetBool(useDevkitModeConfigKey, (bool)devMode);
}
private void check()
{
@ -53,9 +20,6 @@ namespace ChovySign_GUI.Psp
public PspTab()
{
InitializeComponent();
devkitAccount.IsChecked = ChovyConfig.CurrentConfig.GetBool(useDevkitModeConfigKey);
devkitAccount.Unchecked += onDevkitModeUnchecked;
devkitAccount.Checked += onDevkitModeChecked;
keySelector.ValidStateChanged += onValidStateChange;
isoSelector.UmdChanged += onUmdChanged;
@ -69,6 +33,7 @@ namespace ChovySign_GUI.Psp
{
keySelector.IsEnabled = true;
isoSelector.IsEnabled = true;
devkitAccount.IsEnabled = true;
Window? currentWindow = this.VisualRoot as Window;
if (currentWindow is not Window) throw new Exception("could not find current window");
@ -79,6 +44,7 @@ namespace ChovySign_GUI.Psp
private void onProcessStarting(object? sender, EventArgs e)
{
keySelector.IsEnabled = false;
devkitAccount.IsEnabled = false;
isoSelector.IsEnabled = false;
if (keySelector.Rif is null) return;
if (keySelector.VersionKey is null) return;
@ -93,6 +59,9 @@ namespace ChovySign_GUI.Psp
pspParameters.Umd = umd;
pspParameters.Compress = isoSelector.Compress;
if (devkitAccount.IsDevkitMode)
pspParameters.Account = new Account(0);
progressStatus.Parameters = pspParameters;
}

View File

@ -51,8 +51,7 @@ namespace GameBuilder.Pops
generatePsIsoHeader();
// Copy compressed ISO to PSAR stream..
compressor.CompressedIso.Seek(0x00, SeekOrigin.Begin);
compressor.CompressedIso.CopyTo(Psar);
copyToProgress(compressor.CompressedIso, Psar, "Copy Compressed ISO to PSISOIMG");
// write STARTDAT
Int64 startDatLocation = Psar.Position;

View File

@ -73,8 +73,7 @@ namespace GameBuilder.Pops
psarUtil.WriteBytes(isoMap);
psarUtil.PadUntil(0x00, PSISO_ALIGN);
isoPart.Seek(0x00, SeekOrigin.Begin);
isoPart.CopyTo(Psar);
copyToProgress(isoPart, Psar, "Copy ISOs to PSTITLEIMG");
psarUtil.WriteBytes(StartDat);
psarUtil.WriteBytes(SimplePgd);
@ -136,8 +135,7 @@ namespace GameBuilder.Pops
psIsoImg.generatePsIsoHeader();
// Copy compressed ISO to PSISOIMG
compressors[i].CompressedIso.Seek(0x00, SeekOrigin.Begin);
compressors[i].CompressedIso.CopyTo(psIsoImg.Psar);
copyToProgress(compressors[i].CompressedIso, psIsoImg.Psar, "Copy Compressed ISO (" + i + ") to PSISOIMG");
// read 0x400 bytes from PSAR copy iso header after that,.
psIsoImg.Psar.Seek(0x0, SeekOrigin.Begin);
@ -151,8 +149,7 @@ namespace GameBuilder.Pops
Array.ConstrainedCopy(checksum, 0, checksums, i * 0x10, 0x10);
// copy psiso to TITLE ..
psIsoImg.Psar.Seek(0x00, SeekOrigin.Begin);
psIsoImg.Psar.CopyTo(isoPart);
copyToProgress(psIsoImg.Psar, isoPart, "Copy PSISOIMG (" + i + ") to PSTITLEIMG");
}

View File

@ -1,6 +1,4 @@
using Org.BouncyCastle.Crypto.Paddings;
using Org.BouncyCastle.Ocsp;
using GameBuilder.Pops;
using GameBuilder.Pops;
using PspCrypto;
using System;
using System.Collections.Generic;
@ -85,8 +83,7 @@ namespace GameBuilder.Psp
psarUtil.WriteBytes(npHdrBuf);
psarUtil.WriteBytes(tbl);
isoData.Seek(0x00, SeekOrigin.Begin);
isoData.CopyTo(Psar);
copyToProgress(isoData, Psar, "Copy UMD Image to NPUMDIMG");
}
private byte[] signParamSfo(byte[] paramSfo)
@ -120,54 +117,58 @@ namespace GameBuilder.Psp
}
}
private int compressAndWriteBlock(Int64 isoOffset)
{
int wsize = 0;
byte[] isoBuf = new byte[BLOCK_SZ];
wsize = umdImage.IsoStream.Read(isoBuf, 0x00, BLOCK_SZ);
byte[] wbuf = isoBuf;
if (this.compress) // Compress data.
{
byte[] lzRcBuf = Lz.compress(isoBuf, true);
//memset(lzrc_buf + lzrc_size, 0, 16);
int ratio = (lzRcBuf.Length * 100) / BLOCK_SZ;
if (ratio < RATIO_LIMIT)
{
wbuf = lzRcBuf;
wsize = lzRcBuf.Length;
wsize += MathUtil.CalculatePaddingAmount(wsize, 16);
Array.Resize(ref lzRcBuf, wsize);
}
}
int unpaddedSz = wsize;
wsize += MathUtil.CalculatePaddingAmount(wsize, 16);
Array.Resize(ref wbuf, wsize);
encryptBlock(wbuf, Convert.ToInt32(isoOffset));
byte[] hash = hashBlock(wbuf);
npTblUtil.WriteBytes(hash);
npTblUtil.WriteUInt32(Convert.ToUInt32(isoOffset));
npTblUtil.WriteUInt32(Convert.ToUInt32(unpaddedSz));
npTblUtil.WriteInt32(0);
npTblUtil.WriteInt32(0);
isoData.Write(wbuf, 0, wsize);
return wsize;
}
private void createNpUmdTbl()
{
Int64 tableSz = isoBlocks * 0x20;
Int64 isoSz = umdImage.IsoStream.Length;
int wsize = 0;
Int64 isoOffset = 0x100 + tableSz;
for (int i = 0; i < isoBlocks; i++)
{
byte[] isoBuf = new byte[BLOCK_SZ];
wsize = umdImage.IsoStream.Read(isoBuf, 0x00, BLOCK_SZ);
byte[] wbuf = isoBuf;
if (this.compress) // Compress data.
{
byte[] lzRcBuf = Lz.compress(isoBuf, true);
//memset(lzrc_buf + lzrc_size, 0, 16);
int ratio = (lzRcBuf.Length * 100) / BLOCK_SZ;
if (ratio < RATIO_LIMIT)
{
wbuf = lzRcBuf;
wsize = lzRcBuf.Length;
wsize += MathUtil.CalculatePaddingAmount(wsize, 16);
Array.Resize(ref lzRcBuf, wsize);
}
}
int unpaddedSz = wsize;
wsize += MathUtil.CalculatePaddingAmount(wsize, 16);
Array.Resize(ref wbuf, wsize);
encryptBlock(wbuf, Convert.ToInt32(isoOffset));
byte[] hash = hashBlock(wbuf);
npTblUtil.WriteBytes(hash);
npTblUtil.WriteUInt32(Convert.ToUInt32(isoOffset));
npTblUtil.WriteUInt32(Convert.ToUInt32(unpaddedSz));
npTblUtil.WriteInt32(0);
npTblUtil.WriteInt32(0);
isoData.Write(wbuf, 0, wsize);
isoOffset += wsize;
isoOffset += compressAndWriteBlock(isoOffset);
updateProgress(Convert.ToInt32(umdImage.IsoStream.Position), Convert.ToInt32(umdImage.IsoStream.Length), "Compress & Encrypt UMD Image");
}

View File

@ -61,7 +61,7 @@ namespace GameBuilder.Psp
using(FileStream pbpFile = File.OpenWrite(file))
{
pbpStream.Seek(0x00, SeekOrigin.Begin);
copyPsarWithProgress(pbpStream, pbpFile, "Write to Disk");
copyToProgress(pbpStream, pbpFile, "Write to Disk");
}
}
@ -122,23 +122,10 @@ namespace GameBuilder.Psp
pbpUtil.WriteBytes(dataPsp);
// write DATA.PSAR
copyPsarWithProgress(psar.Psar, pbpStream);
copyToProgress(psar.Psar, pbpStream, "Build PBP");
}
private void copyPsarWithProgress(Stream src, Stream dst, string msg = "Build PBP")
{
src.Seek(0, SeekOrigin.Begin);
while (src.Position < src.Length)
{
byte[] readBuffer = new byte[0x30000];
int readAmt = src.Read(readBuffer, 0x00, readBuffer.Length);
dst.Write(readBuffer, 0x00, readAmt);
updateProgress(Convert.ToInt32(src.Position), Convert.ToInt32(src.Length), msg);
}
}
public void Dispose()
{
psar.Dispose();

View File

@ -15,6 +15,19 @@ namespace Li.Progress
progressCallbacks.Add(cb);
}
protected void copyToProgress(Stream src, Stream dst, string msg)
{
src.Seek(0, SeekOrigin.Begin);
byte[] readBuffer = new byte[0x30000];
while (src.Position < src.Length)
{
int readAmt = src.Read(readBuffer, 0x00, readBuffer.Length);
dst.Write(readBuffer, 0x00, readAmt);
updateProgress(Convert.ToInt32(src.Position), Convert.ToInt32(src.Length), msg);
}
}
protected void updateProgress(int done, int remain, string what)
{
ProgressInfo inf = new ProgressInfo(done, remain, what);

View File

@ -1 +1,139 @@
EP9000-NPEG00005_00-0000000000000001 51409FAC25DEAD80B44A9DAF0EB6A335 A0B1439B8E76B90AB2169978750B1E84 5AB0B5E2C32EE3BAFEF80ADE35BD7888 0B8450E063523674011C6B2B94829F7A
HP9000-NPHG00024_00-LOCOROCOMCGAME01 6AECD735764DDFBFE46D0B6FF616E007 1458017F42AD3B01CAECCC0E92C9266B CE077D8BCE9BCDC6D388677F5F09350A 23FE3E51AE5CA074FD5ACEF1E24D47AC
HP9000-NPHG00090_00-0000888800000001 5EE84278B7E6B55ABAD7466CBE481A8C 3003DD19B832B9C5681D9A7E16D46EA4 E211FBE9789622B4DCA877CC84B5848C B2CDA2B9BB9F5207F2B185E3D6EAB74E
HP9000-NPHG00090_00-0000888800000000 A2750A83E292D3F8BC6941BA56FA58E5 0FB84015CCC220801CBA7BB977BDF23B 88A87FE26F249DAB80609AFB3ACDD5EB 40E3C053AB53C2ED54818592CF308440
HP0082-NPHH00293_00-0000000000010024 8608452A76C761635892A3B2137A4CAB CAEF32FAE602517BB1DE6282D462BAA4 A9C88FB23F476A811D73A2162DD60984 792FD356E91BAD3743487148BA7FC878
JP0082-NPJH50335_00-0000000000000011 80C8E070342A92369FB47F2A71EDC952 B1BE396248069EA4A1F6477F0FB5206F A168805BE7B8AF64B8819CF89148A317 50A008012CC6B1CF2C2FAFABC07F0BBB
HP9000-UCAS40318_00-DLMC000000000000 E2F2C0366ADBE1DE0F7610C4E0AAF387 BC8819D0318D1262FBC70C9555AF528E 0ED8ABC856997B966AF44A2A302A412D 18E33848DF24C0B342F81206DA236C2A
HP9000-UCAS40318_00-DLM0000000000000 82A77C9D8320B8C76DA1BD5CB8E27E24 59A8AD070F7A4E701A36637DC4615E62 6B7C3215E4FB7EF42D88CF78A2E30908 8DE52E52DA2089E8C359F2CDA65F4BBD
HP9000-UCAS40318_00-DLM0000000000001 49830F50A9C1623A11007D431E873C39 4D95BA16D0E9A0D61176CD420C0FECA1 C1E6AD69A3AD74BE29B68B3B2F47AB09 C4D6F5F1322900B10C91D0372F35B1A4
HP9000-UCAS40318_00-DLM0000000000006 F979676683260229D135263A5B018D20 439F7EC920A15C46541FB04F888D6908 F3913BC236C7F79095173911E871138E BA19784BFD04684847C8A199A0F2CACF
HP9000-UCAS40318_00-DLM0000000000010 094E276452C48BFB2CFAE9214077DC7E 05F1BE655F63AE94C2867858EFCFE29C BDF9AF06353A150A3E6E280F4B7C5CB3 0CC8F28E7F7D5E08F1A422E3EDAA398D
HP9000-UCAS40318_00-DLM0000000000002 C03CBDD8EE43D5FBC5ED9F06E3F7230D 599E598EFA05DF9630C97DAA67F5A2EF 65792818A3E9D2BF7854E76B7726CE05 2ACEF1E30716FBF16E381A6D937F1EDB
HP9000-UCAS40318_00-DLM0000000000011 E3634A0F591C0DC7A337BD6C839ECA41 E377E92A54A1BD401EB5C69093E9D136 ADD4845C20443EF1A0BD873845830043 A844CBA744ADEA9877769A84E866937B
HP9000-UCAS40318_00-DLM0000000000012 BCC2A66FBF7BC913AECB28A39A77E265 4BF832122599AAB1624EB7528F97FC95 D2B55C74B8E58BB06EB0FB83A04C1876 BC0E17C54862D0C25AE43D26113EC6C2
HP9000-UCAS40318_00-DLM0000000000003 4F7EFD8331B53FD526C93C2D40479FDE C32D85285477F509C323EBFC61332232 D8F8182FB19FB2FD058B7ADD00EE5840 56A81B5F045659481107E50057F4ACD7
HP9000-UCAS40318_00-DLM0000000000004 EF9B29F989B3E31B24C67B0925798D85 AEDFB6FD552E5118B9F45F151BA20CF5 F2CD625E57BFC6E169BA0943E1ED40F5 7A8ADC30C743E615E544A4A6F4CD37E8
HP9000-UCAS40318_00-DLM0000000000014 4D803E6B756F376E48B30F52F057F214 609E861016121C1719C0FACB532CFE05 50550C9183C580A987F2BF94BB7B1FD4 AE7CFD86001FA07C41033DEBCC571E54
HP9000-UCAS40318_00-DLM0000000000005 8E27DC82BC63E571FF6822E20020E2D2 7B944E1B5B9BCBC7C281F01DD5EE6C5E 4C0B8DA8C9E87C64E88A8339CC506C69 241F071A92C06D03A86254E8112D5954
HP9000-UCAS40318_00-DLM0000000000008 5FC4DA442561D575F5F4D3F304259399 BC992ED453A33C9B8F25DA7BC5F93D73 BF5F5BE4AE1AC0DF46065DBEF4AB1153 8CAE1DBF1A4E9450DF7959105260B621
HP9000-UCAS40318_00-DLM0000000000007 36FC959B4C6CB09E4E0F83A3D9E54DCF EC679310BD0336CB1D1091BFC8938532 D4820FF2EE76AC00A35E1AF6B99160B1 6D902692847999B568E91E65FA110C89
HP9000-UCAS40318_00-DLM0000000000013 1435AA0227D36CE99EE601A05C8DF141 BD26D82E23D23E589585A0214157FBE1 0EC71A35015818AA849813DC43B53C86 FD89B8A6C19FD22DF8060F96ABC5E486
HP9000-NPHG00032_00-PRESELLADDONPCK0 0D8DBF4F5E445A5202B6B8FA2AECC383 787B8A5731E72FE0C49E844C5C244AC3 BBB8DB14D6DFE2D27162F3E723A9E4DA 9CFC21B3DF159445CC2959CE2EFC30D7
HP9000-NPHG00032_00-PRESELLADDONPCK1 75932477247D3F815CF95BFE95BF4A43 1D2D74260D1D8BA491D52AB861A74CB5 5E6B556AA904B0632AD999C238AB5DB4 2F0890C917EF103E00779138B6E19EB4
HP9000-NPHG00032_00-PRESELLADDONPCK3 735DED051378373FB843D721F2B9BE76 B5BE530EF18C0B5B3CBCEB1723DAD47F 378E2D2E3827810371803C37FFC5EA5B 0283875305B133FBA9799EACDCEA7901
JP0082-NPJH50348_00-APPENDCC00000004 F40B62A6D88A2F02545AF4E5FE8DC1B4 1E9A2CAEA3C76DC5CBB761DB9DEDBA96 FEF2AF56D1574B2CF402EB93AA20F38F 2528D02B905FBDEFC1EF6F9509CAC433
EP9000-NPEE00075_00-GSPYRO3YEA000ENG BB99EA9BFD9F052C9898885DC093DE26 FEC91D41E3F1260B5F4C3365DCB989BA FE62D5C24C6FC6C7C04C4AF5914686D3 90AA9061EE84599F30EFC81DA6F7284A
EP4300-NPEZ00311_00-0000111122223333 A6A1354A1EDC8A76AB2CC6016B9D27B2 C6F3DDA2DC06287A52580304BAB1E6FF 19A9BF88A4CE8F16EF4504F4E3EDFCE4 92AD130D3B2F54F6846CC3A47E5816AD
EP4015-ULES01556_00-GPCTHELEGE000001 C747AAD57FE83C7C543F3B158C733A2E 7C37E79E3B700A89DD5219E1EA309CCD 3E54218025EEE9F6C423E1C3CA3BCB30 984991AABD11FCBB5A9F85BE76120A54
EP1023-NPEH00166_00-SORANOKISEKISC01 908EB0D54CDA588FF65F8E57C8D7DC06 2A8B5E509424DD910D34C60D11860F00 42DDD85BECA0E56913AF6E9852D86961 AFC9DFFC436B516138CE61F37125CF86
EP1023-NPEH00167_00-SORANOKISEKISC02 AF3255C858A010900D4DC7ADC76EF530 7438C333B1C809A11769D06A4438B952 FC4E9131CD5CE3ABAC7F5C91F5DE108D EE570A9DB4B712CA0203EED2EDD57241
EP9000-UCES00304_00-LOCOROCO01PSP001 85A90C734A6566BA77FC4FCE97F398BD DD4FB9673C9F79B85C6C3BA83D884A31 9F22DA6C7D531AB25FDAC34D1FA3106E F8C25AEEF62C6D75DCC49023D9213637
EP0001-ULES01302_00-0000000000002001 1F087B00BD3007E34334624B5BA16A4B 4D5DE7B3683B510761D4AAB7549FA26A 01CAF3F7264545A383303141B6CE9B40 7EB438C5C546A8B954BD83E17B10E19F
EP0001-ULES01302_00-0000000000002002 D952A2F560B65972FD42B7B818A4F205 B476740F90DE214C52E77923B859FF3C BE334AE10263CA0E6E3A399925088252 CC9AE1E1AAC666EBA03FD2911BD4B791
EP0001-ULES01302_00-0000000000002003 8D812120D3D7B3BACB92190FC6356E78 75925EA8064F78C2A1325E5B2B570C20 63A73B6806E7D8D6007FFD50E28617CC F9FF40E5CB93E64278E78AFBB5469197
EP1063-ULES01392_00-DISGAEA2DLC00001 70D93324BE6FFC929FD2F7B7D8B8A5C3 2DE7C0A52C3A7F97C5412B6F18579A9E 4DA696667443F39F581979D66E9BA825 7A5986CBC4C13A8298518FEC484154B6
EP1063-ULES01392_00-DISGAEA2DLC00003 6E2BC6A41129AE809FFAB2F61875E922 E68A590EF5B771EBEF73B63BE1ABDB86 6C42BE92F982F86F82B60D36DE471A71 EAD693EC67F237B18E071445A0FEF6BB
EP0082-ULES01505_00-0000000000010024 7002295DED9959703DF4614996F40F39 810AD75151DF613FB5E2A0F42F68AF36 98C6BFB8E161EE9A04E256C84C0EA2B8 B6B068E488A0BE8C819D575422B1ACB7
EP0106-ULES01221_00-STRIKEFORCEDLC04 CFD3D746AC4D5A6929AE6D99F158CDFA 02277AA0D9756C7590AE47ED72AE20FC 08E133607930F9FF81823F7E94FC8345 4A9CB59E781858B69D53EEC021FEC308
EP0106-ULES01221_00-STRIKEFORCEDLC05 B6AFFAB5927EB1371655E16E843CE1D9 345CFFA38B27F7432BB56AB08523B7FB EF4E1F14031B9E65D75FB8C910F12A6B 25B20CEC0C024E73778B0EF76E62BC07
EP0106-ULES01221_00-STRIKEFORCEDLC06 66C7668D78BE3FD078DF9C980AA07DA2 9A039346AC408DC33420B742F695E509 BAF00945BD826B1DF624A8D47B47987D E629AED904271580486CB55A661D0CE6
EP0106-ULES01221_00-STRIKEFORCEDLC07 A71AD5DB5EB4865AC147E4CDD729E4C1 4270DD5F699A7A0559D8911FDA0BA061 F3397B13F6DA011B1154768F6AFD210F 0E4A2A1C46C3CE3F5679AEB3A03442BA
EP9000-UCES01313_00-CAVE000000000002 E31C419C6000A1A2F7A1D8FBBD09DFF7 77CBCDB1F798286CCC9D21DADEA62FDC EECC423E85F5F1938B91DC6D74FC49FF 9129B8BA48EE08358DE3A069CC875F6E
EP1023-NPEH00065_00-0000000000000000 D30B299CD39DCD88D371A2284404CB79 31E3CB3BB763CD285D90129B1D9D43FB D8204F59C9AC83B27F2381074D04B368 446AD4EBB3F8F22BE8B20C760D9D50D4
EP9000-UCES01313_00-DESERT0000000001 0FEC95482B2F17D3A1FB20F1356FFB2E BB139D8999CA45168E5A6C96C4473AC2 92260207706841B38C23C14FB7F610C5 CACB5F016702DDE24E0E6E11E49B60B8
EP9000-UCES01313_00-OCEAN00000000004 A8C71ED62243D0F1423D26A815E0BA48 6215E3138EF0F5FAE503558B6735931B B0D6CCF8F636D61C2B0F6249F1C38E7A 9A30D677875CA0CA60DCC8DB1E72CFE6
EP9000-UCES01313_00-PYRAMID000000003 64458994F08A994B7830632E86AFD5DA 3E1B2C28CC50064AAE1AFB0383C45EEA 3463FFA1D3DDDED6819475AC23D1BAD7 52B18E060617490A446AEA887BB301CD
EP9000-UCES01313_00-SHUTTLE000000006 FE13172CD58EECB27766D2D2BE7BB8E8 3373A8F42AF5D7E10B1E4F92350D9457 CB321A9B8E27FF2AAD52F4F67E80A406 22FAEA5D4F04071087A1206E2E53DC6F
EP9000-UCES01313_00-SNOW000000000005 1FA686B8471C627246CA4E6A46ED241B 2DD1E2317A04178AC7BB296F046BC25A 9B6AFA2AFA974F02D066C1A31DED7E7D 17A2F45B8D169C07539A13730CEE3B07
EP9000-UCES01313_00-SPACE00000000007 79A54B44789DB5C7C3F720E524DFFEAF 45543A9B3859EEB1066A24F4A3855BB5 C94963F03630DD117B311C96C48885AA 526AD15E4A1284926FF74029E9E5F0D3
EP9001-UCES01245_00-0000000000000001 F93A78464C5146A6A3540432789A79E7 B63DD63ACE0BA367D9FB767529B595F0 0CB096AFF30650ABAA4024524553F926 415269E480F03DC4592F191A11C17541
EP9001-UCES01245_00-0000000000000002 DD69A6382405484359D9999C5BF64E9B AD2C247EF2DA875219023CA16B70C28F 0E0B5CEFFC7DC8791F301FD3C27B3981 28ED757CD874F4F06C367D5EDD348B11
EP9001-UCES01245_00-0000000000000004 E635F1757061DEEA30B4DC13A22587F7 9CBFF87906004100A631252AF4E3CFC0 EFFB3A7A451E1DAD6C17D9292835DCDA 94300B0AE7DEC2CD8CC05F9A74C0C482
EP9001-UCES01245_00-0000000000000006 F879C8B74588220585300A86ECBC63DC 074BF9C5581CC1EA2EC03F32D199371A 354AA9C47409EDE89E42008F29DF32DA B9927BF62C12B69B5870A321F41A753C
EP9001-UCES01245_00-0000000000000007 FD04BC384BACA1068B8CAFEBAA6505A2 9CA76E5764B93462694EF514F1681ACB EBF6BF851FF25450B7E6F76BB7887BBA 2B930C12060FD4BF56EC9305F6C208A6
EP1006-ULES01303_00-MOMENTPACK000003 08260E90D8D9457C3FACCEFE8015DDE1 3E6CE1F0006680BABF725CBA14EE18A0 9F93443467D90BB07C0AAB82B67E0F4D DACAECDEEF333650A83E4687B518AC2B
EP1006-ULES01303_00-STAGEPACK0000004 405171691B1B8A9226D6131FEA3DD4B3 0AA2EB087C837E857AC23EE17235E684 6A85418556EFE9007C5CFF595891B6ED 886C873535F86D7B81DF4E197182BA2B
EP9000-UCES01264_00-LBPPDLCSONYLK002 4C36120290D0788B1DF24FCFE50C858E 2B12F70AF49765573C9CB0BB877235EF 2674FC58D39BC3A8008DDFBE4769024B 742CF08808AB07B6A085F00D5D5CFF60
EP9000-UCES01264_00-LBPPDLCSONYCK023 8D0AD74ED459B6BB894B4BB13E8214E8 E7D35F7FC81C9BD3C3DBDB25C2391324 D1825ED66E4C3C6518C50895BB9C276B 88CFBEAB2AD84DC2157740BB6BDAE015
EP9000-UCES01264_00-LBPPDLCSONYCK022 72C7C442412D237B455AD89E58458E80 25A06D250FA310A62F677CEA329DD937 613109BDEDF315D39EF068D7B9E5E942 62A399CB642750FB6D398F13024CD911
EP9000-UCES01264_00-LBPPDLCSONYCK017 D24E6B0BEAD15ABAA52C678B7ED92D73 177A965DA33882B689C5B0935653215B 23FA1BC11657F0B1928E9BEA14A44C99 D541C05FBFCE19A66920F4789CD5BF60
UP0001-NPUH90024_00-SADDLECLUBDEMO01 CA5EF7655E976446B20CC4656717D63F C8B3E5F5B77F4DBBE8E87023CA3802AD F3B901310A34B9C496E6E3978A0D4648 E85A9A9C87D94F6F08733AB221DA7DA4
UP9000-NPUG80318_00-LOCOROCOMCGAME01 1021F184AD381EC60304CB4292E0D806 17749A63023C0284DDC939479A3CD712 666EFD8CA72C043028D9E5071AC579F9 554F120E11138351A071ADCAE64F37CD
JA0003-PCSC80018_00-POCKETSTATION001 62903C04BF3CC3123EFC61211C58B570 F5B868A18C33A7E15B14ADB80B85BAA8 98A2513141231E7DD67A9E5432696846 70EEF538F9AC1133940C58E7BAD9456D
JP9000-NPJI90001_00-0000000000000001 245698A474961BE9DAA4E350E9CD9A9B FFA4EF72B3B24BD25CBB3B91E6B5A5E8 9B8FA460F583EE976564838591E9D524 CC91CAE6213FB6CC0AF8F1F2FD619194
JP0103-NPJH60032_00-A15PLAYVIEWPSP03 C4313AE0DFE6E6329BD73BA2AE95E3D1 7759B21EBB9D12C759ECB183F36E10B9 892161E9FC3730E3F0519247684F3B7F 5A345456DB8D2F4C87876003784B39E1
JP0103-NPJH60029_00-A15PLAYVIEWPSP01 274F5CFC0C7478CE8A6801E667674C09 66F5DDB9C338FBF8A0340C49106D32B9 5E4B5E9979239FC0478F5D205046A178 5D716784BF7C7A54977397BFED3262B1
JP0106-ULJM05584_00-SM5EMPDLC69COS09 402FD7A34D52941E20121948158D0CCA 0371537FD22F19F1F05E13E1AE680314 C177899DEC7D056038A72C0E2CBAB472 687D4E983CF35C180523DB22D058E8E1
JP0106-ULJM05584_00-SM5EMPDLC67COS07 BB9A8838A693026E5B4D78E1BFA05517 3C7FF39C641759502CCC3A9425698E67 3A716F2C4C4C173FAFA3A8CBF3E0E65F FB5AA053F7860398593C1BB572D7C579
JP0106-ULJM05584_00-SM5EMPDLC66COS06 79BBF1D7724605908DC41BC94C074553 7C01194BB41FCF57F672D57C1C5B4866 5F40687D4BFDF565B48ABC39DBF860F5 E9D1FA36A185C094AE136C2E0A51740F
JP0106-ULJM05584_00-SM5EMPDLC81BGM01 A8D055CCC957E7DD819A405F81BEEF24 195BDC78787F0BB14404C8785C8EFAD4 243EAC891FB07A8A30CC98C4C9A49A6B 59ABF29EE1BA9BADB7926CAE5BA03FA4
JP0106-ULJM05584_00-SM5EMPDLC64COS04 74A18CF2076D0EB08715E1F71F8B55D7 963E4A25FCEB94F4F28BA02D2C8D5001 E6D71DC8E23A52D61F57FFF6E98CEEDA 4F8BAE8E601067588FD24BB432E78529
JP0106-ULJM05584_00-SM5EMPDLC12EMP33 9BBF1377D197E94E1D125A05A209992A A071EECEB70A6FC9EE33357492B369FF B7E57CA0F7FC63D32D8A5753AD9DEA0A 462DDEF2360DA8526C2626F8FF841F70
JP0106-ULJM05584_00-SM5EMPDLC13EFP33 C4B65B2899FFB25EEC5C4BF8C7B2929B 83E187C2710D008AE70991E488F153F2 1EF84C3E987D86F8431987DAF1A245DF 8DF9A47F23ED2AE91B8A572B569EE073
JP0106-ULJM05584_00-SM5EMPDLC15EFP34 A54DD060AA2EAB4E2BEC6EED809948EF A3A8FB1129C41A923670C60201028501 DC46324A4701F2A13E6E7C8465FC0349 7C767B45802B1E057DBE4664E6EAB889
JP0106-ULJM05584_00-SM5EMPDLC63COS03 1FC373B0288AD122847267895D61F314 612CCC4C778AE476CB39C92FC539097B EE9BF9B99AB7B5CC2B384D12D8FB7C8E FC5151CE6864D6A64373C3A86CD63EF8
JP0106-ULJM05584_00-SM5EMPDLC08EMP31 9FD718B631370B9A59E41A5ADAA4568C 6AE24D30F0CECCFBDFC290E6B018E0DA 8ACBEC218CF71A8E8511CDC15BF9C118 D2FEA845734085A30403DEAB844A8E4C
JP0106-ULJM05584_00-SM5EMPDLC09EFP31 A4CE39A2EABAD6B06BC4421F58EF92FF 98AACEDF13A7F8951F5A13EBD8BD36D6 16AA136DD4C3C28B197975290480FEA2 1576A37F45BA7592C9C8D0784A1F8BA1
JP0106-ULJM05584_00-SM5EMPDLC10EMP32 CD7E253F58EE774EC891D93EE05EA1DF A3B430FFA31A777AD9A6543096A0217B 420123F1DEC0B8DC4F7E73D65F4FA20A B67D8F1333F80D16BE2AF693116B6E32
JP0106-ULJM05584_00-SM5EMPDLC11EFP32 F010682010FCE58C1F0CD3C3D72AAAE9 590365C4CE7168592D7AA77F5B8390F2 5FA712F15F37CD3D63ED8A4C49FB4537 6A8C52896B0C5B676AC914974B6A21D3
JP0106-ULJM05584_00-SM5EMPDLC62COS02 DD2FE05283A2C44357F1D50F12662D36 CC8EDB3DA92F0C6E02548E5FBA8E7A8B 42CC4112BC10040C3A5E262CC08DD580 FED1C8B5561C93E5FC83149000F0FD1F
JP0106-ULJM05584_00-SM5EMPDLC80BGM00 B9BEB831F9A92FD099C93D3A86FB2181 E31B9076284AEED53B2837E62C1ED4EE 15CF36D25BBDFCC18A1CB707DCB16970 87FECE09B5C383C29D36761D47FF4CE1
JP0106-ULJM05584_00-SM5EMPDLC04EMP29 BAEE37C6E2185D53460BD09C2400C01F 7EBF3447F7AF4929C93F862A0DBFAB16 9D4C52EAEC26688AC40605E10086187B 546C1312AEEFB38A93AAB2FC7A91854E
JP0106-ULJM05584_00-SM5EMPDLC05EFP29 110D4A4E5B04974B2CDB727131983BD0 1B195FCACC5F0813D457E8BFF6916D9E C809978BA890922AFFC69C57190690B2 550F5C2F9C525BCC3182095D5A0C4D30
JP0106-ULJM05584_00-SM5EMPDLC06EMP30 DB6C23084FC34358B9C82D33768A5B40 97339EF3CE589316D2AE381C77F44AB2 4F96DE7CB8A5DFE5581768DD8F4E4CEB 0F3058D17EAE6C163E54D8B633FEED6F
JP0106-ULJM05584_00-SM5EMPDLC07EFP30 16CD3B813D16B56593ABD5D67EB0608C 2C22E313FB40F0E24DDA47F2D9AD0C80 CFF31DD989C72407444FB08E713EF49A 84816FB612BD94455E80CACF54622443
JP0106-ULJM05584_00-SM5EMPDLC60COS00 60BD6458804CFA1E4C4B6FA55E6E5F14 4A8FF86E0AD40325088C18E1526BE7C1 70A6808C08D48EDC3AABFE30CE2BA080 35548026450F96D68DC4D08EFDB09414
JP0106-ULJM05584_00-SM5EMPDLC00EMP27 8110CC5E109C91001366C0E9B705C625 D4741162142B3ED93B68BD389FAA4D28 60012F8530F625C2E93743E33E66C63B 6B7AD7EE23C4E4694782482EF4757D48
JP0106-ULJM05584_00-SM5EMPDLC01EFP27 0832C0E56A13DC6118EEFB1D99487B06 2383CE729D392D0E39DBC222958F6BAD D835C25C5D4B6E0DB2F09A76A6944444 28DD7FC48D5C7258CF5535BEADF1B207
JP0106-ULJM05584_00-SM5EMPDLC02EMP28 4212DDB3BE71210BEC37CEF5CAFFBC65 BF289ED96BB05B6AEDDD40FA44A9C9F5 5B98BB60C7080A657DF918CFD2883DDA F0B2C5E7404630EC5AED1E12CC7B94DD
JP0106-ULJM05584_00-SM5EMPDLC03EFP28 83584FD9194BC6DAA16B927D9C033E18 4229A2BF0498945F2539E6B3B68A70F5 6503D059444D74F497C3427EB6B9B7C2 98C3D0A23A6D9C4E35EDCAE64C22FB55
JP0106-ULJM05938_00-SM6PSP06BGMSET05 225D83442FBD0B928B60836C3B7FE3C8 CBD4A3F734673F0114D61F29D5F415CF 0FFEE662777E63A7530A90AB3AF7F4F5 8D12BDD6808F71919339427F57ED74A2
JP0106-ULJM05938_00-SM6PSP05BGMSET04 FB4CD15C62B5199D57265FBD39929B27 31C83E05D9A5AB26A9F15785DB6088ED BE5D509EEC250E71DDD28841E43CD310 20C7224144597BCD1CDD2F9A0B1481C0
JP0106-ULJM05938_00-SM6PSP04BGMSET03 12C8155F38C21CDBAD8A23325B8D887E 9516EE04837AB10B27E2177AD3E138F1 ACBE0A3D807FAF86CAA7356C06F52A3C 01797731DAE63A98442CFD6D72168E2D
JP0106-ULJM05938_00-SM6PSP03BGMSET02 4C101E40D54383E3898AF956EC488573 2E65404105CC29419B617669D336B155 E2E699CBB5A145C9EC3F25281A5B5C83 C36BE3A047300BBA0DE8A8AF7E221BB4
JP0103-NPJH60021_00-A12VPLAYVIEWFORP 712EAA7ADAF12B17D025F077348FF835 3C772FF57F1B5E828CEC71C2D780DC97 F350B2647D35691A7D6D3A521CCFA467 C72A2BFDD391E164738E9179190E0DBF
JP0103-NPJH60031_00-A15PLAYVIEWPSP02 20FB7EEF71112C0E4E30DB0363905206 F1FD81265C390E3E290C72E36830A038 8788C863815C6A8713695A13F4519E89 8200789D0562B35C680536D28E806200
JP0103-NPJH60026_00-A13VPLAYVIEWFORP 95E456E81142699154B5B22B5C45E057 CB5CA9C7C3F391354EA4CE617DBDE373 555F4582E32AD3A6E4BA89BA99535B4D F2754132305A535CAB47EB4F51E53059
EP9000-UCES01264_00-LBPPDLCSONYCK026 E2C5E3DB7A2536FE278DE00B400B4262 6B43D2B1FF84591745EF86BB03D9A19D DFF1D4CE812F1816E0CB695B74563191 E4077FE1249A11CDA20D6A285C2141BF
EP9000-UCES01264_00-LBPPDLCSONYCK021 DE6532D06A2C6A0EFCBFA03941BF69D5 BF9DEDC1365C30751F43DA94222452E0 27A579C36599FC93E446C84150A47B72 729BE4B475D127CCB15E8AB99407DDB6
EP9000-UCES01264_00-LBPPDLCSONYCK001 123439CDBAEA1949E3C63E8892DEE086 B21BFC139E667913B52CC5D1AB01845D 269CEC2F704EE41A871FCB42FEE0AB8B BD330A69840F8BB49D5839458DC7C7B8
EP9000-UCES01264_00-LBPPDLCSONYCK018 A09D03FAF6795D2BE4D11B33EDCBA130 D1DF3923D133681E0B9605985C269B07 0D9F062A8D5C44ACF393382EBE9B641D 88E9C6BD28C9F2A60129676BDE52C215
EP9000-UCES01264_00-LBPPDLCSONYCK024 581542C06555A76028E14DEF72876C40 FB370F1F704FCEB1D0556D62E12929CC 7BC2326FA63D9E9C164314CB227AC48D 178EA515356CCF4A17DB592C47366D68
EP9000-UCES01264_00-LBPPDLCSONYCK015 5D2B7E42CBAF145D1752953F8FB9F0B3 BDCD877BEFCA8C3EC70170B30452AFF3 40BA3952829D70961034976F8826003E 7EEBC83D48233213650E97047E51216B
EP9000-UCES01264_00-LBPPDLCSONYCK010 CC7695F1F8B8EBB2C675611CB0A7A6C2 06FE5ED246160FBD064020BE6BD484D2 0853782673CCC369A21E0D6630AFFF4A 069169BC13C342ACC4678B689F0A460D
EP9000-UCES01264_00-LBPPDLCSONYCK020 D7C82D5EDE877DBCFDF795E51B0A28CC FDD7471CEDD04122CC039758E0BE4D04 49FA72B673E457C0DB00B783B7BE9C49 9E71FE00ABA6985C07D50F484A4FE1B2
EP9000-UCES01264_00-LBPPDLCSONYCK007 19DEE46FA13EAF11A7BD542ED4BF7B32 99FF1C81F39E822838570D09DFEB3B05 EB93A00B971A861C51F235E856D91610 DFBED1D0C848A96E0F6DF9D2FD0110E9
EP9000-UCES01264_00-LBPPDLCSONYCK012 8B88469F14CFCD0383C3EFE938F0012A 850E6D27F0C497CBF352C1097539C061 849BCAAB52EC60340BD58709CF2FE993 D5E6004F5FBD0220C5207C80CED31B34
EP9000-UCES01264_00-LBPPDLCSONYCK011 D170B8252CFE5791220B768495A3D4A5 6B96403C12B3D3CC723A99CAE531883F 144848DC6DE2CB48F279E8C13D277D0C FED6CC637F4AACE4A93B50AEFF21A4FF
EP9000-UCES01264_00-LBPPDLCSONYCK008 90453E312D9458CBF7A80B0650FF42DF FC2D693D22E96730527364948D19D4C4 DD28EDB63A12B05EAD1905C0B0D128F9 983246899FCC65341872E2DDDBD7CBE4
EP9000-UCES01264_00-LBPPDLCSONYCK013 BBE67D71A00F375D068C34B8F70BC3BB 2DFD13800AFB6C34127C6B35D9A53983 456A85162FC1D7117919E55CC98499F2 CFC9F51743CDB073AEF169AE46F90DED
EP9000-UCES01264_00-LBPPDLCSONYCK009 019E54442412105CC22BE00FFE6F60E6 713F63BA2D733AC2EE92B5E11ABFBB8F 326BA573F775FD125E34B8D0784855BC 25C2B578889B9D6B047E1128F87493A9
EP9000-UCES01264_00-LBPPDLCSONYCK016 0EA15B64C88E2CD0EB5ADAB6423CB44A 2A026B169B10E49A7E6DCCEC1BF16E46 9374B8981DFF3178158C6421BF77526B DA1BF7AFC291403C21EF6137910EDD58
EP9000-UCES01264_00-LBPPDLCSONYCK025 328D455948D94FC87ABE28E10A51FEDB 144473BE5FF32C8B4E4D46C68B7350C5 E2A51872A3AB8331D6E4DBF311CFED14 1C07520774D7B7F7E29012CA4AE2190A
EP9000-UCES01264_00-LBPPDLCSONYCK019 ACD02B09B0960371F6BE947E030BB60D ED7FC0B5707B359F163D2ECC6287CABF 2CE479A2B388018490F0D468977AA623 E77AD9B977C393B31231A2F0A42C63EB
EP0082-ULES01507_00-0000000000000001 509EED185254FA9C91ACECAFA6A59132 8CB9A8E802D21C295117FC5C9F692684 5F683788451469675FD29EA64C771DAD 0A4772A55908AE48810CB8B498E42B96
EP0082-ULES01507_00-0000000000000002 D7BB34AEACAA5804265AD65B53B02077 D95B47C9F876F57EA262E657BC930E0B 1352079128A2008A9AA183CC41AAAA01 5E9D1DB95F6DF4029B363053077B2505
EP0082-ULES01507_00-0000000000000003 ECA07E3612293351B38E8D09C748A682 77FE99178A9A3426E1F7BC3D92185E18 E1C42615C07375E9672EC2E48321E849 A0C5BF0D42CFB2F7FD887A3FA31E1FA8
EP0082-ULES01507_00-0000000000000004 6F89E0F28EA4FA6BD1A5FFDC9456F480 92C880FE0958322E68A76CD92AE68A54 3E0883FED74059667D48D736B618878B 0FC77C35ABD9F942164D73A3C7CA853A
EP0082-ULES01507_00-0000000000000005 B3293B7831194626BE64C3170C00C88F 4708D755D43DAF7E11DBE54E4618C31B A06C4F0C3F4FB2C51BDBE34AFEA0193E 3E9782FF149E242183078548C59942BE
EP9000-UCES01421_00-DLM0000000000000 0C743DBA2CC648BF05D884B93F07596D 3F5C753104E602C3F4E360223C483854 5F0F68FE468F70687A3F75F6D262DEBF 07EBF090FA374D57AF16188E4A2DF71C
EP9000-UCES01421_00-DLMC000000000000 6F6705008DD8154B0A98BEE73A14DC2A 9F2C75EB8EEBFB734374822A7C39F044 522EDC71EA78A4C962AB2627AD15711C 8F97F480B51494FB9E76FB25067CD11D
EP9000-UCES01421_00-DLM0000000000001 AA5B9B07CB5E00B257B3BA3CC6A18249 82F121DB8AC2E0E6988BC855B6BF9C4E C826F70E1E596650BB328E271AD15787 721B7515E9C9F9981327FFDC89B95560
EP9000-UCES01421_00-DLM0000000000002 690D388690A336479BB02A69F6F472C5 DFE4A35C901996AD2CB45BBD4F6DB89E 0CE6866A6F5E5C539EC15A52B973D8A9 45B85EB64EC11B09321A83135FCF07AC
EP9000-UCES01421_00-DLM0000000000006 003A92E45949D1A44EEB2123AC32940E 0E91851C75BC74A98039D4CB3F7EADAF AC85EDD89090846B6695E71A0DD3AF01 F8A7AE66B5A8B58E6553C4AA21A3687C
EP9000-UCES01421_00-DLM0000000000010 C0EE9B698FE76C7B79CCA28E6E1B499E 8A12E4132BCD5CB5FFE7B069DDD92A85 F5DF74A58E0EE6D0468EDC4661A489B5 294D56AD5B4509FD28102C39AE4A810E
EP9000-UCES01421_00-DLM0000000000011 D21868922C60ED3E6DE4D139DC6F576C A4DBE1FEFA12B34E91C12D9BEE8EE3A0 AB2427095E8A3A5729E0CDE2F55DDAD4 4355B6B248C82469F98A89D0E05D0D62
EP9000-UCES01421_00-DLM0000000000003 85148C660BE86F315918A151C072D44E F2181116CDDEC043BB8DE94404D265DE B18EA2A7076ACA1E09147A3ACD8B25A9 7B3C6CA3B52D247448E9970808D27E61
EP9000-UCES01421_00-DLM0000000000004 B1B32183905B9A73B3152A44A8F6962B 3CBD88455DF0AA2465C78435829A0836 B703E91E91C7A4C0BDBA62FD9D78026E 4BAB5F0D2CB79A4DFA22FE58F9FA7138
EP9000-UCES01421_00-DLM0000000000005 78E4951655EA3B3F7DE83B0A3747BCA0 59A0AD5E91B35355B1DC5D30F2739836 61FCF93B83E5684B9670040A7BD3E08E AA178415E26338748A154FD03ACF41F2
EP9000-UCES01421_00-DLM0000000000012 72432247F5FAFB1B6370E480BE9E1331 B0D47FA7C7E5B39FC71D5B8523DA72B2 29D6E2D3DA2B2A10ECF5B941FEEAA506 2DE8296AD7D089D8D6E75045868CBEBD
EP9000-UCES01421_00-DLM0000000000014 E7F587BD89E125708D215019275D173F 00C0F3174525162A3DBDEF1F21F750C4 6215BDF415238FBF6C85BCDBDF547ADF 87DF26E0BA14DDDA3AA4069F180EEB39
EP9000-UCES01421_00-DLM0000000000007 70F15A2989C2950413A89F8997D87E81 56A0988AB88F0EA6E600D2E3062C2E48 946DDC7C667C55CA7E04A565A804D4F7 19AA4622A7A6A30DF9D2D10D73C57CBE
EP9000-UCES01421_00-DLM0000000000008 97A663E3FE000B6F40E973AF18B0DC05 CE9A23863502B95B07BDBD22D301268D 76D363D334E52A948BD416D708F98EE5 AE3A91363F97145D28046E3103381E41
EP9000-UCES01421_00-DLM0000000000013 A917A4FE453E8F1A8C1A3805B61D39B0 055CB0DEAB7814D6B4C48223C9CC55CA 4EE0146F01FB0379939ADF1866E69E37 C5461E6D390FFD432BB7C40B1D7A238E
EP9000-UCES01421_00-DLM0000000000016 13B20BAA204B2F91587F11D404B70716 67576D743E8CC4983D1FB3CAE36791BE 4F81DF951C272FA43405337112790A0D 4A38B3D0000714085EF3E79CC901050F
EP9000-UCES01242_00-PRESELLADDONPCK0 FE1E0A3B419BB9376D084ABEC54A526B DBD40050D8649E3FF66E87BB802E78F1 C6E4C97B40E9B38D2EFCD3C2FA5AB6CC BF551D9484CD7C1DBEF3B056B4794876
EP9000-UCES01242_00-PRESELLADDONPCK1 45331A2B5F214CD4E1297227126FAE95 FC1310D9604F5DC4FFF1015299A33524 A46821B0D75A1EA5932A9C6E6CC41E9B 70C67F9198F5105DFE70AA867679E0D3
EP9000-UCES01242_00-PRESELLADDONPCK3 3C67064205AF3B6F5516E1008F7E9578 3DA0A4525880F6E65D921B406291D0E0 FDB5E4B9E8FE2EBED8BE487F8B585ED9 C07F639AC4C4E5E3E3DED4054F600514
EP9000-UCES01242_00-PRESELLADDONPCK2 211625C7ACF3AD87FB80C088B5A816D0 731870DDA5D2B6A454FC32B196B39BB4 034B72CB73F41ECE183E17C5F1F5DB2F 01BDE1B45251E03597DE2D00F745E0E0

View File

@ -10,7 +10,7 @@ namespace LibChovy.VersionKey
{
public class KeysTxtMethod
{
public static string KeysTxt = Resources.KEYSTXT;
public static string[] TitleIds
{
get
@ -29,7 +29,7 @@ namespace LibChovy.VersionKey
{
List<string> contentIds = new List<string>();
using (TextReader txt = new StringReader(Resources.KEYSTXT))
using (TextReader txt = new StringReader(KeysTxt))
{
for (string? line = txt.ReadLine();
line is not null;
@ -37,7 +37,7 @@ namespace LibChovy.VersionKey
{
line = line.ReplaceLineEndings("");
string[] data = line.Split(' ');
if (data.Length != 4) continue;
if (data.Length != 5) continue;
contentIds.Add(data[0]);
}
@ -49,7 +49,7 @@ namespace LibChovy.VersionKey
public static NpDrmInfo GetVersionKey(string contentId, int keyIndex)
{
using (TextReader txt = new StringReader(Resources.KEYSTXT))
using (TextReader txt = new StringReader(KeysTxt))
{
for(string? line = txt.ReadLine();
line is not null;