(function() {
  var el = document.getElementById("Showdown-script");
  function isRelativeLink(href) {
    if (!href || href.charAt(0) === "#") return false;
    if (href.charAt(0) === "/") return false;
    if (/^[a-z][a-z0-9+.-]*:/i.test(href)) return false;
    if (href.indexOf("//") === 0) return false;
    return true;
  }
  function rewriteRelativeLinks(container, blobBase, blobDir) {
    if (!blobBase) return;
    var links = container.querySelectorAll("a[href]");
    for (var i = 0; i < links.length; i++) {
      var a = links[i];
      var href = a.getAttribute("href");
      if (href && isRelativeLink(href)) {
        var path = href.replace(/^\.\//, "");
        var fullPath = blobDir ? blobDir + "/" + path : path;
        a.setAttribute("href", blobBase + encodeURIComponent(fullPath));
      }
    }
  }
  function slugifyId(id) {
    if (!id) return "";
    return id.replace(/\s+/g, "-").replace(/[^\w-]/g, "").toLowerCase();
  }
  function ensureHeadingIds(container) {
    var headings = container.querySelectorAll("h1, h2, h3, h4, h5, h6");
    for (var i = 0; i < headings.length; i++) {
      var h = headings[i];
      if (!h.id) {
        var text = (h.textContent || "").trim();
        var base = slugifyId(text) || "section";
        var id = base;
        var n = 0;
        while (container.ownerDocument.getElementById(id)) id = base + "-" + (++n);
        h.id = id;
      }
    }
  }
  function addSectionLinks(container) {
    var headings = container.querySelectorAll("h1, h2, h3, h4, h5, h6");
    for (var i = 0; i < headings.length; i++) {
      var h = headings[i];
      var id = h.id;
      if (!id) continue;
      var wrap = document.createElement("span");
      wrap.className = "readme-heading-wrap";
      h.parentNode.insertBefore(wrap, h);
      wrap.appendChild(h);
      var anchor = document.createElement("a");
      anchor.href = "#" + id;
      anchor.className = "readme-section-anchor";
      anchor.setAttribute("aria-label", "Copy link to section");
      anchor.textContent = "\u00A7";
      anchor.addEventListener("click", function(e) {
        e.preventDefault();
        var targetId = this.getAttribute("href").slice(1);
        var url = window.location.origin + window.location.pathname + window.location.search + "#" + targetId;
        if (navigator.clipboard && navigator.clipboard.writeText) {
          navigator.clipboard.writeText(url);
        } else {
          window.location.hash = targetId;
        }
      });
      wrap.insertBefore(anchor, h);
    }
  }
  function buildToc(container) {
    var headings = container.querySelectorAll("h1, h2, h3, h4, h5, h6");
    if (headings.length === 0) return null;
    var nav = document.createElement("nav");
    nav.className = "readme-toc";
    nav.setAttribute("aria-label", "Table of contents");
    var list = document.createElement("ul");
    list.className = "readme-toc-list";
    var tagLevel = { H1: 1, H2: 2, H3: 3, H4: 4, H5: 5, H6: 6 };
    for (var i = 0; i < headings.length; i++) {
      var h = headings[i];
      var id = h.id;
      if (!id) continue;
      var level = tagLevel[h.tagName] || 1;
      var li = document.createElement("li");
      li.className = "readme-toc-item readme-toc-level-" + level;
      li.setAttribute("data-id", id);
      var a = document.createElement("a");
      a.href = "#" + id;
      a.className = "readme-toc-link";
      a.textContent = (h.textContent || "").trim();
      a.addEventListener("click", function(e) {
        e.preventDefault();
        var targetId = this.getAttribute("href").slice(1);
        var target = document.getElementById(targetId);
        if (target) target.scrollIntoView({ behavior: "smooth", block: "start" });
        if (history.replaceState) history.replaceState(null, "", "#" + targetId);
      });
      li.appendChild(a);
      list.appendChild(li);
    }
    nav.appendChild(list);
    return nav;
  }
  function mountTocAndScrollSpy(tocEl, container) {
    var page = document.querySelector(".page");
    if (!page) return;
    var tocPlaceholder = document.createElement("div");
    tocPlaceholder.className = "readme-toc-mount";
    page.appendChild(tocPlaceholder);
    tocPlaceholder.appendChild(tocEl);
    var links = tocEl.querySelectorAll(".readme-toc-link");
    var items = tocEl.querySelectorAll(".readme-toc-item");
    function updateActive() {
      var fromTop = window.scrollY + 8;
      var current = null;
      var headings = container.querySelectorAll("h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]");
      for (var i = headings.length - 1; i >= 0; i--) {
        if (headings[i].getBoundingClientRect().top + window.scrollY <= fromTop) {
          current = headings[i].id;
          break;
        }
      }
      if (!current && headings.length) current = headings[0].id;
      for (var j = 0; j < items.length; j++) {
        var on = items[j].getAttribute("data-id") === current;
        items[j].classList.toggle("readme-toc-active", on);
      }
    }
    var ticking = false;
    function onScroll() {
      if (!ticking) {
        requestAnimationFrame(function() {
          updateActive();
          ticking = false;
        });
        ticking = true;
      }
    }
    window.addEventListener("scroll", onScroll, { passive: true });
    updateActive();
  }
  function render() {
    var container = document.getElementById("readme-container");
    var enc = container && container.getAttribute("data-readme-b64");
    var blobBase = container && container.getAttribute("data-blob-base");
    var blobDir = container && container.getAttribute("data-blob-dir") || "";
    if (!container || !enc || typeof showdown === "undefined") return;
    try {
      var raw = atob(enc);
      var conv = new showdown.Converter({ ghCompatibleHeaderId: true });
      container.innerHTML = conv.makeHtml(raw);
      ensureHeadingIds(container);
      rewriteRelativeLinks(container, blobBase, blobDir);
      addSectionLinks(container);
      var toc = buildToc(container);
      if (toc) mountTocAndScrollSpy(toc, container);
    } catch (e) {}
  }
  if (el) {
    if (el.getAttribute("data-loaded")) render();
    else el.addEventListener("load", function() { el.setAttribute("data-loaded", "1"); render(); });
  }
})();