1 2<!DOCTYPE html><html lang="zh-CN"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta name="hexo-theme" content="https://github.com/xaoxuu/hexo-theme-stellar/tree/1.33.1" theme-name="Stellar" theme-version="1.33.1"> 7 8 9 <meta name="generator" content="Hexo 8.1.1"> 10 <meta http-equiv='x-dns-prefetch-control' content='on' /> 11 12 <meta name="renderer" content="webkit"> 13 <meta name="force-rendering" content="webkit"> 14 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> 15 <meta name="HandheldFriendly" content="True" > 16 <meta name="mobile-web-app-capable" content="yes"> 17 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 18 <meta name="theme-color" media="(prefers-color-scheme: dark)" content="#000"> 19 <meta name="theme-color" content="#f9fafb"> 20 <title>Gift1açå°å®å®</title> 21 22 23 <meta property="og:type" content="website"> 24<meta property="og:title" content="Gift1açå°å®å®"> 25<meta property="og:url" content="http://gift1a.cn/"> 26<meta property="og:site_name" content="Gift1açå°å®å®"> 27<meta property="og:locale" content="zh_CN"> 28<meta property="og:image" content="https://gift1a.oss-cn-hangzhou.aliyuncs.com/img/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2026-01-06_233617_016.jpg"> 29<meta property="article:author" content="Gift1a"> 30<meta name="twitter:card" content="summary"> 31<meta name="twitter:image" content="https://gift1a.oss-cn-hangzhou.aliyuncs.com/img/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2026-01-06_233617_016.jpg"> 32 33 34 35 36 37 <!-- feed --> 38 39 40 <link rel="stylesheet" href="/css/main.css?v=1.33.1"> 41 42 43 44 45 46 47
47<script type="application/ld+json">{"@context":"https://schema.org","@type":"Website","@id":"http://gift1a.cn","author":{"@type":"Person","name":"Gift1a","sameAs":[],"image":"https://gift1a.oss-cn-hangzhou.aliyuncs.com/img/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2026-01-06_233617_016.jpg"},"name":"Gift1açå°å®å®","description":"","url":"http://gift1a.cn"}</script>
47 48 <link rel="stylesheet" href="https://npm.elemecdn.com/lxgw-wenkai-screen-webfont/style.css" media="print" onload="this.media='all'"> 49</head> 50<body> 51 52<div class="l_body index" id="start" layout="undefined" type="undefined" ><aside class="l_left"><div class="sidebg"></div><div class="leftbar-container"> 53 54 55<header class="header"><div class="logo-wrap"><a class="avatar" href="/about/"><div class="bg" style="opacity:0;background-image:url(https://gcore.jsdelivr.net/gh/cdn-x/[email protected]/avatar/round/[email protected]);"></div><img no-lazy class="avatar" src="https://gift1a.oss-cn-hangzhou.aliyuncs.com/img/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2026-01-06_233617_016.jpg" onerror="javascript:this.classList.add('error');this.src='https://gcore.jsdelivr.net/gh/cdn-x/[email protected]/image/2659360.svg';"></a><a class="title" href="/"><div class="main">Gift1açå°å®å®</div></a></div></header> 56 57<div class="nav-area"> 58 59<nav class="menu dis-select"><a class="nav-item active" title="å客" href="/" style="color:#1BCDFC"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M5.879 2.879C5 3.757 5 5.172 5 8v8c0 2.828 0 4.243.879 5.121C6.757 22 8.172 22 11 22h2c2.828 0 4.243 0 5.121-.879C19 20.243 19 18.828 19 16V8c0-2.828 0-4.243-.879-5.121C17.243 2 15.828 2 13 2h-2c-2.828 0-4.243 0-5.121.879M8.25 17a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 0 1.5H9a.75.75 0 0 1-.75-.75M9 12.25a.75.75 0 0 0 0 1.5h6a.75.75 0 0 0 0-1.5zM8.25 9A.75.75 0 0 1 9 8.25h6a.75.75 0 0 1 0 1.5H9A.75.75 0 0 1 8.25 9" clip-rule="evenodd"/><path fill="currentColor" d="M5.235 4.058C5 4.941 5 6.177 5 8v8c0 1.823 0 3.058.235 3.942L5 19.924c-.975-.096-1.631-.313-2.121-.803C2 18.243 2 16.828 2 14v-4c0-2.829 0-4.243.879-5.121c.49-.49 1.146-.707 2.121-.803zm13.53 15.884C19 19.058 19 17.822 19 16V8c0-1.823 0-3.059-.235-3.942l.235.018c.975.096 1.631.313 2.121.803C22 5.757 22 7.17 22 9.999v4c0 2.83 0 4.243-.879 5.122c-.49.49-1.146.707-2.121.803z" opacity=".5"/></svg></a><a class="nav-item" title="ææ¡£" href="/wiki/" style="color:#3DC550"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M14.25 4.48v3.057c0 .111 0 .27.02.406a.936.936 0 0 0 .445.683a.96.96 0 0 0 .783.072c.13-.04.272-.108.378-.159L17 8.005l1.124.534c.106.05.248.119.378.16a.958.958 0 0 0 .783-.073a.936.936 0 0 0 .444-.683c.021-.136.021-.295.021-.406V3.031c.113-.005.224-.01.332-.013C21.154 2.98 22 3.86 22 4.933v11.21c0 1.112-.906 2.01-2.015 2.08c-.97.06-2.108.179-2.985.41c-1.082.286-1.99 1.068-3.373 1.43
596c-.626.167-1.324.257-1.627.323V5.174c.32-.079 1.382-.203 1.674-.371c.184-.107.377-.216.576-.323m5.478 8.338a.75.75 0 0 1-.546.91l-4 1a.75.75 0 0 1-.364-1.456l4-1a.75.75 0 0 1 .91.546" clip-rule="evenodd"/><path fill="currentColor" d="M18.25 3.151c-.62.073-1.23.18-1.75.336a8.2 8.2 0 0 0-.75.27v3.182l.75-.356l.008-.005a1.13 1.13 0 0 1 .492-.13c.047 0 .094.004.138.01c.175.029.315.1.354.12l.009.005l.749.356V3.647z"/><path fill="currentColor" d="M12 5.214c-.334-.064-1.057-.161-1.718-.339C8.938 4.515 8.05 3.765 7 3.487c-.887-.234-2.041-.352-3.018-.412C2.886 3.007 2 3.9 2 4.998v11.146c0 1.11.906 2.01 2.015 2.079c.97.06 2.108.179 2.985.41c.486.129 1.216.431 1.873.726c1.005.451 2.052.797 3.127 1.034z" opacity=".5"/><path fill="currentColor" d="M4.273 12.818a.75.75 0 0 1 .91-.545l4 1a.75.75 0 1 1-.365 1.455l-4-1a.75.75 0 0 1-.545-.91m.909-4.545a.75.75 0 1 0-.364 1.455l4 1a.75.75 0 0 0 .364-1.455z"/></svg></a><a class="nav-item" title="æ¢ç´¢" href="/explore/" style="color:#FA6400"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M20 12a8 8 0 1 1-16 0a8 8 0 0 1 16 0" opacity=".5"/><path fill="currentColor" d="M17.712 5.453c1.047-.193 2.006-.259 2.797-.152c.77.103 1.536.393 1.956 1.064c.446.714.312 1.542-.012 2.258c-.33.728-.918 1.499-1.672 2.268c-1.516 1.547-3.836 3.226-6.597 4.697c-2.763 1.472-5.495 2.484-7.694 2.92c-1.095.217-2.098.299-2.923.201c-.8-.095-1.6-.383-2.032-1.075c-.47-.752-.296-1.63.07-2.379c.375-.768 1.032-1.586 1.872-2.403L4 12.416c0 .219.083.71.168 1.146c.045.23.09.444.123.596c-.652.666-1.098 1.263-1.339 1.756c-.277.567-.208.825-.145.925c.072.116.305.305.937.38c.609.073 1.44.018 2.455-.183c2.02-.4 4.613-1.351 7.28-2.772c2.667-1.42 4.85-3.015 6.23-4.423c.694-.707 1.15-1.334 1.377-1.836c.233-.515.167-.75.107-.844c-.07-.112-.289-.294-.883-.374c-.542-.072-1.272-.041-2.163.112L16.87 5.656c.338-.101.658-.17.842-.203"/></svg></a><a class="nav-item" title="社交" href="/friends/" style="color:#F44336"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="m13.629 20.472l-.542.916c-.483.816-1.69.816-2.174 0l-.542-.916c-.42-.71-.63-1.066-.968-1.262c-.338-.197-.763-.204-1.613-.219c-1.256-.021-2.043-.098-2.703-.372a5 5 0 0 1-2.706-2.706C2 14.995 2 13.83 2 11.5v-1c0-3.273 0-4.91.737-6.112a5 5 0 0 1 1.65-1.651C5.59 2 7.228 2 10.5 2h3c3.273 0 4.91 0 6.113.737a5 5 0 0 1 1.65 1.65C22 5.59 22 7.228 22 10.5v1c0 2.33 0 3.495-.38 4.413a5 5 0 0 1-2.707 2.706c-.66.274-1.447.35-2.703.372c-.85.015-1.275.022-1.613.219c-.338.196-.548.551-.968 1.262" opacity=".5"/><path fill="currentColor" d="M10.99 14.308c-1.327-.978-3.49-2.84-3.49-4.593c0-2.677 2.475-3.677 4.5-1.609c2.025-2.068 4.5-1.068 4.5 1.609c0 1.752-2.163 3.615-3.49 4.593c-.454.335-.681.502-1.01.502c-.329 0-.556-.167-1.01-.502"/></svg></a></nav> 60</div> 61<div class="widgets"> 62<div class="search-wrapper" id="search-wrapper"><form class="search-form"><a class="search-button" onclick="document.getElementById("search-input").focus();"><svg t="1705074644177" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1560" width="200" height="200"><path d="M1008.839137 935.96571L792.364903 719.491476a56.783488 56.783488 0 0 0-80.152866 0 358.53545 358.53545 0 1 1 100.857314-335.166073 362.840335 362.840335 0 0 1-3.689902 170.145468 51.248635 51.248635 0 1 0 99.217358 26.444296 462.057693 462.057693 0 1 0-158.255785 242.303546l185.930047 185.725053a51.248635 51.248635 0 0 0 72.568068 0 51.248635 51.248635 0 0 0 0-72.978056z" p-id="1561"></path><path d="M616.479587 615.969233a50.428657 50.428657 0 0 0-61.498362-5.534852 174.655348 174.655348 0 0 1-177.525271 3.484907 49.403684 49.403684 0 0 0-58.833433 6.76482l-3.074918 2.869923a49.403684 49.403684 0 0 0 8.609771 78.10292 277.767601 277.767601 0 0 0 286.992355-5.739847 49.403684 49.403684 0 0 0 8.404776-76.667958z" p-id="1562"></path></svg></a><input type="text" class="search-input" id="search-input" placeholder="ç«å æç´¢"></form><div id="search-result"></div><div class="search-no-result">æ²¡ææ¾å°å 容ï¼</div></div> 63 64<widget class="widget-wrapper recent post-list"><div class="widget-header dis-select"><span class="name">æè¿æ´æ°</span></div><div class="widget-body fs14"><a class="item title" href="/2026/03/07/redex/"><span class="title">ReDexåæ··æ·ä¸æ··æ·</span></a><a class="item title" href="/2026/01/17/mips_architecture/"><span class="title">Mipsæä»¤éè§£ç </span></a></div></widget> 65</div> 66<footer class="footer dis-select"><div class="social-wrap"><a class="social" href="https://" target="_blank" rel="external nofollow noopener noreferrer"><img src="https://gcore.jsdelivr.net/gh/cdn-x/placeholder/social/08a41b181ce68.svg"/>
66</a><a class="social" href="https://" target="_blank" rel="external nofollow noopener noreferrer"><img src="https://gcore.jsdelivr.net/gh/cdn-x/placeholder/social/3845874.svg"/></a><a class="social" href="https://" target="_blank" rel="external nofollow noopener noreferrer"><img src="https://gcore.jsdelivr.net/gh/cdn-x/placeholder/social/3616429.svg"/></a><a class="social" href="javaScript:void('æ°¸å¤');" rel="noopener noreferrer"><img id="ThemeM" src="/customize/svg/moon.svg"/></a><a class="social" href="javaScript:void('æ°¸æ¼');" rel="noopener noreferrer"><img id="ThemeL" src="/customize/svg/sun.svg"/></a></div></footer> 67</div></aside><div class="l_main" id="main"> 68 69<header class="header mobile-only"><div class="logo-wrap"><a class="avatar" href="/about/"><div class="bg" style="opacity:0;background-image:url(https://gcore.jsdelivr.net/gh/cdn-x/[email protected]/avatar/round/[email protected]);"></div><img no-lazy class="avatar" src="https://gift1a.oss-cn-hangzhou.aliyuncs.com/img/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2026-01-06_233617_016.jpg" onerror="javascript:this.classList.add('error');this.src='https://gcore.jsdelivr.net/gh/cdn-x/[email protected]/image/2659360.svg';"></a><a class="title" href="/"><div class="main">Gift1açå°å®å®</div></a></div></header> 70 71 72 73 74<div class="navbar top"><div class="navbar-blur"><div class="navbar-container"><nav class="post"><a class="active" href="/">è¿æåå¸</a><a href="/categories/">åç±»</a><a href="/tags/">æ ç¾</a><a href="/topic/">䏿 </a><a href="/archives/">
74彿¡£</a><a href="/life">çæ´»ç¢ç</a></nav></div></div></div> 75<div class="post-list post"><a class="post-card post" href="/2026/03/07/redex/"> 76<article class="md-text"><h2 class="post-title">ReDexåæ··æ·ä¸æ··æ·</h2><div class="excerpt"><p>ReDexï¼DEX åèç çç¼è¯å¨çº§ææ§ 77ä» IR çè§£å°å®æåæ··æ·ä¸æ··æ· Pass ç¼å 78 79 80第ä¸é¨åï¼ä»ä¹æ¯ ReDex1.1 å®ä½ReDex æ¯ FaceBook 弿ºç Android DEX åèç ä¼åå¨ãå®ä¸æ¯ä¼ ç»æä¹ä¸çâå·¥å ·âï¼èæ¯ä¸...</p></div><div class="meta cap"><span class="cap" id="post-meta"><svg style="margin-bottom:2px" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M6.94 2c.416 0 .753.324.753.724v1.46c.668-.012 1.417-.012 2.26-.012h4.015c.842 0 1.591 0 2.259.013v-1.46c0-.4.337-.725.753-.725s.753.324.753.724V4.25c1.445.111 2.394.384 3.09 1.055c.698.67.982 1.582 1.097 2.972L22 9H2v-.724c.116-1.39.4-2.302 1.097-2.972c.697-.67 1.645-.944 3.09-1.055V2.724c0-.4.337-.724.753-.724"/><path fill="currentColor" d="M22 14v-2c0-.839-.004-2.335-.017-3H2.01c-.013.665-.01 2.161-.01 3v2c0 3.771 0 5.657 1.172 6.828C4.343 22 6.228 22 10 22h4c3.77 0 5.656 0 6.828-1.172C22 19.658 22 17.772 22 14" opacity=".5"/><path fill="currentColor" d="M18 17a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-5 4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-5 4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0"/></svg><time datetime="2026-03-07T03:32:27.000Z">2026-03-07</time></span><span class="cap breadcrumb"><svg style="margin-bottom:1px" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M2 6.95c0-.883 0-1.324.07-1.692A4 4 0 0 1 5.257 2.07C5.626 2 6.068 2 6.95 2c.386 0 .58 0 .766.017a4 4 0 0 1 2.18.904c.144.119.28.255.554.529L11 4c.816.816 1.224 1.224 1.712 1.495a4 4 0 0 0 .848.352C14.098 6 14.675 6 15.828 6h.374c2.632 0 3.949 0 4.804.77c.079.07.154.145.224.224c.77.855.77 2.172.77 4.804V14c0 3.771 0 5.657-1.172 6.828C19.657 22 17.771 22 14 22h-4c-3.771 0-5.657 0-6.828-1.172C2 19.657 2 17.771 2 14z" opacity=".5"/><path fill="currentColor" d="M20 6.238c0-.298-.005-.475-.025-.63a3 3 0 0 0-2.583-2.582C17.197 3 16.965 3 16.5 3H9.988c.116.104.247.234.462.45L11 4c.816.816 1.224 1.224 1.712 1.495a4 4 0 0 0 .849.352C14.098 6 14.675 6 15.829 6h.373c1.78 0 2.957 0 3.798.238"/><path fill="currentColor" fill-rule="evenodd" d="M12.25 10a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75" clip-rule="evenodd"/></svg><span>ææ¯</span></span></div></article> 81</a><a class="post-card post" href="/2026/01/17/mips_architecture/"> 82<article class="md-text"><h2 class="post-title">Mipsæä»¤éè§£ç </h2><div class="excerpt"><p>åè¨ä¹æä»¥å¦ä¹ Mips æä»¤éçè§£ç æµç¨æ¯å 为æ VMP 使ç¨å°äº Mips éæ¹çæä»¤éï¼å¹¶ä¸éè¦æ°å¢ BN å¯¹äº Mips æä»¤ç Liftï¼æ¬æå°ç»å Mips æä»¤éææ¡£ä»¥å BinaryNinja Mips æ¶ææä»¶è§£æ Mips æä»¤é...</p></div><div class="meta cap"><span class="cap" id="post-meta"><svg style="margin-bottom:2px" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M6.94 2c.416 0 .753.324.753.724v1.46c.668-.012 1.417-.012 2.26-.012h4.015c.842 0 1.591 0 2.259.013v-1.46c0-.4.337-.725.753-.725s.753.324.753.724V4.25c1.445.111 2.394.384 3.09 1.055c.698.67.982 1.582 1.097 2.972L22 9H2v-.724c.116-1.39.4-2.302 1.097-2.972c.697-.67 1.645-.944 3.09-1.055V2.724c0-.4.337-.724.753-.724"/><path fill="currentColor" d="M22 14v-2c0-.839-.004-2.335-.017-3H2.01c-.013.665-.01 2.161-.01 3v2c0 3.771 0 5.657 1.172 6.828C4.343 22 6.228 22 10 22h4c3.77 0 5.656 0 6.828-1.172C22 19.658 22 17.772 22 14" opacity=".5"/><path fill="currentColor" d="M18 17a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-5 4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-5 4a1 1 0 1 1-2 0a1 1 0 0 1 2 0m0-4a1 1 0 1 1-2 0a1 1 0 0 1 2 0"/></svg><time datetime="2026-01-17T12:30:27.000Z">2026-01-17</time></span><span class="cap breadcrumb"><svg style="margin-bottom:1px" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
82<path fill="currentColor" d="M2 6.95c0-.883 0-1.324.07-1.692A4 4 0 0 1 5.257 2.07C5.626 2 6.068 2 6.95 2c.386 0 .58 0 .766.017a4 4 0 0 1 2.18.904c.144.119.28.255.554.529L11 4c.816.816 1.224 1.224 1.712 1.495a4 4 0 0 0 .848.352C14.098 6 14.675 6 15.828 6h.374c2.632 0 3.949 0 4.804.77c.079.07.154.145.224.224c.77.855.77 2.172.77 4.804V14c0 3.771 0 5.657-1.172 6.828C19.657 22 17.771 22 14 22h-4c-3.771 0-5.657 0-6.828-1.172C2 19.657 2 17.771 2 14z" opacity=".5"/><path fill="currentColor" d="M20 6.238c0-.298-.005-.475-.025-.63a3 3 0 0 0-2.583-2.582C17.197 3 16.965 3 16.5 3H9.988c.116.104.247.234.462.45L11 4c.816.816 1.224 1.224 1.712 1.495a4 4 0 0 0 .849.352C14.098 6 14.675 6 15.829 6h.373c1.78 0 2.957 0 3.798.238"/><path fill="currentColor" fill-rule="evenodd" d="M12.25 10a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75" clip-rule="evenodd"/></svg><span>ææ¯</span></span></div></article> 83</a></div> 84 85 86<footer class="page-footer footnote"><hr><div class="sitemap" style="column-count:1;"><div class="sitemap-group"><span class="fs15">å客</span><a href="/">è¿æåå¸</a><a href="/categories/">åç±»</a><a href="/tags/">æ ç¾</a><a href="/archives/">
86彿¡£</a></div></div><div class="text"><p>æ¬ç«ç± <a href="/">Gift1a</a> ä½¿ç¨ <a target="_blank" rel="noopener" href="https://github.com/xaoxuu/hexo-theme-stellar/tree/1.33.1">Stellar 1.33.1</a> 主é¢å建ã<br>æ¬åå®¢æææç« é¤ç¹å«å£°æå¤ï¼åéç¨ <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a> 许å¯åè®®ï¼è½¬è½½è¯·æ³¨æåºå¤ã</p> 87</div></footer> 88<div class="main-mask" onclick="sidebar.dismiss()"></div></div><aside class="l_right"> 89</aside><div class='float-panel'> 90 <button type='button' style='display:none' class='laptop-only rightbar-toggle mobile' onclick='sidebar.rightbar()'> 91 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6h11m-11 6h11m-11 6h11M4 6h1v4m-1 0h2m0 8H4c0-1 2-2 2-3s-1-1.5-2-1"/></svg> 92 </button> 93 <button type='button' style='display:none' class='mobile-only leftbar-toggle mobile' onclick='sidebar.leftbar()'> 94 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 11c0-3.771 0-5.657 1.172-6.828C4.343 3 6.229 3 10 3h4c3.771 0 5.657 0 6.828 1.172C22 5.343 22 7.229 22 11v2c0 3.771 0 5.657-1.172 6.828C19.657 21 17.771 21 14 21h-4c-3.771 0-5.657 0-6.828-1.172C2 18.657 2 16.771 2 13z"/><path id="sep" stroke-linecap="round" d="M5.5 10h6m-5 4h4m4.5 7V3"/></g></svg> 95 </button> 96</div> 97</div><div class="scripts"> 98 99
100<script type="text/javascript"> 101 window.canonical = {"originalHost":null,"officialHosts":["localhost"],"encoded":""}; 102 const ctx = { 103 date_suffix: { 104 just: `åå`, 105 min: `åéå`, 106 hour: `å°æ¶å`, 107 day: `天å`, 108 }, 109 root : `/`, 110 tag_plugins: { 111 chat: Object.assign({"api":"https://siteinfo.listentothewind.cn/api/v1"}), 112 } 113 }; 114 115 // required plugins (only load if needs) 116 if (`local_search`) { 117 ctx.search = {}; 118 ctx.search.service = `local_search`; 119 if (ctx.search.service == 'local_search') { 120 let service_obj = Object.assign({}, `{"field":"all","path":"/search.json","content":true,"skip_search":null,"sort":"-date"}`); 121 ctx.search[ctx.search.service] = service_obj; 122 } 123 } 124 const def = { 125 avatar: `https://gcore.jsdelivr.net/gh/cdn-x/[email protected]/avatar/round/3442075.svg`, 126 cover: `https://gcore.jsdelivr.net/gh/cdn-x/[email protected]/cover/76b86c0226ffd.svg`, 127 loading: `https://api.iconify.design/eos-icons:three-dots-loading.svg?color=%231cd0fd`, 128 }; 129 const deps = { 130 jquery: `https://gcore.jsdelivr.net/npm/[email protected]/dist/jquery.min.js`, 131 marked: `https://gcore.jsdelivr.net/npm/[email protected]/lib/marked.umd.min.js`, 132 lazyload: `/%5Bobject%20Object%5D` 133 } 134 135 136</script>
136 137
138<script type="text/javascript"> 139 140 function RunItem() { 141 this.list = []; // åæ¾åè°å½æ° 142 this.start = () => { 143 for (var i = 0; i < this.list.length; i++) { 144 this.list[i].run(); 145 } 146 }; 147 this.push = (fn, name, setRequestAnimationFrame = true) => { 148 let myfn = fn 149 if (setRequestAnimationFrame) { 150 myfn = () => { 151 utils.requestAnimationFrame(fn) 152 } 153 } 154 var f = new Item(myfn, name); 155 this.list.push(f); 156 }; 157 this.remove = (name) => { 158 for (let index = 0; index < this.list.length; index++) { 159 const e = this.list[index]; 160 if (e.name == name) { 161 this.list.splice(index, 1); 162 } 163 } 164 } 165 // æé ä¸ä¸ªå¯ä»¥runç对象 166 function Item(fn, name) { 167 // 彿°åç§° 168 this.name = name || fn.name; 169 // runæ¹æ³ 170 this.run = () => { 171 try { 172 fn() 173 } catch (error) { 174 console.log(error); 175 } 176 }; 177 } 178 } 179 180 const utils = { 181 // æå è½½ css https://github.com/filamentgroup/loadCSS 182 css: (href, before, media, attributes) => { 183 var doc = window.document; 184 var ss = doc.createElement("link"); 185 var ref; 186 if (before) { 187 ref = before; 188 } else { 189 var refs = (doc.body || doc.getElementsByTagName("head")[0]).childNodes; 190 ref = refs[refs.length - 1]; 191 } 192 var sheets = doc.styleSheets; 193 if (attributes) { 194 for (var attributeName in attributes) { 195 if (attributes.hasOwnProperty(attributeName)) { 196 ss.setAttribute(attributeName, attributes[attributeName]); 197 } 198 } 199 } 200 ss.rel = "stylesheet"; 201 ss.href = href; 202 ss.media = "only x"; 203 function ready(cb) { 204 if (doc.body) { 205 return cb(); 206 } 207 setTimeout(function () { 208 ready(cb); 209 }); 210 } 211 ready(function () { 212 ref.parentNode.insertBefore(ss, before ? ref : ref.nextSibling); 213 }); 214 var onloadcssdefined = function (cb) { 215 var resolvedHref = ss.href; 216 var i = sheets.length; 217 while (i--) { 218 if (sheets[i].href === resolvedHref) { 219 return cb(); 220 } 221 } 222 setTimeout(function () { 223 onloadcssdefined(cb); 224 }); 225 }; 226 function loadCB() { 227 if (ss.addEventListener) { 228 ss.removeEventListener("load", loadCB); 229 } 230 ss.media = media || "all"; 231 } 232 if (ss.addEventListener) { 233 ss.addEventListener("load", loadCB); 234 } 235 ss.onloadcssdefined = onloadcssdefined; 236 onloadcssdefined(loadCB); 237 return ss; 238 }, 239 240 js: (src, opt) => new Promise((resolve, reject) => { 241 var script = document.createElement('script'); 242 if (src.startsWith('/')) { 243 src = ctx.root + src.substring(1); 244 } 245 script.src = src; 246 if (opt) { 247 for (let key of Object.keys(opt)) { 248 script[key] = opt[key] 249 } 250 } else { 251 // é»è®¤å¼æ¥ï¼å¦æéè¦åæ¥ï¼ç¬¬äºä¸ªåæ°ä¼ å ¥ {} å³å¯ 252 script.async = true 253 } 254 script.onerror = reject 255 script.onload = script.onreadystatechange = function () { 256 const loadState = this.readyState 257 if (loadState && loadState !== 'loaded' && loadState !== 'complete') return 258 script.onload = script.onreadystatechange = null 259 resolve() 260 } 261 document.head.appendChild(script) 262 }), 263 264 jq: (fn) => { 265 if (typeof jQuery === 'undefined') { 266 utils.js(deps.jquery).then(fn) 267 } else { 268 fn() 269 } 270 }, 271 272 onLoading: (el) => { 273 if (el) { 274 $(el).append('<div class="loading-wrap"><svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="2"><path stroke-dasharray="60" stroke-dashoffset="60" stroke-opacity=".3" d="M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3Z"><animate fill="freeze" attributeName="stroke-dashoffset" dur="1.3s" values="60;0"/></path><path stroke-dasharray="15" stroke-dashoffset="15" d="M12 3C16.9706 3 21 7.02944 21 12"><animate fill="freeze" attributeName="stroke-dashoffset" dur="0.3s" values="15;0"/><animateTransform attributeName="transform" dur="1.5s" repeatCount="indef
274inite" type="rotate" values="0 12 12;360 12 12"/></path></g></svg></div>'); 275 } 276 }, 277 onLoadSuccess: (el) => { 278 if (el) { 279 $(el).find('.loading-wrap').remove(); 280 } 281 }, 282 onLoadFailure: (el) => { 283 if (el) { 284 $(el).find('.loading-wrap svg').remove(); 285 $(el).find('.loading-wrap').append('<svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path stroke-dasharray="60" stroke-dashoffset="60" d="M12 3L21 20H3L12 3Z"><animate fill="freeze" attributeName="stroke-dashoffset" dur="0.5s" values="60;0"/></path><path stroke-dasharray="6" stroke-dashoffset="6" d="M12 10V14"><animate fill="freeze" attributeName="stroke-dashoffset" begin="0.6s" dur="0.2s" values="6;0"/></path></g><circle cx="12" cy="17" r="1" fill="currentColor" fill-opacity="0"><animate fill="freeze" attributeName="fill-opacity" begin="0.8s" dur="0.4s" values="0;1"/></circle></svg>'); 286 $(el).find('.loading-wrap').addClass('error'); 287 } 288 }, 289 request: (el, url, callback, onFailure) => { 290 const maxRetry = 3; 291 let retryCount = 0; 292 293 return new Promise((resolve, reject) => { 294 const load = () => { 295 utils.onLoading?.(el); 296 297 let timedOut = false; 298 const timeout = setTimeout(() => { 299 timedOut = true; 300 console.warn('[request] è¶ æ¶:', url); 301 302 if (++retryCount >= maxRetry) { 303 utils.onLoadFailure?.(el); 304 onFailure?.(); 305 reject('请æ±è¶ æ¶'); 306 } else { 307 setTimeout(load, 1000); 308 } 309 }, 5000); 310 311 fetch(url).then(resp => { 312 if (timedOut) return; 313 clearTimeout(timeout); 314 315 if (!resp.ok) throw new Error('ååºå¤±è´¥'); 316 return resp; 317 }).then(data => { 318 if (timedOut) return; 319 utils.onLoadSuccess?.(el); 320 callback(data); 321 resolve(data); 322 }).catch(err => { 323 clearTimeout(timeout); 324 console.warn('[request] é误:', err); 325 326 if (++retryCount >= maxRetry) { 327 utils.onLoadFailure?.(el); 328 onFailure?.(); 329 reject(err); 330 } else { 331 setTimeout(load, 1000); 332 } 333 }); 334 }; 335 336 load(); 337 }); 338 }, 339 requestWithoutLoading: (url, options = {}, maxRetry = 2, timeout = 5000) => { 340 return new Promise((resolve, reject) => { 341 let retryCount = 0; 342 343 const tryRequest = () => { 344 let timedOut = false; 345 const timer = setTimeout(() => { 346 timedOut = true; 347 if (++retryCount > maxRetry) reject('timeout'); 348 else tryRequest(); 349 }, timeout); 350 351 fetch(url, options) 352 .then(resp => { 353 clearTimeout(timer); 354 if (!resp.ok) throw new Error('bad response'); 355 resolve(resp); 356 }) 357 .catch(err => { 358 clearTimeout(timer); 359 if (++retryCount > maxRetry) reject(err); 360 else setTimeout(tryRequest, 500); 361 }); 362 }; 363 364 tryRequest(); 365 }); 366 }, 367 /********************** requestAnimationFrame ********************************/ 368 // 1ãrequestAnimationFrame 伿æ¯ä¸å¸§ä¸çææ DOM æä½éä¸èµ·æ¥ï¼å¨ä¸æ¬¡éç»æåæµä¸å°±å®æï¼å¹¶ä¸éç»æåæµçæ¶é´é´éç´§ç´§è·éæµè§å¨çå·æ°é¢çï¼ä¸è¬æ¥è¯´ï¼è¿ä¸ªé¢ç为æ¯ç§60帧ã 369 // 2ãå¨éèæä¸å¯è§çå ç´ ä¸ï¼requestAnimationFrame å°ä¸ä¼è¿è¡éç»æåæµï¼è¿å½ç¶å°±æå³çæ´å°çç cpuï¼gpu åå å使ç¨éã 370 requestAnimationFrame: (fn) => { 371 if (!window.requestAnimationFrame) { 372 window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame; 373 } 374 window.requestAnimationFrame(fn) 375 }, 376 dark: {}, 377 }; 378
379 // utils.dark.mode å½åæ¨¡å¼ dark or light 380 // utils.dark.toggle() æé»æ¨¡å¼è§¦åå¨ 381 // utils.dark.push(callBack[,"callBackName"]) ä¼ å ¥è§¦åå¨åè°å½æ° 382 utils.dark.method = { 383 toggle: new RunItem(), 384 }; 385 utils.dark = Object.assign(utils.dark, { 386 push: utils.dark.method.toggle.push, 387 }); 388</script>
vendor: 1 bytes, line 388
388
389<script> 390 const sidebar = { 391 leftbar: () => { 392 if (l_body) { 393 l_body.toggleAttribute('leftbar'); 394 l_body.removeAttribute('rightbar'); 395 } 396 }, 397 rightbar: () => { 398 if (l_body) { 399 l_body.toggleAttribute('rightbar'); 400 l_body.removeAttribute('leftbar'); 401 } 402 }, 403 dismiss: () => { 404 if (l_body) { 405 l_body.removeAttribute('leftbar'); 406 l_body.removeAttribute('rightbar'); 407 } 408 }, 409 toggleTOC: () => { 410 document.querySelector('#data-toc').classList.toggle('collapse'); 411 } 412 } 413</script>
vendor: 1 bytes, line 413
413
414<script type="text/javascript"> 415 (() => { 416 const tagSwitchers = document.querySelectorAll('.tag-subtree.parent-tag > a > .tag-switcher-wrapper') 417 for (const tagSwitcher of tagSwitchers) { 418 tagSwitcher.addEventListener('click', (e) => { 419 const parent = e.target.closest('.tag-subtree.parent-tag') 420 parent.classList.toggle('expanded') 421 e.preventDefault() 422 }) 423 } 424 425 // Get active tag from query string, then activate it. 426 const urlParams = new URLSearchParams(window.location.search) 427 const activeTag = urlParams.get('tag') 428 if (activeTag) { 429 let tag = document.querySelector(`.tag-subtree[data-tag="${activeTag}"]`) 430 if (tag) { 431 tag.querySelector('a').classList.add('active') 432 433 while (tag) { 434 tag.classList.add('expanded') 435 tag = tag.parentElement.closest('.tag-subtree.parent-tag') 436 } 437 } 438 } 439 })() 440</script>
440 441
442<script async src="https://gcore.jsdelivr.net/npm/[email protected]/dist/lazyload.min.js"></script>
vendor: 1 bytes, line 442
442
443<script> 444 // https://www.npmjs.com/package/vanilla-lazyload 445 // Set the options globally 446 // to make LazyLoad self-initialize 447 window.lazyLoadOptions = { 448 elements_selector: ".lazy", 449 callback_loaded: (el) => { 450 el.classList.add('loaded'); 451 const wrapper = el.closest('.lazy-box'); 452 const icon = wrapper?.querySelector('.lazy-icon'); 453 if (icon) icon.remove(); 454 } 455 }; 456 // Listen to the initialization event 457 // and get the instance of LazyLoad 458 window.addEventListener( 459 "LazyLoad::Initialized", 460 function (event) { 461 window.lazyLoadInstance = event.detail.instance; 462 }, 463 false 464 ); 465 document.addEventListener('DOMContentLoaded', function () { 466 window.lazyLoadInstance?.update(); 467 }); 468 469 window.wrapLazyloadImages = (container) => { 470 if (typeof container === 'string') { 471 container = document.querySelector(container); 472 } 473 if (!container) return; 474 475 const images = container.querySelectorAll('img'); 476 images.forEach((img) => { 477 if (img.classList.contains('lazy')) return; 478 479 const src = img.getAttribute('src'); 480 if (!src) return; 481 482 const wrapper = document.createElement('div'); 483 wrapper.className = 'lazy-box'; 484 485 const newImg = img.cloneNode(); 486 newImg.removeAttribute('src'); 487 newImg.setAttribute('data-src', src); 488 newImg.classList.add('lazy'); 489 490 const icon = document.createElement('div'); 491 icon.className = 'lazy-icon'; 492 if (def.loading) { 493 icon.style.backgroundImage = `url("${def.loading}")`; 494 } 495 496 wrapper.appendChild(newImg); 497 wrapper.appendChild(icon); 498 499 img.replaceWith(wrapper); 500 }); 501 502 // éç¥ LazyLoad æ´æ° 503 if (window.lazyLoadInstance?.update) { 504 window.lazyLoadInstance.update(); 505 } 506 } 507 508</script>
508 509 510<!-- required -->
511<script src="/js/main.js?v=1.33.1" defer></script>
511 512
513<script type="text/javascript"> 514 const applyTheme = (theme) => { 515 if (theme === 'auto') { 516 document.documentElement.removeAttribute('data-theme') 517 } else { 518 document.documentElement.setAttribute('data-theme', theme) 519 } 520 521 // applyThemeToGiscus(theme) 522 } 523 524 // FIXME: è¿ä¼å¯¼è´æ æ³ä½¿ç¨ preferred_color_scheme 以å¤çä¸»é¢ 525 const applyThemeToGiscus = (theme) => { 526 // theme = theme === 'auto' ? 'preferred_color_scheme' : theme 527 const cmt = document.getElementById('giscus') 528 if (cmt) { 529 // This works before giscus load. 530 cmt.setAttribute('data-theme', theme) 531 } 532 533 const iframe = document.querySelector('#comments > section.giscus > iframe') 534 if (iframe) { 535 // This works after giscus loaded. 536 const src = iframe.src 537 const newSrc = src.replace(/theme=[\w]+/, `theme=${theme}`) 538 iframe.src = newSrc 539 } 540 } 541 542 const switchTheme = () => { 543 // light -> dark -> auto -> light -> ... 544 const currentTheme = document.documentElement.getAttribute('data-theme') 545 let newTheme; 546 switch (currentTheme) { 547 case 'light': 548 newTheme = 'dark' 549 break 550 case 'dark': 551 newTheme = 'auto' 552 break 553 default: 554 newTheme = 'light' 555 } 556 applyTheme(newTheme) 557 window.localStorage.setItem('Stellar.theme', newTheme) 558 utils.dark.mode = newTheme === 'auto' ? (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light") : newTheme; 559 utils.dark.method.toggle.start(); 560 561 const messages = { 562 light: `忢尿µ è²æ¨¡å¼`, 563 dark: `忢尿·±è²æ¨¡å¼`, 564 auto: `忢å°è·éç³»ç»é è²`, 565 } 566 hud?.toast?.(messages[newTheme]) 567 } 568 569 (() => { 570 // Apply user's preferred theme, if any. 571 const theme = window.localStorage.getItem('Stellar.theme') 572 if (theme !== null) { 573 applyTheme(theme) 574 } else { 575 utils.dark.mode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; 576 } 577 utils.dark.method.toggle.start(); 578 })() 579</script>
579 580 581 582<!-- optional --> 583 584 585
586<script defer> 587 window.addEventListener('DOMContentLoaded', (event) => { 588 ctx.services = Object.assign({}, JSON.parse(`{"mdrender":{"js":"/js/services/mdrender.js"},"siteinfo":{"js":"/js/services/siteinfo.js","api":null},"ghinfo":{"js":"/js/services/ghinfo.js"},"rating":{"js":"/js/services/rating.js","api":"https://star-vote.xaox.cc/api/rating"},"vote":{"js":"/js/services/vote.js","api":"https://star-vote.xaox.cc/api/vote"},"sites":{"js":"/js/services/sites.js"},"friends":{"js":"/js/services/friends.js"},"friends_and_posts":{"js":"/js/services/friends_and_posts.js"},"timeline":{"js":"/js/services/timeline.js"},"fcircle":{"js":"/js/services/fcircle.js"},"weibo":{"js":"/js/services/weibo.js"},"memos":{"js":"/js/services/memos.js"},"voice":{"js":"/js/plugins/voice.js"},"video":{"js":"/js/plugins/video.js"},"download-file":{"js":"/js/plugins/download-file.js"},"twikoo":{"js":"/js/services/twikoo_latest_comment.js"},"waline":{"js":"/js/services/waline_latest_comment.js"},"artalk":{"js":"/js/services/artalk_latest_comment.js"},"giscus":{"js":"/js/services/giscus_latest_comment.js"},"contributors":{"edit_this_page":{"_posts/":null,"wiki/stellar/":"https://github.com/xaoxuu/hexo-theme-stellar-docs/blob/main/"},"js":"/js/services/contributors.js"}}`)); 589 for (let id of Object.keys(ctx.services)) { 590 const js = ctx.services[id].js; 591 if (id == 'siteinfo') { 592 ctx.cardlinks = document.querySelectorAll('a.link-card[cardlink]'); 593 if (ctx.cardlinks?.length > 0) { 594 utils.js(js, { defer: true }).then(function () { 595 setCardLink(ctx.cardlinks); 596 }); 597 } 598 } else if (id == 'voice') { 599 ctx.voiceAudios = document.querySelectorAll('.voice>audio'); 600 if (ctx.voiceAudios?.length > 0) { 601 utils.js(js, { defer: true }).then(function () { 602 createVoiceDom(ctx.voiceAudios); 603 }); 604 } 605 } else if (id == 'video') { 606 ctx.videos = document.querySelectorAll('.video>video'); 607 if (ctx.videos?.length > 0) { 608 utils.js(js, { defer: true }).then(function () { 609 videoEvents(ctx.videos); 610 }); 611 } 612 } else if (id == 'download-file') { 613 ctx.files = document.querySelectorAll('.file'); 614 if (ctx.files?.length > 0) { 615 utils.js(js, { defer: true }).then(function () { 616 downloadFileEvent(ctx.files); 617 }); 618 } 619 } else { 620 const els = document.getElementsByClassName(`ds-${id}`); 621 if (els?.length > 0) { 622 utils.jq(() => { 623 if (id == 'timeline' || 'memos' || 'marked') { 624 utils.js(deps.marked).then(function () { 625 utils.js(js, { defer: true }); 626 }); 627 } else { 628 utils.js(js, { defer: true }); 629 } 630 }); 631 } 632 } 633 } 634 635 // chat iphone time 636 let phoneTimes = document.querySelectorAll('.chat .status-bar .time'); 637 638 if (phoneTimes.length > 0) { 639 NowTime(); 640 var date = new Date(); 641 var sec = date.getSeconds(); 642 var firstAdjustInterval = setInterval(firstAdjustTime, 1000 * (60 - sec)); 643 } 644 645 function firstAdjustTime() { 646 NowTime(); 647 clearInterval(firstAdjustInterval); 648 setInterval(NowTime, 1000 * 60); 649 } 650 651 function NowTime() { 652 for (let i = 0; i < phoneTimes.length; ++i) { 653 var timeSpan = phoneTimes[i]; 654 var date = new Date(); 655 var hour = date.getHours(); 656 var min = date.getMinutes(); 657 timeSpan.innerHTML = check(hour) + ":" + check(min); 658 } 659 }; 660 661 function check(val) { 662 if (val < 10) { 663 return ("0" + val); 664 } 665 return (val); 666 } 667 668 // chat quote 669 const chat_quote_obverser = new IntersectionObserver((entries, observer) => { 670 entries.filter((entry) => { return entry.isIntersecting }).sort((a, b) => a.intersectionRect.y !== b.intersectionRect.y ? a.intersectionRect.y - b.intersectionRect.y : a.intersectionRect.x - b.intersectionRect.x).forEach((entry, index) => { 671 observer.unobserve(entry.target); 672 setTimeout(() => { 673 entry.target.classList.add('quote-blink'); 674 setTimeout(() => { 675 entry.target.classList.remove('quote-blink'); 676 }, 1000); 677 }, Math.max(100, 16) * (index + 1)); 678 }); 679 }); 680 681 var chatQuotes = document.querySelectorAll(".chat .talk .quote");
682 chatQuotes.forEach((quote) => { 683 quote.addEventListener('click', function () { 684 var chatCellDom = document.getElementById("quote-" + quote.getAttribute("quotedCellTag")); 685 if (chatCellDom) { 686 var chatDiv = chatCellDom.parentElement; 687 var mid = chatDiv.clientHeight / 2; 688 var offsetTop = chatCellDom.offsetTop; 689 if (offsetTop > mid - chatCellDom.clientHeight / 2) { 690 chatDiv.scrollTo({ 691 top: chatCellDom.offsetTop - mid + chatCellDom.clientHeight / 2, 692 behavior: "smooth" 693 }); 694 } else { 695 chatDiv.scrollTo({ 696 top: 0, 697 behavior: "smooth" 698 }); 699 } 700 chat_quote_obverser.observe(chatCellDom); 701 } 702 }); 703 }); 704 }); 705</script>
705 706
707<script> 708 window.addEventListener('DOMContentLoaded', (event) => { 709 ctx.search = { 710 path: `/search.json`, 711 } 712 utils.js('/js/search/local-search.js', { defer: true }); 713 }); 714</script>
714<script> 715 window.FPConfig = { 716 delay: 0, 717 ignoreKeywords: [], 718 maxRPS: 5, 719 hoverDelay: 25 720 }; 721</script>
vendor: 1 bytes, line 721
721
722<script defer src="https://gcore.jsdelivr.net/npm/flying-pages@2/flying-pages.min.js"></script>
722<script> 723 ctx.fancybox = { 724 selector: `.timenode p>img`, 725 css: `https://gcore.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.css`, 726 js: `https://gcore.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.umd.js` 727 }; 728 var selector = '[data-fancybox]:not(.error), .with-fancybox .atk-content img:not([atk-emoticon])'; 729 if (ctx.fancybox.selector) { 730 selector += `, ${ctx.fancybox.selector}` 731 } 732 var needFancybox = document.querySelectorAll(selector).length !== 0; 733 if (!needFancybox) { 734 const memos = document.getElementsByClassName('ds-memos'); 735 if (memos != undefined && memos.length > 0) { 736 needFancybox = true; 737 } 738 const fancybox = document.getElementsByClassName('with-fancybox'); 739 if (fancybox != undefined && fancybox.length > 0) { 740 needFancybox = true; 741 } 742 } 743 if (needFancybox) { 744 utils.css(ctx.fancybox.css); 745 utils.js(ctx.fancybox.js, { defer: true }).then(function () { 746 Fancybox.bind(selector, { 747 hideScrollbar: false, 748 Thumbs: { 749 autoStart: false, 750 }, 751 caption: (fancybox, slide) => { 752 return slide.triggerEl.alt || slide.triggerEl.dataset.caption || null 753 } 754 }); 755 }) 756 } 757</script>
vendor: 1 bytes, line 757
757
758<script> 759 window.addEventListener('DOMContentLoaded', (event) => { 760 const swiper_api = document.getElementById('swiper-api'); 761 if (swiper_api != undefined) { 762 utils.css(`https://unpkg.com/[email protected]/swiper-bundle.min.css`); 763 utils.js(`https://unpkg.com/[email protected]/swiper-bundle.min.js`, { defer: true }).then(function () { 764 const effect = swiper_api.getAttribute('effect') || ''; 765 var swiper = new Swiper('.swiper#swiper-api', { 766 slidesPerView: 'auto', 767 spaceBetween: 8, 768 centeredSlides: true, 769 effect: effect, 770 rewind: true, 771 pagination: { 772 el: '.swiper-pagination', 773 clickable: true, 774 }, 775 navigation: { 776 nextEl: '.swiper-button-next', 777 prevEl: '.swiper-button-prev', 778 }, 779 }); 780 }) 781 } 782 }); 783</script>
vendor: 1 bytes, line 783
783
784<script> 785 document.addEventListener('DOMContentLoaded', function () { 786 window.codeElements = document.querySelectorAll('.code'); 787 if (window.codeElements.length > 0) { 788 ctx.copycode = { 789 default_text: `Copy`, 790 success_text: `Copied`, 791 toast: `å¤å¶æå`, 792 }; 793 utils.js('/js/plugins/copycode.js'); 794 } 795 }); 796</script>
796 797 798 799<!-- inject --> 800 801</div></body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.