-- Dakarun sealed loader (Lua/Luau). Paste into your executor and run. -- Signature is verified before anything executes. local _dkr_selfck = "2472787360" local _dkr_bridge = { getrenv = getrenv, getloadedmodules = getloadedmodules, fireclickdetector = fireclickdetector, getgenv = getgenv, setfpscap = setfpscap, loadstring = loadstring, setclipboard = setclipboard, getfpscap = getfpscap, toclipboard = toclipboard, identifyexecutor = identifyexecutor, isscriptable = isscriptable, islclosure = islclosure, getinstances = getinstances, workspace = workspace, getrunningscripts = getrunningscripts, getnilinstances = getnilinstances, game = game, setscriptable = setscriptable, gethui = gethui, hookfunction = hookfunction, getobjects = getobjects, http_get = httpget, request = request, iscclosure = iscclosure, newcclosure = newcclosure, httpget = httpget, shared = shared, fireproximityprompt = fireproximityprompt, } local _dkr_hostg = _G local _dkr_z0 = 30563984 local _dkr_z1 = 218494931 local _dkr_z2 = 482225572 local _dkr_schar, _dkr_ssub, _dkr_tconcat = string.char, string.sub, table.concat local _dkr_print = print if not (_dkr_schar and _dkr_ssub and _dkr_tconcat and string.byte) then error("Dakarun: runtime unavailable") end local _dkr_gi = debug and debug.getinfo if _dkr_gi then local _dkr_hookok = true local function _dkr_isc(f) local _dkr_i = _dkr_gi(f, "S") return _dkr_i and _dkr_i.what == "C" end if not (_dkr_isc(_dkr_tconcat) and _dkr_isc(_dkr_schar) and _dkr_isc(_dkr_ssub) and _dkr_isc(string.byte)) then _dkr_hookok = false end _dkr_isc = nil if not _dkr_hookok then error("Dakarun: environment mismatch") end end _dkr_gi = nil local _dkr_vm = (function() local dgh=-1 local dgi=0 local dgj=1 local dgk=2 local dgl=3 local dgm=4 local dgn=5 local dgo=6 local dgp=7 local dgq=8 local dgr=9 local dgs=10 local dgt=11 local dgu=12 local dgv=13 local dgw=14 local dgx=15 local dgy=16 local dgz=17 local dha=18 local dhb=19 local dhc=20 local dhd=21 local dhe=22 local dhf=23 local dhg=24 local dhh=25 local dhi=26 local dhj=27 local dhk=28 local dhl=29 local dhm=30 local dhn=31 local dho=32 local dhp=33 local dhq=34 local dhr=35 local dhs=36 local dht=37 local dhu=38 local dhv=39 local dhw=40 local dhx=41 local dhy=42 local dhz=43 local dia=dhz+1 local dib={kind='__mark'}local dic=64 local did=dic*12 local die=did/64 local dif=16 local function dig(dih,dii)local dij=dih[dii]+dih[dii+1]*256+dih[dii+2]*65536+dih[dii+3]*16777216 if dij>=2147483648 then dij=dij-4294967296 end return dij end local function dik(dil)if dil==nil then return'nil'end local dim=type(dil)if dim=='number'then return'number'elseif dim=='string'then return'string'elseif dim=='boolean'then return'boolean'elseif dim=='userdata'then return'userdata'end if dim=='table'then local din=dil.kind if din=='table'then return'table'elseif din=='__mark'then return'mark'end return'table'end return'function'end local function dio(dip)return dip==nil or dip==false end local function diq(dir)if dir==math.huge then return'inf'elseif dir==-math.huge then return'-inf'elseif dir~=dir then return'-nan'end return tostring(dir)end local function dis(dit)if dit==nil then return'nil'end local diu=type(dit)if diu=='number'then return diq(dit)elseif diu=='string'then return dit elseif diu=='boolean'then return dit and'true'or'false'elseif diu=='userdata'then return tostring(dit)elseif diu=='table'then local div=dit.kind if div=='table'then return'table'elseif div=='__mark'then return'mark'end return tostring(dit)end return'function'end local function diw(dix)if type(dix)=='number'then return dix end if type(dix)=='string'then if dix:match('^%s*$')then return nil end return tonumber(dix)end return nil end local function diy(diz,dja)if dik(diz)~=dik(dja)then return false end return diz==dja end local function djb(djc)local djd=type(djc)if djd=='string'then return's:'..djc elseif djd=='number'then return'n:'..diq(djc)elseif djd=='boolean'then return'b:'..(djc and'true'or'false')end error('table index is '..dik(djc),0)end local function dje(djf)local djg=djf:sub(1,2)local djh=djf:sub(3)if djg=='n:'then return tonumber(djh)elseif djg=='b:'then return djh=='true'end return djh end local function dji(djj)return type(djj)=='table'and djj.kind=='table'end local function djk(djl,djm)local djn=djl.n+1 djl.n=djn djl[djn]=djm return djl end local function djo(djp,djq)local djr={n=0}for djs=djq,djp.n do djk(djr,djp[djs])end return djr end local djt={}djt.__index=djt local dju function djt.new(djv,djw,djx,djy,djz)local dka=djv.m if#dka~=dia then error('bad opcode map',0)end local dkb={}for dkc=0,dia-1 do dkb[dka[dkc+1]+1]=dkc end local self=setmetatable({},djt)self.inv=dkb self.protos=djv.p self.stack={}self.sp=0 self.frames={}self.output={}self.globals={}local dkd={}for dke,dkf in ipairs(djv.p)do if dkf.code~=nil then dkd[dkf]={plain=dkf.code}else local dkg=dke-1 local dkh={}for dki=1,dif do dkh[#dkh+1]={idx=-1,dec={},last=0}end dkd[dkf]={cb=dkf.cb,cbn=dkf.cbn,n=dkf.ncode,nonce={dkg%256,math.floor(dkg/256)%256,math.floor(dkg/65536)%256,math.floor(dkg/16777216)%256,0,0,0,0,0,0,0,0,},key=djy,tick=0,loads=0,slots=dkh,xor=djz,}end end self.readers=dkd installBuiltins(self)if djw~=nil then dju(self,djw,djx)end return self end function djt:fetch(dkj,dkk)if dkj.plain then local dkl=dkj.plain[dkk+1]if not dkl then return nil end return dkl[1],dkl[2],dkl[3]end if dkk<0 or dkk>=dkj.n then return nil end local dkm=math.floor(dkk/dic)local dkn=dkj.slots local dko,dkp=nil,dkn[1]for dkq=1,#dkn do local dkr=dkn[dkq]if dkr.idx==dkm then dko=dkr break end if dkr.lastdkj.cbn then dkv=dkj.cbn-dku end local dkw=dkj.cb local dkx={}for dky=1,dkv do dkx[dky]=dkw[dku+dky]end local dkz=dkj.xor(dkj.key,dkj.nonce,dkx,dkv,dkm*die)for dla=1,dkv do dkx[dla]=0 end local dlb=0 for dlc=0,dkv-12,12 do dks[dlb+1]=dig(dkz,dlc+1)dks[dlb+2]=dig(dkz,dlc+5)dks[dlb+3]=dig(dkz,dlc+9)dlb=dlb+3 end for dld=1,dkv do dkz[dld]=0 end dko.idx=dkm dkj.loads=dkj.loads+1 end dkj.tick=dkj.tick+1 dko.last=dkj.tick local dle=(dkk%dic)*3 local dlf=dko.dec return dlf[dle+1],dlf[dle+2],dlf[dle+3]end function djt:push(dlg)local dlh=self.sp+1 self.sp=dlh self.stack[dlh]=dlg end function djt:pop()local dli=self.sp if dli==0 then self:fail('stack underflow')end local dlj=self.stack[dli]self.stack[dli]=nil self.sp=dli-1 return dlj end function djt:boxOf(dlk,dll)local dlm=dlk.boxes[dll+1]if dlm==nil then dlm={v=nil}dlk.boxes[dll+1]=dlm end return dlm end function djt:currentLine()local dln=self.frames[#self.frames]if not dln then return nil end return dln.proto.lines[dln.pc+1]end function djt:fail(dlo)local dlp=self:currentLine()if dlp~=nil then error('line '..dlp..': '..dlo,0)else error(dlo,0)end end function djt:popToMark()local dlq={n=0}while true do local dlr=self:pop()if dlr==dib then break end dlq.n=dlq.n+1 dlq[dlq.n]=dlr end local dls=dlq.n for dlt=1,math.floor(dls/2)do local dlu=dls-dlt+1 dlq[dlt],dlq[dlu]=dlq[dlu],dlq[dlt]end return dlq end function djt:pushFrame(dlv,dlw,dlx)local dly=dlv.proto local dlz={}for dma=1,dly.nparams do local dmb=nil if dma<=dlw.n then dmb=dlw[dma]end dlz[dma]={v=dmb}end local dmc={n=0}if dly.vararg then for dmd=dly.nparams+1,dlw.n do djk(dmc,dlw[dmd])end end self.frames[#self.frames+1]={closure=dlv,proto=dly,reader=self.readers[dly],pc=0,base=self.sp,boxes=dlz,varargs=dmc,nwant=dlx,}end function djt:callValue(dme,dmf,dmg)local dmh=type(dme)=='table'and dme.kind or nil if dmh=='closure'then self:pushFrame(dme,dmf,dmg)return end if dmh=='builtin'then local dmi=dme.fn(self,dmf)local dmj=dmi.n or#dmi if dmg==dgh then for dmk=1,dmj do self:push(dmi[dmk])end else for dml=1,dmg do if dml<=dmj then self:push(dmi[dml])else self:push(nil)end end end return end if type(dme)=='function'then self:callHost(dme,dmf,dmg)return end self:fail('attempt to call a '..dik(dme)..' value')end function djt:doReturn(dmm)local dmn=self.frames[#self.frames]self.frames[#self.frames]=nil if#self.frames==0 then return end for dmo=self.sp,dmn.base+1,-1 do self.stack[dmo]=nil end self.sp=dmn.base local dmp=dmm.n or#dmm if dmn.nwant==dgh then for dmq=1,dmp do self:push(dmm[dmq])end else for dmr=1,dmn.nwant do if dmr<=dmp then self:push(dmm[dmr])else self:push(nil)end end end end function djt:run(dms)while#self.frames>dms do self:step()end end function djt:protectedCall(dmt,dmu)local dmv=type(dmt)=='table'and dmt.kind or nil if dmv~='closure'and dmv~='builtin'then return{ok=false,vals={n=1,'attempt to call a '..dik(dmt)..' value'}}end local dmw=#self.frames local dmx=self.sp local dmy,dmz=pcall(function()self:callValue(dmt,dmu,dgh)self:run(dmw)end)if not dmy then for dna=#self.frames,dmw+1,-1 do self.frames[dna]=nil end for dnb=self.sp,dmx+1,-1 do self.stack[dnb]=nil end self.sp=dmx local dnc=type(dmz)=='string'and dmz or('error: '..tostring(dmz))return{ok=false,vals={n=1,dnc}}end local dnd={n=0}for dne=dmx+1,self.sp do djk(dnd,self.stack[dne])end for dnf=self.sp,dmx+1,-1 do self.stack[dnf]=nil end self.sp=dmx return{ok=true,vals=dnd}end function djt:getIndex(dng,dnh)if dji(dng)then if type(dnh)=='number'and dnh==math.floor(dnh)and dnh>=1 then return dng.arr[dnh]end return dng.map[djb(dnh)]end if type(dng)=='table'or type(dng)=='userdata'then return dng[dnh]end if type(dng)=='string'then local dni=self.globals.string if type(dni)=='table'then local dnj=dni[dnh]if dnj~=nil then return dnj end end self:fail('attempt to index a string value')end self:fail('attempt to index a '..dik(dng)..' value')end function djt:setIndex(dnk,dnl,dnm)if dji(dnk)then if type(dnl)=='number'and dnl==math.floor(dnl)and dnl>=1 then dnk.arr[dnl]=dnm if dnl>dnk.len then dnk.len=dnl end return end local dnn=djb(dnl)if dnm==nil then dnk.map[dnn]=nil else dnk.map[dnn]=dnm end return end if type(dnk)=='table'or type(dnk)=='userdata'then dnk[dnl]=self:toHost(dnm)return end self:fail('attempt to index a '..dik(dnk)..' value')end function djt:step()local dno=self.frames[#self.frames]local dnp,dnq,dnr=self:fetch(dno.reader,dno.pc)dno.pc=dno.pc+1 if dnp==nil then self:fail('program counter out of range')end local dns=self.inv[dnp+1]local dnt=self.stack if dns==dgi then self:push(dno.proto.consts[dnq+1])elseif dns==dgj then self:push(self:boxOf(dno,dnq).v)elseif dns==dgk then self:boxOf(dno,dnq).v=self:pop()elseif dns==dgl then local dnu=dno.closure.upvals[dnq+1]if not dnu then self:fail('bad upvalue '..dnq)end self:push(dnu.v)elseif dns==dgm then local dnv=dno.closure.upvals[dnq+1]if not dnv then self:fail('bad upvalue '..dnq)end dnv.v=self:pop()elseif dns==dgn then self:push(self.globals[dno.proto.consts[dnq+1]])elseif dns==dgo then self.globals[dno.proto.consts[dnq+1]]=self:pop()elseif dns==dhw then self:boxOf(dno,dnr).v=dno.proto.consts[dnq+1]elseif dns==dgp or dns==dgq or dns==dgr or dns==dgs or dns==dgt or dns==dgu then local dnw=self:pop()local dnx=self:pop()if type(dnx)=='number'and type(dnw)=='number'then if dns==dgp then self:push(dnx+dnw)elseif dns==dgq then self:push(dnx-dnw)elseif dns==dgr then self:push(dnx*dnw)elseif dns==dgs then self:push(dnx/dnw)elseif dns==dgt then self:push(dnx-math.floor(dnx/dnw)*dnw)else self:push(dnx^dnw)end else local dny=diw(dnx)local dnz=diw(dnw)if dny==nil then self:fail('attempt to perform arithmetic on a '..dik(dnx)..' value')end if dnz==nil then self:fail('attempt to perform arithmetic on a '..dik(dnw)..' value')end if dns==dgp then self:push(dny+dnz)elseif dns==dgq then self:push(dny-dnz)elseif dns==dgr then self:push(dny*dnz)elseif dns==dgs then self:push(dny/dnz)elseif dns==dgt then self:push(dny-math.floor(dny/dnz)*dnz)else self:push(dny^dnz)end end elseif dns==dhx or dns==dhy or dns==dhz then local doa=self:boxOf(dno,dnq).v local dob=self:boxOf(dno,dnr).v if type(doa)=='number'and type(dob)=='number'then if dns==dhx then self:push(doa+dob)elseif dns==dhy then self:push(doa-dob)else self:push(doa*dob)end else local doc=diw(doa)local dod=diw(dob)if doc==nil then self:fail('attempt to perform arithmetic on a '..dik(doa)..' value')end if dod==nil then self:fail('attempt to perform arithmetic on a '..dik(dob)..' value')end if dns==dhx then self:push(doc+dod)elseif dns==dhy then self:push(doc-dod)else self:push(doc*dod)end end elseif dns==dgv then local doe=self:pop()if type(doe)=='number'then self:push(-doe)else local dof=diw(doe)if dof==nil then self:fail('attempt to perform arithmetic on a '..dik(doe)..' value')end self:push(-dof)end elseif dns==dgw then local dog=self:pop()local doh=self:pop()local doi,doj=type(doh),type(dog)if(doi~='string'and doi~='number')or(doj~='string'and doj~='number')then local dok=(doi~='string'and doi~='number')and dik(doh)or dik(dog)self:fail('attempt to concatenate a '..dok..' value')end self:push(dis(doh)..dis(dog))elseif dns==dgx then local dol=self:pop()if type(dol)=='string'then self:push(#dol)elseif dji(dol)then self:push(dol.len)elseif type(dol)=='table'then self:push(#dol)else self:fail('attempt to get length of a '..dik(dol)..' value')end elseif dns==dgy then self:push(dio(self:pop()))elseif dns==dgz then local dom=self:pop()local don=self:pop()self:push(diy(don,dom))elseif dns==dha or dns==dhb then local doo=self:pop()local dop=self:pop()local doq,dor=type(dop),type(doo)if doq=='number'and dor=='number'then self:push((dns==dha and dop1 then local dqm=diw(dqk[2])if type(dql)=='string'and dqm~=nil then local dqn=dql:match('^%s*(.-)%s*$')local dqo=tonumber(dqn,dqm)return dpw(dqo)end return dpw(nil)end local dqp=diw(dql)return dpw(dqp)end)dqa.pairs=dpt('pairs',function(dqq,dqr)local dqs=dqr[1]local dqt={n=0}local dqu if dji(dqs)then for dqv=1,dqs.len do if dqs.arr[dqv]~=nil then djk(dqt,dqv)end end for dqw in pairs(dqs.map)do djk(dqt,dje(dqw))end dqu=function(dqx)local dqy=nil if type(dqx)=='number'then dqy=dqs.arr[dqx]end if dqy==nil then dqy=dqs.map[djb(dqx)]end return dqy end elseif type(dqs)=='table'then for dqz in pairs(dqs)do djk(dqt,dqz)end dqu=function(dra)return dqs[dra]end else dqq:fail("bad argument #1 to 'pairs' (table expected, got "..dik(dqs)..")")end local drb={i=0}return dpw(dpt('pairsnext',function()drb.i=drb.i+1 if drb.i>dqt.n then return dpy()end local drc=dqt[drb.i]return{n=2,drc,dqu(drc)}end))end)dqa.ipairs=dpt('ipairs',function(drd,dre)local drf=dre[1]local drg if dji(drf)then drg=function(drh)return drf.arr[drh]end elseif type(drf)=='table'then drg=function(dri)return drf[dri]end else drd:fail("bad argument #1 to 'ipairs' (table expected, got "..dik(drf)..")")end local drj={i=1}return dpw(dpt('ipairsnext',function()local drk=drg(drj.i)if drk==nil then return dpy()end local drl=drj.i drj.i=drj.i+1 return{n=2,drl,drk}end))end)dqa.error=dpt('error',function(drm,drn)local dro=drn[1]error(dro==nil and'error'or dis(dro),0)end)dqa.assert=dpt('assert',function(drp,drq)local drr=drq[1]if dio(drr)then error(drq.n>1 and dis(drq[2])or'assertion failed!',0)end return dpw(drr)end)dqa.select=dpt('select',function(drs,drt)local dru=drt[1]local drv=drt.n-1 if dru=='#'then return dpw(drv)end local drw=diw(dru)if drw==nil or drw~=math.floor(drw)then drs:fail("bad argument #1 to 'select' (number expected, got "..dik(dru)..")")end if drw<1 or drw>drv+1 then drs:fail("bad argument #1 to 'select' (index out of range)")end local drx={n=0}for dry=drw,drv do djk(drx,drt[dry+1])end return drx end)dqa.unpack=dpt('unpack',function(drz,dsa)local dsb=dsa[1]if not dji(dsb)then drz:fail("bad argument #1 to 'unpack' (table expected, got "..dik(dsb)..")")end local dsc=(dsa.n>1)and diw(dsa[2])or 1 local dsd=(dsa.n>2)and diw(dsa[3])or dsb.len dsc=(dsc==nil)and 1 or math.floor(dsc)dsd=(dsd==nil)and dsb.len or math.floor(dsd)local dse={n=0}for dsf=dsc,dsd do djk(dse,dsb.arr[dsf])end return dse end)dqa.pcall=dpt('pcall',function(dsg,dsh)local dsi=dsg:protectedCall(dsh[1],djo(dsh,2))local dsj={n=0}djk(dsj,dsi.ok)for dsk=1,dsi.vals.n do djk(dsj,dsi.vals[dsk])end return dsj end)dqa.xpcall=dpt('xpcall',function(dsl,dsm)local dsn=dsm[1]local dso=dsm[2]local dsp=type(dsn)=='table'and dsn.kind or nil local dsq=type(dso)=='table'and dso.kind or nil if dsp~='closure'and dsp~='builtin'then dsl:fail("bad argument #1 to 'xpcall' ("..dik(dsn).." expected function)")end if dsq~='closure'and dsq~='builtin'then dsl:fail("bad argument #2 to 'xpcall' ("..dik(dso).." expected function)")end local dsr=dsl:protectedCall(dsn,djo(dsm,3))if dsr.ok then local dss={n=0}djk(dss,true)for dst=1,dsr.vals.n do djk(dss,dsr.vals[dst])end return dss end local dsu=dsr.vals[1]local dsv=#dsl.frames local dsw=dsl.sp local dsx,dsy=pcall(function()dsl:callValue(dso,{n=1,dsu},dgh)dsl:run(dsv)end)if not dsx then for dsz=#dsl.frames,dsv+1,-1 do dsl.frames[dsz]=nil end for dta=dsl.sp,dsw+1,-1 do dsl.stack[dta]=nil end dsl.sp=dsw error(type(dsy)=='string'and dsy or tostring(dsy),0)end local dtb={n=0}for dtc=dsw+1,dsl.sp do djk(dtb,dsl.stack[dtc])end for dtd=dsl.sp,dsw+1,-1 do dsl.stack[dtd]=nil end dsl.sp=dsw return{n=2,false,dtb[1]}end)do local dte=string local dtf=table local function dtg(dth,dti,dtj)if type(dth)~='string'then dth=tostring(dth)end dti=tonumber(dti)if dti==nil then error("bad argument #2 to 'rep' (number expected)",2)end dti=math.floor(dti)if dti<1 then return''end if dtj==nil or dtj==''then return dte.rep(dth,dti)end if type(dtj)~='string'then dtj=tostring(dtj)end local dtk={}for dtl=1,dti do dtk[dtl]=dth end return dtf.concat(dtk,dtj)end dqa.string={byte=dte.byte,char=dte.char,find=dte.find,format=dte.format,gmatch=dte.gmatch,gsub=dte.gsub,len=dte.len,lower=dte.lower,match=dte.match,rep=dtg,reverse=dte.reverse,sub=dte.sub,upper=dte.upper,}end end dju=function(dtm,dtn,dto)local dtp=dtm.globals dtp.getgenv=dpt('getgenv',function(dtq,dtr)return dpw(dtq.globals)end)dtp.getrenv=dpt('getrenv',function(dts,dtt)return dpw(dto)end)for dtu,dtv in pairs(dtn)do if dtu~='getgenv'and dtu~='getrenv'and dtp[dtu]==nil and dtv~=nil then dtp[dtu]=dtv end end end local function dtw(...)return{n=select('#',...),...}end function djt:toHost(dtx,dty)if type(dtx)~='table'then return dtx end local dtz=dtx.kind if dtz=='table'then dty=dty or{}if dty[dtx]then return dty[dtx]end local dua={}dty[dtx]=dua for dub=1,dtx.len do if dtx.arr[dub]~=nil then dua[dub]=self:toHost(dtx.arr[dub],dty)end end for duc,dud in pairs(dtx.map)do dua[self:toHost(dje(duc),dty)]=self:toHost(dud,dty)end return dua elseif dtz=='closure'or dtz=='builtin'then local due=self local duf=dtx return function(...)local dug=select('#',...)local duh={n=dug}for dui=1,dug do duh[dui]=due:toVM(select(dui,...))end local duj=due:protectedCall(duf,duh)if not duj.ok then error(duj.vals[1],0)end local duk=table.unpack or unpack return duk(duj.vals,1,duj.vals.n)end end return dtx end function djt:toVM(dul)return dul end function djt:callHost(dum,dun,duo)local dup={}for duq=1,dun.n do dup[duq]=self:toHost(dun[duq])end local dur=table.unpack or unpack local dus,dut=pcall(function()return dtw(dum(dur(dup,1,dun.n)))end)if not dus then self:fail(dut)end local duu=dut.n if duo==dgh then for duv=1,duu do self:push(dut[duv])end else for duw=1,duo do if duw<=duu then self:push(dut[duw])else self:push(nil)end end end end local function dux(duy,duz,dva,dvb,dvc)local dvd=djt.new(duy,duz,dva,dvb,dvc)local dve={kind='closure',proto=duy.p[1],upvals={}}dvd:pushFrame(dve,{n=0},0)local dvf,dvg=pcall(dvd.run,dvd,0)local dvh=dvd.output for dvi,dvj in pairs(dvd.readers)do if dvj.slots then for dvk,dvl in ipairs(dvj.slots)do for dvm=1,#dvl.dec do dvl.dec[dvm]=0 end dvl.idx=-1 end end end if not dvf then error(dvg,0)end return dvh end return{VM=djt,execute=dux,MULTRET=dgh,OP_COUNT=dia,typeOf=dik,} end)() local _dkr_ed = (function() local bjf=4294967296 local bjg,bjh,bji,bjj,bjk,bjl if type(bit32)=='table'then bjg=bit32.bxor bjh=bit32.band bji=bit32.bor bjj=bit32.bnot bjk=bit32.rshift bjl=bit32.lshift else local function bjm(bjn)return function(bjo,bjp)local bjq,bjr=0,1 for bjs=1,32 do local bjt,bju=bjo%2,bjp%2 if bjn(bjt,bju)then bjq=bjq+bjr end bjo=(bjo-bjt)/2 bjp=(bjp-bju)/2 bjr=bjr*2 end return bjq end end bjg=bjm(function(bjv,bjw)return bjv~=bjw end)bjh=bjm(function(bjx,bjy)return bjx==1 and bjy==1 end)bji=bjm(function(bjz,bka)return bjz==1 or bka==1 end)bjj=function(bkb)return 4294967295-bkb end bjk=function(bkc,bkd)return math.floor(bkc/(2^bkd))end bjl=function(bke,bkf)if bkf==0 then return bke end return(bke%(2^(32-bkf)))*(2^bkf)end end local function bkg(bkh,bki)return{h=bkh%bjf,l=bki%bjf}end local function bkj(bkk,bkl)local bkm=bkk.l+bkl.l local bkn=0 if bkm>=bjf then bkm=bkm-bjf;bkn=1 end local bko=bkk.h+bkl.h+bkn if bko>=bjf then bko=bko-bjf end return{h=bko,l=bkm}end local function bkp(bkq,bkr)return{h=bjg(bkq.h,bkr.h),l=bjg(bkq.l,bkr.l)}end local function bks(bkt,bku)return{h=bjh(bkt.h,bku.h),l=bjh(bkt.l,bku.l)}end local function bkv(bkw)return{h=bjj(bkw.h),l=bjj(bkw.l)}end local function bkx(bky,bkz)bkz=bkz%64 if bkz==0 then return{h=bky.h,l=bky.l}end if bkz==32 then return{h=bky.l,l=bky.h}end if bkz<32 then return{h=bji(bjk(bky.h,bkz),bjl(bky.l,32-bkz)),l=bji(bjk(bky.l,bkz),bjl(bky.h,32-bkz)),}end local bla=bkz-32 return{h=bji(bjk(bky.l,bla),bjl(bky.h,32-bla)),l=bji(bjk(bky.h,bla),bjl(bky.l,32-bla)),}end local function blb(blc,bld)return{h=bjk(blc.h,bld),l=bji(bjk(blc.l,bld),bjl(blc.h,32-bld)),}end local function ble(blf,blg,blh)return bkp(bks(blf,blg),bks(bkv(blf),blh))end local function bli(blj,bll,blm)return bkp(bkp(bks(blj,bll),bks(blj,blm)),bks(bll,blm))end local function bln(blo)return bkp(bkp(bkx(blo,28),bkx(blo,34)),bkx(blo,39))end local function blp(blq)return bkp(bkp(bkx(blq,14),bkx(blq,18)),bkx(blq,41))end local function blr(bls)return bkp(bkp(bkx(bls,1),bkx(bls,8)),blb(bls,7))end local function blt(blu)return bkp(bkp(bkx(blu,19),bkx(blu,61)),blb(blu,6))end local blv={'428a2f98d728ae22','7137449123ef65cd','b5c0fbcfec4d3b2f','e9b5dba58189dbbc','3956c25bf348b538','59f111f1b605d019','923f82a4af194f9b','ab1c5ed5da6d8118','d807aa98a3030242','12835b0145706fbe','243185be4ee4b28c','550c7dc3d5ffb4e2','72be5d74f27b896f','80deb1fe3b1696b1','9bdc06a725c71235','c19bf174cf692694','e49b69c19ef14ad2','efbe4786384f25e3','0fc19dc68b8cd5b5','240ca1cc77ac9c65','2de92c6f592b0275','4a7484aa6ea6e483','5cb0a9dcbd41fbd4','76f988da831153b5','983e5152ee66dfab','a831c66d2db43210','b00327c898fb213f','bf597fc7beef0ee4','c6e00bf33da88fc2','d5a79147930aa725','06ca6351e003826f','142929670a0e6e70','27b70a8546d22ffc','2e1b21385c26c926','4d2c6dfc5ac42aed','53380d139d95b3df','650a73548baf63de','766a0abb3c77b2a8','81c2c92e47edaee6','92722c851482353b','a2bfe8a14cf10364','a81a664bbc423001','c24b8b70d0f89791','c76c51a30654be30','d192e819d6ef5218','d69906245565a910','f40e35855771202a','106aa07032bbd1b8','19a4c116b8d2d0c8','1e376c085141ab53','2748774cdf8eeb99','34b0bcb5e19b48a8','391c0cb3c5c95a63','4ed8aa4ae3418acb','5b9cca4f7763e373','682e6ff3d6b2b8a3','748f82ee5defb2fc','78a5636f43172f60','84c87814a1f0ab72','8cc702081a6439ec','90befffa23631e28','a4506cebde82bde9','bef9a3f7b2c67915','c67178f2e372532b','ca273eceea26619c','d186b8c721c0c207','eada7dd6cde0eb1e','f57d4f7fee6ed178','06f067aa72176fba','0a637dc5a2c898a6','113f9804bef90dae','1b710b35131c471b','28db77f523047d84','32caab7b40c72493','3c9ebe0a15c9bebc','431d67c49c100d4c','4cc5d4becb3e42b6','597f299cfc657e2a','5fcb6fab3ad6faec','6c44198c4a475817',}local blw={}for blx=1,80 do local bly=blv[blx]blw[blx]=bkg(tonumber(bly:sub(1,8),16),tonumber(bly:sub(9,16),16))end local blz={'6a09e667f3bcc908','bb67ae8584caa73b','3c6ef372fe94f82b','a54ff53a5f1d36f1','510e527fade682d1','9b05688c2b3e6c1f','1f83d9abfb41bd6b','5be0cd19137e2179',}local function bma(bmb)local bmc=#bmb local bmd=(bmc*8)%bjf local bme=math.floor(bmc/536870912)local bmf=128-((bmc+1+16)%128)if bmf==128 then bmf=0 end local bmg=bmc+1+bmf+16 local bmh={}for bmi=1,bmc do bmh[bmi]=bmb:byte(bmi)end bmh[bmc+1]=128 for bmj=bmc+2,bmc+1+bmf do bmh[bmj]=0 end for bmk=1,8 do bmh[bmc+1+bmf+bmk]=0 end bmh[bmg-7]=math.floor(bme/16777216)%256 bmh[bmg-6]=math.floor(bme/65536)%256 bmh[bmg-5]=math.floor(bme/256)%256 bmh[bmg-4]=bme%256 bmh[bmg-3]=math.floor(bmd/16777216)%256 bmh[bmg-2]=math.floor(bmd/65536)%256 bmh[bmg-1]=math.floor(bmd/256)%256 bmh[bmg]=bmd%256 local bml={}for bmm=1,8 do local bmn=blz[bmm]bml[bmm]=bkg(tonumber(bmn:sub(1,8),16),tonumber(bmn:sub(9,16),16))end local bmo={}for bmp=0,bmg/128-1 do local bmq=bmp*128 for bmr=1,16 do local bms=bmq+(bmr-1)*8 local bmt=bmh[bms+1]*16777216+bmh[bms+2]*65536+bmh[bms+3]*256+bmh[bms+4]local bmu=bmh[bms+5]*16777216+bmh[bms+6]*65536+bmh[bms+7]*256+bmh[bms+8]bmo[bmr]=bkg(bmt,bmu)end for bmv=17,80 do bmo[bmv]=bkj(bkj(blt(bmo[bmv-2]),bmo[bmv-7]),bkj(blr(bmo[bmv-15]),bmo[bmv-16]))end local bmw,bmx,bmy,bmz,bna,bnb,bnc,bnd=bml[1],bml[2],bml[3],bml[4],bml[5],bml[6],bml[7],bml[8]for bne=1,80 do local bnf=bkj(bkj(bkj(bkj(bnd,blp(bna)),ble(bna,bnb,bnc)),blw[bne]),bmo[bne])local bng=bkj(bln(bmw),bli(bmw,bmx,bmy))bnd=bnc;bnc=bnb;bnb=bna;bna=bkj(bmz,bnf)bmz=bmy;bmy=bmx;bmx=bmw;bmw=bkj(bnf,bng)end bml[1]=bkj(bml[1],bmw)bml[2]=bkj(bml[2],bmx)bml[3]=bkj(bml[3],bmy)bml[4]=bkj(bml[4],bmz)bml[5]=bkj(bml[5],bna)bml[6]=bkj(bml[6],bnb)bml[7]=bkj(bml[7],bnc)bml[8]=bkj(bml[8],bnd)end local bnh={}for bni=1,8 do local bnj=bml[bni]bnh[#bnh+1]=string.char(math.floor(bnj.h/16777216)%256,math.floor(bnj.h/65536)%256,math.floor(bnj.h/256)%256,bnj.h%256,math.floor(bnj.l/16777216)%256,math.floor(bnj.l/65536)%256,math.floor(bnj.l/256)%256,bnj.l%256)end return table.concat(bnh)end local function bnk()return{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}end local function bnl(bnm)local bnn=bnk()for bno=1,16 do bnn[bno]=bnm[bno]end return bnn end local bnp={65517,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,32767}local function bnq(bnr)for bns=1,4 do for bnt=1,16 do local bnu=bnr[bnt]if bnu>=65536 or bnu<0 then local bnv=math.floor(bnu/65536)bnr[bnt]=bnu-bnv*65536 if bnt==16 then bnr[1]=bnr[1]+bnv*38 else bnr[bnt+1]=bnr[bnt+1]+bnv end end end end local bnw=math.floor(bnr[16]/32768)bnr[16]=bnr[16]-bnw*32768 bnr[1]=bnr[1]+bnw*19 for bnx=1,3 do local bny=bnr[bnx]if bny>=65536 then local bnz=math.floor(bny/65536)bnr[bnx]=bny-bnz*65536 bnr[bnx+1]=bnr[bnx+1]+bnz end end local boa={}for bob=1,4 do local boc=0 for bod=1,16 do local boe=bnr[bod]-bnp[bod]-boc if boe<0 then boe=boe+65536;boc=1 else boc=0 end boa[bod]=boe end if boc==0 then for bof=1,16 do bnr[bof]=boa[bof]end else break end end return bnr end local function bog(boh,boi)local boj=bnk()for bok=1,16 do boj[bok]=boh[bok]+boi[bok]end return bnq(boj)end local function bol(bom,bon)local boo=bnk()for bop=1,16 do boo[bop]=bom[bop]-bon[bop]end return bnq(boo)end local function boq(bos,bot)local bou={}for bov=1,32 do bou[bov]=0 end for bow=1,16 do local box=bos[bow]if box~=0 then for boy=1,16 do bou[bow+boy-1]=bou[bow+boy-1]+box*bot[boy]end end end for boz=32,17,-1 do local bpa=bou[boz]if bpa~=0 then bou[boz-16]=bou[boz-16]+bpa*38 bou[boz]=0 end end local bpb=bnk()for bpc=1,16 do bpb[bpc]=bou[bpc]end return bnq(bpb)end local function bpd(bpe)return boq(bpe,bpe)end local function bpf(bpg)local bph=bnl(bpg)bnq(bph)for bpi=1,16 do if bph[bpi]~=0 then return false end end return true end local function bpj(bpk,bpl)local bpm=bnl(bpk)local bpn=bnl(bpl)bnq(bpm)bnq(bpn)for bpo=1,16 do if bpm[bpo]~=bpn[bpo]then return false end end return true end local function bpp(bpq,bpr)local bps=bnk()bps[1]=1 for bpt=1,#bpr do bps=bpd(bps)if bpr[bpt]==1 then bps=boq(bps,bpq)end end return bps end local bpu={}for bpv=254,0,-1 do if bpv>=5 then bpu[#bpu+1]=1 elseif bpv==3 or bpv==1 or bpv==0 then bpu[#bpu+1]=1 else bpu[#bpu+1]=0 end end local bpw={}for bpx=251,0,-1 do bpw[#bpw+1]=(bpx==0)and 0 or 1 end local bpy={}for bpz=252,0,-1 do if bpz>=3 then bpy[#bpy+1]=1 elseif bpz==3 or bpz==1 or bpz==0 then bpy[#bpy+1]=1 else bpy[#bpy+1]=0 end end local function bqa(bqb)return bpp(bqb,bpu)end local function bqc(bqd)if#bqd~=32 then return nil end local bqe={bqd:byte(1,32)}if bqe[32]>=128 then return nil end if bqe[32]==127 then local bqf=true for bqg=2,31 do if bqe[bqg]~=255 then bqf=false;break end end if bqf and bqe[1]>=236 then return nil end end local bqh=bnk()for bqi=1,16 do bqh[bqi]=bqe[2*bqi-1]+bqe[2*bqi]*256 end return bqh end local function bqj(bqk)local bql=bnl(bqk)bnq(bql)local bqm={}for bqn=1,16 do bqm[#bqm+1]=string.char(bql[bqn]%256,math.floor(bql[bqn]/256)%256)end return table.concat(bqm)end local function bqo(bqp)local bqq=bnk()bqq[1]=bqp%65536 bqq[2]=math.floor(bqp/65536)%65536 return bqq end local bqr=bol(bnk(),boq(bqo(121665),bqa(bqo(121666))))local bqs=bog(bqr,bqr)local bqt=bpp(bqo(2),bpy)local function bqu(bqv,bqw,bqx,bqy)return{X=bqv,Y=bqw,Z=bqx,T=bqy}end local function bqz()local bra=bnk()local brb=bnk()brb[1]=1 return bqu(bra,bnl(brb),bnl(brb),bnk())end local function brc(brd,bre)local brf=boq(bol(brd.Y,brd.X),bol(bre.Y,bre.X))local brg=boq(bog(brd.Y,brd.X),bog(bre.Y,bre.X))local brh=boq(boq(brd.T,bqs),bre.T)local bri=bog(boq(brd.Z,bre.Z),boq(brd.Z,bre.Z))local brj=bol(brg,brf)local brk=bol(bri,brh)local brl=bog(bri,brh)local brm=bog(brg,brf)return bqu(boq(brj,brk),boq(brl,brm),boq(brk,brl),boq(brj,brm))end local function brn(bro,brp)return bpj(boq(bro.X,brp.Z),boq(brp.X,bro.Z))and bpj(boq(bro.Y,brp.Z),boq(brp.Y,bro.Z))end local function brq(brr,brs)local brt=bqz()for bru=32,1,-1 do local brv=brr:byte(bru)for brw=7,0,-1 do brt=brc(brt,brt)if math.floor(brv/(2^brw))%2==1 then brt=brc(brt,brs)end end end return brt end local function brx(bry)local brz=bqa(bry.Z)local bsa=boq(bry.X,brz)local bsb=boq(bry.Y,brz)local bsc=bqj(bsb)local bsd=bqj(bsa)local bse=bsd:byte(1)%2 local bsf=bsc:byte(32)bsc=bsc:sub(1,31)..string.char(bsf+(bse==1 and 128 or 0))return bsc end local function bsg()local bsh=bnk()for bsi=1,15 do bsh[bsi]=65535 end bsh[1]=65517 bsh[16]=32767 return bsh end local function bsj(bsk)if#bsk~=32 then return nil end local bsl=(bsk:byte(32)>=128)and 1 or 0 local bsm=bsk:sub(1,31)..string.char(bsk:byte(32)%128)local bsn=bqc(bsm)if not bsn then return nil end local bso=bpd(bsn)local bsp=boq(bol(bso,bqo(1)),bqa(bog(boq(bqr,bso),bqo(1))))local bsq if bpf(bsp)then if bsl==1 then return nil end bsq=bnk()else bsq=bpp(bsp,bpw)if not bpj(bpd(bsq),bsp)then bsq=boq(bsq,bqt)if not bpj(bpd(bsq),bsp)then return nil end end local bsr=bqj(bsq)if(bsr:byte(1)%2)~=bsl then bsq=bol(bsg(),bsq)end end return bqu(bsq,bsn,bqo(1),boq(bsq,bsn))end local bss='5866666666666666666666666666666666666666666666666666666666666666'local function bst(bsu)local bsv={}for bsw=1,#bsu,2 do bsv[#bsv+1]=string.char(tonumber(bsu:sub(bsw,bsw+1),16))end return table.concat(bsv)end local function bsx(bsy)local bsz={}for bta=1,#bsy do bsz[#bsz+1]=string.format('%02x',bsy:byte(bta))end return table.concat(bsz)end local btb=bsj(bst(bss))if not btb then error('bad base point',0)end local btc='edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010'local btd=bst(btc)local function bte(btf,btg)for bth=#btf,1,-1 do local bti,btj=btf:byte(bth),btg:byte(bth)if bti~=btj then return bti>btj end end return true end local function btk(btl)local btm={}for btn=1,16 do btm[btn]=btd:byte(2*btn-1)+btd:byte(2*btn)*256 end local bto=bnk()for btp=64,1,-1 do local btq=btl:byte(btp)for btr=7,0,-1 do local bts=math.floor(btq/(2^btr))%2 for btt=1,16 do local btu=bto[btt]*2+bts bto[btt]=btu%65536 bts=math.floor(btu/65536)end local btv=true for btw=16,1,-1 do if bto[btw]~=btm[btw]then btv=bto[btw]>btm[btw];break end end if btv then local btx=0 for bty=1,16 do local btz=bto[bty]-btm[bty]-btx if btz<0 then btz=btz+65536;btx=1 else btx=0 end bto[bty]=btz end end end end return bto end local function bua(bub)return bqj(bub)end local function buc(bud,bue,bug)if#bug~=64 or#bud~=32 then return false end local buh=bug:sub(1,32)local bui=bug:sub(33,64)if bte(bui,btd)then return false end local buj=bsj(buh)if not buj then return false end local buk=bsj(bud)if not buk then return false end local bul=bma(buh..bud..bue)local bum=btk(bul)local bun=brq(bui,btb)local buo=brq(bua(bum),buk)return brn(bun,brc(buj,buo))end return{sha512=bma,verify=buc,hex_to_bytes=bst,bytes_to_hex=bsx,} end)() local function _dkr_json(ani)local anj=1 local function ank()while anj<=#ani and ani:sub(anj,anj):match("%s")do anj=anj+1 end end local anl local function anm()anj=anj+1 local ann={}while true do local ano=ani:sub(anj,anj)if ano=='"'then anj=anj+1 break end if ano=="\\"then local anp=ani:sub(anj+1,anj+1)if anp=="n"then ann[#ann+1]="\n"elseif anp=="t"then ann[#ann+1]="\t"elseif anp=="r"then ann[#ann+1]="\r"elseif anp=='"'then ann[#ann+1]='"'elseif anp=="\\"then ann[#ann+1]="\\"elseif anp=="u"then local anq=tonumber(ani:sub(anj+2,anj+5),16)or 63 if anq<128 then ann[#ann+1]=string.char(anq)else ann[#ann+1]="?"end anj=anj+4 end anj=anj+2 else ann[#ann+1]=ano anj=anj+1 end end return table.concat(ann)end local function anr()local ans=ani:match("^-?%d+%.?%d*[eE]?[+-]?%d*",anj)anj=anj+#ans return tonumber(ans)end local function ant()anj=anj+1 local anu={}local anv=0 ank()if ani:sub(anj,anj)=="]"then anj=anj+1 return anu end while true do anv=anv+1 anu[anv]=anl()ank()local anw=ani:sub(anj,anj)if anw=="]"then anj=anj+1 break end anj=anj+1 end return anu end local function anx()anj=anj+1 local any={}ank()if ani:sub(anj,anj)=="}"then anj=anj+1 return any end while true do ank()local anz=anm()ank()anj=anj+1 any[anz]=anl()ank()local aoa=ani:sub(anj,anj)if aoa=="}"then anj=anj+1 break end anj=anj+1 end return any end anl=function()ank()local aob=ani:sub(anj,anj)if aob=='"'then return anm()end if aob=="{"then return anx()end if aob=="["then return ant()end if ani:sub(anj,anj+3)=="true"then anj=anj+4 return true end if ani:sub(anj,anj+4)=="false"then anj=anj+5 return false end if ani:sub(anj,anj+3)=="null"then anj=anj+4 return nil end return anr()end local aoc=anl()return aoc end local function _dkr_bxor(a, b) local r, bit = 0, 1 for _ = 1, 8 do local abit, bbit = a % 2, b % 2 if abit ~= bbit then r = r + bit end a = (a - abit) / 2 b = (b - bbit) / 2 bit = bit * 2 end return r end local _dkr_M32 = 4294967296 local function _dkr_mul32(a, b) a = a % _dkr_M32 b = b % _dkr_M32 local a0 = a % 65536 local a1 = (a - a0) / 65536 local b0 = b % 65536 local b1 = (b - b0) / 65536 local p0 = a0 * b0 local p1 = a1 * b0 + a0 * b1 return (p0 + (p1 % 65536) * 65536) % _dkr_M32 end local function _dkr_xor32(a, b) a = a % _dkr_M32 b = b % _dkr_M32 local r, bit = 0, 1 for _ = 1, 32 do local abit = a % 2 local bbit = b % 2 if abit ~= bbit then r = r + bit end a = (a - abit) / 2 b = (b - bbit) / 2 bit = bit * 2 end return r end local function _dkr_fnv(bytes, n) local h = 2166136261 for i = 1, n do h = _dkr_xor32(h, bytes[i]) h = _dkr_mul32(h, 16777619) end return h end local function _dkr_rng(seed) local s = seed % _dkr_M32 if s == 0 then s = 2654435769 end return function() s = _dkr_xor32(s, _dkr_mul32(s, 8192)) s = _dkr_xor32(s, math.floor(s / 131072)) s = _dkr_xor32(s, _dkr_mul32(s, 32)) return s end end local _dkr_b64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" local _dkr_b64map = {} for i = 1, #_dkr_b64chars do _dkr_b64map[_dkr_b64chars:sub(i, i)] = i - 1 end local function _dkr_b64d(s) local out = {} local n = 0 local i = 1 while i <= #s do local c1 = _dkr_b64map[s:sub(i, i)] or 0 local c2 = _dkr_b64map[s:sub(i + 1, i + 1)] or 0 local c3 = _dkr_b64map[s:sub(i + 2, i + 2)] or 0 local c4 = _dkr_b64map[s:sub(i + 3, i + 3)] or 0 local w = c1 * 262144 + c2 * 4096 + c3 * 64 + c4 n = n + 1 out[n] = math.floor(w / 65536) % 256 if s:sub(i + 2, i + 2) ~= "=" then n = n + 1 out[n] = math.floor(w / 256) % 256 end if s:sub(i + 3, i + 3) ~= "=" then n = n + 1 out[n] = w % 256 end i = i + 4 end return out, n end local function _dkr_ckey(keystr) local pre = {} local n = 0 for i = 1, #keystr do n = n + 1 pre[n] = string.byte(keystr, i) end local label = "dkr-const-v1" for i = 1, #label do n = n + 1 pre[n] = string.byte(label, i) end local rng = _dkr_rng(_dkr_fnv(pre, n)) local ck = {} for i = 1, 32 do ck[i] = rng() % 256 end for i = 1, n do pre[i] = 0 end return ck end -- Code-key derivation for incremental instruction decoding. Mirrors -- src/codecrypt.ts deriveCodeKey exactly: FNV-1a(master || "dkr-code-v1") -- seeding xorshift32, low byte per word. Validated standalone under lua5.1 -- alongside _dkr_ckey; any change must re-pass that check. local function _dkr_codekey(keystr) local pre = {} local n = 0 for i = 1, #keystr do n = n + 1 pre[n] = string.byte(keystr, i) end local label = "dkr-code-v1" for i = 1, #label do n = n + 1 pre[n] = string.byte(label, i) end local rng = _dkr_rng(_dkr_fnv(pre, n)) local ck = {} for i = 1, 32 do ck[i] = rng() % 256 end for i = 1, n do pre[i] = 0 end return ck end -- Stone 7: outer-key derivation executed at stub runtime. Deliberately NOT -- the low-byte-only pattern of _dkr_ckey/_dkr_codekey: each key byte is -- lowByte(xorshift()) XOR highByte(next xorshift()), so an attacker reusing -- their existing inner-KDF reimplementation derives the wrong key here. -- Bit-identical mirror of deriveOuterKey in src/constcrypt.ts. local function _dkr_outerkey(seedstr) local pre = {} local n = 0 for i = 1, #seedstr do n = n + 1 pre[n] = string.byte(seedstr, i) end local label = "dkr-outer-v1" for i = 1, #label do n = n + 1 pre[n] = string.byte(label, i) end local rng = _dkr_rng(_dkr_fnv(pre, n)) local ok = {} for i = 1, 32 do local a = rng() local b = rng() ok[i] = _dkr_xor32(a % 256, math.floor(b / 16777216) % 256) end for i = 1, n do pre[i] = 0 end return ok end local function _dkr_stream(ck, pi0, ci0, n) local pre = {} local m = 0 for i = 1, 32 do m = m + 1 pre[m] = ck[i] end local v = pi0 for _ = 1, 4 do m = m + 1 pre[m] = v % 256 v = math.floor(v / 256) end v = ci0 for _ = 1, 4 do m = m + 1 pre[m] = v % 256 v = math.floor(v / 256) end local rng = _dkr_rng(_dkr_fnv(pre, m)) local ks = {} for i = 1, n do ks[i] = rng() % 256 end for i = 1, m do pre[i] = 0 end return ks end local function _dkr_constdec(chunk, ck) for pi = 1, #chunk.p do local cs = chunk.p[pi].consts for ci = 1, #cs do local c = cs[ci] if type(c) == "table" and type(c.e) == "string" then local eb, en = _dkr_b64d(c.e) if en > 0 then local ks = _dkr_stream(ck, pi - 1, ci - 1, en) local db = {} for i = 1, en do db[i] = _dkr_schar(_dkr_bxor(eb[i], ks[i])) end cs[ci] = table.concat(db) for i = 1, en do eb[i] = 0 ks[i] = 0 db[i] = 0 end else cs[ci] = "" end end end end end -- Dakarun ChaCha20 (RFC 8439) — pure Lua 5.1, NO bitwise operators. -- -- All arithmetic uses doubles as exact integers (< 2^53): -- add mod 2^32 : (a + b) % 2^32 (a,b < 2^32, sum < 2^33 — exact) -- xor32 : byte-wise via a 65536-entry lookup table built once -- rotl : (a * 2^n) % 2^32 + floor(a / 2^(32-n)) (a*2^n < 2^48 — exact) -- -- Exposes: -- _dkr_chacha_block(key, nonce, ctr) -> 64-byte keystream table -- key: 32-byte table (1-based), nonce: 12-byte table (1-based) -- _dkr_chacha_xor(key, nonce, ct, n, ctr0) -> n-byte plaintext table -- (symmetric: the same function encrypts) -- -- This file is embedded into the stub via scripts/embed-lua.mjs and is also -- loaded directly by lua_test/chacha_test.lua — keep it self-contained. local _dkr_M32 = 4294967296 -- Byte-xor lookup table: _dkr_x8[a*256+b] = xor(a,b) for bytes a,b. -- Built with the recurrence T[a][b] = T[a>>1][b>>1]*2 + ((a&1)~(b&1)); -- the index floor(a/2)*256+floor(b/2) is always smaller, so entries exist. local _dkr_x8 = { [0] = 0 } for _dkr_a = 0, 255 do for _dkr_b = 0, 255 do if not (_dkr_a == 0 and _dkr_b == 0) then local _dkr_ah = math.floor(_dkr_a / 2) local _dkr_bh = math.floor(_dkr_b / 2) local _dkr_lo = 0 if (_dkr_a % 2) ~= (_dkr_b % 2) then _dkr_lo = 1 end _dkr_x8[_dkr_a * 256 + _dkr_b] = _dkr_x8[_dkr_ah * 256 + _dkr_bh] * 2 + _dkr_lo end end end local function _dkr_xor32(a, b) local a0 = a % 256 local a1 = math.floor(a / 256) % 256 local a2 = math.floor(a / 65536) % 256 local a3 = math.floor(a / 16777216) local b0 = b % 256 local b1 = math.floor(b / 256) % 256 local b2 = math.floor(b / 65536) % 256 local b3 = math.floor(b / 16777216) return _dkr_x8[a0 * 256 + b0] + _dkr_x8[a1 * 256 + b1] * 256 + _dkr_x8[a2 * 256 + b2] * 65536 + _dkr_x8[a3 * 256 + b3] * 16777216 end local function _dkr_add32(a, b) return (a + b) % _dkr_M32 end -- One ChaCha20 quarter round on state table s (1-based indices). local function _dkr_qr(s, a, b, c, d) s[a] = _dkr_add32(s[a], s[b]) s[d] = _dkr_xor32(s[d], s[a]) s[d] = (s[d] * 65536) % _dkr_M32 + math.floor(s[d] / 65536) -- rotl 16 s[c] = _dkr_add32(s[c], s[d]) s[b] = _dkr_xor32(s[b], s[c]) s[b] = (s[b] * 4096) % _dkr_M32 + math.floor(s[b] / 1048576) -- rotl 12 s[a] = _dkr_add32(s[a], s[b]) s[d] = _dkr_xor32(s[d], s[a]) s[d] = (s[d] * 256) % _dkr_M32 + math.floor(s[d] / 16777216) -- rotl 8 s[c] = _dkr_add32(s[c], s[d]) s[b] = _dkr_xor32(s[b], s[c]) s[b] = (s[b] * 128) % _dkr_M32 + math.floor(s[b] / 33554432) -- rotl 7 end local function _dkr_le32(t, i) return t[i] + t[i + 1] * 256 + t[i + 2] * 65536 + t[i + 3] * 16777216 end -- RFC 8439 §2.3.2 block function. Returns a 64-entry byte table. -- Local (never global): the sealed stub keeps these as chunk-locals and hands -- _dkr_chacha_xor to the VM as a parameter. No _dkr_* decryptor global exists -- at runtime, so there is nothing for a hostile environment to hook or proxy. local function _dkr_chacha_block(key, nonce, ctr) local s = { 1634760805, 857760878, 2036477234, 1797285236, -- "expand 32-byte k" _dkr_le32(key, 1), _dkr_le32(key, 5), _dkr_le32(key, 9), _dkr_le32(key, 13), _dkr_le32(key, 17), _dkr_le32(key, 21), _dkr_le32(key, 25), _dkr_le32(key, 29), ctr % _dkr_M32, _dkr_le32(nonce, 1), _dkr_le32(nonce, 5), _dkr_le32(nonce, 9), } local x = {} for i = 1, 16 do x[i] = s[i] end for _ = 1, 10 do _dkr_qr(x, 1, 5, 9, 13) _dkr_qr(x, 2, 6, 10, 14) _dkr_qr(x, 3, 7, 11, 15) _dkr_qr(x, 4, 8, 12, 16) _dkr_qr(x, 1, 6, 11, 16) _dkr_qr(x, 2, 7, 12, 13) _dkr_qr(x, 3, 8, 9, 14) _dkr_qr(x, 4, 5, 10, 15) end local ks = {} local n = 0 for i = 1, 16 do local w = _dkr_add32(x[i], s[i]) n = n + 1 ks[n] = w % 256 n = n + 1 ks[n] = math.floor(w / 256) % 256 n = n + 1 ks[n] = math.floor(w / 65536) % 256 n = n + 1 ks[n] = math.floor(w / 16777216) x[i] = 0 end return ks end -- XOR data (byte table ct[1..n]) with the ChaCha20 keystream. -- Symmetric: decrypt(encrypt(x)) == x. local function _dkr_chacha_xor(key, nonce, ct, n, ctr0) local out = {} local pos = 1 local ctr = ctr0 % _dkr_M32 while pos <= n do local ks = _dkr_chacha_block(key, nonce, ctr) ctr = (ctr + 1) % _dkr_M32 for i = 1, 64 do if pos > n then break end out[pos] = _dkr_x8[ct[pos] * 256 + ks[i]] pos = pos + 1 end for i = 1, 64 do ks[i] = 0 end end return out end local _dkr_gi2 = debug and debug.getinfo if _dkr_gi2 then local _dkr_si = _dkr_gi2(1, "S") local _dkr_ssrc = _dkr_si and _dkr_si.source or "" if #_dkr_ssrc > 10000 and _dkr_ssrc:find("_dkr_selfck", 1, true) then _dkr_ssrc = _dkr_ssrc:gsub("^%s+", ""):gsub("%s+$", "") local _dkr_hsrc = _dkr_ssrc:gsub('_dkr_selfck = "' .. _dkr_selfck .. '"', '_dkr_selfck = "0000000000"', 1) local _dkr_hh = 2166136261 for _dkr_hi = 1, #_dkr_hsrc do _dkr_hh = _dkr_mul32(_dkr_xor32(_dkr_hh, _dkr_hsrc:byte(_dkr_hi)), 16777619) end if _dkr_hh ~= tonumber(_dkr_selfck) then error("Dakarun: loader integrity") end end end _dkr_gi2 = nil local _dkr_p = "\149\027\254\114\182\037\034\042\171\200\210\212\092\056\023\130\162\109\118\229\168\240\143\064\192\212\018\137\227\200\232\150\038\228\186\021\218\037\182\016\175\171\014\208\070\130\211\252\160\041\235\091\065\120\102\199\015\154\216\003\139\073\241\135\101\001\123\179\058\247\048\018\210\003\091\157\181\169\117\221\179\215\012\117\235\051\090\025\181\232\037\124\026\079\039\009\110\002\100\225\209\011\244\255\160\053\193\147\226\132\042\028\045\146\187\193\092\037\227\137\020\116\166\039\087\073\244\245\249\164\188\108\059\136\020\021\034\165\219\235\046\238\092\046\071\020\215\136\167\090\199\030\196\189\074\173\020\065\151\139\115\189\218\137\089\057\076\046\103\122\172\067\061\103\090\154\166\032\163\212\089\057\189\042\130\059\012\052\133\079\190\177\214\052\200\239\055\151\052\114\035\212\189\118\079\181\142\139\041\129\183\070\247\173\200\115\186\111\137\103\244\046\201\092\075\024\213\238\031\043\160\134\070\062\218\234\225\036\015\205\083\177\068\216\077\106\114\089\069\170\133\156\024\221\218\205\152\159\254\069\200\005\087\255\073\069\241\014\139\185\166\239\157\012\021\070\058\150\108\141\086\107\188\219\058\189\154\051\156\038\059\157\239\205\004\253\059\021\088\191\087\085\196\160\044\079\252\254\083\039\093\112\048\221\253\235\095\169\250\054\054\214\040\112\004\247\128\065\147\169\148\240\119\100\082\018\148\194\142\131\127\151\160\017\055\067\115\230\096\009\226\152\200\174\039\200\181\207\073\016\088\037\222\237\082\217\134\071\226\012\175\125\102\197\197\118\005\034\204\061\126\203\129\120\147\189\230\090\107\165\154\165\087\179\208\171\000\012\103\023\183\068\070\096\039\071\025\150\033\175\211\146\091\043\002\011\010\142\000\076\160\201\254\193\001\185\211\245\254\249\249\195\077\202\251\161\132\237\164\152\137\238\176\243\192\141\067\188\026\134\104\222\253\182\062\124\021\182\057\232\135\209\172\221\144\138\036\086\060\054\160\026\005\123\238\020\092\042\128\171\178\182\254\171\211\030\057\192\206\126\091\235\221\142\232\196\018\206\243\183\216\136\051\093\148\096\127\242\084\159\211\234\238\248\213\095\000\144\212\143\017\201\113\029\032\009\016\106\009\007\004\211\004\033\179\224\243\240\013\233\021\146\014\228\093\043\127\132\162\218\063\049\069\146\124\154\081\170\012\073\177\200\056\136\075\194\196\231\006\174\149\137\255\232\248\233\096\093\033\170\234\215\021\059\094\146\207\074\044\174\005\073\252\169\159\009\156\224\004\057\115\190\024\108\015\195\138\031\066\200\116\124\041\059\169\168\040\096\236\009\034\190\063\234\159\129\053\185\005\207\122\011\058\164\179\136\235\033\024\165\063\244\121\229\019\020\031\134\005\006\238\223\023\204\119\146\081\155\007\249\136\239\060\020\133\182\104\151\245\152\211\219\188\224\146\098\217\244\035\242\077\212\241\035\172\029\167\095\240\083\034\132\231\180\032\006\027\125\046\224\122\105\199\089\111\153\047\223\204\059\224\046\030\229\019\214\097\155\151\181\120\120\079\066\022\033\249\107\022\165\067\070\060\249\121\048\198\228\033\114\195\145\014\216\073\135\101\230\227\230\240\116\163\203\045\177\041\191\185\231\234\175\135\219\027\254\147\078\060\052\036\065\083\126\094\127\087\249\119\247\076\019\183\027\045\156\080\030\202\215\150\159\222\084\093\073\081\031\084\054\237\099\052\096\165\015\182\237\170\025\008\239\224\117\180\004\054\160\097\018\242\005\241\086\164\102\013\082\235\059\176\139\229\017\015\159\218\027\006\186\225\214\062\094\161\221\040\026\084\086\190\013\112\191\216\067\018\130\201\027\252\068\188\177\142\045\078\147\182\082\150\094\161\133\156\252\041\043\148\123\045\022\060\033\089\035\047\047\035\138\069\013\172\007\086\137\086\016\059\235\231\189\039\156\244\158\189\201\153\040\120\073\233\124\009\143\099\126\152\130\039\046\189\053\045\063\089\091\108\118\086\211\166\180\253\185\179\044\099\136\059\112\179\118\006\081\057\086\203\076\161\225\196\025\002\045\160\197\104\162\131\245\080\240\108\191\079\056\023\148\100\217\125\017\118\084\012\058\149\068\006\083\050\252\207\161\130\152\154\195\064\179\072\047\038\056\164\254\143\133\080\159\139\017\015\119\010\210\192\112\030\119\094\027\110\025\141\116\146\168\156\202\174\180\235\181\071\207\175\218\139\059\068\067\089\111\209\253\136\043\095\050\200\174\023\207\181\147\213\141\021\069\254\255\206\188\041\217\108\221\108\009\014\253\119\219\237\231\004\034\134\147\149\180\184\068\004\024\139\020\001\185\109\076\145\053\062\225\109\113\204\247\232\141\093\081\052\223\251\001\174\033\202\118\209\228\088\127\045\139\090\226\056\098\106\246\061\131\234\038\023\011\222\042\174\068\166\232\145\146\000\236\184\078\147\095\121\139\185\042\023\220\057\245\186\132\233\151\215\094\072\031\064\114\052\008\074\128\047\235\096\167\200\204\016\055\247\054\204\238\100\133\166\065\002\160\052\244\017\026\231\053\080\209\048\226\135\003\188\029\136\230\078\146\250\061\188\061\017\074\141\218\079\025\084\022\132\076\045\120\019\085\148\100\058\062\139\185\038\059\137\146\196\142\088\232\062\184\027\214\185\116\210\212\137\080\046\102\068\001\088\245\193\217\220\118\209\142\218\112\251\186\072\211\043\102\197\150\208\085\059\047\177\006\008\158\167\152\010\109\187\210\162\089\124\126\128\254\161\149\222\166\162\065\144\241\229\208\005\226\011\129\173\057\093\066\118\229\181\193\173\123\162\194\227\118\104\104\127\022\088\020\129\064\174\056\100\089\112\052\207\087\238\000\105\102\162\009\181\130\168\245\114\232\150\083\199\137\227\064\229\227\144\027\072\090\160\177\042\114\180\165\161\219\048\155\217\161\049\123\079\240\113\185\141\080\198\132\067\100\218\111\145\193\139\174\242\040\060\090\156\140\143\193\154\185\151\130\176\219\211\097\075\195\011\154\160\085\192\162\240\064\142\038\085\156\166\123\164\246\098\146\105\238\232\217\196\182\024\113\180\001\110\169\122\166\010\052\036\247\156\244\127\185\024\255\031\101\030\216\216\097\168\135\145\033\013\082\046\014\005\225\184\083\150\241\210\217\025\163\140\159\000\158\064\150\145\104\169\233\224\139\241\069\074\100\172\045\068\015\211\233\155\145\064\175\167\255\054\159\127\131\029\220\241\009\101\226\041\210\159\030\110\199\194\213\027\202\251\013\113\196\032\214\188\217\062\116\107\193\194\207\110\008\133\250\024\142\002\050\017\073\234\081\143\003\105\007\211\138\203\086\201\197\237\026\103\024\027\080\027\113\122\252\086\195\125\124\073\013\163\216\047\102\172\193\186\254\115\224\221\071\178\176\148\093\252\041\235\241\111\099\091\155\061\143\234\098\147\239\224\066\191\246\045\110\106\085\249\222\193\209\232\006\092\028\182\104\124\049\115\043\156\177\046\048\007\251\203\144\085\049\025\105\141\202\026\230\030\006\174\183\242\089\194\034\067\214\030\017\242\252\183\079\029\226\122\054\150\083\200\083\151\175\236\026\245\252\097\104\215\032\190\079\226\220\137\166\070\238\041\072\034\063\114\050\007\103\211\150\155\138\150\233\121\149\240\092\061\010\004\127\119\097\021\008\131\062\035\216\206\156\215\218\183\147\170\019\151\184\080\197\137\092\178\013\176\221\008\072\164\104\161\075\016\002\183\203\181\014\176\151\025\137\113\001\153\242\227\133\146\183\142\208\193\220\219\198\216\195\108\138\217\077\231\040\170\142\075\121\090\180\236\231\083\214\056\055\234\054\209\075\139\020\105\000\108\079\073\086\132\145\079\109\115\165\115\251\207\139\038\031\193\120\188\013\208\022\110\073\139\078\182\157\225\208\095\029\018\168\186\207\103\196\106\234\247\082\039\183\208\078\055\057\016\077\089\167\114\152\144\217\107\072\231\014\095\255\076\036\105\239\153\141\254\008\255\087\000\069\145\076\225\173\169\109\054\094\008\115\003\036\142\188\104\004\061\250\118\074\022\231\070\216\214\072\208\036\002\153\068\212\007\202\010\151\241\096\215\182\162\128\205\124\047\038\171\218\073\226\244\221\163\120\230\224\088\047\229\096\170\171\215\130\069\197\083\042\195\164\243\130\033\092\087\185\193\071\214\166\107\226\033\115\253\051\042\040\105\003\208\190\187\225\047\060\178\092\055\017\035\055\156\129\057\205\185\098\031\075\075\038\248\102\235\109\200\050\095\155\222\053\073\138\200\181\235\031\157\086\197\182\086\239\038\248\171\018\100\195\091\086\021\236\168\136\220\131\165\059\156\070\028\200\044\164\071\082\219\213\249\081\131\183\122\065\012\107\055\177\250\076\213\103\227\072\101\255\103\254\233\251\130\173\250\125\004\187\228\244\196\203\238\090\078\202\222\012\114\069\039\031\161\223\035\124\232\154\037\226\049\224\054\040\158\076\075\075\157\168\098\228\093\086\115\112\155\082\073\215\166\017\034\075\097\129\164\050\143\133\097\186\046\136\151\127\211\171\091\144\152\233\119\236\124\126\235\118\151\159\076\062\207\199\224\145\102\185\179\072\033\188\000\141\002\248\199\109\215\025\117\176\076\044\189\184\252\123\124\185\119\114\098\065\197\236\249\066\012\093\072\012\148\147\013\120\092\057\196\017\231\036\141\099\247\037\198\159\132\156\006\112\171\108\244\105\186\034\148\241\080\173\150\117\235\224\242\156\242\044\241\000\124\174\252\156\053\079\116\005\122\096\038\195\211\106\135\048\159\239\238\005\133\169\237\169\213\024\123\170\107\075\006\198\036\069\198\080\117\122\034\218\162\245\134\054\085\089\133\070\237\132\220\137\251\065\248\186\174\148\019\205\230\014\030\114\200\026\045\098\179\104\187\043\093\084\030\203\181\173\163\066\075\249\008\020\128\172\249\010\120\001\163\006\059\045\150\161\138\144\114\072\048\057\225\176\058\242\216\242\050\074\028\046\254\091\052\200\157\059\252\133\021\135\154\002\207\157\169\034\119\255\174\045\074\008\211\137\214\237\036\199\249\094\189\193\189\244\217\200\246\159\121\042\167\109\247\150\116\175\245\132\123\104\010\110\101\087\088\013\181\189\002\143\040\087\220\061\057\029\136\112\009\186\110\032\046\181\157\040\003\078\219\199\224\085\064\077\254\212\030\081\165\161\250\224\029\157\171\033\244\123\086\139\059\238\215\111\084\058\046\196\200\002\085\086\123\247\121\009\242\216\045\227\193\219\074\084\179\012\066\090\000\026\215\205\110\253\232\245\172\065\072\062\229\154\064\184\094\158\018\156\053\161\123\050\155\190\020\147\084\113\115\170\244\164\158\205\111\070\048\190\224\036\054\092\109\062\251\202\097\202\009\201\010\192\081\211\037\090\119\174\079\053\200\154\034\195\118\174\072\181\104\020\022\252\227\129\184\228\150\158\039\043\002\077\214\158\235\167\228\089\109\054\024\204\153\121\228\057\193\052\097\015\244\173\153\077\027\254\162\157\123\100\247\008\178\232\175\238\145\248\229\055\142\039\092\029\105\157\231\054\176\095\178\204\154\240\231\018\073\010\205\006\160\013\212\004\225\049\144\135\028\242\095\118\217\054\101\199\093\158\098\006\202\108\081\211\194\240\035\067\095\016\214\229\224\149\161\171\041\042\157\234\061\244\010\173\226\058\068\044\162\063\052\247\094\235\046\097\063\231\027\227\043\169\107\193\117\237\037\086\025\212\235\013\120\190\138\038\252\059\047\041\248\039\112\192\155\132\226\243\072\069\170\156\125\121\044\211\226\134\012\133\086\129\125\044\199\019\149\212\252\056\220\158\220\141\110\031\200\052\188\099\148\179\165\163\210\239\249\042\012\171\049\244\131\235\097\198\003\139\058\244\053\014\239\011\010\037\122\075\016\067\038\250\065\073\032\247\086\170\049\160\078\199\064\087\072\222\043\241\096\154\217\200\188\190\017\067\215\212\220\194\112\056\144\220\195\089\041\176\091\094\012\036\036\218\002\232\155\145\155\003\030\153\050\244\140\249\011\176\106\183\112\156\184\136\165\013\086\118\105\078\017\199\203\251\115\069\034\194\122\068\086\076\085\144\191\127\112\122\202\203\204\158\051\211\087\122\087\208\218\181\029\098\033\062\063\088\068\132\026\109\096\103\167\076\076\234\128\213\085\035\168\044\008\114\004\082\050\017\246\020\234\153\007\184\092\074\132\156\233\190\031\172\239\133\178\197\038\143\202\155\091\137\024\149\229\052\133\068\131\143\047\047\217\219\250\148\179\183\223\021\177\139\093\101\017\106\093\118\176\131\211\152\188\216\149\144\159\043\207\038\030\180\027\040\092\170\115\242\187\157\105\234\172\182\126\131\010\102\198\037\152\155\221\083\099\072\007\110\071\180\206\064\025\087\045\172\041\003\140\120\098\105\214\241\064\100\219\244\040\240\057\233\008\087\184\022\169\203\178\002\155\180\028\208\172\254\002\120\082\014\127\108\078\194\213\037\231\099\251\059\185\105\036\002\030\205\209\250\031\016\020\247\191\045\251\048\224\242\074\156\026\210\118\174\186\013\019\087\255\213\195\162\050\144\148\221\203\023\070\166\051\012\016\000\045\119\129\109\227\048\032\067\002\141\183\122\058\061\144\096\033\203\103\217\006\226\242\237\210\011\045\196\250\235\043\106\244\043\073\063\213\020\053\144\031\080\076\023\090\030\188\021\016\180\039\111\142\214\167\230\017\192\005\016\122\102\069\053\120\217\032\159\074\232\217\012\200\226\168\169\202\042\209\192\054\008\215\208\070\015\244\177\035\045\085\030\237\127\179\244\024\090\143\140\200\019\088\230\149\046\240\145\118\081\146\229\154\239\094\194\174\164\109\166\247\051\026\094\041\113\019\226\004\139\105\084\040\038\018\011\251\246\021\192\040\197\119\099\242\063\118\111\083\229\059\218\210\171\229\213\008\012\230\043\113\096\224\140\054\087\219\101\129\089\020\240\148\159\062\174\170\011\131\086\099\091\088\250\191\030\248\131\109\234\054\110\033\230\168\217\058\150\242\050\052\124\000\235\122\205\171\029\020\207\227\073\073\172\230\089\018\068\235\164\023\121\205\200\128\017\059\202\080\039\077\123\233\145\202\162\244\070\062\077\210\026\217\073\012\057\171\071\119\015\091\171\255\205\089\229\121\220\230\117\206\066\018\152\050\141\165\182\105\085\210\121\197\252\233\200\045\110\118\237\111\248\156\106\112\184\227\063\066\097\159\235\000\228\001\034\212\234\128\166\152\141\160\071\169\140\193\068\042\228\196\023\231\138\255\086\034\061\174\144\040\157\150\219\013\045\001\126\209\129\141\006\197\008\222\099\082\082\049\155\081\250\209\057\126\177\127\202\181\160\028\104\002\107\192\047\198\236\156\146\214\196\015\087\039\164\024\094\116\021\150\250\053\033\161\216\004\022\139\005\151\006\211\204\148\217\019\083\003\067\022\018\251\172\132\114\061\129\032\015\164\059\122\120\073\215\208\197\239\016\080\088\212\028\112\001\071\017\199\164\177\217\150\094\214\014\144\015\223\043\106\113\081\249\023\124\047\013\095\156\214\249\197\209\052\100\141\167\173\005\185\075\055\192\158\159\191\102\071\121\153\206\017\032\052\025\160\248\162\113\206\019\238\164\065\160\040\156\248\049\178\009\087\144\018\195\104\177\154\250\057\078\029\017\049\137\028\042\004\002\172\130\237\023\157\017\170\168\058\081\138\035\251\179\248\209\203\007\046\143\116\056\029\180\235\065\019\002\106\010\060\100\021\026\060\024\148\127\177\020\180\189\139\059\119\109\028\040\031\194\245\120\072\189\237\084\068\194\168\120\127\015\106\099\207\236\034\087\176\080\129\118\225\080\056\152\033\082\160\110\137\067\018\145\229\235\223\170\098\211\071\019\059\161\157\095\011\245\003\020\103\183\090\058\064\252\012\098\184\209\034\165\165\067\210\046\179\067\169\045\181\022\000\228\080\230\024\173\086\155\215\106\215\030\193\183\016\010\149\172\101\000\214\138\113\068\054\093\191\073\216\187\051\042\056\237\204\154\111\067\047\000\060\108\212\241\004\082\255\125\233\096\061\147\163\228\036\038\166\168\233\024\176\045\023\019\150\231\048\211\251\011\183\189\026\157\001\193\134\018\022\080\032\186\200\059\005\247\213\026\199\239\122\082\248\248\213\248\018\243\069\035\091\244\131\031\209\242\081\129\248\029\013\183\221\186\168\154\082\204\083\228\203\191\240\025\004\005\131\084\208\243\170\137\072\169\035\245\023\164\073\208\179\165\107\114\162\110\181\187\078\148\066\240\244\233\202\238\215\120\241\054\038\227\167\094\247\130\096\061\229\127\005\235\041\079\053\113\225\177\230\093\167\092\186\118\155\127\065\242\095\157\029\171\113\123\043\236\051\041\106\028\079\036\015\153\005\093\244\027\017\070\244\195\076\024\002\119\031\178\205\099\021\217\074\052\098\152\226\238\223\021\197\251\234\199\038\099\118\020\064\035\253\251\067\158\126\073\082\084\030\135\213\107\170\001\168\156\106\120\032\172\010\185\046\055\247\161\005\102\109\117\146\079\018\240\216\240\233\141\070\127\156\145\173\110\141\243\118\137\235\117\103\161\229\147\247\086\240\156\123\122\166\172\254\231\082\086\090\100\136\192\126\021\099\151\063\228\138\094\006\213\077\128\096\154\141\151\102\042\127\117\208\236\192\074\197\093\039\039\008\176\111\108\210\222\130\030\197\181\169\182\052\004\198\126\167\065\037\158\204\098\121\118\034\036\042\053\027\113\094\066\036\138\107\173\051\119\179\078\097\216\178\215\109\111\190\043\035\159\229\168\106\122\135\150\075\096\191\176\005\080\251\111\119\131\086\205\075\222\013\094\201\084\043\075\186\053\065\147\222\129\108\198\082\232\002\138\208\214\254\111\174\242\053\007\125\107\023\088\141\133\229\210\065\075\015\175\165\071\069\038\134\193\181\249\100\080\070\150\098\181\102\064\244\066\150\171\207\058\114\222\077\194\220\143\074\137\209\140\172\253\084\077\136\059\044\044\119\182\148\183\224\018\029\117\113\064\120\253\159\146\003\251\166\252\087\186\031\027\010\006\103\245\156\028\119\070\149\112\246\115\119\010\248\134\141\031\194\057\009\153\004\139\058\018\233\111\010\084\002\108\141\006\211\058\174\213\212\148\002\109\084\056\160\127\117\076\059\187\145\100\190\005\033\051\121\101\118\016\134\020\114\137\003\109\053\032\099\011\145\014\253\114\131\081\051\054\193\126\188\181\223\247\105\063\205\002\231\224\219\137\085\229\121\070\240\200\218\225\219\158\053\026\196\048\133\047\025\073\068\126\039\221\203\251\091\207\227\246\250\179\089\184\181\211\188\191\191\195\002\035\174\036\253\220\151\024\182\119\032\238\009\204\003\117\001\074\083\141\223\169\164\201\115\052\219\220\020\130\238\126\050\079\230\156\193\208\053\164\162\014\096\117\117\089\117\082\119\086\102\021\182\093\194\217\100\183\199\158\050\171\037\133\232\123\098\190\081\076\043\237\246\005\109\144\062\189\066\036\140\197\004\015\037\068\063\243\255\226\208\104\232\246\130\081\053\187\084\041\057\015\084\126\115\123\191\201\140\246\027\048\242\074\111\194\059\160\115\150\081\249\029\066\024\020\145\033\183\208\185\198\132\119\249\202\023\047\012\222\225\072\101\087\165\238\024\058\247\239\178\189\224\000\003\229\153\248\095\128\223\106\039\050\159\060\127\012\198\083\049\013\122\140\007\189\195\096\167\132\051\018\175\220\246\209\099\223\251\166\153\184\174\041\116\081\085\102\031\005\234\243\198\088\011\111\114\079\070\027\017\080\173\023\210\032\197\185\017\098\079\050\244\034\016\156\210\231\176\060\208\243\113\168\150\240\059\124\125\002\153\026\148\043\199\157\042\073\184\202\117\072\034\138\049\096\136\020\197\087\090\183\091\199\115\231\246\011\008\060\125\207\006\108\145\038\149\251\102\104\050\084\215\128\087\006\000\012\140\130\215\025\177\082\237\047\253\032\127\087\107\223\115\194\022\175\195\051\147\167\028\130\122\078\170\057\215\242\039\076\107\072\247\240\227\037\090\166\122\204\197\004\151\228\079\074\222\197\220\018\013\064\247\232\120\078\185\224\020\217\002\201\024\212\105\129\232\222\142\134\207\077\177\096\205\156\066\023\146\064\170\042\145\144\015\153\026\218\196\211\242\191\049\214\148\241\072\122\040\196\174\198\146\232\030\243\214\230\173\145\243\123\123\136\044\181\104\031\170\095\145\058\196\059\065\035\024\220\066\225\225\163\077\122\193\169\176\103\050\210\056\132\166\246\218\168\077\228\093\206\111\038\125\087\236\092\130\214\186\207\122\224\216\083\240\228\155\177\218\212\085\062\199\037\047\092\129\250\226\245\074\004\210\220\215\129\179\101\163\084\231\013\023\020\240\047\176\157\055\116\247\002\120\155\098\047\213\101\217\003\112\200\140\052\176\046\149\060\113\195\153\053\140\097\155\216\188\204\058\075\200\159\056\000\230\059\163\227\053\006\161\185\184\118\145\034\185\134\011\163\001\247\138\022\212\102\083\206\126\069\086\053\048\036\200\203\099\226\167\137\240\231\049\107\051\138\216\095\219\251\008\232\093\119\128\210\209\139\040\208\064\028\051\171\166\245\004\163\169\234\153\083\236\099\130\103\112\189\220\080\102\050\083\217\063\106\236\245\042\019\112\009\211\047\028\080\010\002\009\201\030\026\018\228\011\051\209\123\119\098\239\153\165\078\114\119\112\007\140\083\223\254\097\180\195\020\226\010\218\051\205\060\067\025\047\180\103\123\115\014\244\128\146\120\148\021\054\172\154\038\158\014\043\250\129\052\107\220\108\170\252\045\026\053\015\077\146\181\089\078\021\086\235\206\212\056\221\053\033\039\184\157\055\251\107\020\136\034\112\047\175\177\158\146\026\160\162\105\068\224\001\151\040\176\079\198\039\018\037\100\088\198\052\108\128\019\174\249\063\077\241\076\213\179\076\103\018\065\135\149\071\167\107\039\159\200\117\057\007\068\055\168\059\162\186\173\110\055\071\239\205\245\218\062\161\103\102\145\192\225\054\066\082\219\087\140\058\233\210\120\023\251\244\060\131\216\203\130\117\022\002\160\207\136\072\141\023\137\035\134\028\162\046\075\197\072\096\230\144\172\025\241\151\051\201\029\124\173\044\035\082\074\068\147\077\036\150\244\150\060\077\201\213\041\142\141\061\058\002\030\074\116\005\150\032\177\177\180\144\027\037\247\119\182\206\057\072\152\130\221\196\249\095\102\242\152\203\163\098" local _dkr_sd = {} _dkr_sd[3] = "\110\104\037\040" _dkr_sd[4] = "\215\214\212\182" _dkr_sd[6] = "\234\174\113\136" _dkr_sd[2] = "\097\064\229\096" _dkr_sd[10] = "\150\067\050\066" _dkr_sd[8] = "\234\185\110\052" _dkr_sd[9] = "\068\233\006\113" _dkr_sd[5] = "\130\005\082\135" _dkr_sd[1] = "\101\145\135\029" _dkr_sd[7] = "\047\055\071\142" local _dkr_n = "\112\159\108\007\206\106\175\169\255\003\129\201" local _dkr_s = "\192\068\167\039\058\058\066\115\179\250\112\012\055\166\133\244\139\225\219\244\182\077\004\079\051\078\160\184\254\111\210\213\132\214\134\142\195\226\174\016\068\069\157\073\171\223\230\132\089\078\215\188\105\020\118\009\195\194\124\023\035\137\052\012" local _dkr_u = "\141\147\021\203\002\204\068\153\159\103\161\208\252\048\226\233\032\116\240\229\234\173\112\008\093\176\193\249\086\137\084\051" local _dkr_seed = {} for _dkr_i = 1, 10 do local _dkr_cc = _dkr_sd[_dkr_i] _dkr_sd[_dkr_i] = nil for _dkr_j = 1, 4 do _dkr_seed[(_dkr_i - 1) * 4 + _dkr_j] = string.byte(_dkr_cc, _dkr_j) end end _dkr_sd = nil local _dkr_bnd = 1 if _dkr_bnd ~= 1 then for _dkr_i = 1, 40 do local _dkr_pb = string.byte(_dkr_p, ((_dkr_i - 1) % #_dkr_p) + 1) _dkr_seed[_dkr_i] = _dkr_bxor(_dkr_seed[_dkr_i], (_dkr_pb + (_dkr_i - 1) * 31 + 17) % 256) end end if _dkr_bnd == 1 then local _dkr_idf0 = _dkr_bridge.identifyexecutor local _dkr_exn0 = nil if _dkr_idf0 ~= nil then local _dkr_eok0, _dkr_eres0 = pcall(_dkr_idf0) if _dkr_eok0 and type(_dkr_eres0) == "string" then _dkr_exn0 = string.lower(_dkr_eres0) end end if _dkr_exn0 == nil or _dkr_exn0 == "" then error("Dakarun: executor not allowed") end local _dkr_kdfd = "dakarun/v1/execbind/" .. _dkr_exn0 local _dkr_kin = {} for _dkr_i = 1, #_dkr_kdfd do _dkr_kin[_dkr_i] = string.byte(_dkr_kdfd, _dkr_i) end for _dkr_i = #_dkr_kdfd + 1, 64 do _dkr_kin[_dkr_i] = 0 end _dkr_kdfd = nil local _dkr_zk = {} for _dkr_i = 1, 32 do _dkr_zk[_dkr_i] = 0 end local _dkr_zn = {} for _dkr_i = 1, 12 do _dkr_zn[_dkr_i] = 0 end local _dkr_tw = _dkr_chacha_xor(_dkr_zk, _dkr_zn, _dkr_kin, 64, 0) for _dkr_i = 1, 64 do _dkr_kin[_dkr_i] = 0 end _dkr_kin, _dkr_zk, _dkr_zn = nil, nil, nil for _dkr_i = 1, 40 do _dkr_seed[_dkr_i] = _dkr_bxor(_dkr_seed[_dkr_i], _dkr_tw[_dkr_i]) _dkr_tw[_dkr_i] = 0 end for _dkr_i = 41, 64 do _dkr_tw[_dkr_i] = 0 end _dkr_tw = nil end local _dkr_skb = {} for _dkr_i = 1, 40 do _dkr_skb[_dkr_i] = _dkr_schar(_dkr_seed[_dkr_i]) _dkr_seed[_dkr_i] = 0 end _dkr_seed = nil local _dkr_sstr = _dkr_tconcat(_dkr_skb) for _dkr_i = 1, 40 do _dkr_skb[_dkr_i] = 0 end _dkr_skb = nil local _dkr_okb = _dkr_outerkey(_dkr_sstr) _dkr_sstr = nil local _dkr_kb2 = {} for _dkr_i = 1, 32 do _dkr_kb2[_dkr_i] = _dkr_schar(_dkr_okb[_dkr_i]) _dkr_okb[_dkr_i] = 0 end _dkr_okb = nil local _dkr_key = _dkr_tconcat(_dkr_kb2) for _dkr_i = 1, 32 do _dkr_kb2[_dkr_i] = 0 end _dkr_kb2 = nil local _dkr_ok = _dkr_ed.verify(_dkr_u, _dkr_p, _dkr_s) _dkr_s, _dkr_u = nil, nil if not _dkr_ok then error("Dakarun: signature invalid") end local _dkr_ck = _dkr_ckey(_dkr_key) local _dkr_codek = _dkr_codekey(_dkr_key) local _dkr_plen = #_dkr_p local _dkr_cb = {} for _dkr_i = 1, _dkr_plen do _dkr_cb[_dkr_i] = string.byte(_dkr_p, _dkr_i) end local _dkr_kb = { string.byte(_dkr_key, 1, 32) } local _dkr_nb = { string.byte(_dkr_n, 1, 12) } _dkr_p, _dkr_key, _dkr_n = nil, nil, nil local _dkr_pt = _dkr_chacha_xor(_dkr_kb, _dkr_nb, _dkr_cb, _dkr_plen, 0) for _dkr_i = 1, 32 do _dkr_kb[_dkr_i] = 0 end for _dkr_i = 1, 12 do _dkr_nb[_dkr_i] = 0 end for _dkr_i = 1, _dkr_plen do _dkr_cb[_dkr_i] = 0 end _dkr_kb, _dkr_nb, _dkr_cb = nil, nil, nil local _dkr_dec = {} for _dkr_i = 1, _dkr_plen do _dkr_dec[_dkr_i] = _dkr_schar(_dkr_pt[_dkr_i]) _dkr_pt[_dkr_i] = 0 end _dkr_pt = nil local _dkr_jsonstr = _dkr_tconcat(_dkr_dec) _dkr_dec = nil local _dkr_jok, _dkr_jres = pcall(_dkr_json, _dkr_jsonstr) _dkr_jsonstr = nil if not _dkr_jok then if _dkr_bnd == 1 then error("Dakarun: executor not allowed") end error(_dkr_jres) end local _dkr_chunk = _dkr_jres _dkr_jres = nil local _dkr_bind = _dkr_chunk.x if _dkr_bind ~= nil and #_dkr_bind > 0 then local _dkr_idf = _dkr_bridge.identifyexecutor local _dkr_exn = nil if _dkr_idf ~= nil then local _dkr_eok, _dkr_eres = pcall(_dkr_idf) if _dkr_eok and type(_dkr_eres) == "string" then _dkr_exn = _dkr_eres end end local _dkr_exok = false if _dkr_exn ~= nil then _dkr_exn = string.lower(_dkr_exn) for _dkr_bi = 1, #_dkr_bind do if string.lower(tostring(_dkr_bind[_dkr_bi])) == _dkr_exn then _dkr_exok = true break end end end if not _dkr_exok then for _dkr_i = 1, 32 do _dkr_ck[_dkr_i] = 0 end _dkr_ck = nil for _dkr_i = 1, 32 do _dkr_codek[_dkr_i] = 0 end _dkr_codek = nil _dkr_chunk = nil _dkr_bridge, _dkr_hostg = nil, nil error("Dakarun: executor not allowed") end end _dkr_bind = nil _dkr_constdec(_dkr_chunk, _dkr_ck) for _dkr_i = 1, 32 do _dkr_ck[_dkr_i] = 0 end _dkr_ck = nil for _dkr_pi = 1, #_dkr_chunk.p do local _dkr_pr = _dkr_chunk.p[_dkr_pi] local _dkr_pcb, _dkr_pcbn = _dkr_b64d(_dkr_pr.codec) _dkr_pr.cb = _dkr_pcb _dkr_pr.cbn = _dkr_pcbn _dkr_pr.codec = nil end local _dkr_ok, _dkr_out = pcall(_dkr_vm.execute, {m = _dkr_chunk.m, p = _dkr_chunk.p}, _dkr_bridge, _dkr_hostg, _dkr_codek, _dkr_chacha_xor) _dkr_bridge, _dkr_hostg = nil, nil _dkr_chunk = nil for _dkr_i = 1, 32 do _dkr_codek[_dkr_i] = 0 end _dkr_codek = nil if not _dkr_ok then error(_dkr_out) end for _dkr_i = 1, #_dkr_out do _dkr_print(_dkr_out[_dkr_i]) end _dkr_out = nil