anchor.diff:      Result := PathToMaps.Count;
     finally
       PathToMaps.Free;
  -    FreeAndNil(Parser);
  +    Parser.Free;
     end;
   end;
   
  
positive.code: 
      if F.Size = 0 then Exit;
  
      //Detect whether mission is encoded so we can support decoded/encoded .DAT files
      //We can't test 1st char, it can be any. Instead see how often common chracters meet
      Num := 0;
      for I := 0 to F.Size - 1 do               //tab, eol, 0..9, space, !
        if PByte(Cardinal(F.Memory)+I)^ in [9,10,13,ord('0')..ord('9'),$20,$21] then
          Inc(Num);
  
      //Usually 30-50% is numerals/spaces, tested on typical KaM maps, take half of that as margin
      if (Num / F.Size < 0.20) then
      for I := 0 to F.Size - 1 do
        PByte(Cardinal(F.Memory)+I)^ := PByte(Cardinal(F.Memory)+I)^ xor 239;
  
negative.code: { TMissionParserPatcher }
  function TMissionParserPatcher.ProcessCommand(CommandType: TKMCommandType; P: array of Integer; TextParam: AnsiString = ''): Boolean;
  begin
    // Do nothing here and make compiler happy
    Result := True;
  end;
  
  // Read mission file as it is, without any changes
  // We don't use TMissionParserCommon.ReadMissionFile, becasue it cuts spaces and does other things
  function TMissionParserPatcher.ReadMissionFileWOChanges(const aFileName: string): AnsiString;
  var
    I, Num: Cardinal;
    F: TMemoryStream;
  begin
    Result := '';
  