local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" -- really bad local function encode(s) local x = 0 local n = 0 local out = {} local outn = 1 local pad = "" local function si(v, m) x = (x << m) | v; n = n + m end local function so(m) local rem = n - m local res = x >> rem x = x & ((1 << rem) - 1) n = n - m return res end local function o() while n >= 6 do local i = so(6)+1 out[outn] = alphabet:sub(i,i) outn = outn + 1 end end for i = 1, #s do si(s:byte(i), 8) o() end if n > 0 then local on = n si(0, 6-n) o() pad = ('='):rep(3-on/2) -- bad end return table.concat(out)..pad end return {encode=encode}