{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/dmb-admin-download.js?mncb=20260823d"],
  "sourcesContent": ["/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   ADMIN SPLIT-PDF DOWNLOAD  (password-gated)\n   A discreet \"admin\" button renders the current book into SEPARATE small PDFs\n   \u2014 one \"cover.pdf\" (front+spine+back) and one PDF per 10 book pages (\"1.pdf\",\n   \"2.pdf\", \u2026) \u2014 then packages them into a PASSWORD-PROTECTED ZIP so we never\n   have to move one huge PDF around. Uses the same render engine as checkout\n   (window.__dmbBuildPdfChunks), so the pages are identical.\n\n   NOTE: the passwords live in this file, so this is convenience protection\n   (keeps casual users out), NOT strong security. The encrypted ZIP uses the\n   classic ZipCrypto scheme \u2014 open it with 7-Zip or WinRAR (Windows Explorer's\n   built-in unzip can't open password-protected ZIPs).\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n(function () {\n  var ADMIN_PW        = \"admindownload2026\";\n  var ZIP_PW          = \"MaenMayar2026ZIPpass\";\n  var PAGES_PER_CHUNK = 10;\n\n  /* \u2500\u2500 CRC-32 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var CRC = (function () {\n    var t = new Uint32Array(256);\n    for (var n = 0; n < 256; n++) {\n      var c = n;\n      for (var k = 0; k < 8; k++) c = (c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1);\n      t[n] = c >>> 0;\n    }\n    return t;\n  })();\n  function crc32(bytes) {\n    var c = 0xFFFFFFFF;\n    for (var i = 0; i < bytes.length; i++) c = CRC[(c ^ bytes[i]) & 0xFF] ^ (c >>> 8);\n    return (c ^ 0xFFFFFFFF) >>> 0;\n  }\n  function crc1(crc, b) { return (CRC[(crc ^ b) & 0xFF] ^ (crc >>> 8)) >>> 0; }\n\n  /* \u2500\u2500 ZipCrypto encryption of one file's bytes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function encryptZipCrypto(password, data, crc) {\n    var k0 = 0x12345678, k1 = 0x23456789, k2 = 0x34567890;\n    function upd(b) {\n      k0 = crc1(k0, b);\n      k1 = (k1 + (k0 & 0xFF)) >>> 0;\n      k1 = (Math.imul(k1, 134775813) + 1) >>> 0;\n      k2 = crc1(k2, (k1 >>> 24) & 0xFF);\n    }\n    for (var p = 0; p < password.length; p++) upd(password.charCodeAt(p) & 0xFF);\n    function enc(b) {\n      var t = (k2 | 2) & 0xFFFF;\n      var cb = ((((t * (t ^ 1)) >>> 8) & 0xFF) ^ b) & 0xFF;\n      upd(b);\n      return cb;\n    }\n    var out = new Uint8Array(12 + data.length);\n    var header = new Uint8Array(12);\n    for (var j = 0; j < 11; j++) header[j] = (Math.random() * 256) & 0xFF;\n    header[11] = (crc >>> 24) & 0xFF;          // check byte = high byte of CRC\n    for (var h = 0; h < 12; h++) out[h] = enc(header[h]);\n    for (var d = 0; d < data.length; d++) out[12 + d] = enc(data[d]);\n    return out;\n  }\n\n  /* \u2500\u2500 Build a password-protected ZIP (STORE method + ZipCrypto) \u2500\u2500 */\n  function buildEncryptedZip(entries, password) {\n    var te = new TextEncoder();\n    var parts = [], central = [], offset = 0;\n    function u16(v) { return [v & 0xFF, (v >>> 8) & 0xFF]; }\n    function u32(v) { return [v & 0xFF, (v >>> 8) & 0xFF, (v >>> 16) & 0xFF, (v >>> 24) & 0xFF]; }\n    var MT = 0, MD = 0x21;   // arbitrary valid DOS time/date\n    for (var i = 0; i < entries.length; i++) {\n      var nameBytes = te.encode(entries[i].name);\n      var data = entries[i].bytes;\n      var crc  = crc32(data);\n      var encData = encryptZipCrypto(password, data, crc);\n      var comp = encData.length, unc = data.length;\n      var lfh = [].concat(u32(0x04034b50), u16(20), u16(0x0001), u16(0), u16(MT), u16(MD),\n        u32(crc), u32(comp), u32(unc), u16(nameBytes.length), u16(0));\n      var lfhArr = new Uint8Array(lfh.length + nameBytes.length);\n      lfhArr.set(lfh, 0); lfhArr.set(nameBytes, lfh.length);\n      parts.push(lfhArr, encData);\n      var cd = [].concat(u32(0x02014b50), u16(20), u16(20), u16(0x0001), u16(0), u16(MT), u16(MD),\n        u32(crc), u32(comp), u32(unc), u16(nameBytes.length), u16(0), u16(0), u16(0), u16(0),\n        u32(0), u32(offset));\n      var cdArr = new Uint8Array(cd.length + nameBytes.length);\n      cdArr.set(cd, 0); cdArr.set(nameBytes, cd.length);\n      central.push(cdArr);\n      offset += lfhArr.length + encData.length;\n    }\n    var cdStart = offset, cdSize = 0;\n    for (var c2 = 0; c2 < central.length; c2++) cdSize += central[c2].length;\n    var eocd = new Uint8Array([].concat(u32(0x06054b50), u16(0), u16(0),\n      u16(entries.length), u16(entries.length), u32(cdSize), u32(cdStart), u16(0)));\n    return new Blob(parts.concat(central, [eocd]), { type: \"application/zip\" });\n  }\n\n  function blobToBytes(blob) {\n    return blob.arrayBuffer().then(function (ab) { return new Uint8Array(ab); });\n  }\n\n  /* \u2500\u2500 Overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function overlay(msg) {\n    var o = document.getElementById(\"_dmbAdminOv\");\n    if (!o) {\n      o = document.createElement(\"div\"); o.id = \"_dmbAdminOv\";\n      o.style.cssText = \"position:fixed;inset:0;z-index:1000000;background:rgba(0,0,0,.78);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:16px;text-align:center;padding:24px;line-height:1.5;\";\n      document.body.appendChild(o);\n    }\n    o.textContent = msg; o.style.display = \"flex\"; return o;\n  }\n  function hideOverlay() { var o = document.getElementById(\"_dmbAdminOv\"); if (o) o.style.display = \"none\"; }\n\n  /* \u2500\u2500 Main flow \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  async function run() {\n    var pw = window.prompt(\"Admin download \u2014 enter password:\");\n    if (pw == null) return;\n    if (pw !== ADMIN_PW) { alert(\"Wrong password.\"); return; }\n    if (typeof window.__dmbBuildPdfChunks !== \"function\") { alert(\"Builder isn't ready \u2014 open a book first.\"); return; }\n\n    var ov = overlay(\"Generating split PDFs\u2026\");\n    try {\n      var res = await window.__dmbBuildPdfChunks(PAGES_PER_CHUNK, function (done, total) {\n        ov.textContent = \"Rendering pages\u2026  \" + done + \" / \" + total;\n      });\n      if (!res || !res.chunked || !res.chunks || !res.chunks.length) throw new Error(\"no PDFs were produced\");\n\n      ov.textContent = \"Locking \" + res.chunks.length + \" PDFs into a password ZIP\u2026\";\n      var entries = [];\n      for (var i = 0; i < res.chunks.length; i++) {\n        var ch = res.chunks[i];\n        var bytes = await blobToBytes(ch.blob);\n        entries.push({ name: ch.name + \".pdf\", bytes: bytes });\n      }\n      var zip = buildEncryptedZip(entries, ZIP_PW);\n      var url = URL.createObjectURL(zip);\n      var a = document.createElement(\"a\");\n      a.href = url; a.download = \"book-pdfs.zip\";\n      document.body.appendChild(a); a.click();\n      setTimeout(function () { try { URL.revokeObjectURL(url); a.remove(); } catch (e) {} }, 5000);\n      hideOverlay();\n    } catch (e) {\n      hideOverlay();\n      alert(\"Split download failed: \" + (e && e.message ? e.message : e));\n    }\n  }\n\n  /* \u2500\u2500 Discreet admin button (bottom-left of the builder) \u2500\u2500\u2500 */\n  function injectButton() {\n    if (document.getElementById(\"_dmbAdminBtn\")) return;\n    var b = document.createElement(\"button\");\n    b.id = \"_dmbAdminBtn\"; b.type = \"button\"; b.textContent = \"admin\";\n    b.title = \"Admin split-PDF download\";\n    b.style.cssText = \"position:fixed;left:8px;bottom:8px;z-index:999998;padding:4px 9px;font-size:10px;font-weight:800;color:#999;background:rgba(255,255,255,.8);border:1px solid #ccc;border-radius:6px;cursor:pointer;opacity:.45;transition:opacity .15s;\";\n    b.addEventListener(\"mouseenter\", function () { b.style.opacity = \"1\"; });\n    b.addEventListener(\"mouseleave\", function () { b.style.opacity = \".45\"; });\n    b.addEventListener(\"click\", run);\n    document.body.appendChild(b);\n  }\n\n  // Show the button once the builder is open.\n  document.addEventListener(\"dmb:editorOpened\", injectButton);\n  var tries = 0;\n  var iv = setInterval(function () {\n    tries++;\n    var step2 = document.getElementById(\"step2\");\n    if (step2 && getComputedStyle(step2).display !== \"none\") injectButton();\n    if (tries > 180) clearInterval(iv);\n  }, 1000);\n})();\n"],
  "mappings": "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",
  "names": []
}
