diff options
Diffstat (limited to 'PE')
-rw-r--r-- | PE/pe-hack.lua | 455 |
1 files changed, 358 insertions, 97 deletions
diff --git a/PE/pe-hack.lua b/PE/pe-hack.lua index 97f1ec2..9de8e09 100644 --- a/PE/pe-hack.lua +++ b/PE/pe-hack.lua @@ -1,89 +1,5 @@ -slus_hacks = { - --- ASM Ptr hack - [0x1603c] = { 0xbc }, - --- ASM Font hack - [0x284e4] = { 0x21 }, - [0x28540] = { 0x21, 0x18, 0x00, 0x00 }, - [0x28fb8] = { 0x21, 0x18, 0x00, 0x00 }, - [0x29074] = { 0x00, 0x00, 0x00 }, - - --- Text "Susceptible to poison" - [0x81c96] = { 0x25, 0x34, 0x3d, 0x38, 0x3c, 0x34, 0x44, 0x47, - 0xff }, - --- Text "Susceptible to acid" - [0x81cc0] = { 0x14, 0x3c, 0x3f, 0x3e, 0x38, 0x42, 0x3e, 0x3d, - 0x3d, 0x34, 0x0f, 0x3f, 0x30, 0x41, 0x0f, 0x30, - 0x32, 0x38, 0x33, 0x34, 0xff }, - --- Text "Easily tranquilized" - [0x81ce8] = { 0x22, 0x34, 0x3d, 0x42, 0x38, 0x31, 0x3b, 0x34, - 0x0f, 0x30, 0x44, 0x47, 0x0f, 0x43, 0x41, 0x30, - 0x3d, 0x40, 0x44, 0x38, 0x3b, 0x38, 0x42, 0x30, - 0x3d, 0x43, 0x42, 0xff }, - --- Text "Sensitive to heat" - [0x81d0e] = { 0x22, 0x34, 0x3d, 0x42, 0x38, 0x31, 0x3b, 0x34, - 0x0f, 0x51, 0x0f, 0x3b, 0x30, 0x0f, 0x32, 0x37, - 0x30, 0x3b, 0x34, 0x44, 0x41, 0xff }, - --- Text "Sensitive to cold" - [0x81d32] = { 0x22, 0x34, 0x3d, 0x42, 0x38, 0x31, 0x3b, 0x34, - 0x0f, 0x30, 0x44, 0x0f, 0x35, 0x41, 0x3e, 0x38, - 0x33, 0xff }, - --- Text "Objects easily stolen" - [0x81d5a] = { 0x1f, 0x3e, 0x42, 0x42, 0x4e, 0x33, 0x34, 0x0f, - 0x33, 0x34, 0x42, 0x0f, 0x3e, 0x31, 0x39, 0x34, - 0x43, 0x42, 0x0f, 0x51, 0x0f, 0x45, 0x3e, 0x3b, - 0x34, 0x41, 0xff }, - --- Text "Gets confused easily" - [0x81d85] = { 0x12, 0x3e, 0x3d, 0x35, 0x44, 0x42, 0x38, 0x3e, - 0x3d, 0x0f, 0x3f, 0x3e, 0x42, 0x42, 0x38, 0x31, - 0x3b, 0x34, 0x0f, 0x34, 0x43, 0x0f, 0x34, 0x35, - 0x35, 0x38, 0x32, 0x30, 0x32, 0x34, 0xff }, - --- Text "Failed to escape" - [0x81dad] = { 0x15, 0x44, 0x38, 0x43, 0x34, 0x0f, 0x4d, 0x32, - 0x37, 0x44, 0x4d, 0x34, 0xff }, - --- Text "Can't escape!" - [0x81dca] = { 0x15, 0x44, 0x38, 0x43, 0x34, 0x0f, 0x38, 0x3c, - 0x3f, 0x3e, 0x42, 0x42, 0x38, 0x31, 0x3b, 0x34, - 0x2b, 0xff }, - - --- Font width table - [0x81ea1] = { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 8, 11, 14, - 9, 8, 7, 8, 7, 7, 8, 9, 6, 7, 9, 8, 11, 9, 7, 8, - 7, 9, 7, 7, 9, 9, 11, 7, 9, 7, 9, 4, 7, 6, 4, 4, - 8, 8, 7, 7, 7, 7, 8, 9, 5, 4, 8, 5, 11, 9, 7, 8, - 8, 7, 6, 5, 9, 9, 11, 7, 9, 6, 4, 4, 7, 7, 7, 7, - 7, 7, 7, 7, 5, 5, 7, 7, 9, 9, 9, 7, 11, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - --- PE.BIN filename extension - [0x01b4c] = { 0x54, 0x49, 0x4d }, -} - -function apply_hacks(hacks, file) - local k, v, i, h - for k, v in pairs(slus_hacks) do - for i, h in ipairs(v) do - file[k + i - 1] = h - end - end -end - function mainpatch() - local dirent, pvd, root, is_cd1, is_cd2, slusname, fmvdir, systemcnfstring, inslus, slus, peimg, pesect, tim, startsect, fmvdirtree + local dirent, pvd, root, is_cd1, is_cd2, slusname, fmvdir, systemcnfstring, inslus, slus, peimg, pesect, tim, startsect, fmvdirtree, falsesect, i dirent = cdutil:findpath "/SLUS_006.62;1" or cdutil:findpath "/SLUS_006.68;1" or error "Not a Parasite Eve CD" @@ -119,7 +35,8 @@ STACK=801fff00 iso:createfile(root, "SYSTEM.CNF", systemcnf, dirent) print "Reading CD's slus file" - inslus = cdfile(cdutil, dirent) +-- inslus = cdfile(cdutil, dirent) + inslus = Input("PE-SLUS00662-patched-debug-room.exe") slus = Buffer(true) slus:copyfrom(inslus) apply_hacks(slus_hacks, slus) @@ -144,17 +61,22 @@ STACK=801fff00 print "Copying FMV directory" dirent = cdutil:findpath("/" .. fmvdir) fmvdirtree = iso:createdir(root, fmvdir, 1, dirent) --- fmvdirtree.hardhide = true + fmvdirtree.hardhide = true iso:copydir(fmvdirtree, cdutil, dirent) print "Finalizing CD" iso:createfile(root, "README.TXT", Input("readme.txt")):setbasicsxa() + + falsesect = {} + for i = 1, 150, 1 do + iso:createsector(falsesect, MODE2) + end iso:close() end function do_img_file(slus, startsect, pesect) - local i, j, sect1, tab1, sect2, tab2, sect3, tab3, sizes1, sizes2, sizes3, sect, file, file1, file2, file3, songsect, b1, b2, b3, b4, lastsect, s1, s2, s3 + local i, j, sect1, tab1, sect2, tab2, sect3, tab3, sizes1, sizes2, sizes3, sect, file, file1, file2, file3, songsect, b1, b2, b3, b4, lastsect, s1, s2, s3, str sect1 = {} tab1 = {} @@ -173,8 +95,15 @@ function do_img_file(slus, startsect, pesect) sect1[i] = slus:readU16() + pesect end for i = 1, 79, 1 do --- print(i) - file = cdfile(cdutil, sect1[i], (sect1[i + 1] - sect1[i]) * 2048) + if (files[i] ~= nil) then + if (type(files[i]) == "string") then + file = Input(files[i]) + else + file = files[i](sect1[i], (sect1[i + 1] - sect1[i]) * 2048) + end + else + file = cdfile(cdutil, sect1[i], (sect1[i + 1] - sect1[i]) * 2048) + end s1 = iso:putfile(file) tab1[i] = s1 - startsect print("Putting file " .. i .. " from sector " .. sect1[i] .. " to sector " .. s1) @@ -188,9 +117,8 @@ function do_img_file(slus, startsect, pesect) sect2[i] = slus:readU16() + sect1[80] end for i = 1, 250, 1 do --- print(i) file = nil - if ((sect2[i + 1] - sect2[i]) ~= 0) then + if ((sect2[i + 1] - sect2[i]) ~= 0) then file = cdfile(cdutil, sect2[i], (sect2[i + 1] - sect2[i]) * 2048) end if (file) then @@ -215,26 +143,21 @@ function do_img_file(slus, startsect, pesect) sizes3[i] = orB(shr(b3, 4), shl(b4, 4)) end for i = 1, 438, 1 do --- print(i) file1 = nil file2 = nil file3 = nil if (sizes1[i] ~= 0) then - print("File " .. i .. " from sector " .. sect3[i]) file1 = cdfile(cdutil, sect3[i], sizes1[i] * 2048) end if (sizes2[i] ~= 0) then - print("File " .. i .. " from sector " .. sect3[i] + sizes1[i]) file2 = cdfile(cdutil, sect3[i] + sizes1[i], sizes2[i] * 2048) end if (sizes3[i] ~= 0) then - print("File " .. i .. " from sector " .. sect3[i] + sizes1[i] + sizes2[i]) file3 = cdfile(cdutil, sect3[i] + sizes1[i] + sizes2[i], sizes3[i] * 2048) end s1 = iso:getdispsect() - startsect if (file1) then - print("Put file " .. i .. " at " .. s1) iso:putfile(file1) end s2 = iso:getdispsect() - startsect @@ -243,8 +166,16 @@ function do_img_file(slus, startsect, pesect) end s3 = iso:getdispsect() - startsect if (file3) then + if (groups[i] ~= nil) then + str = string.format("%02i", groups[i]) + print("Script is from group " .. str) + file3 = patch_room(file3, Input("scripts/c/" .. str .. ".out"), i) + else + print("Room has no script") + end iso:putfile(file3) end + print("Putting room " .. i .. " from sector " .. sect3[i] .. " to sector " .. s1) tab3[i] = s1 sizes1[i] = s2 - s1 sizes2[i] = s3 - s2 @@ -263,6 +194,336 @@ function do_img_file(slus, startsect, pesect) end slus:wseek(0x83b78) + for i = 1, 438, 1 do + s1 = sizes1[i] + s2 = sizes2[i] + s3 = sizes3[i] + b1 = s1 + b2 = andB(s2, 0xff) + b3 = orB(shr(s2, 8), shl(andB(s3, 0x0f), 4)) + b4 = shr(s3, 4) + slus:writeU32(tab3[i]) + slus:writeU8(b1) + slus:writeU8(b2) + slus:writeU8(b3) + slus:writeU8(b4) + end + for i = 1, 11, 1 do + slus:writeU32(iso:getdispsect()) + slus:writeU32(0) + end +end + +function patch_map(sector, size) + local map, font, buff + + map = cdfile(cdutil, sector, size) + font = Input("font.tim") + buff = Buffer(true) + buff:copyfrom(map) + buff:wseek(8) + buff:copyfrom(font) + return buff +end + +function patch_day1(sector, size) + local day1, buffs, offs, i, trad, r + + buffs = {} + offs = {} + + day1 = cdfile(cdutil, sector, size) + + for i = 1, 4, 1 do + buffs[i] = Buffer() + offs[i] = day1:readU32() + end + day1:seek(offs[4]) + offs[5] = offs[4] + day1:readU32() + + for i = 1, 4, 1 do + day1:seek(offs[i]) + buffs[i]:copyfrom(day1, offs[i + 1] - offs[i]) + end + + trad = Input("map.bin") + + buffs[2] = Buffer(true) + buffs[2]:copyfrom(trad) + buffer_pad(buffs[2]) + + offs[1] = 0x10 + offs[2] = offs[1] + buffs[1]:getsize() + offs[3] = offs[2] + buffs[2]:getsize() + offs[4] = offs[3] + buffs[3]:getsize() + + r = Buffer() + + for i = 1, 4, 1 do + r:writeU32(offs[i]) + end + for i = 1, 4, 1 do + r:copyfrom(buffs[i]) + end + + return r +end + +function patch_room(_room, _script, nb) + local r, truescriptsize, scriptsize, enlargment, room, script, roomsize, ptrptrs, ptrscriptptrs, oldscriptsize, scriptptr, rest, t, i, nbptrs + + script = Buffer(true) + script:copyfrom(_script) + buffer_pad(script) + + r = Buffer(true) + truescriptsize = _script:getsize() + scriptsize = script:getsize() + + roomsize = _room:readU32() + room = Buffer(true) + ptrptrs = _room:readU32() + _room:seek(0) + room:copyfrom(_room, roomsize) + room:seek(ptrptrs + 32) + ptrscriptsptr = andB(room:readU32(), 0xfffff) + room:seek(ptrscriptsptr + 8) + oldscriptsize = room:readU32() + scriptptr = andB(room:readU32(), 0xfffff) + rest = 4 - andB(oldscriptsize, 3) + if (rest == 4) then + rest = 0 + end + enlargment = scriptsize - (oldscriptsize + rest) + + r:writeU32(roomsize + enlargment) + r:writeU32(ptrptrs + enlargment) + room:seek(8) + r:copyfrom(room, scriptptr - 8) + r:copyfrom(script) + room:seek(scriptptr + oldscriptsize + rest) + r:copyfrom(room, ptrptrs - (scriptptr + oldscriptsize + rest)) + + t = room:readU32() + r:writeU32(t) + + for i = 1, 12, 1 do + t = room:readU32() + r:writeU32(orB(shl(shr(t, 20), 20), andB(t, 0xfffff) + enlargment)) + end + + r:copyfrom(room, ptrscriptsptr - room:tell() + 8) + r:writeU32(truescriptsize) + room:readU32() + for i = 1, 3, 1 do + t = room:readU32() + r:writeU32(t) + end + + nbptrs = (roomsize - room:tell()) / 12 + + for i = 1, nbptrs, 1 do + t = room:readU32() + r:writeU32(t) + t = room:readU32() + r:writeU32(orB(andB(t, 0xfff00000), andB(t, 0xfffff) + enlargment)) + t = room:readU32() + r:writeU32(t) + end + + r:copyto(Output("output/room-" .. hex(nb, "%04i") .. ".bin")) + r:seek(0) + + return r +end + +function apply_hacks(hacks, file) + local k, v, i, h + for k, v in pairs(slus_hacks) do + for i, h in ipairs(v) do + file[k + i - 1] = h + end + end end +function buffer_pad(buffer) + local rest, i + + rest = 4 - andB(buffer:getsize(), 3) + if (rest == 4) then + return + end + + buffer:wseek(0, SEEK_END) + for i = 1, rest, 1 do + buffer:writeU8(0) + end +end + +files = { + [10] = "font.tim", + [70] = "menu.bin", + [72] = patch_map, + [76] = patch_day1, +} + +slus_hacks = { + +-- ASM Ptr hack + [0x1603c] = { 0xbc }, + +-- ASM Font hack + [0x284e4] = { 0x21 }, + [0x28540] = { 0x21, 0x18, 0x00, 0x00 }, + [0x28fb8] = { 0x21, 0x18, 0x00, 0x00 }, + [0x29074] = { 0x00, 0x00, 0x00 }, + + +-- Text "Susceptible to poison" + [0x81c96] = { 0x25, 0x34, 0x3d, 0x38, 0x3c, 0x34, 0x44, 0x47, + 0xff }, + +-- Text "Susceptible to acid" + [0x81cc0] = { 0x14, 0x3c, 0x3f, 0x3e, 0x38, 0x42, 0x3e, 0x3d, + 0x3d, 0x34, 0x0f, 0x3f, 0x30, 0x41, 0x0f, 0x30, + 0x32, 0x38, 0x33, 0x34, 0xff }, + +-- Text "Easily tranquilized" + [0x81ce8] = { 0x22, 0x34, 0x3d, 0x42, 0x38, 0x31, 0x3b, 0x34, + 0x0f, 0x30, 0x44, 0x47, 0x0f, 0x43, 0x41, 0x30, + 0x3d, 0x40, 0x44, 0x38, 0x3b, 0x38, 0x42, 0x30, + 0x3d, 0x43, 0x42, 0xff }, + +-- Text "Sensitive to heat" + [0x81d0e] = { 0x22, 0x34, 0x3d, 0x42, 0x38, 0x31, 0x3b, 0x34, + 0x0f, 0x51, 0x0f, 0x3b, 0x30, 0x0f, 0x32, 0x37, + 0x30, 0x3b, 0x34, 0x44, 0x41, 0xff }, + +-- Text "Sensitive to cold" + [0x81d32] = { 0x22, 0x34, 0x3d, 0x42, 0x38, 0x31, 0x3b, 0x34, + 0x0f, 0x30, 0x44, 0x0f, 0x35, 0x41, 0x3e, 0x38, + 0x33, 0xff }, + +-- Text "Objects easily stolen" + [0x81d5a] = { 0x1f, 0x3e, 0x42, 0x42, 0x4e, 0x33, 0x34, 0x0f, + 0x33, 0x34, 0x42, 0x0f, 0x3e, 0x31, 0x39, 0x34, + 0x43, 0x42, 0x0f, 0x51, 0x0f, 0x45, 0x3e, 0x3b, + 0x34, 0x41, 0xff }, + +-- Text "Gets confused easily" + [0x81d85] = { 0x12, 0x3e, 0x3d, 0x35, 0x44, 0x42, 0x38, 0x3e, + 0x3d, 0x0f, 0x3f, 0x3e, 0x42, 0x42, 0x38, 0x31, + 0x3b, 0x34, 0x0f, 0x34, 0x43, 0x0f, 0x34, 0x35, + 0x35, 0x38, 0x32, 0x30, 0x32, 0x34, 0xff }, + +-- Text "Failed to escape" + [0x81dad] = { 0x15, 0x44, 0x38, 0x43, 0x34, 0x0f, 0x4d, 0x32, + 0x37, 0x44, 0x4d, 0x34, 0xff }, + +-- Text "Can't escape!" + [0x81dca] = { 0x15, 0x44, 0x38, 0x43, 0x34, 0x0f, 0x38, 0x3c, + 0x3f, 0x3e, 0x42, 0x42, 0x38, 0x31, 0x3b, 0x34, + 0x2b, 0xff }, + + +-- Font width table + [0x81ea1] = { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 8, 11, 14, + 9, 8, 7, 8, 7, 7, 8, 9, 6, 7, 9, 8, 11, 9, 7, 8, + 7, 9, 7, 7, 9, 9, 11, 7, 9, 7, 9, 4, 7, 6, 4, 4, + 8, 8, 7, 7, 7, 7, 8, 9, 5, 4, 8, 5, 11, 9, 7, 8, + 8, 7, 6, 5, 9, 9, 11, 7, 9, 6, 4, 4, 7, 7, 7, 7, + 7, 7, 7, 7, 5, 5, 7, 7, 9, 9, 9, 7, 11, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + +-- PE.BIN filename extension + [0x01b4c] = { 0x54, 0x49, 0x4d }, +} + +groups = { + [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1, + [6] = 1, [9] = 1, [10] = 1, [11] = 1, [12] = 1, + [13] = 1, [14] = 1, [16] = 1, [17] = 1, [18] = 1, + [20] = 1, [21] = 1, [22] = 1, [23] = 1, [24] = 1, + [25] = 1, [26] = 2, [27] = 2, [28] = 2, [29] = 2, + [30] = 2, [31] = 2, [32] = 2, [33] = 2, [34] = 2, + [35] = 3, [36] = 3, [37] = 3, [38] = 3, [39] = 3, + [40] = 3, [41] = 4, [42] = 4, [43] = 4, [44] = 5, + [45] = 4, [46] = 4, [47] = 4, [48] = 5, [49] = 1, + [50] = 1, [51] = 4, [52] = 4, [53] = 4, [54] = 4, + [55] = 4, [56] = 4, [57] = 6, [58] = 6, [59] = 6, + [60] = 6, [61] = 6, [62] = 6, [63] = 6, [64] = 6, + [65] = 6, [66] = 6, [67] = 6, [68] = 6, [69] = 6, + [70] = 6, [71] = 6, [72] = 6, [73] = 6, [74] = 6, + [75] = 6, [76] = 6, [77] = 6, [78] = 6, [79] = 6, + [80] = 6, [81] = 7, [82] = 6, [83] = 6, [84] = 6, + [85] = 6, [86] = 6, [87] = 6, [88] = 6, [89] = 6, + [90] = 8, [91] = 8, [92] = 8, [93] = 8, [94] = 8, + [95] = 8, [96] = 8, [97] = 8, [98] = 5, [99] = 5, + [100] = 5, [102] = 5, [103] = 5, [104] = 5, [106] = 5, + [107] = 5, [108] = 5, [109] = 5, [110] = 5, [111] = 5, + [112] = 5, [113] = 5, [114] = 5, [115] = 5, [116] = 5, + [117] = 5, [118] = 5, [120] = 5, [121] = 5, [122] = 5, + [123] = 5, [124] = 5, [125] = 9, [126] = 9, [127] = 9, + [128] = 9, [129] = 9, [130] = 9, [131] = 9, [132] = 9, + [133] = 9, [134] = 9, [135] = 9, [136] = 9, [137] = 9, + [138] = 9, [139] = 9, [140] = 9, [141] = 9, [142] = 9, + [143] = 9, [144] = 9, [145] = 9, [146] = 9, [147] = 9, + [148] = 9, [149] = 9, [150] = 9, [151] = 9, [152] = 9, + [153] = 9, [154] = 9, [155] = 9, [156] = 9, [157] = 9, + [158] = 9, [159] = 9, [160] = 9, [161] = 10, [162] = 10, + [163] = 10, [164] = 10, [165] = 10, [166] = 11, [167] = 11, + [168] = 11, [169] = 11, [170] = 11, [171] = 11, [172] = 11, + [173] = 11, [174] = 11, [175] = 11, [176] = 11, [178] = 11, + [179] = 11, [180] = 11, [181] = 11, [182] = 11, [183] = 11, + [184] = 11, [185] = 11, [186] = 11, [187] = 11, [188] = 11, + [189] = 11, [190] = 11, [191] = 12, [192] = 13, [193] = 13, + [194] = 13, [195] = 12, [196] = 13, [197] = 13, [198] = 13, + [199] = 13, [200] = 13, [201] = 13, [202] = 13, [203] = 13, + [204] = 13, [205] = 13, [206] = 13, [207] = 13, [208] = 12, + [209] = 13, [210] = 13, [211] = 13, [212] = 13, [213] = 13, + [214] = 13, [215] = 13, [216] = 13, [217] = 13, [218] = 13, + [219] = 13, [220] = 13, [221] = 12, [222] = 13, [223] = 13, + [224] = 13, [225] = 13, [226] = 13, [227] = 13, [228] = 13, + [229] = 13, [230] = 12, [231] = 13, [232] = 13, [233] = 12, + [234] = 13, [235] = 13, [236] = 13, [237] = 13, [238] = 13, + [239] = 12, [240] = 13, [241] = 13, [242] = 13, [243] = 13, + [244] = 13, [245] = 13, [246] = 13, [247] = 13, [248] = 13, + [249] = 13, [250] = 13, [251] = 13, [252] = 13, [253] = 13, + [254] = 13, [255] = 13, [256] = 12, [257] = 13, [258] = 13, + [259] = 3, [260] = 14, [262] = 14, [263] = 14, [265] = 14, + [266] = 14, [267] = 14, [268] = 14, [269] = 14, [271] = 15, + [272] = 15, [273] = 16, [275] = 17, [276] = 17, [278] = 17, + [279] = 17, [280] = 17, [281] = 17, [282] = 17, [283] = 17, + [284] = 17, [285] = 17, [286] = 17, [287] = 17, [288] = 18, + [290] = 19, [291] = 19, [292] = 19, [293] = 19, [294] = 19, + [295] = 19, [296] = 19, [297] = 19, [298] = 19, [299] = 19, + [300] = 19, [301] = 19, [302] = 19, [303] = 19, [304] = 19, + [305] = 19, [306] = 19, [307] = 19, [308] = 19, [309] = 19, + [310] = 19, [311] = 19, [312] = 19, [313] = 19, [314] = 19, + [315] = 19, [316] = 19, [317] = 19, [318] = 19, [319] = 1, + [320] = 9, [321] = 9, [322] = 9, [323] = 9, [324] = 9, + [325] = 9, [326] = 9, [327] = 9, [328] = 9, [329] = 9, + [330] = 9, [331] = 9, [332] = 9, [333] = 14, [334] = 2, + [335] = 19, [337] = 5, [339] = 9, [340] = 13, [341] = 13, + [342] = 13, [343] = 13, [344] = 13, [345] = 13, [346] = 13, + [347] = 20, [348] = 2, [349] = 12, [350] = 17, [351] = 3, + [352] = 3, [358] = 6, [359] = 1, [360] = 3, [367] = 1, + [371] = 13, [372] = 1, [373] = 1, [374] = 6, [377] = 1, + [378] = 1, [379] = 13, [380] = 9, [381] = 9, [382] = 20, + [383] = 19, [384] = 19, [385] = 19, [386] = 19, [388] = 19, + [389] = 19, [390] = 19, [391] = 19, [392] = 19, [393] = 19, + [394] = 19, [395] = 19, [396] = 19, [397] = 19, [398] = 19, + [399] = 19, [400] = 19, [401] = 19, [402] = 19, [403] = 19, + [404] = 19, [405] = 19, [406] = 19, [407] = 19, [408] = 19, + [409] = 19, [410] = 19, [411] = 19, [412] = 19, [413] = 19, + [414] = 19, [416] = 19, [417] = 19, [418] = 19, [419] = 19, + [420] = 19, [421] = 19, [422] = 19, [423] = 19, [424] = 19, + [425] = 17, [426] = 17, [427] = 17, [428] = 17, [429] = 17, + [430] = 17, [431] = 1, [432] = 16, [433] = 11, [434] = 19, + [435] = 19, [436] = 19, [437] = 19, +} + mainpatch() |