From 5086a1cbac6ddc89eea76e3410bb8a85474d2c26 Mon Sep 17 00:00:00 2001 From: ventusoon Date: Thu, 2 Nov 2023 20:29:35 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20ventusoo?= =?UTF-8?q?n/LuvSia.com@f615e89ed8ea25ed35eec6456064bcbfdefe57ab=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 8 +- article/index.html | 22 +- ...{1.html-dd3ba8f6.js => 1.html-001750be.js} | 2 +- assets/1.html-511e8744.js | 1 - ...{1.html-6915e587.js => 1.html-51e97c2e.js} | 2 +- assets/1.html-5e267a20.js | 1 - assets/1.html-6cf648bd.js | 1 + assets/1.html-71ec92f4.js | 1 + assets/1.html-7f111f65.js | 1 - assets/1.html-a3870386.js | 1 + assets/1.html-a3f9308e.js | 1 - assets/1.html-a4da039b.js | 1 - assets/1.html-ece550ef.js | 1 - assets/1.html-efd29e37.js | 1 + assets/1993.html-1e5cc14f.js | 1 + ...html-0318c179.js => 1993.html-2214935d.js} | 2 +- ...html-08d375ac.js => 1993.html-3eb77e30.js} | 2 +- assets/1993.html-43edcf34.js | 1 - assets/1993.html-76dc4228.js | 1 + assets/1993.html-847ce58a.js | 1 + assets/1993.html-8db62939.js | 1 + assets/1993.html-d706fdc4.js | 1 - assets/2.html-1ecba53e.js | 1 - assets/2.html-5ee5455f.js | 1 - assets/2.html-8491e5cf.js | 1 - assets/2.html-989e3faa.js | 1 - assets/2.html-aaf7736c.js | 1 - assets/2.html-bb863dbd.js | 1 - assets/2.html-cd356435.js | 1 - assets/2.html-d0a9a622.js | 1 - assets/3.html-0c824db3.js | 1 - assets/3.html-2eea3f44.js | 1 - assets/3.html-5eecb380.js | 1 - assets/3.html-9f696df2.js | 1 - assets/4.html-76821829.js | 1 - assets/4.html-83d1bb08.js | 1 - assets/4.html-a5613868.js | 1 - assets/4.html-bdc6058b.js | 1 - ....html-0f3c2f75.js => 404.html-955e9471.js} | 2 +- assets/Best-Emoji.html-af2a208a.js | 1 - assets/Best-Emoji.html-e464dad3.js | 1 - assets/ChatGPT-Porxy.html-cfe3314c.js | 1 - assets/DDNS.html-916db36a.js | 1 - assets/Hackintosh.html-cfb7bd5c.js | 1 - assets/app-31e6d5d9.js | 802 +++++++++++ assets/app-6ad7b3e7.js | 1181 ----------------- ...6a7.js => beautification.html-30a11aa7.js} | 2 +- assets/beautification.html-8bf5ef6d.js | 1 - assets/beautification.html-8d019e22.js | 1 - ...d77.js => beautification.html-9b9a2993.js} | 2 +- assets/beautification.html-9c057b7a.js | 1 + assets/beautification.html-a0002e89.js | 1 + assets/beautification.html-c5f05e66.js | 1 + assets/beautification.html-e0860d2c.js | 1 + ...c416116.js => best-emoji.html-07f7a594.js} | 2 +- assets/best-emoji.html-0b90709d.js | 1 + assets/best-emoji.html-136cba34.js | 1 - assets/best-emoji.html-4312b98d.js | 1 + assets/best-emoji.html-44112ff3.js | 1 + assets/best-emoji.html-92d307b4.js | 1 + assets/best-emoji.html-d9cacc27.js | 1 + assets/build-sub.html-15c0be5a.js | 1 - assets/build-sub.html-2b0e812e.js | 1 + ...83f43b18.js => build-sub.html-49faa77d.js} | 2 +- ...d13a9d0d.js => build-sub.html-57aad8d9.js} | 20 +- assets/build-sub.html-60045550.js | 1 + assets/build-sub.html-d9c0fd26.js | 39 + assets/build-sub.html-df365527.js | 1 + assets/buildSUB.html-24920918.js | 1 - ...f018.js => chatgpt-porxy.html-183a1e90.js} | 2 +- assets/chatgpt-porxy.html-371650dd.js | 1 + assets/chatgpt-porxy.html-9c458605.js | 1 - ...b6aa.js => chatgpt-porxy.html-c830a73d.js} | 6 +- assets/chatgpt-porxy.html-dcda8b76.js | 1 + assets/chatgpt-porxy.html-dd1fb6fe.js | 1 + assets/chatgpt-porxy.html-fe803d7d.js | 48 + assets/chatgpt.html-4fc77441.js | 1 + assets/chatgpt.html-6ef83cf6.js | 1 - assets/chatgpt.html-8c71b55c.js | 1 + ...l-05cc5b82.js => chatgpt.html-9d046828.js} | 2 +- assets/chatgpt.html-9e1fafbb.js | 1 - assets/chatgpt.html-b68f2b07.js | 1 + ...l-8e98d67d.js => chatgpt.html-d593c2c0.js} | 2 +- assets/chatgpt.html-ded85732.js | 54 + assets/cherry.html-1e76ed70.js | 1 - assets/cherry.html-31049b7f.js | 1 - assets/cherry.html-5c6ba0e1.js | 1 - assets/cherry.html-7c25a6bb.js | 1 - assets/component-a3d32b82.js | 53 - ...html-1d86c1c0.js => ddns.html-18698493.js} | 2 +- assets/ddns.html-752ce35c.js | 1 - assets/ddns.html-79fb6ac0.js | 1 + ...html-fd3ede4f.js => ddns.html-7a09446e.js} | 4 +- assets/ddns.html-85a5a569.js | 1 + assets/ddns.html-aed55ac9.js | 1 + assets/ddns.html-bba7c33f.js | 3 + ...l-12af4767.js => disable.html-8023c7b3.js} | 2 +- ...l-2dc1a466.js => disable.html-e29db426.js} | 2 +- ...l-0880f8ca.js => disable.html-e80e87bd.js} | 2 +- assets/dragonfruit.html-011817fa.js | 1 - assets/dragonfruit.html-3bc92f57.js | 1 - assets/dragonfruit.html-6181440c.js | 1 - assets/dragonfruit.html-8ad298e0.js | 1 - assets/encrypt.html-4826ee8c.js | 1 + ...l-3dbf7c89.js => encrypt.html-6334527f.js} | 2 +- assets/encrypt.html-6bd3e91c.js | 1 + assets/encrypt.html-8faba332.js | 1 - assets/encrypt.html-988f9711.js | 1 - ...l-4e14b770.js => encrypt.html-9db00ebb.js} | 2 +- assets/encrypt.html-a049ffaa.js | 1 + ...l-163371f7.js => encrypt.html-bfa7616e.js} | 2 +- assets/encrypt.html-f00fc6c2.js | 1 - assets/github-actions-deploy.html-041ac534.js | 1 + assets/github-actions-deploy.html-08cfe2be.js | 1 - ...=> github-actions-deploy.html-0b1951b9.js} | 2 +- assets/github-actions-deploy.html-201932e2.js | 1 + assets/github-actions-deploy.html-5ae8b5e0.js | 1 + assets/github-actions-deploy.html-a8f175b6.js | 1 - ...=> github-actions-deploy.html-bdd4c43b.js} | 2 +- assets/github-actions-deploy.html-ed263cc6.js | 90 ++ assets/github-tools.html-17095057.js | 1 + ...864c0.js => github-tools.html-3a31dec0.js} | 2 +- assets/github-tools.html-3f99a866.js | 1 - ...d1ff6.js => github-tools.html-4959671e.js} | 2 +- assets/github-tools.html-55cfd8eb.js | 1 - assets/github-tools.html-698285bb.js | 1 + assets/github-tools.html-95c6c3a5.js | 1 + assets/github-tools.html-d05d3165.js | 1 + assets/hackintosh.html-19cfcf00.js | 1 - ...74c5786.js => hackintosh.html-38e5577a.js} | 2 +- ...513ad0b.js => hackintosh.html-468e0953.js} | 2 +- assets/hackintosh.html-6ce59f55.js | 1 + assets/hackintosh.html-7e31969b.js | 1 + assets/hackintosh.html-8b854f9c.js | 1 + assets/hackintosh.html-fac6d3f1.js | 1 + ...7b01e1.js => hello-world.html-21537801.js} | 2 +- assets/hello-world.html-734ec773.js | 1 + assets/hello-world.html-79a1fe34.js | 1 - ...05fbd6.js => hello-world.html-8b6e1d50.js} | 2 +- assets/hello-world.html-9673670c.js | 1 + assets/hello-world.html-b93a4ba1.js | 1 - assets/hello-world.html-bfc56e5b.js | 1 + assets/hello-world.html-e411bcf4.js | 100 ++ assets/index.html-012bd0f3.js | 1 - ...tml-047969b3.js => index.html-0307b727.js} | 2 +- ...tml-047a4dec.js => index.html-0404d6c3.js} | 2 +- ...tml-04e40098.js => index.html-049f25cb.js} | 2 +- ...tml-391cd8a7.js => index.html-05ee54d1.js} | 2 +- ...tml-0168c5b0.js => index.html-06bd53e1.js} | 2 +- ...tml-e2d9b3f4.js => index.html-085f29ed.js} | 2 +- ...tml-134acba0.js => index.html-094d99ec.js} | 2 +- assets/index.html-096f2448.js | 1 - assets/index.html-097c3fd6.js | 1 + assets/index.html-0a046f13.js | 1 + assets/index.html-0ac4f744.js | 1 - assets/index.html-0b37808f.js | 1 - assets/index.html-0b420705.js | 1 + assets/index.html-0b93661b.js | 1 + assets/index.html-0c338acd.js | 1 + assets/index.html-0d1e3c0b.js | 1 + assets/index.html-0d9b3901.js | 1 - assets/index.html-0f8d202f.js | 1 - assets/index.html-11430c69.js | 1 - assets/index.html-121f1572.js | 1 - assets/index.html-1400c126.js | 1 + assets/index.html-1454049e.js | 1 - assets/index.html-152a5459.js | 1 - ...tml-0dec7a9b.js => index.html-15609fd2.js} | 2 +- assets/index.html-15abd7f4.js | 1 + ...tml-0fb55a0f.js => index.html-16bee170.js} | 2 +- assets/index.html-185f3271.js | 1 + assets/index.html-189017b1.js | 1 - assets/index.html-1911274a.js | 1 - assets/index.html-19c228b2.js | 1 - assets/index.html-1a889665.js | 1 - assets/index.html-1ae49c0c.js | 1 - assets/index.html-1ae81f74.js | 1 + assets/index.html-1aedb1a6.js | 1 + assets/index.html-1b1332dd.js | 1 - assets/index.html-1b5e9bdb.js | 1 - assets/index.html-1cd2d2a2.js | 1 + assets/index.html-1e888e3e.js | 1 - assets/index.html-1e9a0b83.js | 1 - assets/index.html-1ecca043.js | 1 - assets/index.html-1eea268a.js | 1 + assets/index.html-1f592d3a.js | 1 - assets/index.html-1fbe1988.js | 1 - assets/index.html-1fd7751e.js | 1 - assets/index.html-2116f014.js | 1 - assets/index.html-21229423.js | 1 - assets/index.html-21b8afce.js | 1 + assets/index.html-21dfedb7.js | 1 - assets/index.html-2331c347.js | 1 + assets/index.html-23d51dea.js | 1 + assets/index.html-24204360.js | 1 + assets/index.html-26725dde.js | 1 - assets/index.html-26e8aee0.js | 1 + assets/index.html-26fc2be6.js | 1 + assets/index.html-27bc2833.js | 1 + ...tml-24abe18b.js => index.html-28a11be6.js} | 2 +- assets/index.html-28f6ce88.js | 1 + assets/index.html-296b05c9.js | 1 + assets/index.html-29b66ffd.js | 1 - assets/index.html-2a2e637f.js | 1 - ...tml-6044a3b4.js => index.html-2b182a64.js} | 2 +- assets/index.html-2c58a234.js | 1 + assets/index.html-2c78ed22.js | 1 - assets/index.html-2c7c432e.js | 1 + assets/index.html-2cdaac08.js | 1 - assets/index.html-2d25b860.js | 1 + assets/index.html-2d445ddf.js | 1 + assets/index.html-2e8c79ab.js | 1 - assets/index.html-2fb88d73.js | 1 + assets/index.html-2fc1fb87.js | 1 - assets/index.html-2fc93233.js | 1 + assets/index.html-2fcb5b3a.js | 1 - assets/index.html-332c7f56.js | 1 - assets/index.html-33f47f55.js | 1 - assets/index.html-351823c1.js | 1 - assets/index.html-35960569.js | 1 + assets/index.html-359da05e.js | 1 + assets/index.html-35daf4a6.js | 1 + assets/index.html-36b05b52.js | 1 + assets/index.html-36cd1408.js | 1 + assets/index.html-3700fe35.js | 1 + assets/index.html-37dda41c.js | 1 - assets/index.html-382f1549.js | 1 + assets/index.html-3850e25b.js | 1 - assets/index.html-387816c0.js | 1 + assets/index.html-3890cc34.js | 1 - assets/index.html-3a0b32d7.js | 1 - assets/index.html-3a9f157a.js | 1 + assets/index.html-3bef3fd1.js | 1 - assets/index.html-3c6c4c61.js | 1 - assets/index.html-3ce417c2.js | 1 + assets/index.html-3cffa052.js | 1 + assets/index.html-3d9deb0e.js | 1 - assets/index.html-3e1cba5b.js | 1 + assets/index.html-3f56f36e.js | 1 + assets/index.html-41a33c60.js | 1 - assets/index.html-41adc733.js | 1 - assets/index.html-41b31c3c.js | 1 + assets/index.html-41c793c5.js | 1 + ...tml-245dd65b.js => index.html-41dd8baa.js} | 2 +- assets/index.html-42c13a2b.js | 1 - assets/index.html-4303aa5d.js | 1 - assets/index.html-43b298c2.js | 1 + assets/index.html-43d40b48.js | 1 - assets/index.html-43d9e56f.js | 1 + assets/index.html-44d056bb.js | 1 - assets/index.html-45475709.js | 1 + assets/index.html-45e9da17.js | 1 + assets/index.html-469a2a6c.js | 1 + assets/index.html-47866d65.js | 1 - assets/index.html-47b3a952.js | 1 - assets/index.html-4cc4f96f.js | 1 + assets/index.html-4cceb0c3.js | 1 + ...tml-27d28e2b.js => index.html-4d1c81e2.js} | 2 +- assets/index.html-4dc0821b.js | 1 - assets/index.html-4e629551.js | 1 - assets/index.html-4e638cd9.js | 1 + assets/index.html-4f1c6af7.js | 1 + assets/index.html-5073f7f5.js | 1 - assets/index.html-50b15f08.js | 1 - assets/index.html-53067b89.js | 1 - assets/index.html-5338d71e.js | 1 - assets/index.html-547023ea.js | 1 + assets/index.html-55373fe0.js | 1 - assets/index.html-55921bb0.js | 1 - assets/index.html-55a01c7e.js | 1 + assets/index.html-578577a8.js | 1 + assets/index.html-587cc752.js | 1 + assets/index.html-588b1e29.js | 1 - assets/index.html-596b8af8.js | 1 + assets/index.html-5a7dc554.js | 1 - assets/index.html-5ca4b211.js | 1 - assets/index.html-5e115545.js | 1 - assets/index.html-5f9a12e2.js | 1 - assets/index.html-5fb8ee4a.js | 1 + assets/index.html-603b638e.js | 1 + assets/index.html-603b770b.js | 1 + assets/index.html-61223dad.js | 1 + assets/index.html-625ac650.js | 1 + assets/index.html-626f6ba3.js | 1 + ...tml-0af61a43.js => index.html-62f39c0b.js} | 2 +- assets/index.html-64319199.js | 1 - assets/index.html-64d62604.js | 1 - assets/index.html-651a3bda.js | 1 - assets/index.html-666c7036.js | 1 - assets/index.html-66f7758e.js | 1 + assets/index.html-679ffb3a.js | 1 + assets/index.html-67dc77dd.js | 1 + assets/index.html-6b52e7b4.js | 1 - assets/index.html-6b6dbd62.js | 1 - assets/index.html-6ca0177c.js | 1 + assets/index.html-6d1eebb8.js | 1 - assets/index.html-6e095a42.js | 1 - assets/index.html-6e221866.js | 1 - assets/index.html-6ea85a63.js | 1 - assets/index.html-6f6c907e.js | 1 + assets/index.html-705f6b8d.js | 1 + ...tml-34a1dca9.js => index.html-72af2593.js} | 2 +- assets/index.html-735eaea7.js | 1 + assets/index.html-74afaece.js | 1 - assets/index.html-75b05eae.js | 1 + assets/index.html-761f915e.js | 1 - assets/index.html-7762ebe8.js | 1 + assets/index.html-78ea5d96.js | 1 + assets/index.html-793b9427.js | 1 - assets/index.html-7a6e01eb.js | 1 - assets/index.html-7ae5c064.js | 1 + assets/index.html-7d27e18d.js | 1 - assets/index.html-7e066fc5.js | 1 + assets/index.html-7e9ed5db.js | 1 + ...tml-0c2f8d08.js => index.html-7ec5ada2.js} | 2 +- assets/index.html-8140e136.js | 1 - assets/index.html-82a8990f.js | 1 - assets/index.html-82ab2cf4.js | 1 + assets/index.html-8344319c.js | 1 - assets/index.html-83c28d60.js | 1 + assets/index.html-83d84fd4.js | 1 + assets/index.html-85e5c1fe.js | 1 - assets/index.html-85f61934.js | 1 - assets/index.html-86a6c3c6.js | 1 - assets/index.html-86ee1de9.js | 1 - assets/index.html-87b6652a.js | 1 - assets/index.html-8809bbd4.js | 1 + assets/index.html-892ef4ff.js | 1 + assets/index.html-8a4eb19b.js | 1 - assets/index.html-8c45c760.js | 1 + assets/index.html-8d760403.js | 1 - assets/index.html-8f7c302c.js | 1 + ...tml-da1cf023.js => index.html-908dee3a.js} | 2 +- assets/index.html-912eb683.js | 1 + assets/index.html-926218fc.js | 1 + assets/index.html-92ec79b0.js | 1 - assets/index.html-92fe4eb9.js | 1 + assets/index.html-934bd04a.js | 1 + assets/index.html-9362b72a.js | 1 + assets/index.html-93c0a86a.js | 1 + assets/index.html-93fe8cd6.js | 1 + assets/index.html-9453a95c.js | 1 + assets/index.html-94e729fb.js | 1 + assets/index.html-9625f5db.js | 1 - assets/index.html-964f4341.js | 1 + assets/index.html-97eaede9.js | 1 + assets/index.html-98a94903.js | 1 + assets/index.html-99719842.js | 1 - assets/index.html-9af9f030.js | 1 - assets/index.html-9bca12b7.js | 1 - assets/index.html-9bd6afd0.js | 1 + assets/index.html-9c8faf05.js | 1 + assets/index.html-9d94ff29.js | 1 - assets/index.html-9f4f6e38.js | 1 + assets/index.html-a07bd3d7.js | 1 - assets/index.html-a121904d.js | 1 - assets/index.html-a1db22b6.js | 1 + assets/index.html-a59560cf.js | 1 + assets/index.html-a6ad820d.js | 1 + assets/index.html-a722279f.js | 1 - assets/index.html-a7d92b20.js | 1 - assets/index.html-a9168c32.js | 1 - assets/index.html-a98c472d.js | 1 + assets/index.html-a9d0c9e9.js | 1 - assets/index.html-ab8f78c0.js | 1 - assets/index.html-abb68896.js | 1 - assets/index.html-ac96c2c6.js | 1 - assets/index.html-ad570406.js | 1 - assets/index.html-ad5c6e5d.js | 1 - assets/index.html-ade85bb5.js | 1 - ...tml-a3530c11.js => index.html-adf3f3bc.js} | 2 +- assets/index.html-af1024db.js | 1 - assets/index.html-b2c5ba16.js | 1 + assets/index.html-b2c6ad77.js | 1 - assets/index.html-b4669e23.js | 1 + assets/index.html-b55f3646.js | 1 + assets/index.html-b58e281d.js | 1 - assets/index.html-b5dd3af1.js | 1 + assets/index.html-b651158f.js | 1 + assets/index.html-b6732599.js | 1 - assets/index.html-b70e252a.js | 1 + assets/index.html-b92146fa.js | 1 - assets/index.html-b9d26869.js | 1 - assets/index.html-bcbca2ae.js | 1 + assets/index.html-bcc19798.js | 1 + ...tml-25a7a20d.js => index.html-bcc52ef6.js} | 2 +- assets/index.html-bccb4373.js | 1 + assets/index.html-c00da731.js | 1 + assets/index.html-c028ca19.js | 1 - assets/index.html-c2e18b78.js | 1 - assets/index.html-c3f4f7da.js | 1 + assets/index.html-c4006b01.js | 1 - assets/index.html-c41e65fa.js | 1 - assets/index.html-c72f9553.js | 1 - assets/index.html-c7c398d8.js | 1 - assets/index.html-ca9fd618.js | 1 + assets/index.html-caa09dcd.js | 1 - assets/index.html-cb260c51.js | 1 + assets/index.html-cc9e8f9d.js | 1 + assets/index.html-ccb3bf30.js | 1 - assets/index.html-cd0457ab.js | 1 - assets/index.html-cd6683b4.js | 1 + assets/index.html-cef4a48d.js | 1 + assets/index.html-cf242c7f.js | 1 - assets/index.html-d08a63ec.js | 1 - assets/index.html-d0b117c4.js | 1 - assets/index.html-d200d06a.js | 1 - assets/index.html-d27428cc.js | 1 - assets/index.html-d7009805.js | 1 + assets/index.html-d756f031.js | 1 + assets/index.html-d84751ac.js | 1 - assets/index.html-d981c09f.js | 1 + assets/index.html-da746ba8.js | 1 + assets/index.html-dafb6d64.js | 1 + assets/index.html-db8a4be3.js | 1 + assets/index.html-dcc5f69d.js | 1 - assets/index.html-dce620a2.js | 1 - assets/index.html-df2287d8.js | 1 + assets/index.html-e01d58e1.js | 1 - assets/index.html-e125b663.js | 1 - assets/index.html-e2fe5189.js | 1 - assets/index.html-e44c0578.js | 1 - assets/index.html-e4d049c4.js | 1 + assets/index.html-e5e5a407.js | 1 - assets/index.html-e7588454.js | 1 + assets/index.html-e8a05ee5.js | 1 + assets/index.html-e8a54d7b.js | 1 + assets/index.html-e8c8c7f6.js | 1 - assets/index.html-ea05b96a.js | 1 + ...tml-3d8ed229.js => index.html-ea7a11a1.js} | 2 +- assets/index.html-eaaf2356.js | 1 - assets/index.html-eab2a5a0.js | 1 - assets/index.html-eb134b42.js | 1 - assets/index.html-ece582ad.js | 1 + assets/index.html-ed045ded.js | 1 - assets/index.html-ed057c4e.js | 1 + assets/index.html-ee7dee45.js | 1 + assets/index.html-eeefa7db.js | 1 + assets/index.html-eff6ceac.js | 1 - assets/index.html-f0da1e3a.js | 1 + assets/index.html-f1f512a3.js | 1 + assets/index.html-f40d419a.js | 1 - assets/index.html-f50aa45b.js | 1 - assets/index.html-f58c0db5.js | 1 - assets/index.html-f6c1cdca.js | 1 - assets/index.html-f7105cf6.js | 1 - assets/index.html-f7347f7d.js | 1 - assets/index.html-f75c5c5a.js | 1 - assets/index.html-f76343a6.js | 1 - assets/index.html-f8464440.js | 1 - assets/index.html-f9503967.js | 1 + assets/index.html-f96bb28a.js | 1 - assets/index.html-f98124b1.js | 1 - assets/index.html-fc01b36e.js | 1 + assets/index.html-fcffc17a.js | 1 - assets/index.html-fdca3fd5.js | 1 - assets/index.html-fead34b1.js | 1 - assets/index.html-ff3a5180.js | 1 - assets/index.html-ffa7534c.js | 1 + ...tml-5102a84a.js => intro.html-2924afa3.js} | 2 +- ...tml-c8e99b88.js => intro.html-72a1418c.js} | 2 +- ...tml-df0c91a9.js => intro.html-a4b3d53c.js} | 2 +- ....html-41562c5f.js => kms.html-18534782.js} | 2 +- assets/kms.html-3428cd4d.js | 1 + ....html-9cb069c1.js => kms.html-3f6b25df.js} | 2 +- assets/kms.html-65f1263a.js | 1 + assets/kms.html-74002bf4.js | 17 + assets/kms.html-c03481a1.js | 1 - assets/kms.html-de24db7d.js | 1 + assets/kms.html-e9b66b86.js | 1 - ...-af36638a.js => markdown.html-2048d427.js} | 2 +- ...-6bb43987.js => markdown.html-4a30a958.js} | 2 +- ...-ae168cdb.js => markdown.html-b2bbd4f3.js} | 2 +- ...s => nginx-proxy-manager.html-0b61cfea.js} | 2 +- assets/nginx-proxy-manager.html-6c92adb2.js | 1 + assets/nginx-proxy-manager.html-6e9cbb00.js | 1 + ...s => nginx-proxy-manager.html-885dee3d.js} | 2 +- assets/nginx-proxy-manager.html-b289b7c8.js | 43 + assets/nginx-proxy-manager.html-b503a5ba.js | 1 - assets/nginx-proxy-manager.html-c2b011ae.js | 1 + assets/nginx-proxy-manager.html-f27bbffc.js | 1 - ...html-afd6bfe3.js => page.html-528727fe.js} | 2 +- ...html-b60e82a7.js => page.html-596f0780.js} | 2 +- ...html-d16f1ec2.js => page.html-af1d8193.js} | 2 +- assets/pageview-97b7fb5a.js | 1 - assets/pageview-97e6a3fb.js | 1 + ...eview_vuepress-plugin-comment2-b25bb000.js | 1 + assets/port-forwarding.html-0d88a02a.js | 1 + assets/port-forwarding.html-28419169.js | 1 - ...aa.js => port-forwarding.html-4d3bdef4.js} | 2 +- ...04.js => port-forwarding.html-5d8e288c.js} | 2 +- assets/port-forwarding.html-66161e9f.js | 1 + assets/port-forwarding.html-b8021567.js | 1 + assets/port-forwarding.html-c31c8ce9.js | 1 + assets/port-forwarding.html-defa9c3d.js | 1 - assets/server-building.html-0737554b.js | 1 + assets/server-building.html-159fc937.js | 1 + ...f7.js => server-building.html-1c77fabc.js} | 2 +- ...45.js => server-building.html-32e322b2.js} | 28 +- assets/server-building.html-8988f626.js | 125 ++ assets/server-building.html-ca5e3702.js | 1 - assets/server-building.html-d06c8ec2.js | 1 + assets/server-building.html-ed0aa29b.js | 1 - ...ml-45d7895e.js => slides.html-261cbb3f.js} | 2 +- ...ml-54ff44e8.js => slides.html-db36ad00.js} | 2 +- ...ml-8c30782b.js => slides.html-fb40cc1f.js} | 2 +- assets/strawberry.html-427da59a.js | 1 - assets/strawberry.html-57885786.js | 1 - assets/strawberry.html-bb1c9c6f.js | 1 - assets/strawberry.html-f0832984.js | 1 - assets/style-00cb9071.css | 1 - assets/style-0db26813.css | 1 + assets/tomato.html-2b88b057.js | 1 - assets/tomato.html-9623d888.js | 1 - assets/tomato.html-afdbd350.js | 1 - assets/tomato.html-c90988e8.js | 1 - assets/tomato.html-d26a6940.js | 1 - assets/tomato.html-d4d71af4.js | 1 - assets/waline-meta-56fbc549.js | 2 - category/home-network-layout/index.html | 12 +- category/index.html | 8 +- category/linux/index.html | 12 +- category/macos/index.html | 12 +- category/windows/index.html | 12 +- .../index.html" | 10 +- .../\346\260\264\346\236\234/index.html" | 42 - .../\350\213\271\346\236\234/index.html" | 12 +- .../\350\224\254\350\217\234/index.html" | 45 - .../\351\246\231\350\225\211/index.html" | 42 - code/beautification.html | 10 +- code/best-emoji.html | 10 +- code/build-sub.html | 12 +- code/chatgpt-porxy.html | 12 +- code/chatgpt.html | 12 +- code/ddns.html | 12 +- code/github-actions-deploy.html | 12 +- code/github-tools.html | 10 +- code/hackintosh.html | 10 +- code/hello-world.html | 12 +- code/index.html | 10 +- code/kms.html | 12 +- code/nginx-proxy-manager.html | 12 +- code/port-forwarding.html | 10 +- code/server-building.html | 12 +- demo/disable.html | 8 +- demo/encrypt.html | 8 +- demo/index.html | 8 +- demo/markdown.html | 10 +- demo/page.html | 8 +- en/article/index.html | 60 +- en/category/apple/index.html | 57 - en/category/banana/index.html | 57 - en/category/cherry/index.html | 45 - en/category/dragon-fruit/index.html | 45 - en/category/fruit/index.html | 67 - en/category/guide/index.html | 10 +- en/category/home-network-layout/index.html | 100 ++ en/category/index.html | 8 +- en/category/linux/index.html | 115 ++ en/category/macos/index.html | 57 + en/category/strawberry/index.html | 45 - en/category/vegetable/index.html | 45 - en/category/windows/index.html | 58 + .../\350\213\271\346\236\234/index.html" | 45 + en/code/beautification.html | 40 + en/code/best-emoji.html | 40 + en/code/build-sub.html | 78 ++ en/code/chatgpt-porxy.html | 87 ++ en/code/chatgpt.html | 93 ++ en/code/ddns.html | 42 + en/code/github-actions-deploy.html | 129 ++ en/code/github-tools.html | 40 + en/code/hackintosh.html | 40 + en/code/hello-world.html | 139 ++ en/code/index.html | 40 + en/code/kms.html | 56 + en/code/nginx-proxy-manager.html | 82 ++ en/code/port-forwarding.html | 40 + en/code/server-building.html | 164 +++ en/demo/disable.html | 8 +- en/demo/encrypt.html | 8 +- en/demo/index.html | 8 +- en/demo/markdown.html | 10 +- en/demo/page.html | 8 +- en/index.html | 62 +- en/intro.html | 8 +- en/note/1.html | 40 + en/note/1993.html | 40 + en/note/index.html | 40 + en/posts/apple/1.html | 40 - en/posts/apple/2.html | 40 - en/posts/apple/3.html | 40 - en/posts/apple/4.html | 40 - en/posts/apple/index.html | 40 - en/posts/banana/1.html | 40 - en/posts/banana/2.html | 40 - en/posts/banana/3.html | 40 - en/posts/banana/4.html | 40 - en/posts/banana/index.html | 40 - en/posts/cherry.html | 40 - en/posts/dragonfruit.html | 40 - en/posts/index.html | 40 - en/posts/strawberry.html | 40 - en/posts/tomato.html | 40 - en/slides.html | 6 +- en/star/index.html | 37 +- en/tag/big/index.html | 62 - en/tag/blog/index.html | 108 ++ en/tag/chatgpt/index.html | 55 + en/tag/curly/index.html | 57 - en/tag/ddns/index.html | 67 + en/tag/disable/index.html | 10 +- en/tag/encryption/index.html | 8 +- en/tag/frontend/index.html | 57 + en/tag/guide/index.html | 10 +- en/tag/hackintosh/index.html | 57 + en/tag/index.html | 8 +- en/tag/kms/index.html | 53 + en/tag/long/index.html | 57 - en/tag/markdown/index.html | 17 +- en/tag/my-birthday/index.html | 40 + en/tag/network/index.html | 67 + en/tag/page-config/index.html | 10 +- en/tag/port-forward/index.html | 60 + en/tag/red/index.html | 77 -- en/tag/round/index.html | 67 - en/tag/server/index.html | 148 +++ en/tag/small/index.html | 50 - en/tag/tools/index.html | 58 + en/tag/yellow/index.html | 57 - "en/tag/\345\234\206/index.html" | 45 + "en/tag/\345\244\247/index.html" | 45 + "en/tag/\346\230\223/index.html" | 40 + "en/tag/\347\272\242/index.html" | 45 + en/timeline/index.html | 8 +- index.html | 20 +- intro.html | 8 +- note/1.html | 10 +- note/1993.html | 10 +- note/index.html | 10 +- posts/banana/2.html | 40 - posts/banana/index.html | 40 - posts/index.html | 40 - posts/tomato.html | 40 - sitemap.xml | 2 +- slides.html | 6 +- star/index.html | 19 +- tag/blog/index.html | 12 +- tag/chatgpt/index.html | 12 +- tag/ddns/index.html | 12 +- tag/frontend/index.html | 12 +- tag/hackintosh/index.html | 12 +- tag/index.html | 8 +- tag/kms/index.html | 12 +- tag/markdown/index.html | 10 +- tag/my-birthday/index.html | 10 +- tag/network/index.html | 12 +- tag/port-forward/index.html | 12 +- tag/server/index.html | 12 +- tag/tools/index.html | 12 +- .../index.html" | 10 +- "tag/\345\234\206/index.html" | 17 +- "tag/\345\244\247/index.html" | 12 +- .../index.html" | 42 - .../index.html" | 8 +- "tag/\346\230\223/index.html" | 10 +- "tag/\347\246\201\347\224\250/index.html" | 10 +- "tag/\347\272\242/index.html" | 17 +- "tag/\351\225\277/index.html" | 42 - .../index.html" | 10 +- "tag/\351\273\204/index.html" | 42 - timeline/index.html | 8 +- zh/article/index.html | 56 +- zh/category/home-network-layout/index.html | 100 ++ zh/category/index.html | 8 +- zh/category/linux/index.html | 115 ++ zh/category/macos/index.html | 57 + zh/category/windows/index.html | 58 + .../index.html" | 10 +- .../\345\273\272\347\253\231/index.html" | 69 - .../\346\250\261\346\241\203/index.html" | 45 - .../\346\260\264\346\236\234/index.html" | 50 - .../index.html" | 45 - .../\350\213\271\346\236\234/index.html" | 12 +- .../\350\215\211\350\216\223/index.html" | 45 - .../\350\224\254\350\217\234/index.html" | 45 - zh/code/beautification.html | 40 + zh/code/best-emoji.html | 40 + zh/code/build-sub.html | 78 ++ zh/code/chatgpt-porxy.html | 87 ++ zh/code/chatgpt.html | 93 ++ zh/code/ddns.html | 42 + zh/code/github-actions-deploy.html | 129 ++ zh/code/github-tools.html | 40 + zh/code/hackintosh.html | 40 + zh/code/hello-world.html | 139 ++ zh/code/index.html | 40 + zh/code/kms.html | 56 + zh/code/nginx-proxy-manager.html | 82 ++ zh/code/port-forwarding.html | 40 + zh/code/server-building.html | 164 +++ zh/demo/disable.html | 8 +- zh/demo/encrypt.html | 8 +- zh/demo/index.html | 8 +- zh/demo/markdown.html | 10 +- zh/demo/page.html | 8 +- zh/index.html | 58 +- zh/intro.html | 8 +- zh/note/1.html | 40 + zh/note/1993.html | 40 + zh/note/index.html | 40 + zh/posts/Linux/1993.html | 40 - zh/posts/Linux/Best-Emoji.html | 40 - zh/posts/Linux/beautification.html | 40 - zh/posts/Linux/index.html | 40 - zh/posts/MacOS/Hackintosh.html | 40 - zh/posts/MacOS/index.html | 40 - zh/posts/Server/1.html | 40 - zh/posts/Server/2.html | 40 - zh/posts/Server/ChatGPT-Porxy.html | 87 -- zh/posts/Server/buildSUB.html | 78 -- zh/posts/Server/chatgpt.html | 93 -- zh/posts/Server/github-actions-deploy.html | 129 -- zh/posts/Server/hello-world.html | 139 -- zh/posts/Server/index.html | 40 - zh/posts/Server/nginx-proxy-manager.html | 82 -- zh/posts/Server/server-building.html | 164 --- zh/posts/Windows/DDNS.html | 42 - zh/posts/Windows/github-tools.html | 40 - zh/posts/Windows/index.html | 40 - zh/posts/Windows/kms.html | 56 - zh/posts/Windows/port-forwarding.html | 40 - zh/posts/cherry.html | 40 - zh/posts/dragonfruit.html | 40 - zh/posts/index.html | 40 - zh/posts/strawberry.html | 40 - zh/posts/tomato.html | 40 - zh/slides.html | 6 +- zh/star/index.html | 35 +- zh/tag/blog/index.html | 554 +------- zh/tag/chatgpt/index.html | 12 +- zh/tag/ddns/index.html | 10 +- zh/tag/frontend/index.html | 10 +- zh/tag/hackintosh/index.html | 10 +- zh/tag/index.html | 8 +- zh/tag/kms/index.html | 10 +- zh/tag/markdown/index.html | 550 +------- zh/tag/my-birthday/index.html | 8 +- zh/tag/network/index.html | 32 +- zh/tag/port-forward/index.html | 10 +- zh/tag/server/index.html | 21 +- zh/tag/tools/index.html | 25 +- .../index.html" | 10 +- "zh/tag/\345\234\206/index.html" | 22 +- "zh/tag/\345\244\247/index.html" | 17 +- "zh/tag/\345\260\217/index.html" | 50 - .../index.html" | 8 +- "zh/tag/\346\230\223/index.html" | 8 +- "zh/tag/\347\246\201\347\224\250/index.html" | 10 +- "zh/tag/\347\272\242/index.html" | 32 +- .../index.html" | 10 +- zh/timeline/index.html | 8 +- 762 files changed, 6472 insertions(+), 7098 deletions(-) rename assets/{1.html-dd3ba8f6.js => 1.html-001750be.js} (90%) delete mode 100644 assets/1.html-511e8744.js rename assets/{1.html-6915e587.js => 1.html-51e97c2e.js} (90%) delete mode 100644 assets/1.html-5e267a20.js create mode 100644 assets/1.html-6cf648bd.js create mode 100644 assets/1.html-71ec92f4.js delete mode 100644 assets/1.html-7f111f65.js create mode 100644 assets/1.html-a3870386.js delete mode 100644 assets/1.html-a3f9308e.js delete mode 100644 assets/1.html-a4da039b.js delete mode 100644 assets/1.html-ece550ef.js create mode 100644 assets/1.html-efd29e37.js create mode 100644 assets/1993.html-1e5cc14f.js rename assets/{1993.html-0318c179.js => 1993.html-2214935d.js} (71%) rename assets/{1993.html-08d375ac.js => 1993.html-3eb77e30.js} (71%) delete mode 100644 assets/1993.html-43edcf34.js create mode 100644 assets/1993.html-76dc4228.js create mode 100644 assets/1993.html-847ce58a.js create mode 100644 assets/1993.html-8db62939.js delete mode 100644 assets/1993.html-d706fdc4.js delete mode 100644 assets/2.html-1ecba53e.js delete mode 100644 assets/2.html-5ee5455f.js delete mode 100644 assets/2.html-8491e5cf.js delete mode 100644 assets/2.html-989e3faa.js delete mode 100644 assets/2.html-aaf7736c.js delete mode 100644 assets/2.html-bb863dbd.js delete mode 100644 assets/2.html-cd356435.js delete mode 100644 assets/2.html-d0a9a622.js delete mode 100644 assets/3.html-0c824db3.js delete mode 100644 assets/3.html-2eea3f44.js delete mode 100644 assets/3.html-5eecb380.js delete mode 100644 assets/3.html-9f696df2.js delete mode 100644 assets/4.html-76821829.js delete mode 100644 assets/4.html-83d1bb08.js delete mode 100644 assets/4.html-a5613868.js delete mode 100644 assets/4.html-bdc6058b.js rename assets/{404.html-0f3c2f75.js => 404.html-955e9471.js} (71%) delete mode 100644 assets/Best-Emoji.html-af2a208a.js delete mode 100644 assets/Best-Emoji.html-e464dad3.js delete mode 100644 assets/ChatGPT-Porxy.html-cfe3314c.js delete mode 100644 assets/DDNS.html-916db36a.js delete mode 100644 assets/Hackintosh.html-cfb7bd5c.js create mode 100644 assets/app-31e6d5d9.js delete mode 100644 assets/app-6ad7b3e7.js rename assets/{beautification.html-b227e6a7.js => beautification.html-30a11aa7.js} (87%) delete mode 100644 assets/beautification.html-8bf5ef6d.js delete mode 100644 assets/beautification.html-8d019e22.js rename assets/{beautification.html-532f3d77.js => beautification.html-9b9a2993.js} (87%) create mode 100644 assets/beautification.html-9c057b7a.js create mode 100644 assets/beautification.html-a0002e89.js create mode 100644 assets/beautification.html-c5f05e66.js create mode 100644 assets/beautification.html-e0860d2c.js rename assets/{best-emoji.html-5c416116.js => best-emoji.html-07f7a594.js} (99%) create mode 100644 assets/best-emoji.html-0b90709d.js delete mode 100644 assets/best-emoji.html-136cba34.js create mode 100644 assets/best-emoji.html-4312b98d.js create mode 100644 assets/best-emoji.html-44112ff3.js create mode 100644 assets/best-emoji.html-92d307b4.js create mode 100644 assets/best-emoji.html-d9cacc27.js delete mode 100644 assets/build-sub.html-15c0be5a.js create mode 100644 assets/build-sub.html-2b0e812e.js rename assets/{build-sub.html-83f43b18.js => build-sub.html-49faa77d.js} (99%) rename assets/{buildSUB.html-d13a9d0d.js => build-sub.html-57aad8d9.js} (84%) create mode 100644 assets/build-sub.html-60045550.js create mode 100644 assets/build-sub.html-d9c0fd26.js create mode 100644 assets/build-sub.html-df365527.js delete mode 100644 assets/buildSUB.html-24920918.js rename assets/{chatgpt-porxy.html-ca6cf018.js => chatgpt-porxy.html-183a1e90.js} (99%) create mode 100644 assets/chatgpt-porxy.html-371650dd.js delete mode 100644 assets/chatgpt-porxy.html-9c458605.js rename assets/{ChatGPT-Porxy.html-0917b6aa.js => chatgpt-porxy.html-c830a73d.js} (95%) create mode 100644 assets/chatgpt-porxy.html-dcda8b76.js create mode 100644 assets/chatgpt-porxy.html-dd1fb6fe.js create mode 100644 assets/chatgpt-porxy.html-fe803d7d.js create mode 100644 assets/chatgpt.html-4fc77441.js delete mode 100644 assets/chatgpt.html-6ef83cf6.js create mode 100644 assets/chatgpt.html-8c71b55c.js rename assets/{chatgpt.html-05cc5b82.js => chatgpt.html-9d046828.js} (99%) delete mode 100644 assets/chatgpt.html-9e1fafbb.js create mode 100644 assets/chatgpt.html-b68f2b07.js rename assets/{chatgpt.html-8e98d67d.js => chatgpt.html-d593c2c0.js} (99%) create mode 100644 assets/chatgpt.html-ded85732.js delete mode 100644 assets/cherry.html-1e76ed70.js delete mode 100644 assets/cherry.html-31049b7f.js delete mode 100644 assets/cherry.html-5c6ba0e1.js delete mode 100644 assets/cherry.html-7c25a6bb.js delete mode 100644 assets/component-a3d32b82.js rename assets/{ddns.html-1d86c1c0.js => ddns.html-18698493.js} (99%) delete mode 100644 assets/ddns.html-752ce35c.js create mode 100644 assets/ddns.html-79fb6ac0.js rename assets/{DDNS.html-fd3ede4f.js => ddns.html-7a09446e.js} (95%) create mode 100644 assets/ddns.html-85a5a569.js create mode 100644 assets/ddns.html-aed55ac9.js create mode 100644 assets/ddns.html-bba7c33f.js rename assets/{disable.html-12af4767.js => disable.html-8023c7b3.js} (90%) rename assets/{disable.html-2dc1a466.js => disable.html-e29db426.js} (90%) rename assets/{disable.html-0880f8ca.js => disable.html-e80e87bd.js} (90%) delete mode 100644 assets/dragonfruit.html-011817fa.js delete mode 100644 assets/dragonfruit.html-3bc92f57.js delete mode 100644 assets/dragonfruit.html-6181440c.js delete mode 100644 assets/dragonfruit.html-8ad298e0.js create mode 100644 assets/encrypt.html-4826ee8c.js rename assets/{encrypt.html-3dbf7c89.js => encrypt.html-6334527f.js} (92%) create mode 100644 assets/encrypt.html-6bd3e91c.js delete mode 100644 assets/encrypt.html-8faba332.js delete mode 100644 assets/encrypt.html-988f9711.js rename assets/{encrypt.html-4e14b770.js => encrypt.html-9db00ebb.js} (92%) create mode 100644 assets/encrypt.html-a049ffaa.js rename assets/{encrypt.html-163371f7.js => encrypt.html-bfa7616e.js} (93%) delete mode 100644 assets/encrypt.html-f00fc6c2.js create mode 100644 assets/github-actions-deploy.html-041ac534.js delete mode 100644 assets/github-actions-deploy.html-08cfe2be.js rename assets/{github-actions-deploy.html-510b9279.js => github-actions-deploy.html-0b1951b9.js} (99%) create mode 100644 assets/github-actions-deploy.html-201932e2.js create mode 100644 assets/github-actions-deploy.html-5ae8b5e0.js delete mode 100644 assets/github-actions-deploy.html-a8f175b6.js rename assets/{github-actions-deploy.html-aba19868.js => github-actions-deploy.html-bdd4c43b.js} (99%) create mode 100644 assets/github-actions-deploy.html-ed263cc6.js create mode 100644 assets/github-tools.html-17095057.js rename assets/{github-tools.html-2c1864c0.js => github-tools.html-3a31dec0.js} (99%) delete mode 100644 assets/github-tools.html-3f99a866.js rename assets/{github-tools.html-ccfd1ff6.js => github-tools.html-4959671e.js} (99%) delete mode 100644 assets/github-tools.html-55cfd8eb.js create mode 100644 assets/github-tools.html-698285bb.js create mode 100644 assets/github-tools.html-95c6c3a5.js create mode 100644 assets/github-tools.html-d05d3165.js delete mode 100644 assets/hackintosh.html-19cfcf00.js rename assets/{hackintosh.html-074c5786.js => hackintosh.html-38e5577a.js} (99%) rename assets/{Hackintosh.html-c513ad0b.js => hackintosh.html-468e0953.js} (96%) create mode 100644 assets/hackintosh.html-6ce59f55.js create mode 100644 assets/hackintosh.html-7e31969b.js create mode 100644 assets/hackintosh.html-8b854f9c.js create mode 100644 assets/hackintosh.html-fac6d3f1.js rename assets/{hello-world.html-937b01e1.js => hello-world.html-21537801.js} (99%) create mode 100644 assets/hello-world.html-734ec773.js delete mode 100644 assets/hello-world.html-79a1fe34.js rename assets/{hello-world.html-b305fbd6.js => hello-world.html-8b6e1d50.js} (99%) create mode 100644 assets/hello-world.html-9673670c.js delete mode 100644 assets/hello-world.html-b93a4ba1.js create mode 100644 assets/hello-world.html-bfc56e5b.js create mode 100644 assets/hello-world.html-e411bcf4.js delete mode 100644 assets/index.html-012bd0f3.js rename assets/{index.html-047969b3.js => index.html-0307b727.js} (71%) rename assets/{index.html-047a4dec.js => index.html-0404d6c3.js} (71%) rename assets/{index.html-04e40098.js => index.html-049f25cb.js} (71%) rename assets/{index.html-391cd8a7.js => index.html-05ee54d1.js} (57%) rename assets/{index.html-0168c5b0.js => index.html-06bd53e1.js} (71%) rename assets/{index.html-e2d9b3f4.js => index.html-085f29ed.js} (53%) rename assets/{index.html-134acba0.js => index.html-094d99ec.js} (76%) delete mode 100644 assets/index.html-096f2448.js create mode 100644 assets/index.html-097c3fd6.js create mode 100644 assets/index.html-0a046f13.js delete mode 100644 assets/index.html-0ac4f744.js delete mode 100644 assets/index.html-0b37808f.js create mode 100644 assets/index.html-0b420705.js create mode 100644 assets/index.html-0b93661b.js create mode 100644 assets/index.html-0c338acd.js create mode 100644 assets/index.html-0d1e3c0b.js delete mode 100644 assets/index.html-0d9b3901.js delete mode 100644 assets/index.html-0f8d202f.js delete mode 100644 assets/index.html-11430c69.js delete mode 100644 assets/index.html-121f1572.js create mode 100644 assets/index.html-1400c126.js delete mode 100644 assets/index.html-1454049e.js delete mode 100644 assets/index.html-152a5459.js rename assets/{index.html-0dec7a9b.js => index.html-15609fd2.js} (85%) create mode 100644 assets/index.html-15abd7f4.js rename assets/{index.html-0fb55a0f.js => index.html-16bee170.js} (51%) create mode 100644 assets/index.html-185f3271.js delete mode 100644 assets/index.html-189017b1.js delete mode 100644 assets/index.html-1911274a.js delete mode 100644 assets/index.html-19c228b2.js delete mode 100644 assets/index.html-1a889665.js delete mode 100644 assets/index.html-1ae49c0c.js create mode 100644 assets/index.html-1ae81f74.js create mode 100644 assets/index.html-1aedb1a6.js delete mode 100644 assets/index.html-1b1332dd.js delete mode 100644 assets/index.html-1b5e9bdb.js create mode 100644 assets/index.html-1cd2d2a2.js delete mode 100644 assets/index.html-1e888e3e.js delete mode 100644 assets/index.html-1e9a0b83.js delete mode 100644 assets/index.html-1ecca043.js create mode 100644 assets/index.html-1eea268a.js delete mode 100644 assets/index.html-1f592d3a.js delete mode 100644 assets/index.html-1fbe1988.js delete mode 100644 assets/index.html-1fd7751e.js delete mode 100644 assets/index.html-2116f014.js delete mode 100644 assets/index.html-21229423.js create mode 100644 assets/index.html-21b8afce.js delete mode 100644 assets/index.html-21dfedb7.js create mode 100644 assets/index.html-2331c347.js create mode 100644 assets/index.html-23d51dea.js create mode 100644 assets/index.html-24204360.js delete mode 100644 assets/index.html-26725dde.js create mode 100644 assets/index.html-26e8aee0.js create mode 100644 assets/index.html-26fc2be6.js create mode 100644 assets/index.html-27bc2833.js rename assets/{index.html-24abe18b.js => index.html-28a11be6.js} (91%) create mode 100644 assets/index.html-28f6ce88.js create mode 100644 assets/index.html-296b05c9.js delete mode 100644 assets/index.html-29b66ffd.js delete mode 100644 assets/index.html-2a2e637f.js rename assets/{index.html-6044a3b4.js => index.html-2b182a64.js} (92%) create mode 100644 assets/index.html-2c58a234.js delete mode 100644 assets/index.html-2c78ed22.js create mode 100644 assets/index.html-2c7c432e.js delete mode 100644 assets/index.html-2cdaac08.js create mode 100644 assets/index.html-2d25b860.js create mode 100644 assets/index.html-2d445ddf.js delete mode 100644 assets/index.html-2e8c79ab.js create mode 100644 assets/index.html-2fb88d73.js delete mode 100644 assets/index.html-2fc1fb87.js create mode 100644 assets/index.html-2fc93233.js delete mode 100644 assets/index.html-2fcb5b3a.js delete mode 100644 assets/index.html-332c7f56.js delete mode 100644 assets/index.html-33f47f55.js delete mode 100644 assets/index.html-351823c1.js create mode 100644 assets/index.html-35960569.js create mode 100644 assets/index.html-359da05e.js create mode 100644 assets/index.html-35daf4a6.js create mode 100644 assets/index.html-36b05b52.js create mode 100644 assets/index.html-36cd1408.js create mode 100644 assets/index.html-3700fe35.js delete mode 100644 assets/index.html-37dda41c.js create mode 100644 assets/index.html-382f1549.js delete mode 100644 assets/index.html-3850e25b.js create mode 100644 assets/index.html-387816c0.js delete mode 100644 assets/index.html-3890cc34.js delete mode 100644 assets/index.html-3a0b32d7.js create mode 100644 assets/index.html-3a9f157a.js delete mode 100644 assets/index.html-3bef3fd1.js delete mode 100644 assets/index.html-3c6c4c61.js create mode 100644 assets/index.html-3ce417c2.js create mode 100644 assets/index.html-3cffa052.js delete mode 100644 assets/index.html-3d9deb0e.js create mode 100644 assets/index.html-3e1cba5b.js create mode 100644 assets/index.html-3f56f36e.js delete mode 100644 assets/index.html-41a33c60.js delete mode 100644 assets/index.html-41adc733.js create mode 100644 assets/index.html-41b31c3c.js create mode 100644 assets/index.html-41c793c5.js rename assets/{index.html-245dd65b.js => index.html-41dd8baa.js} (76%) delete mode 100644 assets/index.html-42c13a2b.js delete mode 100644 assets/index.html-4303aa5d.js create mode 100644 assets/index.html-43b298c2.js delete mode 100644 assets/index.html-43d40b48.js create mode 100644 assets/index.html-43d9e56f.js delete mode 100644 assets/index.html-44d056bb.js create mode 100644 assets/index.html-45475709.js create mode 100644 assets/index.html-45e9da17.js create mode 100644 assets/index.html-469a2a6c.js delete mode 100644 assets/index.html-47866d65.js delete mode 100644 assets/index.html-47b3a952.js create mode 100644 assets/index.html-4cc4f96f.js create mode 100644 assets/index.html-4cceb0c3.js rename assets/{index.html-27d28e2b.js => index.html-4d1c81e2.js} (76%) delete mode 100644 assets/index.html-4dc0821b.js delete mode 100644 assets/index.html-4e629551.js create mode 100644 assets/index.html-4e638cd9.js create mode 100644 assets/index.html-4f1c6af7.js delete mode 100644 assets/index.html-5073f7f5.js delete mode 100644 assets/index.html-50b15f08.js delete mode 100644 assets/index.html-53067b89.js delete mode 100644 assets/index.html-5338d71e.js create mode 100644 assets/index.html-547023ea.js delete mode 100644 assets/index.html-55373fe0.js delete mode 100644 assets/index.html-55921bb0.js create mode 100644 assets/index.html-55a01c7e.js create mode 100644 assets/index.html-578577a8.js create mode 100644 assets/index.html-587cc752.js delete mode 100644 assets/index.html-588b1e29.js create mode 100644 assets/index.html-596b8af8.js delete mode 100644 assets/index.html-5a7dc554.js delete mode 100644 assets/index.html-5ca4b211.js delete mode 100644 assets/index.html-5e115545.js delete mode 100644 assets/index.html-5f9a12e2.js create mode 100644 assets/index.html-5fb8ee4a.js create mode 100644 assets/index.html-603b638e.js create mode 100644 assets/index.html-603b770b.js create mode 100644 assets/index.html-61223dad.js create mode 100644 assets/index.html-625ac650.js create mode 100644 assets/index.html-626f6ba3.js rename assets/{index.html-0af61a43.js => index.html-62f39c0b.js} (90%) delete mode 100644 assets/index.html-64319199.js delete mode 100644 assets/index.html-64d62604.js delete mode 100644 assets/index.html-651a3bda.js delete mode 100644 assets/index.html-666c7036.js create mode 100644 assets/index.html-66f7758e.js create mode 100644 assets/index.html-679ffb3a.js create mode 100644 assets/index.html-67dc77dd.js delete mode 100644 assets/index.html-6b52e7b4.js delete mode 100644 assets/index.html-6b6dbd62.js create mode 100644 assets/index.html-6ca0177c.js delete mode 100644 assets/index.html-6d1eebb8.js delete mode 100644 assets/index.html-6e095a42.js delete mode 100644 assets/index.html-6e221866.js delete mode 100644 assets/index.html-6ea85a63.js create mode 100644 assets/index.html-6f6c907e.js create mode 100644 assets/index.html-705f6b8d.js rename assets/{index.html-34a1dca9.js => index.html-72af2593.js} (76%) create mode 100644 assets/index.html-735eaea7.js delete mode 100644 assets/index.html-74afaece.js create mode 100644 assets/index.html-75b05eae.js delete mode 100644 assets/index.html-761f915e.js create mode 100644 assets/index.html-7762ebe8.js create mode 100644 assets/index.html-78ea5d96.js delete mode 100644 assets/index.html-793b9427.js delete mode 100644 assets/index.html-7a6e01eb.js create mode 100644 assets/index.html-7ae5c064.js delete mode 100644 assets/index.html-7d27e18d.js create mode 100644 assets/index.html-7e066fc5.js create mode 100644 assets/index.html-7e9ed5db.js rename assets/{index.html-0c2f8d08.js => index.html-7ec5ada2.js} (65%) delete mode 100644 assets/index.html-8140e136.js delete mode 100644 assets/index.html-82a8990f.js create mode 100644 assets/index.html-82ab2cf4.js delete mode 100644 assets/index.html-8344319c.js create mode 100644 assets/index.html-83c28d60.js create mode 100644 assets/index.html-83d84fd4.js delete mode 100644 assets/index.html-85e5c1fe.js delete mode 100644 assets/index.html-85f61934.js delete mode 100644 assets/index.html-86a6c3c6.js delete mode 100644 assets/index.html-86ee1de9.js delete mode 100644 assets/index.html-87b6652a.js create mode 100644 assets/index.html-8809bbd4.js create mode 100644 assets/index.html-892ef4ff.js delete mode 100644 assets/index.html-8a4eb19b.js create mode 100644 assets/index.html-8c45c760.js delete mode 100644 assets/index.html-8d760403.js create mode 100644 assets/index.html-8f7c302c.js rename assets/{index.html-da1cf023.js => index.html-908dee3a.js} (90%) create mode 100644 assets/index.html-912eb683.js create mode 100644 assets/index.html-926218fc.js delete mode 100644 assets/index.html-92ec79b0.js create mode 100644 assets/index.html-92fe4eb9.js create mode 100644 assets/index.html-934bd04a.js create mode 100644 assets/index.html-9362b72a.js create mode 100644 assets/index.html-93c0a86a.js create mode 100644 assets/index.html-93fe8cd6.js create mode 100644 assets/index.html-9453a95c.js create mode 100644 assets/index.html-94e729fb.js delete mode 100644 assets/index.html-9625f5db.js create mode 100644 assets/index.html-964f4341.js create mode 100644 assets/index.html-97eaede9.js create mode 100644 assets/index.html-98a94903.js delete mode 100644 assets/index.html-99719842.js delete mode 100644 assets/index.html-9af9f030.js delete mode 100644 assets/index.html-9bca12b7.js create mode 100644 assets/index.html-9bd6afd0.js create mode 100644 assets/index.html-9c8faf05.js delete mode 100644 assets/index.html-9d94ff29.js create mode 100644 assets/index.html-9f4f6e38.js delete mode 100644 assets/index.html-a07bd3d7.js delete mode 100644 assets/index.html-a121904d.js create mode 100644 assets/index.html-a1db22b6.js create mode 100644 assets/index.html-a59560cf.js create mode 100644 assets/index.html-a6ad820d.js delete mode 100644 assets/index.html-a722279f.js delete mode 100644 assets/index.html-a7d92b20.js delete mode 100644 assets/index.html-a9168c32.js create mode 100644 assets/index.html-a98c472d.js delete mode 100644 assets/index.html-a9d0c9e9.js delete mode 100644 assets/index.html-ab8f78c0.js delete mode 100644 assets/index.html-abb68896.js delete mode 100644 assets/index.html-ac96c2c6.js delete mode 100644 assets/index.html-ad570406.js delete mode 100644 assets/index.html-ad5c6e5d.js delete mode 100644 assets/index.html-ade85bb5.js rename assets/{index.html-a3530c11.js => index.html-adf3f3bc.js} (92%) delete mode 100644 assets/index.html-af1024db.js create mode 100644 assets/index.html-b2c5ba16.js delete mode 100644 assets/index.html-b2c6ad77.js create mode 100644 assets/index.html-b4669e23.js create mode 100644 assets/index.html-b55f3646.js delete mode 100644 assets/index.html-b58e281d.js create mode 100644 assets/index.html-b5dd3af1.js create mode 100644 assets/index.html-b651158f.js delete mode 100644 assets/index.html-b6732599.js create mode 100644 assets/index.html-b70e252a.js delete mode 100644 assets/index.html-b92146fa.js delete mode 100644 assets/index.html-b9d26869.js create mode 100644 assets/index.html-bcbca2ae.js create mode 100644 assets/index.html-bcc19798.js rename assets/{index.html-25a7a20d.js => index.html-bcc52ef6.js} (66%) create mode 100644 assets/index.html-bccb4373.js create mode 100644 assets/index.html-c00da731.js delete mode 100644 assets/index.html-c028ca19.js delete mode 100644 assets/index.html-c2e18b78.js create mode 100644 assets/index.html-c3f4f7da.js delete mode 100644 assets/index.html-c4006b01.js delete mode 100644 assets/index.html-c41e65fa.js delete mode 100644 assets/index.html-c72f9553.js delete mode 100644 assets/index.html-c7c398d8.js create mode 100644 assets/index.html-ca9fd618.js delete mode 100644 assets/index.html-caa09dcd.js create mode 100644 assets/index.html-cb260c51.js create mode 100644 assets/index.html-cc9e8f9d.js delete mode 100644 assets/index.html-ccb3bf30.js delete mode 100644 assets/index.html-cd0457ab.js create mode 100644 assets/index.html-cd6683b4.js create mode 100644 assets/index.html-cef4a48d.js delete mode 100644 assets/index.html-cf242c7f.js delete mode 100644 assets/index.html-d08a63ec.js delete mode 100644 assets/index.html-d0b117c4.js delete mode 100644 assets/index.html-d200d06a.js delete mode 100644 assets/index.html-d27428cc.js create mode 100644 assets/index.html-d7009805.js create mode 100644 assets/index.html-d756f031.js delete mode 100644 assets/index.html-d84751ac.js create mode 100644 assets/index.html-d981c09f.js create mode 100644 assets/index.html-da746ba8.js create mode 100644 assets/index.html-dafb6d64.js create mode 100644 assets/index.html-db8a4be3.js delete mode 100644 assets/index.html-dcc5f69d.js delete mode 100644 assets/index.html-dce620a2.js create mode 100644 assets/index.html-df2287d8.js delete mode 100644 assets/index.html-e01d58e1.js delete mode 100644 assets/index.html-e125b663.js delete mode 100644 assets/index.html-e2fe5189.js delete mode 100644 assets/index.html-e44c0578.js create mode 100644 assets/index.html-e4d049c4.js delete mode 100644 assets/index.html-e5e5a407.js create mode 100644 assets/index.html-e7588454.js create mode 100644 assets/index.html-e8a05ee5.js create mode 100644 assets/index.html-e8a54d7b.js delete mode 100644 assets/index.html-e8c8c7f6.js create mode 100644 assets/index.html-ea05b96a.js rename assets/{index.html-3d8ed229.js => index.html-ea7a11a1.js} (51%) delete mode 100644 assets/index.html-eaaf2356.js delete mode 100644 assets/index.html-eab2a5a0.js delete mode 100644 assets/index.html-eb134b42.js create mode 100644 assets/index.html-ece582ad.js delete mode 100644 assets/index.html-ed045ded.js create mode 100644 assets/index.html-ed057c4e.js create mode 100644 assets/index.html-ee7dee45.js create mode 100644 assets/index.html-eeefa7db.js delete mode 100644 assets/index.html-eff6ceac.js create mode 100644 assets/index.html-f0da1e3a.js create mode 100644 assets/index.html-f1f512a3.js delete mode 100644 assets/index.html-f40d419a.js delete mode 100644 assets/index.html-f50aa45b.js delete mode 100644 assets/index.html-f58c0db5.js delete mode 100644 assets/index.html-f6c1cdca.js delete mode 100644 assets/index.html-f7105cf6.js delete mode 100644 assets/index.html-f7347f7d.js delete mode 100644 assets/index.html-f75c5c5a.js delete mode 100644 assets/index.html-f76343a6.js delete mode 100644 assets/index.html-f8464440.js create mode 100644 assets/index.html-f9503967.js delete mode 100644 assets/index.html-f96bb28a.js delete mode 100644 assets/index.html-f98124b1.js create mode 100644 assets/index.html-fc01b36e.js delete mode 100644 assets/index.html-fcffc17a.js delete mode 100644 assets/index.html-fdca3fd5.js delete mode 100644 assets/index.html-fead34b1.js delete mode 100644 assets/index.html-ff3a5180.js create mode 100644 assets/index.html-ffa7534c.js rename assets/{intro.html-5102a84a.js => intro.html-2924afa3.js} (85%) rename assets/{intro.html-c8e99b88.js => intro.html-72a1418c.js} (85%) rename assets/{intro.html-df0c91a9.js => intro.html-a4b3d53c.js} (85%) rename assets/{kms.html-41562c5f.js => kms.html-18534782.js} (99%) create mode 100644 assets/kms.html-3428cd4d.js rename assets/{kms.html-9cb069c1.js => kms.html-3f6b25df.js} (99%) create mode 100644 assets/kms.html-65f1263a.js create mode 100644 assets/kms.html-74002bf4.js delete mode 100644 assets/kms.html-c03481a1.js create mode 100644 assets/kms.html-de24db7d.js delete mode 100644 assets/kms.html-e9b66b86.js rename assets/{markdown.html-af36638a.js => markdown.html-2048d427.js} (99%) rename assets/{markdown.html-6bb43987.js => markdown.html-4a30a958.js} (99%) rename assets/{markdown.html-ae168cdb.js => markdown.html-b2bbd4f3.js} (99%) rename assets/{nginx-proxy-manager.html-5a23ddde.js => nginx-proxy-manager.html-0b61cfea.js} (99%) create mode 100644 assets/nginx-proxy-manager.html-6c92adb2.js create mode 100644 assets/nginx-proxy-manager.html-6e9cbb00.js rename assets/{nginx-proxy-manager.html-cbc3190a.js => nginx-proxy-manager.html-885dee3d.js} (99%) create mode 100644 assets/nginx-proxy-manager.html-b289b7c8.js delete mode 100644 assets/nginx-proxy-manager.html-b503a5ba.js create mode 100644 assets/nginx-proxy-manager.html-c2b011ae.js delete mode 100644 assets/nginx-proxy-manager.html-f27bbffc.js rename assets/{page.html-afd6bfe3.js => page.html-528727fe.js} (98%) rename assets/{page.html-b60e82a7.js => page.html-596f0780.js} (98%) rename assets/{page.html-d16f1ec2.js => page.html-af1d8193.js} (98%) delete mode 100644 assets/pageview-97b7fb5a.js create mode 100644 assets/pageview-97e6a3fb.js create mode 100644 assets/pageview_vuepress-plugin-comment2-b25bb000.js create mode 100644 assets/port-forwarding.html-0d88a02a.js delete mode 100644 assets/port-forwarding.html-28419169.js rename assets/{port-forwarding.html-484884aa.js => port-forwarding.html-4d3bdef4.js} (98%) rename assets/{port-forwarding.html-153b0504.js => port-forwarding.html-5d8e288c.js} (98%) create mode 100644 assets/port-forwarding.html-66161e9f.js create mode 100644 assets/port-forwarding.html-b8021567.js create mode 100644 assets/port-forwarding.html-c31c8ce9.js delete mode 100644 assets/port-forwarding.html-defa9c3d.js create mode 100644 assets/server-building.html-0737554b.js create mode 100644 assets/server-building.html-159fc937.js rename assets/{server-building.html-196406f7.js => server-building.html-1c77fabc.js} (99%) rename assets/{server-building.html-ec731c45.js => server-building.html-32e322b2.js} (79%) create mode 100644 assets/server-building.html-8988f626.js delete mode 100644 assets/server-building.html-ca5e3702.js create mode 100644 assets/server-building.html-d06c8ec2.js delete mode 100644 assets/server-building.html-ed0aa29b.js rename assets/{slides.html-45d7895e.js => slides.html-261cbb3f.js} (99%) rename assets/{slides.html-54ff44e8.js => slides.html-db36ad00.js} (99%) rename assets/{slides.html-8c30782b.js => slides.html-fb40cc1f.js} (99%) delete mode 100644 assets/strawberry.html-427da59a.js delete mode 100644 assets/strawberry.html-57885786.js delete mode 100644 assets/strawberry.html-bb1c9c6f.js delete mode 100644 assets/strawberry.html-f0832984.js delete mode 100644 assets/style-00cb9071.css create mode 100644 assets/style-0db26813.css delete mode 100644 assets/tomato.html-2b88b057.js delete mode 100644 assets/tomato.html-9623d888.js delete mode 100644 assets/tomato.html-afdbd350.js delete mode 100644 assets/tomato.html-c90988e8.js delete mode 100644 assets/tomato.html-d26a6940.js delete mode 100644 assets/tomato.html-d4d71af4.js delete mode 100644 assets/waline-meta-56fbc549.js delete mode 100644 "category/\346\260\264\346\236\234/index.html" delete mode 100644 "category/\350\224\254\350\217\234/index.html" delete mode 100644 "category/\351\246\231\350\225\211/index.html" delete mode 100644 en/category/apple/index.html delete mode 100644 en/category/banana/index.html delete mode 100644 en/category/cherry/index.html delete mode 100644 en/category/dragon-fruit/index.html delete mode 100644 en/category/fruit/index.html create mode 100644 en/category/home-network-layout/index.html create mode 100644 en/category/linux/index.html create mode 100644 en/category/macos/index.html delete mode 100644 en/category/strawberry/index.html delete mode 100644 en/category/vegetable/index.html create mode 100644 en/category/windows/index.html create mode 100644 "en/category/\350\213\271\346\236\234/index.html" create mode 100644 en/code/beautification.html create mode 100644 en/code/best-emoji.html create mode 100644 en/code/build-sub.html create mode 100644 en/code/chatgpt-porxy.html create mode 100644 en/code/chatgpt.html create mode 100644 en/code/ddns.html create mode 100644 en/code/github-actions-deploy.html create mode 100644 en/code/github-tools.html create mode 100644 en/code/hackintosh.html create mode 100644 en/code/hello-world.html create mode 100644 en/code/index.html create mode 100644 en/code/kms.html create mode 100644 en/code/nginx-proxy-manager.html create mode 100644 en/code/port-forwarding.html create mode 100644 en/code/server-building.html create mode 100644 en/note/1.html create mode 100644 en/note/1993.html create mode 100644 en/note/index.html delete mode 100644 en/posts/apple/1.html delete mode 100644 en/posts/apple/2.html delete mode 100644 en/posts/apple/3.html delete mode 100644 en/posts/apple/4.html delete mode 100644 en/posts/apple/index.html delete mode 100644 en/posts/banana/1.html delete mode 100644 en/posts/banana/2.html delete mode 100644 en/posts/banana/3.html delete mode 100644 en/posts/banana/4.html delete mode 100644 en/posts/banana/index.html delete mode 100644 en/posts/cherry.html delete mode 100644 en/posts/dragonfruit.html delete mode 100644 en/posts/index.html delete mode 100644 en/posts/strawberry.html delete mode 100644 en/posts/tomato.html delete mode 100644 en/tag/big/index.html create mode 100644 en/tag/blog/index.html create mode 100644 en/tag/chatgpt/index.html delete mode 100644 en/tag/curly/index.html create mode 100644 en/tag/ddns/index.html create mode 100644 en/tag/frontend/index.html create mode 100644 en/tag/hackintosh/index.html create mode 100644 en/tag/kms/index.html delete mode 100644 en/tag/long/index.html create mode 100644 en/tag/my-birthday/index.html create mode 100644 en/tag/network/index.html create mode 100644 en/tag/port-forward/index.html delete mode 100644 en/tag/red/index.html delete mode 100644 en/tag/round/index.html create mode 100644 en/tag/server/index.html delete mode 100644 en/tag/small/index.html create mode 100644 en/tag/tools/index.html delete mode 100644 en/tag/yellow/index.html create mode 100644 "en/tag/\345\234\206/index.html" create mode 100644 "en/tag/\345\244\247/index.html" create mode 100644 "en/tag/\346\230\223/index.html" create mode 100644 "en/tag/\347\272\242/index.html" delete mode 100644 posts/banana/2.html delete mode 100644 posts/banana/index.html delete mode 100644 posts/index.html delete mode 100644 posts/tomato.html delete mode 100644 "tag/\345\274\257\346\233\262\347\232\204/index.html" delete mode 100644 "tag/\351\225\277/index.html" delete mode 100644 "tag/\351\273\204/index.html" create mode 100644 zh/category/home-network-layout/index.html create mode 100644 zh/category/linux/index.html create mode 100644 zh/category/macos/index.html create mode 100644 zh/category/windows/index.html delete mode 100644 "zh/category/\345\273\272\347\253\231/index.html" delete mode 100644 "zh/category/\346\250\261\346\241\203/index.html" delete mode 100644 "zh/category/\346\260\264\346\236\234/index.html" delete mode 100644 "zh/category/\347\201\253\351\276\231\346\236\234/index.html" delete mode 100644 "zh/category/\350\215\211\350\216\223/index.html" delete mode 100644 "zh/category/\350\224\254\350\217\234/index.html" create mode 100644 zh/code/beautification.html create mode 100644 zh/code/best-emoji.html create mode 100644 zh/code/build-sub.html create mode 100644 zh/code/chatgpt-porxy.html create mode 100644 zh/code/chatgpt.html create mode 100644 zh/code/ddns.html create mode 100644 zh/code/github-actions-deploy.html create mode 100644 zh/code/github-tools.html create mode 100644 zh/code/hackintosh.html create mode 100644 zh/code/hello-world.html create mode 100644 zh/code/index.html create mode 100644 zh/code/kms.html create mode 100644 zh/code/nginx-proxy-manager.html create mode 100644 zh/code/port-forwarding.html create mode 100644 zh/code/server-building.html create mode 100644 zh/note/1.html create mode 100644 zh/note/1993.html create mode 100644 zh/note/index.html delete mode 100644 zh/posts/Linux/1993.html delete mode 100644 zh/posts/Linux/Best-Emoji.html delete mode 100644 zh/posts/Linux/beautification.html delete mode 100644 zh/posts/Linux/index.html delete mode 100644 zh/posts/MacOS/Hackintosh.html delete mode 100644 zh/posts/MacOS/index.html delete mode 100644 zh/posts/Server/1.html delete mode 100644 zh/posts/Server/2.html delete mode 100644 zh/posts/Server/ChatGPT-Porxy.html delete mode 100644 zh/posts/Server/buildSUB.html delete mode 100644 zh/posts/Server/chatgpt.html delete mode 100644 zh/posts/Server/github-actions-deploy.html delete mode 100644 zh/posts/Server/hello-world.html delete mode 100644 zh/posts/Server/index.html delete mode 100644 zh/posts/Server/nginx-proxy-manager.html delete mode 100644 zh/posts/Server/server-building.html delete mode 100644 zh/posts/Windows/DDNS.html delete mode 100644 zh/posts/Windows/github-tools.html delete mode 100644 zh/posts/Windows/index.html delete mode 100644 zh/posts/Windows/kms.html delete mode 100644 zh/posts/Windows/port-forwarding.html delete mode 100644 zh/posts/cherry.html delete mode 100644 zh/posts/dragonfruit.html delete mode 100644 zh/posts/index.html delete mode 100644 zh/posts/strawberry.html delete mode 100644 zh/posts/tomato.html delete mode 100644 "zh/tag/\345\260\217/index.html" diff --git a/404.html b/404.html index 445c596e..393e481f 100644 --- a/404.html +++ b/404.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
跳至主要內容
- +
跳至主要內容
+ diff --git a/article/index.html b/article/index.html index 0ad1207f..850e7954 100644 --- a/article/index.html +++ b/article/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
跳至主要內容
利用GitHub Actions自动部署前端到服务器
+
跳至主要內容
利用GitHub Actions自动部署前端到服务器

Automatically deploying the Front End to the server using GitHub Actions

GitHub Actions介绍及原理

@@ -51,12 +51,7 @@

GitHub Actions介绍及原理

  • 本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

  • -

    Ven2s...大约 6 分鐘linuxServerFrontEnd
    番茄

    番茄

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小於 1 分鐘蔬菜
    页面配置

    more 注释之前的内容被视为文章摘要。

    +

    Ven2s...大约 6 分鐘linuxServerFrontEnd
    页面配置

    more 注释之前的内容被视为文章摘要。


    Ms.Hope...大约 1 分鐘使用指南页面配置使用指南
    介绍页

    介绍页

    将你的个人介绍和档案放置在此处。


    Ven2s...小於 1 分鐘
    幻灯片页
    @@ -100,7 +95,12 @@

    开始部署

  • 使用 root 用户登录,运行以下命令:
  • wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    -

    Ven2s...大约 5 分鐘Home Network Layoutkmstools
    2
    3
    - +

    Ven2s...大约 5 分鐘Home Network Layoutkmstools
    ChatGPT-Porxy
    +

    Build ChatGPT Reverse Proxy

    +
    +
      +
    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。
    • +

    Ven2s...大约 2 分鐘linuxChatGPT
    2
    3
    + diff --git a/assets/1.html-dd3ba8f6.js b/assets/1.html-001750be.js similarity index 90% rename from assets/1.html-dd3ba8f6.js rename to assets/1.html-001750be.js index f7a261cb..f430ed6b 100644 --- a/assets/1.html-dd3ba8f6.js +++ b/assets/1.html-001750be.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-6ad7b3e7.js";const c={},h=t('

    苹果 1

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    ',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-31e6d5d9.js";const c={},h=t('

    苹果 1

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    ',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1.html-511e8744.js b/assets/1.html-511e8744.js deleted file mode 100644 index 2bac5617..00000000 --- a/assets/1.html-511e8744.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-e748286e","path":"/en/posts/banana/1.html","title":"Banana 1","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-05T00:00:00.000Z","category":["Banana","Fruit"],"tag":["yellow","curly","long"],"description":"Banana 1 Heading 2 Here is the content. Heading 3 Here is the content.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/banana/1.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Banana 1"}],["meta",{"property":"og:description","content":"Banana 1 Heading 2 Here is the content. Heading 3 Here is the content."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"yellow"}],["meta",{"property":"article:tag","content":"curly"}],["meta",{"property":"article:tag","content":"long"}],["meta",{"property":"article:published_time","content":"2022-01-05T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Banana 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-05T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.1,"words":29},"filePathRelative":"en/posts/banana/1.md","localizedDate":"January 5, 2022","excerpt":"

    Banana 1

    \\n

    Heading 2

    \\n

    Here is the content.

    \\n

    Heading 3

    \\n

    Here is the content.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/1.html-6915e587.js b/assets/1.html-51e97c2e.js similarity index 90% rename from assets/1.html-6915e587.js rename to assets/1.html-51e97c2e.js index f7a261cb..f430ed6b 100644 --- a/assets/1.html-6915e587.js +++ b/assets/1.html-51e97c2e.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-6ad7b3e7.js";const c={},h=t('

    苹果 1

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    ',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-31e6d5d9.js";const c={},h=t('

    苹果 1

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    ',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1.html-5e267a20.js b/assets/1.html-5e267a20.js deleted file mode 100644 index f8112c87..00000000 --- a/assets/1.html-5e267a20.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as t,f as n}from"./app-6ad7b3e7.js";const r={},h=n('

    Apple 1

    Heading 2

    Here is the content.

    Heading 3

    Here is the content.

    ',5),i=[h];function d(c,o){return a(),t("div",null,i)}const l=e(r,[["render",d],["__file","1.html.vue"]]);export{l as default}; diff --git a/assets/1.html-6cf648bd.js b/assets/1.html-6cf648bd.js new file mode 100644 index 00000000..f430ed6b --- /dev/null +++ b/assets/1.html-6cf648bd.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-31e6d5d9.js";const c={},h=t('

    苹果 1

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    ',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1.html-71ec92f4.js b/assets/1.html-71ec92f4.js new file mode 100644 index 00000000..38842d10 --- /dev/null +++ b/assets/1.html-71ec92f4.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-5881f2d8","path":"/en/note/1.html","title":"苹果 1","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-01T00:00:00.000Z","category":["苹果"],"tag":["红","大","圆"],"description":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。","head":[["link",{"rel":"alternate","hreflang":"zh-tw","href":"https://luvsia.com/note/1.html"}],["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://luvsia.com/zh/note/1.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/en/note/1.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"苹果 1"}],["meta",{"property":"og:description","content":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-11-02T20:28:27.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"红"}],["meta",{"property":"article:tag","content":"大"}],["meta",{"property":"article:tag","content":"圆"}],["meta",{"property":"article:published_time","content":"2022-01-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-11-02T20:28:27.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"苹果 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-01T00:00:00.000Z\\",\\"dateModified\\":\\"2023-11-02T20:28:27.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698956907000,"updatedTime":1698956907000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.11,"words":34},"filePathRelative":"en/note/1.md","localizedDate":"January 1, 2022","excerpt":"

    苹果 1

    \\n

    标题 2

    \\n

    这里是内容。

    \\n

    标题 3

    \\n

    这里是内容。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/1.html-7f111f65.js b/assets/1.html-7f111f65.js deleted file mode 100644 index 266f5032..00000000 --- a/assets/1.html-7f111f65.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-7bfcd410","path":"/zh/posts/Server/1.html","title":"苹果 1","lang":"zh-CN","frontmatter":{"icon":"pen-to-square","date":"2022-01-01T00:00:00.000Z","category":["苹果"],"tag":["红","大","圆"],"description":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/Server/1.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"苹果 1"}],["meta",{"property":"og:description","content":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"红"}],["meta",{"property":"article:tag","content":"大"}],["meta",{"property":"article:tag","content":"圆"}],["meta",{"property":"article:published_time","content":"2022-01-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"苹果 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-01T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.11,"words":34},"filePathRelative":"zh/posts/Server/1.md","localizedDate":"2022年1月1日","excerpt":"

    苹果 1

    \\n

    标题 2

    \\n

    这里是内容。

    \\n

    标题 3

    \\n

    这里是内容。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/1.html-a3870386.js b/assets/1.html-a3870386.js new file mode 100644 index 00000000..23763061 --- /dev/null +++ b/assets/1.html-a3870386.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-50451b6c","path":"/note/1.html","title":"苹果 1","lang":"zh-TW","frontmatter":{"icon":"pen-to-square","date":"2022-01-01T00:00:00.000Z","category":["苹果"],"tag":["红","大","圆"],"description":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://luvsia.com/zh/note/1.html"}],["link",{"rel":"alternate","hreflang":"en-us","href":"https://luvsia.com/en/note/1.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/note/1.html"}],["meta",{"property":"og:site_name","content":"風至萬始蘇"}],["meta",{"property":"og:title","content":"苹果 1"}],["meta",{"property":"og:description","content":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-29T23:09:45.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"红"}],["meta",{"property":"article:tag","content":"大"}],["meta",{"property":"article:tag","content":"圆"}],["meta",{"property":"article:published_time","content":"2022-01-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-29T23:09:45.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"苹果 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-01T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-29T23:09:45.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698620985000,"updatedTime":1698620985000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.11,"words":34},"filePathRelative":"note/1.md","localizedDate":"2022年1月1日","excerpt":"

    苹果 1

    \\n

    标题 2

    \\n

    这里是内容。

    \\n

    标题 3

    \\n

    这里是内容。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/1.html-a3f9308e.js b/assets/1.html-a3f9308e.js deleted file mode 100644 index 556f2557..00000000 --- a/assets/1.html-a3f9308e.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-58aa03b4","path":"/en/posts/apple/1.html","title":"Apple 1","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-01T00:00:00.000Z","category":["Apple"],"tag":["red","big","round"],"description":"Apple 1 Heading 2 Here is the content. Heading 3 Here is the content.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/apple/1.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Apple 1"}],["meta",{"property":"og:description","content":"Apple 1 Heading 2 Here is the content. Heading 3 Here is the content."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"red"}],["meta",{"property":"article:tag","content":"big"}],["meta",{"property":"article:tag","content":"round"}],["meta",{"property":"article:published_time","content":"2022-01-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Apple 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-01T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.09,"words":28},"filePathRelative":"en/posts/apple/1.md","localizedDate":"January 1, 2022","excerpt":"

    Apple 1

    \\n

    Heading 2

    \\n

    Here is the content.

    \\n

    Heading 3

    \\n

    Here is the content.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/1.html-a4da039b.js b/assets/1.html-a4da039b.js deleted file mode 100644 index ad48e086..00000000 --- a/assets/1.html-a4da039b.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-50451b6c","path":"/note/1.html","title":"苹果 1","lang":"zh-TW","frontmatter":{"icon":"pen-to-square","date":"2022-01-01T00:00:00.000Z","category":["苹果"],"tag":["红","大","圆"],"description":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。","head":[["meta",{"property":"og:url","content":"https://luvsia.com/note/1.html"}],["meta",{"property":"og:site_name","content":"風至萬始蘇"}],["meta",{"property":"og:title","content":"苹果 1"}],["meta",{"property":"og:description","content":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-TW"}],["meta",{"property":"og:updated_time","content":"2023-10-29T23:09:45.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"红"}],["meta",{"property":"article:tag","content":"大"}],["meta",{"property":"article:tag","content":"圆"}],["meta",{"property":"article:published_time","content":"2022-01-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-29T23:09:45.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"苹果 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-01T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-29T23:09:45.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698620985000,"updatedTime":1698620985000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.11,"words":34},"filePathRelative":"note/1.md","localizedDate":"2022年1月1日","excerpt":"

    苹果 1

    \\n

    标题 2

    \\n

    这里是内容。

    \\n

    标题 3

    \\n

    这里是内容。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/1.html-ece550ef.js b/assets/1.html-ece550ef.js deleted file mode 100644 index eb320340..00000000 --- a/assets/1.html-ece550ef.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as n,f as t}from"./app-6ad7b3e7.js";const r={},h=t('

    Banana 1

    Heading 2

    Here is the content.

    Heading 3

    Here is the content.

    ',5),i=[h];function d(c,o){return a(),n("div",null,i)}const f=e(r,[["render",d],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1.html-efd29e37.js b/assets/1.html-efd29e37.js new file mode 100644 index 00000000..d3898de0 --- /dev/null +++ b/assets/1.html-efd29e37.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-48a155dd","path":"/zh/note/1.html","title":"苹果 1","lang":"zh-CN","frontmatter":{"icon":"pen-to-square","date":"2022-01-01T00:00:00.000Z","category":["苹果"],"tag":["红","大","圆"],"description":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。","head":[["link",{"rel":"alternate","hreflang":"zh-tw","href":"https://luvsia.com/note/1.html"}],["link",{"rel":"alternate","hreflang":"en-us","href":"https://luvsia.com/en/note/1.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/zh/note/1.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"苹果 1"}],["meta",{"property":"og:description","content":"苹果 1 标题 2 这里是内容。 标题 3 这里是内容。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-11-02T20:28:27.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"红"}],["meta",{"property":"article:tag","content":"大"}],["meta",{"property":"article:tag","content":"圆"}],["meta",{"property":"article:published_time","content":"2022-01-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-11-02T20:28:27.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"苹果 1\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-01T00:00:00.000Z\\",\\"dateModified\\":\\"2023-11-02T20:28:27.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698956907000,"updatedTime":1698956907000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.11,"words":34},"filePathRelative":"zh/note/1.md","localizedDate":"2022年1月1日","excerpt":"

    苹果 1

    \\n

    标题 2

    \\n

    这里是内容。

    \\n

    标题 3

    \\n

    这里是内容。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/1993.html-1e5cc14f.js b/assets/1993.html-1e5cc14f.js new file mode 100644 index 00000000..3255d84b --- /dev/null +++ b/assets/1993.html-1e5cc14f.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-5ccc3422","path":"/zh/note/1993.html","title":"一九九三","lang":"zh-CN","frontmatter":{"icon":"cake","title":"一九九三","date":"1993-02-22T14:22:22.000Z","author":"Ven2s","summary":"***乾兑离震巽坎艮坤***","tag":["My Birthday","易"],"description":"","head":[["link",{"rel":"alternate","hreflang":"zh-tw","href":"https://luvsia.com/note/1993.html"}],["link",{"rel":"alternate","hreflang":"en-us","href":"https://luvsia.com/en/note/1993.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/zh/note/1993.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"一九九三"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-11-02T20:28:27.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"My Birthday"}],["meta",{"property":"article:tag","content":"易"}],["meta",{"property":"article:published_time","content":"1993-02-22T14:22:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-11-02T20:28:27.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"一九九三\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"1993-02-22T14:22:22.000Z\\",\\"dateModified\\":\\"2023-11-02T20:28:27.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[],"git":{"createdTime":1698956907000,"updatedTime":1698956907000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.1,"words":30},"filePathRelative":"zh/note/1993.md","localizedDate":"1993年2月22日","excerpt":"","autoDesc":true}');export{t as data}; diff --git a/assets/1993.html-0318c179.js b/assets/1993.html-2214935d.js similarity index 71% rename from assets/1993.html-0318c179.js rename to assets/1993.html-2214935d.js index 74b670e3..d58fa70b 100644 --- a/assets/1993.html-0318c179.js +++ b/assets/1993.html-2214935d.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-6ad7b3e7.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-31e6d5d9.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; diff --git a/assets/1993.html-08d375ac.js b/assets/1993.html-3eb77e30.js similarity index 71% rename from assets/1993.html-08d375ac.js rename to assets/1993.html-3eb77e30.js index 74b670e3..d58fa70b 100644 --- a/assets/1993.html-08d375ac.js +++ b/assets/1993.html-3eb77e30.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-6ad7b3e7.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-31e6d5d9.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; diff --git a/assets/1993.html-43edcf34.js b/assets/1993.html-43edcf34.js deleted file mode 100644 index 4bc9a06d..00000000 --- a/assets/1993.html-43edcf34.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-68175033","path":"/note/1993.html","title":"一九九三","lang":"zh-TW","frontmatter":{"icon":"cake","title":"一九九三","date":"1993-02-22T14:22:22.000Z","author":"Ven2s","summary":"***乾兑离震巽坎艮坤***","tag":["My Birthday","易"],"description":"","head":[["meta",{"property":"og:url","content":"https://luvsia.com/note/1993.html"}],["meta",{"property":"og:site_name","content":"風至萬始蘇"}],["meta",{"property":"og:title","content":"一九九三"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-TW"}],["meta",{"property":"og:updated_time","content":"2023-10-29T23:56:29.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"My Birthday"}],["meta",{"property":"article:tag","content":"易"}],["meta",{"property":"article:published_time","content":"1993-02-22T14:22:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-29T23:56:29.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"一九九三\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"1993-02-22T14:22:22.000Z\\",\\"dateModified\\":\\"2023-10-29T23:56:29.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[],"git":{"createdTime":1698620985000,"updatedTime":1698623789000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":2}]},"readingTime":{"minutes":0.1,"words":30},"filePathRelative":"note/1993.md","localizedDate":"1993年2月22日","excerpt":"","autoDesc":true}');export{t as data}; diff --git a/assets/1993.html-76dc4228.js b/assets/1993.html-76dc4228.js new file mode 100644 index 00000000..0ca0dbb3 --- /dev/null +++ b/assets/1993.html-76dc4228.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-68175033","path":"/note/1993.html","title":"一九九三","lang":"zh-TW","frontmatter":{"icon":"cake","title":"一九九三","date":"1993-02-22T14:22:22.000Z","author":"Ven2s","summary":"***乾兑离震巽坎艮坤***","tag":["My Birthday","易"],"description":"","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://luvsia.com/zh/note/1993.html"}],["link",{"rel":"alternate","hreflang":"en-us","href":"https://luvsia.com/en/note/1993.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/note/1993.html"}],["meta",{"property":"og:site_name","content":"風至萬始蘇"}],["meta",{"property":"og:title","content":"一九九三"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-29T23:56:29.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"My Birthday"}],["meta",{"property":"article:tag","content":"易"}],["meta",{"property":"article:published_time","content":"1993-02-22T14:22:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-29T23:56:29.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"一九九三\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"1993-02-22T14:22:22.000Z\\",\\"dateModified\\":\\"2023-10-29T23:56:29.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[],"git":{"createdTime":1698620985000,"updatedTime":1698623789000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":2}]},"readingTime":{"minutes":0.1,"words":30},"filePathRelative":"note/1993.md","localizedDate":"1993年2月22日","excerpt":"","autoDesc":true}');export{t as data}; diff --git a/assets/1993.html-847ce58a.js b/assets/1993.html-847ce58a.js new file mode 100644 index 00000000..0429c8fe --- /dev/null +++ b/assets/1993.html-847ce58a.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-08483147","path":"/en/note/1993.html","title":"一九九三","lang":"en-US","frontmatter":{"icon":"cake","title":"一九九三","date":"1993-02-22T14:22:22.000Z","author":"Ven2s","summary":"***乾兑离震巽坎艮坤***","tag":["My Birthday","易"],"description":"","head":[["link",{"rel":"alternate","hreflang":"zh-tw","href":"https://luvsia.com/note/1993.html"}],["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://luvsia.com/zh/note/1993.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/en/note/1993.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"一九九三"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-11-02T20:28:27.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"My Birthday"}],["meta",{"property":"article:tag","content":"易"}],["meta",{"property":"article:published_time","content":"1993-02-22T14:22:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-11-02T20:28:27.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"一九九三\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"1993-02-22T14:22:22.000Z\\",\\"dateModified\\":\\"2023-11-02T20:28:27.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[],"git":{"createdTime":1698956907000,"updatedTime":1698956907000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.1,"words":30},"filePathRelative":"en/note/1993.md","localizedDate":"February 22, 1993","excerpt":"","autoDesc":true}');export{t as data}; diff --git a/assets/1993.html-8db62939.js b/assets/1993.html-8db62939.js new file mode 100644 index 00000000..d58fa70b --- /dev/null +++ b/assets/1993.html-8db62939.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-31e6d5d9.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; diff --git a/assets/1993.html-d706fdc4.js b/assets/1993.html-d706fdc4.js deleted file mode 100644 index ad0ca0ed..00000000 --- a/assets/1993.html-d706fdc4.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-2dbba8f8","path":"/zh/posts/Linux/1993.html","title":"一九九三","lang":"zh-CN","frontmatter":{"title":"一九九三","date":"1993-02-22T14:22:22.000Z","author":"Ven2s","summary":"***乾兑离震巽坎艮坤***","tag":["My Birthday","易"],"description":"","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/Linux/1993.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"一九九三"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"My Birthday"}],["meta",{"property":"article:tag","content":"易"}],["meta",{"property":"article:published_time","content":"1993-02-22T14:22:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"一九九三\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"1993-02-22T14:22:22.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.09,"words":28},"filePathRelative":"zh/posts/Linux/1993.md","localizedDate":"1993年2月22日","excerpt":"","autoDesc":true}');export{t as data}; diff --git a/assets/2.html-1ecba53e.js b/assets/2.html-1ecba53e.js deleted file mode 100644 index 7400bc9f..00000000 --- a/assets/2.html-1ecba53e.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t}from"./plugin-vue_export-helper-c27b6911.js";import{o as n,c as r,e as d,a as e,b as a}from"./app-6ad7b3e7.js";const o={},i=e("h1",{id:"apple-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#apple-2","aria-hidden":"true"},"#"),a(" Apple 2")],-1),s=e("p",null,"A apple article being stared.",-1),c=e("h2",{id:"heading-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heading-2","aria-hidden":"true"},"#"),a(" Heading 2")],-1),h=e("p",null,"Here is the content.",-1),_=e("h3",{id:"heading-3",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heading-3","aria-hidden":"true"},"#"),a(" Heading 3")],-1),l=e("p",null,"Here is the content.",-1);function p(f,m){return n(),r("div",null,[i,s,d(" more "),c,h,_,l])}const x=t(o,[["render",p],["__file","2.html.vue"]]);export{x as default}; diff --git a/assets/2.html-5ee5455f.js b/assets/2.html-5ee5455f.js deleted file mode 100644 index 41c190c1..00000000 --- a/assets/2.html-5ee5455f.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-7bbc18fc","path":"/posts/banana/2.html","title":"香蕉 2","lang":"zh-TW","frontmatter":{"icon":"pen-to-square","date":"2022-01-06T00:00:00.000Z","category":["香蕉","水果"],"tag":["黄","弯曲的","长"],"star":10,"description":"香蕉 2 一个被数字 10 星标了的香蕉文章。","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://luvsia.com/en/posts/banana/2.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/posts/banana/2.html"}],["meta",{"property":"og:site_name","content":"風至萬始蘇"}],["meta",{"property":"og:title","content":"香蕉 2"}],["meta",{"property":"og:description","content":"香蕉 2 一个被数字 10 星标了的香蕉文章。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-TW"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"黄"}],["meta",{"property":"article:tag","content":"弯曲的"}],["meta",{"property":"article:tag","content":"长"}],["meta",{"property":"article:published_time","content":"2022-01-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"香蕉 2\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-06T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.18,"words":55},"filePathRelative":"posts/banana/2.md","localizedDate":"2022年1月6日","excerpt":"

    香蕉 2

    \\n

    一个被数字 10 星标了的香蕉文章。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/2.html-8491e5cf.js b/assets/2.html-8491e5cf.js deleted file mode 100644 index 00ad7b14..00000000 --- a/assets/2.html-8491e5cf.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-55405276","path":"/en/posts/apple/2.html","title":"Apple 2","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-02T00:00:00.000Z","category":["Apple"],"tag":["red","big","round"],"star":true,"description":"Apple 2 A apple article being stared.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/apple/2.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Apple 2"}],["meta",{"property":"og:description","content":"Apple 2 A apple article being stared."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"red"}],["meta",{"property":"article:tag","content":"big"}],["meta",{"property":"article:tag","content":"round"}],["meta",{"property":"article:published_time","content":"2022-01-02T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Apple 2\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-02T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.12,"words":36},"filePathRelative":"en/posts/apple/2.md","localizedDate":"January 2, 2022","excerpt":"

    Apple 2

    \\n

    A apple article being stared.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/2.html-989e3faa.js b/assets/2.html-989e3faa.js deleted file mode 100644 index 5218caea..00000000 --- a/assets/2.html-989e3faa.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-7db1acaf","path":"/zh/posts/Server/2.html","title":"苹果 2","lang":"zh-CN","frontmatter":{"icon":"pen-to-square","date":"2022-01-02T00:00:00.000Z","category":["苹果"],"tag":["红","大","圆"],"star":true,"description":"苹果 2 一个被星标了的苹果文章。","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/Server/2.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"苹果 2"}],["meta",{"property":"og:description","content":"苹果 2 一个被星标了的苹果文章。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"红"}],["meta",{"property":"article:tag","content":"大"}],["meta",{"property":"article:tag","content":"圆"}],["meta",{"property":"article:published_time","content":"2022-01-02T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"苹果 2\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-02T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"标题 2","slug":"标题-2","link":"#标题-2","children":[{"level":3,"title":"标题 3","slug":"标题-3","link":"#标题-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.16,"words":48},"filePathRelative":"zh/posts/Server/2.md","localizedDate":"2022年1月2日","excerpt":"

    苹果 2

    \\n

    一个被星标了的苹果文章。

    \\n","autoDesc":true}');export{t as data}; diff --git a/assets/2.html-aaf7736c.js b/assets/2.html-aaf7736c.js deleted file mode 100644 index d2b143e3..00000000 --- a/assets/2.html-aaf7736c.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as n}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c as r,e as d,a as e,b as a}from"./app-6ad7b3e7.js";const o={},i=e("h1",{id:"banana-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#banana-2","aria-hidden":"true"},"#"),a(" Banana 2")],-1),s=e("p",null,[a("A banana article being stared with number "),e("code",null,"10"),a(".")],-1),c=e("h2",{id:"heading-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heading-2","aria-hidden":"true"},"#"),a(" Heading 2")],-1),h=e("p",null,"Here is the content.",-1),_=e("h3",{id:"heading-3",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heading-3","aria-hidden":"true"},"#"),a(" Heading 3")],-1),l=e("p",null,"Here is the content.",-1);function u(m,f){return t(),r("div",null,[i,s,d(" more "),c,h,_,l])}const g=n(o,[["render",u],["__file","2.html.vue"]]);export{g as default}; diff --git a/assets/2.html-bb863dbd.js b/assets/2.html-bb863dbd.js deleted file mode 100644 index 14f3a421..00000000 --- a/assets/2.html-bb863dbd.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-e3de7730","path":"/en/posts/banana/2.html","title":"Banana 2","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-06T00:00:00.000Z","category":["Banana","Fruit"],"tag":["yellow","curly","long"],"star":10,"description":"Banana 2 A banana article being stared with number 10.","head":[["link",{"rel":"alternate","hreflang":"zh-tw","href":"https://luvsia.com/posts/banana/2.html"}],["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/banana/2.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Banana 2"}],["meta",{"property":"og:description","content":"Banana 2 A banana article being stared with number 10."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-TW"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"yellow"}],["meta",{"property":"article:tag","content":"curly"}],["meta",{"property":"article:tag","content":"long"}],["meta",{"property":"article:published_time","content":"2022-01-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Banana 2\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-06T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.14,"words":41},"filePathRelative":"en/posts/banana/2.md","localizedDate":"January 6, 2022","excerpt":"

    Banana 2

    \\n

    A banana article being stared with number 10.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/2.html-cd356435.js b/assets/2.html-cd356435.js deleted file mode 100644 index 3f78d666..00000000 --- a/assets/2.html-cd356435.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t}from"./plugin-vue_export-helper-c27b6911.js";import{o,c as r,e as n,a as e,b as a}from"./app-6ad7b3e7.js";const s={},c=e("h1",{id:"香蕉-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#香蕉-2","aria-hidden":"true"},"#"),a(" 香蕉 2")],-1),d=e("p",null,[a("一个被数字 "),e("code",null,"10"),a(" 星标了的香蕉文章。")],-1),_=e("h2",{id:"标题-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#标题-2","aria-hidden":"true"},"#"),a(" 标题 2")],-1),h=e("p",null,"这里是内容。",-1),i=e("h3",{id:"标题-3",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#标题-3","aria-hidden":"true"},"#"),a(" 标题 3")],-1),l=e("p",null,"这里是内容。",-1);function u(f,m){return o(),r("div",null,[c,d,n(" more "),_,h,i,l])}const b=t(s,[["render",u],["__file","2.html.vue"]]);export{b as default}; diff --git a/assets/2.html-d0a9a622.js b/assets/2.html-d0a9a622.js deleted file mode 100644 index c0bcb1fe..00000000 --- a/assets/2.html-d0a9a622.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t}from"./plugin-vue_export-helper-c27b6911.js";import{o,c as r,e as s,a as e,b as a}from"./app-6ad7b3e7.js";const n={},c=e("h1",{id:"苹果-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#苹果-2","aria-hidden":"true"},"#"),a(" 苹果 2")],-1),d=e("p",null,"一个被星标了的苹果文章。",-1),_=e("h2",{id:"标题-2",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#标题-2","aria-hidden":"true"},"#"),a(" 标题 2")],-1),h=e("p",null,"这里是内容。",-1),i=e("h3",{id:"标题-3",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#标题-3","aria-hidden":"true"},"#"),a(" 标题 3")],-1),l=e("p",null,"这里是内容。",-1);function f(m,u){return o(),r("div",null,[c,d,s(" more "),_,h,i,l])}const b=t(n,[["render",f],["__file","2.html.vue"]]);export{b as default}; diff --git a/assets/3.html-0c824db3.js b/assets/3.html-0c824db3.js deleted file mode 100644 index b438125f..00000000 --- a/assets/3.html-0c824db3.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-e074c5f2","path":"/en/posts/banana/3.html","title":"Banana 3","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-07T00:00:00.000Z","category":["Banana"],"tag":["yellow","curly","long"],"description":"Banana 3 Heading 2 Here is the content. Heading 3 Here is the content.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/banana/3.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Banana 3"}],["meta",{"property":"og:description","content":"Banana 3 Heading 2 Here is the content. Heading 3 Here is the content."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"yellow"}],["meta",{"property":"article:tag","content":"curly"}],["meta",{"property":"article:tag","content":"long"}],["meta",{"property":"article:published_time","content":"2022-01-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Banana 3\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-07T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.09,"words":28},"filePathRelative":"en/posts/banana/3.md","localizedDate":"January 7, 2022","excerpt":"

    Banana 3

    \\n

    Heading 2

    \\n

    Here is the content.

    \\n

    Heading 3

    \\n

    Here is the content.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/3.html-2eea3f44.js b/assets/3.html-2eea3f44.js deleted file mode 100644 index 62e3782c..00000000 --- a/assets/3.html-2eea3f44.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as n,f as t}from"./app-6ad7b3e7.js";const r={},h=t('

    Banana 3

    Heading 2

    Here is the content.

    Heading 3

    Here is the content.

    ',5),i=[h];function d(c,o){return a(),n("div",null,i)}const f=e(r,[["render",d],["__file","3.html.vue"]]);export{f as default}; diff --git a/assets/3.html-5eecb380.js b/assets/3.html-5eecb380.js deleted file mode 100644 index 38d274be..00000000 --- a/assets/3.html-5eecb380.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as t,f as n}from"./app-6ad7b3e7.js";const r={},h=n('

    Apple 3

    Heading 2

    Here is the content.

    Heading 3

    Here is the content.

    ',5),i=[h];function d(c,o){return a(),t("div",null,i)}const l=e(r,[["render",d],["__file","3.html.vue"]]);export{l as default}; diff --git a/assets/3.html-9f696df2.js b/assets/3.html-9f696df2.js deleted file mode 100644 index 7d7e4913..00000000 --- a/assets/3.html-9f696df2.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-51d6a138","path":"/en/posts/apple/3.html","title":"Apple 3","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-03T00:00:00.000Z","category":["Apple","Fruit"],"tag":["red","big","round"],"description":"Apple 3 Heading 2 Here is the content. Heading 3 Here is the content.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/apple/3.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Apple 3"}],["meta",{"property":"og:description","content":"Apple 3 Heading 2 Here is the content. Heading 3 Here is the content."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"red"}],["meta",{"property":"article:tag","content":"big"}],["meta",{"property":"article:tag","content":"round"}],["meta",{"property":"article:published_time","content":"2022-01-03T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Apple 3\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-03T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.1,"words":29},"filePathRelative":"en/posts/apple/3.md","localizedDate":"January 3, 2022","excerpt":"

    Apple 3

    \\n

    Heading 2

    \\n

    Here is the content.

    \\n

    Heading 3

    \\n

    Here is the content.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/4.html-76821829.js b/assets/4.html-76821829.js deleted file mode 100644 index d5620bbb..00000000 --- a/assets/4.html-76821829.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as n,f as t}from"./app-6ad7b3e7.js";const r={},h=t('

    Banana 4

    Heading 2

    Here is the content.

    Heading 3

    Here is the content.

    ',5),i=[h];function d(c,o){return a(),n("div",null,i)}const f=e(r,[["render",d],["__file","4.html.vue"]]);export{f as default}; diff --git a/assets/4.html-83d1bb08.js b/assets/4.html-83d1bb08.js deleted file mode 100644 index aa90c6ef..00000000 --- a/assets/4.html-83d1bb08.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as t,f as n}from"./app-6ad7b3e7.js";const r={},h=n('

    Apple 4

    Heading 2

    Here is the content.

    Heading 3

    Here is the content.

    ',5),i=[h];function d(c,o){return a(),t("div",null,i)}const l=e(r,[["render",d],["__file","4.html.vue"]]);export{l as default}; diff --git a/assets/4.html-a5613868.js b/assets/4.html-a5613868.js deleted file mode 100644 index c55e412c..00000000 --- a/assets/4.html-a5613868.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-dd0b14b4","path":"/en/posts/banana/4.html","title":"Banana 4","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-08T00:00:00.000Z","category":["Banana"],"tag":["yellow","curly","long"],"description":"Banana 4 Heading 2 Here is the content. Heading 3 Here is the content.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/banana/4.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Banana 4"}],["meta",{"property":"og:description","content":"Banana 4 Heading 2 Here is the content. Heading 3 Here is the content."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"yellow"}],["meta",{"property":"article:tag","content":"curly"}],["meta",{"property":"article:tag","content":"long"}],["meta",{"property":"article:published_time","content":"2022-01-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Banana 4\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-08T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.09,"words":28},"filePathRelative":"en/posts/banana/4.md","localizedDate":"January 8, 2022","excerpt":"

    Banana 4

    \\n

    Heading 2

    \\n

    Here is the content.

    \\n

    Heading 3

    \\n

    Here is the content.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/4.html-bdc6058b.js b/assets/4.html-bdc6058b.js deleted file mode 100644 index a1c09323..00000000 --- a/assets/4.html-bdc6058b.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-4e6ceffa","path":"/en/posts/apple/4.html","title":"Apple 4","lang":"en-US","frontmatter":{"icon":"pen-to-square","date":"2022-01-04T00:00:00.000Z","category":["Apple","Fruit"],"tag":["red","big","round"],"description":"Apple 4 Heading 2 Here is the content. Heading 3 Here is the content.","head":[["meta",{"property":"og:url","content":"https://luvsia.com/en/posts/apple/4.html"}],["meta",{"property":"og:site_name","content":"SpringVen2s"}],["meta",{"property":"og:title","content":"Apple 4"}],["meta",{"property":"og:description","content":"Apple 4 Heading 2 Here is the content. Heading 3 Here is the content."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"red"}],["meta",{"property":"article:tag","content":"big"}],["meta",{"property":"article:tag","content":"round"}],["meta",{"property":"article:published_time","content":"2022-01-04T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Apple 4\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-04T00:00:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\",\\"url\\":\\"https://luvsia.com\\"}]}"]]},"headers":[{"level":2,"title":"Heading 2","slug":"heading-2","link":"#heading-2","children":[{"level":3,"title":"Heading 3","slug":"heading-3","link":"#heading-3","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":0.1,"words":29},"filePathRelative":"en/posts/apple/4.md","localizedDate":"January 4, 2022","excerpt":"

    Apple 4

    \\n

    Heading 2

    \\n

    Here is the content.

    \\n

    Heading 3

    \\n

    Here is the content.

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/404.html-0f3c2f75.js b/assets/404.html-955e9471.js similarity index 71% rename from assets/404.html-0f3c2f75.js rename to assets/404.html-955e9471.js index d4d93851..d8ec38e0 100644 --- a/assets/404.html-0f3c2f75.js +++ b/assets/404.html-955e9471.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-6ad7b3e7.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","404.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-31e6d5d9.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","404.html.vue"]]);export{f as default}; diff --git a/assets/Best-Emoji.html-af2a208a.js b/assets/Best-Emoji.html-af2a208a.js deleted file mode 100644 index 40ff368d..00000000 --- a/assets/Best-Emoji.html-af2a208a.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-341ff586","path":"/zh/posts/Linux/Best-Emoji.html","title":"超酷的Emoji表情!","lang":"zh-CN","frontmatter":{"title":"超酷的Emoji表情!","date":"2022-01-26T05:45:22.000Z","author":"Ven2s","summary":"***Best Markdown Emoji !***","tag":["Markdown","Blog"],"description":"Emoji表情 风至万始苏 原文 将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。 如\\"😊\\",显示为😊 人物 syntax preview syntax preview syntax preview :bowtie: :bowtie: :smile: 😄 :laughing: 😆 :blush: 😊 :smiley: 😃 :relaxed: ☺️ :smirk: 😏 :heart_eyes: 😍 :kissing_heart: 😘 :kissing_closed_eyes: 😚 :flushed: 😳 :relieved: 😌 :satisfied: 😆 :grin: 😁 :wink: 😉 :stuck_out_tongue_winking_eye: 😜 :stuck_out_tongue_closed_eyes: 😝 :grinning: 😀 :kissing: 😗 :kissing_smiling_eyes: 😙 :stuck_out_tongue: 😛 :sleeping: 😴 :worried: 😟 :frowning: 😦 :anguished: 😧 :open_mouth: 😮 :grimacing: 😬 :confused: 😕 :hushed: 😯 :expressionless: 😑 :unamused: 😒 :sweat_smile: 😅 :sweat: 😓 :disappointed_relieved: 😥 :weary: 😩 :pensive: 😔 :disappointed: 😞 :confounded: 😖 :fearful: 😨 :cold_sweat: 😰 :persevere: 😣 :cry: 😢 :sob: 😭 :joy: 😂 :astonished: 😲 :scream: 😱 :neckbeard: :neckbeard: :tired_face: 😫 :angry: 😠 :rage: 😡 :triumph: 😤 :sleepy: 😪 :yum: 😋 :mask: 😷 :sunglasses: 😎 :dizzy_face: 😵 :imp: 👿 :smiling_imp: 😈 :neutral_face: 😐 :no_mouth: 😶 :innocent: 😇 :alien: 👽 :yellow_heart: 💛 :blue_heart: 💙 :purple_heart: 💜 :heart: ❤️ :green_heart: 💚 :broken_heart: 💔 :heartbeat: 💓 :heartpulse: 💗 :two_hearts: 💕 :revolving_hearts: 💞 :cupid: 💘 :sparkling_heart: 💖 :sparkles: ✨ :star: ⭐ :star2: 🌟 :dizzy: 💫 :boom: 💥 :collision: 💥 :anger: 💢 :exclamation: ❗ :question: ❓ :grey_exclamation: ❕ :grey_question: ❔ :zzz: 💤 :dash: 💨 :sweat_drops: 💦 :notes: 🎶 :musical_note: 🎵 :fire: 🔥 :hankey: 💩 :poop: 💩 :: 💩 :+1: 👍 :thumbsup: 👍 :-1: 👎 :thumbsdown: 👎 :ok_hand: 👌 :punch: 👊 :facepunch: 👊 :fist: ✊ :v: ✌️ :wave: 👋 :hand: ✋ :raised_hand: ✋ :open_hands: 👐 :point_up: ☝️ :point_down: 👇 :point_left: 👈 :point_right: 👉 :raised_hands: 🙌 :pray: 🙏 :point_up_2: 👆 :clap: 👏 :muscle: 💪 :metal: 🤘 :fu: 🖕 :walking: 🚶 :runner: 🏃 :running: 🏃 :couple: 👫 :family: 👪 :two_men_holding_hands: 👬 :two_women_holding_hands: 👭 :dancer: 💃 :dancers: 👯 :ok_woman: 🙆‍♀️ :no_good: 🙅 :information_desk_person: 💁 :raising_hand: 🙋 :bride_with_veil: 👰‍♀️ :person_with_pouting_face: :person_with_pouting_face: :person_frowning: :person_frowning: :bow: 🙇 :couplekiss: 💏 :couple_with_heart: 💑 :massage: 💆 :haircut: 💇 :nail_care: 💅 :boy: 👦 :girl: 👧 :woman: 👩 :man: 👨 :baby: 👶 :older_woman: 👵 :older_man: 👴 :person_with_blond_hair: :person_with_blond_hair: :man_with_gua_pi_mao: 👲 :man_with_turban: 👳‍♂️ :construction_worker: 👷 :cop: 👮 :angel: 👼 :princess: 👸 :smiley_cat: 😺 :smile_cat: 😸 :heart_eyes_cat: 😻 :kissing_cat: 😽 :smirk_cat: 😼 :scream_cat: 🙀 :crying_cat_face: 😿 :joy_cat: 😹 :pouting_cat: 😾 :japanese_ogre: 👹 :japanese_goblin: 👺 :see_no_evil: 🙈 :hear_no_evil: 🙉 :speak_no_evil: 🙊 :guardsman: 💂‍♂️ :skull: 💀 :feet: 🐾 :lips: 👄 :kiss: 💋 :droplet: 💧 :ear: 👂 :eyes: 👀 :nose: 👃 :tongue: 👅 :love_letter: 💌 :bust_in_silhouette: 👤 :busts_in_silhouette: 👥 :speech_balloon: 💬 :thought_balloon: 💭 :feelsgood: :feelsgood: :finnadie: :finnadie: :goberserk: :goberserk: :godmode: :godmode: :hurtrealbad: :hurtrealbad: :rage1: :rage1: :rage2: :rage2: :rage3: :rage3: :rage4: :rage4: :suspect: :suspect: :trollface: :trollface:","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/Linux/Best-Emoji.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"超酷的Emoji表情!"}],["meta",{"property":"og:description","content":"Emoji表情 风至万始苏 原文 将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。 如\\"😊\\",显示为😊 人物 syntax preview syntax preview syntax preview :bowtie: :bowtie: :smile: 😄 :laughing: 😆 :blush: 😊 :smiley: 😃 :relaxed: ☺️ :smirk: 😏 :heart_eyes: 😍 :kissing_heart: 😘 :kissing_closed_eyes: 😚 :flushed: 😳 :relieved: 😌 :satisfied: 😆 :grin: 😁 :wink: 😉 :stuck_out_tongue_winking_eye: 😜 :stuck_out_tongue_closed_eyes: 😝 :grinning: 😀 :kissing: 😗 :kissing_smiling_eyes: 😙 :stuck_out_tongue: 😛 :sleeping: 😴 :worried: 😟 :frowning: 😦 :anguished: 😧 :open_mouth: 😮 :grimacing: 😬 :confused: 😕 :hushed: 😯 :expressionless: 😑 :unamused: 😒 :sweat_smile: 😅 :sweat: 😓 :disappointed_relieved: 😥 :weary: 😩 :pensive: 😔 :disappointed: 😞 :confounded: 😖 :fearful: 😨 :cold_sweat: 😰 :persevere: 😣 :cry: 😢 :sob: 😭 :joy: 😂 :astonished: 😲 :scream: 😱 :neckbeard: :neckbeard: :tired_face: 😫 :angry: 😠 :rage: 😡 :triumph: 😤 :sleepy: 😪 :yum: 😋 :mask: 😷 :sunglasses: 😎 :dizzy_face: 😵 :imp: 👿 :smiling_imp: 😈 :neutral_face: 😐 :no_mouth: 😶 :innocent: 😇 :alien: 👽 :yellow_heart: 💛 :blue_heart: 💙 :purple_heart: 💜 :heart: ❤️ :green_heart: 💚 :broken_heart: 💔 :heartbeat: 💓 :heartpulse: 💗 :two_hearts: 💕 :revolving_hearts: 💞 :cupid: 💘 :sparkling_heart: 💖 :sparkles: ✨ :star: ⭐ :star2: 🌟 :dizzy: 💫 :boom: 💥 :collision: 💥 :anger: 💢 :exclamation: ❗ :question: ❓ :grey_exclamation: ❕ :grey_question: ❔ :zzz: 💤 :dash: 💨 :sweat_drops: 💦 :notes: 🎶 :musical_note: 🎵 :fire: 🔥 :hankey: 💩 :poop: 💩 :: 💩 :+1: 👍 :thumbsup: 👍 :-1: 👎 :thumbsdown: 👎 :ok_hand: 👌 :punch: 👊 :facepunch: 👊 :fist: ✊ :v: ✌️ :wave: 👋 :hand: ✋ :raised_hand: ✋ :open_hands: 👐 :point_up: ☝️ :point_down: 👇 :point_left: 👈 :point_right: 👉 :raised_hands: 🙌 :pray: 🙏 :point_up_2: 👆 :clap: 👏 :muscle: 💪 :metal: 🤘 :fu: 🖕 :walking: 🚶 :runner: 🏃 :running: 🏃 :couple: 👫 :family: 👪 :two_men_holding_hands: 👬 :two_women_holding_hands: 👭 :dancer: 💃 :dancers: 👯 :ok_woman: 🙆‍♀️ :no_good: 🙅 :information_desk_person: 💁 :raising_hand: 🙋 :bride_with_veil: 👰‍♀️ :person_with_pouting_face: :person_with_pouting_face: :person_frowning: :person_frowning: :bow: 🙇 :couplekiss: 💏 :couple_with_heart: 💑 :massage: 💆 :haircut: 💇 :nail_care: 💅 :boy: 👦 :girl: 👧 :woman: 👩 :man: 👨 :baby: 👶 :older_woman: 👵 :older_man: 👴 :person_with_blond_hair: :person_with_blond_hair: :man_with_gua_pi_mao: 👲 :man_with_turban: 👳‍♂️ :construction_worker: 👷 :cop: 👮 :angel: 👼 :princess: 👸 :smiley_cat: 😺 :smile_cat: 😸 :heart_eyes_cat: 😻 :kissing_cat: 😽 :smirk_cat: 😼 :scream_cat: 🙀 :crying_cat_face: 😿 :joy_cat: 😹 :pouting_cat: 😾 :japanese_ogre: 👹 :japanese_goblin: 👺 :see_no_evil: 🙈 :hear_no_evil: 🙉 :speak_no_evil: 🙊 :guardsman: 💂‍♂️ :skull: 💀 :feet: 🐾 :lips: 👄 :kiss: 💋 :droplet: 💧 :ear: 👂 :eyes: 👀 :nose: 👃 :tongue: 👅 :love_letter: 💌 :bust_in_silhouette: 👤 :busts_in_silhouette: 👥 :speech_balloon: 💬 :thought_balloon: 💭 :feelsgood: :feelsgood: :finnadie: :finnadie: :goberserk: :goberserk: :godmode: :godmode: :hurtrealbad: :hurtrealbad: :rage1: :rage1: :rage2: :rage2: :rage3: :rage3: :rage4: :rage4: :suspect: :suspect: :trollface: :trollface:"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"Markdown"}],["meta",{"property":"article:tag","content":"Blog"}],["meta",{"property":"article:published_time","content":"2022-01-26T05:45:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"超酷的Emoji表情!\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2022-01-26T05:45:22.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[{"level":2,"title":"人物","slug":"人物","link":"#人物","children":[]},{"level":2,"title":"自然","slug":"自然","link":"#自然","children":[]},{"level":2,"title":"物体","slug":"物体","link":"#物体","children":[]},{"level":2,"title":"地点","slug":"地点","link":"#地点","children":[]},{"level":2,"title":"符号","slug":"符号","link":"#符号","children":[]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":6.16,"words":1848},"filePathRelative":"zh/posts/Linux/Best-Emoji.md","localizedDate":"2022年1月26日","excerpt":"

    Emoji表情

    \\n

    风至万始苏

    \\n

    原文

    \\n

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    \\n如\\"😊\\",显示为😊

    \\n

    人物

    \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bowtie::bowtie::smile:😄:laughing:😆
    :blush:😊:smiley:😃:relaxed:☺️
    :smirk:😏:heart_eyes:😍:kissing_heart:😘
    :kissing_closed_eyes:😚:flushed:😳:relieved:😌
    :satisfied:😆:grin:😁:wink:😉
    :stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
    :kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
    :sleeping:😴:worried:😟:frowning:😦
    :anguished:😧:open_mouth:😮:grimacing:😬
    :confused:😕:hushed:😯:expressionless:😑
    :unamused:😒:sweat_smile:😅:sweat:😓
    :disappointed_relieved:😥:weary:😩:pensive:😔
    :disappointed:😞:confounded:😖:fearful:😨
    :cold_sweat:😰:persevere:😣:cry:😢
    :sob:😭:joy:😂:astonished:😲
    :scream:😱:neckbeard::neckbeard::tired_face:😫
    :angry:😠:rage:😡:triumph:😤
    :sleepy:😪:yum:😋:mask:😷
    :sunglasses:😎:dizzy_face:😵:imp:👿
    :smiling_imp:😈:neutral_face:😐:no_mouth:😶
    :innocent:😇:alien:👽:yellow_heart:💛
    :blue_heart:💙:purple_heart:💜:heart:❤️
    :green_heart:💚:broken_heart:💔:heartbeat:💓
    :heartpulse:💗:two_hearts:💕:revolving_hearts:💞
    :cupid:💘:sparkling_heart:💖:sparkles:
    :star::star2:🌟:dizzy:💫
    :boom:💥:collision:💥:anger:💢
    :exclamation::question::grey_exclamation:
    :grey_question::zzz:💤:dash:💨
    :sweat_drops:💦:notes:🎶:musical_note:🎵
    :fire:🔥:hankey:💩:poop:💩
    ::💩:+1:👍:thumbsup:👍
    :-1:👎:thumbsdown:👎:ok_hand:👌
    :punch:👊:facepunch:👊:fist:
    :v:✌️:wave:👋:hand:
    :raised_hand::open_hands:👐:point_up:☝️
    :point_down:👇:point_left:👈:point_right:👉
    :raised_hands:🙌:pray:🙏:point_up_2:👆
    :clap:👏:muscle:💪:metal:🤘
    :fu:🖕:walking:🚶:runner:🏃
    :running:🏃:couple:👫:family:👪
    :two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
    :dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
    :information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
    :person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
    :couplekiss:💏:couple_with_heart:💑:massage:💆
    :haircut:💇:nail_care:💅:boy:👦
    :girl:👧:woman:👩:man:👨
    :baby:👶:older_woman:👵:older_man:👴
    :person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
    :construction_worker:👷:cop:👮:angel:👼
    :princess:👸:smiley_cat:😺:smile_cat:😸
    :heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
    :scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
    :pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
    :see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
    :guardsman:💂‍♂️:skull:💀:feet:🐾
    :lips:👄:kiss:💋:droplet:💧
    :ear:👂:eyes:👀:nose:👃
    :tongue:👅:love_letter:💌:bust_in_silhouette:👤
    :busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
    :feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
    :godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
    :rage2::rage2::rage3::rage3::rage4::rage4:
    :suspect::suspect::trollface::trollface:
    ","autoDesc":true}');export{t as data}; diff --git a/assets/Best-Emoji.html-e464dad3.js b/assets/Best-Emoji.html-e464dad3.js deleted file mode 100644 index 2c635db3..00000000 --- a/assets/Best-Emoji.html-e464dad3.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as d}from"./plugin-vue_export-helper-c27b6911.js";import{r as n,o as l,c,a as t,b as r,d as a,f as o}from"./app-6ad7b3e7.js";const i={},s=t("p",null,"Emoji表情",-1),g=t("p",null,"风至万始苏",-1),y={href:"https://github.com/ventusoon/README/blob/master/emoji.md",target:"_blank",rel:"noopener noreferrer"},x=o('

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    如"😊",显示为😊

    人物

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bowtie::bowtie::smile:😄:laughing:😆
    :blush:😊:smiley:😃:relaxed:☺️
    :smirk:😏:heart_eyes:😍:kissing_heart:😘
    :kissing_closed_eyes:😚:flushed:😳:relieved:😌
    :satisfied:😆:grin:😁:wink:😉
    :stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
    :kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
    :sleeping:😴:worried:😟:frowning:😦
    :anguished:😧:open_mouth:😮:grimacing:😬
    :confused:😕:hushed:😯:expressionless:😑
    :unamused:😒:sweat_smile:😅:sweat:😓
    :disappointed_relieved:😥:weary:😩:pensive:😔
    :disappointed:😞:confounded:😖:fearful:😨
    :cold_sweat:😰:persevere:😣:cry:😢
    :sob:😭:joy:😂:astonished:😲
    :scream:😱:neckbeard::neckbeard::tired_face:😫
    :angry:😠:rage:😡:triumph:😤
    :sleepy:😪:yum:😋:mask:😷
    :sunglasses:😎:dizzy_face:😵:imp:👿
    :smiling_imp:😈:neutral_face:😐:no_mouth:😶
    :innocent:😇:alien:👽:yellow_heart:💛
    :blue_heart:💙:purple_heart:💜:heart:❤️
    :green_heart:💚:broken_heart:💔:heartbeat:💓
    :heartpulse:💗:two_hearts:💕:revolving_hearts:💞
    :cupid:💘:sparkling_heart:💖:sparkles:
    :star::star2:🌟:dizzy:💫
    :boom:💥:collision:💥:anger:💢
    :exclamation::question::grey_exclamation:
    :grey_question::zzz:💤:dash:💨
    :sweat_drops:💦:notes:🎶:musical_note:🎵
    :fire:🔥:hankey:💩:poop:💩
    ::💩:+1:👍:thumbsup:👍
    :-1:👎:thumbsdown:👎:ok_hand:👌
    :punch:👊:facepunch:👊:fist:
    :v:✌️:wave:👋:hand:
    :raised_hand::open_hands:👐:point_up:☝️
    :point_down:👇:point_left:👈:point_right:👉
    :raised_hands:🙌:pray:🙏:point_up_2:👆
    :clap:👏:muscle:💪:metal:🤘
    :fu:🖕:walking:🚶:runner:🏃
    :running:🏃:couple:👫:family:👪
    :two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
    :dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
    :information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
    :person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
    :couplekiss:💏:couple_with_heart:💑:massage:💆
    :haircut:💇:nail_care:💅:boy:👦
    :girl:👧:woman:👩:man:👨
    :baby:👶:older_woman:👵:older_man:👴
    :person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
    :construction_worker:👷:cop:👮:angel:👼
    :princess:👸:smiley_cat:😺:smile_cat:😸
    :heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
    :scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
    :pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
    :see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
    :guardsman:💂‍♂️:skull:💀:feet:🐾
    :lips:👄:kiss:💋:droplet:💧
    :ear:👂:eyes:👀:nose:👃
    :tongue:👅:love_letter:💌:bust_in_silhouette:👤
    :busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
    :feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
    :godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
    :rage2::rage2::rage3::rage3::rage4::rage4:
    :suspect::suspect::trollface::trollface:

    自然

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :sunny:☀️:umbrella::cloud:☁️
    :snowflake:❄️:snowman::zap:
    :cyclone:🌀:foggy:🌁:ocean:🌊
    :cat:🐱:dog:🐶:mouse:🐭
    :hamster:🐹:rabbit:🐰:wolf:🐺
    :frog:🐸:tiger:🐯:koala:🐨
    :bear:🐻:pig:🐷:pig_nose:🐽
    :cow:🐮:boar:🐗:monkey_face:🐵
    :monkey:🐒:horse:🐴:racehorse:🐎
    :camel:🐫:sheep:🐑:elephant:🐘
    :panda_face:🐼:snake:🐍:bird:🐦
    :baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
    :chicken:🐔:penguin:🐧:turtle:🐢
    :bug:🐛:honeybee:🐝:ant:🐜
    :beetle:🪲:snail:🐌:octopus:🐙
    :tropical_fish:🐠:fish:🐟:whale:🐳
    :whale2:🐋:dolphin:🐬:cow2:🐄
    :ram:🐏:rat:🐀:water_buffalo:🐃
    :tiger2:🐅:rabbit2:🐇:dragon:🐉
    :goat:🐐:rooster:🐓:dog2:🐕
    :pig2:🐖:mouse2:🐁:ox:🐂
    :dragon_face:🐲:blowfish:🐡:crocodile:🐊
    :dromedary_camel:🐪:leopard:🐆:cat2:🐈
    :poodle:🐩:paw_prints:🐾:bouquet:💐
    :cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
    :rose:🌹:sunflower:🌻:hibiscus:🌺
    :maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
    :herb:🌿:mushroom:🍄:cactus:🌵
    :palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
    :chestnut:🌰:seedling:🌱:blossom:🌼
    :ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
    :sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
    :new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
    :full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
    :waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
    :moon:🌔:earth_africa:🌍:earth_americas:🌎
    :earth_asia:🌏:volcano:🌋:milky_way:🌌
    :partly_sunny::octocat::octocat::squirrel::squirrel:
    :waxing_gibbous_moon:🌔

    物体

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bamboo:🎍:gift_heart:💝:dolls:🎎
    :school_satchel:🎒:mortar_board:🎓:flags:🎏
    :fireworks:🎆:sparkler:🎇:wind_chime:🎐
    :rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
    :santa:🎅:christmas_tree:🎄:gift:🎁
    :bell:🔔:no_bell:🔕:tanabata_tree:🎋
    :tada:🎉:confetti_ball:🎊:balloon:🎈
    :crystal_ball:🔮:cd:💿:dvd:📀
    :floppy_disk:💾:camera:📷:video_camera:📹
    :movie_camera:🎥:computer:💻:tv:📺
    :iphone:📱:phone:☎️:telephone:☎️
    :telephone_receiver:📞:pager:📟:fax:📠
    :minidisc:💽:vhs:📼:sound:🔉
    :speaker:🔈:mute:🔇:loudspeaker:📢
    :mega:📣:hourglass::hourglass_flowing_sand:
    :alarm_clock::watch::radio:📻
    :satellite:📡:loop::mag:🔍
    :mag_right:🔎:unlock:🔓:lock:🔒
    :lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
    :bulb:💡:flashlight:🔦:high_brightness:🔆
    :low_brightness:🔅:electric_plug:🔌:battery:🔋
    :calling:📲:email:📧:mailbox:📫
    :postbox:📮:bath:🛀:bathtub:🛁
    :shower:🚿:toilet:🚽:wrench:🔧
    :nut_and_bolt:🔩:hammer:🔨:seat:💺
    :moneybag:💰:yen:💴:dollar:💵
    :pound:💷:euro:💶:credit_card:💳
    :money_with_wings:💸:e-mail:📧:inbox_tray:📥
    :outbox_tray:📤:envelope:✉️:incoming_envelope:📨
    :postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
    :mailbox_with_no_mail:📭:door:🚪:smoking:🚬
    :bomb:💣:gun:🔫:hocho:🔪
    :pill:💊:syringe:💉:page_facing_up:📄
    :page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
    :chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
    :clipboard:📋:calendar:📆:date:📅
    :card_index:📇:file_folder:📁:open_file_folder:📂
    :scissors:✂️:pushpin:📌:paperclip:📎
    :black_nib:✒️:pencil2:✏️:straight_ruler:📏
    :triangular_ruler:📐:closed_book:📕:green_book:📗
    :blue_book:📘:orange_book:📙:notebook:📓
    :notebook_with_decorative_cover:📔:ledger:📒:books:📚
    :bookmark:🔖:microscope:🔬:telescope:🔭
    :name_badge:📛:newspaper:📰:football:🏈
    :basketball:🏀:soccer::baseball:
    :tennis:🎾:8ball:🎱:rugby_football:🏉
    :bowling:🎳:golf::mountain_bicyclist:🚵
    :bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
    :swimmer:🏊:surfer:🏄:ski:🎿
    :spades:♠️:hearts:♥️:clubs:♣️
    :diamonds:♦️:gem:💎:ring:💍
    :trophy:🏆:musical_score:🎼:musical_keyboard:🎹
    :violin:🎻:space_invader:👾:video_game:🎮
    :black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
    :dart:🎯:mahjong:🀄:clapper:🎬
    :memo:📝:pencil:📝:book:📖
    :art:🎨:microphone:🎤:headphones:🎧
    :trumpet:🎺:saxophone:🎷:guitar:🎸
    :shoe:👞:sandal:👡:high_heel:👠
    :lipstick:💄:boot:👢:shirt:👕
    :tshirt:👕:necktie:👔:womans_clothes:👚
    :dress:👗:running_shirt_with_sash:🎽:jeans:👖
    :kimono:👘:bikini:👙:ribbon:🎀
    :tophat:🎩:crown:👑:womans_hat:👒
    :mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
    :handbag:👜:pouch:👝:purse:👛
    :eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
    :tea:🍵:sake:🍶:baby_bottle:🍼
    :beer:🍺:beers:🍻:cocktail:🍸
    :tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
    :pizza:🍕:hamburger:🍔:fries:🍟
    :poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
    :curry:🍛:fried_shrimp:🍤:bento:🍱
    :sushi:🍣:fish_cake:🍥:rice_ball:🍙
    :rice_cracker:🍘:rice:🍚:ramen:🍜
    :stew:🍲:oden:🍢:dango:🍡
    :egg:🥚:bread:🍞:doughnut:🍩
    :custard:🍮:icecream:🍦:ice_cream:🍨
    :shaved_ice:🍧:birthday:🎂:cake:🍰
    :cookie:🍪:chocolate_bar:🍫:candy:🍬
    :lollipop:🍭:honey_pot:🍯:apple:🍎
    :green_apple:🍏:tangerine:🍊:lemon:🍋
    :cherries:🍒:grapes:🍇:watermelon:🍉
    :strawberry:🍓:peach:🍑:melon:🍈
    :banana:🍌:pear:🍐:pineapple:🍍
    :sweet_potato:🍠:eggplant:🍆:tomato:🍅
    :corn:🌽

    地点

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :house:🏠:house_with_garden:🏡:school:🏫
    :office:🏢:post_office:🏣:hospital:🏥
    :bank:🏦:convenience_store:🏪:love_hotel:🏩
    :hotel:🏨:wedding:💒:church:
    :department_store:🏬:european_post_office:🏤:city_sunrise:🌇
    :city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
    :tent::factory:🏭:tokyo_tower:🗼
    :japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
    :sunrise:🌅:stars:🌠:statue_of_liberty:🗽
    :bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
    :ferris_wheel:🎡:fountain::roller_coaster:🎢
    :ship:🚢:speedboat:🚤:boat:
    :sailboat::rowboat:🚣:anchor:
    :rocket:🚀:airplane:✈️:helicopter:🚁
    :steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
    :bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
    :mountain_cableway:🚠:tractor:🚜:blue_car:🚙
    :oncoming_automobile:🚘:car:🚗:red_car:🚗
    :taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
    :bus:🚌:oncoming_bus:🚍:rotating_light:🚨
    :police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
    :ambulance:🚑:minibus:🚐:truck:🚚
    :train:🚋:station:🚉:train2:🚆
    :bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
    :monorail:🚝:railway_car:🚃:trolleybus:🚎
    :ticket:🎫:fuelpump::vertical_traffic_light:🚦
    :traffic_light:🚥:warning:⚠️:construction:🚧
    :beginner:🔰:atm:🏧:slot_machine:🎰
    :busstop:🚏:barber:💈:hotsprings:♨️
    :checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
    :moyai:🗿:circus_tent:🎪:performing_arts:🎭
    :round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
    :kr:🇰🇷:cn:🇨🇳:us:🇺🇸
    :fr:🇫🇷:es:🇪🇸:it:🇮🇹
    :ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
    :de:🇩🇪

    符号

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :one:1️⃣:two:2️⃣:three:3️⃣
    :four:4️⃣:five:5️⃣:six:6️⃣
    :seven:7️⃣:eight:8️⃣:nine:9️⃣
    :keycap_ten:🔟:1234:🔢:zero:0️⃣
    :hash:#️⃣:symbols:🔣:arrow_backward:◀️
    :arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
    :capital_abcd:🔠:abcd:🔡:abc:🔤
    :arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
    :arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
    :arrow_double_down::arrow_double_up::arrow_down_small:🔽
    :arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
    :arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
    :arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
    :rewind::fast_forward::information_source:ℹ️
    :ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
    :repeat_one:🔂:new:🆕:top:🔝
    :up:🆙:cool:🆒:free:🆓
    :ng:🆖:cinema:🎦:koko:🈁
    :signal_strength:📶:u5272::u5272::u5408::u5408:
    :u55b6::u55b6::u6307::u6307::u6708::u6708:
    :u6709::u6709::u6e80:🈵:u7121::u7121:
    :u7533::u7533::u7a7a::u7a7a::u7981::u7981:
    :sa:🈂️:restroom:🚻:mens:🚹
    :womens:🚺:baby_symbol:🚼:no_smoking:🚭
    :parking:🅿️:wheelchair::metro:🚇
    :baggage_claim:🛄:accept:🉑:wc:🚾
    :potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
    :congratulations:㊗️:m:Ⓜ️:passport_control:🛂
    :left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
    :cl:🆑:sos:🆘:id:🆔
    :no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
    :do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
    :no_pedestrians:🚷:children_crossing:🚸:no_entry:
    :eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
    :vs:🆚:vibration_mode:📳:mobile_phone_off:📴
    :chart:💹:currency_exchange:💱:aries:
    :taurus::gemini::cancer:
    :leo::virgo::libra:
    :scorpius::sagittarius::capricorn:
    :aquarius::pisces::ophiuchus:
    :six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
    :b:🅱️:ab:🆎:o2:🅾️
    :diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
    :on:🔛:soon:🔜:clock1:🕐
    :clock130:🕜:clock10:🕙:clock1030:🕥
    :clock11:🕚:clock1130:🕦:clock12:🕛
    :clock1230:🕧:clock2:🕑:clock230:🕝
    :clock3:🕒:clock330:🕞:clock4:🕓
    :clock430:🕟:clock5:🕔:clock530:🕠
    :clock6:🕕:clock630:🕡:clock7:🕖
    :clock730:🕢:clock8:🕗:clock830:🕣
    :clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
    :copyright:©️:registered:®️:tm:™️
    :x::heavy_exclamation_mark::bangbang:‼️
    :interrobang:⁉️:o::heavy_multiplication_x:✖️
    :heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
    :white_flower:💮:100:💯:heavy_check_mark:✔️
    :ballot_box_with_check:☑️:radio_button:🔘:link:🔗
    :curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
    :trident:🔱:black_large_square::white_large_square:
    :white_check_mark::white_square_button:🔳:black_square_button:🔲
    :black_circle::white_circle::red_circle:🔴
    :large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
    :small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
    :small_red_triangle_down:🔻:shipit::shipit:
    ',11);function _(h,u){const e=n("ExternalLinkIcon");return l(),c("div",null,[s,g,t("p",null,[t("strong",null,[t("a",y,[r("原文"),a(e)])])]),x])}const m=d(i,[["render",_],["__file","Best-Emoji.html.vue"]]);export{m as default}; diff --git a/assets/ChatGPT-Porxy.html-cfe3314c.js b/assets/ChatGPT-Porxy.html-cfe3314c.js deleted file mode 100644 index cc2f992b..00000000 --- a/assets/ChatGPT-Porxy.html-cfe3314c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-4e9249a7","path":"/zh/posts/Server/ChatGPT-Porxy.html","title":"ChatGPT-Porxy","lang":"zh-CN","frontmatter":{"title":"ChatGPT-Porxy","date":"2023-04-20T10:43:00.000Z","author":"Ven2s","summary":"***自建ChatGPT反向代理***","tag":["ChatGPT"],"description":"Build ChatGPT Reverse Proxy ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/Server/ChatGPT-Porxy.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"ChatGPT-Porxy"}],["meta",{"property":"og:description","content":"Build ChatGPT Reverse Proxy ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"ChatGPT"}],["meta",{"property":"article:published_time","content":"2023-04-20T10:43:00.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"ChatGPT-Porxy\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-04-20T10:43:00.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[{"level":2,"title":"搭建步骤","slug":"搭建步骤","link":"#搭建步骤","children":[{"level":3,"title":"一、安装 Docker 及 Docker-compose","slug":"一、安装-docker-及-docker-compose","link":"#一、安装-docker-及-docker-compose","children":[]},{"level":3,"title":"二、安装 go-chatgpt-api","slug":"二、安装-go-chatgpt-api","link":"#二、安装-go-chatgpt-api","children":[]},{"level":3,"title":"三、使用自建反代","slug":"三、使用自建反代","link":"#三、使用自建反代","children":[]}]},{"level":2,"title":"完工","slug":"完工","link":"#完工","children":[]},{"level":2,"title":"本教程来源:","slug":"本教程来源","link":"#本教程来源","children":[]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":1.71,"words":513},"filePathRelative":"zh/posts/Server/ChatGPT-Porxy.md","localizedDate":"2023年4月20日","excerpt":"
    \\n

    Build ChatGPT Reverse Proxy

    \\n
    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/DDNS.html-916db36a.js b/assets/DDNS.html-916db36a.js deleted file mode 100644 index 7a91a0ae..00000000 --- a/assets/DDNS.html-916db36a.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-7e743fa4","path":"/zh/posts/Windows/DDNS.html","title":"Cloudflare + DDNS-GO + RDP","lang":"zh-CN","frontmatter":{"title":"Cloudflare + DDNS-GO + RDP","date":"2023-03-27T13:22:22.000Z","author":"Ven2s","summary":"***记录使用ddns实现内网穿透远程访问内网设备***","tag":["DDNS","network"],"description":"Using DDNS and Port forwarding to achieve remote access to devices on an internal network 前言 最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。 写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。 DDNS(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。 Cloudflare 全球知名的DNS服务商。 DDNS-GO 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。 公网 IP 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。 可以看到这里的延迟十分之低","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/Windows/DDNS.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"Cloudflare + DDNS-GO + RDP"}],["meta",{"property":"og:description","content":"Using DDNS and Port forwarding to achieve remote access to devices on an internal network 前言 最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。 写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。 DDNS(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。 Cloudflare 全球知名的DNS服务商。 DDNS-GO 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。 公网 IP 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。 可以看到这里的延迟十分之低"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"DDNS"}],["meta",{"property":"article:tag","content":"network"}],["meta",{"property":"article:published_time","content":"2023-03-27T13:22:22.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Cloudflare + DDNS-GO + RDP\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-03-27T13:22:22.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[{"level":2,"title":"开工","slug":"开工","link":"#开工","children":[]},{"level":2,"title":"正式开始","slug":"正式开始","link":"#正式开始","children":[]},{"level":2,"title":"抽时间,再把如何有效的进行端口转发记录下来,以防我这个狗脑子又忘了","slug":"抽时间-再把如何有效的进行端口转发记录下来-以防我这个狗脑子又忘了","link":"#抽时间-再把如何有效的进行端口转发记录下来-以防我这个狗脑子又忘了","children":[]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":3.76,"words":1129},"filePathRelative":"zh/posts/Windows/DDNS.md","localizedDate":"2023年3月27日","excerpt":"
    \\n

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    \\n
    \\n

    前言

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/Hackintosh.html-cfb7bd5c.js b/assets/Hackintosh.html-cfb7bd5c.js deleted file mode 100644 index 4d9cbbb6..00000000 --- a/assets/Hackintosh.html-cfb7bd5c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-5cd0d543","path":"/zh/posts/MacOS/Hackintosh.html","title":"Hackintosh","lang":"zh-CN","frontmatter":{"title":"Hackintosh","date":"2023-04-07T18:04:08.000Z","author":"Ven2s","summary":"***Hackintosh黑苹果重启计划***","tag":["Hackintosh"],"description":"Hackintosh Reboot Plan 闲话 回忆与现在 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来) 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。","head":[["meta",{"property":"og:url","content":"https://luvsia.com/zh/posts/MacOS/Hackintosh.html"}],["meta",{"property":"og:site_name","content":"风至万始苏"}],["meta",{"property":"og:title","content":"Hackintosh"}],["meta",{"property":"og:description","content":"Hackintosh Reboot Plan 闲话 回忆与现在 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来) 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-10-27T18:37:19.000Z"}],["meta",{"property":"article:author","content":"Ven2s"}],["meta",{"property":"article:tag","content":"Hackintosh"}],["meta",{"property":"article:published_time","content":"2023-04-07T18:04:08.000Z"}],["meta",{"property":"article:modified_time","content":"2023-10-27T18:37:19.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Hackintosh\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-04-07T18:04:08.000Z\\",\\"dateModified\\":\\"2023-10-27T18:37:19.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Ven2s\\"}]}"]]},"headers":[{"level":2,"title":"闲话 回忆与现在","slug":"闲话-回忆与现在","link":"#闲话-回忆与现在","children":[]},{"level":2,"title":"主机及配置","slug":"主机及配置","link":"#主机及配置","children":[]},{"level":2,"title":"工具及配参","slug":"工具及配参","link":"#工具及配参","children":[{"level":3,"title":"所需工具","slug":"所需工具","link":"#所需工具","children":[]},{"level":3,"title":"环境搭建","slug":"环境搭建","link":"#环境搭建","children":[]}]}],"git":{"createdTime":1698431839000,"updatedTime":1698431839000,"contributors":[{"name":"ventusoon","email":"sia@ik.me","commits":1}]},"readingTime":{"minutes":3.28,"words":984},"filePathRelative":"zh/posts/MacOS/Hackintosh.md","localizedDate":"2023年4月7日","excerpt":"
    \\n

    Hackintosh Reboot Plan

    \\n
    \\n

    闲话 回忆与现在

    \\n","autoDesc":true}');export{e as data}; diff --git a/assets/app-31e6d5d9.js b/assets/app-31e6d5d9.js new file mode 100644 index 00000000..9189e976 --- /dev/null +++ b/assets/app-31e6d5d9.js @@ -0,0 +1,802 @@ +const T1="modulepreload",I1=function(e){return"/"+e},Pl={},v=function(t,n,r){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(a=>{if(a=I1(a),a in Pl)return;Pl[a]=!0;const l=a.endsWith(".css"),s=l?'[rel="stylesheet"]':"";if(!!r)for(let d=o.length-1;d>=0;d--){const p=o[d];if(p.href===a&&(!l||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${a}"]${s}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":T1,l||(u.as="script",u.crossOrigin=""),u.href=a,document.head.appendChild(u),l)return new Promise((d,p)=>{u.addEventListener("load",d),u.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${a}`)))})})).then(()=>t()).catch(a=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=a,window.dispatchEvent(l),!l.defaultPrevented)throw a})};function Ba(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const Te={},wn=[],ht=()=>{},P1=()=>!1,L1=/^on[^a-z]/,br=e=>L1.test(e),Oa=e=>e.startsWith("onUpdate:"),Oe=Object.assign,Ra=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},D1=Object.prototype.hasOwnProperty,fe=(e,t)=>D1.call(e,t),X=Array.isArray,er=e=>fo(e)==="[object Map]",C1=e=>fo(e)==="[object Set]",oe=e=>typeof e=="function",ce=e=>typeof e=="string",po=e=>typeof e=="symbol",Le=e=>e!==null&&typeof e=="object",ts=e=>(Le(e)||oe(e))&&oe(e.then)&&oe(e.catch),x1=Object.prototype.toString,fo=e=>x1.call(e),B1=e=>fo(e).slice(8,-1),O1=e=>fo(e)==="[object Object]",Sa=e=>ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,tr=Ba(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),vo=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},R1=/-(\w)/g,st=vo(e=>e.replace(R1,(t,n)=>n?n.toUpperCase():"")),S1=/\B([A-Z])/g,Nn=vo(e=>e.replace(S1,"-$1").toLowerCase()),yr=vo(e=>e.charAt(0).toUpperCase()+e.slice(1)),xo=vo(e=>e?`on${yr(e)}`:""),sn=(e,t)=>!Object.is(e,t),Bo=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},V1=e=>{const t=parseFloat(e);return isNaN(t)?e:t},M1=e=>{const t=ce(e)?Number(e):NaN;return isNaN(t)?e:t};let Ll;const ra=()=>Ll||(Ll=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ho(e){if(X(e)){const t={};for(let n=0;n{if(n){const r=n.split(z1);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function mo(e){let t="";if(ce(e))t=e;else if(X(e))for(let n=0;n{const t=new Set(e);return t.w=0,t.n=0,t},os=e=>(e.w&Jt)>0,as=e=>(e.n&Jt)>0,U1=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(d==="length"||!po(d)&&d>=c)&&s.push(u)})}else switch(n!==void 0&&s.push(l.get(n)),t){case"add":X(e)?Sa(n)&&s.push(l.get("length")):(s.push(l.get(on)),er(e)&&s.push(l.get(aa)));break;case"delete":X(e)||(s.push(l.get(on)),er(e)&&s.push(l.get(aa)));break;case"set":er(e)&&s.push(l.get(on));break}if(s.length===1)s[0]&&la(s[0]);else{const c=[];for(const u of s)u&&c.push(...u);la(Va(c))}}function la(e,t){const n=X(e)?e:[...e];for(const r of n)r.computed&&Cl(r);for(const r of n)r.computed||Cl(r)}function Cl(e,t){(e!==ft||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function Y1(e,t){var n;return(n=to.get(e))==null?void 0:n.get(t)}const J1=Ba("__proto__,__v_isRef,__isVue"),ss=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(po)),xl=Z1();function Z1(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ue(this);for(let a=0,l=this.length;a{e[t]=function(...n){Hn();const r=ue(this)[t].apply(this,n);return Fn(),r}}),e}function Q1(e){const t=ue(this);return Ue(t,"has",e),t.hasOwnProperty(e)}class cs{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,r){const o=this._isReadonly,a=this._shallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return a;if(n==="__v_raw"&&r===(o?a?d0:fs:a?ps:ds).get(t))return t;const l=X(t);if(!o){if(l&&fe(xl,n))return Reflect.get(xl,n,r);if(n==="hasOwnProperty")return Q1}const s=Reflect.get(t,n,r);return(po(n)?ss.has(n):J1(n))||(o||Ue(t,"get",n),a)?s:Se(s)?l&&Sa(n)?s:s.value:Le(s)?o?cn(s):Ar(s):s}}class us extends cs{constructor(t=!1){super(!1,t)}set(t,n,r,o){let a=t[n];if(Cn(a)&&Se(a)&&!Se(r))return!1;if(!this._shallow&&(!no(r)&&!Cn(r)&&(a=ue(a),r=ue(r)),!X(t)&&Se(a)&&!Se(r)))return a.value=r,!0;const l=X(t)&&Sa(n)?Number(n)e,go=e=>Reflect.getPrototypeOf(e);function $r(e,t,n=!1,r=!1){e=e.__v_raw;const o=ue(e),a=ue(t);n||(sn(t,a)&&Ue(o,"get",t),Ue(o,"get",a));const{has:l}=go(o),s=r?$a:n?Ha:cr;if(l.call(o,t))return s(e.get(t));if(l.call(o,a))return s(e.get(a));e!==o&&e.get(t)}function zr(e,t=!1){const n=this.__v_raw,r=ue(n),o=ue(e);return t||(sn(e,o)&&Ue(r,"has",e),Ue(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Nr(e,t=!1){return e=e.__v_raw,!t&&Ue(ue(e),"iterate",on),Reflect.get(e,"size",e)}function Bl(e){e=ue(e);const t=ue(this);return go(t).has.call(t,e)||(t.add(e),Ot(t,"add",e,e)),this}function Ol(e,t){t=ue(t);const n=ue(this),{has:r,get:o}=go(n);let a=r.call(n,e);a||(e=ue(e),a=r.call(n,e));const l=o.call(n,e);return n.set(e,t),a?sn(t,l)&&Ot(n,"set",e,t):Ot(n,"add",e,t),this}function Rl(e){const t=ue(this),{has:n,get:r}=go(t);let o=n.call(t,e);o||(e=ue(e),o=n.call(t,e)),r&&r.call(t,e);const a=t.delete(e);return o&&Ot(t,"delete",e,void 0),a}function Sl(){const e=ue(this),t=e.size!==0,n=e.clear();return t&&Ot(e,"clear",void 0,void 0),n}function Hr(e,t){return function(r,o){const a=this,l=a.__v_raw,s=ue(l),c=t?$a:e?Ha:cr;return!e&&Ue(s,"iterate",on),l.forEach((u,d)=>r.call(o,c(u),c(d),a))}}function Fr(e,t,n){return function(...r){const o=this.__v_raw,a=ue(o),l=er(a),s=e==="entries"||e===Symbol.iterator&&l,c=e==="keys"&&l,u=o[e](...r),d=n?$a:t?Ha:cr;return!t&&Ue(a,"iterate",c?aa:on),{next(){const{value:p,done:f}=u.next();return f?{value:p,done:f}:{value:s?[d(p[0]),d(p[1])]:d(p),done:f}},[Symbol.iterator](){return this}}}}function zt(e){return function(...t){return e==="delete"?!1:this}}function r0(){const e={get(a){return $r(this,a)},get size(){return Nr(this)},has:zr,add:Bl,set:Ol,delete:Rl,clear:Sl,forEach:Hr(!1,!1)},t={get(a){return $r(this,a,!1,!0)},get size(){return Nr(this)},has:zr,add:Bl,set:Ol,delete:Rl,clear:Sl,forEach:Hr(!1,!0)},n={get(a){return $r(this,a,!0)},get size(){return Nr(this,!0)},has(a){return zr.call(this,a,!0)},add:zt("add"),set:zt("set"),delete:zt("delete"),clear:zt("clear"),forEach:Hr(!0,!1)},r={get(a){return $r(this,a,!0,!0)},get size(){return Nr(this,!0)},has(a){return zr.call(this,a,!0)},add:zt("add"),set:zt("set"),delete:zt("delete"),clear:zt("clear"),forEach:Hr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=Fr(a,!1,!1),n[a]=Fr(a,!0,!1),t[a]=Fr(a,!1,!0),r[a]=Fr(a,!0,!0)}),[e,n,t,r]}const[o0,a0,l0,i0]=r0();function za(e,t){const n=t?e?i0:l0:e?a0:o0;return(r,o,a)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(fe(n,o)&&o in r?n:r,o,a)}const s0={get:za(!1,!1)},c0={get:za(!1,!0)},u0={get:za(!0,!1)},ds=new WeakMap,ps=new WeakMap,fs=new WeakMap,d0=new WeakMap;function p0(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function f0(e){return e.__v_skip||!Object.isExtensible(e)?0:p0(B1(e))}function Ar(e){return Cn(e)?e:Na(e,!1,e0,s0,ds)}function vs(e){return Na(e,!1,n0,c0,ps)}function cn(e){return Na(e,!0,t0,u0,fs)}function Na(e,t,n,r,o){if(!Le(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=o.get(e);if(a)return a;const l=f0(e);if(l===0)return e;const s=new Proxy(e,l===2?r:n);return o.set(e,s),s}function kn(e){return Cn(e)?kn(e.__v_raw):!!(e&&e.__v_isReactive)}function Cn(e){return!!(e&&e.__v_isReadonly)}function no(e){return!!(e&&e.__v_isShallow)}function hs(e){return kn(e)||Cn(e)}function ue(e){const t=e&&e.__v_raw;return t?ue(t):e}function ms(e){return eo(e,"__v_skip",!0),e}const cr=e=>Le(e)?Ar(e):e,Ha=e=>Le(e)?cn(e):e;function Fa(e){Kt&&ft&&(e=ue(e),is(e.dep||(e.dep=Va())))}function ja(e,t){e=ue(e);const n=e.dep;n&&la(n)}function Se(e){return!!(e&&e.__v_isRef===!0)}function J(e){return gs(e,!1)}function ze(e){return gs(e,!0)}function gs(e,t){return Se(e)?e:new v0(e,t)}class v0{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ue(t),this._value=n?t:cr(t)}get value(){return Fa(this),this._value}set value(t){const n=this.__v_isShallow||no(t)||Cn(t);t=n?t:ue(t),sn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:cr(t),ja(this))}}function an(e){return Se(e)?e.value:e}const h0={get:(e,t,n)=>an(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Se(o)&&!Se(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function _s(e){return kn(e)?e:new Proxy(e,h0)}class m0{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Fa(this),()=>ja(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Es(e){return new m0(e)}class g0{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Y1(ue(this._object),this._key)}}class _0{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function jn(e,t,n){return Se(e)?e:oe(e)?new _0(e):Le(e)&&arguments.length>1?E0(e,t,n):J(e)}function E0(e,t,n){const r=e[t];return Se(r)?r:new g0(e,t,n)}class b0{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new Ma(t,()=>{this._dirty||(this._dirty=!0,ja(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=ue(this);return Fa(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function y0(e,t,n=!1){let r,o;const a=oe(e);return a?(r=e,o=ht):(r=e.get,o=e.set),new b0(r,o,a||!o,n)}function Yt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(a){wr(a,t,n)}return o}function lt(e,t,n,r){if(oe(e)){const a=Yt(e,t,n,r);return a&&ts(a)&&a.catch(l=>{wr(l,t,n)}),a}const o=[];for(let a=0;a>>1,o=$e[r],a=dr(o);awt&&$e.splice(t,1)}function T0(e){X(e)?Tn.push(...e):(!Bt||!Bt.includes(e,e.allowRecurse?tn+1:tn))&&Tn.push(e),ys()}function Vl(e,t=ur?wt+1:0){for(;t<$e.length;t++){const n=$e[t];n&&n.pre&&($e.splice(t,1),t--,n())}}function ro(e){if(Tn.length){const t=[...new Set(Tn)];if(Tn.length=0,Bt){Bt.push(...t);return}for(Bt=t,Bt.sort((n,r)=>dr(n)-dr(r)),tn=0;tne.id==null?1/0:e.id,I0=(e,t)=>{const n=dr(e)-dr(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function As(e){ia=!1,ur=!0,$e.sort(I0);const t=ht;try{for(wt=0;wt<$e.length;wt++){const n=$e[wt];n&&n.active!==!1&&Yt(n,null,14)}}finally{wt=0,$e.length=0,ro(),ur=!1,qa=null,($e.length||Tn.length)&&As()}}function P0(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||Te;let o=n;const a=t.startsWith("update:"),l=a&&t.slice(7);if(l&&l in r){const d=`${l==="modelValue"?"model":l}Modifiers`,{number:p,trim:f}=r[d]||Te;f&&(o=n.map(h=>ce(h)?h.trim():h)),p&&(o=n.map(V1))}let s,c=r[s=xo(t)]||r[s=xo(st(t))];!c&&a&&(c=r[s=xo(Nn(t))]),c&<(c,e,6,o);const u=r[s+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,lt(u,e,6,o)}}function ws(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const a=e.emits;let l={},s=!1;if(!oe(e)){const c=u=>{const d=ws(u,t,!0);d&&(s=!0,Oe(l,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!a&&!s?(Le(e)&&r.set(e,null),null):(X(a)?a.forEach(c=>l[c]=null):Oe(l,a),Le(e)&&r.set(e,l),l)}function Eo(e,t){return!e||!br(t)?!1:(t=t.slice(2).replace(/Once$/,""),fe(e,t[0].toLowerCase()+t.slice(1))||fe(e,Nn(t))||fe(e,t))}let at=null,ks=null;function oo(e){const t=at;return at=e,ks=e&&e.type.__scopeId||null,t}function L0(e,t=at,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&Kl(-1);const a=oo(t);let l;try{l=e(...o)}finally{oo(a),r._d&&Kl(1)}return l};return r._n=!0,r._c=!0,r._d=!0,r}function Oo(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:a,propsOptions:[l],slots:s,attrs:c,emit:u,render:d,renderCache:p,data:f,setupState:h,ctx:g,inheritAttrs:E}=e;let T,A;const P=oo(e);try{if(n.shapeFlag&4){const I=o||r;T=pt(d.call(I,I,p,a,h,f,g)),A=c}else{const I=t;T=pt(I.length>1?I(a,{attrs:c,slots:s,emit:u}):I(a,null)),A=t.props?c:D0(c)}}catch(I){ar.length=0,wr(I,e,1),T=De(it)}let b=T;if(A&&E!==!1){const I=Object.keys(A),{shapeFlag:S}=b;I.length&&S&7&&(l&&I.some(Oa)&&(A=C0(A,l)),b=Zt(b,A))}return n.dirs&&(b=Zt(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),T=b,oo(P),T}const D0=e=>{let t;for(const n in e)(n==="class"||n==="style"||br(n))&&((t||(t={}))[n]=e[n]);return t},C0=(e,t)=>{const n={};for(const r in e)(!Oa(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function x0(e,t,n){const{props:r,children:o,component:a}=e,{props:l,children:s,patchFlag:c}=t,u=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?Ml(r,l,u):!!l;if(c&8){const d=t.dynamicProps;for(let p=0;pe.__isSuspense;function Ts(e,t){t&&t.pendingBranch?X(e)?t.effects.push(...e):t.effects.push(e):T0(e)}function Is(e,t){return Ga(e,null,t)}const jr={};function he(e,t,n){return Ga(e,t,n)}function Ga(e,t,{immediate:n,deep:r,flush:o,onTrack:a,onTrigger:l}=Te){var s;const c=rs()===((s=Re)==null?void 0:s.scope)?Re:null;let u,d=!1,p=!1;if(Se(e)?(u=()=>e.value,d=no(e)):kn(e)?(u=()=>e,r=!0):X(e)?(p=!0,d=e.some(I=>kn(I)||no(I)),u=()=>e.map(I=>{if(Se(I))return I.value;if(kn(I))return bn(I);if(oe(I))return Yt(I,c,2)})):oe(e)?t?u=()=>Yt(e,c,2):u=()=>{if(!(c&&c.isUnmounted))return f&&f(),lt(e,c,3,[h])}:u=ht,t&&r){const I=u;u=()=>bn(I())}let f,h=I=>{f=P.onStop=()=>{Yt(I,c,4)}},g;if(On)if(h=ht,t?n&<(t,c,3,[u(),p?[]:void 0,h]):u(),o==="sync"){const I=L2();g=I.__watcherHandles||(I.__watcherHandles=[])}else return ht;let E=p?new Array(e.length).fill(jr):jr;const T=()=>{if(P.active)if(t){const I=P.run();(r||d||(p?I.some((S,x)=>sn(S,E[x])):sn(I,E)))&&(f&&f(),lt(t,c,3,[I,E===jr?void 0:p&&E[0]===jr?[]:E,h]),E=I)}else P.run()};T.allowRecurse=!!t;let A;o==="sync"?A=T:o==="post"?A=()=>Ge(T,c&&c.suspense):(T.pre=!0,c&&(T.id=c.uid),A=()=>_o(T));const P=new Ma(u,A);t?n?T():E=P.run():o==="post"?Ge(P.run.bind(P),c&&c.suspense):P.run();const b=()=>{P.stop(),c&&c.scope&&Ra(c.scope.effects,P)};return g&&g.push(b),b}function R0(e,t,n){const r=this.proxy,o=ce(e)?e.includes(".")?Ps(r,e):()=>r[e]:e.bind(r,r);let a;oe(t)?a=t:(a=t.handler,n=t);const l=Re;Bn(this);const s=Ga(o,a.bind(r),n);return l?Bn(l):ln(),s}function Ps(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{bn(n,t)});else if(O1(e))for(const n in e)bn(e[n],t);return e}function At(e,t,n,r){const o=e.dirs,a=t&&t.dirs;for(let l=0;l{e.isMounted=!0}),Ua(()=>{e.isUnmounting=!0}),e}const nt=[Function,Array],Ds={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:nt,onEnter:nt,onAfterEnter:nt,onEnterCancelled:nt,onBeforeLeave:nt,onLeave:nt,onAfterLeave:nt,onLeaveCancelled:nt,onBeforeAppear:nt,onAppear:nt,onAfterAppear:nt,onAppearCancelled:nt},S0={name:"BaseTransition",props:Ds,setup(e,{slots:t}){const n=dn(),r=Ls();let o;return()=>{const a=t.default&&Wa(t.default(),!0);if(!a||!a.length)return;let l=a[0];if(a.length>1){for(const E of a)if(E.type!==it){l=E;break}}const s=ue(e),{mode:c}=s;if(r.isLeaving)return Ro(l);const u=$l(l);if(!u)return Ro(l);const d=pr(u,s,r,n);fr(u,d);const p=n.subTree,f=p&&$l(p);let h=!1;const{getTransitionKey:g}=u.type;if(g){const E=g();o===void 0?o=E:E!==o&&(o=E,h=!0)}if(f&&f.type!==it&&(!nn(u,f)||h)){const E=pr(f,s,r,n);if(fr(f,E),c==="out-in")return r.isLeaving=!0,E.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},Ro(l);c==="in-out"&&u.type!==it&&(E.delayLeave=(T,A,P)=>{const b=Cs(r,f);b[String(f.key)]=f,T[Gt]=()=>{A(),T[Gt]=void 0,delete d.delayedLeave},d.delayedLeave=P})}return l}}},V0=S0;function Cs(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function pr(e,t,n,r){const{appear:o,mode:a,persisted:l=!1,onBeforeEnter:s,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:p,onLeave:f,onAfterLeave:h,onLeaveCancelled:g,onBeforeAppear:E,onAppear:T,onAfterAppear:A,onAppearCancelled:P}=t,b=String(e.key),I=Cs(n,e),S=(C,H)=>{C&<(C,r,9,H)},x=(C,H)=>{const j=H[1];S(C,H),X(C)?C.every(ee=>ee.length<=1)&&j():C.length<=1&&j()},M={mode:a,persisted:l,beforeEnter(C){let H=s;if(!n.isMounted)if(o)H=E||s;else return;C[Gt]&&C[Gt](!0);const j=I[b];j&&nn(e,j)&&j.el[Gt]&&j.el[Gt](),S(H,[C])},enter(C){let H=c,j=u,ee=d;if(!n.isMounted)if(o)H=T||c,j=A||u,ee=P||d;else return;let F=!1;const te=C[qr]=Pe=>{F||(F=!0,Pe?S(ee,[C]):S(j,[C]),M.delayedLeave&&M.delayedLeave(),C[qr]=void 0)};H?x(H,[C,te]):te()},leave(C,H){const j=String(e.key);if(C[qr]&&C[qr](!0),n.isUnmounting)return H();S(p,[C]);let ee=!1;const F=C[Gt]=te=>{ee||(ee=!0,H(),te?S(g,[C]):S(h,[C]),C[Gt]=void 0,I[j]===e&&delete I[j])};I[j]=e,f?x(f,[C,F]):F()},clone(C){return pr(C,t,n,r)}};return M}function Ro(e){if(kr(e))return e=Zt(e),e.children=null,e}function $l(e){return kr(e)?e.children?e.children[0]:void 0:e}function fr(e,t){e.shapeFlag&6&&e.component?fr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Wa(e,t=!1,n){let r=[],o=0;for(let a=0;a1)for(let a=0;aOe({name:e.name},t,{setup:e}))():e}const nr=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function y(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:a,suspensible:l=!0,onError:s}=e;let c=null,u,d=0;const p=()=>(d++,c=null,f()),f=()=>{let h;return c||(h=c=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),s)return new Promise((E,T)=>{s(g,()=>E(p()),()=>T(g),d+1)});throw g}).then(g=>h!==c&&c?c:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),u=g,g)))};return V({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return u},setup(){const h=Re;if(u)return()=>So(u,h);const g=P=>{c=null,wr(P,h,13,!r)};if(l&&h.suspense||On)return f().then(P=>()=>So(P,h)).catch(P=>(g(P),()=>r?De(r,{error:P}):null));const E=J(!1),T=J(),A=J(!!o);return o&&setTimeout(()=>{A.value=!1},o),a!=null&&setTimeout(()=>{if(!E.value&&!T.value){const P=new Error(`Async component timed out after ${a}ms.`);g(P),T.value=P}},a),f().then(()=>{E.value=!0,h.parent&&kr(h.parent.vnode)&&_o(h.parent.update)}).catch(P=>{g(P),T.value=P}),()=>{if(E.value&&u)return So(u,h);if(T.value&&r)return De(r,{error:T.value});if(n&&!A.value)return De(n)}}})}function So(e,t){const{ref:n,props:r,children:o,ce:a}=t.vnode,l=De(e,r,o);return l.ref=n,l.ce=a,delete t.vnode.ce,l}const kr=e=>e.type.__isKeepAlive;function M0(e,t){xs(e,"a",t)}function $0(e,t){xs(e,"da",t)}function xs(e,t,n=Re){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(bo(t,r,n),n){let o=n.parent;for(;o&&o.parent;)kr(o.parent.vnode)&&z0(r,t,n,o),o=o.parent}}function z0(e,t,n,r){const o=bo(t,e,r,!0);Tr(()=>{Ra(r[t],o)},n)}function bo(e,t,n=Re,r=!1){if(n){const o=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Hn(),Bn(n);const s=lt(t,n,e,l);return ln(),Fn(),s});return r?o.unshift(a):o.push(a),a}}const Vt=e=>(t,n=Re)=>(!On||e==="sp")&&bo(e,(...r)=>t(...r),n),N0=Vt("bm"),be=Vt("m"),H0=Vt("bu"),Bs=Vt("u"),Ua=Vt("bum"),Tr=Vt("um"),F0=Vt("sp"),j0=Vt("rtg"),q0=Vt("rtc");function G0(e,t=Re){bo("ec",e,t)}const Os="components";function et(e,t){return U0(Os,e,!0,t)||e}const W0=Symbol.for("v-ndc");function U0(e,t,n=!0,r=!1){const o=at||Re;if(o){const a=o.type;if(e===Os){const s=T2(a,!1);if(s&&(s===t||s===st(t)||s===yr(st(t))))return a}const l=zl(o[e]||a[e],t)||zl(o.appContext[e],t);return!l&&r?a:l}}function zl(e,t){return e&&(e[t]||e[st(t)]||e[yr(st(t))])}const sa=e=>e?Us(e)?Qa(e)||e.proxy:sa(e.parent):null,rr=Oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>sa(e.parent),$root:e=>sa(e.root),$emit:e=>e.emit,$options:e=>Ka(e),$forceUpdate:e=>e.f||(e.f=()=>_o(e.update)),$nextTick:e=>e.n||(e.n=un.bind(e.proxy)),$watch:e=>R0.bind(e)}),Vo=(e,t)=>e!==Te&&!e.__isScriptSetup&&fe(e,t),K0={get({_:e},t){const{ctx:n,setupState:r,data:o,props:a,accessCache:l,type:s,appContext:c}=e;let u;if(t[0]!=="$"){const h=l[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return a[t]}else{if(Vo(r,t))return l[t]=1,r[t];if(o!==Te&&fe(o,t))return l[t]=2,o[t];if((u=e.propsOptions[0])&&fe(u,t))return l[t]=3,a[t];if(n!==Te&&fe(n,t))return l[t]=4,n[t];ca&&(l[t]=0)}}const d=rr[t];let p,f;if(d)return t==="$attrs"&&Ue(e,"get",t),d(e);if((p=s.__cssModules)&&(p=p[t]))return p;if(n!==Te&&fe(n,t))return l[t]=4,n[t];if(f=c.config.globalProperties,fe(f,t))return f[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:a}=e;return Vo(o,t)?(o[t]=n,!0):r!==Te&&fe(r,t)?(r[t]=n,!0):fe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:a}},l){let s;return!!n[l]||e!==Te&&fe(e,l)||Vo(t,l)||(s=a[0])&&fe(s,l)||fe(r,l)||fe(rr,l)||fe(o.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:fe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Nl(e){return X(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ca=!0;function Y0(e){const t=Ka(e),n=e.proxy,r=e.ctx;ca=!1,t.beforeCreate&&Hl(t.beforeCreate,e,"bc");const{data:o,computed:a,methods:l,watch:s,provide:c,inject:u,created:d,beforeMount:p,mounted:f,beforeUpdate:h,updated:g,activated:E,deactivated:T,beforeDestroy:A,beforeUnmount:P,destroyed:b,unmounted:I,render:S,renderTracked:x,renderTriggered:M,errorCaptured:C,serverPrefetch:H,expose:j,inheritAttrs:ee,components:F,directives:te,filters:Pe}=t;if(u&&J0(u,r,null),l)for(const ne in l){const K=l[ne];oe(K)&&(r[ne]=K.bind(n))}if(o){const ne=o.call(n,n);Le(ne)&&(e.data=Ar(ne))}if(ca=!0,a)for(const ne in a){const K=a[ne],Ce=oe(K)?K.bind(n,n):oe(K.get)?K.get.bind(n,n):ht,Et=!oe(K)&&oe(K.set)?K.set.bind(n):ht,tt=k({get:Ce,set:Et});Object.defineProperty(r,ne,{enumerable:!0,configurable:!0,get:()=>tt.value,set:Ve=>tt.value=Ve})}if(s)for(const ne in s)Rs(s[ne],r,n,ne);if(c){const ne=oe(c)?c.call(n):c;Reflect.ownKeys(ne).forEach(K=>{mt(K,ne[K])})}d&&Hl(d,e,"c");function W(ne,K){X(K)?K.forEach(Ce=>ne(Ce.bind(n))):K&&ne(K.bind(n))}if(W(N0,p),W(be,f),W(H0,h),W(Bs,g),W(M0,E),W($0,T),W(G0,C),W(q0,x),W(j0,M),W(Ua,P),W(Tr,I),W(F0,H),X(j))if(j.length){const ne=e.exposed||(e.exposed={});j.forEach(K=>{Object.defineProperty(ne,K,{get:()=>n[K],set:Ce=>n[K]=Ce})})}else e.exposed||(e.exposed={});S&&e.render===ht&&(e.render=S),ee!=null&&(e.inheritAttrs=ee),F&&(e.components=F),te&&(e.directives=te)}function J0(e,t,n=ht){X(e)&&(e=ua(e));for(const r in e){const o=e[r];let a;Le(o)?"default"in o?a=me(o.from||r,o.default,!0):a=me(o.from||r):a=me(o),Se(a)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>a.value,set:l=>a.value=l}):t[r]=a}}function Hl(e,t,n){lt(X(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Rs(e,t,n,r){const o=r.includes(".")?Ps(n,r):()=>n[r];if(ce(e)){const a=t[e];oe(a)&&he(o,a)}else if(oe(e))he(o,e.bind(n));else if(Le(e))if(X(e))e.forEach(a=>Rs(a,t,n,r));else{const a=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(a)&&he(o,a,e)}}function Ka(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:a,config:{optionMergeStrategies:l}}=e.appContext,s=a.get(t);let c;return s?c=s:!o.length&&!n&&!r?c=t:(c={},o.length&&o.forEach(u=>ao(c,u,l,!0)),ao(c,t,l)),Le(t)&&a.set(t,c),c}function ao(e,t,n,r=!1){const{mixins:o,extends:a}=t;a&&ao(e,a,n,!0),o&&o.forEach(l=>ao(e,l,n,!0));for(const l in t)if(!(r&&l==="expose")){const s=Z0[l]||n&&n[l];e[l]=s?s(e[l],t[l]):t[l]}return e}const Z0={data:Fl,props:jl,emits:jl,methods:Xn,computed:Xn,beforeCreate:He,created:He,beforeMount:He,mounted:He,beforeUpdate:He,updated:He,beforeDestroy:He,beforeUnmount:He,destroyed:He,unmounted:He,activated:He,deactivated:He,errorCaptured:He,serverPrefetch:He,components:Xn,directives:Xn,watch:X0,provide:Fl,inject:Q0};function Fl(e,t){return t?e?function(){return Oe(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function Q0(e,t){return Xn(ua(e),ua(t))}function ua(e){if(X(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}function n2(e,t,n,r=!1){const o={},a={};eo(a,yo,1),e.propsDefaults=Object.create(null),Vs(e,t,o,a);for(const l in e.propsOptions[0])l in o||(o[l]=void 0);n?e.props=r?o:vs(o):e.type.props?e.props=o:e.props=a,e.attrs=a}function r2(e,t,n,r){const{props:o,attrs:a,vnode:{patchFlag:l}}=e,s=ue(o),[c]=e.propsOptions;let u=!1;if((r||l>0)&&!(l&16)){if(l&8){const d=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[f,h]=Ms(p,t,!0);Oe(l,f),h&&s.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!a&&!c)return Le(e)&&r.set(e,wn),wn;if(X(a))for(let d=0;d-1,h[1]=E<0||g-1||fe(h,"default"))&&s.push(p)}}}const u=[l,s];return Le(e)&&r.set(e,u),u}function ql(e){return e[0]!=="$"}function Gl(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Wl(e,t){return Gl(e)===Gl(t)}function Ul(e,t){return X(t)?t.findIndex(n=>Wl(n,e)):oe(t)&&Wl(t,e)?0:-1}const $s=e=>e[0]==="_"||e==="$stable",Ya=e=>X(e)?e.map(pt):[pt(e)],o2=(e,t,n)=>{if(t._n)return t;const r=L0((...o)=>Ya(t(...o)),n);return r._c=!1,r},zs=(e,t,n)=>{const r=e._ctx;for(const o in e){if($s(o))continue;const a=e[o];if(oe(a))t[o]=o2(o,a,r);else if(a!=null){const l=Ya(a);t[o]=()=>l}}},Ns=(e,t)=>{const n=Ya(t);e.slots.default=()=>n},a2=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ue(t),eo(t,"_",n)):zs(t,e.slots={})}else e.slots={},t&&Ns(e,t);eo(e.slots,yo,1)},l2=(e,t,n)=>{const{vnode:r,slots:o}=e;let a=!0,l=Te;if(r.shapeFlag&32){const s=t._;s?n&&s===1?a=!1:(Oe(o,t),!n&&s===1&&delete o._):(a=!t.$stable,zs(t,o)),l=t}else t&&(Ns(e,t),l={default:1});if(a)for(const s in o)!$s(s)&&l[s]==null&&delete o[s]};function io(e,t,n,r,o=!1){if(X(e)){e.forEach((f,h)=>io(f,t&&(X(t)?t[h]:t),n,r,o));return}if(nr(r)&&!o)return;const a=r.shapeFlag&4?Qa(r.component)||r.component.proxy:r.el,l=o?null:a,{i:s,r:c}=e,u=t&&t.r,d=s.refs===Te?s.refs={}:s.refs,p=s.setupState;if(u!=null&&u!==c&&(ce(u)?(d[u]=null,fe(p,u)&&(p[u]=null)):Se(u)&&(u.value=null)),oe(c))Yt(c,s,12,[l,d]);else{const f=ce(c),h=Se(c);if(f||h){const g=()=>{if(e.f){const E=f?fe(p,c)?p[c]:d[c]:c.value;o?X(E)&&Ra(E,a):X(E)?E.includes(a)||E.push(a):f?(d[c]=[a],fe(p,c)&&(p[c]=d[c])):(c.value=[a],e.k&&(d[e.k]=c.value))}else f?(d[c]=l,fe(p,c)&&(p[c]=l)):h&&(c.value=l,e.k&&(d[e.k]=l))};l?(g.id=-1,Ge(g,n)):g()}}}let Nt=!1;const Gr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Wr=e=>e.nodeType===8;function i2(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:a,parentNode:l,remove:s,insert:c,createComment:u}}=e,d=(b,I)=>{if(!I.hasChildNodes()){n(null,b,I),ro(),I._vnode=b;return}Nt=!1,p(I.firstChild,b,null,null,null),ro(),I._vnode=b,Nt&&console.error("Hydration completed but contains mismatches.")},p=(b,I,S,x,M,C=!1)=>{const H=Wr(b)&&b.data==="[",j=()=>E(b,I,S,x,M,H),{type:ee,ref:F,shapeFlag:te,patchFlag:Pe}=I;let ke=b.nodeType;I.el=b,Pe===-2&&(C=!1,I.dynamicChildren=null);let W=null;switch(ee){case xn:ke!==3?I.children===""?(c(I.el=o(""),l(b),b),W=b):W=j():(b.data!==I.children&&(Nt=!0,b.data=I.children),W=a(b));break;case it:if(ke!==8||H)if(b.tagName.toLowerCase()==="template"){const ne=I.el.content.firstChild;A(ne,b,S),I.el=b=ne,W=a(b)}else W=j();else W=a(b);break;case or:if(H&&(b=a(b),ke=b.nodeType),ke===1||ke===3){W=b;const ne=!I.children.length;for(let K=0;K{C=C||!!I.dynamicChildren;const{type:H,props:j,patchFlag:ee,shapeFlag:F,dirs:te,transition:Pe}=I,ke=H==="input"&&te||H==="option";if(ke||ee!==-1){if(te&&At(I,null,S,"created"),j)if(ke||!C||ee&48)for(const K in j)(ke&&K.endsWith("value")||br(K)&&!tr(K))&&r(b,K,null,j[K],!1,void 0,S);else j.onClick&&r(b,"onClick",null,j.onClick,!1,void 0,S);let W;(W=j&&j.onVnodeBeforeMount)&&rt(W,S,I);let ne=!1;if(P(b)){ne=Hs(x,Pe)&&S&&S.vnode.props&&S.vnode.props.appear;const K=b.content.firstChild;ne&&Pe.beforeEnter(K),A(K,b,S),I.el=b=K}if(te&&At(I,null,S,"beforeMount"),((W=j&&j.onVnodeMounted)||te||ne)&&Ts(()=>{W&&rt(W,S,I),ne&&Pe.enter(b),te&&At(I,null,S,"mounted")},x),F&16&&!(j&&(j.innerHTML||j.textContent))){let K=h(b.firstChild,I,b,S,x,M,C);for(;K;){Nt=!0;const Ce=K;K=K.nextSibling,s(Ce)}}else F&8&&b.textContent!==I.children&&(Nt=!0,b.textContent=I.children)}return b.nextSibling},h=(b,I,S,x,M,C,H)=>{H=H||!!I.dynamicChildren;const j=I.children,ee=j.length;for(let F=0;F{const{slotScopeIds:H}=I;H&&(M=M?M.concat(H):H);const j=l(b),ee=h(a(b),I,j,S,x,M,C);return ee&&Wr(ee)&&ee.data==="]"?a(I.anchor=ee):(Nt=!0,c(I.anchor=u("]"),j,ee),ee)},E=(b,I,S,x,M,C)=>{if(Nt=!0,I.el=null,C){const ee=T(b);for(;;){const F=a(b);if(F&&F!==ee)s(F);else break}}const H=a(b),j=l(b);return s(b),n(null,I,j,H,S,x,Gr(j),M),H},T=(b,I="[",S="]")=>{let x=0;for(;b;)if(b=a(b),b&&Wr(b)&&(b.data===I&&x++,b.data===S)){if(x===0)return a(b);x--}return b},A=(b,I,S)=>{const x=I.parentNode;x&&x.replaceChild(b,I);let M=S;for(;M;)M.vnode.el===I&&(M.vnode.el=b,M.subTree.el=b),M=M.parent},P=b=>b.nodeType===1&&b.tagName.toLowerCase()==="template";return[d,p]}const Ge=Ts;function s2(e){return c2(e,i2)}function c2(e,t){const n=ra();n.__VUE__=!0;const{insert:r,remove:o,patchProp:a,createElement:l,createText:s,createComment:c,setText:u,setElementText:d,parentNode:p,nextSibling:f,setScopeId:h=ht,insertStaticContent:g}=e,E=(m,_,w,L=null,B=null,O=null,q=!1,$=null,N=!!_.dynamicChildren)=>{if(m===_)return;m&&!nn(m,_)&&(L=D(m),Ve(m,B,O,!0),m=null),_.patchFlag===-2&&(N=!1,_.dynamicChildren=null);const{type:R,ref:Z,shapeFlag:U}=_;switch(R){case xn:T(m,_,w,L);break;case it:A(m,_,w,L);break;case or:m==null&&P(_,w,L,q);break;case Xe:F(m,_,w,L,B,O,q,$,N);break;default:U&1?S(m,_,w,L,B,O,q,$,N):U&6?te(m,_,w,L,B,O,q,$,N):(U&64||U&128)&&R.process(m,_,w,L,B,O,q,$,N,z)}Z!=null&&B&&io(Z,m&&m.ref,O,_||m,!_)},T=(m,_,w,L)=>{if(m==null)r(_.el=s(_.children),w,L);else{const B=_.el=m.el;_.children!==m.children&&u(B,_.children)}},A=(m,_,w,L)=>{m==null?r(_.el=c(_.children||""),w,L):_.el=m.el},P=(m,_,w,L)=>{[m.el,m.anchor]=g(m.children,_,w,L,m.el,m.anchor)},b=({el:m,anchor:_},w,L)=>{let B;for(;m&&m!==_;)B=f(m),r(m,w,L),m=B;r(_,w,L)},I=({el:m,anchor:_})=>{let w;for(;m&&m!==_;)w=f(m),o(m),m=w;o(_)},S=(m,_,w,L,B,O,q,$,N)=>{q=q||_.type==="svg",m==null?x(_,w,L,B,O,q,$,N):H(m,_,B,O,q,$,N)},x=(m,_,w,L,B,O,q,$)=>{let N,R;const{type:Z,props:U,shapeFlag:Q,transition:re,dirs:ie}=m;if(N=m.el=l(m.type,O,U&&U.is,U),Q&8?d(N,m.children):Q&16&&C(m.children,N,null,L,B,O&&Z!=="foreignObject",q,$),ie&&At(m,null,L,"created"),M(N,m,m.scopeId,q,L),U){for(const _e in U)_e!=="value"&&!tr(_e)&&a(N,_e,null,U[_e],O,m.children,L,B,xe);"value"in U&&a(N,"value",null,U.value),(R=U.onVnodeBeforeMount)&&rt(R,L,m)}ie&&At(m,null,L,"beforeMount");const Ae=Hs(B,re);Ae&&re.beforeEnter(N),r(N,_,w),((R=U&&U.onVnodeMounted)||Ae||ie)&&Ge(()=>{R&&rt(R,L,m),Ae&&re.enter(N),ie&&At(m,null,L,"mounted")},B)},M=(m,_,w,L,B)=>{if(w&&h(m,w),L)for(let O=0;O{for(let R=N;R{const $=_.el=m.el;let{patchFlag:N,dynamicChildren:R,dirs:Z}=_;N|=m.patchFlag&16;const U=m.props||Te,Q=_.props||Te;let re;w&&Xt(w,!1),(re=Q.onVnodeBeforeUpdate)&&rt(re,w,_,m),Z&&At(_,m,w,"beforeUpdate"),w&&Xt(w,!0);const ie=B&&_.type!=="foreignObject";if(R?j(m.dynamicChildren,R,$,w,L,ie,O):q||K(m,_,$,null,w,L,ie,O,!1),N>0){if(N&16)ee($,_,U,Q,w,L,B);else if(N&2&&U.class!==Q.class&&a($,"class",null,Q.class,B),N&4&&a($,"style",U.style,Q.style,B),N&8){const Ae=_.dynamicProps;for(let _e=0;_e{re&&rt(re,w,_,m),Z&&At(_,m,w,"updated")},L)},j=(m,_,w,L,B,O,q)=>{for(let $=0;$<_.length;$++){const N=m[$],R=_[$],Z=N.el&&(N.type===Xe||!nn(N,R)||N.shapeFlag&70)?p(N.el):w;E(N,R,Z,null,L,B,O,q,!0)}},ee=(m,_,w,L,B,O,q)=>{if(w!==L){if(w!==Te)for(const $ in w)!tr($)&&!($ in L)&&a(m,$,w[$],null,q,_.children,B,O,xe);for(const $ in L){if(tr($))continue;const N=L[$],R=w[$];N!==R&&$!=="value"&&a(m,$,R,N,q,_.children,B,O,xe)}"value"in L&&a(m,"value",w.value,L.value)}},F=(m,_,w,L,B,O,q,$,N)=>{const R=_.el=m?m.el:s(""),Z=_.anchor=m?m.anchor:s("");let{patchFlag:U,dynamicChildren:Q,slotScopeIds:re}=_;re&&($=$?$.concat(re):re),m==null?(r(R,w,L),r(Z,w,L),C(_.children,w,Z,B,O,q,$,N)):U>0&&U&64&&Q&&m.dynamicChildren?(j(m.dynamicChildren,Q,w,B,O,q,$),(_.key!=null||B&&_===B.subTree)&&Fs(m,_,!0)):K(m,_,w,Z,B,O,q,$,N)},te=(m,_,w,L,B,O,q,$,N)=>{_.slotScopeIds=$,m==null?_.shapeFlag&512?B.ctx.activate(_,w,L,q,N):Pe(_,w,L,B,O,q,N):ke(m,_,N)},Pe=(m,_,w,L,B,O,q)=>{const $=m.component=b2(m,L,B);if(kr(m)&&($.ctx.renderer=z),y2($),$.asyncDep){if(B&&B.registerDep($,W),!m.el){const N=$.subTree=De(it);A(null,N,_,w)}return}W($,m,_,w,B,O,q)},ke=(m,_,w)=>{const L=_.component=m.component;if(x0(m,_,w))if(L.asyncDep&&!L.asyncResolved){ne(L,_,w);return}else L.next=_,k0(L.update),L.update();else _.el=m.el,L.vnode=_},W=(m,_,w,L,B,O,q)=>{const $=()=>{if(m.isMounted){let{next:Z,bu:U,u:Q,parent:re,vnode:ie}=m,Ae=Z,_e;Xt(m,!1),Z?(Z.el=ie.el,ne(m,Z,q)):Z=ie,U&&Bo(U),(_e=Z.props&&Z.props.onVnodeBeforeUpdate)&&rt(_e,re,Z,ie),Xt(m,!0);const Be=Oo(m),ut=m.subTree;m.subTree=Be,E(ut,Be,p(ut.el),D(ut),m,B,O),Z.el=Be.el,Ae===null&&B0(m,Be.el),Q&&Ge(Q,B),(_e=Z.props&&Z.props.onVnodeUpdated)&&Ge(()=>rt(_e,re,Z,ie),B)}else{let Z;const{el:U,props:Q}=_,{bm:re,m:ie,parent:Ae}=m,_e=nr(_);if(Xt(m,!1),re&&Bo(re),!_e&&(Z=Q&&Q.onVnodeBeforeMount)&&rt(Z,Ae,_),Xt(m,!0),U&&de){const Be=()=>{m.subTree=Oo(m),de(U,m.subTree,m,B,null)};_e?_.type.__asyncLoader().then(()=>!m.isUnmounted&&Be()):Be()}else{const Be=m.subTree=Oo(m);E(null,Be,w,L,m,B,O),_.el=Be.el}if(ie&&Ge(ie,B),!_e&&(Z=Q&&Q.onVnodeMounted)){const Be=_;Ge(()=>rt(Z,Ae,Be),B)}(_.shapeFlag&256||Ae&&nr(Ae.vnode)&&Ae.vnode.shapeFlag&256)&&m.a&&Ge(m.a,B),m.isMounted=!0,_=w=L=null}},N=m.effect=new Ma($,()=>_o(R),m.scope),R=m.update=()=>N.run();R.id=m.uid,Xt(m,!0),R()},ne=(m,_,w)=>{_.component=m;const L=m.vnode.props;m.vnode=_,m.next=null,r2(m,_.props,L,w),l2(m,_.children,w),Hn(),Vl(),Fn()},K=(m,_,w,L,B,O,q,$,N=!1)=>{const R=m&&m.children,Z=m?m.shapeFlag:0,U=_.children,{patchFlag:Q,shapeFlag:re}=_;if(Q>0){if(Q&128){Et(R,U,w,L,B,O,q,$,N);return}else if(Q&256){Ce(R,U,w,L,B,O,q,$,N);return}}re&8?(Z&16&&xe(R,B,O),U!==R&&d(w,U)):Z&16?re&16?Et(R,U,w,L,B,O,q,$,N):xe(R,B,O,!0):(Z&8&&d(w,""),re&16&&C(U,w,L,B,O,q,$,N))},Ce=(m,_,w,L,B,O,q,$,N)=>{m=m||wn,_=_||wn;const R=m.length,Z=_.length,U=Math.min(R,Z);let Q;for(Q=0;QZ?xe(m,B,O,!0,!1,U):C(_,w,L,B,O,q,$,N,U)},Et=(m,_,w,L,B,O,q,$,N)=>{let R=0;const Z=_.length;let U=m.length-1,Q=Z-1;for(;R<=U&&R<=Q;){const re=m[R],ie=_[R]=N?Wt(_[R]):pt(_[R]);if(nn(re,ie))E(re,ie,w,null,B,O,q,$,N);else break;R++}for(;R<=U&&R<=Q;){const re=m[U],ie=_[Q]=N?Wt(_[Q]):pt(_[Q]);if(nn(re,ie))E(re,ie,w,null,B,O,q,$,N);else break;U--,Q--}if(R>U){if(R<=Q){const re=Q+1,ie=reQ)for(;R<=U;)Ve(m[R],B,O,!0),R++;else{const re=R,ie=R,Ae=new Map;for(R=ie;R<=Q;R++){const Ze=_[R]=N?Wt(_[R]):pt(_[R]);Ze.key!=null&&Ae.set(Ze.key,R)}let _e,Be=0;const ut=Q-ie+1;let vn=!1,kl=0;const Kn=new Array(ut);for(R=0;R=ut){Ve(Ze,B,O,!0);continue}let yt;if(Ze.key!=null)yt=Ae.get(Ze.key);else for(_e=ie;_e<=Q;_e++)if(Kn[_e-ie]===0&&nn(Ze,_[_e])){yt=_e;break}yt===void 0?Ve(Ze,B,O,!0):(Kn[yt-ie]=R+1,yt>=kl?kl=yt:vn=!0,E(Ze,_[yt],w,null,B,O,q,$,N),Be++)}const Tl=vn?u2(Kn):wn;for(_e=Tl.length-1,R=ut-1;R>=0;R--){const Ze=ie+R,yt=_[Ze],Il=Ze+1{const{el:O,type:q,transition:$,children:N,shapeFlag:R}=m;if(R&6){tt(m.component.subTree,_,w,L);return}if(R&128){m.suspense.move(_,w,L);return}if(R&64){q.move(m,_,w,z);return}if(q===Xe){r(O,_,w);for(let U=0;U$.enter(O),B);else{const{leave:U,delayLeave:Q,afterLeave:re}=$,ie=()=>r(O,_,w),Ae=()=>{U(O,()=>{ie(),re&&re()})};Q?Q(O,ie,Ae):Ae()}else r(O,_,w)},Ve=(m,_,w,L=!1,B=!1)=>{const{type:O,props:q,ref:$,children:N,dynamicChildren:R,shapeFlag:Z,patchFlag:U,dirs:Q}=m;if($!=null&&io($,null,w,m,!0),Z&256){_.ctx.deactivate(m);return}const re=Z&1&&Q,ie=!nr(m);let Ae;if(ie&&(Ae=q&&q.onVnodeBeforeUnmount)&&rt(Ae,_,m),Z&6)bt(m.component,w,L);else{if(Z&128){m.suspense.unmount(w,L);return}re&&At(m,null,_,"beforeUnmount"),Z&64?m.type.remove(m,_,w,B,z,L):R&&(O!==Xe||U>0&&U&64)?xe(R,_,w,!1,!0):(O===Xe&&U&384||!B&&Z&16)&&xe(N,_,w),L&&Je(m)}(ie&&(Ae=q&&q.onVnodeUnmounted)||re)&&Ge(()=>{Ae&&rt(Ae,_,m),re&&At(m,null,_,"unmounted")},w)},Je=m=>{const{type:_,el:w,anchor:L,transition:B}=m;if(_===Xe){Pt(w,L);return}if(_===or){I(m);return}const O=()=>{o(w),B&&!B.persisted&&B.afterLeave&&B.afterLeave()};if(m.shapeFlag&1&&B&&!B.persisted){const{leave:q,delayLeave:$}=B,N=()=>q(w,O);$?$(m.el,O,N):N()}else O()},Pt=(m,_)=>{let w;for(;m!==_;)w=f(m),o(m),m=w;o(_)},bt=(m,_,w)=>{const{bum:L,scope:B,update:O,subTree:q,um:$}=m;L&&Bo(L),B.stop(),O&&(O.active=!1,Ve(q,m,_,w)),$&&Ge($,_),Ge(()=>{m.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&m.asyncDep&&!m.asyncResolved&&m.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},xe=(m,_,w,L=!1,B=!1,O=0)=>{for(let q=O;qm.shapeFlag&6?D(m.component.subTree):m.shapeFlag&128?m.suspense.next():f(m.anchor||m.el),G=(m,_,w)=>{m==null?_._vnode&&Ve(_._vnode,null,null,!0):E(_._vnode||null,m,_,null,null,null,w),Vl(),ro(),_._vnode=m},z={p:E,um:Ve,m:tt,r:Je,mt:Pe,mc:C,pc:K,pbc:j,n:D,o:e};let Y,de;return t&&([Y,de]=t(z)),{render:G,hydrate:Y,createApp:t2(G,Y)}}function Xt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Hs(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Fs(e,t,n=!1){const r=e.children,o=t.children;if(X(r)&&X(o))for(let a=0;a>1,e[n[s]]0&&(t[r]=n[a-1]),n[a]=r)}}for(a=n.length,l=n[a-1];a-- >0;)n[a]=l,l=t[l];return n}const d2=e=>e.__isTeleport,Xe=Symbol.for("v-fgt"),xn=Symbol.for("v-txt"),it=Symbol.for("v-cmt"),or=Symbol.for("v-stc"),ar=[];let vt=null;function p2(e=!1){ar.push(vt=e?null:[])}function f2(){ar.pop(),vt=ar[ar.length-1]||null}let vr=1;function Kl(e){vr+=e}function js(e){return e.dynamicChildren=vr>0?vt||wn:null,f2(),vr>0&&vt&&vt.push(e),e}function a5(e,t,n,r,o,a){return js(Gs(e,t,n,r,o,a,!0))}function v2(e,t,n,r,o){return js(De(e,t,n,r,o,!0))}function pa(e){return e?e.__v_isVNode===!0:!1}function nn(e,t){return e.type===t.type&&e.key===t.key}const yo="__vInternal",qs=({key:e})=>e??null,Xr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ce(e)||Se(e)||oe(e)?{i:at,r:e,k:t,f:!!n}:e:null);function Gs(e,t=null,n=null,r=0,o=null,a=e===Xe?0:1,l=!1,s=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&qs(t),ref:t&&Xr(t),scopeId:ks,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:at};return s?(Ja(c,n),a&128&&e.normalize(c)):n&&(c.shapeFlag|=ce(n)?8:16),vr>0&&!l&&vt&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&vt.push(c),c}const De=h2;function h2(e,t=null,n=null,r=0,o=null,a=!1){if((!e||e===W0)&&(e=it),pa(e)){const s=Zt(e,t,!0);return n&&Ja(s,n),vr>0&&!a&&vt&&(s.shapeFlag&6?vt[vt.indexOf(e)]=s:vt.push(s)),s.patchFlag|=-2,s}if(I2(e)&&(e=e.__vccOpts),t){t=m2(t);let{class:s,style:c}=t;s&&!ce(s)&&(t.class=mo(s)),Le(c)&&(hs(c)&&!X(c)&&(c=Oe({},c)),t.style=ho(c))}const l=ce(e)?1:O0(e)?128:d2(e)?64:Le(e)?4:oe(e)?2:0;return Gs(e,t,n,r,o,l,a,!0)}function m2(e){return e?hs(e)||yo in e?Oe({},e):e:null}function Zt(e,t,n=!1){const{props:r,ref:o,patchFlag:a,children:l}=e,s=t?g2(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&qs(s),ref:t&&t.ref?n&&o?X(o)?o.concat(Xr(t)):[o,Xr(t)]:Xr(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Xe?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Zt(e.ssContent),ssFallback:e.ssFallback&&Zt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ws(e=" ",t=0){return De(xn,null,e,t)}function l5(e,t){const n=De(or,null,e);return n.staticCount=t,n}function i5(e="",t=!1){return t?(p2(),v2(it,null,e)):De(it,null,e)}function pt(e){return e==null||typeof e=="boolean"?De(it):X(e)?De(Xe,null,e.slice()):typeof e=="object"?Wt(e):De(xn,null,String(e))}function Wt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Zt(e)}function Ja(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Ja(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(yo in t)?t._ctx=at:o===3&&at&&(at.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:at},n=32):(t=String(t),r&64?(n=16,t=[Ws(t)]):n=8);e.children=t,e.shapeFlag|=n}function g2(...e){const t={};for(let n=0;nRe||at;let Za,hn,Yl="__VUE_INSTANCE_SETTERS__";(hn=ra()[Yl])||(hn=ra()[Yl]=[]),hn.push(e=>Re=e),Za=e=>{hn.length>1?hn.forEach(t=>t(e)):hn[0](e)};const Bn=e=>{Za(e),e.scope.on()},ln=()=>{Re&&Re.scope.off(),Za(null)};function Us(e){return e.vnode.shapeFlag&4}let On=!1;function y2(e,t=!1){On=t;const{props:n,children:r}=e.vnode,o=Us(e);n2(e,n,o,t),a2(e,r);const a=o?A2(e,t):void 0;return On=!1,a}function A2(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=ms(new Proxy(e.ctx,K0));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?k2(e):null;Bn(e),Hn();const a=Yt(r,e,0,[e.props,o]);if(Fn(),ln(),ts(a)){if(a.then(ln,ln),t)return a.then(l=>{Jl(e,l,t)}).catch(l=>{wr(l,e,0)});e.asyncDep=a}else Jl(e,a,t)}else Ks(e,t)}function Jl(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Le(t)&&(e.setupState=_s(t)),Ks(e,n)}let Zl;function Ks(e,t,n){const r=e.type;if(!e.render){if(!t&&Zl&&!r.render){const o=r.template||Ka(e).template;if(o){const{isCustomElement:a,compilerOptions:l}=e.appContext.config,{delimiters:s,compilerOptions:c}=r,u=Oe(Oe({isCustomElement:a,delimiters:s},l),c);r.render=Zl(o,u)}}e.render=r.render||ht}{Bn(e),Hn();try{Y0(e)}finally{Fn(),ln()}}}function w2(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Ue(e,"get","$attrs"),t[n]}}))}function k2(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return w2(e)},slots:e.slots,emit:e.emit,expose:t}}function Qa(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(_s(ms(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in rr)return rr[n](e)},has(t,n){return n in t||n in rr}}))}function T2(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function I2(e){return oe(e)&&"__vccOpts"in e}const k=(e,t)=>y0(e,t,On);function i(e,t,n){const r=arguments.length;return r===2?Le(t)&&!X(t)?pa(t)?De(e,null,[t]):De(e,t):De(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&pa(n)&&(n=[n]),De(e,t,n))}const P2=Symbol.for("v-scx"),L2=()=>me(P2),D2="3.3.7",C2="http://www.w3.org/2000/svg",rn=typeof document<"u"?document:null,Ql=rn&&rn.createElement("template"),x2={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?rn.createElementNS(C2,e):rn.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>rn.createTextNode(e),createComment:e=>rn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>rn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,a){const l=n?n.previousSibling:t.lastChild;if(o&&(o===a||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===a||!(o=o.nextSibling)););else{Ql.innerHTML=r?`${e}`:e;const s=Ql.content;if(r){const c=s.firstChild;for(;c.firstChild;)s.appendChild(c.firstChild);s.removeChild(c)}t.insertBefore(s,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ht="transition",Yn="animation",Rn=Symbol("_vtc"),Qt=(e,{slots:t})=>i(V0,Js(e),t);Qt.displayName="Transition";const Ys={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},B2=Qt.props=Oe({},Ds,Ys),en=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},Xl=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function Js(e){const t={};for(const F in e)F in Ys||(t[F]=e[F]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:a=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:c=a,appearActiveClass:u=l,appearToClass:d=s,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,g=O2(o),E=g&&g[0],T=g&&g[1],{onBeforeEnter:A,onEnter:P,onEnterCancelled:b,onLeave:I,onLeaveCancelled:S,onBeforeAppear:x=A,onAppear:M=P,onAppearCancelled:C=b}=t,H=(F,te,Pe)=>{qt(F,te?d:s),qt(F,te?u:l),Pe&&Pe()},j=(F,te)=>{F._isLeaving=!1,qt(F,p),qt(F,h),qt(F,f),te&&te()},ee=F=>(te,Pe)=>{const ke=F?M:P,W=()=>H(te,F,Pe);en(ke,[te,W]),ei(()=>{qt(te,F?c:a),Dt(te,F?d:s),Xl(ke)||ti(te,r,E,W)})};return Oe(t,{onBeforeEnter(F){en(A,[F]),Dt(F,a),Dt(F,l)},onBeforeAppear(F){en(x,[F]),Dt(F,c),Dt(F,u)},onEnter:ee(!1),onAppear:ee(!0),onLeave(F,te){F._isLeaving=!0;const Pe=()=>j(F,te);Dt(F,p),Qs(),Dt(F,f),ei(()=>{F._isLeaving&&(qt(F,p),Dt(F,h),Xl(I)||ti(F,r,T,Pe))}),en(I,[F,Pe])},onEnterCancelled(F){H(F,!1),en(b,[F])},onAppearCancelled(F){H(F,!0),en(C,[F])},onLeaveCancelled(F){j(F),en(S,[F])}})}function O2(e){if(e==null)return null;if(Le(e))return[Mo(e.enter),Mo(e.leave)];{const t=Mo(e);return[t,t]}}function Mo(e){return M1(e)}function Dt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Rn]||(e[Rn]=new Set)).add(t)}function qt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Rn];n&&(n.delete(t),n.size||(e[Rn]=void 0))}function ei(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let R2=0;function ti(e,t,n,r){const o=e._endId=++R2,a=()=>{o===e._endId&&r()};if(n)return setTimeout(a,n);const{type:l,timeout:s,propCount:c}=Zs(e,t);if(!l)return r();const u=l+"end";let d=0;const p=()=>{e.removeEventListener(u,f),a()},f=h=>{h.target===e&&++d>=c&&p()};setTimeout(()=>{d(n[g]||"").split(", "),o=r(`${Ht}Delay`),a=r(`${Ht}Duration`),l=ni(o,a),s=r(`${Yn}Delay`),c=r(`${Yn}Duration`),u=ni(s,c);let d=null,p=0,f=0;t===Ht?l>0&&(d=Ht,p=l,f=a.length):t===Yn?u>0&&(d=Yn,p=u,f=c.length):(p=Math.max(l,u),d=p>0?l>u?Ht:Yn:null,f=d?d===Ht?a.length:c.length:0);const h=d===Ht&&/\b(transform|all)(,|$)/.test(r(`${Ht}Property`).toString());return{type:d,timeout:p,propCount:f,hasTransform:h}}function ni(e,t){for(;e.lengthri(n)+ri(e[r])))}function ri(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Qs(){return document.body.offsetHeight}function S2(e,t,n){const r=e[Rn];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const V2=Symbol("_vod");function M2(e,t,n){const r=e.style,o=ce(n);if(n&&!o){if(t&&!ce(t))for(const a in t)n[a]==null&&fa(r,a,"");for(const a in n)fa(r,a,n[a])}else{const a=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),V2 in e&&(r.display=a)}}const oi=/\s*!important$/;function fa(e,t,n){if(X(n))n.forEach(r=>fa(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=$2(e,t);oi.test(n)?e.setProperty(Nn(r),n.replace(oi,""),"important"):e[r]=n}}const ai=["Webkit","Moz","ms"],$o={};function $2(e,t){const n=$o[t];if(n)return n;let r=st(t);if(r!=="filter"&&r in e)return $o[t]=r;r=yr(r);for(let o=0;ozo||(G2.then(()=>zo=0),zo=Date.now());function U2(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;lt(K2(r,n.value),t,5,[r])};return n.value=e,n.attached=W2(),n}function K2(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const ci=/^on[a-z]/,Y2=(e,t,n,r,o=!1,a,l,s,c)=>{t==="class"?S2(e,r,o):t==="style"?M2(e,n,r):br(t)?Oa(t)||j2(e,t,n,r,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):J2(e,t,r,o))?N2(e,t,r,a,l,s,c):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),z2(e,t,r,o))};function J2(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&ci.test(t)&&oe(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ci.test(t)&&ce(n)?!1:t in e}const Xs=new WeakMap,ec=new WeakMap,so=Symbol("_moveCb"),ui=Symbol("_enterCb"),tc={name:"TransitionGroup",props:Oe({},B2,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=dn(),r=Ls();let o,a;return Bs(()=>{if(!o.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!n3(o[0].el,n.vnode.el,l))return;o.forEach(X2),o.forEach(e3);const s=o.filter(t3);Qs(),s.forEach(c=>{const u=c.el,d=u.style;Dt(u,l),d.transform=d.webkitTransform=d.transitionDuration="";const p=u[so]=f=>{f&&f.target!==u||(!f||/transform$/.test(f.propertyName))&&(u.removeEventListener("transitionend",p),u[so]=null,qt(u,l))};u.addEventListener("transitionend",p)})}),()=>{const l=ue(e),s=Js(l);let c=l.tag||Xe;o=a,a=t.default?Wa(t.default()):[];for(let u=0;udelete e.mode;tc.props;const Q2=tc;function X2(e){const t=e.el;t[so]&&t[so](),t[ui]&&t[ui]()}function e3(e){ec.set(e,e.el.getBoundingClientRect())}function t3(e){const t=Xs.get(e),n=ec.get(e),r=t.left-n.left,o=t.top-n.top;if(r||o){const a=e.el.style;return a.transform=a.webkitTransform=`translate(${r}px,${o}px)`,a.transitionDuration="0s",e}}function n3(e,t,n){const r=e.cloneNode(),o=e[Rn];o&&o.forEach(s=>{s.split(/\s+/).forEach(c=>c&&r.classList.remove(c))}),n.split(/\s+/).forEach(s=>s&&r.classList.add(s)),r.style.display="none";const a=t.nodeType===1?t:t.parentNode;a.appendChild(r);const{hasTransform:l}=Zs(r);return a.removeChild(r),l}const r3=Oe({patchProp:Y2},x2);let No,di=!1;function o3(){return No=di?No:s2(r3),di=!0,No}const a3=(...e)=>{const t=o3().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=l3(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function l3(e){return ce(e)?document.querySelector(e):e}const i3={"v-8daa1a0e":()=>v(()=>import("./index.html-e750e25d.js"),[]).then(({data:e})=>e),"v-184f4da6":()=>v(()=>import("./intro.html-208ed657.js"),[]).then(({data:e})=>e),"v-2e3eac9e":()=>v(()=>import("./slides.html-ebe0e0e3.js"),[]).then(({data:e})=>e),"v-5b80caef":()=>v(()=>import("./beautification.html-e0860d2c.js"),[]).then(({data:e})=>e),"v-cd69af9a":()=>v(()=>import("./best-emoji.html-d9cacc27.js"),[]).then(({data:e})=>e),"v-4f276fe1":()=>v(()=>import("./build-sub.html-df365527.js"),[]).then(({data:e})=>e),"v-28c690c8":()=>v(()=>import("./chatgpt-porxy.html-dd1fb6fe.js"),[]).then(({data:e})=>e),"v-ef3ead22":()=>v(()=>import("./chatgpt.html-4fc77441.js"),[]).then(({data:e})=>e),"v-d46b396a":()=>v(()=>import("./ddns.html-aed55ac9.js"),[]).then(({data:e})=>e),"v-d7b7dc3e":()=>v(()=>import("./github-actions-deploy.html-5ae8b5e0.js"),[]).then(({data:e})=>e),"v-0d806e9f":()=>v(()=>import("./github-tools.html-17095057.js"),[]).then(({data:e})=>e),"v-63fa6bda":()=>v(()=>import("./hackintosh.html-6ce59f55.js"),[]).then(({data:e})=>e),"v-63ab6aeb":()=>v(()=>import("./hello-world.html-734ec773.js"),[]).then(({data:e})=>e),"v-621503b1":()=>v(()=>import("./kms.html-3428cd4d.js"),[]).then(({data:e})=>e),"v-0a098e32":()=>v(()=>import("./nginx-proxy-manager.html-6c92adb2.js"),[]).then(({data:e})=>e),"v-1381a68e":()=>v(()=>import("./port-forwarding.html-0d88a02a.js"),[]).then(({data:e})=>e),"v-e2a540b8":()=>v(()=>import("./server-building.html-159fc937.js"),[]).then(({data:e})=>e),"v-1473bf53":()=>v(()=>import("./index.html-4686c0ad.js"),[]).then(({data:e})=>e),"v-4e65ec78":()=>v(()=>import("./disable.html-78a046cc.js"),[]).then(({data:e})=>e),"v-c151bf32":()=>v(()=>import("./encrypt.html-a049ffaa.js"),[]).then(({data:e})=>e),"v-438ffe52":()=>v(()=>import("./markdown.html-46872f94.js"),[]).then(({data:e})=>e),"v-6e19edb7":()=>v(()=>import("./page.html-e5bbf2ec.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>v(()=>import("./index.html-296b05c9.js"),[]).then(({data:e})=>e),"v-5aa3d8ba":()=>v(()=>import("./intro.html-ff7ca9d0.js"),[]).then(({data:e})=>e),"v-367b840a":()=>v(()=>import("./slides.html-79167dbc.js"),[]).then(({data:e})=>e),"v-50451b6c":()=>v(()=>import("./1.html-a3870386.js"),[]).then(({data:e})=>e),"v-68175033":()=>v(()=>import("./1993.html-76dc4228.js"),[]).then(({data:e})=>e),"v-2d0ad528":()=>v(()=>import("./index.html-0d1e3c0b.js"),[]).then(({data:e})=>e),"v-858cfdd6":()=>v(()=>import("./intro.html-d88a371c.js"),[]).then(({data:e})=>e),"v-269ae70f":()=>v(()=>import("./slides.html-4bd7292f.js"),[]).then(({data:e})=>e),"v-22aa6303":()=>v(()=>import("./beautification.html-a0002e89.js"),[]).then(({data:e})=>e),"v-5ce82b72":()=>v(()=>import("./best-emoji.html-44112ff3.js"),[]).then(({data:e})=>e),"v-617c1b4d":()=>v(()=>import("./build-sub.html-2b0e812e.js"),[]).then(({data:e})=>e),"v-60bfa634":()=>v(()=>import("./chatgpt-porxy.html-dcda8b76.js"),[]).then(({data:e})=>e),"v-20813fdb":()=>v(()=>import("./chatgpt.html-b68f2b07.js"),[]).then(({data:e})=>e),"v-35fb445f":()=>v(()=>import("./ddns.html-85a5a569.js"),[]).then(({data:e})=>e),"v-25d20966":()=>v(()=>import("./github-actions-deploy.html-041ac534.js"),[]).then(({data:e})=>e),"v-3898fbb3":()=>v(()=>import("./github-tools.html-95c6c3a5.js"),[]).then(({data:e})=>e),"v-c789a424":()=>v(()=>import("./hackintosh.html-8b854f9c.js"),[]).then(({data:e})=>e),"v-3382eb57":()=>v(()=>import("./hello-world.html-9673670c.js"),[]).then(({data:e})=>e),"v-4e79b01d":()=>v(()=>import("./kms.html-de24db7d.js"),[]).then(({data:e})=>e),"v-6f9ce55a":()=>v(()=>import("./nginx-proxy-manager.html-6e9cbb00.js"),[]).then(({data:e})=>e),"v-14489725":()=>v(()=>import("./port-forwarding.html-c31c8ce9.js"),[]).then(({data:e})=>e),"v-a6926be0":()=>v(()=>import("./server-building.html-d06c8ec2.js"),[]).then(({data:e})=>e),"v-395cd082":()=>v(()=>import("./index.html-deb345b1.js"),[]).then(({data:e})=>e),"v-70eda030":()=>v(()=>import("./disable.html-3ec8de69.js"),[]).then(({data:e})=>e),"v-3777b6d3":()=>v(()=>import("./encrypt.html-4826ee8c.js"),[]).then(({data:e})=>e),"v-4a2a37eb":()=>v(()=>import("./markdown.html-9c531858.js"),[]).then(({data:e})=>e),"v-0e4acecb":()=>v(()=>import("./page.html-f2efc410.js"),[]).then(({data:e})=>e),"v-5881f2d8":()=>v(()=>import("./1.html-71ec92f4.js"),[]).then(({data:e})=>e),"v-08483147":()=>v(()=>import("./1993.html-847ce58a.js"),[]).then(({data:e})=>e),"v-698e5fc4":()=>v(()=>import("./beautification.html-c5f05e66.js"),[]).then(({data:e})=>e),"v-7f09c63c":()=>v(()=>import("./best-emoji.html-92d307b4.js"),[]).then(({data:e})=>e),"v-1edea952":()=>v(()=>import("./build-sub.html-60045550.js"),[]).then(({data:e})=>e),"v-6e71a9b9":()=>v(()=>import("./chatgpt-porxy.html-371650dd.js"),[]).then(({data:e})=>e),"v-4ec98b20":()=>v(()=>import("./chatgpt.html-8c71b55c.js"),[]).then(({data:e})=>e),"v-eb01718c":()=>v(()=>import("./ddns.html-79fb6ac0.js"),[]).then(({data:e})=>e),"v-04b8ac5c":()=>v(()=>import("./github-actions-deploy.html-201932e2.js"),[]).then(({data:e})=>e),"v-2885f38e":()=>v(()=>import("./github-tools.html-d05d3165.js"),[]).then(({data:e})=>e),"v-e9ab3eee":()=>v(()=>import("./hackintosh.html-fac6d3f1.js"),[]).then(({data:e})=>e),"v-227a0c1c":()=>v(()=>import("./hello-world.html-bfc56e5b.js"),[]).then(({data:e})=>e),"v-9767343c":()=>v(()=>import("./kms.html-65f1263a.js"),[]).then(({data:e})=>e),"v-76b21918":()=>v(()=>import("./nginx-proxy-manager.html-c2b011ae.js"),[]).then(({data:e})=>e),"v-7d87cd6a":()=>v(()=>import("./port-forwarding.html-b8021567.js"),[]).then(({data:e})=>e),"v-15f60055":()=>v(()=>import("./server-building.html-0737554b.js"),[]).then(({data:e})=>e),"v-2b64e284":()=>v(()=>import("./index.html-0e085ef0.js"),[]).then(({data:e})=>e),"v-c1942916":()=>v(()=>import("./disable.html-61d68028.js"),[]).then(({data:e})=>e),"v-65c00218":()=>v(()=>import("./encrypt.html-6bd3e91c.js"),[]).then(({data:e})=>e),"v-36295574":()=>v(()=>import("./markdown.html-fe0c1a9c.js"),[]).then(({data:e})=>e),"v-62ced1a6":()=>v(()=>import("./page.html-a33894fd.js"),[]).then(({data:e})=>e),"v-48a155dd":()=>v(()=>import("./1.html-efd29e37.js"),[]).then(({data:e})=>e),"v-5ccc3422":()=>v(()=>import("./1993.html-1e5cc14f.js"),[]).then(({data:e})=>e),"v-3706649a":()=>v(()=>import("./404.html-a1286a25.js"),[]).then(({data:e})=>e),"v-146a1089":()=>v(()=>import("./index.html-41c793c5.js"),[]).then(({data:e})=>e),"v-15054f24":()=>v(()=>import("./index.html-36b05b52.js"),[]).then(({data:e})=>e),"v-39702e16":()=>v(()=>import("./index.html-d7009805.js"),[]).then(({data:e})=>e),"v-3839b0e0":()=>v(()=>import("./index.html-28f6ce88.js"),[]).then(({data:e})=>e),"v-2b5b33ba":()=>v(()=>import("./index.html-469a2a6c.js"),[]).then(({data:e})=>e),"v-2bf67255":()=>v(()=>import("./index.html-23d51dea.js"),[]).then(({data:e})=>e),"v-5bc93818":()=>v(()=>import("./index.html-bb914c66.js"),[]).then(({data:e})=>e),"v-744d024e":()=>v(()=>import("./index.html-049a994e.js"),[]).then(({data:e})=>e),"v-e52c881c":()=>v(()=>import("./index.html-dd92bd1d.js"),[]).then(({data:e})=>e),"v-154dc4c4":()=>v(()=>import("./index.html-f562a673.js"),[]).then(({data:e})=>e),"v-01560935":()=>v(()=>import("./index.html-0cea9727.js"),[]).then(({data:e})=>e),"v-9c48d85a":()=>v(()=>import("./index.html-7762ebe8.js"),[]).then(({data:e})=>e),"v-2836033f":()=>v(()=>import("./index.html-2331c347.js"),[]).then(({data:e})=>e),"v-54d7ff21":()=>v(()=>import("./index.html-44d88349.js"),[]).then(({data:e})=>e),"v-2c3ee7f5":()=>v(()=>import("./index.html-9ddc3ed1.js"),[]).then(({data:e})=>e),"v-27b02be6":()=>v(()=>import("./index.html-5927d627.js"),[]).then(({data:e})=>e),"v-b7f3a660":()=>v(()=>import("./index.html-bccb4373.js"),[]).then(({data:e})=>e),"v-484552dc":()=>v(()=>import("./index.html-24712add.js"),[]).then(({data:e})=>e),"v-506407f4":()=>v(()=>import("./index.html-5ef04573.js"),[]).then(({data:e})=>e),"v-37a8c5a0":()=>v(()=>import("./index.html-54df182a.js"),[]).then(({data:e})=>e),"v-0379cba1":()=>v(()=>import("./index.html-a6b949a6.js"),[]).then(({data:e})=>e),"v-1f004e24":()=>v(()=>import("./index.html-185f3271.js"),[]).then(({data:e})=>e),"v-6a4c233e":()=>v(()=>import("./index.html-359da05e.js"),[]).then(({data:e})=>e),"v-99cacd98":()=>v(()=>import("./index.html-cc9e8f9d.js"),[]).then(({data:e})=>e),"v-3a8afeec":()=>v(()=>import("./index.html-ea05b96a.js"),[]).then(({data:e})=>e),"v-03d57386":()=>v(()=>import("./index.html-f5761f6a.js"),[]).then(({data:e})=>e),"v-284e8cfc":()=>v(()=>import("./index.html-b651158f.js"),[]).then(({data:e})=>e),"v-40b68770":()=>v(()=>import("./index.html-3a9f157a.js"),[]).then(({data:e})=>e),"v-49627fe2":()=>v(()=>import("./index.html-0b420705.js"),[]).then(({data:e})=>e),"v-fbb94a6e":()=>v(()=>import("./index.html-2becdb8e.js"),[]).then(({data:e})=>e),"v-1b3ae9cf":()=>v(()=>import("./index.html-ca9fd618.js"),[]).then(({data:e})=>e),"v-53c32dc4":()=>v(()=>import("./index.html-26e8aee0.js"),[]).then(({data:e})=>e),"v-0527fcfc":()=>v(()=>import("./index.html-eeefa7db.js"),[]).then(({data:e})=>e),"v-1fbd0d01":()=>v(()=>import("./index.html-45e9da17.js"),[]).then(({data:e})=>e),"v-6fecf66a":()=>v(()=>import("./index.html-97eaede9.js"),[]).then(({data:e})=>e),"v-352da056":()=>v(()=>import("./index.html-1400c126.js"),[]).then(({data:e})=>e),"v-b30d1368":()=>v(()=>import("./index.html-bcbca2ae.js"),[]).then(({data:e})=>e),"v-55023325":()=>v(()=>import("./index.html-7e066fc5.js"),[]).then(({data:e})=>e),"v-2a32a3a8":()=>v(()=>import("./index.html-d18f86c2.js"),[]).then(({data:e})=>e),"v-19485e48":()=>v(()=>import("./index.html-679ffb3a.js"),[]).then(({data:e})=>e),"v-072edc12":()=>v(()=>import("./index.html-3747f491.js"),[]).then(({data:e})=>e),"v-5decfa84":()=>v(()=>import("./index.html-574c4b96.js"),[]).then(({data:e})=>e),"v-83e1f92e":()=>v(()=>import("./index.html-4243404d.js"),[]).then(({data:e})=>e),"v-17c6d53f":()=>v(()=>import("./index.html-085f29ed.js"),[]).then(({data:e})=>e),"v-1e447d61":()=>v(()=>import("./index.html-7e8dd85b.js"),[]).then(({data:e})=>e),"v-713c813c":()=>v(()=>import("./index.html-d756f031.js"),[]).then(({data:e})=>e),"v-a378ad66":()=>v(()=>import("./index.html-8e047b1f.js"),[]).then(({data:e})=>e),"v-91be36e0":()=>v(()=>import("./index.html-8f7c302c.js"),[]).then(({data:e})=>e),"v-7b167472":()=>v(()=>import("./index.html-acbf4d5d.js"),[]).then(({data:e})=>e),"v-1905daa0":()=>v(()=>import("./index.html-4cceb0c3.js"),[]).then(({data:e})=>e),"v-0f1d0e94":()=>v(()=>import("./index.html-ece582ad.js"),[]).then(({data:e})=>e),"v-0fe52c37":()=>v(()=>import("./index.html-4d2562e7.js"),[]).then(({data:e})=>e),"v-3ceeab45":()=>v(()=>import("./index.html-0a046f13.js"),[]).then(({data:e})=>e),"v-495c2a5c":()=>v(()=>import("./index.html-d981c09f.js"),[]).then(({data:e})=>e),"v-301b24f4":()=>v(()=>import("./index.html-626f6ba3.js"),[]).then(({data:e})=>e),"v-6a59b3bf":()=>v(()=>import("./index.html-83c28d60.js"),[]).then(({data:e})=>e),"v-d13d5aa8":()=>v(()=>import("./index.html-bcc19798.js"),[]).then(({data:e})=>e),"v-540234fd":()=>v(()=>import("./index.html-c9256ac9.js"),[]).then(({data:e})=>e),"v-4e9025f0":()=>v(()=>import("./index.html-4cce6341.js"),[]).then(({data:e})=>e),"v-2e14b8c3":()=>v(()=>import("./index.html-cbdb6146.js"),[]).then(({data:e})=>e),"v-62a85daf":()=>v(()=>import("./index.html-17df3c26.js"),[]).then(({data:e})=>e),"v-1434d78e":()=>v(()=>import("./index.html-1f569943.js"),[]).then(({data:e})=>e),"v-4ea8afad":()=>v(()=>import("./index.html-17082b8f.js"),[]).then(({data:e})=>e),"v-230c5884":()=>v(()=>import("./index.html-bcc52ef6.js"),[]).then(({data:e})=>e),"v-6d724c00":()=>v(()=>import("./index.html-a1d071f7.js"),[]).then(({data:e})=>e),"v-bb53961e":()=>v(()=>import("./index.html-7ec5ada2.js"),[]).then(({data:e})=>e),"v-69f11ebc":()=>v(()=>import("./index.html-f9a257f5.js"),[]).then(({data:e})=>e),"v-6de7b97b":()=>v(()=>import("./index.html-ce7f8a63.js"),[]).then(({data:e})=>e),"v-409d800e":()=>v(()=>import("./index.html-91ae13a7.js"),[]).then(({data:e})=>e),"v-03ba1c5a":()=>v(()=>import("./index.html-1218967e.js"),[]).then(({data:e})=>e),"v-05bf9c12":()=>v(()=>import("./index.html-e650b7d7.js"),[]).then(({data:e})=>e),"v-d4827004":()=>v(()=>import("./index.html-e06a6a85.js"),[]).then(({data:e})=>e),"v-ac203710":()=>v(()=>import("./index.html-065e1981.js"),[]).then(({data:e})=>e),"v-03d1f283":()=>v(()=>import("./index.html-b37fb657.js"),[]).then(({data:e})=>e),"v-31a38f34":()=>v(()=>import("./index.html-036d5575.js"),[]).then(({data:e})=>e),"v-24d008e3":()=>v(()=>import("./index.html-06b5c0ab.js"),[]).then(({data:e})=>e),"v-056557ee":()=>v(()=>import("./index.html-6f058255.js"),[]).then(({data:e})=>e),"v-e7d392ca":()=>v(()=>import("./index.html-b6b3695f.js"),[]).then(({data:e})=>e),"v-075c6c62":()=>v(()=>import("./index.html-2ffe42fc.js"),[]).then(({data:e})=>e),"v-2a59c5ab":()=>v(()=>import("./index.html-16bee170.js"),[]).then(({data:e})=>e),"v-6f7bfa04":()=>v(()=>import("./index.html-dd2110a7.js"),[]).then(({data:e})=>e),"v-7288faaa":()=>v(()=>import("./index.html-ea7a11a1.js"),[]).then(({data:e})=>e),"v-3bced2c4":()=>v(()=>import("./index.html-55a01c7e.js"),[]).then(({data:e})=>e),"v-2a724f68":()=>v(()=>import("./index.html-892ef4ff.js"),[]).then(({data:e})=>e),"v-4aa653ba":()=>v(()=>import("./index.html-24204360.js"),[]).then(({data:e})=>e),"v-079f963b":()=>v(()=>import("./index.html-b5dd3af1.js"),[]).then(({data:e})=>e),"v-3fc08c96":()=>v(()=>import("./index.html-1cd2d2a2.js"),[]).then(({data:e})=>e),"v-2df4c637":()=>v(()=>import("./index.html-cb260c51.js"),[]).then(({data:e})=>e),"v-1e449340":()=>v(()=>import("./index.html-05ee54d1.js"),[]).then(({data:e})=>e),"v-9d2e1698":()=>v(()=>import("./index.html-735eaea7.js"),[]).then(({data:e})=>e),"v-c6edb6ae":()=>v(()=>import("./index.html-1d3874dd.js"),[]).then(({data:e})=>e),"v-0017792c":()=>v(()=>import("./index.html-6fb777f3.js"),[]).then(({data:e})=>e),"v-7e751551":()=>v(()=>import("./index.html-b3e66cf8.js"),[]).then(({data:e})=>e),"v-29e33f95":()=>v(()=>import("./index.html-dbbb87a9.js"),[]).then(({data:e})=>e),"v-a16420b0":()=>v(()=>import("./index.html-dafb6d64.js"),[]).then(({data:e})=>e),"v-45c0e74e":()=>v(()=>import("./index.html-75b05eae.js"),[]).then(({data:e})=>e),"v-5f67f3f0":()=>v(()=>import("./index.html-387816c0.js"),[]).then(({data:e})=>e),"v-7c52c05a":()=>v(()=>import("./index.html-9f4f6e38.js"),[]).then(({data:e})=>e),"v-379233c0":()=>v(()=>import("./index.html-9362b72a.js"),[]).then(({data:e})=>e)},s3=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[],"locales":{"/":{"lang":"zh-TW","title":"風至萬始蘇","description":"炆途博客"},"/zh/":{"lang":"zh-CN","title":"风至万始苏","description":"炆途博客"},"/en/":{"lang":"en-US","title":"SpringVen2s","description":"Ven2s`Blog"}}}');var c3=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),u3=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=c3(r);t.has(o)||(t.add(o),n.push(r))}),n},d3=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,p3=e=>e.startsWith("ftp://"),pn=e=>/^(https?:)?\/\//.test(e),f3=/.md((\?|#).*)?$/,hr=(e,t="/")=>!!(pn(e)||p3(e)||e.startsWith("/")&&!e.startsWith(t)&&!f3.test(e)),nc=e=>/^mailto:/.test(e),v3=e=>/^tel:/.test(e),Ir=e=>Object.prototype.toString.call(e)==="[object Object]",Xa=e=>e[e.length-1]==="/"?e.slice(0,-1):e,rc=e=>e[0]==="/"?e.slice(1):e,h3=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const a=o.split("/").length-r.split("/").length;return a!==0?a:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const oc={"v-8daa1a0e":y(()=>v(()=>import("./index.html-908dee3a.js"),["assets/index.html-908dee3a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-184f4da6":y(()=>v(()=>import("./intro.html-a4b3d53c.js"),["assets/intro.html-a4b3d53c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2e3eac9e":y(()=>v(()=>import("./slides.html-fb40cc1f.js"),["assets/slides.html-fb40cc1f.js","assets/logo-a60c622a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5b80caef":y(()=>v(()=>import("./beautification.html-30a11aa7.js"),["assets/beautification.html-30a11aa7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-cd69af9a":y(()=>v(()=>import("./best-emoji.html-0b90709d.js"),["assets/best-emoji.html-0b90709d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4f276fe1":y(()=>v(()=>import("./build-sub.html-d9c0fd26.js"),["assets/build-sub.html-d9c0fd26.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-28c690c8":y(()=>v(()=>import("./chatgpt-porxy.html-c830a73d.js"),["assets/chatgpt-porxy.html-c830a73d.js","assets/1-2e05d854.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-ef3ead22":y(()=>v(()=>import("./chatgpt.html-9d046828.js"),["assets/chatgpt.html-9d046828.js","assets/3-47e785b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d46b396a":y(()=>v(()=>import("./ddns.html-7a09446e.js"),["assets/ddns.html-7a09446e.js","assets/10-4225b4c6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d7b7dc3e":y(()=>v(()=>import("./github-actions-deploy.html-ed263cc6.js"),["assets/github-actions-deploy.html-ed263cc6.js","assets/4-8d3c8c2c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0d806e9f":y(()=>v(()=>import("./github-tools.html-4959671e.js"),["assets/github-tools.html-4959671e.js","assets/Everything.Search.Window-f42390fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-63fa6bda":y(()=>v(()=>import("./hackintosh.html-468e0953.js"),["assets/hackintosh.html-468e0953.js","assets/Python-d31beb86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-63ab6aeb":y(()=>v(()=>import("./hello-world.html-8b6e1d50.js"),["assets/hello-world.html-8b6e1d50.js","assets/gitlab-240b439b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-621503b1":y(()=>v(()=>import("./kms.html-3f6b25df.js"),["assets/kms.html-3f6b25df.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0a098e32":y(()=>v(()=>import("./nginx-proxy-manager.html-b289b7c8.js"),["assets/nginx-proxy-manager.html-b289b7c8.js","assets/3-834f457d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1381a68e":y(()=>v(()=>import("./port-forwarding.html-4d3bdef4.js"),["assets/port-forwarding.html-4d3bdef4.js","assets/5-8aad1104.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e2a540b8":y(()=>v(()=>import("./server-building.html-32e322b2.js"),["assets/server-building.html-32e322b2.js","assets/live-torrent-6fc3c6a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1473bf53":y(()=>v(()=>import("./index.html-adf3f3bc.js"),["assets/index.html-adf3f3bc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4e65ec78":y(()=>v(()=>import("./disable.html-e29db426.js"),["assets/disable.html-e29db426.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c151bf32":y(()=>v(()=>import("./encrypt.html-6334527f.js"),["assets/encrypt.html-6334527f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-438ffe52":y(()=>v(()=>import("./markdown.html-2048d427.js"),["assets/markdown.html-2048d427.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6e19edb7":y(()=>v(()=>import("./page.html-af1d8193.js"),["assets/page.html-af1d8193.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2d0a870d":y(()=>v(()=>import("./index.html-28a11be6.js"),["assets/index.html-28a11be6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5aa3d8ba":y(()=>v(()=>import("./intro.html-72a1418c.js"),["assets/intro.html-72a1418c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-367b840a":y(()=>v(()=>import("./slides.html-db36ad00.js"),["assets/slides.html-db36ad00.js","assets/logo-a60c622a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-50451b6c":y(()=>v(()=>import("./1.html-51e97c2e.js"),["assets/1.html-51e97c2e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-68175033":y(()=>v(()=>import("./1993.html-2214935d.js"),["assets/1993.html-2214935d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2d0ad528":y(()=>v(()=>import("./index.html-62f39c0b.js"),["assets/index.html-62f39c0b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-858cfdd6":y(()=>v(()=>import("./intro.html-2924afa3.js"),["assets/intro.html-2924afa3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-269ae70f":y(()=>v(()=>import("./slides.html-261cbb3f.js"),["assets/slides.html-261cbb3f.js","assets/logo-a60c622a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-22aa6303":y(()=>v(()=>import("./beautification.html-9b9a2993.js"),["assets/beautification.html-9b9a2993.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5ce82b72":y(()=>v(()=>import("./best-emoji.html-4312b98d.js"),["assets/best-emoji.html-4312b98d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-617c1b4d":y(()=>v(()=>import("./build-sub.html-49faa77d.js"),["assets/build-sub.html-49faa77d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-60bfa634":y(()=>v(()=>import("./chatgpt-porxy.html-fe803d7d.js"),["assets/chatgpt-porxy.html-fe803d7d.js","assets/1-2e05d854.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-20813fdb":y(()=>v(()=>import("./chatgpt.html-d593c2c0.js"),["assets/chatgpt.html-d593c2c0.js","assets/3-47e785b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-35fb445f":y(()=>v(()=>import("./ddns.html-18698493.js"),["assets/ddns.html-18698493.js","assets/10-4225b4c6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-25d20966":y(()=>v(()=>import("./github-actions-deploy.html-0b1951b9.js"),["assets/github-actions-deploy.html-0b1951b9.js","assets/4-8d3c8c2c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3898fbb3":y(()=>v(()=>import("./github-tools.html-698285bb.js"),["assets/github-tools.html-698285bb.js","assets/Everything.Search.Window-f42390fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c789a424":y(()=>v(()=>import("./hackintosh.html-38e5577a.js"),["assets/hackintosh.html-38e5577a.js","assets/Python-d31beb86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3382eb57":y(()=>v(()=>import("./hello-world.html-e411bcf4.js"),["assets/hello-world.html-e411bcf4.js","assets/gitlab-240b439b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4e79b01d":y(()=>v(()=>import("./kms.html-18534782.js"),["assets/kms.html-18534782.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6f9ce55a":y(()=>v(()=>import("./nginx-proxy-manager.html-0b61cfea.js"),["assets/nginx-proxy-manager.html-0b61cfea.js","assets/3-834f457d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-14489725":y(()=>v(()=>import("./port-forwarding.html-66161e9f.js"),["assets/port-forwarding.html-66161e9f.js","assets/5-8aad1104.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-a6926be0":y(()=>v(()=>import("./server-building.html-8988f626.js"),["assets/server-building.html-8988f626.js","assets/live-torrent-6fc3c6a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-395cd082":y(()=>v(()=>import("./index.html-15609fd2.js"),["assets/index.html-15609fd2.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-70eda030":y(()=>v(()=>import("./disable.html-e80e87bd.js"),["assets/disable.html-e80e87bd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3777b6d3":y(()=>v(()=>import("./encrypt.html-bfa7616e.js"),["assets/encrypt.html-bfa7616e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4a2a37eb":y(()=>v(()=>import("./markdown.html-4a30a958.js"),["assets/markdown.html-4a30a958.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0e4acecb":y(()=>v(()=>import("./page.html-528727fe.js"),["assets/page.html-528727fe.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5881f2d8":y(()=>v(()=>import("./1.html-001750be.js"),["assets/1.html-001750be.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-08483147":y(()=>v(()=>import("./1993.html-8db62939.js"),["assets/1993.html-8db62939.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-698e5fc4":y(()=>v(()=>import("./beautification.html-9c057b7a.js"),["assets/beautification.html-9c057b7a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7f09c63c":y(()=>v(()=>import("./best-emoji.html-07f7a594.js"),["assets/best-emoji.html-07f7a594.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1edea952":y(()=>v(()=>import("./build-sub.html-57aad8d9.js"),["assets/build-sub.html-57aad8d9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6e71a9b9":y(()=>v(()=>import("./chatgpt-porxy.html-183a1e90.js"),["assets/chatgpt-porxy.html-183a1e90.js","assets/1-2e05d854.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4ec98b20":y(()=>v(()=>import("./chatgpt.html-ded85732.js"),["assets/chatgpt.html-ded85732.js","assets/3-47e785b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-eb01718c":y(()=>v(()=>import("./ddns.html-bba7c33f.js"),["assets/ddns.html-bba7c33f.js","assets/10-4225b4c6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-04b8ac5c":y(()=>v(()=>import("./github-actions-deploy.html-bdd4c43b.js"),["assets/github-actions-deploy.html-bdd4c43b.js","assets/4-8d3c8c2c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2885f38e":y(()=>v(()=>import("./github-tools.html-3a31dec0.js"),["assets/github-tools.html-3a31dec0.js","assets/Everything.Search.Window-f42390fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e9ab3eee":y(()=>v(()=>import("./hackintosh.html-7e31969b.js"),["assets/hackintosh.html-7e31969b.js","assets/Python-d31beb86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-227a0c1c":y(()=>v(()=>import("./hello-world.html-21537801.js"),["assets/hello-world.html-21537801.js","assets/gitlab-240b439b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-9767343c":y(()=>v(()=>import("./kms.html-74002bf4.js"),["assets/kms.html-74002bf4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-76b21918":y(()=>v(()=>import("./nginx-proxy-manager.html-885dee3d.js"),["assets/nginx-proxy-manager.html-885dee3d.js","assets/3-834f457d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7d87cd6a":y(()=>v(()=>import("./port-forwarding.html-5d8e288c.js"),["assets/port-forwarding.html-5d8e288c.js","assets/5-8aad1104.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-15f60055":y(()=>v(()=>import("./server-building.html-1c77fabc.js"),["assets/server-building.html-1c77fabc.js","assets/live-torrent-6fc3c6a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2b64e284":y(()=>v(()=>import("./index.html-2b182a64.js"),["assets/index.html-2b182a64.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c1942916":y(()=>v(()=>import("./disable.html-8023c7b3.js"),["assets/disable.html-8023c7b3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-65c00218":y(()=>v(()=>import("./encrypt.html-9db00ebb.js"),["assets/encrypt.html-9db00ebb.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-36295574":y(()=>v(()=>import("./markdown.html-b2bbd4f3.js"),["assets/markdown.html-b2bbd4f3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-62ced1a6":y(()=>v(()=>import("./page.html-596f0780.js"),["assets/page.html-596f0780.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-48a155dd":y(()=>v(()=>import("./1.html-6cf648bd.js"),["assets/1.html-6cf648bd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5ccc3422":y(()=>v(()=>import("./1993.html-3eb77e30.js"),["assets/1993.html-3eb77e30.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3706649a":y(()=>v(()=>import("./404.html-955e9471.js"),["assets/404.html-955e9471.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-146a1089":y(()=>v(()=>import("./index.html-41dd8baa.js"),["assets/index.html-41dd8baa.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-15054f24":y(()=>v(()=>import("./index.html-72af2593.js"),["assets/index.html-72af2593.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-39702e16":y(()=>v(()=>import("./index.html-094d99ec.js"),["assets/index.html-094d99ec.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3839b0e0":y(()=>v(()=>import("./index.html-4d1c81e2.js"),["assets/index.html-4d1c81e2.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2b5b33ba":y(()=>v(()=>import("./index.html-f9503967.js"),["assets/index.html-f9503967.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2bf67255":y(()=>v(()=>import("./index.html-83d84fd4.js"),["assets/index.html-83d84fd4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5bc93818":y(()=>v(()=>import("./index.html-4f1c6af7.js"),["assets/index.html-4f1c6af7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-744d024e":y(()=>v(()=>import("./index.html-67dc77dd.js"),["assets/index.html-67dc77dd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e52c881c":y(()=>v(()=>import("./index.html-db8a4be3.js"),["assets/index.html-db8a4be3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-154dc4c4":y(()=>v(()=>import("./index.html-1eea268a.js"),["assets/index.html-1eea268a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-01560935":y(()=>v(()=>import("./index.html-cef4a48d.js"),["assets/index.html-cef4a48d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-9c48d85a":y(()=>v(()=>import("./index.html-2fb88d73.js"),["assets/index.html-2fb88d73.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2836033f":y(()=>v(()=>import("./index.html-912eb683.js"),["assets/index.html-912eb683.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-54d7ff21":y(()=>v(()=>import("./index.html-e4d049c4.js"),["assets/index.html-e4d049c4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2c3ee7f5":y(()=>v(()=>import("./index.html-3cffa052.js"),["assets/index.html-3cffa052.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-27b02be6":y(()=>v(()=>import("./index.html-a59560cf.js"),["assets/index.html-a59560cf.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-b7f3a660":y(()=>v(()=>import("./index.html-9c8faf05.js"),["assets/index.html-9c8faf05.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-484552dc":y(()=>v(()=>import("./index.html-8809bbd4.js"),["assets/index.html-8809bbd4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-506407f4":y(()=>v(()=>import("./index.html-98a94903.js"),["assets/index.html-98a94903.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-37a8c5a0":y(()=>v(()=>import("./index.html-fc01b36e.js"),["assets/index.html-fc01b36e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0379cba1":y(()=>v(()=>import("./index.html-82ab2cf4.js"),["assets/index.html-82ab2cf4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1f004e24":y(()=>v(()=>import("./index.html-f1f512a3.js"),["assets/index.html-f1f512a3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6a4c233e":y(()=>v(()=>import("./index.html-596b8af8.js"),["assets/index.html-596b8af8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-99cacd98":y(()=>v(()=>import("./index.html-b70e252a.js"),["assets/index.html-b70e252a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3a8afeec":y(()=>v(()=>import("./index.html-06bd53e1.js"),["assets/index.html-06bd53e1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-03d57386":y(()=>v(()=>import("./index.html-b4669e23.js"),["assets/index.html-b4669e23.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-284e8cfc":y(()=>v(()=>import("./index.html-21b8afce.js"),["assets/index.html-21b8afce.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-40b68770":y(()=>v(()=>import("./index.html-da746ba8.js"),["assets/index.html-da746ba8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-49627fe2":y(()=>v(()=>import("./index.html-964f4341.js"),["assets/index.html-964f4341.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-fbb94a6e":y(()=>v(()=>import("./index.html-2c58a234.js"),["assets/index.html-2c58a234.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1b3ae9cf":y(()=>v(()=>import("./index.html-36cd1408.js"),["assets/index.html-36cd1408.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-53c32dc4":y(()=>v(()=>import("./index.html-ffa7534c.js"),["assets/index.html-ffa7534c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0527fcfc":y(()=>v(()=>import("./index.html-603b638e.js"),["assets/index.html-603b638e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1fbd0d01":y(()=>v(()=>import("./index.html-41b31c3c.js"),["assets/index.html-41b31c3c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6fecf66a":y(()=>v(()=>import("./index.html-587cc752.js"),["assets/index.html-587cc752.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-352da056":y(()=>v(()=>import("./index.html-94e729fb.js"),["assets/index.html-94e729fb.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-b30d1368":y(()=>v(()=>import("./index.html-2c7c432e.js"),["assets/index.html-2c7c432e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-55023325":y(()=>v(()=>import("./index.html-7e9ed5db.js"),["assets/index.html-7e9ed5db.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2a32a3a8":y(()=>v(()=>import("./index.html-2d25b860.js"),["assets/index.html-2d25b860.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-19485e48":y(()=>v(()=>import("./index.html-705f6b8d.js"),["assets/index.html-705f6b8d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-072edc12":y(()=>v(()=>import("./index.html-3e1cba5b.js"),["assets/index.html-3e1cba5b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5decfa84":y(()=>v(()=>import("./index.html-9453a95c.js"),["assets/index.html-9453a95c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-83e1f92e":y(()=>v(()=>import("./index.html-ee7dee45.js"),["assets/index.html-ee7dee45.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-17c6d53f":y(()=>v(()=>import("./index.html-c3f4f7da.js"),["assets/index.html-c3f4f7da.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1e447d61":y(()=>v(()=>import("./index.html-a6ad820d.js"),["assets/index.html-a6ad820d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-713c813c":y(()=>v(()=>import("./index.html-61223dad.js"),["assets/index.html-61223dad.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-a378ad66":y(()=>v(()=>import("./index.html-e7588454.js"),["assets/index.html-e7588454.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-91be36e0":y(()=>v(()=>import("./index.html-9bd6afd0.js"),["assets/index.html-9bd6afd0.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7b167472":y(()=>v(()=>import("./index.html-66f7758e.js"),["assets/index.html-66f7758e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1905daa0":y(()=>v(()=>import("./index.html-ed057c4e.js"),["assets/index.html-ed057c4e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0f1d0e94":y(()=>v(()=>import("./index.html-5fb8ee4a.js"),["assets/index.html-5fb8ee4a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0fe52c37":y(()=>v(()=>import("./index.html-78ea5d96.js"),["assets/index.html-78ea5d96.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3ceeab45":y(()=>v(()=>import("./index.html-26fc2be6.js"),["assets/index.html-26fc2be6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-495c2a5c":y(()=>v(()=>import("./index.html-7ae5c064.js"),["assets/index.html-7ae5c064.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-301b24f4":y(()=>v(()=>import("./index.html-35960569.js"),["assets/index.html-35960569.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6a59b3bf":y(()=>v(()=>import("./index.html-0c338acd.js"),["assets/index.html-0c338acd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d13d5aa8":y(()=>v(()=>import("./index.html-382f1549.js"),["assets/index.html-382f1549.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-540234fd":y(()=>v(()=>import("./index.html-b55f3646.js"),["assets/index.html-b55f3646.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4e9025f0":y(()=>v(()=>import("./index.html-2d445ddf.js"),["assets/index.html-2d445ddf.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2e14b8c3":y(()=>v(()=>import("./index.html-15abd7f4.js"),["assets/index.html-15abd7f4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-62a85daf":y(()=>v(()=>import("./index.html-92fe4eb9.js"),["assets/index.html-92fe4eb9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1434d78e":y(()=>v(()=>import("./index.html-b2c5ba16.js"),["assets/index.html-b2c5ba16.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4ea8afad":y(()=>v(()=>import("./index.html-f0da1e3a.js"),["assets/index.html-f0da1e3a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-230c5884":y(()=>v(()=>import("./index.html-934bd04a.js"),["assets/index.html-934bd04a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6d724c00":y(()=>v(()=>import("./index.html-625ac650.js"),["assets/index.html-625ac650.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-bb53961e":y(()=>v(()=>import("./index.html-4e638cd9.js"),["assets/index.html-4e638cd9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-69f11ebc":y(()=>v(()=>import("./index.html-4cc4f96f.js"),["assets/index.html-4cc4f96f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6de7b97b":y(()=>v(()=>import("./index.html-93c0a86a.js"),["assets/index.html-93c0a86a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-409d800e":y(()=>v(()=>import("./index.html-0b93661b.js"),["assets/index.html-0b93661b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-03ba1c5a":y(()=>v(()=>import("./index.html-43b298c2.js"),["assets/index.html-43b298c2.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-05bf9c12":y(()=>v(()=>import("./index.html-27bc2833.js"),["assets/index.html-27bc2833.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d4827004":y(()=>v(()=>import("./index.html-6ca0177c.js"),["assets/index.html-6ca0177c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-ac203710":y(()=>v(()=>import("./index.html-578577a8.js"),["assets/index.html-578577a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-03d1f283":y(()=>v(()=>import("./index.html-6f6c907e.js"),["assets/index.html-6f6c907e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-31a38f34":y(()=>v(()=>import("./index.html-35daf4a6.js"),["assets/index.html-35daf4a6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-24d008e3":y(()=>v(()=>import("./index.html-0404d6c3.js"),["assets/index.html-0404d6c3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-056557ee":y(()=>v(()=>import("./index.html-1ae81f74.js"),["assets/index.html-1ae81f74.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e7d392ca":y(()=>v(()=>import("./index.html-43d9e56f.js"),["assets/index.html-43d9e56f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-075c6c62":y(()=>v(()=>import("./index.html-a1db22b6.js"),["assets/index.html-a1db22b6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2a59c5ab":y(()=>v(()=>import("./index.html-45475709.js"),["assets/index.html-45475709.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6f7bfa04":y(()=>v(()=>import("./index.html-926218fc.js"),["assets/index.html-926218fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7288faaa":y(()=>v(()=>import("./index.html-df2287d8.js"),["assets/index.html-df2287d8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3bced2c4":y(()=>v(()=>import("./index.html-547023ea.js"),["assets/index.html-547023ea.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2a724f68":y(()=>v(()=>import("./index.html-e8a05ee5.js"),["assets/index.html-e8a05ee5.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4aa653ba":y(()=>v(()=>import("./index.html-8c45c760.js"),["assets/index.html-8c45c760.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-079f963b":y(()=>v(()=>import("./index.html-e8a54d7b.js"),["assets/index.html-e8a54d7b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3fc08c96":y(()=>v(()=>import("./index.html-3700fe35.js"),["assets/index.html-3700fe35.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2df4c637":y(()=>v(()=>import("./index.html-3f56f36e.js"),["assets/index.html-3f56f36e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1e449340":y(()=>v(()=>import("./index.html-2fc93233.js"),["assets/index.html-2fc93233.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-9d2e1698":y(()=>v(()=>import("./index.html-603b770b.js"),["assets/index.html-603b770b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c6edb6ae":y(()=>v(()=>import("./index.html-097c3fd6.js"),["assets/index.html-097c3fd6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0017792c":y(()=>v(()=>import("./index.html-93fe8cd6.js"),["assets/index.html-93fe8cd6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7e751551":y(()=>v(()=>import("./index.html-1aedb1a6.js"),["assets/index.html-1aedb1a6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-29e33f95":y(()=>v(()=>import("./index.html-a98c472d.js"),["assets/index.html-a98c472d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-a16420b0":y(()=>v(()=>import("./index.html-cd6683b4.js"),["assets/index.html-cd6683b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-45c0e74e":y(()=>v(()=>import("./index.html-0307b727.js"),["assets/index.html-0307b727.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5f67f3f0":y(()=>v(()=>import("./index.html-049f25cb.js"),["assets/index.html-049f25cb.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7c52c05a":y(()=>v(()=>import("./index.html-c00da731.js"),["assets/index.html-c00da731.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-379233c0":y(()=>v(()=>import("./index.html-3ce417c2.js"),["assets/index.html-3ce417c2.js","assets/plugin-vue_export-helper-c27b6911.js"]))};var m3=Symbol(""),ac=Symbol(""),g3=cn({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),se=()=>{const e=me(ac);if(!e)throw new Error("pageData() is called without provider.");return e},lc=Symbol(""),ye=()=>{const e=me(lc);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},ic=Symbol(""),_3=()=>{const e=me(ic);if(!e)throw new Error("usePageHead() is called without provider.");return e},E3=Symbol(""),sc=Symbol(""),cc=()=>{const e=me(sc);if(!e)throw new Error("usePageLang() is called without provider.");return e},uc=Symbol(""),b3=()=>{const e=me(uc);if(!e)throw new Error("usePageLayout() is called without provider.");return e},y3=J(i3),el=Symbol(""),Tt=()=>{const e=me(el);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},yn=J(s3),dc=()=>yn,pc=Symbol(""),qn=()=>{const e=me(pc);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},A3=Symbol(""),w3="Layout",k3="NotFound",Ct=Ar({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=y3.value[e];return await(t==null?void 0:t())??g3},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=ce(t.description)?t.description:n.description,o=[...X(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return u3(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;ce(r)?n=r:n=w3}else n=k3;return t[n]},resolveRouteLocale:(e,t)=>h3(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Ao=V({name:"ClientOnly",setup(e,t){const n=J(!1);return be(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),fc=V({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=se(),n=k(()=>oc[e.pageKey||t.value.key]);return()=>n.value?i(n.value):i("div","404 Not Found")}}),It=(e={})=>e,Ie=e=>pn(e)?e:`/${rc(e)}`;const T3={};/*! + * vue-router v4.2.5 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const _n=typeof window<"u";function I3(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ge=Object.assign;function Ho(e,t){const n={};for(const r in t){const o=t[r];n[r]=_t(o)?o.map(e):e(o)}return n}const lr=()=>{},_t=Array.isArray,P3=/\/$/,L3=e=>e.replace(P3,"");function Fo(e,t,n="/"){let r,o={},a="",l="";const s=t.indexOf("#");let c=t.indexOf("?");return s=0&&(c=-1),c>-1&&(r=t.slice(0,c),a=t.slice(c+1,s>-1?s:t.length),o=e(a)),s>-1&&(r=r||t.slice(0,s),l=t.slice(s,t.length)),r=B3(r??t,n),{fullPath:r+(a&&"?")+a+l,path:r,query:o,hash:l}}function D3(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function pi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function C3(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Sn(t.matched[r],n.matched[o])&&vc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Sn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function vc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!x3(e[n],t[n]))return!1;return!0}function x3(e,t){return _t(e)?fi(e,t):_t(t)?fi(t,e):e===t}function fi(e,t){return _t(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function B3(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let a=n.length-1,l,s;for(l=0;l1&&a--;else break;return n.slice(0,a).join("/")+"/"+r.slice(l-(l===r.length?1:0)).join("/")}var mr;(function(e){e.pop="pop",e.push="push"})(mr||(mr={}));var ir;(function(e){e.back="back",e.forward="forward",e.unknown=""})(ir||(ir={}));function O3(e){if(!e)if(_n){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),L3(e)}const R3=/^[^#]+#/;function S3(e,t){return e.replace(R3,"#")+t}function V3(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const wo=()=>({left:window.pageXOffset,top:window.pageYOffset});function M3(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=V3(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function vi(e,t){return(history.state?history.state.position-t:-1)+e}const va=new Map;function $3(e,t){va.set(e,t)}function z3(e){const t=va.get(e);return va.delete(e),t}let N3=()=>location.protocol+"//"+location.host;function hc(e,t){const{pathname:n,search:r,hash:o}=t,a=e.indexOf("#");if(a>-1){let s=o.includes(e.slice(a))?e.slice(a).length:1,c=o.slice(s);return c[0]!=="/"&&(c="/"+c),pi(c,"")}return pi(n,e)+r+o}function H3(e,t,n,r){let o=[],a=[],l=null;const s=({state:f})=>{const h=hc(e,location),g=n.value,E=t.value;let T=0;if(f){if(n.value=h,t.value=f,l&&l===g){l=null;return}T=E?f.position-E.position:0}else r(h);o.forEach(A=>{A(n.value,g,{delta:T,type:mr.pop,direction:T?T>0?ir.forward:ir.back:ir.unknown})})};function c(){l=n.value}function u(f){o.push(f);const h=()=>{const g=o.indexOf(f);g>-1&&o.splice(g,1)};return a.push(h),h}function d(){const{history:f}=window;f.state&&f.replaceState(ge({},f.state,{scroll:wo()}),"")}function p(){for(const f of a)f();a=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:c,listen:u,destroy:p}}function hi(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?wo():null}}function F3(e){const{history:t,location:n}=window,r={value:hc(e,n)},o={value:t.state};o.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(c,u,d){const p=e.indexOf("#"),f=p>-1?(n.host&&document.querySelector("base")?e:e.slice(p))+c:N3()+e+c;try{t[d?"replaceState":"pushState"](u,"",f),o.value=u}catch(h){console.error(h),n[d?"replace":"assign"](f)}}function l(c,u){const d=ge({},t.state,hi(o.value.back,c,o.value.forward,!0),u,{position:o.value.position});a(c,d,!0),r.value=c}function s(c,u){const d=ge({},o.value,t.state,{forward:c,scroll:wo()});a(d.current,d,!0);const p=ge({},hi(r.value,c,null),{position:d.position+1},u);a(c,p,!1),r.value=c}return{location:r,state:o,push:s,replace:l}}function j3(e){e=O3(e);const t=F3(e),n=H3(e,t.state,t.location,t.replace);function r(a,l=!0){l||n.pauseListeners(),history.go(a)}const o=ge({location:"",base:e,go:r,createHref:S3.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function q3(e){return typeof e=="string"||e&&typeof e=="object"}function mc(e){return typeof e=="string"||typeof e=="symbol"}const xt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},gc=Symbol("");var mi;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(mi||(mi={}));function Vn(e,t){return ge(new Error,{type:e,[gc]:!0},t)}function Lt(e,t){return e instanceof Error&&gc in e&&(t==null||!!(e.type&t))}const gi="[^/]+?",G3={sensitive:!1,strict:!1,start:!0,end:!0},W3=/[.+*?^${}()[\]/\\]/g;function U3(e,t){const n=ge({},G3,t),r=[];let o=n.start?"^":"";const a=[];for(const u of e){const d=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let p=0;pt.length?t.length===1&&t[0]===40+40?1:-1:0}function Y3(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const J3={type:0,value:""},Z3=/[a-zA-Z0-9_]/;function Q3(e){if(!e)return[[]];if(e==="/")return[[J3]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${u}": ${h}`)}let n=0,r=n;const o=[];let a;function l(){a&&o.push(a),a=[]}let s=0,c,u="",d="";function p(){u&&(n===0?a.push({type:0,value:u}):n===1||n===2||n===3?(a.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:u,regexp:d,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=c}for(;s{l(P)}:lr}function l(d){if(mc(d)){const p=r.get(d);p&&(r.delete(d),n.splice(n.indexOf(p),1),p.children.forEach(l),p.alias.forEach(l))}else{const p=n.indexOf(d);p>-1&&(n.splice(p,1),d.record.name&&r.delete(d.record.name),d.children.forEach(l),d.alias.forEach(l))}}function s(){return n}function c(d){let p=0;for(;p=0&&(d.record.path!==n[p].record.path||!_c(d,n[p]));)p++;n.splice(p,0,d),d.record.name&&!bi(d)&&r.set(d.record.name,d)}function u(d,p){let f,h={},g,E;if("name"in d&&d.name){if(f=r.get(d.name),!f)throw Vn(1,{location:d});E=f.record.name,h=ge(Ei(p.params,f.keys.filter(P=>!P.optional).map(P=>P.name)),d.params&&Ei(d.params,f.keys.map(P=>P.name))),g=f.stringify(h)}else if("path"in d)g=d.path,f=n.find(P=>P.re.test(g)),f&&(h=f.parse(g),E=f.record.name);else{if(f=p.name?r.get(p.name):n.find(P=>P.re.test(p.path)),!f)throw Vn(1,{location:d,currentLocation:p});E=f.record.name,h=ge({},p.params,d.params),g=f.stringify(h)}const T=[];let A=f;for(;A;)T.unshift(A.record),A=A.parent;return{name:E,path:g,params:h,matched:T,meta:rd(T)}}return e.forEach(d=>a(d)),{addRoute:a,resolve:u,removeRoute:l,getRoutes:s,getRecordMatcher:o}}function Ei(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function td(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:nd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function nd(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function bi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function rd(e){return e.reduce((t,n)=>ge(t,n.meta),{})}function yi(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function _c(e,t){return t.children.some(n=>n===e||_c(e,n))}const Ec=/#/g,od=/&/g,ad=/\//g,ld=/=/g,id=/\?/g,bc=/\+/g,sd=/%5B/g,cd=/%5D/g,yc=/%5E/g,ud=/%60/g,Ac=/%7B/g,dd=/%7C/g,wc=/%7D/g,pd=/%20/g;function tl(e){return encodeURI(""+e).replace(dd,"|").replace(sd,"[").replace(cd,"]")}function fd(e){return tl(e).replace(Ac,"{").replace(wc,"}").replace(yc,"^")}function ha(e){return tl(e).replace(bc,"%2B").replace(pd,"+").replace(Ec,"%23").replace(od,"%26").replace(ud,"`").replace(Ac,"{").replace(wc,"}").replace(yc,"^")}function vd(e){return ha(e).replace(ld,"%3D")}function hd(e){return tl(e).replace(Ec,"%23").replace(id,"%3F")}function md(e){return e==null?"":hd(e).replace(ad,"%2F")}function co(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function gd(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;oa&&ha(a)):[r&&ha(r)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+n,a!=null&&(t+="="+a))})}return t}function _d(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=_t(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const Ed=Symbol(""),wi=Symbol(""),ko=Symbol(""),nl=Symbol(""),ma=Symbol("");function Jn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ut(e,t,n,r,o){const a=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,s)=>{const c=p=>{p===!1?s(Vn(4,{from:n,to:t})):p instanceof Error?s(p):q3(p)?s(Vn(2,{from:t,to:p})):(a&&r.enterCallbacks[o]===a&&typeof p=="function"&&a.push(p),l())},u=e.call(r&&r.instances[o],t,n,c);let d=Promise.resolve(u);e.length<3&&(d=d.then(c)),d.catch(p=>s(p))})}function jo(e,t,n,r){const o=[];for(const a of e)for(const l in a.components){let s=a.components[l];if(!(t!=="beforeRouteEnter"&&!a.instances[l]))if(bd(s)){const u=(s.__vccOpts||s)[t];u&&o.push(Ut(u,n,r,a,l))}else{let c=s();o.push(()=>c.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${l}" at "${a.path}"`));const d=I3(u)?u.default:u;a.components[l]=d;const f=(d.__vccOpts||d)[t];return f&&Ut(f,n,r,a,l)()}))}}return o}function bd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ga(e){const t=me(ko),n=me(nl),r=k(()=>t.resolve(an(e.to))),o=k(()=>{const{matched:c}=r.value,{length:u}=c,d=c[u-1],p=n.matched;if(!d||!p.length)return-1;const f=p.findIndex(Sn.bind(null,d));if(f>-1)return f;const h=ki(c[u-2]);return u>1&&ki(d)===h&&p[p.length-1].path!==h?p.findIndex(Sn.bind(null,c[u-2])):f}),a=k(()=>o.value>-1&&kd(n.params,r.value.params)),l=k(()=>o.value>-1&&o.value===n.matched.length-1&&vc(n.params,r.value.params));function s(c={}){return wd(c)?t[an(e.replace)?"replace":"push"](an(e.to)).catch(lr):Promise.resolve()}return{route:r,href:k(()=>r.value.href),isActive:a,isExactActive:l,navigate:s}}const yd=V({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:ga,setup(e,{slots:t}){const n=Ar(ga(e)),{options:r}=me(ko),o=k(()=>({[Ti(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Ti(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const a=t.default&&t.default(n);return e.custom?a:i("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},a)}}}),Ad=yd;function wd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function kd(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!_t(o)||o.length!==r.length||r.some((a,l)=>a!==o[l]))return!1}return!0}function ki(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ti=(e,t,n)=>e??t??n,Td=V({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=me(ma),o=k(()=>e.route||r.value),a=me(wi,0),l=k(()=>{let u=an(a);const{matched:d}=o.value;let p;for(;(p=d[u])&&!p.components;)u++;return u}),s=k(()=>o.value.matched[l.value]);mt(wi,k(()=>l.value+1)),mt(Ed,s),mt(ma,o);const c=J();return he(()=>[c.value,s.value,e.name],([u,d,p],[f,h,g])=>{d&&(d.instances[p]=u,h&&h!==d&&u&&u===f&&(d.leaveGuards.size||(d.leaveGuards=h.leaveGuards),d.updateGuards.size||(d.updateGuards=h.updateGuards))),u&&d&&(!h||!Sn(d,h)||!f)&&(d.enterCallbacks[p]||[]).forEach(E=>E(u))},{flush:"post"}),()=>{const u=o.value,d=e.name,p=s.value,f=p&&p.components[d];if(!f)return Ii(n.default,{Component:f,route:u});const h=p.props[d],g=h?h===!0?u.params:typeof h=="function"?h(u):h:null,T=i(f,ge({},g,t,{onVnodeUnmounted:A=>{A.component.isUnmounted&&(p.instances[d]=null)},ref:c}));return Ii(n.default,{Component:T,route:u})||T}}});function Ii(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const kc=Td;function Id(e){const t=ed(e.routes,e),n=e.parseQuery||gd,r=e.stringifyQuery||Ai,o=e.history,a=Jn(),l=Jn(),s=Jn(),c=ze(xt);let u=xt;_n&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Ho.bind(null,D=>""+D),p=Ho.bind(null,md),f=Ho.bind(null,co);function h(D,G){let z,Y;return mc(D)?(z=t.getRecordMatcher(D),Y=G):Y=D,t.addRoute(Y,z)}function g(D){const G=t.getRecordMatcher(D);G&&t.removeRoute(G)}function E(){return t.getRoutes().map(D=>D.record)}function T(D){return!!t.getRecordMatcher(D)}function A(D,G){if(G=ge({},G||c.value),typeof D=="string"){const w=Fo(n,D,G.path),L=t.resolve({path:w.path},G),B=o.createHref(w.fullPath);return ge(w,L,{params:f(L.params),hash:co(w.hash),redirectedFrom:void 0,href:B})}let z;if("path"in D)z=ge({},D,{path:Fo(n,D.path,G.path).path});else{const w=ge({},D.params);for(const L in w)w[L]==null&&delete w[L];z=ge({},D,{params:p(w)}),G.params=p(G.params)}const Y=t.resolve(z,G),de=D.hash||"";Y.params=d(f(Y.params));const m=D3(r,ge({},D,{hash:fd(de),path:Y.path})),_=o.createHref(m);return ge({fullPath:m,hash:de,query:r===Ai?_d(D.query):D.query||{}},Y,{redirectedFrom:void 0,href:_})}function P(D){return typeof D=="string"?Fo(n,D,c.value.path):ge({},D)}function b(D,G){if(u!==D)return Vn(8,{from:G,to:D})}function I(D){return M(D)}function S(D){return I(ge(P(D),{replace:!0}))}function x(D){const G=D.matched[D.matched.length-1];if(G&&G.redirect){const{redirect:z}=G;let Y=typeof z=="function"?z(D):z;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=P(Y):{path:Y},Y.params={}),ge({query:D.query,hash:D.hash,params:"path"in Y?{}:D.params},Y)}}function M(D,G){const z=u=A(D),Y=c.value,de=D.state,m=D.force,_=D.replace===!0,w=x(z);if(w)return M(ge(P(w),{state:typeof w=="object"?ge({},de,w.state):de,force:m,replace:_}),G||z);const L=z;L.redirectedFrom=G;let B;return!m&&C3(r,Y,z)&&(B=Vn(16,{to:L,from:Y}),tt(Y,Y,!0,!1)),(B?Promise.resolve(B):j(L,Y)).catch(O=>Lt(O)?Lt(O,2)?O:Et(O):K(O,L,Y)).then(O=>{if(O){if(Lt(O,2))return M(ge({replace:_},P(O.to),{state:typeof O.to=="object"?ge({},de,O.to.state):de,force:m}),G||L)}else O=F(L,Y,!0,_,de);return ee(L,Y,O),O})}function C(D,G){const z=b(D,G);return z?Promise.reject(z):Promise.resolve()}function H(D){const G=Pt.values().next().value;return G&&typeof G.runWithContext=="function"?G.runWithContext(D):D()}function j(D,G){let z;const[Y,de,m]=Pd(D,G);z=jo(Y.reverse(),"beforeRouteLeave",D,G);for(const w of Y)w.leaveGuards.forEach(L=>{z.push(Ut(L,D,G))});const _=C.bind(null,D,G);return z.push(_),xe(z).then(()=>{z=[];for(const w of a.list())z.push(Ut(w,D,G));return z.push(_),xe(z)}).then(()=>{z=jo(de,"beforeRouteUpdate",D,G);for(const w of de)w.updateGuards.forEach(L=>{z.push(Ut(L,D,G))});return z.push(_),xe(z)}).then(()=>{z=[];for(const w of m)if(w.beforeEnter)if(_t(w.beforeEnter))for(const L of w.beforeEnter)z.push(Ut(L,D,G));else z.push(Ut(w.beforeEnter,D,G));return z.push(_),xe(z)}).then(()=>(D.matched.forEach(w=>w.enterCallbacks={}),z=jo(m,"beforeRouteEnter",D,G),z.push(_),xe(z))).then(()=>{z=[];for(const w of l.list())z.push(Ut(w,D,G));return z.push(_),xe(z)}).catch(w=>Lt(w,8)?w:Promise.reject(w))}function ee(D,G,z){s.list().forEach(Y=>H(()=>Y(D,G,z)))}function F(D,G,z,Y,de){const m=b(D,G);if(m)return m;const _=G===xt,w=_n?history.state:{};z&&(Y||_?o.replace(D.fullPath,ge({scroll:_&&w&&w.scroll},de)):o.push(D.fullPath,de)),c.value=D,tt(D,G,z,_),Et()}let te;function Pe(){te||(te=o.listen((D,G,z)=>{if(!bt.listening)return;const Y=A(D),de=x(Y);if(de){M(ge(de,{replace:!0}),Y).catch(lr);return}u=Y;const m=c.value;_n&&$3(vi(m.fullPath,z.delta),wo()),j(Y,m).catch(_=>Lt(_,12)?_:Lt(_,2)?(M(_.to,Y).then(w=>{Lt(w,20)&&!z.delta&&z.type===mr.pop&&o.go(-1,!1)}).catch(lr),Promise.reject()):(z.delta&&o.go(-z.delta,!1),K(_,Y,m))).then(_=>{_=_||F(Y,m,!1),_&&(z.delta&&!Lt(_,8)?o.go(-z.delta,!1):z.type===mr.pop&&Lt(_,20)&&o.go(-1,!1)),ee(Y,m,_)}).catch(lr)}))}let ke=Jn(),W=Jn(),ne;function K(D,G,z){Et(D);const Y=W.list();return Y.length?Y.forEach(de=>de(D,G,z)):console.error(D),Promise.reject(D)}function Ce(){return ne&&c.value!==xt?Promise.resolve():new Promise((D,G)=>{ke.add([D,G])})}function Et(D){return ne||(ne=!D,Pe(),ke.list().forEach(([G,z])=>D?z(D):G()),ke.reset()),D}function tt(D,G,z,Y){const{scrollBehavior:de}=e;if(!_n||!de)return Promise.resolve();const m=!z&&z3(vi(D.fullPath,0))||(Y||!z)&&history.state&&history.state.scroll||null;return un().then(()=>de(D,G,m)).then(_=>_&&M3(_)).catch(_=>K(_,D,G))}const Ve=D=>o.go(D);let Je;const Pt=new Set,bt={currentRoute:c,listening:!0,addRoute:h,removeRoute:g,hasRoute:T,getRoutes:E,resolve:A,options:e,push:I,replace:S,go:Ve,back:()=>Ve(-1),forward:()=>Ve(1),beforeEach:a.add,beforeResolve:l.add,afterEach:s.add,onError:W.add,isReady:Ce,install(D){const G=this;D.component("RouterLink",Ad),D.component("RouterView",kc),D.config.globalProperties.$router=G,Object.defineProperty(D.config.globalProperties,"$route",{enumerable:!0,get:()=>an(c)}),_n&&!Je&&c.value===xt&&(Je=!0,I(o.location).catch(de=>{}));const z={};for(const de in xt)Object.defineProperty(z,de,{get:()=>c.value[de],enumerable:!0});D.provide(ko,G),D.provide(nl,vs(z)),D.provide(ma,c);const Y=D.unmount;Pt.add(D),D.unmount=function(){Pt.delete(D),Pt.size<1&&(u=xt,te&&te(),te=null,c.value=xt,Je=!1,ne=!1),Y()}}};function xe(D){return D.reduce((G,z)=>G.then(()=>H(z)),Promise.resolve())}return bt}function Pd(e,t){const n=[],r=[],o=[],a=Math.max(t.matched.length,e.matched.length);for(let l=0;lSn(u,s))?r.push(s):n.push(s));const c=e.matched[l];c&&(t.matched.find(u=>Sn(u,c))||o.push(c))}return[n,r,o]}function Ne(){return me(ko)}function ct(){return me(nl)}var Fe=Uint8Array,An=Uint16Array,Ld=Int32Array,Tc=new Fe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ic=new Fe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Dd=new Fe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Pc=function(e,t){for(var n=new An(31),r=0;r<31;++r)n[r]=t+=1<>1|(we&21845)<<1;Ft=(Ft&52428)>>2|(Ft&13107)<<2,Ft=(Ft&61680)>>4|(Ft&3855)<<4,_a[we]=((Ft&65280)>>8|(Ft&255)<<8)>>1}var sr=function(e,t,n){for(var r=e.length,o=0,a=new An(t);o>c]=u}else for(s=new An(r),o=0;o>15-e[o]);return s},Pr=new Fe(288);for(var we=0;we<144;++we)Pr[we]=8;for(var we=144;we<256;++we)Pr[we]=9;for(var we=256;we<280;++we)Pr[we]=7;for(var we=280;we<288;++we)Pr[we]=8;var Cc=new Fe(32);for(var we=0;we<32;++we)Cc[we]=5;var Od=sr(Pr,9,1),Rd=sr(Cc,5,1),qo=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},dt=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},Go=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Sd=function(e){return(e+7)/8|0},rl=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Fe(e.subarray(t,n))},Vd=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],ot=function(e,t,n){var r=new Error(t||Vd[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,ot),!n)throw r;return r},Md=function(e,t,n,r){var o=e.length,a=r?r.length:0;if(!o||t.f&&!t.l)return n||new Fe(0);var l=!n,s=l||t.i!=2,c=t.i;l&&(n=new Fe(o*3));var u=function(de){var m=n.length;if(de>m){var _=new Fe(Math.max(m*2,de));_.set(n),n=_}},d=t.f||0,p=t.p||0,f=t.b||0,h=t.l,g=t.d,E=t.m,T=t.n,A=o*8;do{if(!h){d=dt(e,p,1);var P=dt(e,p+1,3);if(p+=3,P)if(P==1)h=Od,g=Rd,E=9,T=5;else if(P==2){var x=dt(e,p,31)+257,M=dt(e,p+10,15)+4,C=x+dt(e,p+5,31)+1;p+=14;for(var H=new Fe(C),j=new Fe(19),ee=0;ee>4;if(b<16)H[ee++]=b;else{var W=0,ne=0;for(b==16?(ne=3+dt(e,p,3),p+=2,W=H[ee-1]):b==17?(ne=3+dt(e,p,7),p+=3):b==18&&(ne=11+dt(e,p,127),p+=7);ne--;)H[ee++]=W}}var K=H.subarray(0,x),Ce=H.subarray(x);E=qo(K),T=qo(Ce),h=sr(K,E,1),g=sr(Ce,T,1)}else ot(1);else{var b=Sd(p)+4,I=e[b-4]|e[b-3]<<8,S=b+I;if(S>o){c&&ot(0);break}s&&u(f+I),n.set(e.subarray(b,S),f),t.b=f+=I,t.p=p=S*8,t.f=d;continue}if(p>A){c&&ot(0);break}}s&&u(f+131072);for(var Et=(1<>4;if(p+=W&15,p>A){c&&ot(0);break}if(W||ot(2),Je<256)n[f++]=Je;else if(Je==256){Ve=p,h=null;break}else{var Pt=Je-254;if(Je>264){var ee=Je-257,bt=Tc[ee];Pt=dt(e,p,(1<>4;xe||ot(3),p+=xe&15;var Ce=Bd[D];if(D>3){var bt=Ic[D];Ce+=Go(e,p)&(1<A){c&&ot(0);break}s&&u(f+131072);var G=f+Pt;if(f>4>7||(e[0]<<8|e[1])%31)&&ot(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&ot(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function Nd(e,t){return Md(e.subarray(zd(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var Pi=typeof TextEncoder<"u"&&new TextEncoder,Ea=typeof TextDecoder<"u"&&new TextDecoder,Hd=0;try{Ea.decode($d,{stream:!0}),Hd=1}catch{}var Fd=function(e){for(var t="",n=0;;){var r=e[n++],o=(r>127)+(r>223)+(r>239);if(n+o>e.length)return{s:t,r:rl(e,n-1)};o?o==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function jd(e,t){if(t){for(var n=new Fe(e.length),r=0;r>1)),l=0,s=function(d){a[l++]=d},r=0;ra.length){var c=new Fe(l+8+(o-r<<1));c.set(a),a=c}var u=e.charCodeAt(r);u<128||t?s(u):u<2048?(s(192|u>>6),s(128|u&63)):u>55295&&u<57344?(u=65536+(u&1047552)|e.charCodeAt(++r)&1023,s(240|u>>18),s(128|u>>12&63),s(128|u>>6&63),s(128|u&63)):(s(224|u>>12),s(128|u>>6&63),s(128|u&63))}return rl(a,0,l)}function qd(e,t){if(t){for(var n="",r=0;r{var r;return i("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":`${e} icon`},(r=n.default)==null?void 0:r.call(n))};ae.displayName="IconBase";const xc=({size:e=48,stroke:t=4,wrapper:n=!0,height:r=2*e})=>{const o=i("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,preserveAspectRatio:"xMidYMid",viewBox:"25 25 50 50"},[i("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",keyTimes:"0;1",repeatCount:"indefinite",values:"0;360"}),i("circle",{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":t,"stroke-linecap":"round"},[i("animate",{attributeName:"stroke-dasharray",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"1,200;90,200;1,200"}),i("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"0;-35px;-125px"})])]);return n?i("div",{class:"loading-icon-wrapper",style:`display:flex;align-items:center;justify-content:center;height:${r}px`},o):o};xc.displayName="LoadingIcon";const Bc=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},ol=(e="")=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},To=(e,t)=>{let n=1;for(let r=0;r>6;return n+=n<<3,n^=n>>11,n%t},Oc=Array.isArray,Gd=e=>typeof e=="function",Wd=e=>typeof e=="string";var Ud=e=>e.startsWith("ftp://"),al=e=>/^(https?:)?\/\//.test(e),Kd=/.md((\?|#).*)?$/,Yd=(e,t="/")=>!!(al(e)||Ud(e)||e.startsWith("/")&&!e.startsWith(t)&&!Kd.test(e)),Rc=e=>Object.prototype.toString.call(e)==="[object Object]";function Jd(){const e=J(!1);return dn()&&be(()=>{e.value=!0}),e}function Zd(e){return Jd(),k(()=>!!e())}const St=e=>typeof e=="string",Mn=(e,t)=>St(e)&&e.startsWith(t),mn=(e,t)=>St(e)&&e.endsWith(t),Gn=Object.entries,Qd=Object.fromEntries,Ke=Object.keys,Xd=e=>(e.endsWith(".md")&&(e=`${e.slice(0,-3)}.html`),!e.endsWith("/")&&!e.endsWith(".html")&&(e=`${e}.html`),e=e.replace(/(^|\/)(?:README|index).html$/i,"$1"),e),Sc=e=>{const[t,n=""]=e.split("#");return t?`${Xd(t)}${n?`#${n}`:""}`:e},Li=e=>Rc(e)&&St(e.name),gr=(e,t=!1)=>e?Oc(e)?e.map(n=>St(n)?{name:n}:Li(n)?n:null).filter(n=>n!==null):St(e)?[{name:e}]:Li(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],Vc=(e,t)=>{if(e){if(Oc(e)&&e.every(St))return e;if(St(e))return[e];console.error(`Expect ${t||"value"} to be \`string[] | string | undefined\`, but got`,e)}return[]},Mc=e=>Vc(e,"category"),$c=e=>Vc(e,"tag"),Io=e=>Mn(e,"/");let e4=class{constructor(){this.messageElements={};const t="message-container",n=document.getElementById(t);n?this.containerElement=n:(this.containerElement=document.createElement("div"),this.containerElement.id=t,document.body.appendChild(this.containerElement))}pop(t,n=2e3){const r=document.createElement("div"),o=Date.now();return r.className="message move-in",r.innerHTML=t,this.containerElement.appendChild(r),this.messageElements[o]=r,n>0&&setTimeout(()=>{this.close(o)},n),o}close(t){if(t){const n=this.messageElements[t];n.classList.remove("move-in"),n.classList.add("move-out"),n.addEventListener("animationend",()=>{n.remove(),delete this.messageElements[t]})}else Ke(this.messageElements).forEach(n=>this.close(Number(n)))}destroy(){document.body.removeChild(this.containerElement)}};const zc=/#.*$/u,t4=e=>{const t=zc.exec(e);return t?t[0]:""},Di=e=>decodeURI(e).replace(zc,"").replace(/(index)?\.(md|html)$/,""),ll=(e,t)=>{if(t===void 0)return!1;const n=Di(e.path),r=Di(t),o=t4(t);return o?o===e.hash&&(!r||n===r):n===r},Ci=e=>{const t=atob(e);return qd(Nd(jd(t,!0)))},n4=e=>al(e)?e:`https://github.com/${e}`,Nc=e=>!al(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,$n=(e,...t)=>{const n=e.resolve(...t),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:o}=r,a=Gd(o)?o(n):o,l=Wd(a)?{path:a}:a;return $n(e,{hash:n.hash,query:n.query,params:n.params,...l})},r4=e=>{var t;if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)&&!(e.currentTarget&&((t=e.currentTarget.getAttribute("target"))!=null&&t.match(/\b_blank\b/i))))return e.preventDefault(),!0},Me=({to:e="",class:t="",...n},{slots:r})=>{var l;const o=Ne(),a=(s={})=>r4(s)?o.push(e).catch():Promise.resolve();return i("a",{...n,class:["vp-link",t],href:Ie(Sc(e)),onClick:a},(l=r.default)==null?void 0:l.call(r))};Me.displayName="VPLink";const Hc=()=>i(ae,{name:"github"},()=>i("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));Hc.displayName="GitHubIcon";const Fc=()=>i(ae,{name:"gitlab"},()=>i("path",{d:"M229.333 78.688C223.52 62 199.895 62 193.895 78.688L87.958 406.438h247.5c-.188 0-106.125-327.75-106.125-327.75zM33.77 571.438c-4.875 15 .563 31.687 13.313 41.25l464.812 345L87.77 406.438zm301.5-165 176.813 551.25 176.812-551.25zm655.125 165-54-165-424.312 551.25 464.812-345c12.938-9.563 18.188-26.25 13.5-41.25zM830.27 78.688c-5.812-16.688-29.437-16.688-35.437 0l-106.125 327.75h247.5z"}));Fc.displayName="GitLabIcon";const jc=()=>i(ae,{name:"gitee"},()=>i("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));jc.displayName="GiteeIcon";const qc=()=>i(ae,{name:"bitbucket"},()=>i("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));qc.displayName="BitbucketIcon";const Gc=()=>i(ae,{name:"source"},()=>i("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));Gc.displayName="SourceIcon";const gt=(e,t)=>{const n=t?t._instance:dn();return Rc(n==null?void 0:n.appContext.components)&&(e in n.appContext.components||st(e)in n.appContext.components||yr(st(e))in n.appContext.components)},o4=()=>Zd(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),a4=()=>{const e=o4();return k(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},Lr=e=>{const t=Tt();return k(()=>e[t.value])};function xi(e,t){var n;const r=ze();return Is(()=>{r.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!=null?n:"sync"}),cn(r)}function Po(e,t){let n,r,o;const a=J(!0),l=()=>{a.value=!0,o()};he(e,l,{flush:"sync"});const s=typeof t=="function"?t:t.get,c=typeof t=="function"?void 0:t.set,u=Es((d,p)=>(r=d,o=p,{get(){return a.value&&(n=s(),a.value=!1),r(),n},set(f){c==null||c(f)}}));return Object.isExtensible(u)&&(u.trigger=l),u}function fn(e){return rs()?(W1(e),!0):!1}function je(e){return typeof e=="function"?e():an(e)}const Dr=typeof window<"u"&&typeof document<"u",l4=Object.prototype.toString,i4=e=>l4.call(e)==="[object Object]",_r=()=>{},Bi=s4();function s4(){var e;return Dr&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent)}function Wc(e,t){function n(...r){return new Promise((o,a)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(a)})}return n}const Uc=e=>e();function c4(e,t=!0,n=!0,r=!1){let o=0,a,l=!0,s=_r,c;const u=()=>{a&&(clearTimeout(a),a=void 0,s(),s=_r)};return p=>{const f=je(e),h=Date.now()-o,g=()=>c=p();return u(),f<=0?(o=Date.now(),g()):(h>f&&(n||!l)?(o=Date.now(),g()):t&&(c=new Promise((E,T)=>{s=r?T:E,a=setTimeout(()=>{o=Date.now(),l=!0,E(g()),u()},Math.max(0,f-h))})),!n&&!a&&(a=setTimeout(()=>l=!0,f)),l=!1,c)}}function u4(e=Uc){const t=J(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...a)=>{t.value&&e(...a)};return{isActive:cn(t),pause:n,resume:r,eventFilter:o}}function d4(...e){if(e.length!==1)return jn(...e);const t=e[0];return typeof t=="function"?cn(Es(()=>({get:t,set:_r}))):J(t)}function p4(e,t=200,n=!1,r=!0,o=!1){return Wc(c4(t,n,r,o),e)}function f4(e,t,n={}){const{eventFilter:r=Uc,...o}=n;return he(e,Wc(r,t),o)}function v4(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:a,pause:l,resume:s,isActive:c}=u4(r);return{stop:f4(e,t,{...o,eventFilter:a}),pause:l,resume:s,isActive:c}}function Kc(e,t=!0){dn()?be(e):t?e():un(e)}function h4(e){dn()&&Tr(e)}function m4(e,t,n={}){const{immediate:r=!0}=n,o=J(!1);let a=null;function l(){a&&(clearTimeout(a),a=null)}function s(){o.value=!1,l()}function c(...u){l(),o.value=!0,a=setTimeout(()=>{o.value=!1,a=null,e(...u)},je(t))}return r&&(o.value=!0,Dr&&c()),fn(s),{isPending:cn(o),start:c,stop:s}}function ba(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Se(e),a=J(e);function l(s){if(arguments.length)return a.value=s,a.value;{const c=je(n);return a.value=a.value===c?je(r):c,a.value}}return o?l:[a,l]}function Rt(e){var t;const n=je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const kt=Dr?window:void 0,Yc=Dr?window.document:void 0,g4=Dr?window.navigator:void 0;function Ye(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=kt):[t,n,r,o]=e,!t)return _r;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const a=[],l=()=>{a.forEach(d=>d()),a.length=0},s=(d,p,f,h)=>(d.addEventListener(p,f,h),()=>d.removeEventListener(p,f,h)),c=he(()=>[Rt(t),je(o)],([d,p])=>{if(l(),!d)return;const f=i4(p)?{...p}:p;a.push(...n.flatMap(h=>r.map(g=>s(d,h,g,f))))},{immediate:!0,flush:"post"}),u=()=>{c(),l()};return fn(u),u}function _4(){const e=J(!1);return dn()&&be(()=>{e.value=!0}),e}function Cr(e){const t=_4();return k(()=>(t.value,!!e()))}function Jc(e,t={}){const{window:n=kt}=t,r=Cr(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const a=J(!1),l=u=>{a.value=u.matches},s=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",l):o.removeListener(l))},c=Is(()=>{r.value&&(s(),o=n.matchMedia(je(e)),"addEventListener"in o?o.addEventListener("change",l):o.addListener(l),a.value=o.matches)});return fn(()=>{c(),s(),o=void 0}),a}function E4(e={}){const{navigator:t=g4,read:n=!1,source:r,copiedDuring:o=1500,legacy:a=!1}=e,l=Cr(()=>t&&"clipboard"in t),s=k(()=>l.value||a),c=J(""),u=J(!1),d=m4(()=>u.value=!1,o);function p(){l.value?t.clipboard.readText().then(E=>{c.value=E}):c.value=g()}s.value&&n&&Ye(["copy","cut"],p);async function f(E=je(r)){s.value&&E!=null&&(l.value?await t.clipboard.writeText(E):h(E),c.value=E,u.value=!0,d.start())}function h(E){const T=document.createElement("textarea");T.value=E??"",T.style.position="absolute",T.style.opacity="0",document.body.appendChild(T),T.select(),document.execCommand("copy"),T.remove()}function g(){var E,T,A;return(A=(T=(E=document==null?void 0:document.getSelection)==null?void 0:E.call(document))==null?void 0:T.toString())!=null?A:""}return{isSupported:s,text:c,copied:u,copy:f}}const Ur=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Kr="__vueuse_ssr_handlers__",b4=y4();function y4(){return Kr in Ur||(Ur[Kr]=Ur[Kr]||{}),Ur[Kr]}function A4(e,t){return b4[e]||t}function w4(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const k4={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Oi="vueuse-storage";function Wn(e,t,n,r={}){var o;const{flush:a="pre",deep:l=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:p=kt,eventFilter:f,onError:h=C=>{console.error(C)}}=r,g=(d?ze:J)(t);if(!n)try{n=A4("getDefaultStorage",()=>{var C;return(C=kt)==null?void 0:C.localStorage})()}catch(C){h(C)}if(!n)return g;const E=je(t),T=w4(E),A=(o=r.serializer)!=null?o:k4[T],{pause:P,resume:b}=v4(g,()=>I(g.value),{flush:a,deep:l,eventFilter:f});return p&&s&&(Ye(p,"storage",M),Ye(p,Oi,x)),M(),g;function I(C){try{if(C==null)n.removeItem(e);else{const H=A.write(C),j=n.getItem(e);j!==H&&(n.setItem(e,H),p&&p.dispatchEvent(new CustomEvent(Oi,{detail:{key:e,oldValue:j,newValue:H,storageArea:n}})))}}catch(H){h(H)}}function S(C){const H=C?C.newValue:n.getItem(e);if(H==null)return c&&E!==null&&n.setItem(e,A.write(E)),E;if(!C&&u){const j=A.read(H);return typeof u=="function"?u(j,E):T==="object"&&!Array.isArray(j)?{...E,...j}:j}else return typeof H!="string"?H:A.read(H)}function x(C){M(C.detail)}function M(C){if(!(C&&C.storageArea!==n)){if(C&&C.key==null){g.value=E;return}if(!(C&&C.key!==e)){P();try{(C==null?void 0:C.newValue)!==A.write(g.value)&&(g.value=S(C))}catch(H){h(H)}finally{C?un(b):b()}}}}}function T4(e){return Jc("(prefers-color-scheme: dark)",e)}function I4(e,t,n={}){const{window:r=kt,...o}=n;let a;const l=Cr(()=>r&&"MutationObserver"in r),s=()=>{a&&(a.disconnect(),a=void 0)},c=he(()=>Rt(e),d=>{s(),l.value&&r&&d&&(a=new MutationObserver(t),a.observe(d,o))},{immediate:!0}),u=()=>{s(),c()};return fn(u),{isSupported:l,stop:u}}function P4(e,t,n={}){const{window:r=kt,...o}=n;let a;const l=Cr(()=>r&&"ResizeObserver"in r),s=()=>{a&&(a.disconnect(),a=void 0)},c=k(()=>Array.isArray(e)?e.map(p=>Rt(p)):[Rt(e)]),u=he(c,p=>{if(s(),l.value&&r){a=new ResizeObserver(t);for(const f of p)f&&a.observe(f,o)}},{immediate:!0,flush:"post",deep:!0}),d=()=>{s(),u()};return fn(d),{isSupported:l,stop:d}}function L4(e,t={width:0,height:0},n={}){const{window:r=kt,box:o="content-box"}=n,a=k(()=>{var c,u;return(u=(c=Rt(e))==null?void 0:c.namespaceURI)==null?void 0:u.includes("svg")}),l=J(t.width),s=J(t.height);return P4(e,([c])=>{const u=o==="border-box"?c.borderBoxSize:o==="content-box"?c.contentBoxSize:c.devicePixelContentBoxSize;if(r&&a.value){const d=Rt(e);if(d){const p=r.getComputedStyle(d);l.value=Number.parseFloat(p.width),s.value=Number.parseFloat(p.height)}}else if(u){const d=Array.isArray(u)?u:[u];l.value=d.reduce((p,{inlineSize:f})=>p+f,0),s.value=d.reduce((p,{blockSize:f})=>p+f,0)}else l.value=c.contentRect.width,s.value=c.contentRect.height},n),he(()=>Rt(e),c=>{l.value=c?t.width:0,s.value=c?t.height:0}),{width:l,height:s}}const Ri=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function il(e,t={}){const{document:n=Yc,autoExit:r=!1}=t,o=k(()=>{var A;return(A=Rt(e))!=null?A:n==null?void 0:n.querySelector("html")}),a=J(!1),l=k(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(A=>n&&A in n||o.value&&A in o.value)),s=k(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(A=>n&&A in n||o.value&&A in o.value)),c=k(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(A=>n&&A in n||o.value&&A in o.value)),u=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(A=>n&&A in n),d=Cr(()=>o.value&&n&&l.value!==void 0&&s.value!==void 0&&c.value!==void 0),p=()=>u?(n==null?void 0:n[u])===o.value:!1,f=()=>{if(c.value){if(n&&n[c.value]!=null)return n[c.value];{const A=o.value;if((A==null?void 0:A[c.value])!=null)return!!A[c.value]}}return!1};async function h(){if(!(!d.value||!a.value)){if(s.value)if((n==null?void 0:n[s.value])!=null)await n[s.value]();else{const A=o.value;(A==null?void 0:A[s.value])!=null&&await A[s.value]()}a.value=!1}}async function g(){if(!d.value||a.value)return;f()&&await h();const A=o.value;l.value&&(A==null?void 0:A[l.value])!=null&&(await A[l.value](),a.value=!0)}async function E(){await(a.value?h():g())}const T=()=>{const A=f();(!A||A&&p())&&(a.value=A)};return Ye(n,Ri,T,!1),Ye(()=>Rt(o),Ri,T,!1),r&&fn(h),{isSupported:d,isFullscreen:a,enter:g,exit:h,toggle:E}}function Wo(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Uo(e,t=_r,n={}){const{immediate:r=!0,manual:o=!1,type:a="text/javascript",async:l=!0,crossOrigin:s,referrerPolicy:c,noModule:u,defer:d,document:p=Yc,attrs:f={}}=n,h=J(null);let g=null;const E=P=>new Promise((b,I)=>{const S=C=>(h.value=C,b(C),C);if(!p){b(!1);return}let x=!1,M=p.querySelector(`script[src="${je(e)}"]`);M?M.hasAttribute("data-loaded")&&S(M):(M=p.createElement("script"),M.type=a,M.async=l,M.src=je(e),d&&(M.defer=d),s&&(M.crossOrigin=s),u&&(M.noModule=u),c&&(M.referrerPolicy=c),Object.entries(f).forEach(([C,H])=>M==null?void 0:M.setAttribute(C,H)),x=!0),M.addEventListener("error",C=>I(C)),M.addEventListener("abort",C=>I(C)),M.addEventListener("load",()=>{M.setAttribute("data-loaded","true"),t(M),S(M)}),x&&(M=p.head.appendChild(M)),P||S(M)}),T=(P=!0)=>(g||(g=E(P)),g),A=()=>{if(!p)return;g=null,h.value&&(h.value=null);const P=p.querySelector(`script[src="${je(e)}"]`);P&&p.head.removeChild(P)};return r&&!o&&Kc(T),o||h4(A),{scriptTag:h,load:T,unload:A}}function Zc(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}function Qc(e,t=!1){const n=J(t);let r=null,o;he(d4(e),s=>{const c=Wo(je(s));if(c){const u=c;o=u.style.overflow,n.value&&(u.style.overflow="hidden")}},{immediate:!0});const a=()=>{const s=Wo(je(e));!s||n.value||(Bi&&(r=Ye(s,"touchmove",c=>{D4(c)},{passive:!1})),s.style.overflow="hidden",n.value=!0)},l=()=>{const s=Wo(je(e));!s||!n.value||(Bi&&(r==null||r()),s.style.overflow=o,n.value=!1)};return fn(l),k({get(){return n.value},set(s){s?a():l()}})}function Xc(e,t,n={}){const{window:r=kt}=n;return Wn(e,t,r==null?void 0:r.sessionStorage,n)}function C4(e={}){const{window:t=kt}=e;if(!t)return{x:J(0),y:J(0)};const n=J(t.scrollX),r=J(t.scrollY);return Ye(t,"scroll",()=>{n.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:n,y:r}}function x4(e={}){const{window:t=kt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:a=!0}=e,l=J(n),s=J(r),c=()=>{t&&(a?(l.value=t.innerWidth,s.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,s.value=t.document.documentElement.clientHeight))};if(c(),Kc(c),Ye("resize",c,{passive:!0}),o){const u=Jc("(orientation: portrait)");he(u,()=>c())}return{width:l,height:s}}const eu=({type:e="info",text:t="",vertical:n,color:r},{slots:o})=>{var a;return i("span",{class:["vp-badge",e,{diy:r}],style:{verticalAlign:n??!1,backgroundColor:r??!1}},((a=o.default)==null?void 0:a.call(o))||t)};eu.displayName="Badge";var B4=V({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=k(()=>{const r=["font-icon icon"],o=`fas fa-${e.icon}`;return r.push("fa-fw fa-sm"),r.push(e.icon.includes(" ")?e.icon:o),r}),n=k(()=>{const r={};return e.color&&(r.color=e.color),e.size&&(r["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),Ke(r).length?r:null});return()=>e.icon?i("span",{key:e.icon,class:t.value,style:n.value}):null}});const tu=()=>i(ae,{name:"back-to-top"},()=>[i("path",{d:"M512 843.2c-36.2 0-66.4-13.6-85.8-21.8-10.8-4.6-22.6 3.6-21.8 15.2l7 102c.4 6.2 7.6 9.4 12.6 5.6l29-22c3.6-2.8 9-1.8 11.4 2l41 64.2c3 4.8 10.2 4.8 13.2 0l41-64.2c2.4-3.8 7.8-4.8 11.4-2l29 22c5 3.8 12.2.6 12.6-5.6l7-102c.8-11.6-11-20-21.8-15.2-19.6 8.2-49.6 21.8-85.8 21.8z"}),i("path",{d:"m795.4 586.2-96-98.2C699.4 172 513 32 513 32S324.8 172 324.8 488l-96 98.2c-3.6 3.6-5.2 9-4.4 14.2L261.2 824c1.8 11.4 14.2 17 23.6 10.8L419 744s41.4 40 94.2 40c52.8 0 92.2-40 92.2-40l134.2 90.8c9.2 6.2 21.6.6 23.6-10.8l37-223.8c.4-5.2-1.2-10.4-4.8-14zM513 384c-34 0-61.4-28.6-61.4-64s27.6-64 61.4-64c34 0 61.4 28.6 61.4 64S547 384 513 384z"})]);tu.displayName="BackToTopIcon";var O4=V({name:"BackToTop",props:{threshold:{type:Number,default:100},noProgress:Boolean},setup(e){const t=ye(),n=Lr({"/zh/":{backToTop:"返回顶部"},"/en/":{backToTop:"Back to top"},"/":{backToTop:"返回頂部"}}),r=ze(),{height:o}=L4(r),{height:a}=x4(),{y:l}=C4(),s=k(()=>t.value.backToTop!==!1&&l.value>e.threshold),c=k(()=>l.value/(o.value-a.value));return be(()=>{r.value=document.body}),()=>i(Qt,{name:"fade"},()=>s.value?i("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,"data-balloon-pos":"left",onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[e.noProgress?null:i("svg",{class:"vp-scroll-progress"},i("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*c.value*100}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}})),i(tu)]):null)}});const R4=It({enhance:({app:e})=>{gt("Badge")||e.component("Badge",eu),gt("FontIcon")||e.component("FontIcon",B4)},setup:()=>{Uo("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/brands.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Uo("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/solid.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Uo("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/fontawesome.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}})},rootComponents:[()=>i(O4,{})]});function S4(e,t,n){var r,o,a;t===void 0&&(t=50),n===void 0&&(n={});var l=(r=n.isImmediate)!=null&&r,s=(o=n.callback)!=null&&o,c=n.maxWait,u=Date.now(),d=[];function p(){if(c!==void 0){var h=Date.now()-u;if(h+t>=c)return c-h}return t}var f=function(){var h=[].slice.call(arguments),g=this;return new Promise(function(E,T){var A=l&&a===void 0;if(a!==void 0&&clearTimeout(a),a=setTimeout(function(){if(a=void 0,u=Date.now(),!l){var b=e.apply(g,h);s&&s(b),d.forEach(function(I){return(0,I.resolve)(b)}),d=[]}},p()),A){var P=e.apply(g,h);return s&&s(P),E(P)}d.push({resolve:E,reject:T})})};return f.cancel=function(h){a!==void 0&&clearTimeout(a),d.forEach(function(g){return(0,g.reject)(h)}),d=[]},f}const V4=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=Ne(),l=S4(()=>{var E,T;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)f.some(P=>P.hash===A.hash));for(let A=0;A=(((E=P.parentElement)==null?void 0:E.offsetTop)??0)-r,S=!b||s<(((T=b.parentElement)==null?void 0:T.offsetTop)??0)-r;if(!(I&&S))continue;const M=decodeURIComponent(o.currentRoute.value.hash),C=decodeURIComponent(P.hash);if(M===C)return;if(p){for(let H=A+1;H{window.addEventListener("scroll",l)}),Ua(()=>{window.removeEventListener("scroll",l)})},Si=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},M4=".vp-sidebar-link, .toc-link",$4=".header-anchor",z4=200,N4=5,H4=It({setup(){V4({headerLinkSelector:M4,headerAnchorSelector:$4,delay:z4,offset:N4})}});let nu=()=>null;const ru=Symbol(""),F4=e=>{nu=e},j4=()=>me(ru),q4=e=>{e.provide(ru,nu)};var G4=V({name:"AutoCatalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=j4(),n=Lr({"/zh/":{title:"目录",empty:"暂无目录"},"/en/":{title:"Catalog",empty:"No catalog"},"/":{title:"目錄",empty:"暫無目錄"}}),r=se(),o=Ne(),a=dc(),l=p=>p?i(t,{icon:p}):null,s=({title:p,path:f,icon:h,class:g})=>i(Me,{class:g,to:f},()=>[l(h),p||f]),c=p=>{const f=p.I;return typeof f>"u"||f},u=()=>{const p=e.base||r.value.path.replace(/\/[^/]+$/,"/"),f=o.getRoutes(),h=[];return f.filter(({meta:g,path:E})=>{if(!Mn(E,p)||E===p)return!1;if(p==="/"){const T=Ke(a.value.locales).filter(A=>A!=="/");if(E==="/404.html"||T.some(A=>Mn(E,A)))return!1}return(mn(E,".html")&&!mn(E,"/index.html")||mn(E,"/"))&&c(g)}).map(({path:g,meta:E})=>{const T=g.substring(p.length).split("/").length;return{title:E.t||"",icon:E.i||null,base:g.replace(/\/[^/]+\/?$/,"/"),order:E.O||null,level:mn(g,"/")?T-1:T,path:g}}).filter(({title:g,level:E})=>g&&E<=e.level).sort(({title:g,level:E,path:T,order:A},{title:P,level:b,path:I,order:S})=>E-b||(mn(T,"/index.html")?-1:mn(I,"/index.html")?1:A===null?S===null?g.localeCompare(P):S:S===null?A:A>0?S>0?A-S:-1:S<0?A-S:1)).forEach(g=>{var A;const{base:E,level:T}=g;switch(T){case 1:h.push(g);break;case 2:{const P=h.find(b=>b.path===E);P&&(P.children??(P.children=[])).push(g);break}default:{const P=h.find(b=>b.path===E.replace(/\/[^/]+\/$/,"/"));if(P){const b=(A=P.children)==null?void 0:A.find(I=>I.path===E);b&&(b.children??(b.children=[])).push(g)}}}}),h},d=k(()=>u());return()=>{const p=d.value.some(h=>h.children),f=d.value.map(({children:h=[],icon:g,path:E,title:T})=>{const A=s({title:T,path:E,icon:g,class:"vp-catalog-title"});return p?[i("h3",{id:T,class:["vp-catalog-child-title",{"has-children":h.length}]},[i("a",{href:`#${T}`,class:"header-anchor","aria-hidden":!0},"#"),A]),h.length?i(e.index?"ol":"ul",{class:"vp-child-catalogs"},h.map(({children:P=[],icon:b,path:I,title:S})=>i("li",{class:"vp-child-catalog"},[i("div",{class:["vp-catalog-sub-title",{"has-children":P.length}]},[i("a",{href:`#${S}`,class:"header-anchor"},"#"),i(s,{title:S,path:I,icon:b,class:"vp-catalog-title"})]),P.length?i(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},P.map(({icon:x,path:M,title:C})=>{const H=i(s,{title:C,path:M,icon:x,class:""});return e.index?i("li",{class:"vp-sub-catalog"},H):i(s,{title:C,path:M,icon:x,class:"vp-sub-catalog-link"})})):null]))):null]:i("div",{class:"vp-catalog-child-title"},A)});return i("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:i("h2",{class:"vp-catalog-main-title"},n.value.title),d.value.length?e.index?i("ol",{class:"vp-catalogs"},f.map(h=>i("li",{class:"vp-catalog"},h))):f:i("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),W4=It({enhance:({app:e})=>{q4(e),gt("AutoCatalog",e)||e.component("AutoCatalog",G4)}});const U4=i("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[i("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),i("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),ou=V({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Tt(),n=k(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>i("span",[U4,i("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),K4={},Y4=It({enhance({app:e}){e.component("ExternalLinkIcon",i(ou,{locales:K4}))}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const pe={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
    '},status:null,set:e=>{const t=pe.isStarted();e=Ko(e,pe.settings.minimum,1),pe.status=e===1?null:e;const n=pe.render(!t),r=n.querySelector(pe.settings.barSelector),o=pe.settings.speed,a=pe.settings.easing;return n.offsetWidth,J4(l=>{Yr(r,{transform:"translate3d("+Vi(e)+"%,0,0)",transition:"all "+o+"ms "+a}),e===1?(Yr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Yr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){pe.remove(),l()},o)},o)):setTimeout(()=>l(),o)}),pe},isStarted:()=>typeof pe.status=="number",start:()=>{pe.status||pe.set(0);const e=()=>{setTimeout(()=>{pe.status&&(pe.trickle(),e())},pe.settings.trickleSpeed)};return pe.settings.trickle&&e(),pe},done:e=>!e&&!pe.status?pe:pe.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=pe.status;return t?(typeof e!="number"&&(e=(1-t)*Ko(Math.random()*t,.1,.95)),t=Ko(t+e,0,.994),pe.set(t)):pe.start()},trickle:()=>pe.inc(Math.random()*pe.settings.trickleRate),render:e=>{if(pe.isRendered())return document.getElementById("nprogress");Mi(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=pe.settings.template;const n=t.querySelector(pe.settings.barSelector),r=e?"-100":Vi(pe.status||0),o=document.querySelector(pe.settings.parent);return Yr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Mi(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{$i(document.documentElement,"nprogress-busy"),$i(document.querySelector(pe.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Z4(e)},isRendered:()=>!!document.getElementById("nprogress")},Ko=(e,t,n)=>en?n:e,Vi=e=>(-1+e)*100,J4=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Yr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(l){return l.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(s,c){return c.toUpperCase()})}function r(l){const s=document.body.style;if(l in s)return l;let c=e.length;const u=l.charAt(0).toUpperCase()+l.slice(1);let d;for(;c--;)if(d=e[c]+u,d in s)return d;return l}function o(l){return l=n(l),t[l]??(t[l]=r(l))}function a(l,s,c){s=o(s),l.style[s]=c}return function(l,s){for(const c in s){const u=s[c];u!==void 0&&Object.prototype.hasOwnProperty.call(s,c)&&a(l,c,u)}}}(),au=(e,t)=>(typeof e=="string"?e:sl(e)).indexOf(" "+t+" ")>=0,Mi=(e,t)=>{const n=sl(e),r=n+t;au(n,t)||(e.className=r.substring(1))},$i=(e,t)=>{const n=sl(e);if(!au(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},sl=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Z4=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const Q4=()=>{be(()=>{const e=Ne(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||pe.start()}),e.afterEach(n=>{t.add(n.path),pe.done()})})},X4=It({setup(){Q4()}}),e6=JSON.parse(`{"encrypt":{"config":{"/demo/encrypt.html":["$2a$10$1aGVpB18M7d6Efp/T4v0PODMnUpVRXDQMI0ivSVrM.Rrs2sjaLOou"],"/zh/demo/encrypt.html":["$2a$10$HHpsgwoE9WwLr2xZ2dZfIutoUztOb.H7XoitfThflL08XQPWn6LPO"],"/en/demo/encrypt.html":["$2a$10$P/5L1s8CnWWFixKLtwBBjOTdCWWLet3Xvfp40TgX09UtL7ut0Z0/G"]}},"author":{"name":"Ven2s","url":"https://luvsia.com"},"logo":"/images/pinkbitch.png","repo":"ventusoon/LuvSia","docsDir":"src/","blog":{"medias":{"Discord":"https://discord.com/channels/ven2s_","Email":"mailto:sia@ik.me","Gitee":"https://gitee.com/ventusoon","GitHub":"https://github.com/ventusoon","Gitlab":"https://gitlab.com/ventusoon","Instagram":"https://instagram.com/ventusoon","Steam":"https://steamcommunity.com/id/ventusyu","Twitter":"https://x.com/ventusoon"}},"locales":{"/zh/":{"lang":"zh-CN","navbarLocales":{"langName":"简体中文","selectLangAriaLabel":"选择语言"},"metaLocales":{"author":"作者","date":"写作日期","origin":"原创","views":"访问量","category":"分类","tag":"标签","readingTime":"阅读时间","words":"字数","toc":"此页内容","prev":"上一页","next":"下一页","lastUpdated":"上次编辑于","contributors":"贡献者","editLink":"在 GitHub 上编辑此页","print":"打印"},"blogLocales":{"article":"文章","articleList":"文章列表","category":"分类","tag":"标签","timeline":"时间轴","timelineTitle":"昨日不在","all":"全部","intro":"个人介绍","star":"收藏"},"paginationLocales":{"prev":"上一页","next":"下一页","navigate":"跳转到","action":"前往","errorText":"请输入 1 到 $page 之前的页码!"},"outlookLocales":{"themeColor":"主题色","darkmode":"外观","fullscreen":"全屏"},"encryptLocales":{"iconLabel":"文章已加密","placeholder":"输入密码","remember":"记住密码","errorHint":"请输入正确的密码"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"页面不存在","notFoundMsg":["这里什么也没有","我们是怎么来到这儿的?","这 是 四 零 四 !","看起来你访问了一个失效的链接"],"back":"返回上一页","home":"带我回家","openInNewWindow":"Open in new window"},"navbar":["/zh/",{"text":"代码笔记","icon":"code","prefix":"/zh/code/","children":[{"text":"精选","icon":"pen-to-square","prefix":"","children":[{"text":"从0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},{"text":"搭建订阅转换链接","icon":"turn-down","link":"build-sub"}]},{"text":"教程","icon":"pen-to-square","prefix":"","children":[{"text":"搭建ChatGPT","icon":"robot","link":"chatgpt"},{"text":"搭建ChatGPT代理","icon":"headset","link":"chatgpt-porxy"},"hackintosh","nginx-proxy-manager"]}]},{"text":"随笔","icon":"note-sticky","prefix":"/zh/note/","children":[{"text":"1993","icon":"cake","link":"1993"}]},{"text":"个人简介","icon":"bolt","prefix":"/zh/","link":"intro"}],"sidebar":{"/zh/":["",{"text":"如何使用","icon":"laptop-code","prefix":"demo/","link":"demo/","children":"structure"},{"text":"文章","icon":"book","prefix":"posts/","children":"structure"},"intro","slides"]},"footer":"默认页脚","displayFooter":true,"blog":{"description":"一个前端菜鸟","intro":"/zh/intro.html"}},"/en/":{"lang":"en-US","navbarLocales":{"langName":"English","selectLangAriaLabel":"Select language"},"metaLocales":{"author":"Author","date":"Writing Date","origin":"Original","views":"Page views","category":"Category","tag":"Tag","readingTime":"Reading Time","words":"Words","toc":"On This Page","prev":"Prev","next":"Next","lastUpdated":"Last update","contributors":"Contributors","editLink":"Edit this page on GitHub","print":"Print"},"blogLocales":{"article":"Articles","articleList":"Article List","category":"Category","tag":"Tag","timeline":"Timeline","timelineTitle":"Yesterday Once More!","all":"All","intro":"Personal Intro","star":"Star"},"paginationLocales":{"prev":"Prev","next":"Next","navigate":"Jump to","action":"Go","errorText":"Please enter a number between 1 and $page !"},"outlookLocales":{"themeColor":"Theme Color","darkmode":"Theme Mode","fullscreen":"Full Screen"},"encryptLocales":{"iconLabel":"Page Encrypted","placeholder":"Enter password","remember":"Remember password","errorHint":"Please enter the correct password!"},"routeLocales":{"skipToContent":"Skip to main content","notFoundTitle":"Page not found","notFoundMsg":["There’s nothing here.","How did we get here?","That’s a Four-Oh-Four.","Looks like we've got some broken links."],"back":"Go back","home":"Take me home","openInNewWindow":"Open in new window"},"navbar":["/en/",{"text":"Code Note","icon":"code","prefix":"/en/code/","children":[{"text":"Featured","icon":"pen-to-square","prefix":"","children":[{"text":"Since 0 to 1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},{"text":"Build subscription conversion","icon":"turn-down","link":"build-sub"}]},{"text":"Tutorial","icon":"pen-to-square","prefix":"","children":[{"text":"Create a ChatGPT Website","icon":"robot","link":"chatgpt"},{"text":"Set up ChatGPT Proxy","icon":"headset","link":"chatgpt-porxy"},"hackintosh","nginx-proxy-manager"]}]},{"text":"Note","icon":"note-sticky","prefix":"/en/note/","children":[{"text":"1993","icon":"cake","link":"1993"}]},{"text":"Personal Profile","icon":"bolt","prefix":"/en/","link":"intro"}],"sidebar":{"/en/":["",{"text":"Demo","icon":"laptop-code","prefix":"demo/","link":"demo/","children":"structure"},{"text":"Articles","icon":"book","prefix":"posts/","children":"structure"},"intro","slides"]},"footer":"Default footer","displayFooter":true,"blog":{"description":"A FrontEnd noob","intro":"/en/intro.html"}},"/":{"lang":"zh-TW","navbarLocales":{"langName":"繁體中文","selectLangAriaLabel":"選擇語言"},"metaLocales":{"author":"作者","date":"寫作日期","origin":"原創","views":"訪問量","category":"分類","tag":"標籤","readingTime":"閱讀時間","words":"字數","toc":"此頁內容","prev":"上一頁","next":"下一頁","lastUpdated":"上次編輯於","contributors":"貢獻者","editLink":"在 GitHub 上編輯此頁","print":"打印"},"blogLocales":{"article":"文章","articleList":"文章列表","category":"分類","tag":"標籤","timeline":"時間軸","timelineTitle":"昨日不在","all":"全部","intro":"個人介紹","star":"收藏"},"paginationLocales":{"prev":"上一頁","next":"下一頁","navigate":"跳轉到","action":"前往","errorText":"請輸入 1 到 $page 之前的頁碼!"},"outlookLocales":{"themeColor":"主題色","darkmode":"主題模式","fullscreen":"全屏"},"encryptLocales":{"iconLabel":"頁面已加密","placeholder":"輸入密碼","remember":"記憶密碼","errorHint":"請輸入正確密碼"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"頁面不存在","notFoundMsg":["這裡什麼也沒有","我們是怎麼來到這兒的?","這 是 四 零 四 !","看起来你訪問了一個失效的鏈結"],"back":"返回上一頁","home":"帶我回家","openInNewWindow":"Open in new window"},"navbar":["/",{"text":"代碼筆記","icon":"code","prefix":"/code/","children":[{"text":"精選","icon":"pen-to-square","prefix":"","children":[{"text":"從0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},{"text":"搭建訂閱轉換鏈接","icon":"turn-down","link":"build-sub"}]},{"text":"教程","icon":"pen-to-square","prefix":"","children":[{"text":"搭建ChatGPT","icon":"robot","link":"chatgpt"},{"text":"搭建ChatGPT代理","icon":"headset","link":"chatgpt-porxy"},"hackintosh","nginx-proxy-manager"]}]},{"text":"隨筆","icon":"note-sticky","prefix":"/note/","children":[{"text":"1993","icon":"cake","link":"1993"}]},{"text":"個人簡介","icon":"bolt","prefix":"/","link":"intro"}],"sidebar":{"/":["",{"text":"如何使用","icon":"laptop-code","prefix":"demo/","link":"demo/","children":"structure"},{"text":"文章","icon":"book","prefix":"posts/","children":"structure"},"intro","slides"]},"footer":"默認業腳","displayFooter":true,"blog":{"description":"一个前端麻瓜","intro":"/intro.html"}}}}`),t6=J(e6),lu=()=>t6,iu=Symbol(""),n6=()=>{const e=me(iu);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},r6=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},o6=It({enhance({app:e}){const t=lu(),n=e._context.provides[el],r=k(()=>r6(t.value,n.value));e.provide(iu,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}});const a6=800,l6=2e3,i6={"/zh/":{copy:"复制代码",copied:"已复制",hint:"复制成功"},"/en/":{copy:"Copy code",copied:"Copied",hint:"Copied successfully"},"/":{copy:"複製代碼",copied:"已複製",hint:"複製成功"}},s6=!1,c6=['.theme-hope-content div[class*="language-"] pre'],zi=!1,Yo=new Map,u6=()=>{const{copy:e}=E4({legacy:!0}),t=Lr(i6),n=se(),r=a4(),o=s=>{if(!s.hasAttribute("copy-code-registered")){const c=document.createElement("button");c.type="button",c.classList.add("copy-code-button"),c.innerHTML='
    ',c.setAttribute("aria-label",t.value.copy),c.setAttribute("data-copied",t.value.copied),s.parentElement&&s.parentElement.insertBefore(c,s),s.setAttribute("copy-code-registered","")}},a=()=>un().then(()=>new Promise(s=>{setTimeout(()=>{c6.forEach(c=>{document.querySelectorAll(c).forEach(o)}),s()},a6)})),l=(s,c,u)=>{let{innerText:d=""}=c;/language-(shellscript|shell|bash|sh|zsh)/.test(s.classList.toString())&&(d=d.replace(/^ *(\$|>) /gm,"")),e(d).then(()=>{u.classList.add("copied"),clearTimeout(Yo.get(u));const p=setTimeout(()=>{u.classList.remove("copied"),u.blur(),Yo.delete(u)},l6);Yo.set(u,p)})};be(()=>{(!r.value||zi)&&a(),Ye("click",s=>{const c=s.target;if(c.matches('div[class*="language-"] > button.copy')){const u=c.parentElement,d=c.nextElementSibling;d&&l(u,d,c)}else if(c.matches('div[class*="language-"] div.copy-icon')){const u=c.parentElement,d=u.parentElement,p=u.nextElementSibling;p&&l(d,p,u)}}),he(()=>n.value.path,()=>{(!r.value||zi)&&a()})})};var d6=It({setup:()=>{u6()}});const su=({title:e,desc:t="",logo:n="",color:r="",link:o=""})=>{const a=[i("img",{class:"vp-card-logo",src:Ie(n)}),i("div",{class:"vp-card-content"},[i("div",{class:"vp-card-title",innerHTML:e}),i("hr"),i("div",{class:"vp-card-desc",innerHTML:t})])],l={class:"vp-card"};return r&&(l.style={background:r}),hr(o)?i("a",{href:o,target:"_blank",...l},a):i(Me,{to:o,...l},()=>a)};su.displayName="VPCard";const Jr=Wn("VUEPRESS_CODE_TAB_STORE",{});var p6=V({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:{type:String,default:""}},slots:Object,setup(e,{slots:t}){const n=J(e.active),r=ze([]),o=()=>{e.tabId&&(Jr.value[e.tabId]=e.data[n.value].id)},a=(u=n.value)=>{n.value=u{n.value=u>0?u-1:r.value.length-1,r.value[n.value].focus()},s=(u,d)=>{u.key===" "||u.key==="Enter"?(u.preventDefault(),n.value=d):u.key==="ArrowRight"?(u.preventDefault(),a()):u.key==="ArrowLeft"&&(u.preventDefault(),l()),e.tabId&&(Jr.value[e.tabId]=e.data[n.value].id)},c=()=>{if(e.tabId){const u=e.data.findIndex(({id:d})=>Jr.value[e.tabId]===d);if(u!==-1)return u}return e.active};return be(()=>{n.value=c(),he(()=>Jr.value[e.tabId],(u,d)=>{if(e.tabId&&u!==d){const p=e.data.findIndex(({id:f})=>f===u);p!==-1&&(n.value=p)}})}),()=>e.data.length?i("div",{class:"vp-code-tabs"},[i("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:u},d)=>{const p=d===n.value;return i("button",{type:"button",ref:f=>{f&&(r.value[d]=f)},class:["vp-code-tab-nav",{active:p}],role:"tab","aria-controls":`codetab-${e.id}-${d}`,"aria-selected":p,onClick:()=>{n.value=d,o()},onKeydown:f=>s(f,d)},t[`title${d}`]({value:u,isActive:p}))})),e.data.map(({id:u},d)=>{const p=d===n.value;return i("div",{class:["vp-code-tab",{active:p}],id:`codetab-${e.id}-${d}`,role:"tabpanel","aria-expanded":p},t[`tab${d}`]({value:u,isActive:p}))})]):null}});const cu=({active:e=!1},{slots:t})=>{var n;return i("div",{class:["code-group-item",{active:e}],"aria-selected":e},(n=t.default)==null?void 0:n.call(t))};cu.displayName="CodeGroupItem";const f6=V({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=J(-1),r=ze([]),o=(s=n.value)=>{n.value=s{n.value=s>0?s-1:r.value.length-1,r.value[n.value].focus()},l=(s,c)=>{s.key===" "||s.key==="Enter"?(s.preventDefault(),n.value=c):s.key==="ArrowRight"?(s.preventDefault(),o(c)):s.key==="ArrowLeft"&&(s.preventDefault(),a(c))};return()=>{var c;const s=(((c=t.default)==null?void 0:c.call(t))||[]).filter(u=>u.type.name==="CodeGroupItem").map(u=>(u.props===null&&(u.props={}),u));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(u=>"active"in u.props),n.value===-1&&(n.value=0)):s.forEach((u,d)=>{u.props.active=d===n.value}),i("div",{class:"code-group"},[i("div",{class:"code-group-nav"},s.map((u,d)=>{const p=d===n.value;return i("button",{type:"button",ref:f=>{f&&(r.value[d]=f)},class:["code-group-nav-tab",{active:p}],"aria-pressed":p,"aria-expanded":p,onClick:()=>{n.value=d},onKeydown:f=>l(f,d)},u.props.title)})),s]))}}});const v6='',h6='',m6='';const Jo={useBabel:!1,jsLib:[],cssLib:[],codepenLayout:"left",codepenEditors:"101",babel:"https://unpkg.com/@babel/standalone/babel.min.js",vue:"https://unpkg.com/vue/dist/vue.global.prod.js",react:"https://unpkg.com/react/umd/react.production.min.js",reactDOM:"https://unpkg.com/react-dom/umd/react-dom.production.min.js"},Ni={html:{types:["html","slim","haml","md","markdown","vue"],map:{html:"none",vue:"none",md:"markdown"}},js:{types:["js","javascript","coffee","coffeescript","ts","typescript","ls","livescript"],map:{js:"none",javascript:"none",coffee:"coffeescript",ls:"livescript",ts:"typescript"}},css:{types:["css","less","sass","scss","stylus","styl"],map:{css:"none",styl:"stylus"}}},g6=(e,t,n)=>{const r=document.createElement(e);return Ir(t)&&Ke(t).forEach(o=>{if(o.indexOf("data"))r[o]=t[o];else{const a=o.replace("data","");r.dataset[a]=t[o]}}),n&&n.forEach(o=>{r.appendChild(o)}),r},cl=e=>({...Jo,...e,jsLib:Array.from(new Set([...Jo.jsLib||[],...e.jsLib||[]])),cssLib:Array.from(new Set([...Jo.cssLib||[],...e.cssLib||[]]))}),In=(e,t)=>{if(e[t]!==void 0)return e[t];const n=new Promise(r=>{var a;const o=document.createElement("script");o.src=t,(a=document.querySelector("body"))==null||a.appendChild(o),o.onload=()=>{r()}});return e[t]=n,n},_6=(e,t)=>{if(t.css&&Array.from(e.childNodes).every(n=>n.nodeName!=="STYLE")){const n=g6("style",{innerHTML:t.css});e.appendChild(n)}},E6=(e,t,n)=>{const r=n.getScript();if(r&&Array.from(t.childNodes).every(o=>o.nodeName!=="SCRIPT")){const o=document.createElement("script");o.appendChild(document.createTextNode(`{const document=window.document.querySelector('#${e} .vp-code-demo-display').shadowRoot; +${r}}`)),t.appendChild(o)}},b6=e=>{const t=Ke(e),n={html:[],js:[],css:[],isLegal:!1};return["html","js","css"].forEach(r=>{const o=t.filter(a=>Ni[r].types.includes(a));if(o.length){const a=o[0];n[r]=[e[a].replace(/^\n|\n$/g,""),Ni[r].map[a]||a]}}),n.isLegal=(!n.html.length||n.html[1]==="none")&&(!n.js.length||n.js[1]==="none")&&(!n.css.length||n.css[1]==="none"),n},uu=e=>e.replace(/
    /g,"
    ").replace(/<((\S+)[^<]*?)\s+\/>/g,"<$1>"),du=e=>`
    +${uu(e)} +
    `,y6=e=>`${e.replace("export default ","const $reactApp = ").replace(/App\.__style__(\s*)=(\s*)`([\s\S]*)?`/,"")}; +ReactDOM.createRoot(document.getElementById("app")).render(React.createElement($reactApp))`,A6=e=>e.replace(/export\s+default\s*\{(\n*[\s\S]*)\n*\}\s*;?$/u,"Vue.createApp({$1}).mount('#app')").replace(/export\s+default\s*define(Async)?Component\s*\(\s*\{(\n*[\s\S]*)\n*\}\s*\)\s*;?$/u,"Vue.createApp({$1}).mount('#app')").trim(),pu=e=>`(function(exports){var module={};module.exports=exports;${e};return module.exports.__esModule?module.exports.default:module.exports;})({})`,w6=(e,t)=>{const n=cl(t),r=e.js[0]||"";return{...n,html:uu(e.html[0]||""),js:r,css:e.css[0]||"",isLegal:e.isLegal,getScript:()=>{var o;return n.useBabel?((o=window.Babel.transform(r,{presets:["es2015"]}))==null?void 0:o.code)||"":r}}},k6=/
    1. This is footnote content ↩︎

    + diff --git a/en/demo/page.html b/en/demo/page.html index 6cc8b61c..3933a21a 100644 --- a/en/demo/page.html +++ b/en/demo/page.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    Skip to main content
    Page Config

    Page Config

    Ms.Hope...Less than 1 minuteGuidePage configGuide

    Content before more comment is regarded as page excerpt.

    Page Information

    You can set page information in Markdown's Frontmatter.

    • The author is Ms.Hope.
    • The writing date is January 1, 2020
    • Category is "Guide"
    • Tags are "Page Config" and "Guide"

    Page Content

    You are free to write your Markdown here.

    Assets

    • You can place images besides your Markdown files, but you should use relative links (i.e.: starting with ./) for them.

    • For images in .vuepress/public directory, please use absolute links (i.e.: starting with /) for them.

    The theme contains a custom badge:

    A dark blue badge text badge at the end of line. Badge text

    Page Structure

    This page should contain:

    You can customize them in theme options and page frontmatter.

    Comments
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    - +
    Skip to main content
    Page Config

    Page Config

    Ms.Hope...Less than 1 minuteGuidePage configGuide

    Content before more comment is regarded as page excerpt.

    Page Information

    You can set page information in Markdown's Frontmatter.

    • The author is Ms.Hope.
    • The writing date is January 1, 2020
    • Category is "Guide"
    • Tags are "Page Config" and "Guide"

    Page Content

    You are free to write your Markdown here.

    Assets

    • You can place images besides your Markdown files, but you should use relative links (i.e.: starting with ./) for them.

    • For images in .vuepress/public directory, please use absolute links (i.e.: starting with /) for them.

    The theme contains a custom badge:

    A dark blue badge text badge at the end of line. Badge text

    Page Structure

    This page should contain:

    You can customize them in theme options and page frontmatter.

    + diff --git a/en/index.html b/en/index.html index 4fb5e76c..1814cb6b 100644 --- a/en/index.html +++ b/en/index.html @@ -5,7 +5,7 @@ - Blog Home | SpringVen2s + Blog Home | SpringVen2s + + + + + + + + + diff --git a/en/note/1993.html b/en/note/1993.html new file mode 100644 index 00000000..93af9b50 --- /dev/null +++ b/en/note/1993.html @@ -0,0 +1,40 @@ + + + + + + + + 一九九三 | SpringVen2s + + + + + + + + + + diff --git a/en/note/index.html b/en/note/index.html new file mode 100644 index 00000000..dbe3de19 --- /dev/null +++ b/en/note/index.html @@ -0,0 +1,40 @@ + + + + + + + + Note | SpringVen2s + + + + + + + + + + diff --git a/en/posts/apple/1.html b/en/posts/apple/1.html deleted file mode 100644 index 5b3ace83..00000000 --- a/en/posts/apple/1.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Apple 1 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/apple/2.html b/en/posts/apple/2.html deleted file mode 100644 index 33fe7c73..00000000 --- a/en/posts/apple/2.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Apple 2 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/apple/3.html b/en/posts/apple/3.html deleted file mode 100644 index 121e209c..00000000 --- a/en/posts/apple/3.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Apple 3 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/apple/4.html b/en/posts/apple/4.html deleted file mode 100644 index f6c78aba..00000000 --- a/en/posts/apple/4.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Apple 4 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/apple/index.html b/en/posts/apple/index.html deleted file mode 100644 index 9b2f0807..00000000 --- a/en/posts/apple/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Apple | SpringVen2s - - - - - - - - - - diff --git a/en/posts/banana/1.html b/en/posts/banana/1.html deleted file mode 100644 index 3e232db1..00000000 --- a/en/posts/banana/1.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Banana 1 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/banana/2.html b/en/posts/banana/2.html deleted file mode 100644 index e6be0e0d..00000000 --- a/en/posts/banana/2.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Banana 2 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/banana/3.html b/en/posts/banana/3.html deleted file mode 100644 index e7a51241..00000000 --- a/en/posts/banana/3.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Banana 3 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/banana/4.html b/en/posts/banana/4.html deleted file mode 100644 index a9e1f36e..00000000 --- a/en/posts/banana/4.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Banana 4 | SpringVen2s - - - - - - - - - - diff --git a/en/posts/banana/index.html b/en/posts/banana/index.html deleted file mode 100644 index 05b1b330..00000000 --- a/en/posts/banana/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Banana | SpringVen2s - - - - - - - - - - diff --git a/en/posts/cherry.html b/en/posts/cherry.html deleted file mode 100644 index 034ab8ec..00000000 --- a/en/posts/cherry.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Cherry | SpringVen2s - - - - - - - - - - diff --git a/en/posts/dragonfruit.html b/en/posts/dragonfruit.html deleted file mode 100644 index 1385180a..00000000 --- a/en/posts/dragonfruit.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Dragon Fruit | SpringVen2s - - - - - - - - - - diff --git a/en/posts/index.html b/en/posts/index.html deleted file mode 100644 index 5a531329..00000000 --- a/en/posts/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Posts | SpringVen2s - - - - - - - - - - diff --git a/en/posts/strawberry.html b/en/posts/strawberry.html deleted file mode 100644 index f26b0368..00000000 --- a/en/posts/strawberry.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Strawberry | SpringVen2s - - - - - - - - - - diff --git a/en/posts/tomato.html b/en/posts/tomato.html deleted file mode 100644 index baf38e55..00000000 --- a/en/posts/tomato.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Tomato | SpringVen2s - - - - - - - - - - diff --git a/en/slides.html b/en/slides.html index fe2d7047..18a9c9f0 100644 --- a/en/slides.html +++ b/en/slides.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + +
    - + diff --git a/en/star/index.html b/en/star/index.html index 1a488c5d..303bebfd 100644 --- a/en/star/index.html +++ b/en/star/index.html @@ -30,21 +30,30 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    Skip to main content
    Banana 2

    Banana 2

    -

    A banana article being stared with number 10.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    Tomato

    Tomato

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteVegetableredround
    Apple 2

    Apple 2

    -

    A apple article being stared.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    Page Config

    Content before more comment is regarded as page excerpt.

    -

    Ms.Hope...Less than 1 minuteGuidePage configGuide
    - +
    Skip to main content
    利用GitHub Actions自动部署前端到服务器
    +

    Automatically deploying the Front End to the server using GitHub Actions

    +
    +

    GitHub Actions介绍及原理

    +
      +
    • +

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      +
    • +
    • +

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      +
    • +
    • +

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      +
    • +
    • +

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      +
    • +

    Ven2s...About 6 minlinuxServerFrontEnd
    搭建属于自己的订阅转换链接

    Sub-Web-Modify前端搭建

    +

    本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


    Ven2s...About 5 minlinuxServer
    Page Config

    Content before more comment is regarded as page excerpt.

    +

    Ms.Hope...Less than 1 minuteGuidePage configGuide
    + diff --git a/en/tag/big/index.html b/en/tag/big/index.html deleted file mode 100644 index f9b084f1..00000000 --- a/en/tag/big/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - Tag: big | SpringVen2s - - - - - - -
    Skip to main content
    Dragon Fruit

    Dragon Fruit

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteDragon FruitFruitredbig
    Apple 4

    Apple 4

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleFruitredbiground
    Apple 3

    Apple 3

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleFruitredbiground
    Apple 2

    Apple 2

    -

    A apple article being stared.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    Apple 1

    Apple 1

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    - - - diff --git a/en/tag/blog/index.html b/en/tag/blog/index.html new file mode 100644 index 00000000..d2d02c8f --- /dev/null +++ b/en/tag/blog/index.html @@ -0,0 +1,108 @@ + + + + + + + + Tag: Blog | SpringVen2s + + + + + + +
    Skip to main content
    用Nginx Proxy Manager部署靜態網頁
    +

    Deploying Static Web Pages with Nginx Proxy Manager

    +
    +
      +
    • +

      搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

      +
    • +
    • +

      某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

      +
    • +

    Ven2s...About 2 minlinuxServerBlog
    超酷的Emoji表情!
    +

    Best Markdown Emoji !

    +
    +

    Emoji表情

    +

    风至万始苏

    +

    原文

    +

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    +如"😊",显示为😊


    Ven2s...About 6 minMarkdownBlog
    Hello World
    +

    Build this site Hugo Blog 实战

    +
    + +

    Ven2s...About 15 minServerBlog
    + + + diff --git a/en/tag/chatgpt/index.html b/en/tag/chatgpt/index.html new file mode 100644 index 00000000..636e5c72 --- /dev/null +++ b/en/tag/chatgpt/index.html @@ -0,0 +1,55 @@ + + + + + + + + Tag: ChatGPT | SpringVen2s + + + + + + +
    Skip to main content
    ChatGPT-Porxy
    +

    Build ChatGPT Reverse Proxy

    +
    +
      +
    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。
    • +

    Ven2s...About 2 minlinuxChatGPT
    Wonderful ChatGPT
    +

    3 Steps Build Your Own ChatGPT Web

    +
    +
      +
    • +

      ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。

      +
    • +
    • +

      ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

      +
    • +

    Ven2s...About 2 minlinuxChatGPT
    + + + diff --git a/en/tag/curly/index.html b/en/tag/curly/index.html deleted file mode 100644 index 0b03c87e..00000000 --- a/en/tag/curly/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - Tag: curly | SpringVen2s - - - - - - -
    Skip to main content
    Banana 4

    Banana 4

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananayellowcurlylong
    Banana 3

    Banana 3

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananayellowcurlylong
    Banana 2

    Banana 2

    -

    A banana article being stared with number 10.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    Banana 1

    Banana 1

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    - - - diff --git a/en/tag/ddns/index.html b/en/tag/ddns/index.html new file mode 100644 index 00000000..430efdf4 --- /dev/null +++ b/en/tag/ddns/index.html @@ -0,0 +1,67 @@ + + + + + + + + Tag: DDNS | SpringVen2s + + + + + + +
    Skip to main content
    記錄使用ddns實現內網穿透遠程訪問內網設備
    +

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    +
    +

    前言

    +
      +
    • +

      最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

      +

      Z
      +D
      +B

      +
    • +
    • +

      写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

      +
    • +
    • +

      DDNS(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

      +
    • +
    • +

      Cloudflare 全球知名的DNS服务商。

      +
    • +
    • +

      DDNS-GO 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

      +
    • +
    • +

      公网 IP 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

      +
      RDP
      可以看到这里的延迟十分之低
      +
    • +

    Ven2s...About 4 minHome Network LayoutDDNSNetwork
    + + + diff --git a/en/tag/disable/index.html b/en/tag/disable/index.html index 41c5a80b..7da8af8d 100644 --- a/en/tag/disable/index.html +++ b/en/tag/disable/index.html @@ -30,12 +30,12 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/en/tag/encryption/index.html b/en/tag/encryption/index.html index 0b624e94..eb7d26d2 100644 --- a/en/tag/encryption/index.html +++ b/en/tag/encryption/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/en/tag/frontend/index.html b/en/tag/frontend/index.html new file mode 100644 index 00000000..e4050f15 --- /dev/null +++ b/en/tag/frontend/index.html @@ -0,0 +1,57 @@ + + + + + + + + Tag: FrontEnd | SpringVen2s + + + + + + +
    Skip to main content
    利用GitHub Actions自动部署前端到服务器
    +

    Automatically deploying the Front End to the server using GitHub Actions

    +
    +

    GitHub Actions介绍及原理

    +
      +
    • +

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      +
    • +
    • +

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      +
    • +
    • +

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      +
    • +
    • +

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      +
    • +

    Ven2s...About 6 minlinuxServerFrontEnd
    + + + diff --git a/en/tag/guide/index.html b/en/tag/guide/index.html index 1025ffdf..ffcb30cd 100644 --- a/en/tag/guide/index.html +++ b/en/tag/guide/index.html @@ -30,12 +30,12 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/en/tag/hackintosh/index.html b/en/tag/hackintosh/index.html new file mode 100644 index 00000000..15cbabee --- /dev/null +++ b/en/tag/hackintosh/index.html @@ -0,0 +1,57 @@ + + + + + + + + Tag: Hackintosh | SpringVen2s + + + + + + +
    Skip to main content
    Hackintosh
    +

    Hackintosh Reboot Plan

    +
    +

    闲话 回忆与现在

    +
      +
    • +

      从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

      +
    • +
    • +

      之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

      +
    • +
    • +

      故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

      +
    • +
    • +

      刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

      +
    • +

    Ven2s...About 3 minMacOSHackintosh
    + + + diff --git a/en/tag/index.html b/en/tag/index.html index a1fdf22f..2a28be6c 100644 --- a/en/tag/index.html +++ b/en/tag/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/en/tag/kms/index.html b/en/tag/kms/index.html new file mode 100644 index 00000000..a5b25df3 --- /dev/null +++ b/en/tag/kms/index.html @@ -0,0 +1,53 @@ + + + + + + + + Tag: kms | SpringVen2s + + + + + + +
    Skip to main content
    KMS 服務端安裝部署教程
    +

    KMS Server Installation and Deployment Tutorial

    +
    +

    关于脚本

    +
      +
    • KMS 服务安装完成后会加入开机自启动。
    • +
    • 默认记录日志,其日志位于 /var/log/vlmcsd.log。
    • +
    +

    开始部署

    +
      +
    • 使用 root 用户登录,运行以下命令:
    • +
    +
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    +

    Ven2s...About 5 minHome Network Layoutkmstools
    + + + diff --git a/en/tag/long/index.html b/en/tag/long/index.html deleted file mode 100644 index 96976e40..00000000 --- a/en/tag/long/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - Tag: long | SpringVen2s - - - - - - -
    Skip to main content
    Banana 4

    Banana 4

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananayellowcurlylong
    Banana 3

    Banana 3

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananayellowcurlylong
    Banana 2

    Banana 2

    -

    A banana article being stared with number 10.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    Banana 1

    Banana 1

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    - - - diff --git a/en/tag/markdown/index.html b/en/tag/markdown/index.html index c8b663e8..a052d1ad 100644 --- a/en/tag/markdown/index.html +++ b/en/tag/markdown/index.html @@ -30,13 +30,20 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    Skip to main content
    Markdown Enhance

    VuePress basically generate pages from Markdown files. So you can use it to generate documentation or blog sites easily.

    + - +

    Ven2s...About 3 minGuideMarkdown
    超酷的Emoji表情!
    +

    Best Markdown Emoji !

    +
    +

    Emoji表情

    +

    风至万始苏

    +

    原文

    +

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    +如"😊",显示为😊


    Ven2s...About 6 minMarkdownBlog
    + diff --git a/en/tag/my-birthday/index.html b/en/tag/my-birthday/index.html new file mode 100644 index 00000000..7aed5e6b --- /dev/null +++ b/en/tag/my-birthday/index.html @@ -0,0 +1,40 @@ + + + + + + + + Tag: My Birthday | SpringVen2s + + + + + + + + + + diff --git a/en/tag/network/index.html b/en/tag/network/index.html new file mode 100644 index 00000000..4c7e1be8 --- /dev/null +++ b/en/tag/network/index.html @@ -0,0 +1,67 @@ + + + + + + + + Tag: Network | SpringVen2s + + + + + + +
    Skip to main content
    記錄使用ddns實現內網穿透遠程訪問內網設備
    +

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    +
    +

    前言

    +
      +
    • +

      最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

      +

      Z
      +D
      +B

      +
    • +
    • +

      写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

      +
    • +
    • +

      DDNS(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

      +
    • +
    • +

      Cloudflare 全球知名的DNS服务商。

      +
    • +
    • +

      DDNS-GO 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

      +
    • +
    • +

      公网 IP 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

      +
      RDP
      可以看到这里的延迟十分之低
      +
    • +

    Ven2s...About 4 minHome Network LayoutDDNSNetwork
    + + + diff --git a/en/tag/page-config/index.html b/en/tag/page-config/index.html index d6bc1ea2..771e8454 100644 --- a/en/tag/page-config/index.html +++ b/en/tag/page-config/index.html @@ -30,12 +30,12 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/en/tag/port-forward/index.html b/en/tag/port-forward/index.html new file mode 100644 index 00000000..0b35e51b --- /dev/null +++ b/en/tag/port-forward/index.html @@ -0,0 +1,60 @@ + + + + + + + + Tag: port forward | SpringVen2s + + + + + + +
    Skip to main content
    記錄“複雜”的家庭內網端口轉發
    +

    Internal network port forwarding

    +
    +

    前言

    +
      +
    • +

      在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 ping 了下端口,果然,状态显示是关闭了的。

      +
      1
      😏
      +
    • +
    • +

      来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

      +
    • +
    • +

      其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

      +
    • +
    • +

      综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

      +
      2
      😏
      +
      2
      😏
      +
    • +

    Ven2s...About 3 minHome Network Layoutport forwardnetwork
    + + + diff --git a/en/tag/red/index.html b/en/tag/red/index.html deleted file mode 100644 index 75de2d91..00000000 --- a/en/tag/red/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - Tag: red | SpringVen2s - - - - - - -
    Skip to main content
    Tomato

    Tomato

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteVegetableredround
    Strawberry

    Strawberry

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteFruitStrawberryredsmall
    Dragon Fruit

    Dragon Fruit

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteDragon FruitFruitredbig
    Cherry

    Cherry

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteCherryredsmallround
    Apple 4

    Apple 4

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleFruitredbiground
    Apple 3

    Apple 3

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleFruitredbiground
    Apple 2

    Apple 2

    -

    A apple article being stared.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    Apple 1

    Apple 1

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    - - - diff --git a/en/tag/round/index.html b/en/tag/round/index.html deleted file mode 100644 index 1f6148d8..00000000 --- a/en/tag/round/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - Tag: round | SpringVen2s - - - - - - -
    Skip to main content
    Tomato

    Tomato

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteVegetableredround
    Cherry

    Cherry

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteCherryredsmallround
    Apple 4

    Apple 4

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleFruitredbiground
    Apple 3

    Apple 3

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleFruitredbiground
    Apple 2

    Apple 2

    -

    A apple article being stared.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    Apple 1

    Apple 1

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteAppleredbiground
    - - - diff --git a/en/tag/server/index.html b/en/tag/server/index.html new file mode 100644 index 00000000..1481d638 --- /dev/null +++ b/en/tag/server/index.html @@ -0,0 +1,148 @@ + + + + + + + + Tag: Server | SpringVen2s + + + + + + +
    Skip to main content
    利用GitHub Actions自动部署前端到服务器
    +

    Automatically deploying the Front End to the server using GitHub Actions

    +
    +

    GitHub Actions介绍及原理

    +
      +
    • +

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      +
    • +
    • +

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      +
    • +
    • +

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      +
    • +
    • +

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      +
    • +

    Ven2s...About 6 minlinuxServerFrontEnd
    用Nginx Proxy Manager部署靜態網頁
    +

    Deploying Static Web Pages with Nginx Proxy Manager

    +
    +
      +
    • +

      搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

      +
    • +
    • +

      某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

      +
    • +

    Ven2s...About 2 minlinuxServerBlog
    搭建属于自己的订阅转换链接

    Sub-Web-Modify前端搭建

    +

    本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


    Ven2s...About 5 minlinuxServer
    Hello World
    +

    Build this site Hugo Blog 实战

    +
    + +

    Ven2s...About 15 minServerBlog
    + + + diff --git a/en/tag/small/index.html b/en/tag/small/index.html deleted file mode 100644 index 19394d8c..00000000 --- a/en/tag/small/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - Tag: small | SpringVen2s - - - - - - - - - - diff --git a/en/tag/tools/index.html b/en/tag/tools/index.html new file mode 100644 index 00000000..b8220f9f --- /dev/null +++ b/en/tag/tools/index.html @@ -0,0 +1,58 @@ + + + + + + + + Tag: Tools | SpringVen2s + + + + + + + + + + diff --git a/en/tag/yellow/index.html b/en/tag/yellow/index.html deleted file mode 100644 index 10f1d29b..00000000 --- a/en/tag/yellow/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - Tag: yellow | SpringVen2s - - - - - - -
    Skip to main content
    Banana 4

    Banana 4

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananayellowcurlylong
    Banana 3

    Banana 3

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananayellowcurlylong
    Banana 2

    Banana 2

    -

    A banana article being stared with number 10.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    Banana 1

    Banana 1

    -

    Heading 2

    -

    Here is the content.

    -

    Heading 3

    -

    Here is the content.

    -

    Ven2s...Less than 1 minuteBananaFruityellowcurlylong
    - - - diff --git "a/en/tag/\345\234\206/index.html" "b/en/tag/\345\234\206/index.html" new file mode 100644 index 00000000..c3060fcd --- /dev/null +++ "b/en/tag/\345\234\206/index.html" @@ -0,0 +1,45 @@ + + + + + + + + Tag: 圆 | SpringVen2s + + + + + + + + + + diff --git "a/en/tag/\345\244\247/index.html" "b/en/tag/\345\244\247/index.html" new file mode 100644 index 00000000..31bc31cf --- /dev/null +++ "b/en/tag/\345\244\247/index.html" @@ -0,0 +1,45 @@ + + + + + + + + Tag: 大 | SpringVen2s + + + + + + + + + + diff --git "a/en/tag/\346\230\223/index.html" "b/en/tag/\346\230\223/index.html" new file mode 100644 index 00000000..9569d1ca --- /dev/null +++ "b/en/tag/\346\230\223/index.html" @@ -0,0 +1,40 @@ + + + + + + + + Tag: 易 | SpringVen2s + + + + + + + + + + diff --git "a/en/tag/\347\272\242/index.html" "b/en/tag/\347\272\242/index.html" new file mode 100644 index 00000000..af9cf60b --- /dev/null +++ "b/en/tag/\347\272\242/index.html" @@ -0,0 +1,45 @@ + + + + + + + + Tag: 红 | SpringVen2s + + + + + + + + + + diff --git a/en/timeline/index.html b/en/timeline/index.html index 207b4686..73b76ea0 100644 --- a/en/timeline/index.html +++ b/en/timeline/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/index.html b/index.html index 8d07c8f6..3f106982 100644 --- a/index.html +++ b/index.html @@ -30,8 +30,8 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + +
    跳至主要內容
    風至萬始蘇

    風至萬始蘇

    風至萬始蘇

    项目名称
    项目详细描述
    链接名称
    链接详细描述
    书籍名称
    书籍详细描述
    Hello World
    千里之行始於足下
    Sia
    愛人
    自定义项目
    自定义项目
    自定义详细介绍
    番茄

    番茄

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小於 1 分鐘蔬菜
    页面配置

    more 注释之前的内容被视为文章摘要。

    +

    Ven2s...大约 6 分鐘linuxServerFrontEnd
    页面配置

    more 注释之前的内容被视为文章摘要。


    Ms.Hope...大约 1 分鐘使用指南页面配置使用指南
    介绍页

    介绍页

    将你的个人介绍和档案放置在此处。


    Ven2s...小於 1 分鐘
    幻灯片页
    @@ -100,7 +95,12 @@

    开始部署

  • 使用 root 用户登录,运行以下命令:
  • wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    -

    Ven2s...大约 5 分鐘Home Network Layoutkmstools
    2
    3

    这是一个博客主页的案例。

    要使用此布局,你应该在页面前端设置 layout: BlogHomehome: true

    相关配置文档请见 博客主页open in new window

    - +
    Ven2s...大约 5 分鐘Home Network Layoutkmstools
    ChatGPT-Porxy
    +

    Build ChatGPT Reverse Proxy

    +
    +
      +
    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。
    • +

    Ven2s...大约 2 分鐘linuxChatGPT
    2
    3

    这是一个博客主页的案例。

    要使用此布局,你应该在页面前端设置 layout: BlogHomehome: true

    相关配置文档请见 博客主页open in new window

    + diff --git a/intro.html b/intro.html index 8e065404..f6b77a10 100644 --- a/intro.html +++ b/intro.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    介绍页

    介绍页

    Ven2s...小於 1 分鐘

    介绍页

    将你的个人介绍和档案放置在此处。

    Comments
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    - + + diff --git a/note/1.html b/note/1.html index 12718ab5..dffc60c7 100644 --- a/note/1.html +++ b/note/1.html @@ -5,7 +5,7 @@ - 苹果 1 | 風至萬始蘇 + 苹果 1 | 風至萬始蘇 - - - - - -
    跳至主要內容

    香蕉 2

    Ven2s...小於 1 分鐘香蕉水果弯曲的

    香蕉 2

    一个被数字 10 星标了的香蕉文章。

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    Comments
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    - - - diff --git a/posts/banana/index.html b/posts/banana/index.html deleted file mode 100644 index c3daa604..00000000 --- a/posts/banana/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Banana | 風至萬始蘇 - - - - - - -
    跳至主要內容

    Banana

    Ven2s...小於 1 分鐘

    目錄

    香蕉 2

    Comments
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    - - - diff --git a/posts/index.html b/posts/index.html deleted file mode 100644 index 693c4755..00000000 --- a/posts/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Posts | 風至萬始蘇 - - - - - - -
    跳至主要內容

    Posts

    Ven2s...小於 1 分鐘

    Comments
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    - - - diff --git a/posts/tomato.html b/posts/tomato.html deleted file mode 100644 index 9c9f859b..00000000 --- a/posts/tomato.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 番茄 | 風至萬始蘇 - - - - - - -
    跳至主要內容
    番茄

    番茄

    Ven2s...小於 1 分鐘蔬菜

    番茄

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    Comments
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    - - - diff --git a/sitemap.xml b/sitemap.xml index 04056fd4..f8a68ef2 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,3 +1,3 @@ -https://luvsia.com/2023-10-29T23:32:49.000Zdailyhttps://luvsia.com/intro.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/slides.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/code/beautification.html2023-10-29T23:09:45.000Zdailyhttps://luvsia.com/code/best-emoji.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/build-sub.html2023-10-30T08:00:20.000Zdailyhttps://luvsia.com/code/chatgpt-porxy.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/chatgpt.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/ddns.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/github-actions-deploy.html2023-10-30T00:12:28.000Zdailyhttps://luvsia.com/code/github-tools.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/hackintosh.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/hello-world.html2023-10-29T23:32:49.000Zdailyhttps://luvsia.com/code/kms.html2023-10-30T08:36:27.000Zdailyhttps://luvsia.com/code/nginx-proxy-manager.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/port-forwarding.html2023-10-30T08:36:27.000Zdailyhttps://luvsia.com/code/server-building.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/demo/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/disable.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/encrypt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/markdown.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/page.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/intro.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/slides.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/note/1.html2023-10-29T23:09:45.000Zdailyhttps://luvsia.com/note/1993.html2023-10-29T23:56:29.000Zdailyhttps://luvsia.com/posts/tomato.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/intro.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/slides.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/disable.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/encrypt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/markdown.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/page.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/cherry.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/dragonfruit.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/strawberry.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/tomato.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/posts/banana/2.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/disable.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/encrypt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/markdown.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/page.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/cherry.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/dragonfruit.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/strawberry.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/tomato.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/apple/1.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/apple/2.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/apple/3.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/apple/4.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/banana/1.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/banana/2.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/banana/3.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/posts/banana/4.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Linux/1993.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Linux/Best-Emoji.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Linux/beautification.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/MacOS/Hackintosh.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/1.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/2.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/ChatGPT-Porxy.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/buildSUB.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/chatgpt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/github-actions-deploy.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/hello-world.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/nginx-proxy-manager.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Server/server-building.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Windows/DDNS.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Windows/github-tools.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Windows/kms.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/posts/Windows/port-forwarding.html2023-10-27T18:37:19.000Zdaily \ No newline at end of file +https://luvsia.com/2023-10-29T23:32:49.000Zdailyhttps://luvsia.com/intro.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/slides.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/code/beautification.html2023-10-29T23:09:45.000Zdailyhttps://luvsia.com/code/best-emoji.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/build-sub.html2023-10-30T08:00:20.000Zdailyhttps://luvsia.com/code/chatgpt-porxy.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/chatgpt.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/ddns.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/github-actions-deploy.html2023-10-30T00:12:28.000Zdailyhttps://luvsia.com/code/github-tools.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/hackintosh.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/hello-world.html2023-10-29T23:32:49.000Zdailyhttps://luvsia.com/code/kms.html2023-10-30T08:36:27.000Zdailyhttps://luvsia.com/code/nginx-proxy-manager.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/code/port-forwarding.html2023-10-30T08:36:27.000Zdailyhttps://luvsia.com/code/server-building.html2023-10-30T08:45:58.000Zdailyhttps://luvsia.com/demo/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/disable.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/encrypt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/markdown.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/demo/page.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/intro.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/slides.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/note/1.html2023-10-29T23:09:45.000Zdailyhttps://luvsia.com/note/1993.html2023-10-29T23:56:29.000Zdailyhttps://luvsia.com/zh/2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/intro.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/slides.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/code/beautification.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/best-emoji.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/build-sub.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/chatgpt-porxy.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/chatgpt.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/ddns.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/github-actions-deploy.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/github-tools.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/hackintosh.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/hello-world.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/kms.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/nginx-proxy-manager.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/port-forwarding.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/code/server-building.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/demo/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/disable.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/encrypt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/markdown.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/demo/page.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/en/note/1.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/en/note/1993.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/beautification.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/best-emoji.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/build-sub.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/chatgpt-porxy.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/chatgpt.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/ddns.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/github-actions-deploy.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/github-tools.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/hackintosh.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/hello-world.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/kms.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/nginx-proxy-manager.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/port-forwarding.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/code/server-building.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/demo/2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/disable.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/encrypt.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/markdown.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/demo/page.html2023-10-27T18:37:19.000Zdailyhttps://luvsia.com/zh/note/1.html2023-11-02T20:28:27.000Zdailyhttps://luvsia.com/zh/note/1993.html2023-11-02T20:28:27.000Zdaily \ No newline at end of file diff --git a/slides.html b/slides.html index 0113034a..9d392e69 100644 --- a/slides.html +++ b/slides.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + +
    - + diff --git a/star/index.html b/star/index.html index 37d3f080..192e320b 100644 --- a/star/index.html +++ b/star/index.html @@ -30,13 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    香蕉 2

    香蕉 2

    -

    一个被数字 10 星标了的香蕉文章。

    -

    Ven2s...小於 1 分鐘香蕉水果弯曲的
    利用GitHub Actions自动部署前端到服务器
    +
    跳至主要內容
    利用GitHub Actions自动部署前端到服务器

    Automatically deploying the Front End to the server using GitHub Actions

    GitHub Actions介绍及原理

    @@ -54,13 +52,8 @@

    GitHub Actions介绍及原理

    本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。


    Ven2s...大约 6 分鐘linuxServerFrontEnd
    搭建属于自己的订阅转换链接

    Sub-Web-Modify前端搭建

    -

    本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


    Ven2s...大约 5 分鐘linuxServer
    番茄

    番茄

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小於 1 分鐘蔬菜
    页面配置

    more 注释之前的内容被视为文章摘要。

    -

    Ms.Hope...大约 1 分鐘使用指南页面配置使用指南
    - +

    本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


    Ven2s...大约 5 分鐘linuxServer
    页面配置

    more 注释之前的内容被视为文章摘要。

    +

    Ms.Hope...大约 1 分鐘使用指南页面配置使用指南
    + diff --git a/tag/blog/index.html b/tag/blog/index.html index 127966cd..92ed1402 100644 --- a/tag/blog/index.html +++ b/tag/blog/index.html @@ -5,7 +5,7 @@ - 標籤: Blog | 風至萬始蘇 + 標籤: Blog | 風至萬始蘇 - - - - - - - - - diff --git "a/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" "b/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" index 518228af..ecbf41de 100644 --- "a/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" +++ "b/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git "a/tag/\346\230\223/index.html" "b/tag/\346\230\223/index.html" index ad24573f..99dfb051 100644 --- "a/tag/\346\230\223/index.html" +++ "b/tag/\346\230\223/index.html" @@ -5,7 +5,7 @@ - 標籤: 易 | 風至萬始蘇 + 標籤: 易 | 風至萬始蘇 - - - - - - - - - diff --git "a/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" "b/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" index 37a883cd..f74d429f 100644 --- "a/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" +++ "b/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" @@ -30,12 +30,12 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git "a/tag/\351\273\204/index.html" "b/tag/\351\273\204/index.html" deleted file mode 100644 index 35993745..00000000 --- "a/tag/\351\273\204/index.html" +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - 標籤: 黄 | 風至萬始蘇 - - - - - - - - - - diff --git a/timeline/index.html b/timeline/index.html index 9068eb17..2932d7ff 100644 --- a/timeline/index.html +++ b/timeline/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/article/index.html b/zh/article/index.html index 2e12b3cb..009b870e 100644 --- a/zh/article/index.html +++ b/zh/article/index.html @@ -30,16 +30,28 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    番茄

    番茄

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小于 1 分钟蔬菜
    页面配置

    more 注释之前的内容被视为文章摘要。

    +
    跳至主要內容
    利用GitHub Actions自动部署前端到服务器
    +

    Automatically deploying the Front End to the server using GitHub Actions

    +
    +

    GitHub Actions介绍及原理

    +
      +
    • +

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      +
    • +
    • +

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      +
    • +
    • +

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      +
    • +
    • +

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      +
    • +

    Ven2s...大约 6 分钟linuxServerFrontEnd
    页面配置

    more 注释之前的内容被视为文章摘要。


    Ms.Hope...大约 1 分钟使用指南页面配置使用指南
    介绍页

    介绍页

    将你的个人介绍和档案放置在此处。


    Ven2s...小于 1 分钟
    布局与功能禁用

    你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。


    Ven2s...小于 1 分钟使用指南禁用
    Markdown 展示

    VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

    你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

    -

    Ven2s...大约 3 分钟使用指南Markdown
    利用GitHub Actions自动部署前端到服务器
    -

    Automatically deploying the Front End to the server using GitHub Actions

    -
    -

    GitHub Actions介绍及原理

    -
      -
    • -

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      -
    • -
    • -

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      -
    • -
    • -

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      -
    • -
    • -

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      -
    • -

    Ven2s...大约 6 分钟ServerFrontEnd
    KMS 服務端安裝部署教程

    KMS Server Installation and Deployment Tutorial

    关于脚本

    @@ -100,7 +95,12 @@

    开始部署

  • 使用 root 用户登录,运行以下命令:
  • wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    -

    Ven2s...大约 5 分钟kmstools
    2
    3
    - +

    Ven2s...大约 5 分钟Home Network Layoutkmstools
    ChatGPT-Porxy
    +

    Build ChatGPT Reverse Proxy

    +
    +
      +
    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。
    • +

    Ven2s...大约 2 分钟linuxChatGPT
    2
    3
    + diff --git a/zh/category/home-network-layout/index.html b/zh/category/home-network-layout/index.html new file mode 100644 index 00000000..8caf6d61 --- /dev/null +++ b/zh/category/home-network-layout/index.html @@ -0,0 +1,100 @@ + + + + + + + + Home Network Layout 分类 | 风至万始苏 + + + + + + +
    跳至主要內容
    KMS 服務端安裝部署教程
    +

    KMS Server Installation and Deployment Tutorial

    +
    +

    关于脚本

    +
      +
    • KMS 服务安装完成后会加入开机自启动。
    • +
    • 默认记录日志,其日志位于 /var/log/vlmcsd.log。
    • +
    +

    开始部署

    +
      +
    • 使用 root 用户登录,运行以下命令:
    • +
    +
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    +

    Ven2s...大约 5 分钟Home Network Layoutkmstools
    記錄“複雜”的家庭內網端口轉發
    +

    Internal network port forwarding

    +
    +

    前言

    +
      +
    • +

      在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 ping 了下端口,果然,状态显示是关闭了的。

      +
      1
      😏
      +
    • +
    • +

      来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

      +
    • +
    • +

      其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

      +
    • +
    • +

      综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

      +
      2
      😏
      +
      2
      😏
      +
    • +

    Ven2s...大约 3 分钟Home Network Layoutport forwardnetwork
    記錄使用ddns實現內網穿透遠程訪問內網設備
    +

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    +
    +

    前言

    +
      +
    • +

      最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

      +

      Z
      +D
      +B

      +
    • +
    • +

      写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

      +
    • +
    • +

      DDNS(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

      +
    • +
    • +

      Cloudflare 全球知名的DNS服务商。

      +
    • +
    • +

      DDNS-GO 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

      +
    • +
    • +

      公网 IP 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

      +
      RDP
      可以看到这里的延迟十分之低
      +
    • +

    Ven2s...大约 4 分钟Home Network LayoutDDNSNetwork
    + + + diff --git a/zh/category/index.html b/zh/category/index.html index e11cdb06..bb237dee 100644 --- a/zh/category/index.html +++ b/zh/category/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/category/linux/index.html b/zh/category/linux/index.html new file mode 100644 index 00000000..7843f7f2 --- /dev/null +++ b/zh/category/linux/index.html @@ -0,0 +1,115 @@ + + + + + + + + linux 分类 | 风至万始苏 + + + + + + +
    跳至主要內容
    利用GitHub Actions自动部署前端到服务器
    +

    Automatically deploying the Front End to the server using GitHub Actions

    +
    +

    GitHub Actions介绍及原理

    +
      +
    • +

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      +
    • +
    • +

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      +
    • +
    • +

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      +
    • +
    • +

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      +
    • +

    Ven2s...大约 6 分钟linuxServerFrontEnd
    ChatGPT-Porxy
    +

    Build ChatGPT Reverse Proxy

    +
    +
      +
    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。
    • +

    Ven2s...大约 2 分钟linuxChatGPT
    用Nginx Proxy Manager部署靜態網頁
    +

    Deploying Static Web Pages with Nginx Proxy Manager

    +
    +
      +
    • +

      搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

      +
    • +
    • +

      某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

      +
    • +

    Ven2s...大约 2 分钟linuxServerBlog
    Wonderful ChatGPT
    +

    3 Steps Build Your Own ChatGPT Web

    +
    +
      +
    • +

      ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。

      +
    • +
    • +

      ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

      +
    • +

    Ven2s...大约 2 分钟linuxChatGPT
    搭建属于自己的订阅转换链接

    Sub-Web-Modify前端搭建

    +

    本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


    Ven2s...大约 5 分钟linuxServer
    + + + diff --git a/zh/category/macos/index.html b/zh/category/macos/index.html new file mode 100644 index 00000000..14516dbd --- /dev/null +++ b/zh/category/macos/index.html @@ -0,0 +1,57 @@ + + + + + + + + MacOS 分类 | 风至万始苏 + + + + + + +
    跳至主要內容
    Hackintosh
    +

    Hackintosh Reboot Plan

    +
    +

    闲话 回忆与现在

    +
      +
    • +

      从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

      +
    • +
    • +

      之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

      +
    • +
    • +

      故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

      +
    • +
    • +

      刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

      +
    • +

    Ven2s...大约 3 分钟MacOSHackintosh
    + + + diff --git a/zh/category/windows/index.html b/zh/category/windows/index.html new file mode 100644 index 00000000..f9c5a63e --- /dev/null +++ b/zh/category/windows/index.html @@ -0,0 +1,58 @@ + + + + + + + + Windows 分类 | 风至万始苏 + + + + + + + + + + diff --git "a/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" "b/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" index 598b95bd..411a0a00 100644 --- "a/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" +++ "b/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    页面配置

    more 注释之前的内容被视为文章摘要。

    +
    跳至主要內容
    页面配置

    more 注释之前的内容被视为文章摘要。


    Ms.Hope...大约 1 分钟使用指南页面配置使用指南
    布局与功能禁用

    你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。


    Ven2s...小于 1 分钟使用指南禁用
    Markdown 展示

    VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

    你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

    -

    Ven2s...大约 3 分钟使用指南Markdown
    - +

    Ven2s...大约 3 分钟使用指南Markdown
    + diff --git "a/zh/category/\345\273\272\347\253\231/index.html" "b/zh/category/\345\273\272\347\253\231/index.html" deleted file mode 100644 index 76877e4a..00000000 --- "a/zh/category/\345\273\272\347\253\231/index.html" +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - 建站 分类 | 风至万始苏 - - - - - - - - - - diff --git "a/zh/category/\346\250\261\346\241\203/index.html" "b/zh/category/\346\250\261\346\241\203/index.html" deleted file mode 100644 index 3db3156d..00000000 --- "a/zh/category/\346\250\261\346\241\203/index.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - 樱桃 分类 | 风至万始苏 - - - - - - - - - - diff --git "a/zh/category/\346\260\264\346\236\234/index.html" "b/zh/category/\346\260\264\346\236\234/index.html" deleted file mode 100644 index f2e72e7d..00000000 --- "a/zh/category/\346\260\264\346\236\234/index.html" +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - 水果 分类 | 风至万始苏 - - - - - - - - - - diff --git "a/zh/category/\347\201\253\351\276\231\346\236\234/index.html" "b/zh/category/\347\201\253\351\276\231\346\236\234/index.html" deleted file mode 100644 index f1739f91..00000000 --- "a/zh/category/\347\201\253\351\276\231\346\236\234/index.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - 火龙果 分类 | 风至万始苏 - - - - - - - - - - diff --git "a/zh/category/\350\213\271\346\236\234/index.html" "b/zh/category/\350\213\271\346\236\234/index.html" index a61a4702..fe13eb59 100644 --- "a/zh/category/\350\213\271\346\236\234/index.html" +++ "b/zh/category/\350\213\271\346\236\234/index.html" @@ -30,18 +30,16 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    + diff --git "a/zh/category/\350\215\211\350\216\223/index.html" "b/zh/category/\350\215\211\350\216\223/index.html" deleted file mode 100644 index f2df5ca2..00000000 --- "a/zh/category/\350\215\211\350\216\223/index.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - 草莓 分类 | 风至万始苏 - - - - - - - - - - diff --git "a/zh/category/\350\224\254\350\217\234/index.html" "b/zh/category/\350\224\254\350\217\234/index.html" deleted file mode 100644 index ce56a56c..00000000 --- "a/zh/category/\350\224\254\350\217\234/index.html" +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - 蔬菜 分类 | 风至万始苏 - - - - - - - - - - diff --git a/zh/code/beautification.html b/zh/code/beautification.html new file mode 100644 index 00000000..9fd29baf --- /dev/null +++ b/zh/code/beautification.html @@ -0,0 +1,40 @@ + + + + + + + + 萌萌哒的看板娘 | 风至万始苏 + + + + + + + + + + diff --git a/zh/code/best-emoji.html b/zh/code/best-emoji.html new file mode 100644 index 00000000..dd61033d --- /dev/null +++ b/zh/code/best-emoji.html @@ -0,0 +1,40 @@ + + + + + + + + 超酷的Emoji表情! | 风至万始苏 + + + + + + +
    跳至主要內容

    超酷的Emoji表情!

    Ven2s...大约 6 分钟MarkdownBlog

    Best Markdown Emoji !

    Emoji表情

    风至万始苏

    原文open in new window

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    如"😊",显示为😊

    人物

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bowtie::bowtie::smile:😄:laughing:😆
    :blush:😊:smiley:😃:relaxed:☺️
    :smirk:😏:heart_eyes:😍:kissing_heart:😘
    :kissing_closed_eyes:😚:flushed:😳:relieved:😌
    :satisfied:😆:grin:😁:wink:😉
    :stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
    :kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
    :sleeping:😴:worried:😟:frowning:😦
    :anguished:😧:open_mouth:😮:grimacing:😬
    :confused:😕:hushed:😯:expressionless:😑
    :unamused:😒:sweat_smile:😅:sweat:😓
    :disappointed_relieved:😥:weary:😩:pensive:😔
    :disappointed:😞:confounded:😖:fearful:😨
    :cold_sweat:😰:persevere:😣:cry:😢
    :sob:😭:joy:😂:astonished:😲
    :scream:😱:neckbeard::neckbeard::tired_face:😫
    :angry:😠:rage:😡:triumph:😤
    :sleepy:😪:yum:😋:mask:😷
    :sunglasses:😎:dizzy_face:😵:imp:👿
    :smiling_imp:😈:neutral_face:😐:no_mouth:😶
    :innocent:😇:alien:👽:yellow_heart:💛
    :blue_heart:💙:purple_heart:💜:heart:❤️
    :green_heart:💚:broken_heart:💔:heartbeat:💓
    :heartpulse:💗:two_hearts:💕:revolving_hearts:💞
    :cupid:💘:sparkling_heart:💖:sparkles:
    :star::star2:🌟:dizzy:💫
    :boom:💥:collision:💥:anger:💢
    :exclamation::question::grey_exclamation:
    :grey_question::zzz:💤:dash:💨
    :sweat_drops:💦:notes:🎶:musical_note:🎵
    :fire:🔥:hankey:💩:poop:💩
    ::💩:+1:👍:thumbsup:👍
    :-1:👎:thumbsdown:👎:ok_hand:👌
    :punch:👊:facepunch:👊:fist:
    :v:✌️:wave:👋:hand:
    :raised_hand::open_hands:👐:point_up:☝️
    :point_down:👇:point_left:👈:point_right:👉
    :raised_hands:🙌:pray:🙏:point_up_2:👆
    :clap:👏:muscle:💪:metal:🤘
    :fu:🖕:walking:🚶:runner:🏃
    :running:🏃:couple:👫:family:👪
    :two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
    :dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
    :information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
    :person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
    :couplekiss:💏:couple_with_heart:💑:massage:💆
    :haircut:💇:nail_care:💅:boy:👦
    :girl:👧:woman:👩:man:👨
    :baby:👶:older_woman:👵:older_man:👴
    :person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
    :construction_worker:👷:cop:👮:angel:👼
    :princess:👸:smiley_cat:😺:smile_cat:😸
    :heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
    :scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
    :pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
    :see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
    :guardsman:💂‍♂️:skull:💀:feet:🐾
    :lips:👄:kiss:💋:droplet:💧
    :ear:👂:eyes:👀:nose:👃
    :tongue:👅:love_letter:💌:bust_in_silhouette:👤
    :busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
    :feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
    :godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
    :rage2::rage2::rage3::rage3::rage4::rage4:
    :suspect::suspect::trollface::trollface:

    自然

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :sunny:☀️:umbrella::cloud:☁️
    :snowflake:❄️:snowman::zap:
    :cyclone:🌀:foggy:🌁:ocean:🌊
    :cat:🐱:dog:🐶:mouse:🐭
    :hamster:🐹:rabbit:🐰:wolf:🐺
    :frog:🐸:tiger:🐯:koala:🐨
    :bear:🐻:pig:🐷:pig_nose:🐽
    :cow:🐮:boar:🐗:monkey_face:🐵
    :monkey:🐒:horse:🐴:racehorse:🐎
    :camel:🐫:sheep:🐑:elephant:🐘
    :panda_face:🐼:snake:🐍:bird:🐦
    :baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
    :chicken:🐔:penguin:🐧:turtle:🐢
    :bug:🐛:honeybee:🐝:ant:🐜
    :beetle:🪲:snail:🐌:octopus:🐙
    :tropical_fish:🐠:fish:🐟:whale:🐳
    :whale2:🐋:dolphin:🐬:cow2:🐄
    :ram:🐏:rat:🐀:water_buffalo:🐃
    :tiger2:🐅:rabbit2:🐇:dragon:🐉
    :goat:🐐:rooster:🐓:dog2:🐕
    :pig2:🐖:mouse2:🐁:ox:🐂
    :dragon_face:🐲:blowfish:🐡:crocodile:🐊
    :dromedary_camel:🐪:leopard:🐆:cat2:🐈
    :poodle:🐩:paw_prints:🐾:bouquet:💐
    :cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
    :rose:🌹:sunflower:🌻:hibiscus:🌺
    :maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
    :herb:🌿:mushroom:🍄:cactus:🌵
    :palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
    :chestnut:🌰:seedling:🌱:blossom:🌼
    :ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
    :sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
    :new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
    :full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
    :waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
    :moon:🌔:earth_africa:🌍:earth_americas:🌎
    :earth_asia:🌏:volcano:🌋:milky_way:🌌
    :partly_sunny::octocat::octocat::squirrel::squirrel:
    :waxing_gibbous_moon:🌔

    物体

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bamboo:🎍:gift_heart:💝:dolls:🎎
    :school_satchel:🎒:mortar_board:🎓:flags:🎏
    :fireworks:🎆:sparkler:🎇:wind_chime:🎐
    :rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
    :santa:🎅:christmas_tree:🎄:gift:🎁
    :bell:🔔:no_bell:🔕:tanabata_tree:🎋
    :tada:🎉:confetti_ball:🎊:balloon:🎈
    :crystal_ball:🔮:cd:💿:dvd:📀
    :floppy_disk:💾:camera:📷:video_camera:📹
    :movie_camera:🎥:computer:💻:tv:📺
    :iphone:📱:phone:☎️:telephone:☎️
    :telephone_receiver:📞:pager:📟:fax:📠
    :minidisc:💽:vhs:📼:sound:🔉
    :speaker:🔈:mute:🔇:loudspeaker:📢
    :mega:📣:hourglass::hourglass_flowing_sand:
    :alarm_clock::watch::radio:📻
    :satellite:📡:loop::mag:🔍
    :mag_right:🔎:unlock:🔓:lock:🔒
    :lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
    :bulb:💡:flashlight:🔦:high_brightness:🔆
    :low_brightness:🔅:electric_plug:🔌:battery:🔋
    :calling:📲:email:📧:mailbox:📫
    :postbox:📮:bath:🛀:bathtub:🛁
    :shower:🚿:toilet:🚽:wrench:🔧
    :nut_and_bolt:🔩:hammer:🔨:seat:💺
    :moneybag:💰:yen:💴:dollar:💵
    :pound:💷:euro:💶:credit_card:💳
    :money_with_wings:💸:e-mail:📧:inbox_tray:📥
    :outbox_tray:📤:envelope:✉️:incoming_envelope:📨
    :postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
    :mailbox_with_no_mail:📭:door:🚪:smoking:🚬
    :bomb:💣:gun:🔫:hocho:🔪
    :pill:💊:syringe:💉:page_facing_up:📄
    :page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
    :chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
    :clipboard:📋:calendar:📆:date:📅
    :card_index:📇:file_folder:📁:open_file_folder:📂
    :scissors:✂️:pushpin:📌:paperclip:📎
    :black_nib:✒️:pencil2:✏️:straight_ruler:📏
    :triangular_ruler:📐:closed_book:📕:green_book:📗
    :blue_book:📘:orange_book:📙:notebook:📓
    :notebook_with_decorative_cover:📔:ledger:📒:books:📚
    :bookmark:🔖:microscope:🔬:telescope:🔭
    :name_badge:📛:newspaper:📰:football:🏈
    :basketball:🏀:soccer::baseball:
    :tennis:🎾:8ball:🎱:rugby_football:🏉
    :bowling:🎳:golf::mountain_bicyclist:🚵
    :bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
    :swimmer:🏊:surfer:🏄:ski:🎿
    :spades:♠️:hearts:♥️:clubs:♣️
    :diamonds:♦️:gem:💎:ring:💍
    :trophy:🏆:musical_score:🎼:musical_keyboard:🎹
    :violin:🎻:space_invader:👾:video_game:🎮
    :black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
    :dart:🎯:mahjong:🀄:clapper:🎬
    :memo:📝:pencil:📝:book:📖
    :art:🎨:microphone:🎤:headphones:🎧
    :trumpet:🎺:saxophone:🎷:guitar:🎸
    :shoe:👞:sandal:👡:high_heel:👠
    :lipstick:💄:boot:👢:shirt:👕
    :tshirt:👕:necktie:👔:womans_clothes:👚
    :dress:👗:running_shirt_with_sash:🎽:jeans:👖
    :kimono:👘:bikini:👙:ribbon:🎀
    :tophat:🎩:crown:👑:womans_hat:👒
    :mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
    :handbag:👜:pouch:👝:purse:👛
    :eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
    :tea:🍵:sake:🍶:baby_bottle:🍼
    :beer:🍺:beers:🍻:cocktail:🍸
    :tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
    :pizza:🍕:hamburger:🍔:fries:🍟
    :poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
    :curry:🍛:fried_shrimp:🍤:bento:🍱
    :sushi:🍣:fish_cake:🍥:rice_ball:🍙
    :rice_cracker:🍘:rice:🍚:ramen:🍜
    :stew:🍲:oden:🍢:dango:🍡
    :egg:🥚:bread:🍞:doughnut:🍩
    :custard:🍮:icecream:🍦:ice_cream:🍨
    :shaved_ice:🍧:birthday:🎂:cake:🍰
    :cookie:🍪:chocolate_bar:🍫:candy:🍬
    :lollipop:🍭:honey_pot:🍯:apple:🍎
    :green_apple:🍏:tangerine:🍊:lemon:🍋
    :cherries:🍒:grapes:🍇:watermelon:🍉
    :strawberry:🍓:peach:🍑:melon:🍈
    :banana:🍌:pear:🍐:pineapple:🍍
    :sweet_potato:🍠:eggplant:🍆:tomato:🍅
    :corn:🌽

    地点

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :house:🏠:house_with_garden:🏡:school:🏫
    :office:🏢:post_office:🏣:hospital:🏥
    :bank:🏦:convenience_store:🏪:love_hotel:🏩
    :hotel:🏨:wedding:💒:church:
    :department_store:🏬:european_post_office:🏤:city_sunrise:🌇
    :city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
    :tent::factory:🏭:tokyo_tower:🗼
    :japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
    :sunrise:🌅:stars:🌠:statue_of_liberty:🗽
    :bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
    :ferris_wheel:🎡:fountain::roller_coaster:🎢
    :ship:🚢:speedboat:🚤:boat:
    :sailboat::rowboat:🚣:anchor:
    :rocket:🚀:airplane:✈️:helicopter:🚁
    :steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
    :bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
    :mountain_cableway:🚠:tractor:🚜:blue_car:🚙
    :oncoming_automobile:🚘:car:🚗:red_car:🚗
    :taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
    :bus:🚌:oncoming_bus:🚍:rotating_light:🚨
    :police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
    :ambulance:🚑:minibus:🚐:truck:🚚
    :train:🚋:station:🚉:train2:🚆
    :bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
    :monorail:🚝:railway_car:🚃:trolleybus:🚎
    :ticket:🎫:fuelpump::vertical_traffic_light:🚦
    :traffic_light:🚥:warning:⚠️:construction:🚧
    :beginner:🔰:atm:🏧:slot_machine:🎰
    :busstop:🚏:barber:💈:hotsprings:♨️
    :checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
    :moyai:🗿:circus_tent:🎪:performing_arts:🎭
    :round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
    :kr:🇰🇷:cn:🇨🇳:us:🇺🇸
    :fr:🇫🇷:es:🇪🇸:it:🇮🇹
    :ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
    :de:🇩🇪

    符号

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :one:1️⃣:two:2️⃣:three:3️⃣
    :four:4️⃣:five:5️⃣:six:6️⃣
    :seven:7️⃣:eight:8️⃣:nine:9️⃣
    :keycap_ten:🔟:1234:🔢:zero:0️⃣
    :hash:#️⃣:symbols:🔣:arrow_backward:◀️
    :arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
    :capital_abcd:🔠:abcd:🔡:abc:🔤
    :arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
    :arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
    :arrow_double_down::arrow_double_up::arrow_down_small:🔽
    :arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
    :arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
    :arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
    :rewind::fast_forward::information_source:ℹ️
    :ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
    :repeat_one:🔂:new:🆕:top:🔝
    :up:🆙:cool:🆒:free:🆓
    :ng:🆖:cinema:🎦:koko:🈁
    :signal_strength:📶:u5272::u5272::u5408::u5408:
    :u55b6::u55b6::u6307::u6307::u6708::u6708:
    :u6709::u6709::u6e80:🈵:u7121::u7121:
    :u7533::u7533::u7a7a::u7a7a::u7981::u7981:
    :sa:🈂️:restroom:🚻:mens:🚹
    :womens:🚺:baby_symbol:🚼:no_smoking:🚭
    :parking:🅿️:wheelchair::metro:🚇
    :baggage_claim:🛄:accept:🉑:wc:🚾
    :potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
    :congratulations:㊗️:m:Ⓜ️:passport_control:🛂
    :left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
    :cl:🆑:sos:🆘:id:🆔
    :no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
    :do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
    :no_pedestrians:🚷:children_crossing:🚸:no_entry:
    :eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
    :vs:🆚:vibration_mode:📳:mobile_phone_off:📴
    :chart:💹:currency_exchange:💱:aries:
    :taurus::gemini::cancer:
    :leo::virgo::libra:
    :scorpius::sagittarius::capricorn:
    :aquarius::pisces::ophiuchus:
    :six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
    :b:🅱️:ab:🆎:o2:🅾️
    :diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
    :on:🔛:soon:🔜:clock1:🕐
    :clock130:🕜:clock10:🕙:clock1030:🕥
    :clock11:🕚:clock1130:🕦:clock12:🕛
    :clock1230:🕧:clock2:🕑:clock230:🕝
    :clock3:🕒:clock330:🕞:clock4:🕓
    :clock430:🕟:clock5:🕔:clock530:🕠
    :clock6:🕕:clock630:🕡:clock7:🕖
    :clock730:🕢:clock8:🕗:clock830:🕣
    :clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
    :copyright:©️:registered:®️:tm:™️
    :x::heavy_exclamation_mark::bangbang:‼️
    :interrobang:⁉️:o::heavy_multiplication_x:✖️
    :heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
    :white_flower:💮:100:💯:heavy_check_mark:✔️
    :ballot_box_with_check:☑️:radio_button:🔘:link:🔗
    :curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
    :trident:🔱:black_large_square::white_large_square:
    :white_check_mark::white_square_button:🔳:black_square_button:🔲
    :black_circle::white_circle::red_circle:🔴
    :large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
    :small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
    :small_red_triangle_down:🔻:shipit::shipit:
    + + + diff --git a/zh/code/build-sub.html b/zh/code/build-sub.html new file mode 100644 index 00000000..ce45fdbe --- /dev/null +++ b/zh/code/build-sub.html @@ -0,0 +1,78 @@ + + + + + + + + 搭建属于自己的订阅转换链接 | 风至万始苏 + + + + + + +
    跳至主要內容
    搭建属于自己的订阅转换链接

    搭建属于自己的订阅转换链接

    Ven2s...大约 5 分钟linuxServer

    Sub-Web-Modify前端搭建open in new window

    本项目open in new window基于CareyWang/sub-webopen in new window,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合APIopen in new window,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!

    更新系统并安装 Node 与 Yarn

    依次运行下面四行代码,若是 CentOS 系统,请自行替换下面前两行命令中的 aptyum

    apt update -y
    +apt install -y curl wget sudo nodejs git
    +apt install npm
    +npm install -g yarn
    +

    命令执行完毕以后,请运行下面的代码查询 Node 与 Yarn 是否安装成功,若是成功会返回版本号。

    node -v
    +yarn --version
    +

    下载并安装 sub-web-modify

    拉取 sub-web-modify 程序,并进入 sub-web-modify 文件夹

    git clone https://github.com/youshandefeiyang/sub-web-modify.git
    +cd sub-web-modify
    +

    在项目目录中安装构建依赖项,构建的过程稍微有点长

    yarn install
    +

    使用 webpack 运行 Web 客户端以进行本地开发。

    yarn serve
    +

    出现下图则表示前端调试模式启动成功

    yarn-success
    yarn-success

    这时,我们浏览器访问 http://服务器ip:8080/open in new window 应该可以进行前端 sub-web-modify 的预览了

    记住8082端口的防火墙和安全组要开放

    修改默认后端地址并增加远程规则

    找到 VPS /root/sub-web-modify/src/views/Subconverter.vue 文件用编辑器打开

    找到 backendOptions:将你解析好的后端地址输入进去。域名为你刚才准备的后端域名,要将http改成https,并且增加/sub?的后缀。(这样选项下面就会出现自己的后端地址)

    如果不想用后端作者默认提供的转换那可以把 const defaultBackend = 也改成你自己的域名记得加上 ""。

    找到 remoteConfig: [ 后回车将喜欢的规则复制进去即可。

    配置完毕后打包网站

    配置完毕以后,程序会自动更新,再次刷新前端网页,会出现刚才添加的相关规则。

    经过上面的修改默认后端地址和原程配置的规则就修改好了。

    至此,我们的前端调试完毕,我们现在需要打包,生成一个发布目录并将他发布了。

    首先停止调试程序,CTRL+C ,退出当前调试,然后执行下面的命令进行打包:

    yarn build
    +

    执行以下打包命令,在 /root/sub-web-modify 下面会生成一个 dist 目录,这个目录即为网页的发布目录。

    将这个目录的里面的文件复制到你站点的根目录即可。

    一键搭建前端

    cd /root && git clone https://github.com/youshandefeiyang/sub-web-modify.git && chmod -R 755 sub-web-modify && cd sub-web-modify && yarn install && yarn build
    +

    发布前端

    没有安装宝塔的去宝塔官网看教程安装.

    在宝塔面板中点击增加站点分别将前端站点增加上去,并配置好ssl证书。

    将 /root/sub-web/dist文件夹内的所有文件复制到前端站点的根目录下即可。

    访问该网站,前端就部署好了。

    SubConverter后端搭建open in new window

    新建后端站点并进行反向代理

    在宝塔面板中新建后端的站点,同样配置好ssl并将设置站点的反向代理到25500。

    点击新建好的后端网站的网站名在弹出来的消息盒子中点击反向代理添加发现代理。

    反向代理配置方法方法如图:

    反代
    反代

    设置完毕后我们开始安装后端

    搭建后端程序

    这里我们可以用两种方法搭建后端程序,第一种是用二进制文件搭建,第二种为使用Docker搭建。我个人比较推荐Docker配置简单一行命令即可搞定

    方法一 二进制文件搭建

    下载并解压 subconverter 二进制文件

    cd /root
    +wget https://github.com/tindy2013/subconverter/releases/download/v0.7.2/subconverter_linux64.tar.gz
    +tar -zxvf subconverter_linux64.tar.gz
    +

    完成以后,在 /root 文件夹下会多出一个 subconverter 的文件夹,这个就是我们的后端程序

    修改配置文件参数

    现在我们需要修改后端配置文件中的一些参数

    找到VPS文件 /root/subconverter/pref.ini ,找到如下参数进行修改

    api_access_token=123123dfsdsdfsdfsdf            #随意设置自己知道就行
    +managed_config_prefix=https://sub.yourdomin.com  #设置成我们刚刚解析的后端域名
    +listen=127.0.0.1                                #这里改成 127.0.0.1 进行反代
    +

    创建服务进程并启动

    接下来我们需要创建一个服务,让VPS每次重启或是开机自动运行后端程序

    找到VPS目录 /etc/systemd/system,创建一个名为 sub.service 的文件

    打开文件,贴入以下内容,保存。

    [Unit]
    +Description=A API For Subscription Convert
    +After=network.target
    + 
    +[Service]
    +Type=simple
    +ExecStart=/root/subconverter/subconverter
    +WorkingDirectory=/root/subconverter
    +Restart=always
    +RestartSec=10
    + 
    +[Install]
    +WantedBy=multi-user.target
    +

    检查运行状态以及设置开机自启

    systemctl daemon-reload
    +systemctl start sub
    +systemctl enable sub
    +systemctl status sub
    +

    到这里,后端也就搭建完毕了,我们现在可以在浏览器里面访问我们的后端了,访问后端域名后端搭建成功!

    方法二 Docker容器搭建

    如果服务器安装了Docker可以使用命令:

    docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest
    +

    然后再用下面的命令确认一下状态

    curl http://localhost:25500/version
    +curl http://localhost:25500/version
    +

    如果输出当前 subconverter 容器版本几位搭建成功。

    + + + diff --git a/zh/code/chatgpt-porxy.html b/zh/code/chatgpt-porxy.html new file mode 100644 index 00000000..73c3e373 --- /dev/null +++ b/zh/code/chatgpt-porxy.html @@ -0,0 +1,87 @@ + + + + + + + + ChatGPT-Porxy | 风至万始苏 + + + + + + +
    跳至主要內容

    ChatGPT-Porxy

    Ven2s...大约 2 分钟linuxChatGPT

    Build ChatGPT Reverse Proxy

    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 open in new window 来解决代理问题。

    搭建步骤

    一、安装 DockerDocker-compose

    • 安装 Docker
    #更新、安装必备软件
    +
    +apt-get update && apt-get install -y wget nano
    +
    +#安装docker:
    +
    +curl -sSL https://get.docker.com/ | sh
    +
    +
    +#开机自动启动
    +
    +systemctl start docker
    +
    +systemctl enable docker
    +
    • 安装 Docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    二、安装 go-chatgpt-api open in new window

    • 创建目录
    mkdir -p /data/docker_data/go-chatgpt-api
    +cd /data/docker_data/go-chatgpt-api
    +
    • 创建 docker-compose.yml 文件
    nano docker-compose.yml
    +
    • 在文件中填入以下内容,然后 Ctrl+X 保存,按 Y 退出
    version: "3"
    +services:
    +  go-chatgpt-api:
    +    container_name: go-chatgpt-api
    +    image: linweiyuan/go-chatgpt-api
    +    ports:
    +      - 8080:8080  # 容器端口映射到宿主机8080端口;宿主机监听端口可按需改为其它端口
    +    environment:
    +      - GIN_MODE=release
    +      - CHATGPT_PROXY_SERVER=http://chatgpt-proxy-server:9515
    +      #- NETWORK_PROXY_SERVER=http://host:port     # NETWORK_PROXY_SERVER:科学上网代理地址,例如:http://10.0.5.10:7890
    +      #- NETWORK_PROXY_SERVER=socks5://host:port   # NETWORK_PROXY_SERVER:科学上网代理地址
    +    depends_on:
    +      - chatgpt-proxy-server
    +    restart: unless-stopped
    +
    +  chatgpt-proxy-server:
    +    container_name: chatgpt-proxy-server
    +    image: linweiyuan/chatgpt-proxy-server
    +    restart: unless-stopped
    +
    • 创建完成后,运行
    docker-compose up -d
    +
    • 检查运行的容器;确保容器状态为UP
    docker ps
    +
    • 检测容器映射到宿主机的监听端口是否监听
    ss -tnlp|grep 8080
    +

    三、使用自建反代

    # 反向代理,可选
    +    API_REVERSE_PROXY: https://example.com/conversation
    +
    • 现在我们访问chatgpt-web,查看是否可以正常使用,注意确保 chatgpt-proxy-server 运行正常, go-chatgpt-api 需要初始化启动需要耐心等待
    # 查看容器日志是否运行正常
    +docker logs -f chatgpt-proxy-server
    +docker logs -f go-chatgpt-api
    +

    完工

    1
    😏

    本教程来源:open in new window

    + + + diff --git a/zh/code/chatgpt.html b/zh/code/chatgpt.html new file mode 100644 index 00000000..00021844 --- /dev/null +++ b/zh/code/chatgpt.html @@ -0,0 +1,93 @@ + + + + + + + + Wonderful ChatGPT | 风至万始苏 + + + + + + +
    跳至主要內容

    Wonderful ChatGPT

    Ven2s...大约 2 分钟linuxChatGPT

    3 Steps Build Your Own ChatGPT Web

    • ChatGPTopen in new window(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。

    • ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

    ChatGPT-Webopen in new window

    • 支持双模型,提供了两种非官方 ChatGPT API 方法

    介绍

    方式免费?可靠性质量
    ChatGPTAPI(gpt-3.5-turbo-0301)可靠相对较笨
    ChatGPTUnofficialProxyAPI(网页 accessToken)相对不可靠聪明
    • 对比:
    1. ChatGPTAPI(gpt-3.5-turbo-0301)open in new window 使用 gpt-3.5-turbo-0301 通过官方 OpenAI 补全 API 模拟 ChatGPT (最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型)
    2. ChatGPTUnofficialProxyAPIopen in new window 使用非官方代理服务器访问 ChatGPT 的后端 API,绕过 Cloudflare(使用真实的的 ChatGPT,非常轻量级,但依赖于第三方服务器,并且有速率限制)

    感谢原作者Chanzhaoyu的辛苦付出

    搭建步骤

    一、安装 DockerDocker-compose

    • 安装 Docker
    #更新、安装必备软件
    +
    +apt-get update && apt-get install -y wget nano
    +
    +#安装docker:
    +
    +curl -sSL https://get.docker.com/ | sh
    +
    +
    +#开机自动启动
    +
    +systemctl start docker
    +
    +systemctl enable docker
    +
    • 安装 Docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    二、安装 ChatGPT-Web

    • 创建目录
    mkdir -p /data/docker_data/chatgpt
    +cd /data/docker_data/chatgpt
    +
    • 创建 docker-compose.yml 文件
    nano docker-compose.yml
    +
    • 在文件中填入以下内容,然后 Ctrl+X 保存,按 Y 退出
    version: '3'
    +
    +services:
    +  app:
    +    image: luvsia/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可
    +    ports:
    +      - 3002:3002
    +    environment:
    +      # 二选一
    +      OPENAI_API_KEY: 
    +      # 二选一
    +      OPENAI_ACCESS_TOKEN: 
    +      # API接口地址,可选,设置 OPENAI_API_KEY 时可用
    +      OPENAI_API_BASE_URL:
    +      # API模型,可选,设置 OPENAI_API_KEY 时可用
    +      OPENAI_API_MODEL:
    +      # 反向代理,可选
    +      API_REVERSE_PROXY:
    +      # 访问权限密钥,可选
    +      AUTH_SECRET_KEY:
    +      # 超时,单位毫秒,可选
    +      TIMEOUT_MS: 100000
    +      # Socks代理,可选,和 SOCKS_PROXY_PORT 一起时生效
    +      SOCKS_PROXY_HOST:
    +      # Socks代理端口,可选,和 SOCKS_PROXY_HOST 一起时生效
    +      SOCKS_PROXY_PORT:
    +
    +
    • 创建完成后,运行
    docker-compose up -d
    +
    • 然后就可以通过 IP:3002 来访问 ChatGPT

    三、反代 ChatGPT 并使用打字机效果

    • 宝塔面板中新建网站chat.example.com并注册证书、开启HTTPS
    ChatGPT
    ChatGPT
    • 反向代理
    ChatGPT
    ChatGPT
    • 修改反向代理配置文件,实现打字机效果
    #设置反向代理参数以支持流式输出
    +proxy_buffering off;
    +chunked_transfer_encoding on;
    +tcp_nopush on;
    +tcp_nodelay on;
    +keepalive_timeout 65;
    +
    ChatGPT
    ChatGPT

    大功告成,Enjoy

    + + + diff --git a/zh/code/ddns.html b/zh/code/ddns.html new file mode 100644 index 00000000..0321f2dd --- /dev/null +++ b/zh/code/ddns.html @@ -0,0 +1,42 @@ + + + + + + + + 記錄使用ddns實現內網穿透遠程訪問內網設備 | 风至万始苏 + + + + + + +
    跳至主要內容

    記錄使用ddns實現內網穿透遠程訪問內網設備

    Ven2s...大约 4 分钟Home Network LayoutDDNSNetwork

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    前言

    • 最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

      Z
      D
      B

    • 写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

    • DDNSopen in new window(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

    • Cloudflareopen in new window 全球知名的DNS服务商。

    • DDNS-GOopen in new window 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

    • 公网 IPopen in new window 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

      RDP
      可以看到这里的延迟十分之低

    开工

    • 开始之前先简单说下我家里的网络布局,弱电箱一个光猫桥接模式,一个主路由负责拨号,卧室一个 K2P 路由 ap 模式,一个旧笔记本电脑充当软路由(旁路由),安装了 PVEPVE 上使用了 openWRT,还有一台台式电脑,忘了在 visio 上画出来。

      网络布局
      网络布局图
    • 不要问我为什么不在 openWRTDHCP ,我试了很多次都无法联网,可能是因为网口绑定了 MAC 地址,我也不知道怎么取消绑定,所以我只能在主路由上绑定我电脑的 MAC 才能上网。(可能也不是这个原因,我在 openWRT 上绑定 WAN 口地址也不能上网。)我家的网络环境真的太复杂了😥

    正式开始

    安装

    .\ddns-go.exe -s install
    +

    卸载

    .\ddns-go.exe -s uninstall
    +
    DDNS-GO
    DDNS-GO
    • 安装好后,在服务中可以看到 ddns-go 服务,并设置自启动

      DDNS-GO服务
      DDNS-GO服务开启
    • 打开 http://127.0.0.1:9876open in new window,可以看到 ddns-go 支持很多家动态解析服务商

      DDNS-GO配置1
      DDNS-GO页面
    • cloudflare 获取 API 令牌既上图中的 Token ,重点注意区域资源要选所有区域

      cloudflare配置1
      cloudflare配置2

    • 回到 DDNS-GO 中如下图,像我一样配置即可,有公网的只勾选 IPv4 ,没有公网的选 IPv6 (我两个都有,所以都选了,你也可以,经测试无伤大雅),在主机名后面填上你的域名。至于如何获得 IPv6 ,这个我下次再做一个详细的教程。(推荐一个好用的CF国内APIopen in new window,可以准确获取你的 IP 本地地址,无论你是否使用科学上网工具)

      DDNS-GO配置2
      DDNS-GO配置3
      DDNS-GO配置4

    • 点击保存后,成功后,你会在 Cloudflare 上你的域名 dns 服务中看到你已经解析了的A记录(IPv4地址)或者AAAA记录(IPv6地址),ddns-go 中你也可以看到解析成功的提示

    • 到此,你终于成功解析你的动态IP,在主路由、旁路由上设置好端口转发服务,就可以随时随地访问家中的设备。

    抽时间,再把如何有效的进行端口转发记录下来,以防我这个狗脑子又忘了

    + + + diff --git a/zh/code/github-actions-deploy.html b/zh/code/github-actions-deploy.html new file mode 100644 index 00000000..d17af24e --- /dev/null +++ b/zh/code/github-actions-deploy.html @@ -0,0 +1,129 @@ + + + + + + + + 利用GitHub Actions自动部署前端到服务器 | 风至万始苏 + + + + + + +
    跳至主要內容

    利用GitHub Actions自动部署前端到服务器

    Ven2s...大约 6 分钟linuxServerFrontEnd

    Automatically deploying the Front End to the server using GitHub Actions

    GitHub Actions介绍及原理

    • 接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

    • GitHub Actions 官方文档open in new window:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

    • 通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

    • 本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

    GitHub Action 成功示图
    GitHub Action成功界面
    GitHub Action成功界面
    name: luvsia-hugo-blog-autodeploy # 工作流程名称,自行命名
    +
    +on:
    +  push: # 什么时候请求触发
    +    branches:
    +      - main  # 作用分支,这里是main,也可是master
    +  pull_request:
    +
    +jobs: # 将工作流文件中运行的所有任务分组在一起
    +  deploy:
    +    runs-on: ubuntu-latest
    +    concurrency:
    +      group: ${{ github.workflow }}-${{ github.ref }}
    +    steps:
    +      - uses: actions/checkout@v2
    +        with:               # 如果你安装主题时用的是git submodule add
    +          submodules: true  # 那么这三行不必注释掉,这一行填写 true
    +          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
    +
    +      - name: Setup Hugo
    +        uses: peaceiris/actions-hugo@v2
    +        with:
    +          hugo-version: 'latest'  # 获取最新版本的hugo
    +          extended: true          # 如果你使用的不是extended版本的hugo,将true改为false
    +
    +      - name: Build
    +        run: hugo   # 使用hugo构建静态网页
    +
    +      - name: Deploy to github
    +        uses: peaceiris/actions-gh-pages@v3
    +        if: ${{ github.ref == 'refs/heads/main' }}  # 注意填写main或者master
    +        with:
    +          personal_token: ${{ secrets.PERSONAL_TOKEN }} # 如果secret取了其他名称,将PERSONAL_TOKEN替换掉
    +          external_repository: ventusoon/LuvSia # 填写远程 public 仓库 
    +          publish_dir: ./public
    +          cname: luvsia.com        # 填写自定义域名
    +
    • 按照示例分析,可以得出简单的 GitHub Actions 步骤图如下

    Action

    1️⃣作用条件

    时间节点

    分支

    2️⃣工作任务

    运行环境

    步骤一

    步骤二

    步骤 N

    直接发布到服务器/本地/托管页面

    实战演练

    • 因为要部署到服务器端,所以要了解连接到服务器的方式,这里选择ssh连接,网上有很多教程也用了sftp连接,都可以。

    • GitHub Actions 部署文件通常以 xxx.yml 命名,路径为项目根目录下 /.github/workflows/xxx.yml

    • GitHub 页面下编辑 xxx.yml ,可以发现右侧的应用商城中有很多特色Actions,因为是ssh连接,在这里选择评分较高的 ssh-deploy 应用,并使用最新版。

    ssh-deploy 应用
    ssh-deploy
    ssh-deploy
    • open in new window项目中的 README 中,可以看到其主要配置名称及用途如下。
    配置名称用途示例
    SSH_PRIVATE_KEYSSH密钥密钥应使用PEM格式生成
    REMOTE_HOST远程主机10.10.10.10
    REMOTE_USER用户root
    REMOTE_PORT端口默认22
    SOURCE源,需要部署的内容/dist
    TARGET对象,要部署的路径/data/docker_data/npm/data/sub.ven2s.cn/
    ARGS传递给rsync(同步时)的参数-avz --delete
    SSH_CMD_ARGS一组ssh参数,它们必须以-o为前缀,用逗号分隔-o SomeArgument=no,-o SomeOtherArgument=5
    EXCLUDE要排除的路径,用逗号分隔/dist/, /node_modules/
    SCRIPT_BEFORE在同步之前在主机上运行的脚本mkdir -p /data/docker_data/npm/data/sub.ven2s.cn
    SCRIPT_AFTER在同步之后在主机上运行的脚本reboot
    • 做好以上前期工作,现在可以开始操作了

    在服务器端配置密钥

    • root 目录下,输入
    ssh-keygen -m PEM -t rsa -b 4096
    +
    +# 生成密钥文件,连续按下两次回车。
    +# 请注意:您不应该为您生成的私钥设置密码(将其保留为空)。因为 rsync ssh(用于部署)不支持将私钥密码作为命令行参数输入。
    +
    • 此时, /root/.ssh/ 下生成了私钥文件 id_dsa 、公钥文件id_dsa.pub ,根据公钥文件生成authorized_keys ,并给以上三个文件分别设置权限。
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    +
    chmod 600 ~/.ssh/id_rsa
    +
    chmod 600 ~/.ssh/id_rsa.pub
    +
    chmod 600 ~/.ssh/authorized_keys
    +
    • 此时,客观上服务器端的工作就完成了,如果连接中遇到各种错误提示,请自行 goggle ,这里就不赘述了。

    项目中设置仓库密钥

    • 说来真是坑,最开始把仓库密钥错填到代码空间机密中,一直连接不上,我还以为是服务器的问题,前天甚至弄恍惚了,不小心 rm -rf / 了......
    仓库机密在GitHub项目中设置的位置
    • 在服务器中 cat 密钥,将所有内容复制到上图的 SSH_PRIVATE_KEY 中,并填入服务器IP到 REMOTE_HOST ,填入 rootREMOTE_USER。(或者直接在yml文件中填入 "root"
    cat ~/.ssh/id_rsa
    +

    或者

    REMOTE_USER: "root"
    +

    发布部署文件到远端

    • 我把自动发布nginx-proxy-manager静态页面的文件po在下面,请根据自身的运行环境和依赖进行修改配置即可。
    # 当前工作流的名称
    +name: sub-web-deploy
    +on:
    +  push:
    +    branches:
    +      - master
    +
    +jobs: # 构建的任务,一个工作流有多个构建任务,
    +  build-and-deploy:
    +    runs-on: ubuntu-latest # 在什么服务器上面执行这些任务,这里使用最新版本的ubuntu
    +    
    +    steps: # 构建任务的步骤,一个任务可分为多个步骤
    +      # 切换分支
    +      - name: Checkout
    +        uses: actions/checkout@v4
    +      # 步骤2 给当前服务器安装node
    +      - name: use node
    +        uses: actions/setup-node@v3.8.1
    +        with:
    +          node-version: 18
    +          cache: "yarn"
    +      # 步骤3 下载项目依赖    
    +      - name: install
    +        run: yarn install
    +      # 步骤4 打包node项目
    +      - name: build
    +        run: yarn build
    +      # 步骤5 部署项目到服务器
    +      - name: ssh deploy
    +        uses: easingthemes/ssh-deploy@v4.1.10
    +        with:
    +      # Private key part of an SSH key pair
    +          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
    +      # Remote host
    +          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
    +      # Remote user
    +          REMOTE_USER: ${{ secrets.REMOTE_USER }}
    +      # Source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/`
    +          SOURCE: "/dist/"
    +      # Script to run on host machine before rsync
    +          SCRIPT_BEFORE: "mkdir -p /data/docker_data/npm/data/sub.ven2s.cn"
    +      # Target directory
    +          TARGET: "/data/docker_data/npm/data/sub.ven2s.cn/"
    +

    如果喜欢请分享此页面,如有疑问请按F5,再进行评论。哈哈

    + + + diff --git a/zh/code/github-tools.html b/zh/code/github-tools.html new file mode 100644 index 00000000..d9d1587c --- /dev/null +++ b/zh/code/github-tools.html @@ -0,0 +1,40 @@ + + + + + + + + Github上的生产力工具 | 风至万始苏 + + + + + + +
    跳至主要內容

    Github上的生产力工具

    Ven2s...大约 3 分钟WindowsTools

    Productivity tools on Github

    技术是第一生产力

    • 在当今快节奏的世界中,技术已经成为提高生产力的基石。它改变了我们工作、沟通和协作的方式。开源软件以其透明和协作的特性成为这种转变的推动力。像 Githubopen in new window 这样托管数百万开源项目的平台,创造了一个充满活力的生态系统,让开发人员可以分享他们的想法并协作开发代码。

    • 通过利用开源和 Githubopen in new window 这样的平台,开发人员能够更有效地工作,减少开发时间,构建更好的软件。

    • 大家可以尽情地在 issues 上给作者提出宝贵的建议和意见,或是提交 BUG 帮助作者完善项目,或是成为一些初学者(小白)们咨询大佬的平台,极大地缩短了软件开发的时间成本,也解决了人们面对互联网工具资源匮乏的窘境。

    • Github 上8年的学习、 git 中,大部分时间都在潜水,或是找一些必要资源。从最开始的无从下手,到现在基本上能熟练的在本地和服务器搭建基本运行环境,熟练掌握 git 方法,将大佬们的项目 为我所用 。这期间我使用了无数的、各个平台上的项目、软件,有时候甚至会为了一个简单地环境搭建彻夜难眠、通宵达旦。也许这就是代码的魅力、开源的魅力。

    • 今天就来简单记录一些我使用过的 神一般的生产力工具 ,方便大家更好地工作、学习。

      1
      入坑时间

    乱花渐欲迷人眼

    xplorer

    ToolWebFunctionDownload
    xploreropen in new windowwindows 文件资源管理器美化版open in new window
    Demo
    Demo
    View More Screenshots

    Demo
    Demo
    Demo
    Demo
    Demo
    Demo

    openai-translator

    ToolWebFunctionDownload
    openai-translatoropen in new window基于 ChatGPT API划词翻译浏览器插件和跨平台桌面端应用open in new window
    Demo
    Demo
    View More Screenshots

    Demo
    Demo

    OcrHelper

    ToolWebFunctionDownload
    OcrHelperopen in new window桌面图像实时转文字工具open in new window
    View More Screenshots

    Demo
    Demo
    Demo
    Demo

    Everything

    ToolWebFunctionDownload
    Everythingopen in new window基于名称快速定位文件和文件夹open in new window
    EverythingToolbaropen in new window基于 EverythingWindows 任务栏的一体化管理工具open in new window
    Demo
    EverythingToolbar
    View More Screenshots
    Demo
    Everything

    More...

    + + + diff --git a/zh/code/hackintosh.html b/zh/code/hackintosh.html new file mode 100644 index 00000000..bce4104f --- /dev/null +++ b/zh/code/hackintosh.html @@ -0,0 +1,40 @@ + + + + + + + + Hackintosh | 风至万始苏 + + + + + + +
    跳至主要內容

    Hackintosh

    Ven2s...大约 3 分钟MacOSHackintosh

    Hackintosh Reboot Plan

    闲话 回忆与现在

    • 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

    • 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

    • 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

    • 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

    主机及配置

    • 在网上看了很多视频和教程,左挑右选,最终选择了惠普的 800-G4-DM 准系统主机,外加 I5 8500T 的8代 cpu。基本配置如下:

    • ||主机|惠普 HP EliteDesk 800 G4 DM||
      |:---😐:---😐:---😐:---😐
      ||主板|惠普Q370|||
      || CPU |酷睿 i5 8500T ||
      || 显卡 |集成 Intel UHD Graphics 630||
      || 内存 |DDR4 2400MHz 三星16GB(2X8GB)||
      ||无线网卡|博通 BCM94352Z 无线/蓝牙网卡|||
      ||固态硬盘|台电 256G SSD (加装2T SATA SSD)|||
      ||OpenCore|0.9.1|||
      ||MacOS|Ventura 13.3.1 (22E261)|||

    • 完美主义的黑苹果完美度:
    状态完美
    CPU睿频Yes✔︎
    VDA 解码器完全支持✔︎
    IGPU硬件加速(QE/CI)Yes✔︎
    Metal支持Yes✔︎
    USB定制/完整识别Yes✔︎
    网卡内建Yes✔︎
    WIFI免驱Yes✔︎
    蓝牙全功能YesHackintool无法识别,使用正常(又不是不能用.jpg)
    AirDrop全功能No仅支持从iOS端投送到Mac
    核显输出定制/全功能No截编时只完美一个“DP-HDMI”,其余两个输出口等有测试显示器再折腾
    声音全功能Yes✔︎
    序列号有效没有被用过的序列号Yes✔︎
    iMessage全功能Yes✔︎解放手机 Get
    随航功能Yes✔︎新功能真爽,iOS和 macOS无缝衔接
    HiDPi开启No能开,显示器物理分辨率太低,再开启HiDPi的分辨率更低,就很难受(有了4K显示器再说吧)
    睡眠开启Yes✔︎随睡随醒
    • 系统图鉴

    View More Screenshots

    1
    1

    1
    图鉴
    View More Screenshots

    工具及配参

    所需工具

    名称用途下载
    SSDTTime获取DSDT、SSDTDownloadopen in new window
    ACPICA编译和反编译DSDTDownloadopen in new window
    OpenCorePkgOpenCore引导加载程序Downloadopen in new window
    ProperTree跨平台GUIPlist编辑器Downloadopen in new window
    gibMacOSMacOS恢复镜像下载工具Downloadopen in new window
    GenSMBIOS生成SMBIOSDownloadopen in new window

    环境搭建

    + + + diff --git a/zh/code/hello-world.html b/zh/code/hello-world.html new file mode 100644 index 00000000..0db2dbcd --- /dev/null +++ b/zh/code/hello-world.html @@ -0,0 +1,139 @@ + + + + + + + + Hello World | 风至万始苏 + + + + + + +
    跳至主要內容

    Hello World

    Ven2s...大约 15 分钟ServerBlog

    Build this site Hugo Blog 实战

    + 2022.02.11 add 侧边栏 鼠标指针 样式
    +
    + 2022.01.26 Update autodeploy.yml 实现 Hugo Blog 源码github  gitee  gitlab三端同步 (可以没有 | 就很帅)
    +
    + 2022.01.26 Done 😎
    +
    + 2022.01.26 <争取一口气把剩下的内容填完> 并没有 | Markdown的排版比码字更费事 💦
    +
    + 2022.01.24 简简单单的两个美化项目又变成了好几个      😥 😥 😥
    +
    + 2022.01.23 前言 <写了一些废话>
    +
    + 2022.01.20 萌生写下这篇文章的想法 并把大纲po在这里
    +

    闲言碎语

    从信用卡聊到陈年往事

    • 前段时间,在老婆的支持下(“盗”刷老婆信用卡,orz),买了一个十年的域名,起初拿来也就无非是给服务器套个域名,加个SSL,反代一些需要用到的web工具。想着这个域名好歹也是千挑万选出来的(Sia刚好与老婆名字谐音,所以自然而然地在前面加个Luv不过分吧,2333),现在的朋友圈基本上也没咋发过东西,全都是一些工作上的琐事。不如开个博客,记录一下生活(主要是用着这么有内涵的域名,让老婆感受一下应有的尊重,还能升华彼此的感情,哈哈哈,扯远了),还可以把自己“搞机爱好”(折腾癖好)的过程记录下,把READMEopen in new window中所说的Ctrl+CCtrl+V变为自己的知识,而不是只会复制粘贴,成了一个工具人。让这项爱好不至于太肤浅,还能真正掌握一下基础的编程知识。

    • 这篇博客,主要是记录下整个Blog的搭建基本思路与部署过程,Blog完成Hello World之后,后续一直在跟进基础美化、插件适配的工作,所以这篇文章也就搁置如今。“简简单单”的~两个美化项目~,碍于能力有限,三天时间才完成80%,真tm惨...

    • 在刚接触到Blog搭建还是在近6年以前,也是搞了个域名,搭了服务器,并把博客部署在服务器上,用的是WordPress。在当时,WordPress就已经是一个成熟的网站建设工具。WordPress功能是挺强大,主题、插件多,用户量基数也大,很容易就可以找到一些自己喜欢的“小物件”放到自己的博客上。奈何当时对代码之类的东西一窍不通,完全是通过可视化操作去完成的,也就不知道Go语言与PHP语言的区别,当然PHP语言在当时依然是主流。那会儿不仅要把精力放在服务器的维护上,还要把网站的Blog给弄好,还要用到Nginx、Mysql、phpmyadmin一大堆工具,还要在数据库中修改才能满足一些自己的需求,可以说是十分的繁琐。后来因为原服务器废弃,数据也没有转移,也没有本地保存,折腾的东西也就随之而去了...

    • 很久没有接触这方面的知识,现在就相当于回炉重造。了解了一下目前主流的Blog建站工具之后,Hexo和Hugo进入我的眼帘。从搜索引擎的数据上来看,Hexo的内容量与Hugo相比,完全不在一个数量级...
      Hexo
      Hugo

    • 传统在服务器部署,虽然本地也可以操作,修改内容,但大部分人都是仅仅只在服务器上完成,省去了本地修改、远程部署的步骤。导致服务器一崩,所有数据都随风而去...比如我自己在几年前也是如此。现如今,静态网站成为主流,Go语言也让国际大厂争先使用,像Google,Dropbox,SoundCloud,Twitter,PayPal等公司都用 Go 语言构建了他们的后端系统。

    如何选择Hexo与Hugo?

    Hugo中文文档:

    • Hugo是由Go语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。当前的静态网站生成工具对环境依赖过多,性能较差,于是使用 Go 语言写了一个静态网站生成器 Hugo。不仅解决了环境依赖、性能较差的问题,还有使用简单、部署方便等诸多优点,通过 LiveReload 实时刷新,极大的优化文章的写作体验。Hugo 能做什么?通过 Hugo 你可以快速搭建你的静态网站,比如博客系统、文档介绍、公司主页、产品介绍等等。

    Hexo中文文档:

    • 什么是Hexo ? Hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub和Heroku上,是搭建博客的首选框架。

    最终选择

    • 可以看出,Hexo与Hugo都是静态网站生成器的首选,而且都可以用上Github-Pagesopen in new window。在网上筛选了使用者反馈信息之后,最终我还是选择了用Go语言编写的Hugo+Github-Pages+CDN来搭建此Blog。

    准备工作

    安装环境和工具

    环境工具
    WindowsHugoGitVS codegithub-pages
    • VS Codeopen in new window:巨硬出品的一款开发集成工具。功能之强大让我感觉,我之前的传统敲代码、找依赖的方式太2了。

    • Gitopen in new window:一个版本控制系统,连接 Github 的钥匙。

    • Github-pagesopen in new window:Github出品,必属精品!等等,这句话怎么这么耳熟?又想到github也被巨硬收购了...细思极恐...

    • Hugoopen in new window:今天的主角,本地新建一个名为"Hugo"的目录、一个名为"Sites"的用于存放所有博客站点的目录,Hugo 目录下应有三个文件;同时,下载好 Git 程序。

    开始实战

    本地搭建

    将 hugo 添加到环境变量

    • WIN+R 输入 sysdm.cpl高级===>> 环境变量 ===>> Path ===>> 添加刚才新建的 Hugo 中的 bin 目录, bin 中放进刚刚下载的 hugo.exe

    Hugo

    bin

    hugo.exe

    Site

    example

    Git Bash

    • 进入 Site 文件夹,鼠标右键 Git Bash 或打开 Git Bashcd 到这个目录,创建 hugo 博客所在目录
    hugo new site <example>
    +

    文件夹内容目录

    example

    archetypes # 存放模板

    default.mdopen in new window # 模板

    config.toml # 基础配置文件

    content # 存放 page 与 post,所有新博文都要存放在 content 中

    data # 存放数据模板

    layouts # 存放布局模板文件,如果想要调整主题中的页面布局,可以在 layouts 中放入同名文件,hugo 将优先读取根目录中的 layouts 文件,避免直接修改主题文件,导致不必要的错误

    static # 存放静态资源,比如自定义 css、图片图标等

    themes # 主题文件夹

    安装 VS code 插件

    • 打开 VS Code 软件。点击Extensions,安装所需插件。推荐几个必备和好用的插件。

      • gpm 用来管理 Github 上的文件。 必备

      • Setting Sync 同步 Github 与本地文件。 必备

      • Markdown All in One 使用 Markdown 写作的利器。必备

      • Chinese Language Pack for Visual Studio Code VS Code 的汉化插件。 推荐

      • Auto Rename Tag 如果涉及修改代码的时候,非常好用。推荐

      • Material Icon Theme 一套个性的图标主题。 推荐

    生成 git 本地仓库

    • 进入新生成的博客文件夹并初始化一个空的 git 本地仓库,之后博客文件夹里会出现一个隐藏的.git 文件夹
    cd <example>
    +
    git init
    +

    生成 SSH 密钥

    仅首次,后面可以记录下,以备使用

    • SSH key 一般存储在系统盘 C: \Users<用户名>.ssh 目录中,git 全局设置存在 C: \Users<用户名>.gitconfig 文件中。
    ssh-keygen -t rsa -C "example@email.com" #最好是github账号邮箱。
    +
    • 之后会跳出一堆提示,在系统提示输入 passphrase 时直接回车不添加。生成的密钥对会储存在 C: \Users<用户名>.ssh 中,公钥存放在 id_rsa.pub 里,私钥存放在 id_rsa 里,妥善保管密钥对,公钥稍后需要使用,私钥非极特殊情况勿上传!

    • 在博客根目录进行 git 的配置。最好是github账号、邮箱。本地提交 commit 时 github 上可以查看提交者信息。

    git config user.name "examplename"
    +
    git config user.email "example@email.com"
    +

    安装主题

    • 找到喜欢的主题open in new window,在themes目录下 git clone 或者 git submodule add ,模块化安装能够方便升级主题(根目录上传到GitHub后,themes文件夹会链接到主题仓库界面,后面要用到的action要想跑起来一定要记得加上submodule的配置)。

    • 以本博客主题为例,用模块方式安装, themes/github-style 为安装到目标文件夹

    git submodule add git@github.com:MeiK2333/github-style.git themes/github-style
    +
    • 打开新的 config.toml 文件,修改 theme = “example-theme” 为你安装的主题名,主题名要与 themes 中的主题文件夹名称一致。

    本地搭建预览

    • 至此,本地博客就搭建好了。在博客根目录下 git bash,使用 hugo server 来看下主题的效果!(hugo server -D 的话草稿也会显示,注意是大写 D)跳出一大堆提示后,在任意浏览器打开 http://localhost:1313open in new window 就能实时查看博客效果与调整。如果的博客设置有误,页面会无法查看,请先排除错误后再进行尝试。不需要查看后 Ctrl+C 退出即可。

    根目录同步私有仓库

    源码& Public 分开存放

    • 建两个 repositories ,一个存放根目录文件,设置为私密,另一个用来存放 public 中的内容,设置为公开

    上传公钥

    这里选择直接上传到该 github 用户的 setting 里

    • 点击 github 页面右上角头像右侧下拉按钮,进入 Settings,找到左侧页面 SSH and GPG keys ,点击 New SSH key ,取一个便于识别的名称,下方填入之前生成的id_rsa.pub中的内容(以"ssh-rsa"开头,以邮箱结尾)。

    远程连接测试

    ssh -T git@github.com
    +

    显示 successfully 字样即可

    Hi <github-username>! You've successfully authenticated, but GitHub does not provide shell access.
    +

    生成 Token,用于连接两个仓库

    • 右上角 Settings 里找到 Developer settings ,再点 Personal access tokensGenerate new token 生成新的 token ,有效期可选永久生效。

    • Select scopes 里勾选 repo 全部内容与 workflow。最后点击绿色按钮生成。

    • 页面刷新后这个 Token 将不再显示,所以在导入前不要弄丢!

    Push 本地到私有仓库

    • 打开刚刚建立的私有仓库,复制SSH克隆代码,在 VS code 中的项目管理中点 + 克隆,粘贴,回车即可克隆。前提:本地的公钥与 github 设置里的公钥信息要一致。至此远程与本地即可连接成功。

    • 将本地的博客根目录内容全部粘贴到连接好的私有仓库,开始 push。git 默认的分支应该是(master),因为现在 github 的默认分支从 master 换成了 main(详见 GitHub 将替换掉 master 等术语 ),我们先切换分支到main:

    git checkout -b main
    +
    • push 命令三件套
    git add . # 添加目录下全部内容
    +git commit -m "new job" # 提交说明,出问题了可以回退到之前的commit
    +git push -u origin main # 将本地内容推送到远程
    +
    • 有时候新提交的本地有删除的内容,但是远端并没有删除,将 -m 改为 -am 即可

    • 空文件夹不会被 push 上去,不管;如果有其他文件、文件夹不想 push 上去,在根目录下新建 .gitignore 文件,里面存放不想 push 的内容。

      idea/            //忽略idea目录下的所有文件
    +  /idea/do.txt     //忽略某个具体文件
    +  !test.txt        //不忽略 test.txt 文件
    +  /TODO            //仅仅忽略项目根目录下的 TODO 文件,不包括 test/TODO
    +  *.zip            //忽略所有.zip结尾的文件
    +  doc/*.txt        //忽略 doc/notes.txt,但不包括 doc/server/arch.txt
    +  git rm -r --cached idea/do.txt    //-r为递归
    +

    私有仓库生成 Secrets

    • 这一步为自动部署到 public 做准备,进入刚刚建好的 repository,点进它的 Settings 中,找到 Secrets,点击 New repository secret,名称为 PERSONAL_TOKEN ,内容为之前备份下来的 Token

    自动部署到公开仓库

    Github Action

    • 进入博客根目录仓库,点上方的 Actions,set up a workflow yourself,之后你会发现 github 会在根目录下新建/.github/workflows/xxx.yml 文件。我的文件名 autodeploy.yml
    name: luvsia-hugo-blog-autodeploy # 自行命名
    +
    +on:
    +  push:
    +    branches:
    +      - main  # 博客根目录的默认分支,这里是main,也可是master
    +  pull_request:
    +
    +jobs:
    +  deploy:
    +    runs-on: ubuntu-latest
    +    concurrency:
    +      group: ${{ github.workflow }}-${{ github.ref }}
    +    steps:
    +      - uses: actions/checkout@v2
    +        with:               # 如果你安装主题时用的是git submodule add
    +          submodules: true  # 那么这三行不必注释掉,这一行填写 true
    +          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
    +
    +      - name: Setup Hugo
    +        uses: peaceiris/actions-hugo@v2
    +        with:
    +          hugo-version: 'latest'  # 获取最新版本的hugo
    +          extended: true          # 如果你使用的不是extended版本的hugo,将true改为false
    +
    +      - name: Build
    +        run: hugo   # 使用hugo构建静态网页
    +
    +      - name: Deploy to github
    +        uses: peaceiris/actions-gh-pages@v3
    +        if: ${{ github.ref == 'refs/heads/main' }}  # 注意填写main或者master
    +        with:
    +          personal_token: ${{ secrets.PERSONAL_TOKEN }} # 如果secret取了其他名称,将PERSONAL_TOKEN替换掉
    +          external_repository: ventusoon/LuvSia # 填写远程 public 仓库 
    +          publish_dir: ./public
    +          cname: luvsia.com        # 填写自定义域名
    +
    • 格式参考GitHub Pages actionopen in new window

    • 提交 commit ,保存, Action 变成绿色即成功!

    • 这时公开仓库已经自动建了一个名为 gh-pages 的分支,里面出现的东西就是源码通过 Hugo 命令生成的静态网页文件,此时打开博客域名就可以看到博客内容。

    • 根目录下的 config 文件中 base url 更换为自定义域名。

    CDN加速

    A @ 185.199.108.153
    +A @ 185.199.109.153
    +A @ 185.199.110.153
    +A @ 185.199.111.153
    +CNAME @ 指向公开仓库的github域名
    +CNAME WWW 指向公开仓库的github域名
    +
    • 进入公开仓库 SettingsPages 页面添加自定义域名,等待 DNS 检验成功,在此页面即可看到 仓库的github域名` 。

    • 使用了 CDN,github 上的 强制https 按钮可能不能点;如果无法正常显示 https,也可以在Cloudflare建立 强制https 规则。

    大功告成

    填坑后记

    1. 写新文章最好用命令行新建 md 文件,文件名为英文名最佳,增加解析效率。
    hugo new post/first-post.md
    +
    1. 如在远程端操作过,则在本地执行操作前,都要 git pull 拉取远端数据,同步到本地。上面我们在远程博客根目录新建了 workflow,在本地开始写新的博文前,先在本地的博客根目录进行同步,不然会报错:
    git pull
    +
    1. 执行 hugo server 过程中错误退出 git,导致之后执行时 1313 端口被占用,windows+r 输入 cmd 或者在VS code中打开 powershell 窗口:
    netstat -aon|findstr "1313"  #筛选使用1313端口的进程
    +taskkill /f /PID xxxxx  #杀死占用的进程
    +
    1. 重大更新!!!实现 Hugo Blog 源码github、gitee、gitlab三端同步,特别注意『格式』,最好在github中添加,避免出错!
    • 分别在gitee、gitlab上新建公钥文件,取名分别为GITEE_KEY、GITLAB_KEY

    • 更新 autodeploy.yml 文件,在后面加上如下代码

      mirror_to_gitee:
    +    runs-on: ubuntu-latest
    +    steps:
    +      - name: 'Checkout'
    +        uses: actions/checkout@v1
    +      - name: 'Mirror to gitee'
    +        uses: pixta-dev/repository-mirroring-action@v1
    +        with:
    +          target_repo_url:
    +            git@gitee.com:ventusoon/LuvSia.com.git  # gitee仓库链接
    +          ssh_private_key:
    +            ${{ secrets.GITEE_KEY }}  # 新建的GITEE_KEY
    +
    +  mirror_to_gitlab:
    +    runs-on: ubuntu-latest
    +    steps:
    +      - name: 'Checkout'
    +        uses: actions/checkout@v1
    +      - name: 'Mirror to gitlab'
    +        uses: pixta-dev/repository-mirroring-action@v1
    +        with:
    +          target_repo_url:
    +            git@gitlab.com:ventusoon/LuvSia.com.git  # gitlab仓库链接
    +          ssh_private_key:
    +            ${{ secrets.GITLAB_KEY }}  # 新建的GILAB_KEY
    +
    • Gitee
    gitee
    gitee
    • Gitlab
    gitlab
    gitlab
    1. 新增 小康博客open in new window 鼠标指针、侧边栏样式。
    • extended_head.html 中添加以下
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/static-butterfly/dist/css/index.min.css">
    +

    写在最后

    本篇文章的部署流程对网上教程进行了整合,再加上自己的理解而成。

    + + + diff --git a/zh/code/index.html b/zh/code/index.html new file mode 100644 index 00000000..5e0ce977 --- /dev/null +++ b/zh/code/index.html @@ -0,0 +1,40 @@ + + + + + + + + Code | 风至万始苏 + + + + + + + + + + diff --git a/zh/code/kms.html b/zh/code/kms.html new file mode 100644 index 00000000..a6ce926e --- /dev/null +++ b/zh/code/kms.html @@ -0,0 +1,56 @@ + + + + + + + + KMS 服務端安裝部署教程 | 风至万始苏 + + + + + + +
    跳至主要內容

    KMS 服務端安裝部署教程

    Ven2s...大约 5 分钟Home Network Layoutkmstools

    KMS Server Installation and Deployment Tutorial

    关于脚本

    • KMS 服务安装完成后会加入开机自启动。
    • 默认记录日志,其日志位于 /var/log/vlmcsd.log。

    开始部署

    • 使用 root 用户登录,运行以下命令:
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    +
    • 安装完成后,输入以下命令查看端口号 1688 的监听情况
    netstat -nxtlp | grep 1688
    +
    • 返回值类似于如下这样就表示 OK 了:
    tcp    0    0 0.0.0.0:1688   0.0.0.0:*   LISTEN   3200/vlmcsd         
    +tcp    0    0 :::1688        :::*        LISTEN   3200/vlmcsd 
    +
    • 本脚本安装完成后,会将 KMS 服务加入开机自启动。

    其他命令

    启动:/etc/init.d/kms start
    +停止:/etc/init.d/kms stop
    +重启:/etc/init.d/kms restart
    +状态:/etc/init.d/kms status
    +

    卸载方法

    ./kms.sh uninstall
    +

    激活步骤

    • 使用管理员权限运行 cmd 查看系统版本,命令如下:
    wmic os get caption
    +
    • 使用管理员权限运行 cmd 安装从上面列表得到的 key,命令如下:
    slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
    +
    • 使用管理员权限运行 cmd 将 KMS 服务器地址设置为你自己的 IP 或 域名,后面最好再加上端口号(:1688),命令如下:
    slmgr /skms Your IP or Domain:1688
    +
    • 注意:本脚本所做的工作就是此步骤。当你的 KMS 服务出于启动状态,那么此处就可以设置为你自己的 KMS 服务器地址。
      使用管理员权限运行 cmd 手动激活系统,命令如下:
    slmgr /ato
    +
    • 关于 Office 的激活,要求必须是 VOL 版本,否则无法激活。
      找到你的 Office 安装目录,32 位默认一般为 C:\Program Files (x86)\Microsoft Office\Office16
      64 位默认一般为 C:\Program Files\Microsoft Office\Office16
      Office16 是 Office 2016,Office15 就是 Office 2013,Office14 就是 Office 2010。
      打开以上所说的目录,应该有个 OSPP.VBS 文件。
      使用管理员权限运行 cmd 进入 Office 目录,命令如下:
    cd "C:\Program Files (x86)\Microsoft Office\Office16"
    +
    • 使用管理员权限运行 cmd 注册 KMS 服务器地址:
    cscript ospp.vbs /sethst:Your IP or Domain
    +
    • 使用管理员权限运行 cmd 手动激活 Office,命令如下:
    cscript ospp.vbs /act
    +

    主要步骤

    1. 设置服务 slmgr -skms Your IP or Domain
    2. 安装密钥 slmgr -ipk 版本对应秘钥
    3. 激活系统 slmgr -ato

    可用服务

    • Your IP or Domain 维护 CNAME 指向有效的服务
    • telnet Your IP or Domain 1688 测试服务是否可用
    • tcping Your IP or Domain 1688

    密钥

    https://learn.microsoft.com/zh-cn/windows-server/get-started/kms-client-activation-keysopen in new window

    kms-client-activation-keys.mdopen in new window

    Windows Server(LTSC 版本)

    Windows Server 2022

    操作系统版本KMS 客户端安装密钥
    Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33
    Windows Server 2022 Datacenter Azure EditionNTBV8-9K7Q8-V27C6-M2BTV-KHMXV
    Windows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7H

    Windows Server 2019

    操作系统版本KMS 客户端安装密钥
    Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG
    Windows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464C
    Windows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726

    Windows Server 2016

    操作系统版本KMS 客户端安装密钥
    Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG
    Windows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
    Windows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63B

    Windows Server (半年频道版本)

    Windows Server 版本 20H2、2004、1909、1903 和 1809

    操作系统版本KMS 客户端安装密钥
    Windows Server Datacenter6NMRW-2C8FM-D24W7-TQWMY-CWH2D
    Windows Server StandardN2KJX-J94YW-TQVFB-DG9YT-724CC

    Windows 11 和 Windows 10 (半年频道版本)

    操作系统版本KMS 客户端安装密钥
    Windows 10/11 专业版W269N-WFGWX-YVC9B-4J6C9-T83GX
    Windows 10/11 专业版 NMH37W-N47XK-V7XM9-C7227-GCQG9
    Windows 10/11 专业工作站NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
    Windows 10/11 专业工作站 N9FNHH-K3HBT-3W4TD-6383H-6XYWF
    Windows 10/11 专业教育版6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
    Windows 10/11 专业教育版 NYVWGF-BXNMC-HTQYQ-CPQ99-66QFC
    Windows 10/11 教育版NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
    Windows 10/11 教育版 N2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
    Windows 10/11 企业版NPPR9-FWDCX-D2C8J-H872K-2YT43
    Windows 10/11 企业版 NDPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
    Windows 10/11 企业版 GYYVX9-NTFWV-6MDM3-9PT4T-4M68B
    Windows 10/11 企业版 G N44RPN-FTY23-9VTTB-MP9BX-T84FV

    Windows 10 (LTSC/LTSB 版本)

    Windows 10 LTSC 2019

    操作系统版本KMS 客户端安装密钥
    Windows 10 企业版 LTSC 2019M7XTQ-FN8P6-TTKYV-9D4CC-J462D
    Windows 10 企业版 N LTSC 201992NFX-8DJQP-P6BBQ-THF9C-7CG2H

    Windows 10 LTSB 2016

    操作系统版本KMS 客户端安装密钥
    Windows 10 企业版 LTSB 2016DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
    Windows 10 企业版 N LTSB 2016QFFDN-GRT3P-VKWWX-X7T3R-8B639

    Windows 10 LTSB 2015

    操作系统版本KMS 客户端安装密钥
    Windows 10 企业版 2015 LTSBWNMTR-4C88C-JK8YV-HQ7T2-76DF9
    Windows 10 企业版 2015 LTSB N2F77B-TNFGY-69QQF-B8YKP-D69TJ

    早期版本的 Windows Server

    Windows Server 版本 1803

    操作系统版本KMS 客户端安装密钥
    Windows Server Datacenter2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG
    Windows Server StandardPTXN8-JFHJM-4WC78-MPCBR-9W4KR

    Windows Server 版本 1709

    操作系统版本KMS 客户端安装密钥
    Windows Server Datacenter6Y6KB-N82V8-D8CQV-23MJW-BWTG6
    Windows Server StandardDPCNP-XQFKJ-BJF7R-FRC8D-GF6G4

    Windows Server 2012 R2

    操作系统版本KMS 客户端安装密钥
    Windows Server 2012 R2 Server StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJX
    WindowsServer 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
    WindowsServer 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWM

    Windows Server 2012

    操作系统版本KMS 客户端安装密钥
    Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4
    Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
    Windows Server 2012 单语言版2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
    Windows Server 2012 特定国家/地区版4K36P-JN4VD-GDC6V-KDT89-DYFKP
    Windows Server 2012 Server StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4
    Windows Server 2012 MultiPoint StandardHM7DN-YVMH3-46JC3-XYTG7-CYQJJ
    Windows Server 2012 MultiPoint PremiumXNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
    Windows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83P

    Windows Server 2008 R2

    操作系统版本KMS 客户端安装密钥
    Windows Server 2008 R2 Web 版6TPJF-RBVHG-WBW2R-86QPH-6RTM4
    Windows Server 2008 R2 HPC 版TT8MH-CG224-D3D7Q-498W2-9QCTX
    WindowsServer 2008 R2 StandardYC6KT-GKW9T-YTKYR-T4X34-R7VHC
    WindowsServer 2008 R2 企业版489J6-VHDMP-X63PK-3K798-CPX3Y
    WindowsServer 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648
    面向基于 Itanium 系统的 Windows Server 2008 R2GT63C-RJFQ3-4GMB6-BRFB9-CB83V

    Windows Server 2008

    操作系统版本KMS 客户端安装密钥
    Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249D
    Windows Server 2008 StandardTM24T-X9RMF-VWXK6-X8JC9-BFGM2
    不带 Hyper-V 的 Windows Server 2008 StandardW7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
    Windows Server 2008 企业版YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
    不带 Hyper-V 的 Windows Server 2008 企业版39BXF-X8Q23-P2WWT-38T2F-G3FPG
    Windows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HP
    Windows Server 2008 Datacenter7M67G-PC374-GR742-YH8V4-TCBY3
    不带 Hyper-V 的 Windows Server 2008 Datacenter22XQ2-VRXRG-P8D42-K34TD-G3QQC
    面向基于 Itanium 系统的 Windows Server 20084DWFP-JF3DJ-B7DTH-78FJB-PDRHK
    + + + diff --git a/zh/code/nginx-proxy-manager.html b/zh/code/nginx-proxy-manager.html new file mode 100644 index 00000000..6b7b11fc --- /dev/null +++ b/zh/code/nginx-proxy-manager.html @@ -0,0 +1,82 @@ + + + + + + + + 用Nginx Proxy Manager部署靜態網頁 | 风至万始苏 + + + + + + +
    跳至主要內容

    用Nginx Proxy Manager部署靜態網頁

    Ven2s...大约 2 分钟linuxServerBlog

    Deploying Static Web Pages with Nginx Proxy Manager

    • 搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

    • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

    搭建步骤

    一、安装 DockerDocker-compose

    • 安装 Docker
    #更新、安装必备软件
    +
    +apt-get update && apt-get install -y wget nano
    +
    +#安装docker:
    +
    +curl -sSL https://get.docker.com/ | sh
    +
    +
    +#开机自动启动
    +
    +systemctl start docker
    +
    +systemctl enable docker
    +
    • 安装 Docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    +sudo chmod +x /usr/local/bin/docker-compose
    +

    二、安装 Nginx Proxy Manager 中文版open in new window

    • 创建目录
    mkdir -p /data/docker_data/npm
    +cd /data/docker_data/npm
    +
    • 创建 docker-compose.yml 文件
    nano docker-compose.yml
    +
    • 在文件中填入以下内容,然后 Ctrl+X 保存,按 Y 退出
    version: '3'
    +services:
    +  app:
    +    image: 'chishin/nginx-proxy-manager-zh:latest'
    +    restart: always
    +    ports:
    +      - '80:80'
    +      - '81:81'
    +      - '443:443'
    +    volumes:
    +      - ./data:/data
    +      - ./letsencrypt:/etc/letsencrypt
    +
    • 创建完成后,运行
    docker-compose up -d
    +
    • 然后就可以通过 IP:81 来访问 Nginx Proxy Manager ,用初始账号密码登陆并修改。
    Email:     admin@example.com
    +Password:  changeme
    +
    • 反代 Nginx Proxy Manager,并添加 SSL
    View Screenshots

    1
    2

    三、创建静态网站目录,添加内容并反代

    • 在挂载的 data 文件夹里面创建一个新的网站文件夹
    mkdir -p /data/docker_data/npm/data/sub.ven2s.cn
    +
    • 将带有html文件的内容放到这个文件夹里面
    # 将/sub-web-modify/dist/文件夹下的所用文件移动到/data/docker_data/npm/data/sub.ven2s.cn/下
    +mv ~/sub-web-modify/dist/* /data/docker_data/npm/data/sub.ven2s.cn/
    +
    location / {
    +    root /data/sub.ven2s.cn;
    +    index index.html index.htm;
    +    error_page 404 /index.html;
    +}
    +

    大功告成

    + + + diff --git a/zh/code/port-forwarding.html b/zh/code/port-forwarding.html new file mode 100644 index 00000000..bfa94be1 --- /dev/null +++ b/zh/code/port-forwarding.html @@ -0,0 +1,40 @@ + + + + + + + + 記錄“複雜”的家庭內網端口轉發 | 风至万始苏 + + + + + + +
    跳至主要內容

    記錄“複雜”的家庭內網端口轉發

    Ven2s...大约 3 分钟Home Network Layoutport forwardnetwork

    Internal network port forwarding

    前言

    • 在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 pingopen in new window 了下端口,果然,状态显示是关闭了的。

      1
      😏
    • 来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

    • 其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

    • 综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

      2
      😏
      2
      😏

    端口映射

    服务名称设备IP外部端口(主机)内部端口(主路由)外部端口(主路由)
    内部端口(主机)内部端口(openWRT)外部端口(openWRT)
    RDP192.168.123.1103389338933893389
    Alist192.168.123.1105244524452445244
    SSH192.168.123.11022212121212121
    openWRT192.168.123.380225132251322513
    • 可以看到,由于我家里的网络布局,对端口进行了两次映射,先把最外面的主路由端口映射到 openWRT 上,再把第二层设备 openWRT 端口映射到主机上,如此就形成了完整的端口映射方案,这下再避开一些电信封禁的端口,是可以完美访问内网设备的。

    域名访问

    • 按理说,我在上篇文章的 ddns-go 中添加了域名, web 服务是可以直接通过域名+端口的形式访问的,但是此时会跳转错误。通过分析,其实也不难得出答案,访问 web 服务时,因为域名要占用80端口,但是80端口又是被封禁了,所以是无法用此方法的。

    • 来到宝塔面板,添加站点,输入域名+已经映射完成的端口号,访问成功

      4
      5

    • 访问网页时,即使加上了 SSL 也是显示的“不安全”,从研究服务器这么久可以知道,访问内网实际上是一样的,加上 SSL 是可以成功的。这里一直没有搞懂原因,还是闲下来再测试和折腾吧。。。

    + + + diff --git a/zh/code/server-building.html b/zh/code/server-building.html new file mode 100644 index 00000000..117de430 --- /dev/null +++ b/zh/code/server-building.html @@ -0,0 +1,164 @@ + + + + + + + + 从零开始的服务器搭建纪实 | 风至万始苏 + + + + + + +
    跳至主要內容

    从零开始的服务器搭建纪实

    Ven2s...大约 6 分钟linuxServer

    Hello World

    LuvSia

    Server Building

    准备工作

    VPSDomain
    dmitopen in new windowexample.comopen in new windownginxopen in new windowmysqlopen in new windowphpopen in new windowphpmyadminopen in new windowcloudflareopen in new window

    更新软件源

    apt update
    +

    搭建思路

    预留一级域名搭建网站给各个应用添加前端网页根路径。

    后因部分应用无法添加二级目录(网页根路径),所以这里只能使用添加二级域名的思路,区别各个应用。

    再通过添加反向代理,实现分域名访问不同前端应用。

    开始搭建

    宝塔面板

    WorkWeb
    宝塔面板btopen in new window

    1.使用一键配置工具。
    一键脚本集成工具

    wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
    +

    wget -O install.sh http://io.bt.sy/install/install-ubuntu_6.0.sh && bash install.sh
    +

    2.安装nginx-1.21mysql-5.5php-7.4phpmyadmin-5.0四件套

    3.添加站点。

    WorkDomain
    alista.example.comopen in new window正常
    宝塔面板b.example.comopen in new window正常
    Transmissiont.example.comopen in new window正常
    X-UIx.example.comopen in new window正常

    4.设置,添加SSL,强制开启https

    记录证书路径,证书可以直接在宝塔面板进行更新,或是设置定时任务自动更新;

    宝塔面板申请的证书在如下目录:/www/server/panel/vhost/cert/你的域名/ 目录之下。

    强制开启https

    5.关闭面板安全入户,即删除二级目录

    rm -f /www/server/panel/data/admin_path.pl
    +

    6.在Cloudflare中解析二级域名b.example.com

    7.添加反向代理到b.example.com

    代理名称 宝塔面板
    +目标URL  http://127.0.0.1:8888  发送域名 $host
    +

    8.安装docker安装器。

    X-UI

    WorkWebTools
    x-uixuiopen in new windowdockeropen in new window

    1.镜像源

    enwaiax/x-ui:latest
    +

    2.安装运行

    mkdir x-ui && cd x-ui
    +docker run -itd --network=host \
    +    -v $PWD/db/:/etc/x-ui/ \
    +    -v $PWD/cert/:/root/cert/ \
    +    --name x-ui --restart=unless-stopped \
    +    enwaiax/x-ui:latest
    +

    3.在Cloudflare中解析二级域名x.example.com

    4.添加反向代理到x.example.com

    代理名称 x-ui
    +目标URL  http://127.0.0.1:54321  发送域名 $host
    +

    5.配置VMess协议,开启ws,路径/xiya

    6.开启CDN加速,在nginx配置文件中添加如下。

    location /xiya {
    +        proxy_redirect off;
    +        proxy_pass http://127.0.0.1:22513;
    +        proxy_http_version 1.1;
    +        proxy_set_header Upgrade $http_upgrade;
    +        proxy_set_header Connection "upgrade";
    +        proxy_set_header Host $http_host;
    +        proxy_read_timeout 300s;
    +        # Show realip in v2ray access.log
    +        proxy_set_header X-Real-IP $remote_addr;
    +        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    +  }
    +

    7.开启Cloudflare小云朵,并优选IP。

    8.下载优选IPopen in new window ,选出优选IP后,客户端如下配置

    + 填入优选IP
    ++ 更改端口为443;
    ++ host设置x.example.com;
    ++ 开启tls。
    +

    9.Surge配置

    🇭🇰 VMess = vmess, 104.19.79.223, 443, username=2d285385-836d-4b30-f32c-11cdd637aeed, tls=true, tls13=false, ws=true, ws-path=/xiya, sni=example.com, ws-headers=Host:example.com, skip-cert-verify=0, tfo=false, udp-relay=true
    +

    Alist

    WorkWebTools
    Alistalistopen in new windowdockeropen in new window

    1.添加镜像源

    xhofe/alist:latest
    +

    2.不配置容器,使用代码

    docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest
    +

    3.在Cloudflare中解析二级域名a.example.com

    4.添加反向代理到a.example.comopen in new window

    代理名称 alist
    +目标URL  http://127.0.0.1:5244  发送域名 $host
    +

    Transmission

    WorkWebTools
    Transmissiontransmissionopen in new windowdockeropen in new window

    1.Docker安装

    构建镜像

    # 克隆仓库
    +git clone https://github.com/helloxz/docker-transmission.git
    +# 进入仓库目录
    +cd docker-transmission
    +# 构建Docker镜像
    +docker build -t luvsia:transmission
    +

    运行镜像

    docker run -d --name="transmission" \
    +  -e USERNAME=ventus \
    +  -e PASSWORD=ysw554247430 \
    +  -p 9091:9091 \
    +  -p 51413:51413 \
    +  -p 51413:51413/udp \
    +  -v /GoogleDrive:/Downloads \
    +  --restart=always \
    +  luvsia:transmission
    +

    /GoogleDrive:本地下载目录为Rclone mount GoogleDrive中的谷歌云盘目录,自动下载到谷歌云盘,实现无线网盘

    2-1.普通安装

    安装transmission-daemon

    apt-get install transmission-daemon
    +

    首先执行一次启动和停止命令,防止配置文件被覆盖

    启动

    service transmission-daemon start
    +

    停止

    service transmission-daemon stop
    +

    重启

    service transmission-daemon restart
    +

    修改transmission-daemon配置文件

    nano /var/lib/transmission-daemon/info/settings.json
    +
    "rpc-host-whitelist": "*",  //域名白名单,*为允许所有
    +"rpc-host-whitelist-enabled": false, //是否开启白名单,false为否
    +"rpc-password": "远程登录密码",
    +"rpc-port": 9091, //远程登录端口
    +"rpc-username": "远程帐号",
    +"rpc-whitelist": "*", //ip白名单
    +"rpc-whitelist-enabled": false,  //是否开启ip白名单,false为否
    +

    执行启动命令

    service transmission-daemon start
    +
    systemctl enable transmission-daemon.service
    +

    2-2.transmission web control

    获取安装脚本

    wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control-cn.sh
    +

    执行安装脚本

    bash install-tr-control-cn.sh
    +

    3.在Cloudflare中解析二级域名t.example.com

    4.添加反向代理到t.example.comopen in new window

    代理名称 transmission
    +目标URL  http://127.0.0.1:9091  发送域名 $host
    +

    5.修改默认保存目录/GoogleDrive,启用临时目录/Downloads,记得给!权限!

    把`/Downloads`赋予777权限
    +

    Rclone

    WorkWebTools
    Rclonercloneopen in new windowgoogledriveopen in new window

    1.安装Rclone

    wget https://www.moerats.com/usr/shell/rclone_debian.sh && bash rclone_debian.sh
    +

    2.初始化配置

    rclone config
    +

    3.选择GoogleDrive,剩余操作参考这里open in new window

    CMD开启代理

    set http_proxy=socks5://127.0.0.1:10808 #端口号为http的socks5实际端口
    +set https_proxy=socks5://127.0.0.1:10808 #端口号为https的socks5实际端口
    +

    4.挂载磁盘

    mkdir -p /GoogleDrive
    +
    mkdir -p /Downloads
    +

    提示

    确认安装了FUSE3

    apt install fuse3
    +
    rclone mount ventusoon:ventus /GoogleDrive \
    + --umask 0000 \
    + --default-permissions \
    + --allow-non-empty \
    + --allow-other \
    + --transfers 4 \
    + --buffer-size 32M \
    + --low-level-retries 200
    + --dir-cache-time 12h
    + --vfs-read-chunk-size 32M
    + --vfs-read-chunk-size-limit 1G
    +

    5.配置开机自动挂载

    cat > /etc/systemd/system/rclone.service <<EOF
    +[Unit]
    +Description=Rclone
    +AssertPathIsDirectory=LocalFolder
    +After=network-online.target
    +[Service]
    +Type=simple
    +ExecStart=/usr/bin/rclone mount ventusoon:ventus /GoogleDrive \
    + --umask 0000 \
    + --default-permissions \
    + --allow-non-empty \
    + --allow-other \
    + --buffer-size 32M \
    + --dir-cache-time 12h \
    + --vfs-read-chunk-size 64M \
    + --vfs-read-chunk-size-limit 1G
    +ExecStop=/bin/fusermount -u LocalFolder
    +Restart=on-abort
    +User=root
    +[Install]
    +WantedBy=default.target
    +EOF
    +

    挂载成功后,输入df -h命令即可看到挂载的磁盘

    6.常用命令

    systemctl start rclone
    +
    systemctl enable rclone
    +
    systemctl stop rclone
    +
    systemctl status rclone
    +

    7.Transmission添加rlone挂载在GoogleDrive上的路径

    /GoogleDrive
    +

    Live-torrent

    WorkWebTools
    live-torrentlive-torrentopen in new windowdockeropen in new window

    1.镜像源

    davenchy/live-torrent
    +

    2.安装运行

    docker run --restart=always --name live-torrent -d -p 8080:8080 davenchy/live-torrent
    +

    3.在Cloudflare中解析二级域名live.example.com

    4.添加反向代理到live.example.com

    代理名称 Live-torrent
    +目标URL  http://127.0.0.1:8080  发送域名 $host
    +

    Cloudflare WARP

    WorkWebUse
    Cloudflare WARPcloudflareopen in new window使用教程open in new window

    功能菜单

    bash <(curl -fsSL git.io/warp.sh) menu
    +

    WARP WireGuard 双栈全局网络

    bash <(curl -fsSL git.io/warp.sh) d
    +

    IPv4 网络

    bash <(curl -fsSL git.io/warp.sh) 4
    +

    IPv6 网络

    bash <(curl -fsSL git.io/warp.sh) 6
    +

    WARP 官方客户端 SOCKS5 代理

    bash <(curl -fsSL git.io/warp.sh) s5
    +

    后记

    感谢

    @guodongxiarenopen in new window
    @HostCLiopen in new window
    @jinwypopen in new window
    @Xhofeopen in new window
    @vaxiluopen in new window
    @enwaiaxopen in new window
    @XIU2open in new window
    @helloxzopen in new window
    @moeratsopen in new window
    @P3TERXopen in new window


    + + + diff --git a/zh/demo/disable.html b/zh/demo/disable.html index f0906693..3e1cf452 100644 --- a/zh/demo/disable.html +++ b/zh/demo/disable.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容

    布局与功能禁用


    你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。

    本页面就是一个示例,禁用了如下功能:

    • 导航栏
    • 侧边栏
    • 路径导航
    • 页面信息
    • 贡献者
    • 编辑此页链接
    • 更新时间
    • 上一篇/下一篇 链接
    • 评论
    • 页脚
    • 返回顶部按钮
    - +
    跳至主要內容

    布局与功能禁用


    你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。

    本页面就是一个示例,禁用了如下功能:

    • 导航栏
    • 侧边栏
    • 路径导航
    • 页面信息
    • 贡献者
    • 编辑此页链接
    • 更新时间
    • 上一篇/下一篇 链接
    • 评论
    • 页脚
    • 返回顶部按钮
    + diff --git a/zh/demo/encrypt.html b/zh/demo/encrypt.html index 8e12cb60..4e81fb52 100644 --- a/zh/demo/encrypt.html +++ b/zh/demo/encrypt.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/demo/index.html b/zh/demo/index.html index 1b5c7934..0d29e7fb 100644 --- a/zh/demo/index.html +++ b/zh/demo/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/demo/markdown.html b/zh/demo/markdown.html index 5de3c48e..a4aea895 100644 --- a/zh/demo/markdown.html +++ b/zh/demo/markdown.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容

    Markdown 展示

    Ven2s...大约 3 分钟使用指南Markdown

    VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

    你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

    Markdown 介绍

    如果你是一个新手,还不会编写 Markdown,请先阅读 Markdown 介绍open in new windowMarkdown 演示open in new window

    Markdown 配置

    VuePress 通过 Frontmatter 为每个 Markdown 页面引入配置。

    相关信息

    Frontmatter 是 VuePress 中很重要的一个概念,如果你不了解它,你需要阅读 Frontmatter 介绍open in new window

    Markdown 扩展

    VuePress 会使用 markdown-itopen in new window 来解析 Markdown 内容,因此可以借助于 markdown-it 插件来实现 语法扩展open in new window

    VuePress 扩展

    为了丰富文档写作,VuePress 对 Markdown 语法进行了扩展。

    关于这些扩展,请阅读 VuePress 中的 Markdown 扩展open in new window

    主题扩展

    通过 vuepress-plugin-md-enhanceopen in new window,主题扩展了更多 Markdown 语法,提供更加丰富的写作功能。

    自定义容器

    安全的在 Markdown 中使用 {{ variable }}。

    自定义标题

    信息容器,包含 代码链接

    const a = 1;
    +    
    跳至主要內容

    Markdown 展示

    Ven2s...大约 3 分钟使用指南Markdown

    VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

    你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

    Markdown 介绍

    如果你是一个新手,还不会编写 Markdown,请先阅读 Markdown 介绍open in new windowMarkdown 演示open in new window

    Markdown 配置

    VuePress 通过 Frontmatter 为每个 Markdown 页面引入配置。

    相关信息

    Frontmatter 是 VuePress 中很重要的一个概念,如果你不了解它,你需要阅读 Frontmatter 介绍open in new window

    Markdown 扩展

    VuePress 会使用 markdown-itopen in new window 来解析 Markdown 内容,因此可以借助于 markdown-it 插件来实现 语法扩展open in new window

    VuePress 扩展

    为了丰富文档写作,VuePress 对 Markdown 语法进行了扩展。

    关于这些扩展,请阅读 VuePress 中的 Markdown 扩展open in new window

    主题扩展

    通过 vuepress-plugin-md-enhanceopen in new window,主题扩展了更多 Markdown 语法,提供更加丰富的写作功能。

    自定义容器

    安全的在 Markdown 中使用 {{ variable }}。

    自定义标题

    信息容器,包含 代码链接

    const a = 1;
     

    自定义标题

    提示容器

    自定义标题

    警告容器

    自定义标题

    危险容器

    自定义标题

    详情容器

    代码块

    npm i -D vuepress-theme-hope
    @@ -125,7 +125,7 @@
       <input v-model="msg" />
     </template>
     

    :::

    幻灯片

    @slidestart

    幻灯片 1

    一个有文字和 链接open in new window 的段落


    幻灯片 2

    • 项目 1
    • 项目 2

    幻灯片 3.1

    const a = 1;
    -

    --

    幻灯片 3.2

    $$
    J(\theta_0,\theta_1) = \sum_{i=0}
    $$

    @slideend


    1. 这是脚注内容 ↩︎

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - +

    --

    幻灯片 3.2

    $$
    J(\theta_0,\theta_1) = \sum_{i=0}
    $$

    @slideend


    1. 这是脚注内容 ↩︎

    + diff --git a/zh/demo/page.html b/zh/demo/page.html index 70ae59de..ce9bc577 100644 --- a/zh/demo/page.html +++ b/zh/demo/page.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    页面配置

    页面配置

    Ms.Hope...大约 1 分钟使用指南页面配置使用指南

    more 注释之前的内容被视为文章摘要。

    页面信息

    你可以在 Markdown 的 Frontmatter 中设置页面信息。

    • 作者设置为 Ms.Hope。
    • 写作日期为 2020 年 1 月 1 日
    • 分类为 “使用指南”
    • 标签为 “页面配置” 和 “使用指南”

    页面内容

    你可以自由在这里书写你的 Markdown。

    提示

    • 你可以将图片和 Markdown 文件放置在一起,但是你需要使用相对链接./ 进行引用。

    • 对于 .vuepress/public 文件夹的图片,请使用绝对链接 / 进行引用。

    主题包含了一个自定义徽章可以使用:

    文字结尾应该有深蓝色的 徽章文字 徽章。 徽章文字

    页面结构

    此页面应当包含:

    你可以通过主题选项和页面 Frontmatter 自定义它们。

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - +
    跳至主要內容
    页面配置

    页面配置

    Ms.Hope...大约 1 分钟使用指南页面配置使用指南

    more 注释之前的内容被视为文章摘要。

    页面信息

    你可以在 Markdown 的 Frontmatter 中设置页面信息。

    • 作者设置为 Ms.Hope。
    • 写作日期为 2020 年 1 月 1 日
    • 分类为 “使用指南”
    • 标签为 “页面配置” 和 “使用指南”

    页面内容

    你可以自由在这里书写你的 Markdown。

    提示

    • 你可以将图片和 Markdown 文件放置在一起,但是你需要使用相对链接./ 进行引用。

    • 对于 .vuepress/public 文件夹的图片,请使用绝对链接 / 进行引用。

    主题包含了一个自定义徽章可以使用:

    文字结尾应该有深蓝色的 徽章文字 徽章。 徽章文字

    页面结构

    此页面应当包含:

    你可以通过主题选项和页面 Frontmatter 自定义它们。

    + diff --git a/zh/index.html b/zh/index.html index 8d31a9d1..8100e608 100644 --- a/zh/index.html +++ b/zh/index.html @@ -5,7 +5,7 @@ - 博客主页 | 风至万始苏 + 博客主页 | 风至万始苏 + + + + + + + + + diff --git a/zh/note/1993.html b/zh/note/1993.html new file mode 100644 index 00000000..b8ae67b4 --- /dev/null +++ b/zh/note/1993.html @@ -0,0 +1,40 @@ + + + + + + + + 一九九三 | 风至万始苏 + + + + + + + + + + diff --git a/zh/note/index.html b/zh/note/index.html new file mode 100644 index 00000000..8a2ee4f5 --- /dev/null +++ b/zh/note/index.html @@ -0,0 +1,40 @@ + + + + + + + + Note | 风至万始苏 + + + + + + + + + + diff --git a/zh/posts/Linux/1993.html b/zh/posts/Linux/1993.html deleted file mode 100644 index cf33a627..00000000 --- a/zh/posts/Linux/1993.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 一九九三 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Linux/Best-Emoji.html b/zh/posts/Linux/Best-Emoji.html deleted file mode 100644 index 3c59f028..00000000 --- a/zh/posts/Linux/Best-Emoji.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 超酷的Emoji表情! | 风至万始苏 - - - - - - -
    跳至主要內容

    超酷的Emoji表情!

    Ven2s...大约 6 分钟MarkdownBlog

    Emoji表情

    风至万始苏

    原文open in new window

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    如"😊",显示为😊

    人物

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bowtie::bowtie::smile:😄:laughing:😆
    :blush:😊:smiley:😃:relaxed:☺️
    :smirk:😏:heart_eyes:😍:kissing_heart:😘
    :kissing_closed_eyes:😚:flushed:😳:relieved:😌
    :satisfied:😆:grin:😁:wink:😉
    :stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
    :kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
    :sleeping:😴:worried:😟:frowning:😦
    :anguished:😧:open_mouth:😮:grimacing:😬
    :confused:😕:hushed:😯:expressionless:😑
    :unamused:😒:sweat_smile:😅:sweat:😓
    :disappointed_relieved:😥:weary:😩:pensive:😔
    :disappointed:😞:confounded:😖:fearful:😨
    :cold_sweat:😰:persevere:😣:cry:😢
    :sob:😭:joy:😂:astonished:😲
    :scream:😱:neckbeard::neckbeard::tired_face:😫
    :angry:😠:rage:😡:triumph:😤
    :sleepy:😪:yum:😋:mask:😷
    :sunglasses:😎:dizzy_face:😵:imp:👿
    :smiling_imp:😈:neutral_face:😐:no_mouth:😶
    :innocent:😇:alien:👽:yellow_heart:💛
    :blue_heart:💙:purple_heart:💜:heart:❤️
    :green_heart:💚:broken_heart:💔:heartbeat:💓
    :heartpulse:💗:two_hearts:💕:revolving_hearts:💞
    :cupid:💘:sparkling_heart:💖:sparkles:
    :star::star2:🌟:dizzy:💫
    :boom:💥:collision:💥:anger:💢
    :exclamation::question::grey_exclamation:
    :grey_question::zzz:💤:dash:💨
    :sweat_drops:💦:notes:🎶:musical_note:🎵
    :fire:🔥:hankey:💩:poop:💩
    ::💩:+1:👍:thumbsup:👍
    :-1:👎:thumbsdown:👎:ok_hand:👌
    :punch:👊:facepunch:👊:fist:
    :v:✌️:wave:👋:hand:
    :raised_hand::open_hands:👐:point_up:☝️
    :point_down:👇:point_left:👈:point_right:👉
    :raised_hands:🙌:pray:🙏:point_up_2:👆
    :clap:👏:muscle:💪:metal:🤘
    :fu:🖕:walking:🚶:runner:🏃
    :running:🏃:couple:👫:family:👪
    :two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
    :dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
    :information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
    :person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
    :couplekiss:💏:couple_with_heart:💑:massage:💆
    :haircut:💇:nail_care:💅:boy:👦
    :girl:👧:woman:👩:man:👨
    :baby:👶:older_woman:👵:older_man:👴
    :person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
    :construction_worker:👷:cop:👮:angel:👼
    :princess:👸:smiley_cat:😺:smile_cat:😸
    :heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
    :scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
    :pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
    :see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
    :guardsman:💂‍♂️:skull:💀:feet:🐾
    :lips:👄:kiss:💋:droplet:💧
    :ear:👂:eyes:👀:nose:👃
    :tongue:👅:love_letter:💌:bust_in_silhouette:👤
    :busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
    :feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
    :godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
    :rage2::rage2::rage3::rage3::rage4::rage4:
    :suspect::suspect::trollface::trollface:

    自然

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :sunny:☀️:umbrella::cloud:☁️
    :snowflake:❄️:snowman::zap:
    :cyclone:🌀:foggy:🌁:ocean:🌊
    :cat:🐱:dog:🐶:mouse:🐭
    :hamster:🐹:rabbit:🐰:wolf:🐺
    :frog:🐸:tiger:🐯:koala:🐨
    :bear:🐻:pig:🐷:pig_nose:🐽
    :cow:🐮:boar:🐗:monkey_face:🐵
    :monkey:🐒:horse:🐴:racehorse:🐎
    :camel:🐫:sheep:🐑:elephant:🐘
    :panda_face:🐼:snake:🐍:bird:🐦
    :baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
    :chicken:🐔:penguin:🐧:turtle:🐢
    :bug:🐛:honeybee:🐝:ant:🐜
    :beetle:🪲:snail:🐌:octopus:🐙
    :tropical_fish:🐠:fish:🐟:whale:🐳
    :whale2:🐋:dolphin:🐬:cow2:🐄
    :ram:🐏:rat:🐀:water_buffalo:🐃
    :tiger2:🐅:rabbit2:🐇:dragon:🐉
    :goat:🐐:rooster:🐓:dog2:🐕
    :pig2:🐖:mouse2:🐁:ox:🐂
    :dragon_face:🐲:blowfish:🐡:crocodile:🐊
    :dromedary_camel:🐪:leopard:🐆:cat2:🐈
    :poodle:🐩:paw_prints:🐾:bouquet:💐
    :cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
    :rose:🌹:sunflower:🌻:hibiscus:🌺
    :maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
    :herb:🌿:mushroom:🍄:cactus:🌵
    :palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
    :chestnut:🌰:seedling:🌱:blossom:🌼
    :ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
    :sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
    :new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
    :full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
    :waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
    :moon:🌔:earth_africa:🌍:earth_americas:🌎
    :earth_asia:🌏:volcano:🌋:milky_way:🌌
    :partly_sunny::octocat::octocat::squirrel::squirrel:
    :waxing_gibbous_moon:🌔

    物体

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bamboo:🎍:gift_heart:💝:dolls:🎎
    :school_satchel:🎒:mortar_board:🎓:flags:🎏
    :fireworks:🎆:sparkler:🎇:wind_chime:🎐
    :rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
    :santa:🎅:christmas_tree:🎄:gift:🎁
    :bell:🔔:no_bell:🔕:tanabata_tree:🎋
    :tada:🎉:confetti_ball:🎊:balloon:🎈
    :crystal_ball:🔮:cd:💿:dvd:📀
    :floppy_disk:💾:camera:📷:video_camera:📹
    :movie_camera:🎥:computer:💻:tv:📺
    :iphone:📱:phone:☎️:telephone:☎️
    :telephone_receiver:📞:pager:📟:fax:📠
    :minidisc:💽:vhs:📼:sound:🔉
    :speaker:🔈:mute:🔇:loudspeaker:📢
    :mega:📣:hourglass::hourglass_flowing_sand:
    :alarm_clock::watch::radio:📻
    :satellite:📡:loop::mag:🔍
    :mag_right:🔎:unlock:🔓:lock:🔒
    :lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
    :bulb:💡:flashlight:🔦:high_brightness:🔆
    :low_brightness:🔅:electric_plug:🔌:battery:🔋
    :calling:📲:email:📧:mailbox:📫
    :postbox:📮:bath:🛀:bathtub:🛁
    :shower:🚿:toilet:🚽:wrench:🔧
    :nut_and_bolt:🔩:hammer:🔨:seat:💺
    :moneybag:💰:yen:💴:dollar:💵
    :pound:💷:euro:💶:credit_card:💳
    :money_with_wings:💸:e-mail:📧:inbox_tray:📥
    :outbox_tray:📤:envelope:✉️:incoming_envelope:📨
    :postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
    :mailbox_with_no_mail:📭:door:🚪:smoking:🚬
    :bomb:💣:gun:🔫:hocho:🔪
    :pill:💊:syringe:💉:page_facing_up:📄
    :page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
    :chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
    :clipboard:📋:calendar:📆:date:📅
    :card_index:📇:file_folder:📁:open_file_folder:📂
    :scissors:✂️:pushpin:📌:paperclip:📎
    :black_nib:✒️:pencil2:✏️:straight_ruler:📏
    :triangular_ruler:📐:closed_book:📕:green_book:📗
    :blue_book:📘:orange_book:📙:notebook:📓
    :notebook_with_decorative_cover:📔:ledger:📒:books:📚
    :bookmark:🔖:microscope:🔬:telescope:🔭
    :name_badge:📛:newspaper:📰:football:🏈
    :basketball:🏀:soccer::baseball:
    :tennis:🎾:8ball:🎱:rugby_football:🏉
    :bowling:🎳:golf::mountain_bicyclist:🚵
    :bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
    :swimmer:🏊:surfer:🏄:ski:🎿
    :spades:♠️:hearts:♥️:clubs:♣️
    :diamonds:♦️:gem:💎:ring:💍
    :trophy:🏆:musical_score:🎼:musical_keyboard:🎹
    :violin:🎻:space_invader:👾:video_game:🎮
    :black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
    :dart:🎯:mahjong:🀄:clapper:🎬
    :memo:📝:pencil:📝:book:📖
    :art:🎨:microphone:🎤:headphones:🎧
    :trumpet:🎺:saxophone:🎷:guitar:🎸
    :shoe:👞:sandal:👡:high_heel:👠
    :lipstick:💄:boot:👢:shirt:👕
    :tshirt:👕:necktie:👔:womans_clothes:👚
    :dress:👗:running_shirt_with_sash:🎽:jeans:👖
    :kimono:👘:bikini:👙:ribbon:🎀
    :tophat:🎩:crown:👑:womans_hat:👒
    :mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
    :handbag:👜:pouch:👝:purse:👛
    :eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
    :tea:🍵:sake:🍶:baby_bottle:🍼
    :beer:🍺:beers:🍻:cocktail:🍸
    :tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
    :pizza:🍕:hamburger:🍔:fries:🍟
    :poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
    :curry:🍛:fried_shrimp:🍤:bento:🍱
    :sushi:🍣:fish_cake:🍥:rice_ball:🍙
    :rice_cracker:🍘:rice:🍚:ramen:🍜
    :stew:🍲:oden:🍢:dango:🍡
    :egg:🥚:bread:🍞:doughnut:🍩
    :custard:🍮:icecream:🍦:ice_cream:🍨
    :shaved_ice:🍧:birthday:🎂:cake:🍰
    :cookie:🍪:chocolate_bar:🍫:candy:🍬
    :lollipop:🍭:honey_pot:🍯:apple:🍎
    :green_apple:🍏:tangerine:🍊:lemon:🍋
    :cherries:🍒:grapes:🍇:watermelon:🍉
    :strawberry:🍓:peach:🍑:melon:🍈
    :banana:🍌:pear:🍐:pineapple:🍍
    :sweet_potato:🍠:eggplant:🍆:tomato:🍅
    :corn:🌽

    地点

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :house:🏠:house_with_garden:🏡:school:🏫
    :office:🏢:post_office:🏣:hospital:🏥
    :bank:🏦:convenience_store:🏪:love_hotel:🏩
    :hotel:🏨:wedding:💒:church:
    :department_store:🏬:european_post_office:🏤:city_sunrise:🌇
    :city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
    :tent::factory:🏭:tokyo_tower:🗼
    :japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
    :sunrise:🌅:stars:🌠:statue_of_liberty:🗽
    :bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
    :ferris_wheel:🎡:fountain::roller_coaster:🎢
    :ship:🚢:speedboat:🚤:boat:
    :sailboat::rowboat:🚣:anchor:
    :rocket:🚀:airplane:✈️:helicopter:🚁
    :steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
    :bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
    :mountain_cableway:🚠:tractor:🚜:blue_car:🚙
    :oncoming_automobile:🚘:car:🚗:red_car:🚗
    :taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
    :bus:🚌:oncoming_bus:🚍:rotating_light:🚨
    :police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
    :ambulance:🚑:minibus:🚐:truck:🚚
    :train:🚋:station:🚉:train2:🚆
    :bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
    :monorail:🚝:railway_car:🚃:trolleybus:🚎
    :ticket:🎫:fuelpump::vertical_traffic_light:🚦
    :traffic_light:🚥:warning:⚠️:construction:🚧
    :beginner:🔰:atm:🏧:slot_machine:🎰
    :busstop:🚏:barber:💈:hotsprings:♨️
    :checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
    :moyai:🗿:circus_tent:🎪:performing_arts:🎭
    :round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
    :kr:🇰🇷:cn:🇨🇳:us:🇺🇸
    :fr:🇫🇷:es:🇪🇸:it:🇮🇹
    :ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
    :de:🇩🇪

    符号

    syntaxpreviewsyntaxpreviewsyntaxpreview
    :one:1️⃣:two:2️⃣:three:3️⃣
    :four:4️⃣:five:5️⃣:six:6️⃣
    :seven:7️⃣:eight:8️⃣:nine:9️⃣
    :keycap_ten:🔟:1234:🔢:zero:0️⃣
    :hash:#️⃣:symbols:🔣:arrow_backward:◀️
    :arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
    :capital_abcd:🔠:abcd:🔡:abc:🔤
    :arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
    :arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
    :arrow_double_down::arrow_double_up::arrow_down_small:🔽
    :arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
    :arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
    :arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
    :rewind::fast_forward::information_source:ℹ️
    :ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
    :repeat_one:🔂:new:🆕:top:🔝
    :up:🆙:cool:🆒:free:🆓
    :ng:🆖:cinema:🎦:koko:🈁
    :signal_strength:📶:u5272::u5272::u5408::u5408:
    :u55b6::u55b6::u6307::u6307::u6708::u6708:
    :u6709::u6709::u6e80:🈵:u7121::u7121:
    :u7533::u7533::u7a7a::u7a7a::u7981::u7981:
    :sa:🈂️:restroom:🚻:mens:🚹
    :womens:🚺:baby_symbol:🚼:no_smoking:🚭
    :parking:🅿️:wheelchair::metro:🚇
    :baggage_claim:🛄:accept:🉑:wc:🚾
    :potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
    :congratulations:㊗️:m:Ⓜ️:passport_control:🛂
    :left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
    :cl:🆑:sos:🆘:id:🆔
    :no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
    :do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
    :no_pedestrians:🚷:children_crossing:🚸:no_entry:
    :eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
    :vs:🆚:vibration_mode:📳:mobile_phone_off:📴
    :chart:💹:currency_exchange:💱:aries:
    :taurus::gemini::cancer:
    :leo::virgo::libra:
    :scorpius::sagittarius::capricorn:
    :aquarius::pisces::ophiuchus:
    :six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
    :b:🅱️:ab:🆎:o2:🅾️
    :diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
    :on:🔛:soon:🔜:clock1:🕐
    :clock130:🕜:clock10:🕙:clock1030:🕥
    :clock11:🕚:clock1130:🕦:clock12:🕛
    :clock1230:🕧:clock2:🕑:clock230:🕝
    :clock3:🕒:clock330:🕞:clock4:🕓
    :clock430:🕟:clock5:🕔:clock530:🕠
    :clock6:🕕:clock630:🕡:clock7:🕖
    :clock730:🕢:clock8:🕗:clock830:🕣
    :clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
    :copyright:©️:registered:®️:tm:™️
    :x::heavy_exclamation_mark::bangbang:‼️
    :interrobang:⁉️:o::heavy_multiplication_x:✖️
    :heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
    :white_flower:💮:100:💯:heavy_check_mark:✔️
    :ballot_box_with_check:☑️:radio_button:🔘:link:🔗
    :curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
    :trident:🔱:black_large_square::white_large_square:
    :white_check_mark::white_square_button:🔳:black_square_button:🔲
    :black_circle::white_circle::red_circle:🔴
    :large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
    :small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
    :small_red_triangle_down:🔻:shipit::shipit:
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Linux/beautification.html b/zh/posts/Linux/beautification.html deleted file mode 100644 index 212f263b..00000000 --- a/zh/posts/Linux/beautification.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 萌萌哒的看板娘 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Linux/index.html b/zh/posts/Linux/index.html deleted file mode 100644 index 16cda425..00000000 --- a/zh/posts/Linux/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Linux | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/MacOS/Hackintosh.html b/zh/posts/MacOS/Hackintosh.html deleted file mode 100644 index 4cb7e1df..00000000 --- a/zh/posts/MacOS/Hackintosh.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Hackintosh | 风至万始苏 - - - - - - -
    跳至主要內容

    Hackintosh

    Ven2s...大约 3 分钟Hackintosh

    Hackintosh Reboot Plan

    闲话 回忆与现在

    • 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

    • 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

    • 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

    • 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

    主机及配置

    • 在网上看了很多视频和教程,左挑右选,最终选择了惠普的 800-G4-DM 准系统主机,外加 I5 8500T 的8代 cpu。基本配置如下:

    • ||主机|惠普 HP EliteDesk 800 G4 DM||
      |:---😐:---😐:---😐:---😐
      ||主板|惠普Q370|||
      || CPU |酷睿 i5 8500T ||
      || 显卡 |集成 Intel UHD Graphics 630||
      || 内存 |DDR4 2400MHz 三星16GB(2X8GB)||
      ||无线网卡|博通 BCM94352Z 无线/蓝牙网卡|||
      ||固态硬盘|台电 256G SSD (加装2T SATA SSD)|||
      ||OpenCore|0.9.1|||
      ||MacOS|Ventura 13.3.1 (22E261)|||

    • 完美主义的黑苹果完美度:
    状态完美
    CPU睿频Yes✔︎
    VDA 解码器完全支持✔︎
    IGPU硬件加速(QE/CI)Yes✔︎
    Metal支持Yes✔︎
    USB定制/完整识别Yes✔︎
    网卡内建Yes✔︎
    WIFI免驱Yes✔︎
    蓝牙全功能YesHackintool无法识别,使用正常(又不是不能用.jpg)
    AirDrop全功能No仅支持从iOS端投送到Mac
    核显输出定制/全功能No截编时只完美一个“DP-HDMI”,其余两个输出口等有测试显示器再折腾
    声音全功能Yes✔︎
    序列号有效没有被用过的序列号Yes✔︎
    iMessage全功能Yes✔︎解放手机 Get
    随航功能Yes✔︎新功能真爽,iOS和 macOS无缝衔接
    HiDPi开启No能开,显示器物理分辨率太低,再开启HiDPi的分辨率更低,就很难受(有了4K显示器再说吧)
    睡眠开启Yes✔︎随睡随醒
    • 系统图鉴

    View More Screenshots

    1
    1

    1
    图鉴
    View More Screenshots

    工具及配参

    所需工具

    名称用途下载
    SSDTTime获取DSDT、SSDTDownloadopen in new window
    ACPICA编译和反编译DSDTDownloadopen in new window
    OpenCorePkgOpenCore引导加载程序Downloadopen in new window
    ProperTree跨平台GUIPlist编辑器Downloadopen in new window
    gibMacOSMacOS恢复镜像下载工具Downloadopen in new window
    GenSMBIOS生成SMBIOSDownloadopen in new window

    环境搭建

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/MacOS/index.html b/zh/posts/MacOS/index.html deleted file mode 100644 index 10ff6940..00000000 --- a/zh/posts/MacOS/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Mac O S | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Server/1.html b/zh/posts/Server/1.html deleted file mode 100644 index d14d5b15..00000000 --- a/zh/posts/Server/1.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 苹果 1 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Server/2.html b/zh/posts/Server/2.html deleted file mode 100644 index b010f123..00000000 --- a/zh/posts/Server/2.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 苹果 2 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Server/ChatGPT-Porxy.html b/zh/posts/Server/ChatGPT-Porxy.html deleted file mode 100644 index 69e02bae..00000000 --- a/zh/posts/Server/ChatGPT-Porxy.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - ChatGPT-Porxy | 风至万始苏 - - - - - - -
    跳至主要內容

    ChatGPT-Porxy

    Ven2s...大约 2 分钟ChatGPT

    Build ChatGPT Reverse Proxy

    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 open in new window 来解决代理问题。

    搭建步骤

    一、安装 DockerDocker-compose

    • 安装 Docker
    #更新、安装必备软件
    -
    -apt-get update && apt-get install -y wget nano
    -
    -#安装docker:
    -
    -curl -sSL https://get.docker.com/ | sh
    -
    -
    -#开机自动启动
    -
    -systemctl start docker
    -
    -systemctl enable docker
    -
    • 安装 Docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    -sudo chmod +x /usr/local/bin/docker-compose
    -

    二、安装 go-chatgpt-api open in new window

    • 创建目录
    mkdir -p /data/docker_data/go-chatgpt-api
    -cd /data/docker_data/go-chatgpt-api
    -
    • 创建 docker-compose.yml 文件
    nano docker-compose.yml
    -
    • 在文件中填入以下内容,然后 Ctrl+X 保存,按 Y 退出
    version: "3"
    -services:
    -  go-chatgpt-api:
    -    container_name: go-chatgpt-api
    -    image: linweiyuan/go-chatgpt-api
    -    ports:
    -      - 8080:8080  # 容器端口映射到宿主机8080端口;宿主机监听端口可按需改为其它端口
    -    environment:
    -      - GIN_MODE=release
    -      - CHATGPT_PROXY_SERVER=http://chatgpt-proxy-server:9515
    -      #- NETWORK_PROXY_SERVER=http://host:port     # NETWORK_PROXY_SERVER:科学上网代理地址,例如:http://10.0.5.10:7890
    -      #- NETWORK_PROXY_SERVER=socks5://host:port   # NETWORK_PROXY_SERVER:科学上网代理地址
    -    depends_on:
    -      - chatgpt-proxy-server
    -    restart: unless-stopped
    -
    -  chatgpt-proxy-server:
    -    container_name: chatgpt-proxy-server
    -    image: linweiyuan/chatgpt-proxy-server
    -    restart: unless-stopped
    -
    • 创建完成后,运行
    docker-compose up -d
    -
    • 检查运行的容器;确保容器状态为UP
    docker ps
    -
    • 检测容器映射到宿主机的监听端口是否监听
    ss -tnlp|grep 8080
    -

    三、使用自建反代

    # 反向代理,可选
    -    API_REVERSE_PROXY: https://example.com/conversation
    -
    • 现在我们访问chatgpt-web,查看是否可以正常使用,注意确保 chatgpt-proxy-server 运行正常, go-chatgpt-api 需要初始化启动需要耐心等待
    # 查看容器日志是否运行正常
    -docker logs -f chatgpt-proxy-server
    -docker logs -f go-chatgpt-api
    -

    完工

    1
    😏

    本教程来源:open in new window

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Server/buildSUB.html b/zh/posts/Server/buildSUB.html deleted file mode 100644 index 40d0a99f..00000000 --- a/zh/posts/Server/buildSUB.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - 搭建属于自己的订阅转换链接 | 风至万始苏 - - - - - - -
    跳至主要內容
    搭建属于自己的订阅转换链接

    搭建属于自己的订阅转换链接

    Ven2s...大约 5 分钟Server

    Sub-Web-Modify前端搭建open in new window

    本项目open in new window基于CareyWang/sub-webopen in new window,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合APIopen in new window,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!

    更新系统并安装 Node 与 Yarn

    依次运行下面四行代码,若是 CentOS 系统,请自行替换下面前两行命令中的 aptyum

    apt update -y
    -apt install -y curl wget sudo nodejs git
    -apt install npm
    -npm install -g yarn
    -

    命令执行完毕以后,请运行下面的代码查询 Node 与 Yarn 是否安装成功,若是成功会返回版本号。

    node -v
    -yarn --version
    -

    下载并安装 sub-web-modify

    拉取 sub-web-modify 程序,并进入 sub-web-modify 文件夹

    git clone https://github.com/youshandefeiyang/sub-web-modify.git
    -cd sub-web-modify
    -

    在项目目录中安装构建依赖项,构建的过程稍微有点长

    yarn install
    -

    使用 webpack 运行 Web 客户端以进行本地开发。

    yarn serve
    -

    出现下图则表示前端调试模式启动成功

    yarn-success
    yarn-success

    这时,我们浏览器访问 http://服务器ip:8080/open in new window 应该可以进行前端 sub-web-modify 的预览了

    记住8082端口的防火墙和安全组要开放

    修改默认后端地址并增加远程规则

    找到 VPS /root/sub-web-modify/src/views/Subconverter.vue 文件用编辑器打开

    找到 backendOptions:将你解析好的后端地址输入进去。域名为你刚才准备的后端域名,要将http改成https,并且增加/sub?的后缀。(这样选项下面就会出现自己的后端地址)

    如果不想用后端作者默认提供的转换那可以把 const defaultBackend = 也改成你自己的域名记得加上 ""。

    找到 remoteConfig: [ 后回车将喜欢的规则复制进去即可。

    配置完毕后打包网站

    配置完毕以后,程序会自动更新,再次刷新前端网页,会出现刚才添加的相关规则。

    经过上面的修改默认后端地址和原程配置的规则就修改好了。

    至此,我们的前端调试完毕,我们现在需要打包,生成一个发布目录并将他发布了。

    首先停止调试程序,CTRL+C ,退出当前调试,然后执行下面的命令进行打包:

    yarn build
    -

    执行以下打包命令,在 /root/sub-web-modify 下面会生成一个 dist 目录,这个目录即为网页的发布目录。

    将这个目录的里面的文件复制到你站点的根目录即可。

    一键搭建前端

    cd /root && git clone https://github.com/youshandefeiyang/sub-web-modify.git && chmod -R 755 sub-web-modify && cd sub-web-modify && yarn install && yarn build
    -

    发布前端

    没有安装宝塔的去宝塔官网看教程安装.

    在宝塔面板中点击增加站点分别将前端站点增加上去,并配置好ssl证书。

    将 /root/sub-web/dist文件夹内的所有文件复制到前端站点的根目录下即可。

    访问该网站,前端就部署好了。

    SubConverter后端搭建open in new window

    新建后端站点并进行反向代理

    在宝塔面板中新建后端的站点,同样配置好ssl并将设置站点的反向代理到25500。

    点击新建好的后端网站的网站名在弹出来的消息盒子中点击反向代理添加发现代理。

    反向代理配置方法方法如图:

    反代
    反代

    设置完毕后我们开始安装后端

    搭建后端程序

    这里我们可以用两种方法搭建后端程序,第一种是用二进制文件搭建,第二种为使用Docker搭建。我个人比较推荐Docker配置简单一行命令即可搞定

    方法一 二进制文件搭建

    下载并解压 subconverter 二进制文件
    cd /root
    -wget https://github.com/tindy2013/subconverter/releases/download/v0.7.2/subconverter_linux64.tar.gz
    -tar -zxvf subconverter_linux64.tar.gz
    -

    完成以后,在 /root 文件夹下会多出一个 subconverter 的文件夹,这个就是我们的后端程序

    修改配置文件参数

    现在我们需要修改后端配置文件中的一些参数

    找到VPS文件 /root/subconverter/pref.ini ,找到如下参数进行修改

    api_access_token=123123dfsdsdfsdfsdf            #随意设置自己知道就行
    -managed_config_prefix=https://sub.yourdomin.com  #设置成我们刚刚解析的后端域名
    -listen=127.0.0.1                                #这里改成 127.0.0.1 进行反代
    -
    创建服务进程并启动

    接下来我们需要创建一个服务,让VPS每次重启或是开机自动运行后端程序

    找到VPS目录 /etc/systemd/system,创建一个名为 sub.service 的文件

    打开文件,贴入以下内容,保存。

    [Unit]
    -Description=A API For Subscription Convert
    -After=network.target
    - 
    -[Service]
    -Type=simple
    -ExecStart=/root/subconverter/subconverter
    -WorkingDirectory=/root/subconverter
    -Restart=always
    -RestartSec=10
    - 
    -[Install]
    -WantedBy=multi-user.target
    -
    检查运行状态以及设置开机自启
    systemctl daemon-reload
    -systemctl start sub
    -systemctl enable sub
    -systemctl status sub
    -

    到这里,后端也就搭建完毕了,我们现在可以在浏览器里面访问我们的后端了,访问后端域名后端搭建成功!

    方法二 Docker容器搭建

    如果服务器安装了Docker可以使用命令:

    docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest
    -

    然后再用下面的命令确认一下状态

    curl http://localhost:25500/version
    -curl http://localhost:25500/version
    -

    如果输出当前 subconverter 容器版本几位搭建成功。

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Server/chatgpt.html b/zh/posts/Server/chatgpt.html deleted file mode 100644 index 65341f29..00000000 --- a/zh/posts/Server/chatgpt.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - Wonderful ChatGPT | 风至万始苏 - - - - - - -
    跳至主要內容

    Wonderful ChatGPT

    Ven2s...大约 2 分钟ChatGPT

    3 Steps Build Your Own ChatGPT Web

    • ChatGPTopen in new window(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。

    • ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

    ChatGPT-Webopen in new window

    • 支持双模型,提供了两种非官方 ChatGPT API 方法

    介绍

    方式免费?可靠性质量
    ChatGPTAPI(gpt-3.5-turbo-0301)可靠相对较笨
    ChatGPTUnofficialProxyAPI(网页 accessToken)相对不可靠聪明
    • 对比:
    1. ChatGPTAPI(gpt-3.5-turbo-0301)open in new window 使用 gpt-3.5-turbo-0301 通过官方 OpenAI 补全 API 模拟 ChatGPT (最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型)
    2. ChatGPTUnofficialProxyAPIopen in new window 使用非官方代理服务器访问 ChatGPT 的后端 API,绕过 Cloudflare(使用真实的的 ChatGPT,非常轻量级,但依赖于第三方服务器,并且有速率限制)

    感谢原作者Chanzhaoyu的辛苦付出

    搭建步骤

    一、安装 DockerDocker-compose

    • 安装 Docker
    #更新、安装必备软件
    -
    -apt-get update && apt-get install -y wget nano
    -
    -#安装docker:
    -
    -curl -sSL https://get.docker.com/ | sh
    -
    -
    -#开机自动启动
    -
    -systemctl start docker
    -
    -systemctl enable docker
    -
    • 安装 Docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    -sudo chmod +x /usr/local/bin/docker-compose
    -

    二、安装 ChatGPT-Web

    • 创建目录
    mkdir -p /data/docker_data/chatgpt
    -cd /data/docker_data/chatgpt
    -
    • 创建 docker-compose.yml 文件
    nano docker-compose.yml
    -
    • 在文件中填入以下内容,然后 Ctrl+X 保存,按 Y 退出
    version: '3'
    -
    -services:
    -  app:
    -    image: luvsia/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可
    -    ports:
    -      - 3002:3002
    -    environment:
    -      # 二选一
    -      OPENAI_API_KEY: 
    -      # 二选一
    -      OPENAI_ACCESS_TOKEN: 
    -      # API接口地址,可选,设置 OPENAI_API_KEY 时可用
    -      OPENAI_API_BASE_URL:
    -      # API模型,可选,设置 OPENAI_API_KEY 时可用
    -      OPENAI_API_MODEL:
    -      # 反向代理,可选
    -      API_REVERSE_PROXY:
    -      # 访问权限密钥,可选
    -      AUTH_SECRET_KEY:
    -      # 超时,单位毫秒,可选
    -      TIMEOUT_MS: 100000
    -      # Socks代理,可选,和 SOCKS_PROXY_PORT 一起时生效
    -      SOCKS_PROXY_HOST:
    -      # Socks代理端口,可选,和 SOCKS_PROXY_HOST 一起时生效
    -      SOCKS_PROXY_PORT:
    -
    -
    • 创建完成后,运行
    docker-compose up -d
    -
    • 然后就可以通过 IP:3002 来访问 ChatGPT

    三、反代 ChatGPT 并使用打字机效果

    • 宝塔面板中新建网站chat.example.com并注册证书、开启HTTPS
    ChatGPT
    ChatGPT
    • 反向代理
    ChatGPT
    ChatGPT
    • 修改反向代理配置文件,实现打字机效果
    #设置反向代理参数以支持流式输出
    -proxy_buffering off;
    -chunked_transfer_encoding on;
    -tcp_nopush on;
    -tcp_nodelay on;
    -keepalive_timeout 65;
    -
    ChatGPT
    ChatGPT

    大功告成,Enjoy

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Server/github-actions-deploy.html b/zh/posts/Server/github-actions-deploy.html deleted file mode 100644 index 2fbd8f5c..00000000 --- a/zh/posts/Server/github-actions-deploy.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - 利用GitHub Actions自动部署前端到服务器 | 风至万始苏 - - - - - - -
    跳至主要內容

    利用GitHub Actions自动部署前端到服务器

    Ven2s...大约 6 分钟ServerFrontEnd

    Automatically deploying the Front End to the server using GitHub Actions

    GitHub Actions介绍及原理

    • 接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

    • GitHub Actions 官方文档open in new window:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

    • 通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

    • 本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

    GitHub Action 成功示图
    GitHub Action成功界面
    GitHub Action成功界面
    name: luvsia-hugo-blog-autodeploy # 工作流程名称,自行命名
    -
    -on:
    -  push: # 什么时候请求触发
    -    branches:
    -      - main  # 作用分支,这里是main,也可是master
    -  pull_request:
    -
    -jobs: # 将工作流文件中运行的所有任务分组在一起
    -  deploy:
    -    runs-on: ubuntu-latest
    -    concurrency:
    -      group: ${{ github.workflow }}-${{ github.ref }}
    -    steps:
    -      - uses: actions/checkout@v2
    -        with:               # 如果你安装主题时用的是git submodule add
    -          submodules: true  # 那么这三行不必注释掉,这一行填写 true
    -          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
    -
    -      - name: Setup Hugo
    -        uses: peaceiris/actions-hugo@v2
    -        with:
    -          hugo-version: 'latest'  # 获取最新版本的hugo
    -          extended: true          # 如果你使用的不是extended版本的hugo,将true改为false
    -
    -      - name: Build
    -        run: hugo   # 使用hugo构建静态网页
    -
    -      - name: Deploy to github
    -        uses: peaceiris/actions-gh-pages@v3
    -        if: ${{ github.ref == 'refs/heads/main' }}  # 注意填写main或者master
    -        with:
    -          personal_token: ${{ secrets.PERSONAL_TOKEN }} # 如果secret取了其他名称,将PERSONAL_TOKEN替换掉
    -          external_repository: ventusoon/LuvSia # 填写远程 public 仓库 
    -          publish_dir: ./public
    -          cname: luvsia.com        # 填写自定义域名
    -
    • 按照示例分析,可以得出简单的 GitHub Actions 步骤图如下

    Action

    1️⃣作用条件

    时间节点

    分支

    2️⃣工作任务

    运行环境

    步骤一

    步骤二

    步骤 N

    直接发布到服务器/本地/托管页面

    实战演练

    • 因为要部署到服务器端,所以要了解连接到服务器的方式,这里选择ssh连接,网上有很多教程也用了sftp连接,都可以。

    • GitHub Actions 部署文件通常以 xxx.yml 命名,路径为项目根目录下 /.github/workflows/xxx.yml

    • GitHub 页面下编辑 xxx.yml ,可以发现右侧的应用商城中有很多特色Actions,因为是ssh连接,在这里选择评分较高的 ssh-deploy 应用,并使用最新版。

    ssh-deploy 应用
    ssh-deploy
    ssh-deploy
    • open in new window项目中的 README 中,可以看到其主要配置名称及用途如下。
    配置名称用途示例
    SSH_PRIVATE_KEYSSH密钥密钥应使用PEM格式生成
    REMOTE_HOST远程主机10.10.10.10
    REMOTE_USER用户root
    REMOTE_PORT端口默认22
    SOURCE源,需要部署的内容/dist
    TARGET对象,要部署的路径/data/docker_data/npm/data/sub.ven2s.cn/
    ARGS传递给rsync(同步时)的参数-avz --delete
    SSH_CMD_ARGS一组ssh参数,它们必须以-o为前缀,用逗号分隔-o SomeArgument=no,-o SomeOtherArgument=5
    EXCLUDE要排除的路径,用逗号分隔/dist/, /node_modules/
    SCRIPT_BEFORE在同步之前在主机上运行的脚本mkdir -p /data/docker_data/npm/data/sub.ven2s.cn
    SCRIPT_AFTER在同步之后在主机上运行的脚本reboot
    • 做好以上前期工作,现在可以开始操作了

    在服务器端配置密钥

    • root 目录下,输入
    ssh-keygen -m PEM -t rsa -b 4096
    -
    -# 生成密钥文件,连续按下两次回车。
    -# 请注意:您不应该为您生成的私钥设置密码(将其保留为空)。因为 rsync ssh(用于部署)不支持将私钥密码作为命令行参数输入。
    -
    • 此时, /root/.ssh/ 下生成了私钥文件 id_dsa 、公钥文件id_dsa.pub ,根据公钥文件生成authorized_keys ,并给以上三个文件分别设置权限。
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    -
    chmod 600 ~/.ssh/id_rsa
    -
    chmod 600 ~/.ssh/id_rsa.pub
    -
    chmod 600 ~/.ssh/authorized_keys
    -
    • 此时,客观上服务器端的工作就完成了,如果连接中遇到各种错误提示,请自行 goggle ,这里就不赘述了。

    项目中设置仓库密钥

    • 说来真是坑,最开始把仓库密钥错填到代码空间机密中,一直连接不上,我还以为是服务器的问题,前天甚至弄恍惚了,不小心 rm -rf / 了......
    仓库机密在GitHub项目中设置的位置
    • 在服务器中 cat 密钥,将所有内容复制到上图的 SSH_PRIVATE_KEY 中,并填入服务器IP到 REMOTE_HOST ,填入 rootREMOTE_USER。(或者直接在yml文件中填入 "root"
    cat ~/.ssh/id_rsa
    -

    或者

    REMOTE_USER: "root"
    -

    发布部署文件到远端

    • 我把自动发布nginx-proxy-manager静态页面的文件po在下面,请根据自身的运行环境和依赖进行修改配置即可。
    # 当前工作流的名称
    -name: sub-web-deploy
    -on:
    -  push:
    -    branches:
    -      - master
    -
    -jobs: # 构建的任务,一个工作流有多个构建任务,
    -  build-and-deploy:
    -    runs-on: ubuntu-latest # 在什么服务器上面执行这些任务,这里使用最新版本的ubuntu
    -    
    -    steps: # 构建任务的步骤,一个任务可分为多个步骤
    -      # 切换分支
    -      - name: Checkout
    -        uses: actions/checkout@v4
    -      # 步骤2 给当前服务器安装node
    -      - name: use node
    -        uses: actions/setup-node@v3.8.1
    -        with:
    -          node-version: 18
    -          cache: "yarn"
    -      # 步骤3 下载项目依赖    
    -      - name: install
    -        run: yarn install
    -      # 步骤4 打包node项目
    -      - name: build
    -        run: yarn build
    -      # 步骤5 部署项目到服务器
    -      - name: ssh deploy
    -        uses: easingthemes/ssh-deploy@v4.1.10
    -        with:
    -      # Private key part of an SSH key pair
    -          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
    -      # Remote host
    -          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
    -      # Remote user
    -          REMOTE_USER: ${{ secrets.REMOTE_USER }}
    -      # Source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/`
    -          SOURCE: "/dist/"
    -      # Script to run on host machine before rsync
    -          SCRIPT_BEFORE: "mkdir -p /data/docker_data/npm/data/sub.ven2s.cn"
    -      # Target directory
    -          TARGET: "/data/docker_data/npm/data/sub.ven2s.cn/"
    -

    如果喜欢请分享此页面,如有疑问请按F5,再进行评论。哈哈

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Server/hello-world.html b/zh/posts/Server/hello-world.html deleted file mode 100644 index 9479eaeb..00000000 --- a/zh/posts/Server/hello-world.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - Hello World | 风至万始苏 - - - - - - -
    跳至主要內容

    Hello World

    Ven2s...大约 15 分钟ServerBlog

    Build this site Hugo Blog 实战

    + 2022.02.11 add 侧边栏 鼠标指针 样式
    -
    + 2022.01.26 Update autodeploy.yml 实现 Hugo Blog 源码github  gitee  gitlab三端同步 (可以没有 | 就很帅)
    -
    + 2022.01.26 Done 😎
    -
    + 2022.01.26 <争取一口气把剩下的内容填完> 并没有 | Markdown的排版比码字更费事 💦
    -
    + 2022.01.24 简简单单的两个美化项目又变成了好几个      😥 😥 😥
    -
    + 2022.01.23 前言 <写了一些废话>
    -
    + 2022.01.20 萌生写下这篇文章的想法 并把大纲po在这里
    -

    闲言碎语

    从信用卡聊到陈年往事

    • 前段时间,在老婆的支持下(“盗”刷老婆信用卡,orz),买了一个十年的域名,起初拿来也就无非是给服务器套个域名,加个SSL,反代一些需要用到的web工具。想着这个域名好歹也是千挑万选出来的(Sia刚好与老婆名字谐音,所以自然而然地在前面加个Luv不过分吧,2333),现在的朋友圈基本上也没咋发过东西,全都是一些工作上的琐事。不如开个博客,记录一下生活(主要是用着这么有内涵的域名,让老婆感受一下应有的尊重,还能升华彼此的感情,哈哈哈,扯远了),还可以把自己“搞机爱好”(折腾癖好)的过程记录下,把READMEopen in new window中所说的Ctrl+CCtrl+V变为自己的知识,而不是只会复制粘贴,成了一个工具人。让这项爱好不至于太肤浅,还能真正掌握一下基础的编程知识。

    • 这篇博客,主要是记录下整个Blog的搭建基本思路与部署过程,Blog完成Hello World之后,后续一直在跟进基础美化、插件适配的工作,所以这篇文章也就搁置如今。“简简单单”的~两个美化项目~,碍于能力有限,三天时间才完成80%,真tm惨...

    • 在刚接触到Blog搭建还是在近6年以前,也是搞了个域名,搭了服务器,并把博客部署在服务器上,用的是WordPress。在当时,WordPress就已经是一个成熟的网站建设工具。WordPress功能是挺强大,主题、插件多,用户量基数也大,很容易就可以找到一些自己喜欢的“小物件”放到自己的博客上。奈何当时对代码之类的东西一窍不通,完全是通过可视化操作去完成的,也就不知道Go语言与PHP语言的区别,当然PHP语言在当时依然是主流。那会儿不仅要把精力放在服务器的维护上,还要把网站的Blog给弄好,还要用到Nginx、Mysql、phpmyadmin一大堆工具,还要在数据库中修改才能满足一些自己的需求,可以说是十分的繁琐。后来因为原服务器废弃,数据也没有转移,也没有本地保存,折腾的东西也就随之而去了...

    • 很久没有接触这方面的知识,现在就相当于回炉重造。了解了一下目前主流的Blog建站工具之后,Hexo和Hugo进入我的眼帘。从搜索引擎的数据上来看,Hexo的内容量与Hugo相比,完全不在一个数量级...
      Hexo
      Hugo

    • 传统在服务器部署,虽然本地也可以操作,修改内容,但大部分人都是仅仅只在服务器上完成,省去了本地修改、远程部署的步骤。导致服务器一崩,所有数据都随风而去...比如我自己在几年前也是如此。现如今,静态网站成为主流,Go语言也让国际大厂争先使用,像Google,Dropbox,SoundCloud,Twitter,PayPal等公司都用 Go 语言构建了他们的后端系统。

    如何选择Hexo与Hugo?

    Hugo中文文档:

    • Hugo是由Go语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。当前的静态网站生成工具对环境依赖过多,性能较差,于是使用 Go 语言写了一个静态网站生成器 Hugo。不仅解决了环境依赖、性能较差的问题,还有使用简单、部署方便等诸多优点,通过 LiveReload 实时刷新,极大的优化文章的写作体验。Hugo 能做什么?通过 Hugo 你可以快速搭建你的静态网站,比如博客系统、文档介绍、公司主页、产品介绍等等。

    Hexo中文文档:

    • 什么是Hexo ? Hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub和Heroku上,是搭建博客的首选框架。

    最终选择

    • 可以看出,Hexo与Hugo都是静态网站生成器的首选,而且都可以用上Github-Pagesopen in new window。在网上筛选了使用者反馈信息之后,最终我还是选择了用Go语言编写的Hugo+Github-Pages+CDN来搭建此Blog。

    准备工作

    安装环境和工具

    环境工具
    WindowsHugoGitVS codegithub-pages
    • VS Codeopen in new window:巨硬出品的一款开发集成工具。功能之强大让我感觉,我之前的传统敲代码、找依赖的方式太2了。

    • Gitopen in new window:一个版本控制系统,连接 Github 的钥匙。

    • Github-pagesopen in new window:Github出品,必属精品!等等,这句话怎么这么耳熟?又想到github也被巨硬收购了...细思极恐...

    • Hugoopen in new window:今天的主角,本地新建一个名为"Hugo"的目录、一个名为"Sites"的用于存放所有博客站点的目录,Hugo 目录下应有三个文件;同时,下载好 Git 程序。

    开始实战

    本地搭建

    将 hugo 添加到环境变量

    • WIN+R 输入 sysdm.cpl高级===>> 环境变量 ===>> Path ===>> 添加刚才新建的 Hugo 中的 bin 目录, bin 中放进刚刚下载的 hugo.exe

    Hugo

    bin

    hugo.exe

    Site

    example

    Git Bash

    • 进入 Site 文件夹,鼠标右键 Git Bash 或打开 Git Bashcd 到这个目录,创建 hugo 博客所在目录
    hugo new site <example>
    -

    文件夹内容目录

    example

    archetypes # 存放模板

    default.mdopen in new window # 模板

    config.toml # 基础配置文件

    content # 存放 page 与 post,所有新博文都要存放在 content 中

    data # 存放数据模板

    layouts # 存放布局模板文件,如果想要调整主题中的页面布局,可以在 layouts 中放入同名文件,hugo 将优先读取根目录中的 layouts 文件,避免直接修改主题文件,导致不必要的错误

    static # 存放静态资源,比如自定义 css、图片图标等

    themes # 主题文件夹

    安装 VS code 插件

    • 打开 VS Code 软件。点击Extensions,安装所需插件。推荐几个必备和好用的插件。

      • gpm 用来管理 Github 上的文件。 必备

      • Setting Sync 同步 Github 与本地文件。 必备

      • Markdown All in One 使用 Markdown 写作的利器。必备

      • Chinese Language Pack for Visual Studio Code VS Code 的汉化插件。 推荐

      • Auto Rename Tag 如果涉及修改代码的时候,非常好用。推荐

      • Material Icon Theme 一套个性的图标主题。 推荐

    生成 git 本地仓库

    • 进入新生成的博客文件夹并初始化一个空的 git 本地仓库,之后博客文件夹里会出现一个隐藏的.git 文件夹
    cd <example>
    -
    git init
    -

    生成 SSH 密钥

    仅首次,后面可以记录下,以备使用

    • SSH key 一般存储在系统盘 C: \Users<用户名>.ssh 目录中,git 全局设置存在 C: \Users<用户名>.gitconfig 文件中。
    ssh-keygen -t rsa -C "example@email.com" #最好是github账号邮箱。
    -
    • 之后会跳出一堆提示,在系统提示输入 passphrase 时直接回车不添加。生成的密钥对会储存在 C: \Users<用户名>.ssh 中,公钥存放在 id_rsa.pub 里,私钥存放在 id_rsa 里,妥善保管密钥对,公钥稍后需要使用,私钥非极特殊情况勿上传!

    • 在博客根目录进行 git 的配置。最好是github账号、邮箱。本地提交 commit 时 github 上可以查看提交者信息。

    git config user.name "examplename"
    -
    git config user.email "example@email.com"
    -

    安装主题

    • 找到喜欢的主题open in new window,在themes目录下 git clone 或者 git submodule add ,模块化安装能够方便升级主题(根目录上传到GitHub后,themes文件夹会链接到主题仓库界面,后面要用到的action要想跑起来一定要记得加上submodule的配置)。

    • 以本博客主题为例,用模块方式安装, themes/github-style 为安装到目标文件夹

    git submodule add git@github.com:MeiK2333/github-style.git themes/github-style
    -
    • 打开新的 config.toml 文件,修改 theme = “example-theme” 为你安装的主题名,主题名要与 themes 中的主题文件夹名称一致。

    本地搭建预览

    • 至此,本地博客就搭建好了。在博客根目录下 git bash,使用 hugo server 来看下主题的效果!(hugo server -D 的话草稿也会显示,注意是大写 D)跳出一大堆提示后,在任意浏览器打开 http://localhost:1313open in new window 就能实时查看博客效果与调整。如果的博客设置有误,页面会无法查看,请先排除错误后再进行尝试。不需要查看后 Ctrl+C 退出即可。

    根目录同步私有仓库

    源码& Public 分开存放

    • 建两个 repositories ,一个存放根目录文件,设置为私密,另一个用来存放 public 中的内容,设置为公开

    上传公钥

    这里选择直接上传到该 github 用户的 setting 里

    • 点击 github 页面右上角头像右侧下拉按钮,进入 Settings,找到左侧页面 SSH and GPG keys ,点击 New SSH key ,取一个便于识别的名称,下方填入之前生成的id_rsa.pub中的内容(以"ssh-rsa"开头,以邮箱结尾)。

    远程连接测试

    ssh -T git@github.com
    -

    显示 successfully 字样即可

    Hi <github-username>! You've successfully authenticated, but GitHub does not provide shell access.
    -

    生成 Token,用于连接两个仓库

    • 右上角 Settings 里找到 Developer settings ,再点 Personal access tokensGenerate new token 生成新的 token ,有效期可选永久生效。

    • Select scopes 里勾选 repo 全部内容与 workflow。最后点击绿色按钮生成。

    • 页面刷新后这个 Token 将不再显示,所以在导入前不要弄丢!

    Push 本地到私有仓库

    • 打开刚刚建立的私有仓库,复制SSH克隆代码,在 VS code 中的项目管理中点 + 克隆,粘贴,回车即可克隆。前提:本地的公钥与 github 设置里的公钥信息要一致。至此远程与本地即可连接成功。

    • 将本地的博客根目录内容全部粘贴到连接好的私有仓库,开始 push。git 默认的分支应该是(master),因为现在 github 的默认分支从 master 换成了 main(详见 GitHub 将替换掉 master 等术语 ),我们先切换分支到main:

    git checkout -b main
    -
    • push 命令三件套
    git add . # 添加目录下全部内容
    -git commit -m "new job" # 提交说明,出问题了可以回退到之前的commit
    -git push -u origin main # 将本地内容推送到远程
    -
    • 有时候新提交的本地有删除的内容,但是远端并没有删除,将 -m 改为 -am 即可

    • 空文件夹不会被 push 上去,不管;如果有其他文件、文件夹不想 push 上去,在根目录下新建 .gitignore 文件,里面存放不想 push 的内容。

      idea/            //忽略idea目录下的所有文件
    -  /idea/do.txt     //忽略某个具体文件
    -  !test.txt        //不忽略 test.txt 文件
    -  /TODO            //仅仅忽略项目根目录下的 TODO 文件,不包括 test/TODO
    -  *.zip            //忽略所有.zip结尾的文件
    -  doc/*.txt        //忽略 doc/notes.txt,但不包括 doc/server/arch.txt
    -  git rm -r --cached idea/do.txt    //-r为递归
    -

    私有仓库生成 Secrets

    • 这一步为自动部署到 public 做准备,进入刚刚建好的 repository,点进它的 Settings 中,找到 Secrets,点击 New repository secret,名称为 PERSONAL_TOKEN ,内容为之前备份下来的 Token

    自动部署到公开仓库

    Github Action

    • 进入博客根目录仓库,点上方的 Actions,set up a workflow yourself,之后你会发现 github 会在根目录下新建/.github/workflows/xxx.yml 文件。我的文件名 autodeploy.yml
    name: luvsia-hugo-blog-autodeploy # 自行命名
    -
    -on:
    -  push:
    -    branches:
    -      - main  # 博客根目录的默认分支,这里是main,也可是master
    -  pull_request:
    -
    -jobs:
    -  deploy:
    -    runs-on: ubuntu-latest
    -    concurrency:
    -      group: ${{ github.workflow }}-${{ github.ref }}
    -    steps:
    -      - uses: actions/checkout@v2
    -        with:               # 如果你安装主题时用的是git submodule add
    -          submodules: true  # 那么这三行不必注释掉,这一行填写 true
    -          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
    -
    -      - name: Setup Hugo
    -        uses: peaceiris/actions-hugo@v2
    -        with:
    -          hugo-version: 'latest'  # 获取最新版本的hugo
    -          extended: true          # 如果你使用的不是extended版本的hugo,将true改为false
    -
    -      - name: Build
    -        run: hugo   # 使用hugo构建静态网页
    -
    -      - name: Deploy to github
    -        uses: peaceiris/actions-gh-pages@v3
    -        if: ${{ github.ref == 'refs/heads/main' }}  # 注意填写main或者master
    -        with:
    -          personal_token: ${{ secrets.PERSONAL_TOKEN }} # 如果secret取了其他名称,将PERSONAL_TOKEN替换掉
    -          external_repository: ventusoon/LuvSia # 填写远程 public 仓库 
    -          publish_dir: ./public
    -          cname: luvsia.com        # 填写自定义域名
    -
    • 格式参考GitHub Pages actionopen in new window

    • 提交 commit ,保存, Action 变成绿色即成功!

    • 这时公开仓库已经自动建了一个名为 gh-pages 的分支,里面出现的东西就是源码通过 Hugo 命令生成的静态网页文件,此时打开博客域名就可以看到博客内容。

    • 根目录下的 config 文件中 base url 更换为自定义域名。

    CDN加速

    A @ 185.199.108.153
    -A @ 185.199.109.153
    -A @ 185.199.110.153
    -A @ 185.199.111.153
    -CNAME @ 指向公开仓库的github域名
    -CNAME WWW 指向公开仓库的github域名
    -
    • 进入公开仓库 SettingsPages 页面添加自定义域名,等待 DNS 检验成功,在此页面即可看到 仓库的github域名` 。

    • 使用了 CDN,github 上的 强制https 按钮可能不能点;如果无法正常显示 https,也可以在Cloudflare建立 强制https 规则。

    大功告成

    填坑后记

    1. 写新文章最好用命令行新建 md 文件,文件名为英文名最佳,增加解析效率。
    hugo new post/first-post.md
    -
    1. 如在远程端操作过,则在本地执行操作前,都要 git pull 拉取远端数据,同步到本地。上面我们在远程博客根目录新建了 workflow,在本地开始写新的博文前,先在本地的博客根目录进行同步,不然会报错:
    git pull
    -
    1. 执行 hugo server 过程中错误退出 git,导致之后执行时 1313 端口被占用,windows+r 输入 cmd 或者在VS code中打开 powershell 窗口:
    netstat -aon|findstr "1313"  #筛选使用1313端口的进程
    -taskkill /f /PID xxxxx  #杀死占用的进程
    -
    1. 重大更新!!!实现 Hugo Blog 源码github、gitee、gitlab三端同步,特别注意『格式』,最好在github中添加,避免出错!
    • 分别在gitee、gitlab上新建公钥文件,取名分别为GITEE_KEY、GITLAB_KEY

    • 更新 autodeploy.yml 文件,在后面加上如下代码

      mirror_to_gitee:
    -    runs-on: ubuntu-latest
    -    steps:
    -      - name: 'Checkout'
    -        uses: actions/checkout@v1
    -      - name: 'Mirror to gitee'
    -        uses: pixta-dev/repository-mirroring-action@v1
    -        with:
    -          target_repo_url:
    -            git@gitee.com:ventusoon/LuvSia.com.git  # gitee仓库链接
    -          ssh_private_key:
    -            ${{ secrets.GITEE_KEY }}  # 新建的GITEE_KEY
    -
    -  mirror_to_gitlab:
    -    runs-on: ubuntu-latest
    -    steps:
    -      - name: 'Checkout'
    -        uses: actions/checkout@v1
    -      - name: 'Mirror to gitlab'
    -        uses: pixta-dev/repository-mirroring-action@v1
    -        with:
    -          target_repo_url:
    -            git@gitlab.com:ventusoon/LuvSia.com.git  # gitlab仓库链接
    -          ssh_private_key:
    -            ${{ secrets.GITLAB_KEY }}  # 新建的GILAB_KEY
    -
    • Gitee
    gitee
    gitee
    • Gitlab
    gitlab
    gitlab
    1. 新增 小康博客open in new window 鼠标指针、侧边栏样式。
    • extended_head.html 中添加以下
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/static-butterfly/dist/css/index.min.css">
    -

    写在最后

    本篇文章的部署流程对网上教程进行了整合,再加上自己的理解而成。

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Server/index.html b/zh/posts/Server/index.html deleted file mode 100644 index cbcab31c..00000000 --- a/zh/posts/Server/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Server | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Server/nginx-proxy-manager.html b/zh/posts/Server/nginx-proxy-manager.html deleted file mode 100644 index fabf5688..00000000 --- a/zh/posts/Server/nginx-proxy-manager.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - 用Nginx Proxy Manager部署静态网页 | 风至万始苏 - - - - - - -
    跳至主要內容

    用Nginx Proxy Manager部署静态网页

    Ven2s...大约 2 分钟ServerBlog

    Deploying Static Web Pages with Nginx Proxy Manager

    • 搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

    • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

    搭建步骤

    一、安装 DockerDocker-compose

    • 安装 Docker
    #更新、安装必备软件
    -
    -apt-get update && apt-get install -y wget nano
    -
    -#安装docker:
    -
    -curl -sSL https://get.docker.com/ | sh
    -
    -
    -#开机自动启动
    -
    -systemctl start docker
    -
    -systemctl enable docker
    -
    • 安装 Docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    -sudo chmod +x /usr/local/bin/docker-compose
    -

    二、安装 Nginx Proxy Manager 中文版open in new window

    • 创建目录
    mkdir -p /data/docker_data/npm
    -cd /data/docker_data/npm
    -
    • 创建 docker-compose.yml 文件
    nano docker-compose.yml
    -
    • 在文件中填入以下内容,然后 Ctrl+X 保存,按 Y 退出
    version: '3'
    -services:
    -  app:
    -    image: 'chishin/nginx-proxy-manager-zh:latest'
    -    restart: always
    -    ports:
    -      - '80:80'
    -      - '81:81'
    -      - '443:443'
    -    volumes:
    -      - ./data:/data
    -      - ./letsencrypt:/etc/letsencrypt
    -
    • 创建完成后,运行
    docker-compose up -d
    -
    • 然后就可以通过 IP:81 来访问 Nginx Proxy Manager ,用初始账号密码登陆并修改。
    Email:     admin@example.com
    -Password:  changeme
    -
    • 反代 Nginx Proxy Manager,并添加 SSL
    View Screenshots

    1
    2

    三、创建静态网站目录,添加内容并反代

    • 在挂载的 data 文件夹里面创建一个新的网站文件夹
    mkdir -p /data/docker_data/npm/data/sub.ven2s.cn
    -
    • 将带有html文件的内容放到这个文件夹里面
    # 将/sub-web-modify/dist/文件夹下的所用文件移动到/data/docker_data/npm/data/sub.ven2s.cn/下
    -mv ~/sub-web-modify/dist/* /data/docker_data/npm/data/sub.ven2s.cn/
    -
    location / {
    -    root /data/sub.ven2s.cn;
    -    index index.html index.htm;
    -    error_page 404 /index.html;
    -}
    -

    大功告成

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Server/server-building.html b/zh/posts/Server/server-building.html deleted file mode 100644 index 890f1a95..00000000 --- a/zh/posts/Server/server-building.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - 从零开始的服务器搭建纪实 | 风至万始苏 - - - - - - -
    跳至主要內容

    从零开始的服务器搭建纪实

    Ventus...大约 6 分钟建站Server

    LuvSia

    Server Building

    准备工作

    VPSDomain
    dmitopen in new windowexample.comopen in new windownginxopen in new windowmysqlopen in new windowphpopen in new windowphpmyadminopen in new windowcloudflareopen in new window

    更新软件源

    apt update
    -

    搭建思路

    预留一级域名搭建网站给各个应用添加前端网页根路径。

    后因部分应用无法添加二级目录(网页根路径),所以这里只能使用添加二级域名的思路,区别各个应用。

    再通过添加反向代理,实现分域名访问不同前端应用。

    开始搭建

    宝塔面板

    WorkWeb
    宝塔面板btopen in new window

    1.使用一键配置工具。
    一键脚本集成工具

    wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
    -

    wget -O install.sh http://io.bt.sy/install/install-ubuntu_6.0.sh && bash install.sh
    -

    2.安装nginx-1.21mysql-5.5php-7.4phpmyadmin-5.0四件套

    3.添加站点。

    WorkDomain
    alista.example.comopen in new window正常
    宝塔面板b.example.comopen in new window正常
    Transmissiont.example.comopen in new window正常
    X-UIx.example.comopen in new window正常

    4.设置,添加SSL,强制开启https

    记录证书路径,证书可以直接在宝塔面板进行更新,或是设置定时任务自动更新;

    宝塔面板申请的证书在如下目录:/www/server/panel/vhost/cert/你的域名/ 目录之下。

    强制开启https

    5.关闭面板安全入户,即删除二级目录

    rm -f /www/server/panel/data/admin_path.pl
    -

    6.在Cloudflare中解析二级域名b.example.com

    7.添加反向代理到b.example.com

    代理名称 宝塔面板
    -目标URL  http://127.0.0.1:8888  发送域名 $host
    -

    8.安装docker安装器。

    X-UI

    WorkWebTools
    x-uixuiopen in new windowdockeropen in new window

    1.镜像源

    enwaiax/x-ui:latest
    -

    2.安装运行

    mkdir x-ui && cd x-ui
    -docker run -itd --network=host \
    -    -v $PWD/db/:/etc/x-ui/ \
    -    -v $PWD/cert/:/root/cert/ \
    -    --name x-ui --restart=unless-stopped \
    -    enwaiax/x-ui:latest
    -

    3.在Cloudflare中解析二级域名x.example.com

    4.添加反向代理到x.example.com

    代理名称 x-ui
    -目标URL  http://127.0.0.1:54321  发送域名 $host
    -

    5.配置VMess协议,开启ws,路径/xiya

    6.开启CDN加速,在nginx配置文件中添加如下。

    location /xiya {
    -        proxy_redirect off;
    -        proxy_pass http://127.0.0.1:22513;
    -        proxy_http_version 1.1;
    -        proxy_set_header Upgrade $http_upgrade;
    -        proxy_set_header Connection "upgrade";
    -        proxy_set_header Host $http_host;
    -        proxy_read_timeout 300s;
    -        # Show realip in v2ray access.log
    -        proxy_set_header X-Real-IP $remote_addr;
    -        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    -  }
    -

    7.开启Cloudflare小云朵,并优选IP。

    8.下载优选IPopen in new window ,选出优选IP后,客户端如下配置

    + 填入优选IP
    -+ 更改端口为443;
    -+ host设置x.example.com;
    -+ 开启tls。
    -

    9.Surge配置

    🇭🇰 VMess = vmess, 104.19.79.223, 443, username=2d285385-836d-4b30-f32c-11cdd637aeed, tls=true, tls13=false, ws=true, ws-path=/xiya, sni=example.com, ws-headers=Host:example.com, skip-cert-verify=0, tfo=false, udp-relay=true
    -

    Alist

    WorkWebTools
    Alistalistopen in new windowdockeropen in new window

    1.添加镜像源

    xhofe/alist:latest
    -

    2.不配置容器,使用代码

    docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest
    -

    3.在Cloudflare中解析二级域名a.example.com

    4.添加反向代理到a.example.comopen in new window

    代理名称 alist
    -目标URL  http://127.0.0.1:5244  发送域名 $host
    -

    Transmission

    WorkWebTools
    Transmissiontransmissionopen in new windowdockeropen in new window

    1.Docker安装

    构建镜像

    # 克隆仓库
    -git clone https://github.com/helloxz/docker-transmission.git
    -# 进入仓库目录
    -cd docker-transmission
    -# 构建Docker镜像
    -docker build -t luvsia:transmission
    -

    运行镜像

    docker run -d --name="transmission" \
    -  -e USERNAME=ventus \
    -  -e PASSWORD=ysw554247430 \
    -  -p 9091:9091 \
    -  -p 51413:51413 \
    -  -p 51413:51413/udp \
    -  -v /GoogleDrive:/Downloads \
    -  --restart=always \
    -  luvsia:transmission
    -

    /GoogleDrive:本地下载目录为Rclone mount GoogleDrive中的谷歌云盘目录,自动下载到谷歌云盘,实现无线网盘

    2-1.普通安装

    安装transmission-daemon

    apt-get install transmission-daemon
    -

    首先执行一次启动和停止命令,防止配置文件被覆盖

    启动

    service transmission-daemon start
    -

    停止

    service transmission-daemon stop
    -

    重启

    service transmission-daemon restart
    -

    修改transmission-daemon配置文件

    nano /var/lib/transmission-daemon/info/settings.json
    -
    "rpc-host-whitelist": "*",  //域名白名单,*为允许所有
    -"rpc-host-whitelist-enabled": false, //是否开启白名单,false为否
    -"rpc-password": "远程登录密码",
    -"rpc-port": 9091, //远程登录端口
    -"rpc-username": "远程帐号",
    -"rpc-whitelist": "*", //ip白名单
    -"rpc-whitelist-enabled": false,  //是否开启ip白名单,false为否
    -

    执行启动命令

    service transmission-daemon start
    -
    systemctl enable transmission-daemon.service
    -

    2-2.transmission web control

    获取安装脚本

    wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control-cn.sh
    -

    执行安装脚本

    bash install-tr-control-cn.sh
    -

    3.在Cloudflare中解析二级域名t.example.com

    4.添加反向代理到t.example.comopen in new window

    代理名称 transmission
    -目标URL  http://127.0.0.1:9091  发送域名 $host
    -

    5.修改默认保存目录/GoogleDrive,启用临时目录/Downloads,记得给!权限!

    把`/Downloads`赋予777权限
    -

    Rclone

    WorkWebTools
    Rclonercloneopen in new windowgoogledriveopen in new window

    1.安装Rclone

    wget https://www.moerats.com/usr/shell/rclone_debian.sh && bash rclone_debian.sh
    -

    2.初始化配置

    rclone config
    -

    3.选择GoogleDrive,剩余操作参考这里open in new window

    CMD开启代理

    set http_proxy=socks5://127.0.0.1:10808 #端口号为http的socks5实际端口
    -set https_proxy=socks5://127.0.0.1:10808 #端口号为https的socks5实际端口
    -

    4.挂载磁盘

    mkdir -p /GoogleDrive
    -
    mkdir -p /Downloads
    -

    提示

    确认安装了FUSE3

    apt install fuse3
    -
    rclone mount ventusoon:ventus /GoogleDrive \
    - --umask 0000 \
    - --default-permissions \
    - --allow-non-empty \
    - --allow-other \
    - --transfers 4 \
    - --buffer-size 32M \
    - --low-level-retries 200
    - --dir-cache-time 12h
    - --vfs-read-chunk-size 32M
    - --vfs-read-chunk-size-limit 1G
    -

    5.配置开机自动挂载

    cat > /etc/systemd/system/rclone.service <<EOF
    -[Unit]
    -Description=Rclone
    -AssertPathIsDirectory=LocalFolder
    -After=network-online.target
    -[Service]
    -Type=simple
    -ExecStart=/usr/bin/rclone mount ventusoon:ventus /GoogleDrive \
    - --umask 0000 \
    - --default-permissions \
    - --allow-non-empty \
    - --allow-other \
    - --buffer-size 32M \
    - --dir-cache-time 12h \
    - --vfs-read-chunk-size 64M \
    - --vfs-read-chunk-size-limit 1G
    -ExecStop=/bin/fusermount -u LocalFolder
    -Restart=on-abort
    -User=root
    -[Install]
    -WantedBy=default.target
    -EOF
    -

    挂载成功后,输入df -h命令即可看到挂载的磁盘

    6.常用命令

    systemctl start rclone
    -
    systemctl enable rclone
    -
    systemctl stop rclone
    -
    systemctl status rclone
    -

    7.Transmission添加rlone挂载在GoogleDrive上的路径

    /GoogleDrive
    -

    Live-torrent

    WorkWebTools
    live-torrentlive-torrentopen in new windowdockeropen in new window

    1.镜像源

    davenchy/live-torrent
    -

    2.安装运行

    docker run --restart=always --name live-torrent -d -p 8080:8080 davenchy/live-torrent
    -

    3.在Cloudflare中解析二级域名live.example.com

    4.添加反向代理到live.example.com

    代理名称 Live-torrent
    -目标URL  http://127.0.0.1:8080  发送域名 $host
    -

    Cloudflare WARP

    WorkWebUse
    Cloudflare WARPcloudflareopen in new window使用教程open in new window

    功能菜单

    bash <(curl -fsSL git.io/warp.sh) menu
    -

    WARP WireGuard 双栈全局网络

    bash <(curl -fsSL git.io/warp.sh) d
    -

    IPv4 网络

    bash <(curl -fsSL git.io/warp.sh) 4
    -

    IPv6 网络

    bash <(curl -fsSL git.io/warp.sh) 6
    -

    WARP 官方客户端 SOCKS5 代理

    bash <(curl -fsSL git.io/warp.sh) s5
    -

    后记

    感谢

    @guodongxiarenopen in new window
    @HostCLiopen in new window
    @jinwypopen in new window
    @Xhofeopen in new window
    @vaxiluopen in new window
    @enwaiaxopen in new window
    @XIU2open in new window
    @helloxzopen in new window
    @moeratsopen in new window
    @P3TERXopen in new window


    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Windows/DDNS.html b/zh/posts/Windows/DDNS.html deleted file mode 100644 index 5f46bf14..00000000 --- a/zh/posts/Windows/DDNS.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - Cloudflare + DDNS-GO + RDP | 风至万始苏 - - - - - - -
    跳至主要內容

    Cloudflare + DDNS-GO + RDP

    Ven2s...大约 4 分钟DDNSnetwork

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    前言

    • 最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

      Z
      D
      B

    • 写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

    • DDNSopen in new window(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

    • Cloudflareopen in new window 全球知名的DNS服务商。

    • DDNS-GOopen in new window 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

    • 公网 IPopen in new window 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

      RDP
      可以看到这里的延迟十分之低

    开工

    • 开始之前先简单说下我家里的网络布局,弱电箱一个光猫桥接模式,一个主路由负责拨号,卧室一个 K2P 路由 ap 模式,一个旧笔记本电脑充当软路由(旁路由),安装了 PVEPVE 上使用了 openWRT,还有一台台式电脑,忘了在 visio 上画出来。

      网络布局
      网络布局图
    • 不要问我为什么不在 openWRTDHCP ,我试了很多次都无法联网,可能是因为网口绑定了 MAC 地址,我也不知道怎么取消绑定,所以我只能在主路由上绑定我电脑的 MAC 才能上网。(可能也不是这个原因,我在 openWRT 上绑定 WAN 口地址也不能上网。)我家的网络环境真的太复杂了😥

    正式开始

    安装

    .\ddns-go.exe -s install
    -

    卸载

    .\ddns-go.exe -s uninstall
    -
    DDNS-GO
    DDNS-GO
    • 安装好后,在服务中可以看到 ddns-go 服务,并设置自启动

      DDNS-GO服务
      DDNS-GO服务开启
    • 打开 http://127.0.0.1:9876open in new window,可以看到 ddns-go 支持很多家动态解析服务商

      DDNS-GO配置1
      DDNS-GO页面
    • cloudflare 获取 API 令牌既上图中的 Token ,重点注意区域资源要选所有区域

      cloudflare配置1
      cloudflare配置2

    • 回到 DDNS-GO 中如下图,像我一样配置即可,有公网的只勾选 IPv4 ,没有公网的选 IPv6 (我两个都有,所以都选了,你也可以,经测试无伤大雅),在主机名后面填上你的域名。至于如何获得 IPv6 ,这个我下次再做一个详细的教程。(推荐一个好用的CF国内APIopen in new window,可以准确获取你的 IP 本地地址,无论你是否使用科学上网工具)

      DDNS-GO配置2
      DDNS-GO配置3
      DDNS-GO配置4

    • 点击保存后,成功后,你会在 Cloudflare 上你的域名 dns 服务中看到你已经解析了的A记录(IPv4地址)或者AAAA记录(IPv6地址),ddns-go 中你也可以看到解析成功的提示

    • 到此,你终于成功解析你的动态IP,在主路由、旁路由上设置好端口转发服务,就可以随时随地访问家中的设备。

    抽时间,再把如何有效的进行端口转发记录下来,以防我这个狗脑子又忘了

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Windows/github-tools.html b/zh/posts/Windows/github-tools.html deleted file mode 100644 index fb9558ca..00000000 --- a/zh/posts/Windows/github-tools.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Github上的生产力工具 | 风至万始苏 - - - - - - -
    跳至主要內容

    Github上的生产力工具

    Ven2s...大约 3 分钟tools

    Productivity tools on Github

    技术是第一生产力

    • 在当今快节奏的世界中,技术已经成为提高生产力的基石。它改变了我们工作、沟通和协作的方式。开源软件以其透明和协作的特性成为这种转变的推动力。像 Githubopen in new window 这样托管数百万开源项目的平台,创造了一个充满活力的生态系统,让开发人员可以分享他们的想法并协作开发代码。

    • 通过利用开源和 Githubopen in new window 这样的平台,开发人员能够更有效地工作,减少开发时间,构建更好的软件。

    • 大家可以尽情地在 issues 上给作者提出宝贵的建议和意见,或是提交 BUG 帮助作者完善项目,或是成为一些初学者(小白)们咨询大佬的平台,极大地缩短了软件开发的时间成本,也解决了人们面对互联网工具资源匮乏的窘境。

    • Github 上8年的学习、 git 中,大部分时间都在潜水,或是找一些必要资源。从最开始的无从下手,到现在基本上能熟练的在本地和服务器搭建基本运行环境,熟练掌握 git 方法,将大佬们的项目 为我所用 。这期间我使用了无数的、各个平台上的项目、软件,有时候甚至会为了一个简单地环境搭建彻夜难眠、通宵达旦。也许这就是代码的魅力、开源的魅力。

    • 今天就来简单记录一些我使用过的 神一般的生产力工具 ,方便大家更好地工作、学习。

      1
      入坑时间

    乱花渐欲迷人眼

    xplorer

    ToolWebFunctionDownload
    xploreropen in new windowwindows 文件资源管理器美化版open in new window
    Demo
    Demo
    View More Screenshots

    Demo
    Demo
    Demo
    Demo
    Demo
    Demo

    openai-translator

    ToolWebFunctionDownload
    openai-translatoropen in new window基于 ChatGPT API划词翻译浏览器插件和跨平台桌面端应用open in new window
    Demo
    Demo
    View More Screenshots

    Demo
    Demo

    OcrHelper

    ToolWebFunctionDownload
    OcrHelperopen in new window桌面图像实时转文字工具open in new window
    View More Screenshots

    Demo
    Demo
    Demo
    Demo

    Everything

    ToolWebFunctionDownload
    Everythingopen in new window基于名称快速定位文件和文件夹open in new window
    EverythingToolbaropen in new window基于 EverythingWindows 任务栏的一体化管理工具open in new window
    Demo
    EverythingToolbar
    View More Screenshots
    Demo
    Everything

    More...

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Windows/index.html b/zh/posts/Windows/index.html deleted file mode 100644 index 87b39ee6..00000000 --- a/zh/posts/Windows/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Windows | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/Windows/kms.html b/zh/posts/Windows/kms.html deleted file mode 100644 index 50c3fc0d..00000000 --- a/zh/posts/Windows/kms.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - KMS 服务端安装部署教程 | 风至万始苏 - - - - - - -
    跳至主要內容

    KMS 服务端安装部署教程

    Ven2s...大约 5 分钟kmstools

    KMS Server Installation and Deployment Tutorial

    关于脚本

    • KMS 服务安装完成后会加入开机自启动。
    • 默认记录日志,其日志位于 /var/log/vlmcsd.log。

    开始部署

    • 使用 root 用户登录,运行以下命令:
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
    -
    • 安装完成后,输入以下命令查看端口号 1688 的监听情况
    netstat -nxtlp | grep 1688
    -
    • 返回值类似于如下这样就表示 OK 了:
    tcp    0    0 0.0.0.0:1688   0.0.0.0:*   LISTEN   3200/vlmcsd         
    -tcp    0    0 :::1688        :::*        LISTEN   3200/vlmcsd 
    -
    • 本脚本安装完成后,会将 KMS 服务加入开机自启动。

    其他命令

    启动:/etc/init.d/kms start
    -停止:/etc/init.d/kms stop
    -重启:/etc/init.d/kms restart
    -状态:/etc/init.d/kms status
    -

    卸载方法

    ./kms.sh uninstall
    -

    激活步骤

    • 使用管理员权限运行 cmd 查看系统版本,命令如下:
    wmic os get caption
    -
    • 使用管理员权限运行 cmd 安装从上面列表得到的 key,命令如下:
    slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
    -
    • 使用管理员权限运行 cmd 将 KMS 服务器地址设置为你自己的 IP 或 域名,后面最好再加上端口号(:1688),命令如下:
    slmgr /skms Your IP or Domain:1688
    -
    • 注意:本脚本所做的工作就是此步骤。当你的 KMS 服务出于启动状态,那么此处就可以设置为你自己的 KMS 服务器地址。
      使用管理员权限运行 cmd 手动激活系统,命令如下:
    slmgr /ato
    -
    • 关于 Office 的激活,要求必须是 VOL 版本,否则无法激活。
      找到你的 Office 安装目录,32 位默认一般为 C:\Program Files (x86)\Microsoft Office\Office16
      64 位默认一般为 C:\Program Files\Microsoft Office\Office16
      Office16 是 Office 2016,Office15 就是 Office 2013,Office14 就是 Office 2010。
      打开以上所说的目录,应该有个 OSPP.VBS 文件。
      使用管理员权限运行 cmd 进入 Office 目录,命令如下:
    cd "C:\Program Files (x86)\Microsoft Office\Office16"
    -
    • 使用管理员权限运行 cmd 注册 KMS 服务器地址:
    cscript ospp.vbs /sethst:Your IP or Domain
    -
    • 使用管理员权限运行 cmd 手动激活 Office,命令如下:
    cscript ospp.vbs /act
    -

    主要步骤

    1. 设置服务 slmgr -skms Your IP or Domain
    2. 安装密钥 slmgr -ipk 版本对应秘钥
    3. 激活系统 slmgr -ato

    可用服务

    • Your IP or Domain 维护 CNAME 指向有效的服务
    • telnet Your IP or Domain 1688 测试服务是否可用
    • tcping Your IP or Domain 1688

    密钥

    https://learn.microsoft.com/zh-cn/windows-server/get-started/kms-client-activation-keysopen in new window

    kms-client-activation-keys.mdopen in new window

    Windows Server(LTSC 版本)

    Windows Server 2022

    操作系统版本KMS 客户端安装密钥
    Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33
    Windows Server 2022 Datacenter Azure EditionNTBV8-9K7Q8-V27C6-M2BTV-KHMXV
    Windows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7H

    Windows Server 2019

    操作系统版本KMS 客户端安装密钥
    Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG
    Windows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464C
    Windows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726

    Windows Server 2016

    操作系统版本KMS 客户端安装密钥
    Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG
    Windows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
    Windows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63B

    Windows Server (半年频道版本)

    Windows Server 版本 20H2、2004、1909、1903 和 1809

    操作系统版本KMS 客户端安装密钥
    Windows Server Datacenter6NMRW-2C8FM-D24W7-TQWMY-CWH2D
    Windows Server StandardN2KJX-J94YW-TQVFB-DG9YT-724CC

    Windows 11 和 Windows 10 (半年频道版本)

    操作系统版本KMS 客户端安装密钥
    Windows 10/11 专业版W269N-WFGWX-YVC9B-4J6C9-T83GX
    Windows 10/11 专业版 NMH37W-N47XK-V7XM9-C7227-GCQG9
    Windows 10/11 专业工作站NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
    Windows 10/11 专业工作站 N9FNHH-K3HBT-3W4TD-6383H-6XYWF
    Windows 10/11 专业教育版6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
    Windows 10/11 专业教育版 NYVWGF-BXNMC-HTQYQ-CPQ99-66QFC
    Windows 10/11 教育版NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
    Windows 10/11 教育版 N2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
    Windows 10/11 企业版NPPR9-FWDCX-D2C8J-H872K-2YT43
    Windows 10/11 企业版 NDPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
    Windows 10/11 企业版 GYYVX9-NTFWV-6MDM3-9PT4T-4M68B
    Windows 10/11 企业版 G N44RPN-FTY23-9VTTB-MP9BX-T84FV

    Windows 10 (LTSC/LTSB 版本)

    Windows 10 LTSC 2019

    操作系统版本KMS 客户端安装密钥
    Windows 10 企业版 LTSC 2019M7XTQ-FN8P6-TTKYV-9D4CC-J462D
    Windows 10 企业版 N LTSC 201992NFX-8DJQP-P6BBQ-THF9C-7CG2H

    Windows 10 LTSB 2016

    操作系统版本KMS 客户端安装密钥
    Windows 10 企业版 LTSB 2016DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
    Windows 10 企业版 N LTSB 2016QFFDN-GRT3P-VKWWX-X7T3R-8B639

    Windows 10 LTSB 2015

    操作系统版本KMS 客户端安装密钥
    Windows 10 企业版 2015 LTSBWNMTR-4C88C-JK8YV-HQ7T2-76DF9
    Windows 10 企业版 2015 LTSB N2F77B-TNFGY-69QQF-B8YKP-D69TJ

    早期版本的 Windows Server

    Windows Server 版本 1803

    操作系统版本KMS 客户端安装密钥
    Windows Server Datacenter2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG
    Windows Server StandardPTXN8-JFHJM-4WC78-MPCBR-9W4KR

    Windows Server 版本 1709

    操作系统版本KMS 客户端安装密钥
    Windows Server Datacenter6Y6KB-N82V8-D8CQV-23MJW-BWTG6
    Windows Server StandardDPCNP-XQFKJ-BJF7R-FRC8D-GF6G4

    Windows Server 2012 R2

    操作系统版本KMS 客户端安装密钥
    Windows Server 2012 R2 Server StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJX
    WindowsServer 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
    WindowsServer 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWM

    Windows Server 2012

    操作系统版本KMS 客户端安装密钥
    Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4
    Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
    Windows Server 2012 单语言版2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
    Windows Server 2012 特定国家/地区版4K36P-JN4VD-GDC6V-KDT89-DYFKP
    Windows Server 2012 Server StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4
    Windows Server 2012 MultiPoint StandardHM7DN-YVMH3-46JC3-XYTG7-CYQJJ
    Windows Server 2012 MultiPoint PremiumXNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
    Windows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83P

    Windows Server 2008 R2

    操作系统版本KMS 客户端安装密钥
    Windows Server 2008 R2 Web 版6TPJF-RBVHG-WBW2R-86QPH-6RTM4
    Windows Server 2008 R2 HPC 版TT8MH-CG224-D3D7Q-498W2-9QCTX
    WindowsServer 2008 R2 StandardYC6KT-GKW9T-YTKYR-T4X34-R7VHC
    WindowsServer 2008 R2 企业版489J6-VHDMP-X63PK-3K798-CPX3Y
    WindowsServer 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648
    面向基于 Itanium 系统的 Windows Server 2008 R2GT63C-RJFQ3-4GMB6-BRFB9-CB83V

    Windows Server 2008

    操作系统版本KMS 客户端安装密钥
    Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249D
    Windows Server 2008 StandardTM24T-X9RMF-VWXK6-X8JC9-BFGM2
    不带 Hyper-V 的 Windows Server 2008 StandardW7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
    Windows Server 2008 企业版YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
    不带 Hyper-V 的 Windows Server 2008 企业版39BXF-X8Q23-P2WWT-38T2F-G3FPG
    Windows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HP
    Windows Server 2008 Datacenter7M67G-PC374-GR742-YH8V4-TCBY3
    不带 Hyper-V 的 Windows Server 2008 Datacenter22XQ2-VRXRG-P8D42-K34TD-G3QQC
    面向基于 Itanium 系统的 Windows Server 20084DWFP-JF3DJ-B7DTH-78FJB-PDRHK
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/Windows/port-forwarding.html b/zh/posts/Windows/port-forwarding.html deleted file mode 100644 index 882a998c..00000000 --- a/zh/posts/Windows/port-forwarding.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Port Forward | 风至万始苏 - - - - - - -
    跳至主要內容

    Port Forward

    Ven2s...大约 3 分钟port forwardnetwork

    Internal network port forwarding

    前言

    • 在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 pingopen in new window 了下端口,果然,状态显示是关闭了的。

      1
      😏
    • 来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

    • 其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

    • 综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

      2
      😏
      2
      😏

    端口映射

    服务名称设备IP外部端口(主机)内部端口(主路由)外部端口(主路由)
    内部端口(主机)内部端口(openWRT)外部端口(openWRT)
    RDP192.168.123.1103389338933893389
    Alist192.168.123.1105244524452445244
    SSH192.168.123.11022212121212121
    openWRT192.168.123.380225132251322513
    • 可以看到,由于我家里的网络布局,对端口进行了两次映射,先把最外面的主路由端口映射到 openWRT 上,再把第二层设备 openWRT 端口映射到主机上,如此就形成了完整的端口映射方案,这下再避开一些电信封禁的端口,是可以完美访问内网设备的。

    域名访问

    • 按理说,我在上篇文章的 ddns-go 中添加了域名, web 服务是可以直接通过域名+端口的形式访问的,但是此时会跳转错误。通过分析,其实也不难得出答案,访问 web 服务时,因为域名要占用80端口,但是80端口又是被封禁了,所以是无法用此方法的。

    • 来到宝塔面板,添加站点,输入域名+已经映射完成的端口号,访问成功

      4
      5

    • 访问网页时,即使加上了 SSL 也是显示的“不安全”,从研究服务器这么久可以知道,访问内网实际上是一样的,加上 SSL 是可以成功的。这里一直没有搞懂原因,还是闲下来再测试和折腾吧。。。

    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - - - diff --git a/zh/posts/cherry.html b/zh/posts/cherry.html deleted file mode 100644 index 66977317..00000000 --- a/zh/posts/cherry.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 樱桃 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/dragonfruit.html b/zh/posts/dragonfruit.html deleted file mode 100644 index e53a0f1e..00000000 --- a/zh/posts/dragonfruit.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 火龙果 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/index.html b/zh/posts/index.html deleted file mode 100644 index 5eb0c088..00000000 --- a/zh/posts/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - Posts | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/strawberry.html b/zh/posts/strawberry.html deleted file mode 100644 index 5d5500a7..00000000 --- a/zh/posts/strawberry.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 草莓 | 风至万始苏 - - - - - - - - - - diff --git a/zh/posts/tomato.html b/zh/posts/tomato.html deleted file mode 100644 index 2b479ecf..00000000 --- a/zh/posts/tomato.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - 番茄 | 风至万始苏 - - - - - - - - - - diff --git a/zh/slides.html b/zh/slides.html index 05ee7c40..54722bfa 100644 --- a/zh/slides.html +++ b/zh/slides.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + +
    - + diff --git a/zh/star/index.html b/zh/star/index.html index bf28ef2c..240ea7c0 100644 --- a/zh/star/index.html +++ b/zh/star/index.html @@ -30,19 +30,30 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - +
    跳至主要內容
    利用GitHub Actions自动部署前端到服务器
    +

    Automatically deploying the Front End to the server using GitHub Actions

    +
    +

    GitHub Actions介绍及原理

    +
      +
    • +

      接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

      +
    • +
    • +

      GitHub Actions 官方文档:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

      +
    • +
    • +

      通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

      +
    • +
    • +

      本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

      +
    • +

    Ven2s...大约 6 分钟linuxServerFrontEnd
    搭建属于自己的订阅转换链接

    Sub-Web-Modify前端搭建

    +

    本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


    Ven2s...大约 5 分钟linuxServer
    页面配置

    more 注释之前的内容被视为文章摘要。

    +

    Ms.Hope...大约 1 分钟使用指南页面配置使用指南
    + diff --git a/zh/tag/blog/index.html b/zh/tag/blog/index.html index f7e4bc11..48a88292 100644 --- a/zh/tag/blog/index.html +++ b/zh/tag/blog/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    用Nginx Proxy Manager部署静态网页
    +
    跳至主要內容
    用Nginx Proxy Manager部署靜態網頁

    Deploying Static Web Pages with Nginx Proxy Manager

      @@ -44,549 +44,17 @@
    • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

    • -

    Ven2s...大约 2 分钟ServerBlog
    超酷的Emoji表情!
    +

    Best Markdown Emoji !

    +
    +

    Emoji表情

    风至万始苏

    原文

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    -如"😊",显示为😊

    -

    人物

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bowtie::bowtie::smile:😄:laughing:😆
    :blush:😊:smiley:😃:relaxed:☺️
    :smirk:😏:heart_eyes:😍:kissing_heart:😘
    :kissing_closed_eyes:😚:flushed:😳:relieved:😌
    :satisfied:😆:grin:😁:wink:😉
    :stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
    :kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
    :sleeping:😴:worried:😟:frowning:😦
    :anguished:😧:open_mouth:😮:grimacing:😬
    :confused:😕:hushed:😯:expressionless:😑
    :unamused:😒:sweat_smile:😅:sweat:😓
    :disappointed_relieved:😥:weary:😩:pensive:😔
    :disappointed:😞:confounded:😖:fearful:😨
    :cold_sweat:😰:persevere:😣:cry:😢
    :sob:😭:joy:😂:astonished:😲
    :scream:😱:neckbeard::neckbeard::tired_face:😫
    :angry:😠:rage:😡:triumph:😤
    :sleepy:😪:yum:😋:mask:😷
    :sunglasses:😎:dizzy_face:😵:imp:👿
    :smiling_imp:😈:neutral_face:😐:no_mouth:😶
    :innocent:😇:alien:👽:yellow_heart:💛
    :blue_heart:💙:purple_heart:💜:heart:❤️
    :green_heart:💚:broken_heart:💔:heartbeat:💓
    :heartpulse:💗:two_hearts:💕:revolving_hearts:💞
    :cupid:💘:sparkling_heart:💖:sparkles:
    :star::star2:🌟:dizzy:💫
    :boom:💥:collision:💥:anger:💢
    :exclamation::question::grey_exclamation:
    :grey_question::zzz:💤:dash:💨
    :sweat_drops:💦:notes:🎶:musical_note:🎵
    :fire:🔥:hankey:💩:poop:💩
    ::💩:+1:👍:thumbsup:👍
    :-1:👎:thumbsdown:👎:ok_hand:👌
    :punch:👊:facepunch:👊:fist:
    :v:✌️:wave:👋:hand:
    :raised_hand::open_hands:👐:point_up:☝️
    :point_down:👇:point_left:👈:point_right:👉
    :raised_hands:🙌:pray:🙏:point_up_2:👆
    :clap:👏:muscle:💪:metal:🤘
    :fu:🖕:walking:🚶:runner:🏃
    :running:🏃:couple:👫:family:👪
    :two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
    :dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
    :information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
    :person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
    :couplekiss:💏:couple_with_heart:💑:massage:💆
    :haircut:💇:nail_care:💅:boy:👦
    :girl:👧:woman:👩:man:👨
    :baby:👶:older_woman:👵:older_man:👴
    :person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
    :construction_worker:👷:cop:👮:angel:👼
    :princess:👸:smiley_cat:😺:smile_cat:😸
    :heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
    :scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
    :pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
    :see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
    :guardsman:💂‍♂️:skull:💀:feet:🐾
    :lips:👄:kiss:💋:droplet:💧
    :ear:👂:eyes:👀:nose:👃
    :tongue:👅:love_letter:💌:bust_in_silhouette:👤
    :busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
    :feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
    :godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
    :rage2::rage2::rage3::rage3::rage4::rage4:
    :suspect::suspect::trollface::trollface:

    Ven2s...大约 6 分钟MarkdownBlog
    Hello World
    +如"😊",显示为😊


    Ven2s...大约 6 分钟MarkdownBlog
    - +

    Ven2s...大约 15 分钟ServerBlog
    + diff --git a/zh/tag/chatgpt/index.html b/zh/tag/chatgpt/index.html index dcd86c11..56eece82 100644 --- a/zh/tag/chatgpt/index.html +++ b/zh/tag/chatgpt/index.html @@ -30,16 +30,16 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    ChatGPT-Porxy
    +
    跳至主要內容
    ChatGPT-Porxy

    Build ChatGPT Reverse Proxy

    • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 来解决代理问题。
    • -

    Ven2s...大约 2 分钟ChatGPT
    Wonderful ChatGPT

    3 Steps Build Your Own ChatGPT Web

      @@ -49,7 +49,7 @@
    • ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

    • -

    Ven2s...大约 2 分钟ChatGPT
    - +

    Ven2s...大约 2 分钟linuxChatGPT
    + diff --git a/zh/tag/ddns/index.html b/zh/tag/ddns/index.html index e0632e6c..d6b9f8e7 100644 --- a/zh/tag/ddns/index.html +++ b/zh/tag/ddns/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    Cloudflare + DDNS-GO + RDP
    +
    跳至主要內容
    記錄使用ddns實現內網穿透遠程訪問內網設備

    Using DDNS and Port forwarding to achieve remote access to devices on an internal network

    前言

    @@ -61,7 +61,7 @@

    前言

    公网 IP 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

    RDP
    可以看到这里的延迟十分之低
    -

    Ven2s...大约 4 分钟DDNSnetwork
    - +

    Ven2s...大约 4 分钟Home Network LayoutDDNSNetwork
    + diff --git a/zh/tag/frontend/index.html b/zh/tag/frontend/index.html index 4e7ee155..182bc883 100644 --- a/zh/tag/frontend/index.html +++ b/zh/tag/frontend/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    利用GitHub Actions自动部署前端到服务器
    +
    跳至主要內容
    利用GitHub Actions自动部署前端到服务器

    Automatically deploying the Front End to the server using GitHub Actions

    GitHub Actions介绍及原理

    @@ -51,7 +51,7 @@

    GitHub Actions介绍及原理

  • 本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

  • -

    Ven2s...大约 6 分钟ServerFrontEnd
    - +

    Ven2s...大约 6 分钟linuxServerFrontEnd
    + diff --git a/zh/tag/hackintosh/index.html b/zh/tag/hackintosh/index.html index de8698bc..d5b68277 100644 --- a/zh/tag/hackintosh/index.html +++ b/zh/tag/hackintosh/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    + diff --git a/zh/tag/index.html b/zh/tag/index.html index f1b3c4e9..1c04c607 100644 --- a/zh/tag/index.html +++ b/zh/tag/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/tag/kms/index.html b/zh/tag/kms/index.html index 5285fb50..2d4d489a 100644 --- a/zh/tag/kms/index.html +++ b/zh/tag/kms/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    + diff --git a/zh/tag/markdown/index.html b/zh/tag/markdown/index.html index 71be1252..556ac44b 100644 --- a/zh/tag/markdown/index.html +++ b/zh/tag/markdown/index.html @@ -30,552 +30,20 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    Markdown 展示

    VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

    +
    跳至主要內容
    Markdown 展示

    VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

    你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

    -

    Ven2s...大约 3 分钟使用指南Markdown
    超酷的Emoji表情!
    +

    Best Markdown Emoji !

    +
    +

    Emoji表情

    风至万始苏

    原文

    将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
    -如"😊",显示为😊

    -

    人物

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    syntaxpreviewsyntaxpreviewsyntaxpreview
    :bowtie::bowtie::smile:😄:laughing:😆
    :blush:😊:smiley:😃:relaxed:☺️
    :smirk:😏:heart_eyes:😍:kissing_heart:😘
    :kissing_closed_eyes:😚:flushed:😳:relieved:😌
    :satisfied:😆:grin:😁:wink:😉
    :stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
    :kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
    :sleeping:😴:worried:😟:frowning:😦
    :anguished:😧:open_mouth:😮:grimacing:😬
    :confused:😕:hushed:😯:expressionless:😑
    :unamused:😒:sweat_smile:😅:sweat:😓
    :disappointed_relieved:😥:weary:😩:pensive:😔
    :disappointed:😞:confounded:😖:fearful:😨
    :cold_sweat:😰:persevere:😣:cry:😢
    :sob:😭:joy:😂:astonished:😲
    :scream:😱:neckbeard::neckbeard::tired_face:😫
    :angry:😠:rage:😡:triumph:😤
    :sleepy:😪:yum:😋:mask:😷
    :sunglasses:😎:dizzy_face:😵:imp:👿
    :smiling_imp:😈:neutral_face:😐:no_mouth:😶
    :innocent:😇:alien:👽:yellow_heart:💛
    :blue_heart:💙:purple_heart:💜:heart:❤️
    :green_heart:💚:broken_heart:💔:heartbeat:💓
    :heartpulse:💗:two_hearts:💕:revolving_hearts:💞
    :cupid:💘:sparkling_heart:💖:sparkles:
    :star::star2:🌟:dizzy:💫
    :boom:💥:collision:💥:anger:💢
    :exclamation::question::grey_exclamation:
    :grey_question::zzz:💤:dash:💨
    :sweat_drops:💦:notes:🎶:musical_note:🎵
    :fire:🔥:hankey:💩:poop:💩
    ::💩:+1:👍:thumbsup:👍
    :-1:👎:thumbsdown:👎:ok_hand:👌
    :punch:👊:facepunch:👊:fist:
    :v:✌️:wave:👋:hand:
    :raised_hand::open_hands:👐:point_up:☝️
    :point_down:👇:point_left:👈:point_right:👉
    :raised_hands:🙌:pray:🙏:point_up_2:👆
    :clap:👏:muscle:💪:metal:🤘
    :fu:🖕:walking:🚶:runner:🏃
    :running:🏃:couple:👫:family:👪
    :two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
    :dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
    :information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
    :person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
    :couplekiss:💏:couple_with_heart:💑:massage:💆
    :haircut:💇:nail_care:💅:boy:👦
    :girl:👧:woman:👩:man:👨
    :baby:👶:older_woman:👵:older_man:👴
    :person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
    :construction_worker:👷:cop:👮:angel:👼
    :princess:👸:smiley_cat:😺:smile_cat:😸
    :heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
    :scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
    :pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
    :see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
    :guardsman:💂‍♂️:skull:💀:feet:🐾
    :lips:👄:kiss:💋:droplet:💧
    :ear:👂:eyes:👀:nose:👃
    :tongue:👅:love_letter:💌:bust_in_silhouette:👤
    :busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
    :feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
    :godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
    :rage2::rage2::rage3::rage3::rage4::rage4:
    :suspect::suspect::trollface::trollface:

    Ven2s...大约 6 分钟MarkdownBlog
    - +如"😊",显示为😊


    Ven2s...大约 6 分钟MarkdownBlog
    + diff --git a/zh/tag/my-birthday/index.html b/zh/tag/my-birthday/index.html index d50a8b86..eb671499 100644 --- a/zh/tag/my-birthday/index.html +++ b/zh/tag/my-birthday/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/tag/network/index.html b/zh/tag/network/index.html index b162c263..81f2be0a 100644 --- a/zh/tag/network/index.html +++ b/zh/tag/network/index.html @@ -5,7 +5,7 @@ - 标签: network | 风至万始苏 + 标签: Network | 风至万始苏 - - - - - - - - - diff --git "a/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" "b/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" index 327a115c..b50a3f62 100644 --- "a/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" +++ "b/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git "a/zh/tag/\346\230\223/index.html" "b/zh/tag/\346\230\223/index.html" index b1ba0317..bd6a8f49 100644 --- "a/zh/tag/\346\230\223/index.html" +++ "b/zh/tag/\346\230\223/index.html" @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git "a/zh/tag/\347\246\201\347\224\250/index.html" "b/zh/tag/\347\246\201\347\224\250/index.html" index 44496814..db4e3e02 100644 --- "a/zh/tag/\347\246\201\347\224\250/index.html" +++ "b/zh/tag/\347\246\201\347\224\250/index.html" @@ -30,12 +30,12 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git "a/zh/tag/\347\272\242/index.html" "b/zh/tag/\347\272\242/index.html" index bc5d7e1a..04d6d329 100644 --- "a/zh/tag/\347\272\242/index.html" +++ "b/zh/tag/\347\272\242/index.html" @@ -30,38 +30,16 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    番茄

    番茄

    +
    跳至主要內容
    苹果 1

    苹果 1

    标题 2

    这里是内容。

    标题 3

    这里是内容。

    -

    Ven2s...小于 1 分钟蔬菜
    草莓

    草莓

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小于 1 分钟水果草莓
    火龙果

    火龙果

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小于 1 分钟火龙果水果
    樱桃

    樱桃

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小于 1 分钟樱桃
    苹果 2

    苹果 2

    -

    一个被星标了的苹果文章。

    -

    Ven2s...小于 1 分钟苹果
    苹果 1

    苹果 1

    -

    标题 2

    -

    这里是内容。

    -

    标题 3

    -

    这里是内容。

    -

    Ven2s...小于 1 分钟苹果
    - +

    Ven2s...小于 1 分钟苹果
    + diff --git "a/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" "b/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" index 8575582f..eefdc34b 100644 --- "a/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" +++ "b/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" @@ -30,12 +30,12 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + - - + + diff --git a/zh/timeline/index.html b/zh/timeline/index.html index b7c8b686..183cf883 100644 --- a/zh/timeline/index.html +++ b/zh/timeline/index.html @@ -30,11 +30,11 @@ document.documentElement.setAttribute("data-theme", "dark"); } - - + + -
    跳至主要內容
    - + +