changeset 0:bf92b6bd8b20 draft

Uploaded
author fubar
date Tue, 24 Nov 2020 21:59:01 +0000
parents
children c5d770f2afea
files pyrevpos/.shed.yml pyrevpos/output pyrevpos/pyrevpos.xml pyrevpos/test-data/input1_sample pyrevpos/test-data/output_sample pyrevpos/test-data/test1_log.txt pyrevpos/test1_log_outfiletxt
diffstat 7 files changed, 2278 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/.shed.yml	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,4 @@
+description: pyrevpos
+name: pyrevpos
+owner: fubar
+type: unrestricted
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/output	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,741 @@
+nohtyp vne/nib/rsu/!#
+yp.yrotcaFlooTgr #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ees #
+#
+2102 yaM )moc pots liamg ta surazal pots ssor( surazal ssor thgirypoc #
+#
+devreser sthgir lla #
+LPGL eht rednu desneciL #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ta emoclew sexif gub dna tnemevorpmi rof snoitseggus #
+#
+.sraey 5 retfa elkniw nav pir ekil leef I dna nuf saw CCB :0202 yluJ #
+ot dediceD #
+esac tselpmis rof enod - skrow ti os yrotcafloot eht xiF .1 #
+skrow noitcnuf yrotcafloot eht os omenalp xiF .2 #
+enod - esnes sekam taht erehw snoitcnuf lmxyxalag gnisu stib etirweR .3 #
+#
+tpircs emas siht esu loot wen eht gnikam gnidulcni snoitacilpmoc dlo eht lla devomer #
+lmxyxalag/anelyxeh/moc.buhtig//:sptth lmx loot eht setareneg won lmxyxalag #
+stuptuo yrartibra morf noitaerc elif LMTH citamotua rof troppus oN #
+kooh noitucexe tsop a sa edoc taht nur ot noitpo dda :ODOT #
+eno ylno yltnerruc - sretemarap tupni yrotsih lanoitidda dda :ODOT #
+
+
+esrapgra tropmi
+gniggol tropmi
+so tropmi
+er tropmi
+lituhs tropmi
+ssecorpbus tropmi
+sys tropmi
+elifrat tropmi
+elifpmet tropmi
+emit tropmi
+
+txg sa loot.lmxyxalag tropmi
+ptxg sa sretemarap.loot.lmxyxalag tropmi
+
+lmxl tropmi
+
+"0202 yluJ 1.2V" = noisrevym
+eurT = esobrev
+eurT = gubed
+"yrotcafloot/2rabuf/moc.buhtig//:sptth" = LRUyrotcaFloot
+"~~~" = miledruo
+
+lebal_tupni$~~~stamrof_tupni$~~~LC$~~~selif_tupni$"=selif_tupni-- #
+"pleh_tupni$~~~ #
+0 = SOPHTAPI
+1 = SOPLCI
+2 = SOPTMFI
+3 = SOPBALI
+4 = SOPLEHI
+5 = SOPLCOI
+
+LC.bato$~~~tamrof_yrotsih.bato$~~~eman_yrotsih.bato$" selif_tuptuo-- #
+0 = SOPEMANO
+1 = SOPTMFO
+2 = SOPLCO
+3 = SOPLCOO
+
+~~~eulav_marap.i$~~~eman_marap.i$"=sretemarap_lanoitidda-- #
+"edirrevoLC_marap.$i~~~LC.i$~~~epyt_marap.i$~~~pleh_marap.i$~~~lebal_marap.i$ #
+0 = SOPEMANA
+1 = SOPLAVA
+2 = SOPBALA
+3 = SOPPLEHA
+4 = SOPEPYTA
+5 = SOPLCA
+6 = SOPREVOA
+7 = SOPLCOA
+
+
+)__noisrev__.lmxl(nel = oof
+!eman ym yaS .8ekalf ,uoy guf #
+
+:)(wonemit fed
+gnirts a sa emit tnerruc nruter"""    
+"""    
+)))(emit.emit(emitlacol.emit ,"S%:M%:H% Y%/m%/d%"(emitfrts.emit nruter    
+
+
+:)s(ciremun_non_etouq fed
+sciremun-non rof gnirts detouqerp a nruter"""    
+?gnissap retemarap tpircsR dna lrep rof lufesu    
+"""    
+:yrt    
+)s(taolf = _        
+s nruter        
+:rorrEeulaV tpecxe    
+s % '"s%"' nruter        
+
+
+}"$\"r :"$" ,";tl&" :"<" ,";tg&" :">" ,";pma&" :"&"{ = elbat_epacse_lmth
+
+
+:)txet(epacse_lmth fed
+""".txet nihtiw seititne ecudorP"""    
+)txet ni c rof )c ,c(teg.elbat_epacse_lmth(nioj."" nruter    
+
+
+:)txet(epacsenu_lmth fed
+"""ecalper esu os stegrat retcarahc elpitluM .txet nihtiw seititne treveR"""    
+)"&" ,";pma&"(ecalper.txet = t    
+)">" ,";tg&"(ecalper.t = t    
+)"<" ,";tl&"(ecalper.t = t    
+)"$" ,"$\\"(ecalper.t = t    
+t nruter    
+
+
+:)txet_snoitatic(snoitatic_esrap fed
+"""    
+"""    
+])(pirts.c fi )"**YRTNE**"(tilps.txet_snoitatic ni c rof c[ = snoitatic    
+][ = selput_noitatic    
+:snoitatic ni noitatic rof    
+:)"iod"(htiwstrats.noitatic fi        
+)))(pirts.]: )"iod"(nel[noitatic ,"iod"((dneppa.selput_noitatic            
+:esle        
+(dneppa.selput_noitatic            
+))(pirts.]: )"xetbib"(nel[noitatic ,"xetbib"(                
+)            
+selput_noitatic nruter    
+
+
+:rennuRtpircS ssalc
+tpircs yrartibra na rof repparW"""    
+lmxyxalag sesu    
+
+"""    
+
+:)enoN=sgra ,fles(__tini__ fed    
+"""        
+ereh loot eht gninnur rof lc enil dnammoc eraperp        
+noitareneg loot lmxyxalag rof dedeen stnemele eraperp dna        
+"""        
+
+]selif_tupni.sgra ni x rof )miledruo(tilps.x[ = selifni.fles        
+]selif_tuptuo.sgra ni x rof )miledruo(tilps.x[ = seliftuo.fles        
+]sretemarap_lanoitidda.sgra ni x rof )miledruo(tilps.x[ = rapdda.fles        
+sgra = sgra.fles        
+)(rappunaelc.fles        
+enoN = tceriderlctsal.fles        
+enoN = tceriderlcxtsal.fles        
+][ = lc.fles        
+][ = lclmx.fles        
+"lanoitisop" == ssapmarap.sgra.fles = lanoitisop_si.fles        
+dneppa.lc.fles = LCa        
+[ ni ssapmarap.sgra tressa        
+,"0"            
+,"esrapgra"            
+,"lanoitisop"            
+'"esrapgra" ro "lanoitisop","0" eb tsum ssapmarap.sgra ni gnissap retemaraP' ,]        
+)eman_loot.sgra ,"" ,"+]_9-0Z-Az-a^["(bus.er = eman_loot.fles        
+eman_loot.fles = di_loot.fles        
+:eman_reterpretni.sgra.fles fi        
+"eMnur$" = exe            
+:esle        
+egakcap_exe.sgra.fles = exe            
+( tressa        
+enoN ton si exe            
+"dliub tonnac os nur ot gnihton - ni dessap elbatucexe ro retepretni oN" ,)        
+(looT.txg = loot.fles        
+,eman_loot.sgra.fles            
+,di_loot.fles            
+,noisrev_loot.sgra.fles            
+,csed_loot.sgra.fles            
+,exe            
+)        
+)(stupnI.ptxg = stupnit.fles        
+)(stuptuO.ptxg = stuptuot.fles        
+][ = maraptset.fles        
+( fi        
+"metsys" == edomnur.sgra.fles ro "elbatucexE" == edomnur.sgra.fles            
+deen on - yranib #  :)        
+nur tsuj lliw LC elttil siht #  )egakcap_exe.sgra.fles(LCa            
+:esle        
+)(tpircSperp.fles            
+eman_loot.fles % "txt.gol_rorre_s%" = gole.fles        
+eman_loot.fles % "txt.gol_rennur_s%" = golt.fles        
+
+:"0" == ssapmarap.sgra.fles fi        
+)(elpmislc.fles            
+:esle        
+][ = xiffuslc            
+][ = xiffuslcx            
+:)selifni.fles(etaremune ni p ,i rof            
+:"NIDTS" == ]SOPLCOI[p fi                
+[ = emdneppa                    
+,]SOPLCOI[p                        
+,]SOPLCI[p                        
+,]SOPHTAPI[p                        
+,]SOPHTAPI[p % "s% <"                        
+]                    
+[ = emdneppax                    
+,]SOPLCOI[p                        
+,]SOPLCI[p                        
+,]SOPHTAPI[p                        
+,]SOPLCI[p % "s%$ <"                        
+]                    
+:esle                
+]"" ,]SOPHTAPI[p ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppa                    
+]"" ,]SOPLCI[p % "s%$" ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppax                    
+)emdneppa(dneppa.xiffuslc                
+)emdneppax(dneppa.xiffuslcx                
+))emdneppa,i( % 's%=emdneppa ,d%=i elifni##'(tnirp #                
+:)seliftuo.fles(etaremune ni p ,i rof            
+:"TUODTS" == ]SOPLCOO[p fi                
+]]SOPEMANO[p ,">"[ = tceriderlctsal.fles                    
+]]SOPLCO[p % "s%$" ,">"[ = tceriderlcxtsal.fles                    
+:esle                
+)]"" ,]SOPEMANO[p ,]SOPLCO[p ,]SOPLCOO[p[(dneppa.xiffuslc                    
+(dneppa.xiffuslcx                    
+]"" ,]SOPEMANO[p % "s%$" ,]SOPLCO[p ,]SOPLCOO[p[                        
+)                    
+:rapdda.fles ni p rof            
+(dneppa.xiffuslc                
+]]SOPREVOA[p ,]SOPLAVA[p ,]SOPLCA[p ,]SOPLCOA[p[                    
+)                
+(dneppa.xiffuslcx                
+]]SOPREVOA[p ,]SOPEMANA[p % '"s%$"' ,]SOPLCA[p ,]SOPLCOA[p[                    
+)                
+)(tros.xiffuslc            
+)(tros.xiffuslcx            
+xiffuslcx = xiffuslcx.fles            
+xiffuslc = xiffuslc.fles            
+:"lanoitisop" == ssapmarap.sgra.fles fi            
+)(lanoitisoplc.fles                
+:esle            
+)(esrapgralc.fles                
+
+:)fles(tpircSperp fed    
+dneppa.lc.fles = LCa        
+)(senildaer.)"r" ,htap_tpircs.sgra.fles(nepo = xr        
+]xr ni x rof )(pirtsr.x[ = xr        
+]"" > )(pirts.x fi xr ni x rof )(pirts.x[ = kcehcxr        
+"nur tonnaC .ytpme si tpircs deilppuS" ,0 > )kcehcxr(nel tressa        
+)xr(nioj."n\" = tpircs.fles        
+(pmetskm.elifpmet = elifs.fles ,eldnahf        
+)eman_reterpretni.sgra.fles( % "s%_"=xiffus ,eman_loot.fles=xiferp            
+)        
+)"w" ,elifs.fles(nepo = tpircst        
+)tpircs.fles(etirw.tpircst        
+)(esolc.tpircst        
+(nioj."n\" % "s%  " = tpircSdetnedni.fles        
+]xr ni x rof )x(epacse_lmth % "s% "[            
+)        
+(nioj."n\" % "s%" = tpircSdepacse.fles        
+]xr ni x rof )x(epacse_lmth % "s% "[            
+)        
+)eman_reterpretni.sgra.fles ,eman_loot.fles( % "s%.s%" = tra        
+)"bw" ,tra(nepo = tcafitra        
+))"8ftu" ,tpircs.fles(setyb(etirw.tcafitra        
+)(esolc.tcafitra        
+)eman_reterpretni.sgra.fles(LCa        
+)elifs.fles(LCa        
+
+:)fles(rappunaelc fed    
+"""lanidro ciremun rieht yb detacilpmoc era sretemarap lanoitisop """        
+:)selifni.fles(etaremune ni p ,i rof        
+:"lanoitisop" == ssapmarap.sgra.fles fi            
+( ,)(tigidsi.]SOPLCI[p tressa                
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"                    
+)]SOPBALI[p ,]SOPLCI[p( %                    
+)                
+)]SOPLCI[p(dneppa.p            
+:"0" == ssapmarap.sgra.fles ro )(tigidsi.]SOPLCI[p fi            
+)1 + i( % "d%tupni" = lcs                
+lcs = ]SOPLCI[p                
+p = ]i[selifni.fles            
+(etaremune ni p ,i rof        
+seliftuo.fles            
+snoisnetxe gnisu rehtag yllacigamotua ot gniyrt #  :)        
+:"TUODTS" =! ]SOPLCO[p dna "lanoitisop" == ssapmarap.sgra.fles fi            
+( ,)(tigidsi.]SOPLCO[p tressa                
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"                    
+)]SOPEMANO[p ,]SOPLCO[p( %                    
+)                
+)]SOPLCO[p(dneppa.p            
+:"TUODTS" == ]SOPLCO[p ro )(tigidsi.]SOPLCO[p fi            
+]SOPEMANO[p = lcs                
+lcs = ]SOPLCO[p                
+p = ]i[seliftuo.fles            
+:)rapdda.fles(etaremune ni p ,i rof        
+:"lanoitisop" == ssapmarap.sgra.fles fi            
+( ,)(tigidsi.]SOPLCA[p tressa                
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"                    
+)]SOPEMANA[p ,]SOPLCA[p( %                    
+)                
+)]SOPLCA[p(dneppa.p            
+:)(tigidsi.]SOPLCA[p fi            
+]SOPLCA[p % "s%tupni" = lcs                
+lcs = ]SOPLCA[p                
+p = ]i[rapdda.fles            
+
+:)fles(elpmislc fed    
+o/i rof > dna < sesu - sretemarap on """        
+"""        
+dneppa.lc.fles = LCa        
+)"<"(LCa        
+)]SOPHTAPI[]0[selifni.fles(LCa        
+)">"(LCa        
+)]SOPLCO[]0[seliftuo.fles(LCa        
+dneppa.lclmx.fles = LCXa        
+)"<"(LCXa        
+)]SOPLCI[]0[selifni.fles % "s%$"(LCXa        
+)">"(LCXa        
+)]SOPEMANO[]0[seliftuo.fles % "s%$"(LCXa        
+
+:)fles(lanoitisoplc fed    
+smarap neht redro ni stupni #        
+dneppa.lc.fles = LCa        
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof        
+:v ni " " fi            
+)v % "s%"(LCa                
+:esle            
+)v(LCa                
+dneppa.lclmx.fles = LCXa        
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof        
+)v(LCXa            
+:tceriderlcxtsal.fles fi        
+)]0[tceriderlcxtsal.fles(LCXa            
+)]1[tceriderlcxtsal.fles(LCXa            
+
+:)fles(esrapgralc fed    
+elyts esrapgra """        
+"""        
+dneppa.lc.fles = LCa        
+dneppa.lclmx.fles = LCXa        
+mrof deman esrapgra ni smarap neht stupni #        
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof        
+:"" > edirrevok fi            
+edirrevok = k                
+:1 == ))(pirts.k(nel file            
+k % "s%-" = k                
+:esle            
+k % "s%--" = k                
+)k(LCXa            
+)v(LCXa            
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof        
+:"" > edirrevok fi            
+edirrevok = k                
+:1 == ))(pirts.k(nel file            
+k % "s%-" = k                
+:esle            
+k % "s%--" = k                
+)k(LCa            
+)v(LCa            
+
+:)emanwen ,fles(hsadNteg fed    
+:lanoitisop_si.fles fi        
+0 = hsadn            
+:esle        
+2 = hsadn            
+:2 < )emanwen(nel fi            
+1 = hsadn                
+hsadn nruter        
+
+:)fles(marapLMXod fed    
+"""...siht od em edam 8ekalf"""        
+:seliftuo.fles ni p rof        
+p = lcdlo ,lcwen ,tmfwen ,emanwen            
+)lcwen(hsadNteg.fles = hsadn            
+)hsadn=sehsad_mun ,tmfwen=tamrof ,lcwen(ataDtuptuO.ptxg = mrapa            
+lanoitisop_si.fles = lanoitisop.mrapa            
+:lanoitisop_si.fles fi            
+:"TUODTS" == lcdlo fi                
+9999999 = lanoitisop.mrapa                    
+lcwen % "s%$ >" = edirrevo_enil_dnammoc.mrapa                    
+:esle                
+)lcdlo(tni = lanoitisop.mrapa                    
+lcwen % "s%$" = edirrevo_enil_dnammoc.mrapa                    
+)mrapa(dneppa.stuptuot.fles            
+(tuptuOtseT.ptxg = pt            
+tmfwen=tamrof ,lcwen % "elpmas_s%"=eulav ,lcwen=eman                
+)            
+)pt(dneppa.maraptset.fles            
+:selifni.fles ni p rof        
+]SOPLCI[p = emanwen            
+]SOPTMFI[p = tmfwen            
+)emanwen(hsadNteg.fles = hsadn            
+:0 > )]SOPBALI[p(nel ton fi            
+]SOPLCI[p = bala                
+:esle            
+]SOPBALI[p = bala                
+(maraPataD.ptxg = tupnina            
+,emanwen                
+,eslaF=lanoitpo                
+,bala=lebal                
+,]SOPLEHI[p=pleh                
+,tmfwen=tamrof                
+,eslaF=elpitlum                
+,hsadn=sehsad_mun                
+)            
+lanoitisop_si.fles = lanoitisop.tupnina            
+)tupnina(dneppa.stupnit.fles            
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = mrapt            
+)mrapt(dneppa.maraptset.fles            
+:rapdda.fles ni p rof        
+p = lcdlo ,edirrevo ,lcwen ,epytwen ,plehwen ,lebalwen ,lavwen ,emanwen            
+:0 > )lebalwen(nel ton fi            
+emanwen = lebalwen                
+)emanwen(hsadNteg.fles = hsadn            
+:"txet" == epytwen fi            
+(maraPtxeT.ptxg = mrapa                
+,emanwen                    
+,lebalwen=lebal                    
+,plehwen=pleh                    
+,lavwen=eulav                    
+,hsadn=sehsad_mun                    
+)                
+:"regetni" == epytwen file            
+(maraPregetnI.ptxg = mrapa                
+,emanwen                    
+,emanwen=lebal                    
+,plehwen=pleh                    
+,lavwen=eulav                    
+,hsadn=sehsad_mun                    
+)                
+:"taolf" == epytwen file            
+(maraPtaolF.ptxg = mrapa                
+,emanwen                    
+,emanwen=lebal                    
+,plehwen=pleh                    
+,lavwen=eulav                    
+,hsadn=sehsad_mun                    
+)                
+:esle            
+(rorrEeulaV esiar                
+\rof "s%" epyt retemarap desingocernU'                    
+'LMXekam ni s% retemarap lanoitidda                 
+)emanwen ,epytwen( %                    
+)                
+lanoitisop_si.fles = lanoitisop.mrapa            
+:lanoitisop_si.fles fi            
+)lcdlo(tni = lanoitisop.tupnina                
+)mrapa(dneppa.stupnit.fles            
+)lavwen=eulav ,emanwen(maraPtseT.ptxg = mrapt.fles            
+)mrapt(dneppa.maraptset.fles            
+
+:)fles(marapLMXoNod fed    
+]SOPBALI[]0[selifni.fles = bala        
+:0 == )bala(nel fi        
+]SOPLCI[]0[selifni.fles = bala            
+( = s1xam        
+"s% - deilppus selif tupni eno naht erom - 0 si ssapmarap fi tupni eno mumixaM"            
+)selifni.fles(rts %            
+)        
+s1xam ,1 == )selifni.fles(nel tressa        
+]SOPLCI[]0[selifni.fles = emanwen        
+(maraPataD.ptxg = tupnina        
+,emanwen            
+,eslaF=lanoitpo            
+,bala=lebal            
+,]SOPLEHI[]0[selifni.fles=pleh            
+,]SOPTMFI[]0[selifni.fles=tamrof            
+,eslaF=elpitlum            
+,0=sehsad_mun            
+)        
+emanwen % "s%$ <" = edirrevo_enil_dnammoc.tupnina        
+lanoitisop_si.fles = lanoitisop.tupnina        
+)tupnina(dneppa.stupnit.fles        
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = pt        
+)pt(dneppa.maraptset.fles        
+]SOPLCO[]0[seliftuo.fles = emanwen        
+]SOPTMFO[]0[seliftuo.fles = tmfwen        
+)0=sehsad_mun ,tmfwen=tamrof ,emanwen(ataDtuptuO.ptxg = tuona        
+emanwen % "s%$ >" = edirrevo_enil_dnammoc.tuona        
+lanoitisop_si.fles = lanoitisop.tuona        
+)tuona(dneppa.stuptuot.fles        
+(tuptuOtseT.ptxg = pt        
+tmfwen=tamrof ,emanwen % "elpmas_s%"=eulav ,emanwen=eman            
+)        
+)pt(dneppa.maraptset.fles        
+
+:)fles(LMXekam fed    
+"""        
+tpircs wen eht rof repparw loot lmx yxalaG a etaerC        
+lmthyxalag sesU        
+...redro tcerroc otni enil dnammoc eht teg ot woH .mmmH        
+"""        
+lclmx.fles = edirrevo_enil_dnammoc.loot.fles        
+:eman_reterpretni.sgra.fles fi        
+eman_reterpretni.sgra.fles = reterpretni.loot.fles            
+:txet_pleh.sgra.fles fi        
+)(senildaer.)"r" ,txet_pleh.sgra.fles(nepo = txetpleh            
+]txetpleh ni x rof )x(epacse_lmth[ = txetpleh            
+)]txetpleh ni x rof x[(nioj."" = pleh.loot.fles            
+:esle        
+( = pleh.loot.fles            
+\ pleh rof )s%( rohtua loot eht ksa esaelP"                
+"n\noitareneg loot ta deilppus saw enon sa              
+)liame_resu.sgra.fles( %                
+)            
+tnaw ton od #  enoN = dnammoc_noisrev.loot.fles        
+)(stnemeriuqeR.ptxg = stnemeriuqer        
+
+:eman_reterpretni.sgra.fles fi        
+:"nohtyp" == eman_reterpretni.sgra.fles fi            
+(dneppa.stnemeriuqer                
+(tnemeriuqeR.ptxg                    
+noisrev_reterpretni.sgra.fles ,"nohtyp" ,"egakcap"                        
+)                    
+)                
+:]"hs" ,"hsab"[ ni ton eman_reterpretni.sgra.fles file            
+(dneppa.stnemeriuqer                
+(tnemeriuqeR.ptxg                    
+,"egakcap"                        
+,eman_reterpretni.sgra.fles                        
+,noisrev_reterpretni.sgra.fles                        
+)                    
+)                
+:esle        
+:"metsys" =! ssapmarap.sgra.fles dna egakcap_exe.sgra.fles fi            
+(dneppa.stnemeriuqer                
+(tnemeriuqeR.ptxg                    
+,"egakcap"                        
+,egakcap_exe.sgra.fles                        
+,noisrev_egakcap_exe.sgra.fles                        
+)                    
+)                
+stnemeriuqer = stnemeriuqer.loot.fles        
+:"0" == ssapmarap.sgra.fles fi        
+)(marapLMXoNod.fles            
+:esle        
+)(marapLMXod.fles            
+stuptuot.fles = stuptuo.loot.fles        
+stupnit.fles = stupni.loot.fles        
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi        
+)(selifgifnoC.ptxg = selifgifnoc            
+))tpircs.fles=txet ,"eMnur"=eman(elifgifnoC.ptxg(dneppa.selifgifnoc            
+selifgifnoc = selifgifnoc.loot.fles            
+)(stseT.ptxg = stset        
+)(tseT.ptxg = a_tset        
+:maraptset.fles ni pt rof        
+)pt(dneppa.a_tset            
+)a_tset(dneppa.stset        
+stset = stset.loot.fles        
+(tnemmoc_dda.loot.fles        
+".yrotcaF looT yxalaG eht gnisu s% ta s% yb detaerC"            
+))(wonemit ,liame_resu.sgra.fles( %            
+)        
+))LRUyrotcaFloot( % "s% :ta tig ni ecruoS"(tnemmoc_dda.loot.fles        
+(tnemmoc_dda.loot.fles        
+"375stb/scitamrofnioib/3901.01 :iod stpircs morf sloot elbasu-er gnitaerC :etiC"            
+)        
+)(tropxe.loot.fles = lmxe        
+)"w" ,eman_loot.fles % 'lmx.s%'(nepo = fx        
+)lmxe(etirw.fx        
+)"n\"(etirw.fx        
+)(esolc.fx        
+llabrat eht rof ydaer #        
+
+:)fles(ratlooTekam fed    
+"""        
+ge htiw llabrat zg a si loot a        
+... oof.ni_1tset/atad-tset/emanloot/ yp.loot/emanloot/ lmx.loot/emanloot/        
+tsum os ereh degnum era stuptuo dna stupni tset rof seman ETON        
+lc detareneg eht no desu seman tuptuo dna tupni lautca ot dnopserroc        
+"""        
+)(nur.fles = lavter        
+:lavter fi        
+(etirw.rredts.sys            
+"yrter dna xif esaelP .tey dliub tonnaC .deliaf nuR ##"                
+)            
+)1(tixe.sys            
+"tuoft" = ridt        
+:)ridt(stsixe.htap.so ton fi        
+)ridt(ridkm.so            
+)(LMXekam.fles        
+)"atad-tset" ,ridt(nioj.htap.so = ridtset        
+:)ridtset(stsixe.htap.so ton fi        
+yrotcerid stset ekam #  )ridtset(ridkm.so            
+:selifni.fles ni p rof        
+]SOPHTAPI[p = htp            
+)]SOPLCI[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed            
+)tsed ,htp(elifypoc.lituhs            
+:seliftuo.fles ni p rof        
+]SOPLCO[p = htp            
+:"0" == ssapmarap.sgra.fles ro "TUODTS" == ]SOPLCOO[p fi            
+]SOPEMANO[p = htp                
+)]SOPEMANO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+)]SOPEMANO[p ,ridt(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+:esle            
+]SOPLCO[p = htp                
+)]SOPLCO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+)]SOPLCO[p ,ridt(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+
+:0 > ezis_ts.)golt.fles(tats.so dna )golt.fles(stsixe.htap.so fi        
+))"txteliftuo_gol_1tset" ,ridtset(nioj.htap.so ,golt.fles(elifypoc.lituhs            
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi        
+))elifs.fles( % "s%" ,ridt(nioj.htap.so = emants            
+:)emants(stsixe.htap.so ton fi            
+)emants ,elifs.fles(elifypoc.lituhs                
+eman_loot.fles % 'lmx.s%' = laerx        
+)laerx,ridt(nioj.htap.so = tuox        
+)tuox ,laerx(elifypoc.lituhs        
+eman_loot.fles % "zgt.s%_yrotcafloot" = htaprat        
+)"zg:w" ,htaprat(nepo.elifrat = ft        
+)eman_loot.fles=emancra ,ridt=eman(dda.ft        
+)(esolc.ft        
+)loot_wen.sgra.fles ,htaprat(elifypoc.lituhs        
+)"txt.lmx_loot",laerx(elifypoc.lituhs        
+"ridpmet_troper_nur_FT" = ridper        
+:)ridper(stsixe.htap.so ton fi        
+)ridper(ridkm.so            
+]seliftuo.fles ni x rof ]SOPLCO[x[ = semantuoper        
+:stuo sa )'.'(ridnacs.so htiw        
+:stuo ni yrtne rof            
+:)(elif_si.yrtne ton ro )'zgt.'(htiwsdne.eman.yrtne fi                
+eunitnoc                    
+:semantuoper ni eman.yrtne fi                
+))eman.yrtne,ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs                    
+:eman_loot.fles % "lmx.s%" == eman.yrtne file                
+))"lmx_loot_wen",ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs                    
+lavter nruter        
+
+:)fles(nur fed    
+"""        
+htiaf eht htiw gnipeek m'I os daer rredts evisnefed siht evah sloot maetved emoS        
+.etadpu ot eerf leeF        
+"""        
+)lc.fles(rts % "s%=lc nur" = s        
+
+)s(gubed.gniggol        
+)lc.fles(nioj." " = lcs        
+enoN = rre        
+:"0" =! ssapmarap.sgra.fles fi        
+)"bw" ,gole.fles(nepo = ets            
+:tceriderlctsal.fles fi            
+(nepo = ots                
+"bw" ,]1[tceriderlctsal.fles                    
+elif tuptuo na fo eman si #  )                
+:esle            
+)"bw" ,golt.fles(nepo = ots                
+(etirw.ots                
+(setyb                    
+"n\s% = enil dnammoc detareneg yrotcaflooT gnitucexE ##"                        
+,lcs %                        
+,"8ftu"                        
+)                    
+)                
+)(hsulf.ots            
+)ets=rredts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p            
+)(esolc.ots            
+)(esolc.ets            
+)"br" ,gole.fles(nepo = rredts_pmt            
+"" = rre            
+6758401 = ezisffub            
+:yrt            
+:eurT elihw                
+))ezisffub(daer.rredts_pmt(rts =+ rre                    
+:0 =! ezisffub % )rre(nel ro rre ton fi                    
+kaerb                        
+:rorrEwolfrevO tpecxe            
+ssap                
+)(esolc.rredts_pmt            
+edocnruter.p = lavter            
+tuodts ot etirw dna nidts ekat taht stpircs elpmis fo esac laiceps dnuora krow #  :esle        
+)"br" ,]SOPHTAPI[]0[selifni.fles(nepo = its            
+)"bw" ,]SOPEMANO[]0[seliftuo.fles(nepo = ots            
+tcerider ot llehs esu tsum #            
+)its=nidts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p            
+edocnruter.p = lavter            
+)(esolc.ots            
+)(esolc.its            
+:0 == ezis_ts.)golt.fles(tats.so dna )golt.fles(elifsi.htap.so fi        
+)golt.fles(knilnu.so            
+:0 == ezis_ts.)gole.fles(tats.so dna )gole.fles(elifsi.htap.so fi        
+)gole.fles(knilnu.so            
+melborp #  :rre dna 0 =! edocnruter.p fi        
+)rre(etirw.rredts.sys            
+)"enod nur"(gubed.gniggol        
+lavter nruter        
+
+
+:)(niam fed
+"""    
+:sa lmx.loot esoprup laiceps a yb dellac eb ot stcepxe tI .repparw yxalaG a si sihT    
+"tpircsR" reterpretni-- "oof" eman_loot-- "htaPtpircs$" htap_tpircs-- yp.repparWtpircSesaBgr>"nohtyp"=reterpretni dnammoc<    
+>dnammoc/<    
+"""    
+)(resraPtnemugrA.esrapgra = resrap    
+tnemugra_dda.resrap = a    
+)""=tluafed ,"htap_tpircs--"(a    
+)enoN=tluafed ,"eman_loot--"(a    
+)enoN=tluafed ,"eman_reterpretni--"(a    
+)enoN=tluafed ,"noisrev_reterpretni--"(a    
+)enoN=tluafed ,"egakcap_exe--"(a    
+)enoN=tluafed ,"noisrev_egakcap_exe--"(a    
+)"dneppa"=noitca ,][=tluafed ,"selif_tupni--"(a    
+)"dneppa"=noitca ,][=tluafed ,"selif_tuptuo--"(a    
+)"nwonknU"=tluafed ,"liame_resu--"(a    
+)enoN=tluafed ,"resu_dab--"(a    
+)enoN=tluafed ,"looT_ekam--"(a    
+)enoN=tluafed ,"txet_pleh--"(a    
+)enoN=tluafed ,"csed_loot--"(a    
+)enoN=tluafed ,"noisrev_loot--"(a    
+)enoN=tluafed ,"snoitatic--"(a    
+)][=tluafed ,"dneppa"=noitca ,"sretemarap_lanoitidda--"(a    
+)eslaF=tluafed ,"eurt_erots"=noitca ,"sretemarap_lanoitidda_tide--"(a    
+)"lanoitisop"=tluafed ,"ssapmarap--"(a    
+)"tuoft/."=tluafed ,"tuoft--"(a    
+)"loot_wen"=tluafed ,"loot_wen--"(a    
+)enoN=tluafed ,"edomnur--"(a    
+)(sgra_esrap.resrap = sgra    
+( ,resu_dab.sgra ton tressa    
+'elif noitarugifnoc yxalaG eht ni "sresu_nimda" ot s% sdda nimda yxalaG litnu loot siht esu ot dezirohtua TON si s% :DESIROHTUANU'        
+)resu_dab.sgra ,resu_dab.sgra( %        
+)    
+( tressa    
+eman_loot.sgra        
+"qeSED=eman_loot-- ge - eman loot a stcepxe yrotcaF looT ##" ,)    
+( tressa    
+egakcap_exe.sgra ro eman_reterpretni.sgra        
+"egakcap elbatucexe na ro reterpretni na stcepxe repparw yrotcaF looT ##" ,)    
+( ro egakcap_exe.sgra tressa    
+)htap_tpircs.sgra(elifsi.htap.so dna 0 > )htap_tpircs.sgra(nel        
+"elbatucexe on fi R.oof=htap_tpircs-- ge - htap tpircs a stcepxe repparw yrotcaF looT ##" ,)    
+[ = selif_tupni.sgra    
+selif_tupni.sgra ni x rof )"" ,"'"(ecalper.)"" ,'"'(ecalper.x        
+]    
+smarap LC ni secaps htiw laed ot deen ew setouq evomer #    
+:)sretemarap_lanoitidda.sgra(etaremune ni x ,i rof    
+(ecalper.]i[sretemarap_lanoitidda.sgra = ]i[sretemarap_lanoitidda.sgra        
+"" ,'"'            
+)        
+)sgra(rennuRtpircS = r    
+:looT_ekam.sgra fi    
+)(ratlooTekam.r = edocter        
+:esle    
+)(nur.r = edocter        
+:edocter fi    
+rennur boj ot eruliaf etacidni #  )edocter(tixe.sys        
+
+
+:"__niam__" == __eman__ fi
+)(niam    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/pyrevpos.xml	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,49 @@
+<tool name="pyrevpos" id="pyrevpos" version="0.01">
+  <!--Cite: Creating re-usable tools from scripts doi:             10.1093/bioinformatics/bts573-->
+  <!--Source in git at: https://github.com/fubar2/toolfactory-->
+  <!--Created by ross.lazarus@gmail.com at 22/08/2020 22:44:22 using the Galaxy Tool Factory.-->
+  <description>pyrevpos</description>
+  <requirements>
+    <requirement version="" type="package">python</requirement>
+  </requirements>
+  <configfiles>
+    <configfile name="runMe"><![CDATA[
+
+# reverse order of text by row
+import sys
+inp = sys.argv[1]
+outp = sys.argv[2]
+i = open(inp,'r').readlines()
+o = open(outp,'w')
+for row in i:
+  rs = row.rstrip()
+  rs = list(rs)
+  rs.reverse()
+  o.write(''.join(rs))
+  o.write('\n')
+o.close()
+]]></configfile>
+  </configfiles>
+  <stdio>
+    <exit_code range="1:" level="fatal"/>
+  </stdio>
+  <version_command/>
+  <command interpreter="python"><![CDATA[$runMe $input1
+$output]]></command>
+  <inputs>
+    <param help="parameter_help" label="inputfile" optional="false" multiple="false" format="txt" type="data" name="input1" argument="input1"/>
+  </inputs>
+  <outputs>
+    <data hidden="false" format="txt" name="output"/>
+  </outputs>
+  <tests>
+    <test>
+      <output value="output_sample" name="output" format="txt"/>
+      <param value="input1_sample" name="input1"/>
+    </test>
+  </tests>
+  <help><![CDATA[
+**What it Does**
+ ]]></help>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test-data/input1_sample	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,741 @@
+#!/usr/bin/env python
+# rgToolFactory.py
+# see https://github.com/fubar2/toolfactory
+#
+# copyright ross lazarus (ross stop lazarus at gmail stop com) May 2012
+#
+# all rights reserved
+# Licensed under the LGPL
+# suggestions for improvement and bug fixes welcome at https://github.com/fubar2/toolfactory
+#
+# July 2020: BCC was fun and I feel like rip van winkle after 5 years.
+# Decided to
+# 1. Fix the toolfactory so it works - done for simplest case
+# 2. Fix planemo so the toolfactory function works
+# 3. Rewrite bits using galaxyxml functions where that makes sense - done
+#
+# removed all the old complications including making the new tool use this same script
+# galaxyxml now generates the tool xml https://github.com/hexylena/galaxyxml
+# No support for automatic HTML file creation from arbitrary outputs
+# TODO: add option to run that code as a post execution hook
+# TODO: add additional history input parameters - currently only one
+
+
+import argparse
+import logging
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tarfile
+import tempfile
+import time
+
+import galaxyxml.tool as gxt
+import galaxyxml.tool.parameters as gxtp
+
+import lxml
+
+myversion = "V2.1 July 2020"
+verbose = True
+debug = True
+toolFactoryURL = "https://github.com/fubar2/toolfactory"
+ourdelim = "~~~"
+
+# --input_files="$input_files~~~$CL~~~$input_formats~~~$input_label
+# ~~~$input_help"
+IPATHPOS = 0
+ICLPOS = 1
+IFMTPOS = 2
+ILABPOS = 3
+IHELPOS = 4
+IOCLPOS = 5
+
+# --output_files "$otab.history_name~~~$otab.history_format~~~$otab.CL
+ONAMEPOS = 0
+OFMTPOS = 1
+OCLPOS = 2
+OOCLPOS = 3
+
+# --additional_parameters="$i.param_name~~~$i.param_value~~~
+# $i.param_label~~~$i.param_help~~~$i.param_type~~~$i.CL~~~i$.param_CLoverride"
+ANAMEPOS = 0
+AVALPOS = 1
+ALABPOS = 2
+AHELPPOS = 3
+ATYPEPOS = 4
+ACLPOS = 5
+AOVERPOS = 6
+AOCLPOS = 7
+
+
+foo = len(lxml.__version__)  
+# fug you, flake8. Say my name! 
+
+def timenow():
+    """return current time as a string
+    """
+    return time.strftime("%d/%m/%Y %H:%M:%S", time.localtime(time.time()))
+
+
+def quote_non_numeric(s):
+    """return a prequoted string for non-numerics
+    useful for perl and Rscript parameter passing?
+    """
+    try:
+        _ = float(s)
+        return s
+    except ValueError:
+        return '"%s"' % s
+
+
+html_escape_table = {"&": "&amp;", ">": "&gt;", "<": "&lt;", "$": r"\$"}
+
+
+def html_escape(text):
+    """Produce entities within text."""
+    return "".join(html_escape_table.get(c, c) for c in text)
+
+
+def html_unescape(text):
+    """Revert entities within text. Multiple character targets so use replace"""
+    t = text.replace("&amp;", "&")
+    t = t.replace("&gt;", ">")
+    t = t.replace("&lt;", "<")
+    t = t.replace("\\$", "$")
+    return t
+
+
+def parse_citations(citations_text):
+    """
+    """
+    citations = [c for c in citations_text.split("**ENTRY**") if c.strip()]
+    citation_tuples = []
+    for citation in citations:
+        if citation.startswith("doi"):
+            citation_tuples.append(("doi", citation[len("doi") :].strip()))
+        else:
+            citation_tuples.append(
+                ("bibtex", citation[len("bibtex") :].strip())
+            )
+    return citation_tuples
+
+
+class ScriptRunner:
+    """Wrapper for an arbitrary script
+    uses galaxyxml
+
+    """
+
+    def __init__(self, args=None):
+        """
+        prepare command line cl for running the tool here
+        and prepare elements needed for galaxyxml tool generation
+        """
+
+        self.infiles = [x.split(ourdelim) for x in args.input_files]
+        self.outfiles = [x.split(ourdelim) for x in args.output_files]
+        self.addpar = [x.split(ourdelim) for x in args.additional_parameters]
+        self.args = args
+        self.cleanuppar()
+        self.lastclredirect = None
+        self.lastxclredirect = None
+        self.cl = []
+        self.xmlcl = []
+        self.is_positional = self.args.parampass == "positional"
+        aCL = self.cl.append
+        assert args.parampass in [
+            "0",
+            "argparse",
+            "positional",
+        ], 'Parameter passing in args.parampass must be "0","positional" or "argparse"'
+        self.tool_name = re.sub("[^a-zA-Z0-9_]+", "", args.tool_name)
+        self.tool_id = self.tool_name
+        if self.args.interpreter_name:
+            exe = "$runMe"
+        else:
+            exe = self.args.exe_package
+        assert (
+            exe is not None
+        ), "No interpeter or executable passed in - nothing to run so cannot build"
+        self.tool = gxt.Tool(
+            self.args.tool_name,
+            self.tool_id,
+            self.args.tool_version,
+            self.args.tool_desc,
+            exe,
+        )
+        self.tinputs = gxtp.Inputs()
+        self.toutputs = gxtp.Outputs()
+        self.testparam = []
+        if (
+            self.args.runmode == "Executable" or self.args.runmode == "system"
+        ):  # binary - no need
+            aCL(self.args.exe_package)  # this little CL will just run
+        else:
+            self.prepScript()
+        self.elog = "%s_error_log.txt" % self.tool_name
+        self.tlog = "%s_runner_log.txt" % self.tool_name
+
+        if self.args.parampass == "0":
+            self.clsimple()
+        else:
+            clsuffix = []
+            xclsuffix = []
+            for i, p in enumerate(self.infiles):
+                if p[IOCLPOS] == "STDIN":
+                    appendme = [
+                        p[IOCLPOS],
+                        p[ICLPOS],
+                        p[IPATHPOS],
+                        "< %s" % p[IPATHPOS],
+                    ]
+                    xappendme = [
+                        p[IOCLPOS],
+                        p[ICLPOS],
+                        p[IPATHPOS],
+                        "< $%s" % p[ICLPOS],
+                    ]
+                else:
+                    appendme = [p[IOCLPOS], p[ICLPOS], p[IPATHPOS], ""]
+                    xappendme = [p[IOCLPOS], p[ICLPOS], "$%s" % p[ICLPOS], ""]
+                clsuffix.append(appendme)
+                xclsuffix.append(xappendme)
+                # print('##infile i=%d, appendme=%s' % (i,appendme))
+            for i, p in enumerate(self.outfiles):
+                if p[OOCLPOS] == "STDOUT":
+                    self.lastclredirect = [">", p[ONAMEPOS]]
+                    self.lastxclredirect = [">", "$%s" % p[OCLPOS]]
+                else:
+                    clsuffix.append([p[OOCLPOS], p[OCLPOS], p[ONAMEPOS], ""])
+                    xclsuffix.append(
+                        [p[OOCLPOS], p[OCLPOS], "$%s" % p[ONAMEPOS], ""]
+                    )
+            for p in self.addpar:
+                clsuffix.append(
+                    [p[AOCLPOS], p[ACLPOS], p[AVALPOS], p[AOVERPOS]]
+                )
+                xclsuffix.append(
+                    [p[AOCLPOS], p[ACLPOS], '"$%s"' % p[ANAMEPOS], p[AOVERPOS]]
+                )
+            clsuffix.sort()
+            xclsuffix.sort()
+            self.xclsuffix = xclsuffix
+            self.clsuffix = clsuffix
+            if self.args.parampass == "positional":
+                self.clpositional()
+            else:
+                self.clargparse()
+
+    def prepScript(self):
+        aCL = self.cl.append
+        rx = open(self.args.script_path, "r").readlines()
+        rx = [x.rstrip() for x in rx]
+        rxcheck = [x.strip() for x in rx if x.strip() > ""]
+        assert len(rxcheck) > 0, "Supplied script is empty. Cannot run"
+        self.script = "\n".join(rx)
+        fhandle, self.sfile = tempfile.mkstemp(
+            prefix=self.tool_name, suffix="_%s" % (self.args.interpreter_name)
+        )
+        tscript = open(self.sfile, "w")
+        tscript.write(self.script)
+        tscript.close()
+        self.indentedScript = "  %s" % "\n".join(
+            [" %s" % html_escape(x) for x in rx]
+        )
+        self.escapedScript = "%s" % "\n".join(
+            [" %s" % html_escape(x) for x in rx]
+        )
+        art = "%s.%s" % (self.tool_name, self.args.interpreter_name)
+        artifact = open(art, "wb")
+        artifact.write(bytes(self.script, "utf8"))
+        artifact.close()
+        aCL(self.args.interpreter_name)
+        aCL(self.sfile)
+
+    def cleanuppar(self):
+        """ positional parameters are complicated by their numeric ordinal"""
+        for i, p in enumerate(self.infiles):
+            if self.args.parampass == "positional":
+                assert p[ICLPOS].isdigit(), (
+                    "Positional parameters must be ordinal integers - got %s for %s"
+                    % (p[ICLPOS], p[ILABPOS])
+                )
+            p.append(p[ICLPOS])
+            if p[ICLPOS].isdigit() or self.args.parampass == "0":
+                scl = "input%d" % (i + 1)
+                p[ICLPOS] = scl
+            self.infiles[i] = p
+        for i, p in enumerate(
+            self.outfiles
+        ):  # trying to automagically gather using extensions
+            if self.args.parampass == "positional" and p[OCLPOS] != "STDOUT":
+                assert p[OCLPOS].isdigit(), (
+                    "Positional parameters must be ordinal integers - got %s for %s"
+                    % (p[OCLPOS], p[ONAMEPOS])
+                )
+            p.append(p[OCLPOS])
+            if p[OCLPOS].isdigit() or p[OCLPOS] == "STDOUT":
+                scl = p[ONAMEPOS]
+                p[OCLPOS] = scl
+            self.outfiles[i] = p
+        for i, p in enumerate(self.addpar):
+            if self.args.parampass == "positional":
+                assert p[ACLPOS].isdigit(), (
+                    "Positional parameters must be ordinal integers - got %s for %s"
+                    % (p[ACLPOS], p[ANAMEPOS])
+                )
+            p.append(p[ACLPOS])
+            if p[ACLPOS].isdigit():
+                scl = "input%s" % p[ACLPOS]
+                p[ACLPOS] = scl
+            self.addpar[i] = p
+
+    def clsimple(self):
+        """ no parameters - uses < and > for i/o
+        """
+        aCL = self.cl.append
+        aCL("<")
+        aCL(self.infiles[0][IPATHPOS])
+        aCL(">")
+        aCL(self.outfiles[0][OCLPOS])
+        aXCL = self.xmlcl.append
+        aXCL("<")
+        aXCL("$%s" % self.infiles[0][ICLPOS])
+        aXCL(">")
+        aXCL("$%s" % self.outfiles[0][ONAMEPOS])
+
+    def clpositional(self):
+        # inputs in order then params
+        aCL = self.cl.append
+        for (o_v, k, v, koverride) in self.clsuffix:
+            if " " in v:
+                aCL("%s" % v)
+            else:
+                aCL(v)
+        aXCL = self.xmlcl.append
+        for (o_v, k, v, koverride) in self.xclsuffix:
+            aXCL(v)
+        if self.lastxclredirect:
+            aXCL(self.lastxclredirect[0])
+            aXCL(self.lastxclredirect[1])
+
+    def clargparse(self):
+        """ argparse style
+        """
+        aCL = self.cl.append
+        aXCL = self.xmlcl.append
+        # inputs then params in argparse named form
+        for (o_v, k, v, koverride) in self.xclsuffix:
+            if koverride > "":
+                k = koverride
+            elif len(k.strip()) == 1:
+                k = "-%s" % k
+            else:
+                k = "--%s" % k
+            aXCL(k)
+            aXCL(v)
+        for (o_v, k, v, koverride) in self.clsuffix:
+            if koverride > "":
+                k = koverride
+            elif len(k.strip()) == 1:
+                k = "-%s" % k
+            else:
+                k = "--%s" % k
+            aCL(k)
+            aCL(v)
+
+    def getNdash(self, newname):
+        if self.is_positional:
+            ndash = 0
+        else:
+            ndash = 2
+            if len(newname) < 2:
+                ndash = 1
+        return ndash
+
+    def doXMLparam(self):
+        """flake8 made me do this..."""
+        for p in self.outfiles:
+            newname, newfmt, newcl, oldcl = p
+            ndash = self.getNdash(newcl)
+            aparm = gxtp.OutputData(newcl, format=newfmt, num_dashes=ndash)
+            aparm.positional = self.is_positional
+            if self.is_positional:
+                if oldcl == "STDOUT":
+                    aparm.positional = 9999999
+                    aparm.command_line_override = "> $%s" % newcl
+                else:
+                    aparm.positional = int(oldcl)
+                    aparm.command_line_override = "$%s" % newcl
+            self.toutputs.append(aparm)
+            tp = gxtp.TestOutput(
+                name=newcl, value="%s_sample" % newcl, format=newfmt
+            )
+            self.testparam.append(tp)
+        for p in self.infiles:
+            newname = p[ICLPOS]
+            newfmt = p[IFMTPOS]
+            ndash = self.getNdash(newname)
+            if not len(p[ILABPOS]) > 0:
+                alab = p[ICLPOS]
+            else:
+                alab = p[ILABPOS]
+            aninput = gxtp.DataParam(
+                newname,
+                optional=False,
+                label=alab,
+                help=p[IHELPOS],
+                format=newfmt,
+                multiple=False,
+                num_dashes=ndash,
+            )
+            aninput.positional = self.is_positional
+            self.tinputs.append(aninput)
+            tparm = gxtp.TestParam(name=newname, value="%s_sample" % newname)
+            self.testparam.append(tparm)
+        for p in self.addpar:
+            newname, newval, newlabel, newhelp, newtype, newcl, override, oldcl = p
+            if not len(newlabel) > 0:
+                newlabel = newname
+            ndash = self.getNdash(newname)
+            if newtype == "text":
+                aparm = gxtp.TextParam(
+                    newname,
+                    label=newlabel,
+                    help=newhelp,
+                    value=newval,
+                    num_dashes=ndash,
+                )
+            elif newtype == "integer":
+                aparm = gxtp.IntegerParam(
+                    newname,
+                    label=newname,
+                    help=newhelp,
+                    value=newval,
+                    num_dashes=ndash,
+                )
+            elif newtype == "float":
+                aparm = gxtp.FloatParam(
+                    newname,
+                    label=newname,
+                    help=newhelp,
+                    value=newval,
+                    num_dashes=ndash,
+                )
+            else:
+                raise ValueError(
+                    'Unrecognised parameter type "%s" for\
+                 additional parameter %s in makeXML'
+                    % (newtype, newname)
+                )
+            aparm.positional = self.is_positional
+            if self.is_positional:
+                aninput.positional = int(oldcl)
+            self.tinputs.append(aparm)
+            self.tparm = gxtp.TestParam(newname, value=newval)
+            self.testparam.append(tparm)
+
+    def doNoXMLparam(self):
+        alab = self.infiles[0][ILABPOS]
+        if len(alab) == 0:
+            alab = self.infiles[0][ICLPOS]
+        max1s = (
+            "Maximum one input if parampass is 0 - more than one input files supplied - %s"
+            % str(self.infiles)
+        )
+        assert len(self.infiles) == 1, max1s
+        newname = self.infiles[0][ICLPOS]
+        aninput = gxtp.DataParam(
+            newname,
+            optional=False,
+            label=alab,
+            help=self.infiles[0][IHELPOS],
+            format=self.infiles[0][IFMTPOS],
+            multiple=False,
+            num_dashes=0,
+        )
+        aninput.command_line_override = "< $%s" % newname
+        aninput.positional = self.is_positional
+        self.tinputs.append(aninput)
+        tp = gxtp.TestParam(name=newname, value="%s_sample" % newname)
+        self.testparam.append(tp)
+        newname = self.outfiles[0][OCLPOS]
+        newfmt = self.outfiles[0][OFMTPOS]
+        anout = gxtp.OutputData(newname, format=newfmt, num_dashes=0)
+        anout.command_line_override = "> $%s" % newname
+        anout.positional = self.is_positional
+        self.toutputs.append(anout)
+        tp = gxtp.TestOutput(
+            name=newname, value="%s_sample" % newname, format=newfmt
+        )
+        self.testparam.append(tp)
+
+    def makeXML(self):
+        """
+        Create a Galaxy xml tool wrapper for the new script
+        Uses galaxyhtml
+        Hmmm. How to get the command line into correct order...
+        """
+        self.tool.command_line_override = self.xmlcl
+        if self.args.interpreter_name:
+            self.tool.interpreter = self.args.interpreter_name
+        if self.args.help_text:
+            helptext = open(self.args.help_text, "r").readlines()
+            helptext = [html_escape(x) for x in helptext]
+            self.tool.help = "".join([x for x in helptext])
+        else:
+            self.tool.help = (
+                "Please ask the tool author (%s) for help \
+              as none was supplied at tool generation\n"
+                % (self.args.user_email)
+            )
+        self.tool.version_command = None  # do not want
+        requirements = gxtp.Requirements()
+
+        if self.args.interpreter_name:
+            if self.args.interpreter_name == "python":
+                requirements.append(
+                    gxtp.Requirement(
+                        "package", "python", self.args.interpreter_version
+                    )
+                )
+            elif self.args.interpreter_name not in ["bash", "sh"]:
+                requirements.append(
+                    gxtp.Requirement(
+                        "package",
+                        self.args.interpreter_name,
+                        self.args.interpreter_version,
+                    )
+                )
+        else:
+            if self.args.exe_package and self.args.parampass != "system":
+                requirements.append(
+                    gxtp.Requirement(
+                        "package",
+                        self.args.exe_package,
+                        self.args.exe_package_version,
+                    )
+                )
+        self.tool.requirements = requirements
+        if self.args.parampass == "0":
+            self.doNoXMLparam()
+        else:
+            self.doXMLparam()
+        self.tool.outputs = self.toutputs
+        self.tool.inputs = self.tinputs
+        if self.args.runmode not in ["Executable", "system"]:
+            configfiles = gxtp.Configfiles()
+            configfiles.append(gxtp.Configfile(name="runMe", text=self.script))
+            self.tool.configfiles = configfiles
+        tests = gxtp.Tests()
+        test_a = gxtp.Test()
+        for tp in self.testparam:
+            test_a.append(tp)
+        tests.append(test_a)
+        self.tool.tests = tests
+        self.tool.add_comment(
+            "Created by %s at %s using the Galaxy Tool Factory."
+            % (self.args.user_email, timenow())
+        )
+        self.tool.add_comment("Source in git at: %s" % (toolFactoryURL))
+        self.tool.add_comment(
+            "Cite: Creating re-usable tools from scripts doi: 10.1093/bioinformatics/bts573"
+        )
+        exml = self.tool.export()
+        xf = open('%s.xml' % self.tool_name, "w")
+        xf.write(exml)
+        xf.write("\n")
+        xf.close()
+        # ready for the tarball
+
+    def makeTooltar(self):
+        """
+        a tool is a gz tarball with eg
+        /toolname/tool.xml /toolname/tool.py /toolname/test-data/test1_in.foo ...
+        NOTE names for test inputs and outputs are munged here so must
+        correspond to actual input and output names used on the generated cl
+        """
+        retval = self.run()
+        if retval:
+            sys.stderr.write(
+                "## Run failed. Cannot build yet. Please fix and retry"
+            )
+            sys.exit(1)
+        tdir = "tfout"
+        if not os.path.exists(tdir):
+            os.mkdir(tdir)
+        self.makeXML()
+        testdir = os.path.join(tdir, "test-data")
+        if not os.path.exists(testdir):
+            os.mkdir(testdir)  # make tests directory
+        for p in self.infiles:
+            pth = p[IPATHPOS]
+            dest = os.path.join(testdir, "%s_sample" % p[ICLPOS])
+            shutil.copyfile(pth, dest)
+        for p in self.outfiles:
+            pth = p[OCLPOS]
+            if p[OOCLPOS] == "STDOUT" or self.args.parampass == "0":
+                pth = p[ONAMEPOS]
+                dest = os.path.join(testdir, "%s_sample" % p[ONAMEPOS])
+                shutil.copyfile(pth, dest)
+                dest = os.path.join(tdir, p[ONAMEPOS])
+                shutil.copyfile(pth, dest)
+            else:
+                pth = p[OCLPOS]
+                dest = os.path.join(testdir, "%s_sample" % p[OCLPOS])
+                shutil.copyfile(pth, dest)
+                dest = os.path.join(tdir, p[OCLPOS])
+                shutil.copyfile(pth, dest)
+
+        if os.path.exists(self.tlog) and os.stat(self.tlog).st_size > 0:
+            shutil.copyfile(self.tlog, os.path.join(testdir, "test1_log_outfiletxt"))
+        if self.args.runmode not in ["Executable", "system"]:
+            stname = os.path.join(tdir, "%s" % (self.sfile))
+            if not os.path.exists(stname):
+                shutil.copyfile(self.sfile, stname)
+        xreal = '%s.xml' % self.tool_name
+        xout = os.path.join(tdir,xreal)
+        shutil.copyfile(xreal, xout)
+        tarpath = "toolfactory_%s.tgz" % self.tool_name
+        tf = tarfile.open(tarpath, "w:gz")
+        tf.add(name=tdir, arcname=self.tool_name)
+        tf.close()
+        shutil.copyfile(tarpath, self.args.new_tool)
+        shutil.copyfile(xreal,"tool_xml.txt")
+        repdir = "TF_run_report_tempdir"
+        if not os.path.exists(repdir):
+            os.mkdir(repdir)
+        repoutnames = [x[OCLPOS] for x in self.outfiles]
+        with os.scandir('.') as outs:
+            for entry in outs:
+                if entry.name.endswith('.tgz') or not entry.is_file():
+                    continue
+                if entry.name in repoutnames:
+                    shutil.copyfile(entry.name,os.path.join(repdir,entry.name))
+                elif entry.name == "%s.xml" % self.tool_name:
+                    shutil.copyfile(entry.name,os.path.join(repdir,"new_tool_xml"))
+        return retval
+
+    def run(self):
+        """
+        Some devteam tools have this defensive stderr read so I'm keeping with the faith
+        Feel free to update.
+        """
+        s = "run cl=%s" % str(self.cl)
+
+        logging.debug(s)
+        scl = " ".join(self.cl)
+        err = None
+        if self.args.parampass != "0":
+            ste = open(self.elog, "wb")
+            if self.lastclredirect:
+                sto = open(
+                    self.lastclredirect[1], "wb"
+                )  # is name of an output file
+            else:
+                sto = open(self.tlog, "wb")
+                sto.write(
+                    bytes(
+                        "## Executing Toolfactory generated command line = %s\n"
+                        % scl,
+                        "utf8",
+                    )
+                )
+            sto.flush()
+            p = subprocess.run(self.cl, shell=False, stdout=sto, stderr=ste)
+            sto.close()
+            ste.close()
+            tmp_stderr = open(self.elog, "rb")
+            err = ""
+            buffsize = 1048576
+            try:
+                while True:
+                    err += str(tmp_stderr.read(buffsize))
+                    if not err or len(err) % buffsize != 0:
+                        break
+            except OverflowError:
+                pass
+            tmp_stderr.close()
+            retval = p.returncode
+        else:  # work around special case of simple scripts that take stdin and write to stdout
+            sti = open(self.infiles[0][IPATHPOS], "rb")
+            sto = open(self.outfiles[0][ONAMEPOS], "wb")
+            # must use shell to redirect
+            p = subprocess.run(self.cl, shell=False, stdout=sto, stdin=sti)
+            retval = p.returncode
+            sto.close()
+            sti.close()
+        if os.path.isfile(self.tlog) and os.stat(self.tlog).st_size == 0:
+            os.unlink(self.tlog)
+        if os.path.isfile(self.elog) and os.stat(self.elog).st_size == 0:
+            os.unlink(self.elog)
+        if p.returncode != 0 and err:  # problem
+            sys.stderr.write(err)
+        logging.debug("run done")
+        return retval
+
+
+def main():
+    """
+    This is a Galaxy wrapper. It expects to be called by a special purpose tool.xml as:
+    <command interpreter="python">rgBaseScriptWrapper.py --script_path "$scriptPath" --tool_name "foo" --interpreter "Rscript"
+    </command>
+    """
+    parser = argparse.ArgumentParser()
+    a = parser.add_argument
+    a("--script_path", default="")
+    a("--tool_name", default=None)
+    a("--interpreter_name", default=None)
+    a("--interpreter_version", default=None)
+    a("--exe_package", default=None)
+    a("--exe_package_version", default=None)
+    a("--input_files", default=[], action="append")
+    a("--output_files", default=[], action="append")
+    a("--user_email", default="Unknown")
+    a("--bad_user", default=None)
+    a("--make_Tool", default=None)
+    a("--help_text", default=None)
+    a("--tool_desc", default=None)
+    a("--tool_version", default=None)
+    a("--citations", default=None)
+    a("--additional_parameters", action="append", default=[])
+    a("--edit_additional_parameters", action="store_true", default=False)
+    a("--parampass", default="positional")
+    a("--tfout", default="./tfout")
+    a("--new_tool", default="new_tool")
+    a("--runmode", default=None)
+    args = parser.parse_args()
+    assert not args.bad_user, (
+        'UNAUTHORISED: %s is NOT authorized to use this tool until Galaxy admin adds %s to "admin_users" in the Galaxy configuration file'
+        % (args.bad_user, args.bad_user)
+    )
+    assert (
+        args.tool_name
+    ), "## Tool Factory expects a tool name - eg --tool_name=DESeq"
+    assert (
+        args.interpreter_name or args.exe_package
+    ), "## Tool Factory wrapper expects an interpreter or an executable package"
+    assert args.exe_package or (
+        len(args.script_path) > 0 and os.path.isfile(args.script_path)
+    ), "## Tool Factory wrapper expects a script path - eg --script_path=foo.R if no executable"
+    args.input_files = [
+        x.replace('"', "").replace("'", "") for x in args.input_files
+    ]
+    # remove quotes we need to deal with spaces in CL params
+    for i, x in enumerate(args.additional_parameters):
+        args.additional_parameters[i] = args.additional_parameters[i].replace(
+            '"', ""
+        )
+    r = ScriptRunner(args)
+    if args.make_Tool:
+        retcode = r.makeTooltar()
+    else:
+        retcode = r.run()
+    if retcode:
+        sys.exit(retcode)  # indicate failure to job runner
+
+
+if __name__ == "__main__":
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test-data/output_sample	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,741 @@
+nohtyp vne/nib/rsu/!#
+yp.yrotcaFlooTgr #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ees #
+#
+2102 yaM )moc pots liamg ta surazal pots ssor( surazal ssor thgirypoc #
+#
+devreser sthgir lla #
+LPGL eht rednu desneciL #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ta emoclew sexif gub dna tnemevorpmi rof snoitseggus #
+#
+.sraey 5 retfa elkniw nav pir ekil leef I dna nuf saw CCB :0202 yluJ #
+ot dediceD #
+esac tselpmis rof enod - skrow ti os yrotcafloot eht xiF .1 #
+skrow noitcnuf yrotcafloot eht os omenalp xiF .2 #
+enod - esnes sekam taht erehw snoitcnuf lmxyxalag gnisu stib etirweR .3 #
+#
+tpircs emas siht esu loot wen eht gnikam gnidulcni snoitacilpmoc dlo eht lla devomer #
+lmxyxalag/anelyxeh/moc.buhtig//:sptth lmx loot eht setareneg won lmxyxalag #
+stuptuo yrartibra morf noitaerc elif LMTH citamotua rof troppus oN #
+kooh noitucexe tsop a sa edoc taht nur ot noitpo dda :ODOT #
+eno ylno yltnerruc - sretemarap tupni yrotsih lanoitidda dda :ODOT #
+
+
+esrapgra tropmi
+gniggol tropmi
+so tropmi
+er tropmi
+lituhs tropmi
+ssecorpbus tropmi
+sys tropmi
+elifrat tropmi
+elifpmet tropmi
+emit tropmi
+
+txg sa loot.lmxyxalag tropmi
+ptxg sa sretemarap.loot.lmxyxalag tropmi
+
+lmxl tropmi
+
+"0202 yluJ 1.2V" = noisrevym
+eurT = esobrev
+eurT = gubed
+"yrotcafloot/2rabuf/moc.buhtig//:sptth" = LRUyrotcaFloot
+"~~~" = miledruo
+
+lebal_tupni$~~~stamrof_tupni$~~~LC$~~~selif_tupni$"=selif_tupni-- #
+"pleh_tupni$~~~ #
+0 = SOPHTAPI
+1 = SOPLCI
+2 = SOPTMFI
+3 = SOPBALI
+4 = SOPLEHI
+5 = SOPLCOI
+
+LC.bato$~~~tamrof_yrotsih.bato$~~~eman_yrotsih.bato$" selif_tuptuo-- #
+0 = SOPEMANO
+1 = SOPTMFO
+2 = SOPLCO
+3 = SOPLCOO
+
+~~~eulav_marap.i$~~~eman_marap.i$"=sretemarap_lanoitidda-- #
+"edirrevoLC_marap.$i~~~LC.i$~~~epyt_marap.i$~~~pleh_marap.i$~~~lebal_marap.i$ #
+0 = SOPEMANA
+1 = SOPLAVA
+2 = SOPBALA
+3 = SOPPLEHA
+4 = SOPEPYTA
+5 = SOPLCA
+6 = SOPREVOA
+7 = SOPLCOA
+
+
+)__noisrev__.lmxl(nel = oof
+!eman ym yaS .8ekalf ,uoy guf #
+
+:)(wonemit fed
+gnirts a sa emit tnerruc nruter"""    
+"""    
+)))(emit.emit(emitlacol.emit ,"S%:M%:H% Y%/m%/d%"(emitfrts.emit nruter    
+
+
+:)s(ciremun_non_etouq fed
+sciremun-non rof gnirts detouqerp a nruter"""    
+?gnissap retemarap tpircsR dna lrep rof lufesu    
+"""    
+:yrt    
+)s(taolf = _        
+s nruter        
+:rorrEeulaV tpecxe    
+s % '"s%"' nruter        
+
+
+}"$\"r :"$" ,";tl&" :"<" ,";tg&" :">" ,";pma&" :"&"{ = elbat_epacse_lmth
+
+
+:)txet(epacse_lmth fed
+""".txet nihtiw seititne ecudorP"""    
+)txet ni c rof )c ,c(teg.elbat_epacse_lmth(nioj."" nruter    
+
+
+:)txet(epacsenu_lmth fed
+"""ecalper esu os stegrat retcarahc elpitluM .txet nihtiw seititne treveR"""    
+)"&" ,";pma&"(ecalper.txet = t    
+)">" ,";tg&"(ecalper.t = t    
+)"<" ,";tl&"(ecalper.t = t    
+)"$" ,"$\\"(ecalper.t = t    
+t nruter    
+
+
+:)txet_snoitatic(snoitatic_esrap fed
+"""    
+"""    
+])(pirts.c fi )"**YRTNE**"(tilps.txet_snoitatic ni c rof c[ = snoitatic    
+][ = selput_noitatic    
+:snoitatic ni noitatic rof    
+:)"iod"(htiwstrats.noitatic fi        
+)))(pirts.]: )"iod"(nel[noitatic ,"iod"((dneppa.selput_noitatic            
+:esle        
+(dneppa.selput_noitatic            
+))(pirts.]: )"xetbib"(nel[noitatic ,"xetbib"(                
+)            
+selput_noitatic nruter    
+
+
+:rennuRtpircS ssalc
+tpircs yrartibra na rof repparW"""    
+lmxyxalag sesu    
+
+"""    
+
+:)enoN=sgra ,fles(__tini__ fed    
+"""        
+ereh loot eht gninnur rof lc enil dnammoc eraperp        
+noitareneg loot lmxyxalag rof dedeen stnemele eraperp dna        
+"""        
+
+]selif_tupni.sgra ni x rof )miledruo(tilps.x[ = selifni.fles        
+]selif_tuptuo.sgra ni x rof )miledruo(tilps.x[ = seliftuo.fles        
+]sretemarap_lanoitidda.sgra ni x rof )miledruo(tilps.x[ = rapdda.fles        
+sgra = sgra.fles        
+)(rappunaelc.fles        
+enoN = tceriderlctsal.fles        
+enoN = tceriderlcxtsal.fles        
+][ = lc.fles        
+][ = lclmx.fles        
+"lanoitisop" == ssapmarap.sgra.fles = lanoitisop_si.fles        
+dneppa.lc.fles = LCa        
+[ ni ssapmarap.sgra tressa        
+,"0"            
+,"esrapgra"            
+,"lanoitisop"            
+'"esrapgra" ro "lanoitisop","0" eb tsum ssapmarap.sgra ni gnissap retemaraP' ,]        
+)eman_loot.sgra ,"" ,"+]_9-0Z-Az-a^["(bus.er = eman_loot.fles        
+eman_loot.fles = di_loot.fles        
+:eman_reterpretni.sgra.fles fi        
+"eMnur$" = exe            
+:esle        
+egakcap_exe.sgra.fles = exe            
+( tressa        
+enoN ton si exe            
+"dliub tonnac os nur ot gnihton - ni dessap elbatucexe ro retepretni oN" ,)        
+(looT.txg = loot.fles        
+,eman_loot.sgra.fles            
+,di_loot.fles            
+,noisrev_loot.sgra.fles            
+,csed_loot.sgra.fles            
+,exe            
+)        
+)(stupnI.ptxg = stupnit.fles        
+)(stuptuO.ptxg = stuptuot.fles        
+][ = maraptset.fles        
+( fi        
+"metsys" == edomnur.sgra.fles ro "elbatucexE" == edomnur.sgra.fles            
+deen on - yranib #  :)        
+nur tsuj lliw LC elttil siht #  )egakcap_exe.sgra.fles(LCa            
+:esle        
+)(tpircSperp.fles            
+eman_loot.fles % "txt.gol_rorre_s%" = gole.fles        
+eman_loot.fles % "txt.gol_rennur_s%" = golt.fles        
+
+:"0" == ssapmarap.sgra.fles fi        
+)(elpmislc.fles            
+:esle        
+][ = xiffuslc            
+][ = xiffuslcx            
+:)selifni.fles(etaremune ni p ,i rof            
+:"NIDTS" == ]SOPLCOI[p fi                
+[ = emdneppa                    
+,]SOPLCOI[p                        
+,]SOPLCI[p                        
+,]SOPHTAPI[p                        
+,]SOPHTAPI[p % "s% <"                        
+]                    
+[ = emdneppax                    
+,]SOPLCOI[p                        
+,]SOPLCI[p                        
+,]SOPHTAPI[p                        
+,]SOPLCI[p % "s%$ <"                        
+]                    
+:esle                
+]"" ,]SOPHTAPI[p ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppa                    
+]"" ,]SOPLCI[p % "s%$" ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppax                    
+)emdneppa(dneppa.xiffuslc                
+)emdneppax(dneppa.xiffuslcx                
+))emdneppa,i( % 's%=emdneppa ,d%=i elifni##'(tnirp #                
+:)seliftuo.fles(etaremune ni p ,i rof            
+:"TUODTS" == ]SOPLCOO[p fi                
+]]SOPEMANO[p ,">"[ = tceriderlctsal.fles                    
+]]SOPLCO[p % "s%$" ,">"[ = tceriderlcxtsal.fles                    
+:esle                
+)]"" ,]SOPEMANO[p ,]SOPLCO[p ,]SOPLCOO[p[(dneppa.xiffuslc                    
+(dneppa.xiffuslcx                    
+]"" ,]SOPEMANO[p % "s%$" ,]SOPLCO[p ,]SOPLCOO[p[                        
+)                    
+:rapdda.fles ni p rof            
+(dneppa.xiffuslc                
+]]SOPREVOA[p ,]SOPLAVA[p ,]SOPLCA[p ,]SOPLCOA[p[                    
+)                
+(dneppa.xiffuslcx                
+]]SOPREVOA[p ,]SOPEMANA[p % '"s%$"' ,]SOPLCA[p ,]SOPLCOA[p[                    
+)                
+)(tros.xiffuslc            
+)(tros.xiffuslcx            
+xiffuslcx = xiffuslcx.fles            
+xiffuslc = xiffuslc.fles            
+:"lanoitisop" == ssapmarap.sgra.fles fi            
+)(lanoitisoplc.fles                
+:esle            
+)(esrapgralc.fles                
+
+:)fles(tpircSperp fed    
+dneppa.lc.fles = LCa        
+)(senildaer.)"r" ,htap_tpircs.sgra.fles(nepo = xr        
+]xr ni x rof )(pirtsr.x[ = xr        
+]"" > )(pirts.x fi xr ni x rof )(pirts.x[ = kcehcxr        
+"nur tonnaC .ytpme si tpircs deilppuS" ,0 > )kcehcxr(nel tressa        
+)xr(nioj."n\" = tpircs.fles        
+(pmetskm.elifpmet = elifs.fles ,eldnahf        
+)eman_reterpretni.sgra.fles( % "s%_"=xiffus ,eman_loot.fles=xiferp            
+)        
+)"w" ,elifs.fles(nepo = tpircst        
+)tpircs.fles(etirw.tpircst        
+)(esolc.tpircst        
+(nioj."n\" % "s%  " = tpircSdetnedni.fles        
+]xr ni x rof )x(epacse_lmth % "s% "[            
+)        
+(nioj."n\" % "s%" = tpircSdepacse.fles        
+]xr ni x rof )x(epacse_lmth % "s% "[            
+)        
+)eman_reterpretni.sgra.fles ,eman_loot.fles( % "s%.s%" = tra        
+)"bw" ,tra(nepo = tcafitra        
+))"8ftu" ,tpircs.fles(setyb(etirw.tcafitra        
+)(esolc.tcafitra        
+)eman_reterpretni.sgra.fles(LCa        
+)elifs.fles(LCa        
+
+:)fles(rappunaelc fed    
+"""lanidro ciremun rieht yb detacilpmoc era sretemarap lanoitisop """        
+:)selifni.fles(etaremune ni p ,i rof        
+:"lanoitisop" == ssapmarap.sgra.fles fi            
+( ,)(tigidsi.]SOPLCI[p tressa                
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"                    
+)]SOPBALI[p ,]SOPLCI[p( %                    
+)                
+)]SOPLCI[p(dneppa.p            
+:"0" == ssapmarap.sgra.fles ro )(tigidsi.]SOPLCI[p fi            
+)1 + i( % "d%tupni" = lcs                
+lcs = ]SOPLCI[p                
+p = ]i[selifni.fles            
+(etaremune ni p ,i rof        
+seliftuo.fles            
+snoisnetxe gnisu rehtag yllacigamotua ot gniyrt #  :)        
+:"TUODTS" =! ]SOPLCO[p dna "lanoitisop" == ssapmarap.sgra.fles fi            
+( ,)(tigidsi.]SOPLCO[p tressa                
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"                    
+)]SOPEMANO[p ,]SOPLCO[p( %                    
+)                
+)]SOPLCO[p(dneppa.p            
+:"TUODTS" == ]SOPLCO[p ro )(tigidsi.]SOPLCO[p fi            
+]SOPEMANO[p = lcs                
+lcs = ]SOPLCO[p                
+p = ]i[seliftuo.fles            
+:)rapdda.fles(etaremune ni p ,i rof        
+:"lanoitisop" == ssapmarap.sgra.fles fi            
+( ,)(tigidsi.]SOPLCA[p tressa                
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"                    
+)]SOPEMANA[p ,]SOPLCA[p( %                    
+)                
+)]SOPLCA[p(dneppa.p            
+:)(tigidsi.]SOPLCA[p fi            
+]SOPLCA[p % "s%tupni" = lcs                
+lcs = ]SOPLCA[p                
+p = ]i[rapdda.fles            
+
+:)fles(elpmislc fed    
+o/i rof > dna < sesu - sretemarap on """        
+"""        
+dneppa.lc.fles = LCa        
+)"<"(LCa        
+)]SOPHTAPI[]0[selifni.fles(LCa        
+)">"(LCa        
+)]SOPLCO[]0[seliftuo.fles(LCa        
+dneppa.lclmx.fles = LCXa        
+)"<"(LCXa        
+)]SOPLCI[]0[selifni.fles % "s%$"(LCXa        
+)">"(LCXa        
+)]SOPEMANO[]0[seliftuo.fles % "s%$"(LCXa        
+
+:)fles(lanoitisoplc fed    
+smarap neht redro ni stupni #        
+dneppa.lc.fles = LCa        
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof        
+:v ni " " fi            
+)v % "s%"(LCa                
+:esle            
+)v(LCa                
+dneppa.lclmx.fles = LCXa        
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof        
+)v(LCXa            
+:tceriderlcxtsal.fles fi        
+)]0[tceriderlcxtsal.fles(LCXa            
+)]1[tceriderlcxtsal.fles(LCXa            
+
+:)fles(esrapgralc fed    
+elyts esrapgra """        
+"""        
+dneppa.lc.fles = LCa        
+dneppa.lclmx.fles = LCXa        
+mrof deman esrapgra ni smarap neht stupni #        
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof        
+:"" > edirrevok fi            
+edirrevok = k                
+:1 == ))(pirts.k(nel file            
+k % "s%-" = k                
+:esle            
+k % "s%--" = k                
+)k(LCXa            
+)v(LCXa            
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof        
+:"" > edirrevok fi            
+edirrevok = k                
+:1 == ))(pirts.k(nel file            
+k % "s%-" = k                
+:esle            
+k % "s%--" = k                
+)k(LCa            
+)v(LCa            
+
+:)emanwen ,fles(hsadNteg fed    
+:lanoitisop_si.fles fi        
+0 = hsadn            
+:esle        
+2 = hsadn            
+:2 < )emanwen(nel fi            
+1 = hsadn                
+hsadn nruter        
+
+:)fles(marapLMXod fed    
+"""...siht od em edam 8ekalf"""        
+:seliftuo.fles ni p rof        
+p = lcdlo ,lcwen ,tmfwen ,emanwen            
+)lcwen(hsadNteg.fles = hsadn            
+)hsadn=sehsad_mun ,tmfwen=tamrof ,lcwen(ataDtuptuO.ptxg = mrapa            
+lanoitisop_si.fles = lanoitisop.mrapa            
+:lanoitisop_si.fles fi            
+:"TUODTS" == lcdlo fi                
+9999999 = lanoitisop.mrapa                    
+lcwen % "s%$ >" = edirrevo_enil_dnammoc.mrapa                    
+:esle                
+)lcdlo(tni = lanoitisop.mrapa                    
+lcwen % "s%$" = edirrevo_enil_dnammoc.mrapa                    
+)mrapa(dneppa.stuptuot.fles            
+(tuptuOtseT.ptxg = pt            
+tmfwen=tamrof ,lcwen % "elpmas_s%"=eulav ,lcwen=eman                
+)            
+)pt(dneppa.maraptset.fles            
+:selifni.fles ni p rof        
+]SOPLCI[p = emanwen            
+]SOPTMFI[p = tmfwen            
+)emanwen(hsadNteg.fles = hsadn            
+:0 > )]SOPBALI[p(nel ton fi            
+]SOPLCI[p = bala                
+:esle            
+]SOPBALI[p = bala                
+(maraPataD.ptxg = tupnina            
+,emanwen                
+,eslaF=lanoitpo                
+,bala=lebal                
+,]SOPLEHI[p=pleh                
+,tmfwen=tamrof                
+,eslaF=elpitlum                
+,hsadn=sehsad_mun                
+)            
+lanoitisop_si.fles = lanoitisop.tupnina            
+)tupnina(dneppa.stupnit.fles            
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = mrapt            
+)mrapt(dneppa.maraptset.fles            
+:rapdda.fles ni p rof        
+p = lcdlo ,edirrevo ,lcwen ,epytwen ,plehwen ,lebalwen ,lavwen ,emanwen            
+:0 > )lebalwen(nel ton fi            
+emanwen = lebalwen                
+)emanwen(hsadNteg.fles = hsadn            
+:"txet" == epytwen fi            
+(maraPtxeT.ptxg = mrapa                
+,emanwen                    
+,lebalwen=lebal                    
+,plehwen=pleh                    
+,lavwen=eulav                    
+,hsadn=sehsad_mun                    
+)                
+:"regetni" == epytwen file            
+(maraPregetnI.ptxg = mrapa                
+,emanwen                    
+,emanwen=lebal                    
+,plehwen=pleh                    
+,lavwen=eulav                    
+,hsadn=sehsad_mun                    
+)                
+:"taolf" == epytwen file            
+(maraPtaolF.ptxg = mrapa                
+,emanwen                    
+,emanwen=lebal                    
+,plehwen=pleh                    
+,lavwen=eulav                    
+,hsadn=sehsad_mun                    
+)                
+:esle            
+(rorrEeulaV esiar                
+\rof "s%" epyt retemarap desingocernU'                    
+'LMXekam ni s% retemarap lanoitidda                 
+)emanwen ,epytwen( %                    
+)                
+lanoitisop_si.fles = lanoitisop.mrapa            
+:lanoitisop_si.fles fi            
+)lcdlo(tni = lanoitisop.tupnina                
+)mrapa(dneppa.stupnit.fles            
+)lavwen=eulav ,emanwen(maraPtseT.ptxg = mrapt.fles            
+)mrapt(dneppa.maraptset.fles            
+
+:)fles(marapLMXoNod fed    
+]SOPBALI[]0[selifni.fles = bala        
+:0 == )bala(nel fi        
+]SOPLCI[]0[selifni.fles = bala            
+( = s1xam        
+"s% - deilppus selif tupni eno naht erom - 0 si ssapmarap fi tupni eno mumixaM"            
+)selifni.fles(rts %            
+)        
+s1xam ,1 == )selifni.fles(nel tressa        
+]SOPLCI[]0[selifni.fles = emanwen        
+(maraPataD.ptxg = tupnina        
+,emanwen            
+,eslaF=lanoitpo            
+,bala=lebal            
+,]SOPLEHI[]0[selifni.fles=pleh            
+,]SOPTMFI[]0[selifni.fles=tamrof            
+,eslaF=elpitlum            
+,0=sehsad_mun            
+)        
+emanwen % "s%$ <" = edirrevo_enil_dnammoc.tupnina        
+lanoitisop_si.fles = lanoitisop.tupnina        
+)tupnina(dneppa.stupnit.fles        
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = pt        
+)pt(dneppa.maraptset.fles        
+]SOPLCO[]0[seliftuo.fles = emanwen        
+]SOPTMFO[]0[seliftuo.fles = tmfwen        
+)0=sehsad_mun ,tmfwen=tamrof ,emanwen(ataDtuptuO.ptxg = tuona        
+emanwen % "s%$ >" = edirrevo_enil_dnammoc.tuona        
+lanoitisop_si.fles = lanoitisop.tuona        
+)tuona(dneppa.stuptuot.fles        
+(tuptuOtseT.ptxg = pt        
+tmfwen=tamrof ,emanwen % "elpmas_s%"=eulav ,emanwen=eman            
+)        
+)pt(dneppa.maraptset.fles        
+
+:)fles(LMXekam fed    
+"""        
+tpircs wen eht rof repparw loot lmx yxalaG a etaerC        
+lmthyxalag sesU        
+...redro tcerroc otni enil dnammoc eht teg ot woH .mmmH        
+"""        
+lclmx.fles = edirrevo_enil_dnammoc.loot.fles        
+:eman_reterpretni.sgra.fles fi        
+eman_reterpretni.sgra.fles = reterpretni.loot.fles            
+:txet_pleh.sgra.fles fi        
+)(senildaer.)"r" ,txet_pleh.sgra.fles(nepo = txetpleh            
+]txetpleh ni x rof )x(epacse_lmth[ = txetpleh            
+)]txetpleh ni x rof x[(nioj."" = pleh.loot.fles            
+:esle        
+( = pleh.loot.fles            
+\ pleh rof )s%( rohtua loot eht ksa esaelP"                
+"n\noitareneg loot ta deilppus saw enon sa              
+)liame_resu.sgra.fles( %                
+)            
+tnaw ton od #  enoN = dnammoc_noisrev.loot.fles        
+)(stnemeriuqeR.ptxg = stnemeriuqer        
+
+:eman_reterpretni.sgra.fles fi        
+:"nohtyp" == eman_reterpretni.sgra.fles fi            
+(dneppa.stnemeriuqer                
+(tnemeriuqeR.ptxg                    
+noisrev_reterpretni.sgra.fles ,"nohtyp" ,"egakcap"                        
+)                    
+)                
+:]"hs" ,"hsab"[ ni ton eman_reterpretni.sgra.fles file            
+(dneppa.stnemeriuqer                
+(tnemeriuqeR.ptxg                    
+,"egakcap"                        
+,eman_reterpretni.sgra.fles                        
+,noisrev_reterpretni.sgra.fles                        
+)                    
+)                
+:esle        
+:"metsys" =! ssapmarap.sgra.fles dna egakcap_exe.sgra.fles fi            
+(dneppa.stnemeriuqer                
+(tnemeriuqeR.ptxg                    
+,"egakcap"                        
+,egakcap_exe.sgra.fles                        
+,noisrev_egakcap_exe.sgra.fles                        
+)                    
+)                
+stnemeriuqer = stnemeriuqer.loot.fles        
+:"0" == ssapmarap.sgra.fles fi        
+)(marapLMXoNod.fles            
+:esle        
+)(marapLMXod.fles            
+stuptuot.fles = stuptuo.loot.fles        
+stupnit.fles = stupni.loot.fles        
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi        
+)(selifgifnoC.ptxg = selifgifnoc            
+))tpircs.fles=txet ,"eMnur"=eman(elifgifnoC.ptxg(dneppa.selifgifnoc            
+selifgifnoc = selifgifnoc.loot.fles            
+)(stseT.ptxg = stset        
+)(tseT.ptxg = a_tset        
+:maraptset.fles ni pt rof        
+)pt(dneppa.a_tset            
+)a_tset(dneppa.stset        
+stset = stset.loot.fles        
+(tnemmoc_dda.loot.fles        
+".yrotcaF looT yxalaG eht gnisu s% ta s% yb detaerC"            
+))(wonemit ,liame_resu.sgra.fles( %            
+)        
+))LRUyrotcaFloot( % "s% :ta tig ni ecruoS"(tnemmoc_dda.loot.fles        
+(tnemmoc_dda.loot.fles        
+"375stb/scitamrofnioib/3901.01 :iod stpircs morf sloot elbasu-er gnitaerC :etiC"            
+)        
+)(tropxe.loot.fles = lmxe        
+)"w" ,eman_loot.fles % 'lmx.s%'(nepo = fx        
+)lmxe(etirw.fx        
+)"n\"(etirw.fx        
+)(esolc.fx        
+llabrat eht rof ydaer #        
+
+:)fles(ratlooTekam fed    
+"""        
+ge htiw llabrat zg a si loot a        
+... oof.ni_1tset/atad-tset/emanloot/ yp.loot/emanloot/ lmx.loot/emanloot/        
+tsum os ereh degnum era stuptuo dna stupni tset rof seman ETON        
+lc detareneg eht no desu seman tuptuo dna tupni lautca ot dnopserroc        
+"""        
+)(nur.fles = lavter        
+:lavter fi        
+(etirw.rredts.sys            
+"yrter dna xif esaelP .tey dliub tonnaC .deliaf nuR ##"                
+)            
+)1(tixe.sys            
+"tuoft" = ridt        
+:)ridt(stsixe.htap.so ton fi        
+)ridt(ridkm.so            
+)(LMXekam.fles        
+)"atad-tset" ,ridt(nioj.htap.so = ridtset        
+:)ridtset(stsixe.htap.so ton fi        
+yrotcerid stset ekam #  )ridtset(ridkm.so            
+:selifni.fles ni p rof        
+]SOPHTAPI[p = htp            
+)]SOPLCI[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed            
+)tsed ,htp(elifypoc.lituhs            
+:seliftuo.fles ni p rof        
+]SOPLCO[p = htp            
+:"0" == ssapmarap.sgra.fles ro "TUODTS" == ]SOPLCOO[p fi            
+]SOPEMANO[p = htp                
+)]SOPEMANO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+)]SOPEMANO[p ,ridt(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+:esle            
+]SOPLCO[p = htp                
+)]SOPLCO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+)]SOPLCO[p ,ridt(nioj.htap.so = tsed                
+)tsed ,htp(elifypoc.lituhs                
+
+:0 > ezis_ts.)golt.fles(tats.so dna )golt.fles(stsixe.htap.so fi        
+))"txteliftuo_gol_1tset" ,ridtset(nioj.htap.so ,golt.fles(elifypoc.lituhs            
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi        
+))elifs.fles( % "s%" ,ridt(nioj.htap.so = emants            
+:)emants(stsixe.htap.so ton fi            
+)emants ,elifs.fles(elifypoc.lituhs                
+eman_loot.fles % 'lmx.s%' = laerx        
+)laerx,ridt(nioj.htap.so = tuox        
+)tuox ,laerx(elifypoc.lituhs        
+eman_loot.fles % "zgt.s%_yrotcafloot" = htaprat        
+)"zg:w" ,htaprat(nepo.elifrat = ft        
+)eman_loot.fles=emancra ,ridt=eman(dda.ft        
+)(esolc.ft        
+)loot_wen.sgra.fles ,htaprat(elifypoc.lituhs        
+)"txt.lmx_loot",laerx(elifypoc.lituhs        
+"ridpmet_troper_nur_FT" = ridper        
+:)ridper(stsixe.htap.so ton fi        
+)ridper(ridkm.so            
+]seliftuo.fles ni x rof ]SOPLCO[x[ = semantuoper        
+:stuo sa )'.'(ridnacs.so htiw        
+:stuo ni yrtne rof            
+:)(elif_si.yrtne ton ro )'zgt.'(htiwsdne.eman.yrtne fi                
+eunitnoc                    
+:semantuoper ni eman.yrtne fi                
+))eman.yrtne,ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs                    
+:eman_loot.fles % "lmx.s%" == eman.yrtne file                
+))"lmx_loot_wen",ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs                    
+lavter nruter        
+
+:)fles(nur fed    
+"""        
+htiaf eht htiw gnipeek m'I os daer rredts evisnefed siht evah sloot maetved emoS        
+.etadpu ot eerf leeF        
+"""        
+)lc.fles(rts % "s%=lc nur" = s        
+
+)s(gubed.gniggol        
+)lc.fles(nioj." " = lcs        
+enoN = rre        
+:"0" =! ssapmarap.sgra.fles fi        
+)"bw" ,gole.fles(nepo = ets            
+:tceriderlctsal.fles fi            
+(nepo = ots                
+"bw" ,]1[tceriderlctsal.fles                    
+elif tuptuo na fo eman si #  )                
+:esle            
+)"bw" ,golt.fles(nepo = ots                
+(etirw.ots                
+(setyb                    
+"n\s% = enil dnammoc detareneg yrotcaflooT gnitucexE ##"                        
+,lcs %                        
+,"8ftu"                        
+)                    
+)                
+)(hsulf.ots            
+)ets=rredts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p            
+)(esolc.ots            
+)(esolc.ets            
+)"br" ,gole.fles(nepo = rredts_pmt            
+"" = rre            
+6758401 = ezisffub            
+:yrt            
+:eurT elihw                
+))ezisffub(daer.rredts_pmt(rts =+ rre                    
+:0 =! ezisffub % )rre(nel ro rre ton fi                    
+kaerb                        
+:rorrEwolfrevO tpecxe            
+ssap                
+)(esolc.rredts_pmt            
+edocnruter.p = lavter            
+tuodts ot etirw dna nidts ekat taht stpircs elpmis fo esac laiceps dnuora krow #  :esle        
+)"br" ,]SOPHTAPI[]0[selifni.fles(nepo = its            
+)"bw" ,]SOPEMANO[]0[seliftuo.fles(nepo = ots            
+tcerider ot llehs esu tsum #            
+)its=nidts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p            
+edocnruter.p = lavter            
+)(esolc.ots            
+)(esolc.its            
+:0 == ezis_ts.)golt.fles(tats.so dna )golt.fles(elifsi.htap.so fi        
+)golt.fles(knilnu.so            
+:0 == ezis_ts.)gole.fles(tats.so dna )gole.fles(elifsi.htap.so fi        
+)gole.fles(knilnu.so            
+melborp #  :rre dna 0 =! edocnruter.p fi        
+)rre(etirw.rredts.sys            
+)"enod nur"(gubed.gniggol        
+lavter nruter        
+
+
+:)(niam fed
+"""    
+:sa lmx.loot esoprup laiceps a yb dellac eb ot stcepxe tI .repparw yxalaG a si sihT    
+"tpircsR" reterpretni-- "oof" eman_loot-- "htaPtpircs$" htap_tpircs-- yp.repparWtpircSesaBgr>"nohtyp"=reterpretni dnammoc<    
+>dnammoc/<    
+"""    
+)(resraPtnemugrA.esrapgra = resrap    
+tnemugra_dda.resrap = a    
+)""=tluafed ,"htap_tpircs--"(a    
+)enoN=tluafed ,"eman_loot--"(a    
+)enoN=tluafed ,"eman_reterpretni--"(a    
+)enoN=tluafed ,"noisrev_reterpretni--"(a    
+)enoN=tluafed ,"egakcap_exe--"(a    
+)enoN=tluafed ,"noisrev_egakcap_exe--"(a    
+)"dneppa"=noitca ,][=tluafed ,"selif_tupni--"(a    
+)"dneppa"=noitca ,][=tluafed ,"selif_tuptuo--"(a    
+)"nwonknU"=tluafed ,"liame_resu--"(a    
+)enoN=tluafed ,"resu_dab--"(a    
+)enoN=tluafed ,"looT_ekam--"(a    
+)enoN=tluafed ,"txet_pleh--"(a    
+)enoN=tluafed ,"csed_loot--"(a    
+)enoN=tluafed ,"noisrev_loot--"(a    
+)enoN=tluafed ,"snoitatic--"(a    
+)][=tluafed ,"dneppa"=noitca ,"sretemarap_lanoitidda--"(a    
+)eslaF=tluafed ,"eurt_erots"=noitca ,"sretemarap_lanoitidda_tide--"(a    
+)"lanoitisop"=tluafed ,"ssapmarap--"(a    
+)"tuoft/."=tluafed ,"tuoft--"(a    
+)"loot_wen"=tluafed ,"loot_wen--"(a    
+)enoN=tluafed ,"edomnur--"(a    
+)(sgra_esrap.resrap = sgra    
+( ,resu_dab.sgra ton tressa    
+'elif noitarugifnoc yxalaG eht ni "sresu_nimda" ot s% sdda nimda yxalaG litnu loot siht esu ot dezirohtua TON si s% :DESIROHTUANU'        
+)resu_dab.sgra ,resu_dab.sgra( %        
+)    
+( tressa    
+eman_loot.sgra        
+"qeSED=eman_loot-- ge - eman loot a stcepxe yrotcaF looT ##" ,)    
+( tressa    
+egakcap_exe.sgra ro eman_reterpretni.sgra        
+"egakcap elbatucexe na ro reterpretni na stcepxe repparw yrotcaF looT ##" ,)    
+( ro egakcap_exe.sgra tressa    
+)htap_tpircs.sgra(elifsi.htap.so dna 0 > )htap_tpircs.sgra(nel        
+"elbatucexe on fi R.oof=htap_tpircs-- ge - htap tpircs a stcepxe repparw yrotcaF looT ##" ,)    
+[ = selif_tupni.sgra    
+selif_tupni.sgra ni x rof )"" ,"'"(ecalper.)"" ,'"'(ecalper.x        
+]    
+smarap LC ni secaps htiw laed ot deen ew setouq evomer #    
+:)sretemarap_lanoitidda.sgra(etaremune ni x ,i rof    
+(ecalper.]i[sretemarap_lanoitidda.sgra = ]i[sretemarap_lanoitidda.sgra        
+"" ,'"'            
+)        
+)sgra(rennuRtpircS = r    
+:looT_ekam.sgra fi    
+)(ratlooTekam.r = edocter        
+:esle    
+)(nur.r = edocter        
+:edocter fi    
+rennur boj ot eruliaf etacidni #  )edocter(tixe.sys        
+
+
+:"__niam__" == __eman__ fi
+)(niam    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test-data/test1_log.txt	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,1 @@
+## Executing Toolfactory generated command line = python /home/ross/galaxy/database/tmp/pyrevposz9rx5n8f.python /home/ross/galaxy/database/objects/9/8/a/dataset_98a46be8-3a8f-4152-90ba-4a9e913f4eb4.dat output
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test1_log_outfiletxt	Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,1 @@
+## Executing Toolfactory generated command line = python /home/ross/galaxy/database/tmp/pyrevposygle0d43_python /home/ross/galaxy/database/objects/f/a/6/dataset_fa66be33-3c07-465d-be42-f2b0950b293d.dat output