Witam, mógłby mi ktoś pomóc odczytać poniższy program, tzn. napisać co się dzieje po kolei w podanym kodzie...

program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  Math;

var
  licznikpetli,liczba,liczbamniej,modul,i,j,pmniejint,pint,mersmniejint,mersint:integer;
  niepierwsza:byte;
  licznik,p,pmniej,mers,mersmniej,mers1:real;
begin
 

writeln ('podaj a dla przedzialu <1, a> w ktorym nastapi szukanie liczb Mersennea:');
readln (mers);
mers1:=mers;
licznik:=mers;
p:=2;
 

repeat
  begin
      niepierwsza:=0;
      pmniej:=p-1;
      pmniejint:=round(pmniej);
      pint:=round(p);
        for i:=2 to pmniejint do
          begin
            modul:=pint mod i;
            if modul=0 then niepierwsza:=1;
          end;
      if niepierwsza=0 then
        begin
          niepierwsza:=0;
          mers:=power(2,p)-1;
          mersmniej:=mers-1;
          mersmniejint:=round(mersmniej);
            for i:=2 to mersmniejint do
              begin
                mersint:=round(mers);
                modul:=mersint mod i;
                if modul=0 then niepierwsza:=1;
              end;
          if niepierwsza=0 then
              begin
                if mers<licznik then
                  writeln (mers:10:0);
              end;
        end;
    p:=p+1;
  end;
  licznikpetli:=licznikpetli+1;
  {writeln (licznikpetli, '-licz');}
until mers>licznik;
writeln ('liczenie zakonczone, wcisnij enter...');
readln;


end.

{2^p-1 ma byc pierwsza         mers1:=power(2, p)-1}