RPF encryption (GTA IV)

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
tbmq008
Posts: 62
Joined: Thu Nov 26, 2020 2:13 pm

RPF encryption (GTA IV)

Post by tbmq008 »

OK, first of all i need help with a script i'm trying to make.
so, there's this RPF format used by all games made by Rockstar Games using this RAGE engine.
i'm trying to cover this format bit by bit so i wanted to take a look at the decryption methods that were present in GTA IV.
GTA IV had a lot of encrypted archives. what i want to do is to "crack" those encrypted archives into something readable. as in, how the game actually reads these archives.
since i wanted to focus on the RPF archives, i decided why not start there. and this is what i managed so far.

Code: Select all

putarray 0 0 0x30465052 # "RPF0"
putarray 0 1 0x31465052 # "RPF1"
putarray 0 2 0x32465052 # "RPF2"
putarray 0 3 0x33465052 # "RPF3"

get is_rpf long

math found = 0
for i = 0 < 4
   getarray rpf_id 0 i
   if is_rpf == rpf_id
      math found = 1
   endif
next i

if found = 0
   cleanexit
endif

get header_size long
get entries long
get rpf_03 long
get rpf_04 long

math header_offset = 0x800
if rpf_04 != 0
   callfunction init_dec 1
else
   log MEMORY_FILE header_offset header_size
endif
goto 0 MEMORY_FILE
math headnum = -1
callfunction parse_rpf 1

startfunction parse_rpf
   string reported_sig = is_rpf
   if is_rpf == 0x30465052
      # Rockstar Games Presents Table Tennis
      xmath name_index_offset "entries * 16"
      for i = 0 < entries
         get e1 long headnum
         get e2 long headnum
         get e3 long headnum
         get e4 long headnum
         xmath e1_1 "(e1 >> 31) & 1"
         xmath e1_2 "(e1 & 0x7fffffff) + name_index_offset"
         putarray 0 i e1_1
         putarray 1 i e1_2
         putarray 2 i e2
         putarray 3 i e3
         putarray 4 i e4
      next i
       set directory_name string ""
       set PATH string ""
      math index = 0
      math entries = 1
       callfunction handle_rpf0_filesystem
   else
      print " unknown RPF signature - %reported_sig% "
      cleanexit
   endif
endfunction

startfunction handle_rpf0_filesystem
   string PATH + directory_name
   if index > 1
      string PATH + /
   endif
   math files = files
   math idx_limit = index
   math idx_limit + entries
   for i = index < idx_limit
      getarray is_directory 0 i
      getarray directory_name_offset 1 i
      goto directory_name_offset headnum
      get directory_name string headnum
      if is_directory == 0
         getarray file_offset 2 i
         getarray compressed_file_size 3 i
         getarray original_file_size 4 i
         set file_name string PATH
         string file_name + directory_name
         if compressed_file_size == original_file_size
            log file_name file_offset original_file_size
         else
            comtype deflate
            clog file_name file_offset compressed_file_size original_file_size
         endif
      elif is_directory == 1
         getarray index 2 i
         getarray entries 3 i
         getarray entries 4 i
         callfunction handle_rpf0_filesystem
      endif
   next i
endfunction

startfunction init_dec
   set MEMORY_FILE11 binary "\x1a\xb5\x6f\xed\x7e\xc3\xff\x01\x22\x7b\x69\x15\x33\x97\x5d\xce\x47\xd7\x69\x65\x3f\xf7\x75\x42\x6a\x96\xcd\x6d\x53\x07\x56\x5d" # decryption key
   log MEMORY_FILE10 0 0x10000
   goto MEMORY_FILE10
   goto 0x1e0 MEMORY_FILE10
   put 0xe long MEMORY_FILE10
   math l1_m = 0
   goto 0 MEMORY_FILE10
   for l1 = 0 < 8
      math l1_1 u= 0
      for l2 = 0 < 4
         if l2 = 0
            math l2_b = 0
         endif
         goto l1_m MEMORY_FILE11
         get l1_b2 byte MEMORY_FILE11
         math l1_b2 << l2_b
         math l1_1 |= l1_b2
         math l1_m + 1
         math l2_b + 8
      next l2
      put l1_1 long MEMORY_FILE10
   next l1
   math exp_key_pos = 0
   callfunction expand_aes_key 1
   goto 0 MEMORY_FILE10
   get exp5_xor1 long MEMORY_FILE10
   math result_exp5 ^ exp5_xor
   math result_exp5 ^ 0x1000000
   goto 4 MEMORY_FILE10
   get exp5_xor2 long MEMORY_FILE10
   xmath exp5_2 "exp5_xor2 ^ result_exp5"
   goto 0x20 MEMORY_FILE10
   put result_exp5 long MEMORY_FILE10
   goto 8 MEMORY_FILE10
   get exp5_xor3 long MEMORY_FILE10
   xmath result_exp5 "exp5_xor3 ^ exp5_2"
   goto 0x24 MEMORY_FILE10
   put exp5_2 long MEMORY_FILE10
   goto 0x28 MEMORY_FILE10
   put result_exp5 long MEMORY_FILE10
   goto 0xc MEMORY_FILE10
   get exp5_xor4 long MEMORY_FILE10
   xmath exp5_3 "exp5_xor4 ^ result_exp5"
   goto 0x2c MEMORY_FILE10
   put exp5_3 long MEMORY_FILE10
   putarray 2 0 0x0000000
   putarray 2 1 0x2000000
   putarray 2 2 0x4000000
   putarray 2 3 0x8000000
   putarray 2 4 0x10000000
   putarray 2 5 0x20000000
   putarray 2 6 0x40000000
   putarray 2 7 0x80000000
   putarray 2 8 0x1b000000
   math pv3_a1 = 1
   getarray puvar3 2 pv3_a1
   goto 0x30 MEMORY_FILE10
   math puvar4 = 0x30
   do
      math exp_key_pos + 1
      callfunction expand_aes_key 1
      xmath pv4_p2 "puvar4 - 0x20"
      goto pv4_p2 MEMORY_FILE10
      get pv4_v2 long MEMORY_FILE10
      math result_exp5 ^ pv4_v2
      goto puvar4 MEMORY_FILE10
      put result_exp5 long MEMORY_FILE10
      xmath pv4_p1 "puvar4 - 0x1c"
      goto pv4_p1 MEMORY_FILE10
      get pv4_v1 long MEMORY_FILE10
      xmath exp5_1 "pv4_v1 ^ result_exp5 ^ pv4_v2"
      xmath pv4_p3 "puvar4 - 0x18"
      goto pv4_p3 MEMORY_FILE10
      get pv4_v3 long MEMORY_FILE10
      xmath exp5_2 "pv4_v3 ^ exp5_1"
      xmath pv4_wp1 "puvar4 + 4"
      goto pv4_wp1 MEMORY_FILE10
      put exp5_2 long MEMORY_FILE10
      xmath pv4_wp2 "puvar4 + 8"
      goto pv4_wp2 MEMORY_FILE10
      put exp5_1 long MEMORY_FILE10
      xmath pv4_wp3 "puvar4 + 0xc"
      xmath pv4_p4 "puvar4 - 0x14"
      goto pv4_p4 MEMORY_FILE10
      get pv4_v4 long MEMORY_FILE10
      xmath exp5_3 "pv4_v4 ^ exp5_2"
      goto pv4_wp3 MEMORY_FILE10
      put exp5_3 long MEMORY_FILE10
      math exp_key_pos + 1
      callfunction expand_aes_key 1
      math pv3_a1 + 1
      getarray puvar3 2 pv3_a1
      math puvar6 == puvar3
      xmath pv4_p2 "puvar4 - 0x10"
      goto pv4_p2 MEMORY_FILE10
      get pv4_v2 long MEMORY_FILE10
      xmath exp5_2 "exp5_2 ^ pv4_v3 ^ puvar3"
      xmath pv4_wp1 "puvar4 + 0x10"
      goto pv4_wp1 MEMORY_FILE10
      put exp5_2 long MEMORY_FILE10
      xmath pv4_p1 "puvar4 - 0xc"
      goto pv4_p1 MEMORY_FILE10
      get pv4_v1 long MEMORY_FILE10
      xmath exp5_2 "pv4_v1 ^ exp5_2"
      xmath pv4_wp2 "puvar4 + 0x14"
      goto pv4_wp2 MEMORY_FILE10
      put exp5_2 long MEMORY_FILE10
      xmath pv4_p3 "puvar4 - 8"
      goto pv4_p3 MEMORY_FILE10
      get pv4_v3 long MEMORY_FILE10
      xmath exp5_2 "pv4_v3 ^ exp5_2"
      xmath pv4_wp3 "puvar4 + 0x18"
      goto pv4_wp3 MEMORY_FILE10
      put exp5_2 long MEMORY_FILE10
      xmath pv4_p4 "puvar4 - 4"
      goto pv4_p4 MEMORY_FILE10
      get pv4_v4 long MEMORY_FILE10
      xmath exp5_3 "pv4_v4 ^ exp5_2"
      xmath pv4_wp4 "puvar4 + 0x1c"
      goto pv4_wp4 MEMORY_FILE10
      put exp5_3 long MEMORY_FILE10
      math puvar3 == puvar6
      math puvar4 + 0x20
   while puvar6 != 0x80000000
   goto 0xe0 MEMORY_FILE10
   get e1 long MEMORY_FILE10
   goto 0xf0 MEMORY_FILE10
   put e1 long MEMORY_FILE10
   goto 0xe4 MEMORY_FILE10
   get e2 long MEMORY_FILE10
   goto 0xf4 MEMORY_FILE10
   put e2 long MEMORY_FILE10
   goto 0xe8 MEMORY_FILE10
   get e3 long MEMORY_FILE10
   goto 0xf8 MEMORY_FILE10
   put e3 long MEMORY_FILE10
   goto 0xec MEMORY_FILE10
   get e4 long MEMORY_FILE10
   goto 0xfc MEMORY_FILE10
   put e4 long MEMORY_FILE10
   math ivar5 = 1
   math iv5_1 = 0xf0
   math iv5_2 = 0xe0
   math a3p_1 = 0
   math a3p_2 = 0
   if ivar5 < 0x1e0
      do
         if a3p_1 == 0x400
            math a3p_1 = 0
         endif
         if a3p_2 == 0x100
            math a3p_2 = 0
         endif
         math iv5_2 - 0x10
         math iv5_1 + 0x10
         callfunction aes_3 1
         math a3p_1 + 1
         math a3p_2 + 1
         goto iv5_1 MEMORY_FILE10
         put a3v_1 long MEMORY_FILE10
         callfunction aes_3 1
         math a3p_1 + 1
         math a3p_2 + 1
         math iv5_1 + 4
         goto iv5_1 MEMORY_FILE10
         put a3v_1 long MEMORY_FILE10
         callfunction aes_3 1
         math a3p_1 + 1
         math a3p_2 + 1
         math iv5_1 + 4
         goto iv5_1 MEMORY_FILE10
         put a3v_1 long MEMORY_FILE10
         callfunction aes_3 1
         math a3p_1 + 1
         math a3p_2 + 1
         math iv5_1 + 4
         goto iv5_1 MEMORY_FILE10
         put a3v_1 long MEMORY_FILE10
         math ivar5 + 1
      while ivar5 < 0x1e0
   endif
endfunction

startfunction expand_aes_key
   set MEMORY_FILE12 binary "\x63\x63\x63\x63\x7C\x7C\x7C\x7C\x77\x77\x77\x77\x7B\x7B\x7B\x7B\xF2\xF2\xF2\xF2\x6B\x6B\x6B\x6B\x6F\x6F\x6F\x6F\xC5\xC5\xC5\xC5\x30\x30\x30\x30\x01\x01\x01\x01\x67\x67\x67\x67\x2B\x2B\x2B\x2B\xFE\xFE\xFE\xFE\xD7\xD7\xD7\xD7\xAB\xAB\xAB\xAB\x76\x76\x76\x76\xCA\xCA\xCA\xCA\x82\x82\x82\x82\xC9\xC9\xC9\xC9\x7D\x7D\x7D\x7D\xFA\xFA\xFA\xFA\x59\x59\x59\x59\x47\x47\x47\x47\xF0\xF0\xF0\xF0\xAD\xAD\xAD\xAD\xD4\xD4\xD4\xD4\xA2\xA2\xA2\xA2\xAF\xAF\xAF\xAF\x9C\x9C\x9C\x9C\xA4\xA4\xA4\xA4\x72\x72\x72\x72\xC0\xC0\xC0\xC0\xB7\xB7\xB7\xB7\xFD\xFD\xFD\xFD\x93\x93\x93\x93\x26\x26\x26\x26\x36\x36\x36\x36\x3F\x3F\x3F\x3F\xF7\xF7\xF7\xF7\xCC\xCC\xCC\xCC\x34\x34\x34\x34\xA5\xA5\xA5\xA5\xE5\xE5\xE5\xE5\xF1\xF1\xF1\xF1\x71\x71\x71\x71\xD8\xD8\xD8\xD8\x31\x31\x31\x31\x15\x15\x15\x15\x04\x04\x04\x04\xC7\xC7\xC7\xC7\x23\x23\x23\x23\xC3\xC3\xC3\xC3\x18\x18\x18\x18\x96\x96\x96\x96\x05\x05\x05\x05\x9A\x9A\x9A\x9A\x07\x07\x07\x07\x12\x12\x12\x12\x80\x80\x80\x80\xE2\xE2\xE2\xE2\xEB\xEB\xEB\xEB\x27\x27\x27\x27\xB2\xB2\xB2\xB2\x75\x75\x75\x75\x09\x09\x09\x09\x83\x83\x83\x83\x2C\x2C\x2C\x2C\x1A\x1A\x1A\x1A\x1B\x1B\x1B\x1B\x6E\x6E\x6E\x6E\x5A\x5A\x5A\x5A\xA0\xA0\xA0\xA0\x52\x52\x52\x52\x3B\x3B\x3B\x3B\xD6\xD6\xD6\xD6\xB3\xB3\xB3\xB3\x29\x29\x29\x29\xE3\xE3\xE3\xE3\x2F\x2F\x2F\x2F\x84\x84\x84\x84\x53\x53\x53\x53\xD1\xD1\xD1\xD1\x00\x00\x00\x00\xED\xED\xED\xED\x20\x20\x20\x20\xFC\xFC\xFC\xFC\xB1\xB1\xB1\xB1\x5B\x5B\x5B\x5B\x6A\x6A\x6A\x6A\xCB\xCB\xCB\xCB\xBE\xBE\xBE\xBE\x39\x39\x39\x39\x4A\x4A\x4A\x4A\x4C\x4C\x4C\x4C\x58\x58\x58\x58\xCF\xCF\xCF\xCF\xD0\xD0\xD0\xD0\xEF\xEF\xEF\xEF\xAA\xAA\xAA\xAA\xFB\xFB\xFB\xFB\x43\x43\x43\x43\x4D\x4D\x4D\x4D\x33\x33\x33\x33\x85\x85\x85\x85\x45\x45\x45\x45\xF9\xF9\xF9\xF9\x02\x02\x02\x02\x7F\x7F\x7F\x7F\x50\x50\x50\x50\x3C\x3C\x3C\x3C\x9F\x9F\x9F\x9F\xA8\xA8\xA8\xA8\x51\x51\x51\x51\xA3\xA3\xA3\xA3\x40\x40\x40\x40\x8F\x8F\x8F\x8F\x92\x92\x92\x92\x9D\x9D\x9D\x9D\x38\x38\x38\x38\xF5\xF5\xF5\xF5\xBC\xBC\xBC\xBC\xB6\xB6\xB6\xB6\xDA\xDA\xDA\xDA\x21\x21\x21\x21\x10\x10\x10\x10\xFF\xFF\xFF\xFF\xF3\xF3\xF3\xF3\xD2\xD2\xD2\xD2\xCD\xCD\xCD\xCD\x0C\x0C\x0C\x0C\x13\x13\x13\x13\xEC\xEC\xEC\xEC\x5F\x5F\x5F\x5F\x97\x97\x97\x97\x44\x44\x44\x44\x17\x17\x17\x17\xC4\xC4\xC4\xC4\xA7\xA7\xA7\xA7\x7E\x7E\x7E\x7E\x3D\x3D\x3D\x3D\x64\x64\x64\x64\x5D\x5D\x5D\x5D\x19\x19\x19\x19\x73\x73\x73\x73\x60\x60\x60\x60\x81\x81\x81\x81\x4F\x4F\x4F\x4F\xDC\xDC\xDC\xDC\x22\x22\x22\x22\x2A\x2A\x2A\x2A\x90\x90\x90\x90\x88\x88\x88\x88\x46\x46\x46\x46\xEE\xEE\xEE\xEE\xB8\xB8\xB8\xB8\x14\x14\x14\x14\xDE\xDE\xDE\xDE\x5E\x5E\x5E\x5E\x0B\x0B\x0B\x0B\xDB\xDB\xDB\xDB\xE0\xE0\xE0\xE0\x32\x32\x32\x32\x3A\x3A\x3A\x3A\x0A\x0A\x0A\x0A\x49\x49\x49\x49\x06\x06\x06\x06\x24\x24\x24\x24\x5C\x5C\x5C\x5C\xC2\xC2\xC2\xC2\xD3\xD3\xD3\xD3\xAC\xAC\xAC\xAC\x62\x62\x62\x62\x91\x91\x91\x91\x95\x95\x95\x95\xE4\xE4\xE4\xE4\x79\x79\x79\x79\xE7\xE7\xE7\xE7\xC8\xC8\xC8\xC8\x37\x37\x37\x37\x6D\x6D\x6D\x6D\x8D\x8D\x8D\x8D\xD5\xD5\xD5\xD5\x4E\x4E\x4E\x4E\xA9\xA9\xA9\xA9\x6C\x6C\x6C\x6C\x56\x56\x56\x56\xF4\xF4\xF4\xF4\xEA\xEA\xEA\xEA\x65\x65\x65\x65\x7A\x7A\x7A\x7A\xAE\xAE\xAE\xAE\x08\x08\x08\x08\xBA\xBA\xBA\xBA\x78\x78\x78\x78\x25\x25\x25\x25\x2E\x2E\x2E\x2E\x1C\x1C\x1C\x1C\xA6\xA6\xA6\xA6\xB4\xB4\xB4\xB4\xC6\xC6\xC6\xC6\xE8\xE8\xE8\xE8\xDD\xDD\xDD\xDD\x74\x74\x74\x74\x1F\x1F\x1F\x1F\x4B\x4B\x4B\x4B\xBD\xBD\xBD\xBD\x8B\x8B\x8B\x8B\x8A\x8A\x8A\x8A\x70\x70\x70\x70\x3E\x3E\x3E\x3E\xB5\xB5\xB5\xB5\x66\x66\x66\x66\x48\x48\x48\x48\x03\x03\x03\x03\xF6\xF6\xF6\xF6\x0E\x0E\x0E\x0E\x61\x61\x61\x61\x35\x35\x35\x35\x57\x57\x57\x57\xB9\xB9\xB9\xB9\x86\x86\x86\x86\xC1\xC1\xC1\xC1\x1D\x1D\x1D\x1D\x9E\x9E\x9E\x9E\xE1\xE1\xE1\xE1\xF8\xF8\xF8\xF8\x98\x98\x98\x98\x11\x11\x11\x11\x69\x69\x69\x69\xD9\xD9\xD9\xD9\x8E\x8E\x8E\x8E\x94\x94\x94\x94\x9B\x9B\x9B\x9B\x1E\x1E\x1E\x1E\x87\x87\x87\x87\xE9\xE9\xE9\xE9\xCE\xCE\xCE\xCE\x55\x55\x55\x55\x28\x28\x28\x28\xDF\xDF\xDF\xDF\x8C\x8C\x8C\x8C\xA1\xA1\xA1\xA1\x89\x89\x89\x89\x0D\x0D\x0D\x0D\xBF\xBF\xBF\xBF\xE6\xE6\xE6\xE6\x42\x42\x42\x42\x68\x68\x68\x68\x41\x41\x41\x41\x99\x99\x99\x99\x2D\x2D\x2D\x2D\x0F\x0F\x0F\x0F\xB0\xB0\xB0\xB0\x54\x54\x54\x54\xBB\xBB\xBB\xBB\x16\x16\x16\x16"
   math exp_key_pos * 4
   goto exp_key_pos MEMORY_FILE12
   get target_exp long MEMORY_FILE12
   xmath result_exp1 "(target_exp >> 0x18) & 0xff"
   xmath result_exp2 "((target_exp >> 0x10) & 0xff) & 0xff000000"
   xmath result_exp3 "((target_exp >> 8) & 0xff) & 0xff0000"
   xmath result_exp4 "(target_exp & 0xff) & 0xff00"
   xmath result_exp5 "result_exp1 ^ result_exp2 ^ result_exp3 ^ result_exp4"
   math exp_key_pos / 4
endfunction

startfunction aes_3
   set MEMORY_FILE13 binary "\x50\xA7\xF4\x51\x53\x65\x41\x7E\xC3\xA4\x17\x1A\x96\x5E\x27\x3A\xCB\x6B\xAB\x3B\xF1\x45\x9D\x1F\xAB\x58\xFA\xAC\x93\x03\xE3\x4B\x55\xFA\x30\x20\xF6\x6D\x76\xAD\x91\x76\xCC\x88\x25\x4C\x02\xF5\xFC\xD7\xE5\x4F\xD7\xCB\x2A\xC5\x80\x44\x35\x26\x8F\xA3\x62\xB5\x49\x5A\xB1\xDE\x67\x1B\xBA\x25\x98\x0E\xEA\x45\xE1\xC0\xFE\x5D\x02\x75\x2F\xC3\x12\xF0\x4C\x81\xA3\x97\x46\x8D\xC6\xF9\xD3\x6B\xE7\x5F\x8F\x03\x95\x9C\x92\x15\xEB\x7A\x6D\xBF\xDA\x59\x52\x95\x2D\x83\xBE\xD4\xD3\x21\x74\x58\x29\x69\xE0\x49\x44\xC8\xC9\x8E\x6A\x89\xC2\x75\x78\x79\x8E\xF4\x6B\x3E\x58\x99\xDD\x71\xB9\x27\xB6\x4F\xE1\xBE\x17\xAD\x88\xF0\x66\xAC\x20\xC9\xB4\x3A\xCE\x7D\x18\x4A\xDF\x63\x82\x31\x1A\xE5\x60\x33\x51\x97\x45\x7F\x53\x62\xE0\x77\x64\xB1\x84\xAE\x6B\xBB\x1C\xA0\x81\xFE\x94\x2B\x08\xF9\x58\x68\x48\x70\x19\xFD\x45\x8F\x87\x6C\xDE\x94\xB7\xF8\x7B\x52\x23\xD3\x73\xAB\xE2\x02\x4B\x72\x57\x8F\x1F\xE3\x2A\xAB\x55\x66\x07\x28\xEB\xB2\x03\xC2\xB5\x2F\x9A\x7B\xC5\x86\xA5\x08\x37\xD3\xF2\x87\x28\x30\xB2\xA5\xBF\x23\xBA\x6A\x03\x02\x5C\x82\x16\xED\x2B\x1C\xCF\x8A\x92\xB4\x79\xA7\xF0\xF2\x07\xF3\xA1\xE2\x69\x4E\xCD\xF4\xDA\x65\xD5\xBE\x05\x06\x1F\x62\x34\xD1\x8A\xFE\xA6\xC4\x9D\x53\x2E\x34\xA0\x55\xF3\xA2\x32\xE1\x8A\x05\x75\xEB\xF6\xA4\x39\xEC\x83\x0B\xAA\xEF\x60\x40\x06\x9F\x71\x5E\x51\x10\x6E\xBD\xF9\x8A\x21\x3E\x3D\x06\xDD\x96\xAE\x05\x3E\xDD\x46\xBD\xE6\x4D\xB5\x8D\x54\x91\x05\x5D\xC4\x71\x6F\xD4\x06\x04\xFF\x15\x50\x60\x24\xFB\x98\x19\x97\xE9\xBD\xD6\xCC\x43\x40\x89\x77\x9E\xD9\x67\xBD\x42\xE8\xB0\x88\x8B\x89\x07\x38\x5B\x19\xE7\xDB\xEE\xC8\x79\x47\x0A\x7C\xA1\xE9\x0F\x42\x7C\xC9\x1E\x84\xF8\x00\x00\x00\x00\x83\x86\x80\x09\x48\xED\x2B\x32\xAC\x70\x11\x1E\x4E\x72\x5A\x6C\xFB\xFF\x0E\xFD\x56\x38\x85\x0F\x1E\xD5\xAE\x3D\x27\x39\x2D\x36\x64\xD9\x0F\x0A\x21\xA6\x5C\x68\xD1\x54\x5B\x9B\x3A\x2E\x36\x24\xB1\x67\x0A\x0C\x0F\xE7\x57\x93\xD2\x96\xEE\xB4\x9E\x91\x9B\x1B\x4F\xC5\xC0\x80\xA2\x20\xDC\x61\x69\x4B\x77\x5A\x16\x1A\x12\x1C\x0A\xBA\x93\xE2\xE5\x2A\xA0\xC0\x43\xE0\x22\x3C\x1D\x17\x1B\x12\x0B\x0D\x09\x0E\xAD\xC7\x8B\xF2\xB9\xA8\xB6\x2D\xC8\xA9\x1E\x14\x85\x19\xF1\x57\x4C\x07\x75\xAF\xBB\xDD\x99\xEE\xFD\x60\x7F\xA3\x9F\x26\x01\xF7\xBC\xF5\x72\x5C\xC5\x3B\x66\x44\x34\x7E\xFB\x5B\x76\x29\x43\x8B\xDC\xC6\x23\xCB\x68\xFC\xED\xB6\x63\xF1\xE4\xB8\xCA\xDC\x31\xD7\x10\x85\x63\x42\x40\x22\x97\x13\x20\x11\xC6\x84\x7D\x24\x4A\x85\xF8\x3D\xBB\xD2\x11\x32\xF9\xAE\x6D\xA1\x29\xC7\x4B\x2F\x9E\x1D\xF3\x30\xB2\xDC\xEC\x52\x86\x0D\xD0\xE3\xC1\x77\x6C\x16\xB3\x2B\x99\xB9\x70\xA9\xFA\x48\x94\x11\x22\x64\xE9\x47\xC4\x8C\xFC\xA8\x1A\x3F\xF0\xA0\xD8\x2C\x7D\x56\xEF\x90\x33\x22\xC7\x4E\x49\x87\xC1\xD1\x38\xD9\xFE\xA2\xCA\x8C\x36\x0B\xD4\x98\xCF\x81\xF5\xA6\x28\xDE\x7A\xA5\x26\x8E\xB7\xDA\xA4\xBF\xAD\x3F\xE4\x9D\x3A\x2C\x0D\x92\x78\x50\x9B\xCC\x5F\x6A\x62\x46\x7E\x54\xC2\x13\x8D\xF6\xE8\xB8\xD8\x90\x5E\xF7\x39\x2E\xF5\xAF\xC3\x82\xBE\x80\x5D\x9F\x7C\x93\xD0\x69\xA9\x2D\xD5\x6F\xB3\x12\x25\xCF\x3B\x99\xAC\xC8\xA7\x7D\x18\x10\x6E\x63\x9C\xE8\x7B\xBB\x3B\xDB\x09\x78\x26\xCD\xF4\x18\x59\x6E\x01\xB7\x9A\xEC\xA8\x9A\x4F\x83\x65\x6E\x95\xE6\x7E\xE6\xFF\xAA\x08\xCF\xBC\x21\xE6\xE8\x15\xEF\xD9\x9B\xE7\xBA\xCE\x36\x6F\x4A\xD4\x09\x9F\xEA\xD6\x7C\xB0\x29\xAF\xB2\xA4\x31\x31\x23\x3F\x2A\x30\x94\xA5\xC6\xC0\x66\xA2\x35\x37\xBC\x4E\x74\xA6\xCA\x82\xFC\xB0\xD0\x90\xE0\x15\xD8\xA7\x33\x4A\x98\x04\xF1\xF7\xDA\xEC\x41\x0E\x50\xCD\x7F\x2F\xF6\x91\x17\x8D\xD6\x4D\x76\x4D\xB0\xEF\x43\x54\x4D\xAA\xCC\xDF\x04\x96\xE4\xE3\xB5\xD1\x9E\x1B\x88\x6A\x4C\xB8\x1F\x2C\xC1\x7F\x51\x65\x46\x04\xEA\x5E\x9D\x5D\x35\x8C\x01\x73\x74\x87\xFA\x2E\x41\x0B\xFB\x5A\x1D\x67\xB3\x52\xD2\xDB\x92\x33\x56\x10\xE9\x13\x47\xD6\x6D\x8C\x61\xD7\x9A\x7A\x0C\xA1\x37\x8E\x14\xF8\x59\x89\x3C\x13\xEB\xEE\x27\xA9\xCE\x35\xC9\x61\xB7\xED\xE5\x1C\xE1\x3C\xB1\x47\x7A\x59\xDF\xD2\x9C\x3F\x73\xF2\x55\x79\xCE\x14\x18\xBF\x37\xC7\x73\xEA\xCD\xF7\x53\x5B\xAA\xFD\x5F\x14\x6F\x3D\xDF\x86\xDB\x44\x78\x81\xF3\xAF\xCA\x3E\xC4\x68\xB9\x2C\x34\x24\x38\x5F\x40\xA3\xC2\x72\xC3\x1D\x16\x0C\x25\xE2\xBC\x8B\x49\x3C\x28\x41\x95\x0D\xFF\x71\x01\xA8\x39\xDE\xB3\x0C\x08\x9C\xE4\xB4\xD8\x90\xC1\x56\x64\x61\x84\xCB\x7B\x70\xB6\x32\xD5\x74\x5C\x6C\x48\x42\x57\xB8\xD0\xA7\xF4\x51\x50\x65\x41\x7E\x53\xA4\x17\x1A\xC3\x5E\x27\x3A\x96\x6B\xAB\x3B\xCB\x45\x9D\x1F\xF1\x58\xFA\xAC\xAB\x03\xE3\x4B\x93\xFA\x30\x20\x55\x6D\x76\xAD\xF6\x76\xCC\x88\x91\x4C\x02\xF5\x25\xD7\xE5\x4F\xFC\xCB\x2A\xC5\xD7\x44\x35\x26\x80\xA3\x62\xB5\x8F\x5A\xB1\xDE\x49\x1B\xBA\x25\x67\x0E\xEA\x45\x98\xC0\xFE\x5D\xE1\x75\x2F\xC3\x02\xF0\x4C\x81\x12\x97\x46\x8D\xA3\xF9\xD3\x6B\xC6\x5F\x8F\x03\xE7\x9C\x92\x15\x95\x7A\x6D\xBF\xEB\x59\x52\x95\xDA\x83\xBE\xD4\x2D\x21\x74\x58\xD3\x69\xE0\x49\x29\xC8\xC9\x8E\x44\x89\xC2\x75\x6A\x79\x8E\xF4\x78\x3E\x58\x99\x6B\x71\xB9\x27\xDD\x4F\xE1\xBE\xB6\xAD\x88\xF0\x17\xAC\x20\xC9\x66\x3A\xCE\x7D\xB4\x4A\xDF\x63\x18\x31\x1A\xE5\x82\x33\x51\x97\x60\x7F\x53\x62\x45\x77\x64\xB1\xE0\xAE\x6B\xBB\x84\xA0\x81\xFE\x1C\x2B\x08\xF9\x94\x68\x48\x70\x58\xFD\x45\x8F\x19\x6C\xDE\x94\x87\xF8\x7B\x52\xB7\xD3\x73\xAB\x23\x02\x4B\x72\xE2\x8F\x1F\xE3\x57\xAB\x55\x66\x2A\x28\xEB\xB2\x07\xC2\xB5\x2F\x03\x7B\xC5\x86\x9A\x08\x37\xD3\xA5\x87\x28\x30\xF2\xA5\xBF\x23\xB2\x6A\x03\x02\xBA\x82\x16\xED\x5C\x1C\xCF\x8A\x2B\xB4\x79\xA7\x92\xF2\x07\xF3\xF0\xE2\x69\x4E\xA1\xF4\xDA\x65\xCD\xBE\x05\x06\xD5\x62\x34\xD1\x1F\xFE\xA6\xC4\x8A\x53\x2E\x34\x9D\x55\xF3\xA2\xA0\xE1\x8A\x05\x32\xEB\xF6\xA4\x75\xEC\x83\x0B\x39\xEF\x60\x40\xAA\x9F\x71\x5E\x06\x10\x6E\xBD\x51\x8A\x21\x3E\xF9\x06\xDD\x96\x3D\x05\x3E\xDD\xAE\xBD\xE6\x4D\x46\x8D\x54\x91\xB5\x5D\xC4\x71\x05\xD4\x06\x04\x6F\x15\x50\x60\xFF\xFB\x98\x19\x24\xE9\xBD\xD6\x97\x43\x40\x89\xCC\x9E\xD9\x67\x77\x42\xE8\xB0\xBD\x8B\x89\x07\x88\x5B\x19\xE7\x38\xEE\xC8\x79\xDB\x0A\x7C\xA1\x47\x0F\x42\x7C\xE9\x1E\x84\xF8\xC9\x00\x00\x00\x00\x86\x80\x09\x83\xED\x2B\x32\x48\x70\x11\x1E\xAC\x72\x5A\x6C\x4E\xFF\x0E\xFD\xFB\x38\x85\x0F\x56\xD5\xAE\x3D\x1E\x39\x2D\x36\x27\xD9\x0F\x0A\x64\xA6\x5C\x68\x21\x54\x5B\x9B\xD1\x2E\x36\x24\x3A\x67\x0A\x0C\xB1\xE7\x57\x93\x0F\x96\xEE\xB4\xD2\x91\x9B\x1B\x9E\xC5\xC0\x80\x4F\x20\xDC\x61\xA2\x4B\x77\x5A\x69\x1A\x12\x1C\x16\xBA\x93\xE2\x0A\x2A\xA0\xC0\xE5\xE0\x22\x3C\x43\x17\x1B\x12\x1D\x0D\x09\x0E\x0B\xC7\x8B\xF2\xAD\xA8\xB6\x2D\xB9\xA9\x1E\x14\xC8\x19\xF1\x57\x85\x07\x75\xAF\x4C\xDD\x99\xEE\xBB\x60\x7F\xA3\xFD\x26\x01\xF7\x9F\xF5\x72\x5C\xBC\x3B\x66\x44\xC5\x7E\xFB\x5B\x34\x29\x43\x8B\x76\xC6\x23\xCB\xDC\xFC\xED\xB6\x68\xF1\xE4\xB8\x63\xDC\x31\xD7\xCA\x85\x63\x42\x10\x22\x97\x13\x40\x11\xC6\x84\x20\x24\x4A\x85\x7D\x3D\xBB\xD2\xF8\x32\xF9\xAE\x11\xA1\x29\xC7\x6D\x2F\x9E\x1D\x4B\x30\xB2\xDC\xF3\x52\x86\x0D\xEC\xE3\xC1\x77\xD0\x16\xB3\x2B\x6C\xB9\x70\xA9\x99\x48\x94\x11\xFA\x64\xE9\x47\x22\x8C\xFC\xA8\xC4\x3F\xF0\xA0\x1A\x2C\x7D\x56\xD8\x90\x33\x22\xEF\x4E\x49\x87\xC7\xD1\x38\xD9\xC1\xA2\xCA\x8C\xFE\x0B\xD4\x98\x36\x81\xF5\xA6\xCF\xDE\x7A\xA5\x28\x8E\xB7\xDA\x26\xBF\xAD\x3F\xA4\x9D\x3A\x2C\xE4\x92\x78\x50\x0D\xCC\x5F\x6A\x9B\x46\x7E\x54\x62\x13\x8D\xF6\xC2\xB8\xD8\x90\xE8\xF7\x39\x2E\x5E\xAF\xC3\x82\xF5\x80\x5D\x9F\xBE\x93\xD0\x69\x7C\x2D\xD5\x6F\xA9\x12\x25\xCF\xB3\x99\xAC\xC8\x3B\x7D\x18\x10\xA7\x63\x9C\xE8\x6E\xBB\x3B\xDB\x7B\x78\x26\xCD\x09\x18\x59\x6E\xF4\xB7\x9A\xEC\x01\x9A\x4F\x83\xA8\x6E\x95\xE6\x65\xE6\xFF\xAA\x7E\xCF\xBC\x21\x08\xE8\x15\xEF\xE6\x9B\xE7\xBA\xD9\x36\x6F\x4A\xCE\x09\x9F\xEA\xD4\x7C\xB0\x29\xD6\xB2\xA4\x31\xAF\x23\x3F\x2A\x31\x94\xA5\xC6\x30\x66\xA2\x35\xC0\xBC\x4E\x74\x37\xCA\x82\xFC\xA6\xD0\x90\xE0\xB0\xD8\xA7\x33\x15\x98\x04\xF1\x4A\xDA\xEC\x41\xF7\x50\xCD\x7F\x0E\xF6\x91\x17\x2F\xD6\x4D\x76\x8D\xB0\xEF\x43\x4D\x4D\xAA\xCC\x54\x04\x96\xE4\xDF\xB5\xD1\x9E\xE3\x88\x6A\x4C\x1B\x1F\x2C\xC1\xB8\x51\x65\x46\x7F\xEA\x5E\x9D\x04\x35\x8C\x01\x5D\x74\x87\xFA\x73\x41\x0B\xFB\x2E\x1D\x67\xB3\x5A\xD2\xDB\x92\x52\x56\x10\xE9\x33\x47\xD6\x6D\x13\x61\xD7\x9A\x8C\x0C\xA1\x37\x7A\x14\xF8\x59\x8E\x3C\x13\xEB\x89\x27\xA9\xCE\xEE\xC9\x61\xB7\x35\xE5\x1C\xE1\xED\xB1\x47\x7A\x3C\xDF\xD2\x9C\x59\x73\xF2\x55\x3F\xCE\x14\x18\x79\x37\xC7\x73\xBF\xCD\xF7\x53\xEA\xAA\xFD\x5F\x5B\x6F\x3D\xDF\x14\xDB\x44\x78\x86\xF3\xAF\xCA\x81\xC4\x68\xB9\x3E\x34\x24\x38\x2C\x40\xA3\xC2\x5F\xC3\x1D\x16\x72\x25\xE2\xBC\x0C\x49\x3C\x28\x8B\x95\x0D\xFF\x41\x01\xA8\x39\x71\xB3\x0C\x08\xDE\xE4\xB4\xD8\x9C\xC1\x56\x64\x90\x84\xCB\x7B\x61\xB6\x32\xD5\x70\x5C\x6C\x48\x74\x57\xB8\xD0\x42\xF4\x51\x50\xA7\x41\x7E\x53\x65\x17\x1A\xC3\xA4\x27\x3A\x96\x5E\xAB\x3B\xCB\x6B\x9D\x1F\xF1\x45\xFA\xAC\xAB\x58\xE3\x4B\x93\x03\x30\x20\x55\xFA\x76\xAD\xF6\x6D\xCC\x88\x91\x76\x02\xF5\x25\x4C\xE5\x4F\xFC\xD7\x2A\xC5\xD7\xCB\x35\x26\x80\x44\x62\xB5\x8F\xA3\xB1\xDE\x49\x5A\xBA\x25\x67\x1B\xEA\x45\x98\x0E\xFE\x5D\xE1\xC0\x2F\xC3\x02\x75\x4C\x81\x12\xF0\x46\x8D\xA3\x97\xD3\x6B\xC6\xF9\x8F\x03\xE7\x5F\x92\x15\x95\x9C\x6D\xBF\xEB\x7A\x52\x95\xDA\x59\xBE\xD4\x2D\x83\x74\x58\xD3\x21\xE0\x49\x29\x69\xC9\x8E\x44\xC8\xC2\x75\x6A\x89\x8E\xF4\x78\x79\x58\x99\x6B\x3E\xB9\x27\xDD\x71\xE1\xBE\xB6\x4F\x88\xF0\x17\xAD\x20\xC9\x66\xAC\xCE\x7D\xB4\x3A\xDF\x63\x18\x4A\x1A\xE5\x82\x31\x51\x97\x60\x33\x53\x62\x45\x7F\x64\xB1\xE0\x77\x6B\xBB\x84\xAE\x81\xFE\x1C\xA0\x08\xF9\x94\x2B\x48\x70\x58\x68\x45\x8F\x19\xFD\xDE\x94\x87\x6C\x7B\x52\xB7\xF8\x73\xAB\x23\xD3\x4B\x72\xE2\x02\x1F\xE3\x57\x8F\x55\x66\x2A\xAB\xEB\xB2\x07\x28\xB5\x2F\x03\xC2\xC5\x86\x9A\x7B\x37\xD3\xA5\x08\x28\x30\xF2\x87\xBF\x23\xB2\xA5\x03\x02\xBA\x6A\x16\xED\x5C\x82\xCF\x8A\x2B\x1C\x79\xA7\x92\xB4\x07\xF3\xF0\xF2\x69\x4E\xA1\xE2\xDA\x65\xCD\xF4\x05\x06\xD5\xBE\x34\xD1\x1F\x62\xA6\xC4\x8A\xFE\x2E\x34\x9D\x53\xF3\xA2\xA0\x55\x8A\x05\x32\xE1\xF6\xA4\x75\xEB\x83\x0B\x39\xEC\x60\x40\xAA\xEF\x71\x5E\x06\x9F\x6E\xBD\x51\x10\x21\x3E\xF9\x8A\xDD\x96\x3D\x06\x3E\xDD\xAE\x05\xE6\x4D\x46\xBD\x54\x91\xB5\x8D\xC4\x71\x05\x5D\x06\x04\x6F\xD4\x50\x60\xFF\x15\x98\x19\x24\xFB\xBD\xD6\x97\xE9\x40\x89\xCC\x43\xD9\x67\x77\x9E\xE8\xB0\xBD\x42\x89\x07\x88\x8B\x19\xE7\x38\x5B\xC8\x79\xDB\xEE\x7C\xA1\x47\x0A\x42\x7C\xE9\x0F\x84\xF8\xC9\x1E\x00\x00\x00\x00\x80\x09\x83\x86\x2B\x32\x48\xED\x11\x1E\xAC\x70\x5A\x6C\x4E\x72\x0E\xFD\xFB\xFF\x85\x0F\x56\x38\xAE\x3D\x1E\xD5\x2D\x36\x27\x39\x0F\x0A\x64\xD9\x5C\x68\x21\xA6\x5B\x9B\xD1\x54\x36\x24\x3A\x2E\x0A\x0C\xB1\x67\x57\x93\x0F\xE7\xEE\xB4\xD2\x96\x9B\x1B\x9E\x91\xC0\x80\x4F\xC5\xDC\x61\xA2\x20\x77\x5A\x69\x4B\x12\x1C\x16\x1A\x93\xE2\x0A\xBA\xA0\xC0\xE5\x2A\x22\x3C\x43\xE0\x1B\x12\x1D\x17\x09\x0E\x0B\x0D\x8B\xF2\xAD\xC7\xB6\x2D\xB9\xA8\x1E\x14\xC8\xA9\xF1\x57\x85\x19\x75\xAF\x4C\x07\x99\xEE\xBB\xDD\x7F\xA3\xFD\x60\x01\xF7\x9F\x26\x72\x5C\xBC\xF5\x66\x44\xC5\x3B\xFB\x5B\x34\x7E\x43\x8B\x76\x29\x23\xCB\xDC\xC6\xED\xB6\x68\xFC\xE4\xB8\x63\xF1\x31\xD7\xCA\xDC\x63\x42\x10\x85\x97\x13\x40\x22\xC6\x84\x20\x11\x4A\x85\x7D\x24\xBB\xD2\xF8\x3D\xF9\xAE\x11\x32\x29\xC7\x6D\xA1\x9E\x1D\x4B\x2F\xB2\xDC\xF3\x30\x86\x0D\xEC\x52\xC1\x77\xD0\xE3\xB3\x2B\x6C\x16\x70\xA9\x99\xB9\x94\x11\xFA\x48\xE9\x47\x22\x64\xFC\xA8\xC4\x8C\xF0\xA0\x1A\x3F\x7D\x56\xD8\x2C\x33\x22\xEF\x90\x49\x87\xC7\x4E\x38\xD9\xC1\xD1\xCA\x8C\xFE\xA2\xD4\x98\x36\x0B\xF5\xA6\xCF\x81\x7A\xA5\x28\xDE\xB7\xDA\x26\x8E\xAD\x3F\xA4\xBF\x3A\x2C\xE4\x9D\x78\x50\x0D\x92\x5F\x6A\x9B\xCC\x7E\x54\x62\x46\x8D\xF6\xC2\x13\xD8\x90\xE8\xB8\x39\x2E\x5E\xF7\xC3\x82\xF5\xAF\x5D\x9F\xBE\x80\xD0\x69\x7C\x93\xD5\x6F\xA9\x2D\x25\xCF\xB3\x12\xAC\xC8\x3B\x99\x18\x10\xA7\x7D\x9C\xE8\x6E\x63\x3B\xDB\x7B\xBB\x26\xCD\x09\x78\x59\x6E\xF4\x18\x9A\xEC\x01\xB7\x4F\x83\xA8\x9A\x95\xE6\x65\x6E\xFF\xAA\x7E\xE6\xBC\x21\x08\xCF\x15\xEF\xE6\xE8\xE7\xBA\xD9\x9B\x6F\x4A\xCE\x36\x9F\xEA\xD4\x09\xB0\x29\xD6\x7C\xA4\x31\xAF\xB2\x3F\x2A\x31\x23\xA5\xC6\x30\x94\xA2\x35\xC0\x66\x4E\x74\x37\xBC\x82\xFC\xA6\xCA\x90\xE0\xB0\xD0\xA7\x33\x15\xD8\x04\xF1\x4A\x98\xEC\x41\xF7\xDA\xCD\x7F\x0E\x50\x91\x17\x2F\xF6\x4D\x76\x8D\xD6\xEF\x43\x4D\xB0\xAA\xCC\x54\x4D\x96\xE4\xDF\x04\xD1\x9E\xE3\xB5\x6A\x4C\x1B\x88\x2C\xC1\xB8\x1F\x65\x46\x7F\x51\x5E\x9D\x04\xEA\x8C\x01\x5D\x35\x87\xFA\x73\x74\x0B\xFB\x2E\x41\x67\xB3\x5A\x1D\xDB\x92\x52\xD2\x10\xE9\x33\x56\xD6\x6D\x13\x47\xD7\x9A\x8C\x61\xA1\x37\x7A\x0C\xF8\x59\x8E\x14\x13\xEB\x89\x3C\xA9\xCE\xEE\x27\x61\xB7\x35\xC9\x1C\xE1\xED\xE5\x47\x7A\x3C\xB1\xD2\x9C\x59\xDF\xF2\x55\x3F\x73\x14\x18\x79\xCE\xC7\x73\xBF\x37\xF7\x53\xEA\xCD\xFD\x5F\x5B\xAA\x3D\xDF\x14\x6F\x44\x78\x86\xDB\xAF\xCA\x81\xF3\x68\xB9\x3E\xC4\x24\x38\x2C\x34\xA3\xC2\x5F\x40\x1D\x16\x72\xC3\xE2\xBC\x0C\x25\x3C\x28\x8B\x49\x0D\xFF\x41\x95\xA8\x39\x71\x01\x0C\x08\xDE\xB3\xB4\xD8\x9C\xE4\x56\x64\x90\xC1\xCB\x7B\x61\x84\x32\xD5\x70\xB6\x6C\x48\x74\x5C\xB8\xD0\x42\x57\x51\x50\xA7\xF4\x7E\x53\x65\x41\x1A\xC3\xA4\x17\x3A\x96\x5E\x27\x3B\xCB\x6B\xAB\x1F\xF1\x45\x9D\xAC\xAB\x58\xFA\x4B\x93\x03\xE3\x20\x55\xFA\x30\xAD\xF6\x6D\x76\x88\x91\x76\xCC\xF5\x25\x4C\x02\x4F\xFC\xD7\xE5\xC5\xD7\xCB\x2A\x26\x80\x44\x35\xB5\x8F\xA3\x62\xDE\x49\x5A\xB1\x25\x67\x1B\xBA\x45\x98\x0E\xEA\x5D\xE1\xC0\xFE\xC3\x02\x75\x2F\x81\x12\xF0\x4C\x8D\xA3\x97\x46\x6B\xC6\xF9\xD3\x03\xE7\x5F\x8F\x15\x95\x9C\x92\xBF\xEB\x7A\x6D\x95\xDA\x59\x52\xD4\x2D\x83\xBE\x58\xD3\x21\x74\x49\x29\x69\xE0\x8E\x44\xC8\xC9\x75\x6A\x89\xC2\xF4\x78\x79\x8E\x99\x6B\x3E\x58\x27\xDD\x71\xB9\xBE\xB6\x4F\xE1\xF0\x17\xAD\x88\xC9\x66\xAC\x20\x7D\xB4\x3A\xCE\x63\x18\x4A\xDF\xE5\x82\x31\x1A\x97\x60\x33\x51\x62\x45\x7F\x53\xB1\xE0\x77\x64\xBB\x84\xAE\x6B\xFE\x1C\xA0\x81\xF9\x94\x2B\x08\x70\x58\x68\x48\x8F\x19\xFD\x45\x94\x87\x6C\xDE\x52\xB7\xF8\x7B\xAB\x23\xD3\x73\x72\xE2\x02\x4B\xE3\x57\x8F\x1F\x66\x2A\xAB\x55\xB2\x07\x28\xEB\x2F\x03\xC2\xB5\x86\x9A\x7B\xC5\xD3\xA5\x08\x37\x30\xF2\x87\x28\x23\xB2\xA5\xBF\x02\xBA\x6A\x03\xED\x5C\x82\x16\x8A\x2B\x1C\xCF\xA7\x92\xB4\x79\xF3\xF0\xF2\x07\x4E\xA1\xE2\x69\x65\xCD\xF4\xDA\x06\xD5\xBE\x05\xD1\x1F\x62\x34\xC4\x8A\xFE\xA6\x34\x9D\x53\x2E\xA2\xA0\x55\xF3\x05\x32\xE1\x8A\xA4\x75\xEB\xF6\x0B\x39\xEC\x83\x40\xAA\xEF\x60\x5E\x06\x9F\x71\xBD\x51\x10\x6E\x3E\xF9\x8A\x21\x96\x3D\x06\xDD\xDD\xAE\x05\x3E\x4D\x46\xBD\xE6\x91\xB5\x8D\x54\x71\x05\x5D\xC4\x04\x6F\xD4\x06\x60\xFF\x15\x50\x19\x24\xFB\x98\xD6\x97\xE9\xBD\x89\xCC\x43\x40\x67\x77\x9E\xD9\xB0\xBD\x42\xE8\x07\x88\x8B\x89\xE7\x38\x5B\x19\x79\xDB\xEE\xC8\xA1\x47\x0A\x7C\x7C\xE9\x0F\x42\xF8\xC9\x1E\x84\x00\x00\x00\x00\x09\x83\x86\x80\x32\x48\xED\x2B\x1E\xAC\x70\x11\x6C\x4E\x72\x5A\xFD\xFB\xFF\x0E\x0F\x56\x38\x85\x3D\x1E\xD5\xAE\x36\x27\x39\x2D\x0A\x64\xD9\x0F\x68\x21\xA6\x5C\x9B\xD1\x54\x5B\x24\x3A\x2E\x36\x0C\xB1\x67\x0A\x93\x0F\xE7\x57\xB4\xD2\x96\xEE\x1B\x9E\x91\x9B\x80\x4F\xC5\xC0\x61\xA2\x20\xDC\x5A\x69\x4B\x77\x1C\x16\x1A\x12\xE2\x0A\xBA\x93\xC0\xE5\x2A\xA0\x3C\x43\xE0\x22\x12\x1D\x17\x1B\x0E\x0B\x0D\x09\xF2\xAD\xC7\x8B\x2D\xB9\xA8\xB6\x14\xC8\xA9\x1E\x57\x85\x19\xF1\xAF\x4C\x07\x75\xEE\xBB\xDD\x99\xA3\xFD\x60\x7F\xF7\x9F\x26\x01\x5C\xBC\xF5\x72\x44\xC5\x3B\x66\x5B\x34\x7E\xFB\x8B\x76\x29\x43\xCB\xDC\xC6\x23\xB6\x68\xFC\xED\xB8\x63\xF1\xE4\xD7\xCA\xDC\x31\x42\x10\x85\x63\x13\x40\x22\x97\x84\x20\x11\xC6\x85\x7D\x24\x4A\xD2\xF8\x3D\xBB\xAE\x11\x32\xF9\xC7\x6D\xA1\x29\x1D\x4B\x2F\x9E\xDC\xF3\x30\xB2\x0D\xEC\x52\x86\x77\xD0\xE3\xC1\x2B\x6C\x16\xB3\xA9\x99\xB9\x70\x11\xFA\x48\x94\x47\x22\x64\xE9\xA8\xC4\x8C\xFC\xA0\x1A\x3F\xF0\x56\xD8\x2C\x7D\x22\xEF\x90\x33\x87\xC7\x4E\x49\xD9\xC1\xD1\x38\x8C\xFE\xA2\xCA\x98\x36\x0B\xD4\xA6\xCF\x81\xF5\xA5\x28\xDE\x7A\xDA\x26\x8E\xB7\x3F\xA4\xBF\xAD\x2C\xE4\x9D\x3A\x50\x0D\x92\x78\x6A\x9B\xCC\x5F\x54\x62\x46\x7E\xF6\xC2\x13\x8D\x90\xE8\xB8\xD8\x2E\x5E\xF7\x39\x82\xF5\xAF\xC3\x9F\xBE\x80\x5D\x69\x7C\x93\xD0\x6F\xA9\x2D\xD5\xCF\xB3\x12\x25\xC8\x3B\x99\xAC\x10\xA7\x7D\x18\xE8\x6E\x63\x9C\xDB\x7B\xBB\x3B\xCD\x09\x78\x26\x6E\xF4\x18\x59\xEC\x01\xB7\x9A\x83\xA8\x9A\x4F\xE6\x65\x6E\x95\xAA\x7E\xE6\xFF\x21\x08\xCF\xBC\xEF\xE6\xE8\x15\xBA\xD9\x9B\xE7\x4A\xCE\x36\x6F\xEA\xD4\x09\x9F\x29\xD6\x7C\xB0\x31\xAF\xB2\xA4\x2A\x31\x23\x3F\xC6\x30\x94\xA5\x35\xC0\x66\xA2\x74\x37\xBC\x4E\xFC\xA6\xCA\x82\xE0\xB0\xD0\x90\x33\x15\xD8\xA7\xF1\x4A\x98\x04\x41\xF7\xDA\xEC\x7F\x0E\x50\xCD\x17\x2F\xF6\x91\x76\x8D\xD6\x4D\x43\x4D\xB0\xEF\xCC\x54\x4D\xAA\xE4\xDF\x04\x96\x9E\xE3\xB5\xD1\x4C\x1B\x88\x6A\xC1\xB8\x1F\x2C\x46\x7F\x51\x65\x9D\x04\xEA\x5E\x01\x5D\x35\x8C\xFA\x73\x74\x87\xFB\x2E\x41\x0B\xB3\x5A\x1D\x67\x92\x52\xD2\xDB\xE9\x33\x56\x10\x6D\x13\x47\xD6\x9A\x8C\x61\xD7\x37\x7A\x0C\xA1\x59\x8E\x14\xF8\xEB\x89\x3C\x13\xCE\xEE\x27\xA9\xB7\x35\xC9\x61\xE1\xED\xE5\x1C\x7A\x3C\xB1\x47\x9C\x59\xDF\xD2\x55\x3F\x73\xF2\x18\x79\xCE\x14\x73\xBF\x37\xC7\x53\xEA\xCD\xF7\x5F\x5B\xAA\xFD\xDF\x14\x6F\x3D\x78\x86\xDB\x44\xCA\x81\xF3\xAF\xB9\x3E\xC4\x68\x38\x2C\x34\x24\xC2\x5F\x40\xA3\x16\x72\xC3\x1D\xBC\x0C\x25\xE2\x28\x8B\x49\x3C\xFF\x41\x95\x0D\x39\x71\x01\xA8\x08\xDE\xB3\x0C\xD8\x9C\xE4\xB4\x64\x90\xC1\x56\x7B\x61\x84\xCB\xD5\x70\xB6\x32\x48\x74\x5C\x6C\xD0\x42\x57\xB8"
   set MEMORY_FILE14 binary "\x63\x63\x63\x63\x7C\x7C\x7C\x7C\x77\x77\x77\x77\x7B\x7B\x7B\x7B\xF2\xF2\xF2\xF2\x6B\x6B\x6B\x6B\x6F\x6F\x6F\x6F\xC5\xC5\xC5\xC5\x30\x30\x30\x30\x01\x01\x01\x01\x67\x67\x67\x67\x2B\x2B\x2B\x2B\xFE\xFE\xFE\xFE\xD7\xD7\xD7\xD7\xAB\xAB\xAB\xAB\x76\x76\x76\x76\xCA\xCA\xCA\xCA\x82\x82\x82\x82\xC9\xC9\xC9\xC9\x7D\x7D\x7D\x7D\xFA\xFA\xFA\xFA\x59\x59\x59\x59\x47\x47\x47\x47\xF0\xF0\xF0\xF0\xAD\xAD\xAD\xAD\xD4\xD4\xD4\xD4\xA2\xA2\xA2\xA2\xAF\xAF\xAF\xAF\x9C\x9C\x9C\x9C\xA4\xA4\xA4\xA4\x72\x72\x72\x72\xC0\xC0\xC0\xC0\xB7\xB7\xB7\xB7\xFD\xFD\xFD\xFD\x93\x93\x93\x93\x26\x26\x26\x26\x36\x36\x36\x36\x3F\x3F\x3F\x3F\xF7\xF7\xF7\xF7\xCC\xCC\xCC\xCC\x34\x34\x34\x34\xA5\xA5\xA5\xA5\xE5\xE5\xE5\xE5\xF1\xF1\xF1\xF1\x71\x71\x71\x71\xD8\xD8\xD8\xD8\x31\x31\x31\x31\x15\x15\x15\x15\x04\x04\x04\x04\xC7\xC7\xC7\xC7\x23\x23\x23\x23\xC3\xC3\xC3\xC3\x18\x18\x18\x18\x96\x96\x96\x96\x05\x05\x05\x05\x9A\x9A\x9A\x9A\x07\x07\x07\x07\x12\x12\x12\x12\x80\x80\x80\x80\xE2\xE2\xE2\xE2\xEB\xEB\xEB\xEB\x27\x27\x27\x27\xB2\xB2\xB2\xB2\x75\x75\x75\x75\x09\x09\x09\x09\x83\x83\x83\x83\x2C\x2C\x2C\x2C\x1A\x1A\x1A\x1A\x1B\x1B\x1B\x1B\x6E\x6E\x6E\x6E\x5A\x5A\x5A\x5A\xA0\xA0\xA0\xA0\x52\x52\x52\x52\x3B\x3B\x3B\x3B\xD6\xD6\xD6\xD6\xB3\xB3\xB3\xB3\x29\x29\x29\x29\xE3\xE3\xE3\xE3\x2F\x2F\x2F\x2F\x84\x84\x84\x84\x53\x53\x53\x53\xD1\xD1\xD1\xD1\x00\x00\x00\x00\xED\xED\xED\xED\x20\x20\x20\x20\xFC\xFC\xFC\xFC\xB1\xB1\xB1\xB1\x5B\x5B\x5B\x5B\x6A\x6A\x6A\x6A\xCB\xCB\xCB\xCB\xBE\xBE\xBE\xBE\x39\x39\x39\x39\x4A\x4A\x4A\x4A\x4C\x4C\x4C\x4C\x58\x58\x58\x58\xCF\xCF\xCF\xCF\xD0\xD0\xD0\xD0\xEF\xEF\xEF\xEF\xAA\xAA\xAA\xAA\xFB\xFB\xFB\xFB\x43\x43\x43\x43\x4D\x4D\x4D\x4D\x33\x33\x33\x33\x85\x85\x85\x85\x45\x45\x45\x45\xF9\xF9\xF9\xF9\x02\x02\x02\x02\x7F\x7F\x7F\x7F\x50\x50\x50\x50\x3C\x3C\x3C\x3C\x9F\x9F\x9F\x9F\xA8\xA8\xA8\xA8\x51\x51\x51\x51\xA3\xA3\xA3\xA3\x40\x40\x40\x40\x8F\x8F\x8F\x8F\x92\x92\x92\x92\x9D\x9D\x9D\x9D\x38\x38\x38\x38\xF5\xF5\xF5\xF5\xBC\xBC\xBC\xBC\xB6\xB6\xB6\xB6\xDA\xDA\xDA\xDA\x21\x21\x21\x21\x10\x10\x10\x10\xFF\xFF\xFF\xFF\xF3\xF3\xF3\xF3\xD2\xD2\xD2\xD2\xCD\xCD\xCD\xCD\x0C\x0C\x0C\x0C\x13\x13\x13\x13\xEC\xEC\xEC\xEC\x5F\x5F\x5F\x5F\x97\x97\x97\x97\x44\x44\x44\x44\x17\x17\x17\x17\xC4\xC4\xC4\xC4\xA7\xA7\xA7\xA7\x7E\x7E\x7E\x7E\x3D\x3D\x3D\x3D\x64\x64\x64\x64\x5D\x5D\x5D\x5D\x19\x19\x19\x19\x73\x73\x73\x73\x60\x60\x60\x60\x81\x81\x81\x81\x4F\x4F\x4F\x4F\xDC\xDC\xDC\xDC\x22\x22\x22\x22\x2A\x2A\x2A\x2A\x90\x90\x90\x90\x88\x88\x88\x88\x46\x46\x46\x46\xEE\xEE\xEE\xEE\xB8\xB8\xB8\xB8\x14\x14\x14\x14\xDE\xDE\xDE\xDE\x5E\x5E\x5E\x5E\x0B\x0B\x0B\x0B\xDB\xDB\xDB\xDB\xE0\xE0\xE0\xE0\x32\x32\x32\x32\x3A\x3A\x3A\x3A\x0A\x0A\x0A\x0A\x49\x49\x49\x49\x06\x06\x06\x06\x24\x24\x24\x24\x5C\x5C\x5C\x5C\xC2\xC2\xC2\xC2\xD3\xD3\xD3\xD3\xAC\xAC\xAC\xAC\x62\x62\x62\x62\x91\x91\x91\x91\x95\x95\x95\x95\xE4\xE4\xE4\xE4\x79\x79\x79\x79\xE7\xE7\xE7\xE7\xC8\xC8\xC8\xC8\x37\x37\x37\x37\x6D\x6D\x6D\x6D\x8D\x8D\x8D\x8D\xD5\xD5\xD5\xD5\x4E\x4E\x4E\x4E\xA9\xA9\xA9\xA9\x6C\x6C\x6C\x6C\x56\x56\x56\x56\xF4\xF4\xF4\xF4\xEA\xEA\xEA\xEA\x65\x65\x65\x65\x7A\x7A\x7A\x7A\xAE\xAE\xAE\xAE\x08\x08\x08\x08\xBA\xBA\xBA\xBA\x78\x78\x78\x78\x25\x25\x25\x25\x2E\x2E\x2E\x2E\x1C\x1C\x1C\x1C\xA6\xA6\xA6\xA6\xB4\xB4\xB4\xB4\xC6\xC6\xC6\xC6\xE8\xE8\xE8\xE8\xDD\xDD\xDD\xDD\x74\x74\x74\x74\x1F\x1F\x1F\x1F\x4B\x4B\x4B\x4B\xBD\xBD\xBD\xBD\x8B\x8B\x8B\x8B\x8A\x8A\x8A\x8A\x70\x70\x70\x70\x3E\x3E\x3E\x3E\xB5\xB5\xB5\xB5\x66\x66\x66\x66\x48\x48\x48\x48\x03\x03\x03\x03\xF6\xF6\xF6\xF6\x0E\x0E\x0E\x0E\x61\x61\x61\x61\x35\x35\x35\x35\x57\x57\x57\x57\xB9\xB9\xB9\xB9\x86\x86\x86\x86\xC1\xC1\xC1\xC1\x1D\x1D\x1D\x1D\x9E\x9E\x9E\x9E\xE1\xE1\xE1\xE1\xF8\xF8\xF8\xF8\x98\x98\x98\x98\x11\x11\x11\x11\x69\x69\x69\x69\xD9\xD9\xD9\xD9\x8E\x8E\x8E\x8E\x94\x94\x94\x94\x9B\x9B\x9B\x9B\x1E\x1E\x1E\x1E\x87\x87\x87\x87\xE9\xE9\xE9\xE9\xCE\xCE\xCE\xCE\x55\x55\x55\x55\x28\x28\x28\x28\xDF\xDF\xDF\xDF\x8C\x8C\x8C\x8C\xA1\xA1\xA1\xA1\x89\x89\x89\x89\x0D\x0D\x0D\x0D\xBF\xBF\xBF\xBF\xE6\xE6\xE6\xE6\x42\x42\x42\x42\x68\x68\x68\x68\x41\x41\x41\x41\x99\x99\x99\x99\x2D\x2D\x2D\x2D\x0F\x0F\x0F\x0F\xB0\xB0\xB0\xB0\x54\x54\x54\x54\xBB\xBB\xBB\xBB\x16\x16\x16\x16"
   math a3p_1 * 4
   goto a3p_1 MEMORY_FILE13
   get a3b_1 long MEMORY_FILE13
   math a3p_1 / 4
   math a3p_2 * 4
   goto a3p_2 MEMORY_FILE14
   get a3b_2 long MEMORY_FILE14
   math a3p_2 / 4
   xmath a3v_1 "(a3b_1 + (((a3b_2 >> 0x10) & 0xff) >> 8)) | (a3b_1 + (((a3b_2 >> 0x10) & 0xff) >> 8)) | (a3b_1 + (((a3b_2 >> 0x10) & 0xff) >> 8)) | ((a3b_1 + ((((a3b_2 >> 0x10) & 0xff) & 0xff) << 0x18)) ^ (a3b_1 + ((((a3b_2 >> 8) & 0xff) & 0xff) << 0x10))) | (a3b_1 + (((a3b_2 >> 8) & 0xff) & 0xff) >> 0x10) ^ (a3b_1 + (((a3b_2 & 0xff) & 0xff) << 8)) | ((a3b_1 + (((a3b_2 & 0xff) & 0xff) >> 0x18)) ^ (a3b_1 + (((a3b_2 >> 0x18) & 0xff) & 0xff)))"
endfunction


to explain how this (messy) script works, you have the init_dec function which is supposed to be the "warm-up" function that prepares the whole decryption stuff needed to decode and later on read the header that is present in the beginning of all RPF files used by the game. the expand_aes_key and aes_3 functions are part of the init_dec function because they're part of the decryption algorithm used by the game.

so all i'm asking is if anyone can actually point me in the right direction as to what am i supposed to do to actually decrypt the header of an RPF file.

sample files are in the attachment below.