From d37c57ec56301bb3ee4d0fca71d106eb78e84f1b Mon Sep 17 00:00:00 2001 From: zhouzhongping Date: Thu, 9 Nov 2023 17:30:33 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=EF=BC=9A=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/algolia.yml | 24 - .github/workflows/build.yml | 30 - .github/workflows/docsearch.json | 51 - .gitignore | 28 - .obsidian/app.json | 4 +- .obsidian/backlink.json | 3 + .obsidian/canvas.json | 2 +- .obsidian/community-plugins.json | 5 +- .obsidian/core-plugins-migration.json | 8 +- .obsidian/core-plugins.json | 4 + .obsidian/graph.json | 4 +- .obsidian/plugins/obsidian-linter/data.json | 257 + .obsidian/plugins/obsidian-linter/main.js | 2657 ++ .../plugins/obsidian-linter/manifest.json | 10 + .obsidian/plugins/obsidian-linter/styles.css | 225 + .../plugins/templater-obsidian/data.json | 5 +- .obsidian/types.json | 9 + .obsidian/workspace.json | 206 + Blog/11月28日晚 星期三 霾.md | 29 + {blog => Blog}/2021.md | 87 +- Blog/2022.md | 95 + {blog => Blog}/BombSquad-炸弹人小分队.md | 14 +- {blog => Blog}/Docusaurus 搭建.md | 18 +- {blog => Blog}/Don`t Starve-饥荒.md | 20 +- {blog => Blog}/Halo 主题 Redemption 首发版.md | 14 +- {blog => Blog}/Hello Halo.md | 9 +- ...bsidian 使用 Templater 插件的个性化脚本.md | 7 +- {blog => Blog}/Redemption 主题 0.2.1 版本.md | 12 +- {blog => Blog}/Redemption.md | 15 +- {blog => Blog}/VIVO IQOO Neo3 开箱测评.md | 19 +- {blog => Blog}/YubiKey 漂流记.md | 17 +- .../「引用」博客的本质是电线杆子.md | 22 +- .../「转载」中文大约的确已经死了.md | 36 +- {blog => Blog}/「转载」人生.md | 15 +- .../「转载」余光中:怎样改进英式中文?.md | 18 +- ...载」做了 6 年程序员,我学到的 10 条经验.md | 27 +- {blog => Blog}/「转载」可逆与不可逆的决策.md | 17 +- {blog => Blog}/「转载」小镇做题家.md | 39 +- {blog => Blog}/「转载」年轻.md | 18 +- {blog => Blog}/「转载」当代科技生活.md | 18 +- .../「转载」怎么平衡工作与生活?.md | 25 +- {blog => Blog}/「转载」提问的艺术.md | 39 +- {blog => Blog}/「转载」访谈总结.md | 32 +- .../一线城市拥有一亩三分地是什么体验.md | 16 +- .../三步为你博客文章分析情感关键字.md | 20 +- {blog => Blog}/上有天堂、下有苏杭.md | 24 +- {blog => Blog}/不要在饿的时候吃螺蛳粉!.md | 16 +- {blog => Blog}/中国传统历法.md | 21 +- {blog => Blog}/为什么不推开那扇门?.md | 17 +- {blog => Blog}/习惯养成第一步.md | 32 +- {blog => Blog}/人在囧途——青海湖.md | 23 +- {blog => Blog}/人格类型测试.md | 20 +- {blog => Blog}/你愿意嫁给自己么?.md | 9 +- {blog => Blog}/你还记得曾经的梦想么?.md | 13 +- .../使用 Docusaurus 搭建优秀个人wiki.md | 36 +- {blog => Blog}/关于感情的事情.md | 59 +- {blog => Blog}/关于花.md | 14 +- {blog => Blog}/关于郑州的互联网记忆.md | 16 +- {blog => Blog}/再游嵩山.md | 40 +- .../写十万字的博客是一种什么感觉.md | 18 +- {blog => Blog}/写博客的正确姿势 - 先行版.md | 15 +- {blog => Blog}/写博客的正确姿势 - 测试版.md | 30 +- {blog => Blog}/写博客的正确姿势.md | 18 +- {blog => Blog}/初号机,起飞!.md | 26 +- {blog => Blog}/原点.md | 41 +- {blog => Blog}/吉普赛满天星.md | 35 +- {blog => Blog}/唯有热爱可抵岁月漫长.md | 22 +- {blog => Blog}/回首 2022 展望 2023.md | 17 +- {blog => Blog}/夏日花记.md | 20 +- {blog => Blog}/大学回忆录.md | 16 +- {blog => Blog}/如何不写错别字!.md | 14 +- .../如何免费创建一个属于自己的网站.md | 26 +- .../如何免费获得 Jetbrains 正版授权.md | 17 +- {blog => Blog}/如何拍好一张照片.md | 16 +- {blog => Blog}/家里的三块地.md | 14 +- .../岁月是把猪饲料,把我喂的嘎嘎胖.md | 27 +- {blog => Blog}/幸福的事情都是需要等待的.md | 20 +- {blog => Blog}/开源软件之道.md | 22 +- {blog => Blog}/我开发的第一款软件.md | 67 +- {blog => Blog}/我是关系户.md | 17 +- {blog => Blog}/我的小羊肖恩.md | 14 +- {blog => Blog}/我站立的地方是中国.md | 18 +- {blog => Blog}/我要拔智齿!!!.md | 37 +- Blog/我还在…….md | 22 + {blog => Blog}/拾月游记.md | 11 +- .../揭晓你的博客一年之最,尽在 EndOfYear!.md | 7 +- {blog => Blog}/数字文化遗产.md | 17 +- {blog => Blog}/数据恢复杂谈.md | 20 +- {blog => Blog}/新冠笔记.md | 18 +- {blog => Blog}/新手村村长.md | 19 +- .../早起、阅读、写作、运动、冥想.md | 19 +- {blog => Blog}/星光不问赶路人.md | 18 +- {blog => Blog}/是微风、是晚霞、是来日方长.md | 16 +- {blog => Blog}/最近半年的生活.md | 20 +- {blog => Blog}/最近在折腾什么…….md | 23 +- {blog => Blog}/最近的生活.md | 15 +- {blog => Blog}/月季到了.md | 14 +- {blog => Blog}/注定不平凡的一年.md | 11 +- {blog => Blog}/浅谈一下自己折腾的网站.md | 14 +- {blog => Blog}/浅谈个人服务器架构.md | 17 +- {blog => Blog}/济南呀济南的泰山之旅.md | 19 +- {blog => Blog}/涝疫结合.md | 16 +- {blog => Blog}/独立生活能力清单.md | 11 +- {blog => Blog}/球鞋日记.md | 16 +- {blog => Blog}/申请 Jetbrains 开源项目授权.md | 20 +- {blog => Blog}/电脑坏了,我换了 Ubuntu.md | 46 +- {blog => Blog}/番茄开花啦 ~.md | 27 +- .../看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md | 96 +- {blog => Blog}/真·长安游记.md | 16 +- {blog => Blog}/破万卷书,行万里路!.md | 28 +- {blog => Blog}/种下了一些瓜果蔬菜.md | 15 +- {blog => Blog}/罪恶应该被遗传么.md | 16 +- {blog => Blog}/自律的痛苦······.md | 19 +- {blog => Blog}/英雄联盟 S8 全球总决赛.md | 15 +- {blog => Blog}/螺蛳粉.md | 21 +- {blog => Blog}/記拾月.md | 18 +- {blog => Blog}/记拾月.md | 16 +- {blog => Blog}/论成年人的睡眠.md | 18 +- .../谈谈我的「数字文具盒」 - NextCloud.md | 20 +- .../谈谈我的「数字文具盒」 - Obsidian.md | 15 +- .../谈谈我的「数字文具盒」 - 个人工作流.md | 39 +- .../谈谈我的「数字文具盒」 - 心得体会.md | 18 +- .../谈谈我的「数字文具盒」 - 数字基建.md | 20 +- ...谈我的「数字文具盒」 - 生产力工具(上).md | 20 +- ...谈我的「数字文具盒」 - 生产力工具(下).md | 26 +- .../谈谈我的「数字文具盒」 - 番外篇.md | 25 +- .../谈谈我的「数字文具盒」 - 运行平台.md | 23 +- {blog => Blog}/谈谈我的「数字文具盒」.md | 15 +- {blog => Blog}/贰号机、落幕.md | 13 +- {blog => Blog}/这个周末.md | 16 +- {blog => Blog}/通货膨胀的猪.md | 19 +- {blog => Blog}/长安三万里.md | 22 +- {blog => Blog}/长安游记.md | 26 +- {blog => Blog}/闭门锁网.md | 16 +- {blog => Blog}/非黑即白.md | 11 +- {blog => Blog}/首页加载速度优化方案.md | 19 +- {blog => Blog}/骑行在路上.md | 39 +- {blog => Blog}/黄山归来不看岳.md | 36 +- {journal => Journal}/2022/W34/2022-08-24.md | 0 {journal => Journal}/2022/W34/2022-08-25.md | 0 {journal => Journal}/2022/W34/2022-08-26.md | 0 {journal => Journal}/2022/W34/2022-08-27.md | 0 {journal => Journal}/2022/W34/2022-08-28.md | 0 {journal => Journal}/2022/W34/2022-W34.md | 0 {journal => Journal}/2022/W35/2022-08-29.md | 0 {journal => Journal}/2022/W35/2022-08-30.md | 0 {journal => Journal}/2022/W35/2022-08-31.md | 0 {journal => Journal}/2022/W35/2022-09-01.md | 0 {journal => Journal}/2022/W35/2022-W35.md | 0 {journal => Journal}/2022/W36/2022-09-05.md | 0 {journal => Journal}/2022/W36/2022-09-06.md | 0 {journal => Journal}/2022/W36/2022-09-07.md | 0 {journal => Journal}/2022/W36/2022-09-08.md | 0 {journal => Journal}/2022/W36/2022-W36.md | 0 {journal => Journal}/2022/W37/2022-09-12.md | 0 {journal => Journal}/2022/W37/2022-09-13.md | 0 {journal => Journal}/2022/W37/2022-09-14.md | 0 {journal => Journal}/2022/W37/2022-09-15.md | 0 {journal => Journal}/2022/W37/2022-09-16.md | 0 {journal => Journal}/2022/W37/2022-09-17.md | 0 {journal => Journal}/2022/W37/2022-09-18.md | 0 {journal => Journal}/2022/W37/2022-W37.md | 0 {journal => Journal}/2022/W38/2022-09-19.md | 0 {journal => Journal}/2022/W38/2022-09-20.md | 0 {journal => Journal}/2022/W38/2022-09-21.md | 0 {journal => Journal}/2022/W38/2022-09-22.md | 0 {journal => Journal}/2022/W38/2022-W38.md | 0 {journal => Journal}/2022/W39/2022-09-28.md | 0 {journal => Journal}/2022/W39/2022-09-29.md | 0 {journal => Journal}/2022/W39/2022-W39.md | 0 {journal => Journal}/2022/W41/2022-10-10.md | 0 {journal => Journal}/2022/W41/2022-10-11.md | 0 {journal => Journal}/2022/W41/2022-10-12.md | 0 {journal => Journal}/2022/W41/2022-10-13.md | 0 {journal => Journal}/2022/W41/2022-10-14.md | 0 {journal => Journal}/2022/W41/2022-10-16.md | 0 {journal => Journal}/2022/W41/2022-W41.md | 0 {journal => Journal}/2022/W42/2022-10-17.md | 0 {journal => Journal}/2022/W42/2022-10-18.md | 0 {journal => Journal}/2022/W42/2022-10-19.md | 0 {journal => Journal}/2022/W42/2022-10-21.md | 0 {journal => Journal}/2022/W42/2022-W42.md | 0 {journal => Journal}/2022/W43/2022-10-24.md | 0 {journal => Journal}/2022/W43/2022-10-26.md | 0 {journal => Journal}/2022/W43/2022-W43.md | 0 {journal => Journal}/2022/W44/2022-11-02.md | 0 {journal => Journal}/2022/W44/2022-W44.md | 0 {journal => Journal}/2022/W45/2022-11-10.md | 0 {journal => Journal}/2022/W45/2022-11-11.md | 0 {journal => Journal}/2022/W45/2022-11-12.md | 0 {journal => Journal}/2022/W45/2022-11-13.md | 0 {journal => Journal}/2022/W46/2022-11-18.md | 0 {journal => Journal}/2022/W46/2022-11-20.md | 0 {journal => Journal}/2022/W47/2022-11-21.md | 0 {journal => Journal}/2022/W47/2022-11-22.md | 0 {journal => Journal}/2022/W47/2022-W47.md | 0 {journal => Journal}/2022/W48/2022-11-28.md | 0 {journal => Journal}/2022/W48/2022-11-29.md | 0 {journal => Journal}/2022/W48/2022-12-01.md | 0 {journal => Journal}/2022/W48/2022-12-04.md | 0 {journal => Journal}/2022/W49/2022-12-06.md | 0 {journal => Journal}/2022/W49/2022-W49.md | 0 {journal => Journal}/2022/W50/2022-12-12.md | 0 {journal => Journal}/2023/W10/2023-W10.md | 0 {journal => Journal}/2023/W12/2023-03-20.md | 0 {journal => Journal}/2023/W12/2023-03-21.md | 0 {journal => Journal}/2023/W12/2023-W12.md | 0 {journal => Journal}/2023/W14/2023-04-08.md | 0 {journal => Journal}/2023/W14/2023-W14.md | 0 {journal => Journal}/2023/W16/2023-04-21.md | 0 {journal => Journal}/2023/W16/2023-04-23.md | 0 {journal => Journal}/2023/W2/2023-W2.md | 0 {journal => Journal}/2023/W22/2023-05-31.md | 0 {journal => Journal}/2023/W22/2023-06-01.md | 0 {journal => Journal}/2023/W22/2023-W22.md | 0 {journal => Journal}/2023/W23/2023-06-05.md | 0 {journal => Journal}/2023/W23/2023-06-08.md | 0 {journal => Journal}/2023/W23/2023-W23.md | 0 {journal => Journal}/2023/W24/2023-06-12.md | 0 {journal => Journal}/2023/W24/2023-06-13.md | 0 {journal => Journal}/2023/W24/2023-06-15.md | 0 {journal => Journal}/2023/W24/2023-W24.md | 0 {journal => Journal}/2023/W25/2023-W25.md | 0 {journal => Journal}/2023/W26/2023-06-26.md | 0 {journal => Journal}/2023/W3/2023-01-16.md | 0 {journal => Journal}/2023/W3/2023-01-18.md | 0 {journal => Journal}/2023/W31/2023-W31.md | 0 {journal => Journal}/2023/W32/2023-08-07.md | 0 {journal => Journal}/2023/W32/2023-08-08.md | 0 {journal => Journal}/2023/W32/2023-W32.md | 0 {journal => Journal}/2023/W33/2023-W33.md | 0 {journal => Journal}/2023/W35/2023-W35.md | 0 {journal => Journal}/2023/W36/2023-W36.md | 0 {journal => Journal}/2023/W37/2023-W37.md | 0 {journal => Journal}/2023/W40/2023-W40.md | 0 {journal => Journal}/2023/W5/2023-W5.md | 0 {journal => Journal}/2023/W6/2023-W6.md | 0 {journal => Journal}/2023/W7/2023-02-14.md | 0 {journal => Journal}/2023/W7/2023-02-15.md | 0 {journal => Journal}/2023/W7/2023-02-16.md | 0 {journal => Journal}/2023/W8/2023-02-20.md | 0 {journal => Journal}/2023/W8/2023-02-22.md | 0 License | 625 - README.md | 72 - README_EN.md | 67 - {src/js => Static}/hitokoto.js | 0 {src/js => Static}/jinrishici.js | 0 {src/js => Static}/wttr_weather.js | 0 .../应用服务/CDN 内容分发网络.md | 6 +- .../网络协议/DHCP 动态主机配置协议.md | 6 +- .../computer-network/网络协议/DNS 域名系统.md | 18 +- .../信息安全/OpenPGP/GnuPG 简明指南.md | 10 +- .../computer-security/密码学/简明指南.md | 27 +- .../用户安全/权限设计/_category_.json | 0 .../用户安全/权限设计/主流权限系统的设计.md | 29 +- .../用户安全/用户鉴权/HTTP 基本鉴权.md | 15 +- .../用户鉴权/JWT(JSON Web Token)鉴权.md | 8 +- .../用户安全/用户鉴权/OAuth 鉴权.md | 29 +- .../用户安全/用户鉴权/Session-Cookie 鉴权.md | 13 +- .../用户安全/用户鉴权/Token 鉴权.md | 9 +- .../用户安全/用户鉴权/_category_.json | 0 .../用户鉴权/一键登录(适用于原生APP).md | 11 +- .../用户鉴权/单点登录(Single Sign On).md | 10 +- .../用户安全/用户鉴权/唯一登录.md | 6 +- .../用户安全/用户鉴权/扫码登录.md | 11 +- .../用户安全/用户鉴权/联合登录和信任登录.md | 7 +- .../computer-security/用户安全/简明指南.md | 6 +- .../系统安全/防火墙/网络端口大全.md | 270 +- .../网络安全/OpenSSH/OpenSSH 使用方法.md | 24 +- .../网络安全/OpenSSH/OpenSSH 概述.md | 18 +- .../网络安全/OpenSSL/简明指南.md | 14 +- .../database-system/PostgreSQL/基本概念.md | 14 +- .../database-system/PostgreSQL/安装配置.md | 66 +- .../database-system/PostgreSQL/简介.md | 4 +- .../database-system/SQL 语言/基础语法.md | 15 +- .../database-system/基础/关系型数据库.md | 24 +- .../database-system/基础/数据库概述.md | 27 +- .../database-system/基础/非关系型数据库.md | 32 +- .../getting-started/Git/入门/分支.md | 9 +- .../getting-started/Git/入门/协议.md | 11 +- .../getting-started/Git/入门/基础.md | 19 +- .../getting-started/Git/入门/起步.md | 8 +- .../getting-started/Git/进阶/Git-LFS.md | 7 +- .../getting-started/Git/进阶/参考手册.md | 157 +- .../getting-started/Git/进阶/工作流.md | 6 +- .../getting-started/Git/进阶/常用命令.md | 6 +- .../getting-started/Git/进阶/常用技巧.md | 6 +- Tech/getting-started/Git/进阶/思维导图.md | 17 + .../getting-started/Git/进阶/钩子.md | 10 +- .../getting-started/Shell/Shell 必备锦囊.md | 0 .../getting-started/Shell/Shell 是什么.md | 0 .../getting-started/Shell/命令行的艺术.md | 0 .../getting-started/Vim/Vim 入门.md | 0 .../getting-started/Vim/Vim 参考手册.md | 0 .../getting-started/Vim/Vim 帮助文档.md | 0 .../开源/如何向开源社区提问.md | 2 + .../getting-started/开源/如何有效报告 BUG.md | 84 +- .../getting-started/开源/开源指北.md | 2 + .../getting-started/开源/提问的智慧.md | 102 +- .../Linux/基础/Linux 命令行操作.md | 69 +- .../Linux/基础/Linux 安装和配置.md | 12 +- .../Linux/基础/Linux 文件管理.md | 104 +- .../Linux/基础/Linux 用户和权限.md | 70 +- .../Linux/基础/Linux 软件包管理器.md | 16 +- .../Linux/文化/GNU&Linux 历史与发展.md | 10 +- .../Linux/文化/GNU&Linux 社区与文化.md | 23 +- .../Linux/文化/开源软件的概念与重要性.md | 8 +- .../Linux/进阶/Linux 文件系统.md | 366 +- .../Linux/进阶/Linux 日志监控.md | 11 +- .../Linux/进阶/Linux 系统安全与防护.md | 32 +- .../Linux/进阶/Linux 系统管理.md | 42 +- .../Linux/进阶/Linux 网络配置.md | 222 +- .../高级/Linux 下源代码编译与安装实战指南.md | 33 +- .../Python/入门/_category_.json | 0 .../Python/入门/函数方法.md | 18 +- .../Python/入门/基础语法.md | 18 +- .../Python/入门/控制语句.md | 62 +- .../Python/入门/数据类型.md | 36 +- .../Python/入门/数据结构.md | 30 +- .../Python/入门/模块和包.md | 38 +- .../Python/入门/面对对象.md | 64 +- .../Python/文化/_category_.json | 0 .../Python/文化/发展历史.md | 16 +- .../Python/文化/生命周期.md | 8 +- .../Python/文化/社区文化.md | 10 +- .../Python/文化/设计哲学.md | 6 +- .../Python/文化/语言特性.md | 8 +- .../Python/资源/_category_.json | 0 .../Python/进阶/_category_.json | 0 .../Python/进阶/常用技巧/_category_.json | 0 .../进阶/拓展模块/WEB开发/Jinja 模板引擎.md | 14 +- .../Python/进阶/拓展模块/_category_.json | 0 .../数据处理/configparser 配置文件解析器.md | 6 +- .../进阶/拓展模块/数据处理/csv 文件读写.md | 6 +- .../拓展模块/数据处理/json 编码和解码器.md | 8 +- .../拓展模块/系统交互/logging 日志记录工具.md | 23 +- .../进阶/拓展模块/系统交互/loguru 日志库.md | 21 +- .../拓展模块/系统交互/os 多种操作系统接口.md | 4 +- .../拓展模块/系统交互/subprocess 子进程管理.md | 8 +- .../系统交互/sys 系统相关的形参和函数.md | 11 +- .../拓展模块/网络处理/requests HTTP 库.md | 24 +- .../拓展模块/网络处理/socket 底层网络接口.md | 10 +- .../拓展模块/网络处理/urllib URL 处理模块.md | 22 +- .../Python/进阶/语言参考/_category_.json | 0 .../Python/进阶/语言参考/函数式编程.md | 7 +- .../Python/进阶/语言参考/垃圾回收.md | 24 +- .../Python/进阶/语言参考/并行和并发.md | 39 +- .../Python/进阶/语言参考/面向对象进阶.md | 117 +- .../Python/进阶/项目实践/_category_.json | 0 .../进阶/项目实践/文档指南/_category_.json | 0 .../进阶/项目实践/虚拟环境/_category_.json | 0 .../Python/进阶/项目实践/虚拟环境/pip.md | 14 +- .../Python/进阶/项目实践/虚拟环境/pipenv.md | 8 +- .../Python/进阶/项目实践/虚拟环境/poetry.md | 10 +- .../进阶/项目实践/虚拟环境/virtualenv.md | 12 +- .../Python/进阶/项目实践/虚拟环境/概述.md | 8 +- .../进阶/项目实践/项目指南/_category_.json | 0 .../进阶/项目实践/风格指南/_category_.json | 0 .../Python/进阶/项目实践/风格指南/风格指南.md | 6 +- .../Python/高级/_category_.json | 0 .../Regex/常用正则大全.md | 0 .../Regex/正则表达式入门.md | 0 {wiki => Tech}/programming-language/home.md | 5 +- .../协作规范/_category_.json | 0 .../协作规范/交流反馈(Issue).md | 19 +- .../协作规范/关于(Readme).md | 9 +- .../协作规范/分支(Branch).md | 13 +- .../协作规范/开源协议(License).md | 8 +- .../协作规范/日志(Commit).md | 10 +- .../协作规范/注释(Comments).md | 11 +- .../协作规范/版本(Tag).md | 11 +- .../协作规范/贡献者协议(Contributing).md | 15 +- .../software-engineering/技术文档}/命名约定.md | 8 +- .../software-engineering/技术文档}/文档内容.md | 36 +- .../software-engineering/技术文档}/文档结构.md | 18 +- .../software-engineering/技术文档}/标点符号.md | 8 +- .../software-engineering/技术文档}/简介.md | 8 +- .../software-engineering/技术文档}/语言风格.md | 26 +- .../software-engineering/技术文档}/附录资料.md | 7 +- .../谷歌开源项目风格指南.md | 0 {wiki => Tech}/structures-algorithms/home.md | 8 +- .../structures-algorithms/数据结构.md | 0 {wiki => Tech}/structures-algorithms/算法.md | 5 +- {templates => Templates}/博客模板.md | 0 {templates => Templates}/文档模板.md | 0 {templates => Templates}/日志 - 周记模板.md | 0 {templates => Templates}/日志 - 季度模板.md | 0 {templates => Templates}/日志 - 日记模板.md | 0 {templates => Templates}/阅读模板.md | 0 {work => Work}/data-engineer/home.md | 3 +- .../full-stack}/home.md | 3 +- .../full-stack}/基础/CSS.md | 24 +- .../full-stack}/基础/HTML.md | 66 +- .../full-stack}/基础/JavaScript.md | 104 +- .../full-stack}/工具/PM2 工具.md | 18 +- .../full-stack}/工具/Webpack.md | 2 +- .../full-stack}/工具/包管理工具.md | 26 +- .../full-stack}/文化/历史发展.md | 20 +- .../full-stack}/文化/概述.md | 2 +- .../full-stack}/文化/现代化开发工具链.md | 8 +- {work => Work}/roadmap/home.md | 2 - .../roadmap/求职经验/互联网行业-郑州.md | 22 +- .../roadmap/求职经验/写给软件工程师的建议.md | 9 +- {work => Work}/roadmap/简历攻略/IT 类简历.md | 3 + {work => Work}/roadmap/简历攻略/简历原则.md | 3 + .../roadmap/职业规划/开发者职业路线图.md | 6 +- .../roadmap/职业规划/职业宏观规划图.md | 7 +- .../roadmap/职业规划/职业宏观路线图.md | 7 +- .../roadmap/职场心得/华为新员工的 8 个阶段.md | 6 +- .../roadmap/职场心得/如何平衡工作和生活.md | 9 +- .../roadmap/职场心得/如何度过新手村.md | 2 + .../roadmap/职场心得/如何有效应对职场政治.md | 22 +- {work => Work}/roadmap/薪酬攻略/社会保障.md | 13 +- {work => Work}/roadmap/薪酬攻略/绩效考核.md | 9 +- {work => Work}/roadmap/薪酬攻略/薪酬制度.md | 9 +- {work => Work}/roadmap/面试法则/反向面试.md | 12 +- .../roadmap/面试法则/面试 10 大常见问题.md | 64 +- {work => Work}/sre-engineer/home.md | 3 +- babel.config.js | 3 - blog/11月28日晚 星期三 霾.md | 28 - blog/2022.md | 58 - blog/Git 规范.md | 91 - blog/authors.yml | 5 - blog/我还在…….md | 25 - docs/Docker/Dockerfile 文件详解.md | 279 - docs/Nginx/Nginx 常用配置.md | 138 - docs/OpenSSH/rsync 命令.md | 321 - docs/OpenSSH/scp 命令.md | 197 - docs/OpenSSH/sftp 命令.md | 37 - docs/OpenSSH/客户端.md | 542 - docs/OpenSSH/密钥登录.md | 323 - docs/OpenSSH/服务器.md | 435 - docs/OpenSSH/端口转发.md | 203 - docs/OpenSSH/简介.md | 36 - docs/OpenSSH/证书登录.md | 271 - docs/home.md | 10 - docs/云服务/Azure/核心体系.md | 80 - docs/云服务/_category_.json | 8 - docs/云服务/基本概念.md | 141 - docs/其他文章/_category_.json | 8 - docs/其他文章/资源/_category_.json | 8 - docs/其他文章/资源/计算机教育中缺失的一课.md | 33 - docs/其他文章/远程协助工具对比.md | 19 - docusaurus.config.js | 480 - group/company/home.md | 9 - group/company/入门/_category_.json | 8 - .../入门/应用系统/BPM(业务流程管理).md | 27 - .../入门/应用系统/CMS(内容管理系统).md | 18 - .../入门/应用系统/CRM(客户关系管理).md | 31 - .../入门/应用系统/ERP(企业资源计划).md | 42 - .../入门/应用系统/HCM(人力资本管理).md | 93 - .../company/入门/应用系统/OA(办公自动化).md | 41 - .../入门/应用系统/SCM(供应链管理系统).md | 83 - group/company/入门/应用系统/_category_.json | 8 - group/company/入门/数字化/_category_.json | 8 - group/company/入门/标准参考/_category_.json | 8 - group/company/入门/管理文化/_category_.json | 8 - group/company/入门/管理文化/概述.md | 23 - group/company/入门/组织结构/_category_.json | 8 - group/company/入门/组织结构/体系.md | 36 - group/company/入门/组织结构/实例.md | 75 - group/company/入门/组织结构/概述.md | 67 - group/company/入门/组织结构/规范.md | 70 - group/company/入门/组织结构/设计.md | 170 - group/government/home.md | 9 - group/government/中国国家标准/_category_.json | 8 - group/government/中国国家标准/标准组织.md | 27 - group/government/中国国家标准/法律合同.md | 15 - .../Tencent/腾讯代码安全指南/C,C++安全指南.md | 1770 -- .../Tencent/腾讯代码安全指南/Go安全指南.md | 1079 - .../腾讯代码安全指南/JavaScript安全指南.md | 877 - .../Tencent/腾讯代码安全指南/Java安全指南.md | 709 - .../腾讯代码安全指南/Python安全指南.md | 457 - .../腾讯代码安全指南/腾讯代码安全指南.md | 21 - group/organization/home.md | 10 - journal/home.md | 9 - life/home.md | 11 - life/健身/上肢训练.md | 162 - life/健身/下肢训练.md | 73 - life/健身/拉伸放松.md | 16 - life/健身/核心训练.md | 199 - life/健身/热身.md | 24 - life/健身/饮食公式.md | 36 - life/阅读/个人成长/习惯的力量(新版).md | 36 - life/阅读/个人成长/以极简的方式去生活.md | 217 - .../写出我心:普通人如何通过写作表达自己.md | 156 - .../个人成长/刻意练习:如何从新手到大师.md | 158 - life/阅读/个人成长/即兴表达.md | 42 - life/阅读/个人成长/学习之道.md | 127 - .../个人成长/学会写作:自我进阶的高效方法.md | 178 - life/阅读/个人成长/当下的力量(白金版).md | 60 - life/阅读/个人成长/我的第一本人生规划手册.md | 340 - .../医学健康/你是你吃出来的(套装共2册).md | 100 - .../小小药箱护健康教您用好家庭小药箱.md | 89 - life/阅读/历史/信息简史.md | 261 - life/阅读/历史/这里是中国2.md | 39 - .../半小时漫画中国哲学史(套装全2册).md | 41 - life/阅读/哲学宗教/第一性原理.md | 44 - life/阅读/哲学宗教/结构化思维.md | 560 - life/阅读/心理/十分钟冥想.md | 128 - .../心理/认知觉醒:开启自我改变的原动力.md | 612 - .../心理/认知驱动:做成一件对他人很有用的事.md | 349 - .../心理/谈性说爱:写给女性的性心理24讲.md | 119 - life/阅读/政治军事/实践论.md | 90 - life/阅读/教育学习/如何阅读一本书.md | 265 - life/阅读/教育学习/赖世雄的英语学习法.md | 50 - life/阅读/文学/老舍谈写作.md | 309 - .../生活百科/聂卫平围棋教程(从15级到10级).md | 43 - .../生活百科/聂卫平围棋教程(从入门到15级).md | 49 - life/阅读/社会文化/人体简史.md | 119 - life/阅读/社会文化/你不可不知的法律常识.md | 387 - life/阅读/社会文化/半小时漫画《论语》.md | 198 - life/阅读/社会文化/民法典与百姓生活100问.md | 42 - life/阅读/社会文化/这里是中国.md | 65 - .../科学技术/贝尔实验室与美国革新大时代.md | 111 - ...运维实战:shell编程、监控告警、性能优化与实战案例.md | 37 - life/阅读/经济理财/半小时漫画股票实战法.md | 38 - life/阅读/经济理财/小米创业思考.md | 70 - life/阅读/艺术/江湖丛谈(注音注释插图本).md | 44 - ...eb开发:基于Python的Web应用开发实战(第2版).md | 44 - life/阅读/计算机/Linux是怎样工作的.md | 40 - .../计算机/Python工匠:案例、技巧与工程实践.md | 251 - .../计算机/Python编程:从入门到实践(第2版).md | 36 - life/阅读/计算机/UNIX传奇:历史与回忆.md | 270 - .../VMware vSphere 7.0云平台运维与管理(第2版).md | 43 - life/阅读/计算机/从0到1:HTML+CSS快速上手.md | 55 - .../阅读/计算机/从0到1:HTML5+CSS3修炼之道.md | 43 - .../计算机/从0到1:JavaScript 快速上手.md | 62 - life/阅读/计算机/从0到1:jQuery快速上手.md | 38 - life/阅读/计算机/明解Python.md | 78 - life/阅读/计算机/流畅的Python.md | 105 - .../硅谷之火:个人计算机的诞生与衰落(第3版).md | 215 - life/阅读/计算机/秒懂设计模式.md | 162 - .../计算机/精通Python设计模式(第2版).md | 36 - .../网络安全等级保护2.0:定级、测评、实施与运维.md | 84 - .../网络工程师红宝书:思科华为华三实战案例荟萃.md | 40 - life/阅读/计算机/网络是怎样连接的.md | 92 - .../计算机/网络运维亲历记 (网络运维纪实文学).md | 37 - ...e服务器虚拟化+Citrix桌面应用虚拟化+Veeam备份+Zabbix监控.md | 62 - life/阅读/计算机/计算机:一部历史.md | 158 - life/食谱/凉菜/万能凉拌料.md | 16 - life/食谱/凉菜/凉菜食材处理.md | 25 - life/食谱/午餐/番茄鸡蛋盖饭.md | 14 - life/食谱/早餐/三明治.md | 21 - life/食谱/早餐/花样蒸蛋.md | 34 - life/食谱/早餐/蒸蛋.md | 25 - life/食谱/烧烤/准备工作.md | 51 - life/食谱/零食/炸薯条.md | 23 - package-lock.json | 22713 ---------------- package.json | 45 - sidebars.js | 36 - src/components/HomepageFeatures.js | 60 - src/components/HomepageFeatures.module.css | 11 - src/components/MyMDX.js | 14 - src/components/redirect.js | 27 - src/css/custom.css | 186 - src/pages/index.js | 119 - src/pages/index.module.css | 121 - src/pages/markdown-page.md | 9 - static/.nojekyll | 0 static/img/Hero.jpg | Bin 330312 -> 0 bytes static/img/bilibili.svg | 1 - static/img/docusaurus.png | Bin 5142 -> 0 bytes static/img/favicon.ico | Bin 3626 -> 0 bytes static/img/github.svg | 1 - static/img/index.jpg | Bin 85254 -> 0 bytes static/img/logo.svg | 1 - static/img/undraw_docusaurus_mountain.svg | 171 - static/img/undraw_docusaurus_react.svg | 170 - static/img/undraw_docusaurus_tree.svg | 40 - static/img/wechat.svg | 1 - static/img/zhihu.svg | 1 - static/robots.txt | 31 - wiki/compilation-principle/home.md | 11 - wiki/computer-composition/home.md | 11 - wiki/computer-network/home.md | 13 - .../computer-network/基础知识/_category_.json | 8 - .../computer-network/应用服务/_category_.json | 8 - .../computer-network/网络协议/_category_.json | 8 - wiki/computer-security/home.md | 11 - .../信息安全/_category_.json | 8 - wiki/computer-security/密码学/_category_.json | 8 - .../用户安全/_category_.json | 8 - .../系统安全/_category_.json | 8 - .../网络安全/_category_.json | 8 - .../PostgreSQL/_category_.json | 8 - wiki/database-system/SQL 语言/_category_.json | 8 - wiki/database-system/home.md | 11 - wiki/database-system/基础/_category_.json | 8 - wiki/getting-started/Git/入门/_category_.json | 8 - wiki/getting-started/Git/进阶/_category_.json | 8 - wiki/getting-started/Git/进阶/思维导图.md | 27 - .../Git/高级/Github/GitHub 奇技淫巧.md | 65 - .../Git/高级/Github/_category_.json | 8 - wiki/getting-started/Git/高级/_category_.json | 8 - .../Windows/Windows 下 Linux 子系统.md | 227 - .../Windows/Windows 下 OpenSSH 使用.md | 119 - wiki/getting-started/home.md | 13 - wiki/getting-started/开源/_category_.json | 8 - .../搜索/DuckDuckGo 搜索技巧.md | 43 - wiki/getting-started/搜索/Google 搜索技巧.md | 63 - wiki/getting-started/搜索/_category_.json | 8 - wiki/getting-started/文档/_category_.json | 8 - .../Linux/哲学/_category_.json | 8 - .../Linux/基础/_category_.json | 8 - .../Linux/文化/_category_.json | 8 - .../Linux/进阶/_category_.json | 8 - .../Linux/高级/_category_.json | 8 - wiki/operating-system/home.md | 11 - wiki/programming-language/C++/函数方法.md | 303 - wiki/programming-language/C++/基本语法.md | 345 - wiki/programming-language/C++/控制语句.md | 477 - wiki/programming-language/C++/简介.md | 181 - wiki/programming-language/C++/面对对象.md | 1320 - wiki/programming-language/C/Enum 类型.md | 118 - wiki/programming-language/C/IO 函数.md | 248 - wiki/programming-language/C/Struct 结构.md | 441 - wiki/programming-language/C/Typedef 命令.md | 184 - wiki/programming-language/C/Union 结构.md | 108 - .../C/lib 标准库/assert.h.md | 81 - .../C/lib 标准库/ctype.h.md | 56 - .../C/lib 标准库/errno.h.md | 34 - .../C/lib 标准库/float.h.md | 88 - .../C/lib 标准库/inttypes.h.md | 48 - .../C/lib 标准库/iso646.h.md | 23 - .../C/lib 标准库/limits.h.md | 45 - .../C/lib 标准库/locale.h.md | 142 - .../C/lib 标准库/math.h.md | 417 - .../C/lib 标准库/signal.h.md | 105 - .../C/lib 标准库/stdarg.h.md | 47 - .../C/lib 标准库/stdbool.h.md | 43 - .../C/lib 标准库/stddef.h.md | 39 - .../C/lib 标准库/stdint.h.md | 76 - .../C/lib 标准库/stdio.h.md | 390 - .../C/lib 标准库/stdlib.h.md | 632 - .../C/lib 标准库/string.h.md | 346 - .../C/lib 标准库/time.h.md | 363 - .../C/lib 标准库/wchar.h.md | 133 - .../C/lib 标准库/wctype.h.md | 97 - wiki/programming-language/C/内存管理.md | 405 - wiki/programming-language/C/函数.md | 520 - wiki/programming-language/C/变量.md | 173 - wiki/programming-language/C/变量说明符.md | 244 - wiki/programming-language/C/命令行环境.md | 118 - wiki/programming-language/C/多字节字符.md | 306 - wiki/programming-language/C/多文件项目.md | 236 - wiki/programming-language/C/字符串.md | 600 - wiki/programming-language/C/指针.md | 185 - wiki/programming-language/C/数据类型.md | 736 - wiki/programming-language/C/数组.md | 548 - wiki/programming-language/C/文件操作.md | 835 - wiki/programming-language/C/流程控制.md | 440 - wiki/programming-language/C/简介.md | 152 - wiki/programming-language/C/语法.md | 381 - wiki/programming-language/C/运算符.md | 465 - wiki/programming-language/C/预处理器.md | 590 - wiki/programming-language/Java/基本语法.md | 117 - wiki/programming-language/Java/控制语句.md | 146 - wiki/programming-language/Java/简介.md | 84 - wiki/programming-language/Java/面对对象.md | 658 - wiki/software-engineering/home.md | 11 - work/front-end-engineer/基础/_category_.json | 8 - work/front-end-engineer/工具/_category_.json | 8 - work/front-end-engineer/文化/_category_.json | 8 - work/roadmap/求职经验/_category_.json | 8 - work/roadmap/简历攻略/_category_.json | 8 - work/roadmap/职业规划/_category_.json | 8 - work/roadmap/职场心得/_category_.json | 8 - work/roadmap/薪酬攻略/_category_.json | 8 - work/roadmap/面试法则/_category_.json | 8 - 670 files changed, 6875 insertions(+), 61172 deletions(-) delete mode 100644 .github/workflows/algolia.yml delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/docsearch.json delete mode 100644 .gitignore create mode 100644 .obsidian/backlink.json create mode 100644 .obsidian/plugins/obsidian-linter/data.json create mode 100644 .obsidian/plugins/obsidian-linter/main.js create mode 100644 .obsidian/plugins/obsidian-linter/manifest.json create mode 100644 .obsidian/plugins/obsidian-linter/styles.css create mode 100644 .obsidian/types.json create mode 100644 .obsidian/workspace.json create mode 100644 Blog/11月28日晚 星期三 霾.md rename {blog => Blog}/2021.md (88%) create mode 100644 Blog/2022.md rename {blog => Blog}/BombSquad-炸弹人小分队.md (94%) rename {blog => Blog}/Docusaurus 搭建.md (97%) rename {blog => Blog}/Don`t Starve-饥荒.md (87%) rename {blog => Blog}/Halo 主题 Redemption 首发版.md (82%) rename {blog => Blog}/Hello Halo.md (93%) rename {blog => Blog}/Obsidian 使用 Templater 插件的个性化脚本.md (93%) rename {blog => Blog}/Redemption 主题 0.2.1 版本.md (93%) rename {blog => Blog}/Redemption.md (93%) rename {blog => Blog}/VIVO IQOO Neo3 开箱测评.md (75%) rename {blog => Blog}/YubiKey 漂流记.md (86%) rename {blog => Blog}/「引用」博客的本质是电线杆子.md (84%) rename {blog => Blog}/「转载」中文大约的确已经死了.md (88%) rename {blog => Blog}/「转载」人生.md (74%) rename {blog => Blog}/「转载」余光中:怎样改进英式中文?.md (98%) rename {blog => Blog}/「转载」做了 6 年程序员,我学到的 10 条经验.md (87%) rename {blog => Blog}/「转载」可逆与不可逆的决策.md (75%) rename {blog => Blog}/「转载」小镇做题家.md (77%) rename {blog => Blog}/「转载」年轻.md (90%) rename {blog => Blog}/「转载」当代科技生活.md (78%) rename {blog => Blog}/「转载」怎么平衡工作与生活?.md (96%) rename {blog => Blog}/「转载」提问的艺术.md (84%) rename {blog => Blog}/「转载」访谈总结.md (86%) rename {blog => Blog}/一线城市拥有一亩三分地是什么体验.md (89%) rename {blog => Blog}/三步为你博客文章分析情感关键字.md (87%) rename {blog => Blog}/上有天堂、下有苏杭.md (79%) rename {blog => Blog}/不要在饿的时候吃螺蛳粉!.md (94%) rename {blog => Blog}/中国传统历法.md (83%) rename {blog => Blog}/为什么不推开那扇门?.md (92%) rename {blog => Blog}/习惯养成第一步.md (77%) rename {blog => Blog}/人在囧途——青海湖.md (89%) rename {blog => Blog}/人格类型测试.md (92%) rename {blog => Blog}/你愿意嫁给自己么?.md (97%) rename {blog => Blog}/你还记得曾经的梦想么?.md (69%) rename {blog => Blog}/使用 Docusaurus 搭建优秀个人wiki.md (92%) rename {blog => Blog}/关于感情的事情.md (91%) rename {blog => Blog}/关于花.md (83%) rename {blog => Blog}/关于郑州的互联网记忆.md (65%) rename {blog => Blog}/再游嵩山.md (89%) rename {blog => Blog}/写十万字的博客是一种什么感觉.md (66%) rename {blog => Blog}/写博客的正确姿势 - 先行版.md (80%) rename {blog => Blog}/写博客的正确姿势 - 测试版.md (90%) rename {blog => Blog}/写博客的正确姿势.md (92%) rename {blog => Blog}/初号机,起飞!.md (83%) rename {blog => Blog}/原点.md (95%) rename {blog => Blog}/吉普赛满天星.md (77%) rename {blog => Blog}/唯有热爱可抵岁月漫长.md (90%) rename {blog => Blog}/回首 2022 展望 2023.md (86%) rename {blog => Blog}/夏日花记.md (91%) rename {blog => Blog}/大学回忆录.md (90%) rename {blog => Blog}/如何不写错别字!.md (80%) rename {blog => Blog}/如何免费创建一个属于自己的网站.md (92%) rename {blog => Blog}/如何免费获得 Jetbrains 正版授权.md (81%) rename {blog => Blog}/如何拍好一张照片.md (94%) rename {blog => Blog}/家里的三块地.md (92%) rename {blog => Blog}/岁月是把猪饲料,把我喂的嘎嘎胖.md (58%) rename {blog => Blog}/幸福的事情都是需要等待的.md (66%) rename {blog => Blog}/开源软件之道.md (83%) rename {blog => Blog}/我开发的第一款软件.md (82%) rename {blog => Blog}/我是关系户.md (76%) rename {blog => Blog}/我的小羊肖恩.md (85%) rename {blog => Blog}/我站立的地方是中国.md (76%) rename {blog => Blog}/我要拔智齿!!!.md (81%) create mode 100644 Blog/我还在…….md rename {blog => Blog}/拾月游记.md (82%) rename {blog => Blog}/揭晓你的博客一年之最,尽在 EndOfYear!.md (90%) rename {blog => Blog}/数字文化遗产.md (84%) rename {blog => Blog}/数据恢复杂谈.md (87%) rename {blog => Blog}/新冠笔记.md (90%) rename {blog => Blog}/新手村村长.md (91%) rename {blog => Blog}/早起、阅读、写作、运动、冥想.md (96%) rename {blog => Blog}/星光不问赶路人.md (94%) rename {blog => Blog}/是微风、是晚霞、是来日方长.md (79%) rename {blog => Blog}/最近半年的生活.md (88%) rename {blog => Blog}/最近在折腾什么…….md (79%) rename {blog => Blog}/最近的生活.md (86%) rename {blog => Blog}/月季到了.md (87%) rename {blog => Blog}/注定不平凡的一年.md (97%) rename {blog => Blog}/浅谈一下自己折腾的网站.md (89%) rename {blog => Blog}/浅谈个人服务器架构.md (88%) rename {blog => Blog}/济南呀济南的泰山之旅.md (92%) rename {blog => Blog}/涝疫结合.md (91%) rename {blog => Blog}/独立生活能力清单.md (86%) rename {blog => Blog}/球鞋日记.md (94%) rename {blog => Blog}/申请 Jetbrains 开源项目授权.md (89%) rename {blog => Blog}/电脑坏了,我换了 Ubuntu.md (57%) rename {blog => Blog}/番茄开花啦 ~.md (89%) rename {blog => Blog}/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md (81%) rename {blog => Blog}/真·长安游记.md (93%) rename {blog => Blog}/破万卷书,行万里路!.md (97%) rename {blog => Blog}/种下了一些瓜果蔬菜.md (88%) rename {blog => Blog}/罪恶应该被遗传么.md (89%) rename {blog => Blog}/自律的痛苦······.md (92%) rename {blog => Blog}/英雄联盟 S8 全球总决赛.md (63%) rename {blog => Blog}/螺蛳粉.md (83%) rename {blog => Blog}/記拾月.md (86%) rename {blog => Blog}/记拾月.md (61%) rename {blog => Blog}/论成年人的睡眠.md (86%) rename {blog => Blog}/谈谈我的「数字文具盒」 - NextCloud.md (87%) rename {blog => Blog}/谈谈我的「数字文具盒」 - Obsidian.md (95%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 个人工作流.md (79%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 心得体会.md (87%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 数字基建.md (93%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 生产力工具(上).md (92%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 生产力工具(下).md (88%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 番外篇.md (89%) rename {blog => Blog}/谈谈我的「数字文具盒」 - 运行平台.md (88%) rename {blog => Blog}/谈谈我的「数字文具盒」.md (89%) rename {blog => Blog}/贰号机、落幕.md (87%) rename {blog => Blog}/这个周末.md (88%) rename {blog => Blog}/通货膨胀的猪.md (87%) rename {blog => Blog}/长安三万里.md (94%) rename {blog => Blog}/长安游记.md (94%) rename {blog => Blog}/闭门锁网.md (95%) rename {blog => Blog}/非黑即白.md (76%) rename {blog => Blog}/首页加载速度优化方案.md (75%) rename {blog => Blog}/骑行在路上.md (94%) rename {blog => Blog}/黄山归来不看岳.md (89%) rename {journal => Journal}/2022/W34/2022-08-24.md (100%) rename {journal => Journal}/2022/W34/2022-08-25.md (100%) rename {journal => Journal}/2022/W34/2022-08-26.md (100%) rename {journal => Journal}/2022/W34/2022-08-27.md (100%) rename {journal => Journal}/2022/W34/2022-08-28.md (100%) rename {journal => Journal}/2022/W34/2022-W34.md (100%) rename {journal => Journal}/2022/W35/2022-08-29.md (100%) rename {journal => Journal}/2022/W35/2022-08-30.md (100%) rename {journal => Journal}/2022/W35/2022-08-31.md (100%) rename {journal => Journal}/2022/W35/2022-09-01.md (100%) rename {journal => Journal}/2022/W35/2022-W35.md (100%) rename {journal => Journal}/2022/W36/2022-09-05.md (100%) rename {journal => Journal}/2022/W36/2022-09-06.md (100%) rename {journal => Journal}/2022/W36/2022-09-07.md (100%) rename {journal => Journal}/2022/W36/2022-09-08.md (100%) rename {journal => Journal}/2022/W36/2022-W36.md (100%) rename {journal => Journal}/2022/W37/2022-09-12.md (100%) rename {journal => Journal}/2022/W37/2022-09-13.md (100%) rename {journal => Journal}/2022/W37/2022-09-14.md (100%) rename {journal => Journal}/2022/W37/2022-09-15.md (100%) rename {journal => Journal}/2022/W37/2022-09-16.md (100%) rename {journal => Journal}/2022/W37/2022-09-17.md (100%) rename {journal => Journal}/2022/W37/2022-09-18.md (100%) rename {journal => Journal}/2022/W37/2022-W37.md (100%) rename {journal => Journal}/2022/W38/2022-09-19.md (100%) rename {journal => Journal}/2022/W38/2022-09-20.md (100%) rename {journal => Journal}/2022/W38/2022-09-21.md (100%) rename {journal => Journal}/2022/W38/2022-09-22.md (100%) rename {journal => Journal}/2022/W38/2022-W38.md (100%) rename {journal => Journal}/2022/W39/2022-09-28.md (100%) rename {journal => Journal}/2022/W39/2022-09-29.md (100%) rename {journal => Journal}/2022/W39/2022-W39.md (100%) rename {journal => Journal}/2022/W41/2022-10-10.md (100%) rename {journal => Journal}/2022/W41/2022-10-11.md (100%) rename {journal => Journal}/2022/W41/2022-10-12.md (100%) rename {journal => Journal}/2022/W41/2022-10-13.md (100%) rename {journal => Journal}/2022/W41/2022-10-14.md (100%) rename {journal => Journal}/2022/W41/2022-10-16.md (100%) rename {journal => Journal}/2022/W41/2022-W41.md (100%) rename {journal => Journal}/2022/W42/2022-10-17.md (100%) rename {journal => Journal}/2022/W42/2022-10-18.md (100%) rename {journal => Journal}/2022/W42/2022-10-19.md (100%) rename {journal => Journal}/2022/W42/2022-10-21.md (100%) rename {journal => Journal}/2022/W42/2022-W42.md (100%) rename {journal => Journal}/2022/W43/2022-10-24.md (100%) rename {journal => Journal}/2022/W43/2022-10-26.md (100%) rename {journal => Journal}/2022/W43/2022-W43.md (100%) rename {journal => Journal}/2022/W44/2022-11-02.md (100%) rename {journal => Journal}/2022/W44/2022-W44.md (100%) rename {journal => Journal}/2022/W45/2022-11-10.md (100%) rename {journal => Journal}/2022/W45/2022-11-11.md (100%) rename {journal => Journal}/2022/W45/2022-11-12.md (100%) rename {journal => Journal}/2022/W45/2022-11-13.md (100%) rename {journal => Journal}/2022/W46/2022-11-18.md (100%) rename {journal => Journal}/2022/W46/2022-11-20.md (100%) rename {journal => Journal}/2022/W47/2022-11-21.md (100%) rename {journal => Journal}/2022/W47/2022-11-22.md (100%) rename {journal => Journal}/2022/W47/2022-W47.md (100%) rename {journal => Journal}/2022/W48/2022-11-28.md (100%) rename {journal => Journal}/2022/W48/2022-11-29.md (100%) rename {journal => Journal}/2022/W48/2022-12-01.md (100%) rename {journal => Journal}/2022/W48/2022-12-04.md (100%) rename {journal => Journal}/2022/W49/2022-12-06.md (100%) rename {journal => Journal}/2022/W49/2022-W49.md (100%) rename {journal => Journal}/2022/W50/2022-12-12.md (100%) rename {journal => Journal}/2023/W10/2023-W10.md (100%) rename {journal => Journal}/2023/W12/2023-03-20.md (100%) rename {journal => Journal}/2023/W12/2023-03-21.md (100%) rename {journal => Journal}/2023/W12/2023-W12.md (100%) rename {journal => Journal}/2023/W14/2023-04-08.md (100%) rename {journal => Journal}/2023/W14/2023-W14.md (100%) rename {journal => Journal}/2023/W16/2023-04-21.md (100%) rename {journal => Journal}/2023/W16/2023-04-23.md (100%) rename {journal => Journal}/2023/W2/2023-W2.md (100%) rename {journal => Journal}/2023/W22/2023-05-31.md (100%) rename {journal => Journal}/2023/W22/2023-06-01.md (100%) rename {journal => Journal}/2023/W22/2023-W22.md (100%) rename {journal => Journal}/2023/W23/2023-06-05.md (100%) rename {journal => Journal}/2023/W23/2023-06-08.md (100%) rename {journal => Journal}/2023/W23/2023-W23.md (100%) rename {journal => Journal}/2023/W24/2023-06-12.md (100%) rename {journal => Journal}/2023/W24/2023-06-13.md (100%) rename {journal => Journal}/2023/W24/2023-06-15.md (100%) rename {journal => Journal}/2023/W24/2023-W24.md (100%) rename {journal => Journal}/2023/W25/2023-W25.md (100%) rename {journal => Journal}/2023/W26/2023-06-26.md (100%) rename {journal => Journal}/2023/W3/2023-01-16.md (100%) rename {journal => Journal}/2023/W3/2023-01-18.md (100%) rename {journal => Journal}/2023/W31/2023-W31.md (100%) rename {journal => Journal}/2023/W32/2023-08-07.md (100%) rename {journal => Journal}/2023/W32/2023-08-08.md (100%) rename {journal => Journal}/2023/W32/2023-W32.md (100%) rename {journal => Journal}/2023/W33/2023-W33.md (100%) rename {journal => Journal}/2023/W35/2023-W35.md (100%) rename {journal => Journal}/2023/W36/2023-W36.md (100%) rename {journal => Journal}/2023/W37/2023-W37.md (100%) rename {journal => Journal}/2023/W40/2023-W40.md (100%) rename {journal => Journal}/2023/W5/2023-W5.md (100%) rename {journal => Journal}/2023/W6/2023-W6.md (100%) rename {journal => Journal}/2023/W7/2023-02-14.md (100%) rename {journal => Journal}/2023/W7/2023-02-15.md (100%) rename {journal => Journal}/2023/W7/2023-02-16.md (100%) rename {journal => Journal}/2023/W8/2023-02-20.md (100%) rename {journal => Journal}/2023/W8/2023-02-22.md (100%) delete mode 100644 License delete mode 100644 README.md delete mode 100644 README_EN.md rename {src/js => Static}/hitokoto.js (100%) rename {src/js => Static}/jinrishici.js (100%) rename {src/js => Static}/wttr_weather.js (100%) rename {wiki => Tech}/computer-network/应用服务/CDN 内容分发网络.md (99%) rename {wiki => Tech}/computer-network/网络协议/DHCP 动态主机配置协议.md (99%) rename {wiki => Tech}/computer-network/网络协议/DNS 域名系统.md (94%) rename {wiki => Tech}/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md (97%) rename {wiki => Tech}/computer-security/密码学/简明指南.md (92%) rename {wiki => Tech}/computer-security/用户安全/权限设计/_category_.json (100%) rename {wiki => Tech}/computer-security/用户安全/权限设计/主流权限系统的设计.md (92%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md (89%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md (98%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/OAuth 鉴权.md (92%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md (96%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/Token 鉴权.md (97%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/_category_.json (100%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md (96%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md (93%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/唯一登录.md (82%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/扫码登录.md (87%) rename {wiki => Tech}/computer-security/用户安全/用户鉴权/联合登录和信任登录.md (96%) rename {wiki => Tech}/computer-security/用户安全/简明指南.md (97%) rename {wiki => Tech}/computer-security/系统安全/防火墙/网络端口大全.md (53%) rename {wiki => Tech}/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md (98%) rename {wiki => Tech}/computer-security/网络安全/OpenSSH/OpenSSH 概述.md (69%) rename {wiki => Tech}/computer-security/网络安全/OpenSSL/简明指南.md (95%) rename {wiki => Tech}/database-system/PostgreSQL/基本概念.md (94%) rename {wiki => Tech}/database-system/PostgreSQL/安装配置.md (91%) rename {wiki => Tech}/database-system/PostgreSQL/简介.md (99%) rename {wiki => Tech}/database-system/SQL 语言/基础语法.md (97%) rename {wiki => Tech}/database-system/基础/关系型数据库.md (89%) rename {wiki => Tech}/database-system/基础/数据库概述.md (91%) rename {wiki => Tech}/database-system/基础/非关系型数据库.md (85%) rename {wiki => Tech}/getting-started/Git/入门/分支.md (99%) rename {wiki => Tech}/getting-started/Git/入门/协议.md (99%) rename {wiki => Tech}/getting-started/Git/入门/基础.md (96%) rename {wiki => Tech}/getting-started/Git/入门/起步.md (98%) rename {wiki => Tech}/getting-started/Git/进阶/Git-LFS.md (99%) rename {wiki => Tech}/getting-started/Git/进阶/参考手册.md (88%) rename {wiki => Tech}/getting-started/Git/进阶/工作流.md (99%) rename {wiki => Tech}/getting-started/Git/进阶/常用命令.md (98%) rename {wiki => Tech}/getting-started/Git/进阶/常用技巧.md (99%) create mode 100644 Tech/getting-started/Git/进阶/思维导图.md rename {wiki => Tech}/getting-started/Git/进阶/钩子.md (99%) rename {wiki => Tech}/getting-started/Shell/Shell 必备锦囊.md (100%) rename {wiki => Tech}/getting-started/Shell/Shell 是什么.md (100%) rename {wiki => Tech}/getting-started/Shell/命令行的艺术.md (100%) rename {wiki => Tech}/getting-started/Vim/Vim 入门.md (100%) rename {wiki => Tech}/getting-started/Vim/Vim 参考手册.md (100%) rename {wiki => Tech}/getting-started/Vim/Vim 帮助文档.md (100%) rename {wiki => Tech}/getting-started/开源/如何向开源社区提问.md (99%) rename {wiki => Tech}/getting-started/开源/如何有效报告 BUG.md (55%) rename {wiki => Tech}/getting-started/开源/开源指北.md (95%) rename {wiki => Tech}/getting-started/开源/提问的智慧.md (83%) rename {wiki => Tech}/operating-system/Linux/基础/Linux 命令行操作.md (89%) rename {wiki => Tech}/operating-system/Linux/基础/Linux 安装和配置.md (95%) rename {wiki => Tech}/operating-system/Linux/基础/Linux 文件管理.md (83%) rename {wiki => Tech}/operating-system/Linux/基础/Linux 用户和权限.md (95%) rename {wiki => Tech}/operating-system/Linux/基础/Linux 软件包管理器.md (97%) rename {wiki => Tech}/operating-system/Linux/文化/GNU&Linux 历史与发展.md (99%) rename {wiki => Tech}/operating-system/Linux/文化/GNU&Linux 社区与文化.md (95%) rename {wiki => Tech}/operating-system/Linux/文化/开源软件的概念与重要性.md (99%) rename {wiki => Tech}/operating-system/Linux/进阶/Linux 文件系统.md (80%) rename {wiki => Tech}/operating-system/Linux/进阶/Linux 日志监控.md (98%) rename {wiki => Tech}/operating-system/Linux/进阶/Linux 系统安全与防护.md (89%) rename {wiki => Tech}/operating-system/Linux/进阶/Linux 系统管理.md (91%) rename {wiki => Tech}/operating-system/Linux/进阶/Linux 网络配置.md (79%) rename {wiki => Tech}/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md (83%) rename {wiki => Tech}/programming-language/Python/入门/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/入门/函数方法.md (93%) rename {wiki => Tech}/programming-language/Python/入门/基础语法.md (85%) rename {wiki => Tech}/programming-language/Python/入门/控制语句.md (78%) rename {wiki => Tech}/programming-language/Python/入门/数据类型.md (85%) rename {wiki => Tech}/programming-language/Python/入门/数据结构.md (93%) rename {wiki => Tech}/programming-language/Python/入门/模块和包.md (86%) rename {wiki => Tech}/programming-language/Python/入门/面对对象.md (79%) rename {wiki => Tech}/programming-language/Python/文化/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/文化/发展历史.md (65%) rename {wiki => Tech}/programming-language/Python/文化/生命周期.md (88%) rename {wiki => Tech}/programming-language/Python/文化/社区文化.md (93%) rename {wiki => Tech}/programming-language/Python/文化/设计哲学.md (97%) rename {wiki => Tech}/programming-language/Python/文化/语言特性.md (95%) rename {wiki => Tech}/programming-language/Python/资源/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/常用技巧/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md (94%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md (98%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md (99%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md (98%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md (97%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md (92%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md (99%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md (97%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md (93%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md (95%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md (94%) rename {wiki => Tech}/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md (92%) rename {wiki => Tech}/programming-language/Python/进阶/语言参考/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/语言参考/函数式编程.md (99%) rename {wiki => Tech}/programming-language/Python/进阶/语言参考/垃圾回收.md (85%) rename {wiki => Tech}/programming-language/Python/进阶/语言参考/并行和并发.md (93%) rename {wiki => Tech}/programming-language/Python/进阶/语言参考/面向对象进阶.md (65%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/文档指南/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/虚拟环境/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/虚拟环境/pip.md (83%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md (98%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md (96%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md (94%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/虚拟环境/概述.md (97%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/项目指南/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/风格指南/_category_.json (100%) rename {wiki => Tech}/programming-language/Python/进阶/项目实践/风格指南/风格指南.md (93%) rename {wiki => Tech}/programming-language/Python/高级/_category_.json (100%) rename {wiki => Tech}/programming-language/Regex/常用正则大全.md (100%) rename {wiki => Tech}/programming-language/Regex/正则表达式入门.md (100%) rename {wiki => Tech}/programming-language/home.md (99%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/_category_.json (100%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/交流反馈(Issue).md (72%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/关于(Readme).md (97%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/分支(Branch).md (91%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/开源协议(License).md (83%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/日志(Commit).md (96%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/注释(Comments).md (92%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/版本(Tag).md (74%) rename {wiki/getting-started/Git/高级 => Tech/software-engineering}/协作规范/贡献者协议(Contributing).md (88%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/命名约定.md (98%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/文档内容.md (97%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/文档结构.md (81%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/标点符号.md (99%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/简介.md (96%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/语言风格.md (97%) rename {wiki/getting-started/文档 => Tech/software-engineering/技术文档}/附录资料.md (97%) rename {group/organization/Google => Tech/software-engineering}/谷歌开源项目风格指南.md (100%) rename {wiki => Tech}/structures-algorithms/home.md (55%) rename {wiki => Tech}/structures-algorithms/数据结构.md (100%) rename {wiki => Tech}/structures-algorithms/算法.md (98%) rename {templates => Templates}/博客模板.md (100%) rename {templates => Templates}/文档模板.md (100%) rename {templates => Templates}/日志 - 周记模板.md (100%) rename {templates => Templates}/日志 - 季度模板.md (100%) rename {templates => Templates}/日志 - 日记模板.md (100%) rename {templates => Templates}/阅读模板.md (100%) rename {work => Work}/data-engineer/home.md (97%) rename {work/front-end-engineer => Work/full-stack}/home.md (97%) rename {work/front-end-engineer => Work/full-stack}/基础/CSS.md (98%) rename {work/front-end-engineer => Work/full-stack}/基础/HTML.md (86%) rename {work/front-end-engineer => Work/full-stack}/基础/JavaScript.md (96%) rename {work/front-end-engineer => Work/full-stack}/工具/PM2 工具.md (90%) rename {work/front-end-engineer => Work/full-stack}/工具/Webpack.md (99%) rename {work/front-end-engineer => Work/full-stack}/工具/包管理工具.md (97%) rename {work/front-end-engineer => Work/full-stack}/文化/历史发展.md (81%) rename {work/front-end-engineer => Work/full-stack}/文化/概述.md (99%) rename {work/front-end-engineer => Work/full-stack}/文化/现代化开发工具链.md (96%) rename {work => Work}/roadmap/home.md (91%) rename {work => Work}/roadmap/求职经验/互联网行业-郑州.md (88%) rename {work => Work}/roadmap/求职经验/写给软件工程师的建议.md (95%) rename {work => Work}/roadmap/简历攻略/IT 类简历.md (92%) rename {work => Work}/roadmap/简历攻略/简历原则.md (91%) rename {work => Work}/roadmap/职业规划/开发者职业路线图.md (94%) rename {work => Work}/roadmap/职业规划/职业宏观规划图.md (93%) rename {work => Work}/roadmap/职业规划/职业宏观路线图.md (99%) rename {work => Work}/roadmap/职场心得/华为新员工的 8 个阶段.md (99%) rename {work => Work}/roadmap/职场心得/如何平衡工作和生活.md (98%) rename {work => Work}/roadmap/职场心得/如何度过新手村.md (99%) rename {work => Work}/roadmap/职场心得/如何有效应对职场政治.md (69%) rename {work => Work}/roadmap/薪酬攻略/社会保障.md (90%) rename {work => Work}/roadmap/薪酬攻略/绩效考核.md (98%) rename {work => Work}/roadmap/薪酬攻略/薪酬制度.md (79%) rename {work => Work}/roadmap/面试法则/反向面试.md (98%) rename {work => Work}/roadmap/面试法则/面试 10 大常见问题.md (87%) rename {work => Work}/sre-engineer/home.md (98%) delete mode 100644 babel.config.js delete mode 100644 blog/11月28日晚 星期三 霾.md delete mode 100644 blog/2022.md delete mode 100644 blog/Git 规范.md delete mode 100644 blog/authors.yml delete mode 100644 blog/我还在…….md delete mode 100644 docs/Docker/Dockerfile 文件详解.md delete mode 100644 docs/Nginx/Nginx 常用配置.md delete mode 100644 docs/OpenSSH/rsync 命令.md delete mode 100644 docs/OpenSSH/scp 命令.md delete mode 100644 docs/OpenSSH/sftp 命令.md delete mode 100644 docs/OpenSSH/客户端.md delete mode 100644 docs/OpenSSH/密钥登录.md delete mode 100644 docs/OpenSSH/服务器.md delete mode 100644 docs/OpenSSH/端口转发.md delete mode 100644 docs/OpenSSH/简介.md delete mode 100644 docs/OpenSSH/证书登录.md delete mode 100644 docs/home.md delete mode 100644 docs/云服务/Azure/核心体系.md delete mode 100644 docs/云服务/_category_.json delete mode 100644 docs/云服务/基本概念.md delete mode 100644 docs/其他文章/_category_.json delete mode 100644 docs/其他文章/资源/_category_.json delete mode 100644 docs/其他文章/资源/计算机教育中缺失的一课.md delete mode 100644 docs/其他文章/远程协助工具对比.md delete mode 100644 docusaurus.config.js delete mode 100644 group/company/home.md delete mode 100644 group/company/入门/_category_.json delete mode 100644 group/company/入门/应用系统/BPM(业务流程管理).md delete mode 100644 group/company/入门/应用系统/CMS(内容管理系统).md delete mode 100644 group/company/入门/应用系统/CRM(客户关系管理).md delete mode 100644 group/company/入门/应用系统/ERP(企业资源计划).md delete mode 100644 group/company/入门/应用系统/HCM(人力资本管理).md delete mode 100644 group/company/入门/应用系统/OA(办公自动化).md delete mode 100644 group/company/入门/应用系统/SCM(供应链管理系统).md delete mode 100644 group/company/入门/应用系统/_category_.json delete mode 100644 group/company/入门/数字化/_category_.json delete mode 100644 group/company/入门/标准参考/_category_.json delete mode 100644 group/company/入门/管理文化/_category_.json delete mode 100644 group/company/入门/管理文化/概述.md delete mode 100644 group/company/入门/组织结构/_category_.json delete mode 100644 group/company/入门/组织结构/体系.md delete mode 100644 group/company/入门/组织结构/实例.md delete mode 100644 group/company/入门/组织结构/概述.md delete mode 100644 group/company/入门/组织结构/规范.md delete mode 100644 group/company/入门/组织结构/设计.md delete mode 100644 group/government/home.md delete mode 100644 group/government/中国国家标准/_category_.json delete mode 100644 group/government/中国国家标准/标准组织.md delete mode 100644 group/government/中国国家标准/法律合同.md delete mode 100644 group/organization/Tencent/腾讯代码安全指南/C,C++安全指南.md delete mode 100644 group/organization/Tencent/腾讯代码安全指南/Go安全指南.md delete mode 100644 group/organization/Tencent/腾讯代码安全指南/JavaScript安全指南.md delete mode 100644 group/organization/Tencent/腾讯代码安全指南/Java安全指南.md delete mode 100644 group/organization/Tencent/腾讯代码安全指南/Python安全指南.md delete mode 100644 group/organization/Tencent/腾讯代码安全指南/腾讯代码安全指南.md delete mode 100644 group/organization/home.md delete mode 100644 journal/home.md delete mode 100644 life/home.md delete mode 100644 life/健身/上肢训练.md delete mode 100644 life/健身/下肢训练.md delete mode 100644 life/健身/拉伸放松.md delete mode 100644 life/健身/核心训练.md delete mode 100644 life/健身/热身.md delete mode 100644 life/健身/饮食公式.md delete mode 100644 life/阅读/个人成长/习惯的力量(新版).md delete mode 100644 life/阅读/个人成长/以极简的方式去生活.md delete mode 100644 life/阅读/个人成长/写出我心:普通人如何通过写作表达自己.md delete mode 100644 life/阅读/个人成长/刻意练习:如何从新手到大师.md delete mode 100644 life/阅读/个人成长/即兴表达.md delete mode 100644 life/阅读/个人成长/学习之道.md delete mode 100644 life/阅读/个人成长/学会写作:自我进阶的高效方法.md delete mode 100644 life/阅读/个人成长/当下的力量(白金版).md delete mode 100644 life/阅读/个人成长/我的第一本人生规划手册.md delete mode 100644 life/阅读/医学健康/你是你吃出来的(套装共2册).md delete mode 100644 life/阅读/医学健康/小小药箱护健康教您用好家庭小药箱.md delete mode 100644 life/阅读/历史/信息简史.md delete mode 100644 life/阅读/历史/这里是中国2.md delete mode 100644 life/阅读/哲学宗教/半小时漫画中国哲学史(套装全2册).md delete mode 100644 life/阅读/哲学宗教/第一性原理.md delete mode 100644 life/阅读/哲学宗教/结构化思维.md delete mode 100644 life/阅读/心理/十分钟冥想.md delete mode 100644 life/阅读/心理/认知觉醒:开启自我改变的原动力.md delete mode 100644 life/阅读/心理/认知驱动:做成一件对他人很有用的事.md delete mode 100644 life/阅读/心理/谈性说爱:写给女性的性心理24讲.md delete mode 100644 life/阅读/政治军事/实践论.md delete mode 100644 life/阅读/教育学习/如何阅读一本书.md delete mode 100644 life/阅读/教育学习/赖世雄的英语学习法.md delete mode 100644 life/阅读/文学/老舍谈写作.md delete mode 100644 life/阅读/生活百科/聂卫平围棋教程(从15级到10级).md delete mode 100644 life/阅读/生活百科/聂卫平围棋教程(从入门到15级).md delete mode 100644 life/阅读/社会文化/人体简史.md delete mode 100644 life/阅读/社会文化/你不可不知的法律常识.md delete mode 100644 life/阅读/社会文化/半小时漫画《论语》.md delete mode 100644 life/阅读/社会文化/民法典与百姓生活100问.md delete mode 100644 life/阅读/社会文化/这里是中国.md delete mode 100644 life/阅读/科学技术/贝尔实验室与美国革新大时代.md delete mode 100644 life/阅读/科学技术/高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例.md delete mode 100644 life/阅读/经济理财/半小时漫画股票实战法.md delete mode 100644 life/阅读/经济理财/小米创业思考.md delete mode 100644 life/阅读/艺术/江湖丛谈(注音注释插图本).md delete mode 100644 life/阅读/计算机/Flask Web开发:基于Python的Web应用开发实战(第2版).md delete mode 100644 life/阅读/计算机/Linux是怎样工作的.md delete mode 100644 life/阅读/计算机/Python工匠:案例、技巧与工程实践.md delete mode 100644 life/阅读/计算机/Python编程:从入门到实践(第2版).md delete mode 100644 life/阅读/计算机/UNIX传奇:历史与回忆.md delete mode 100644 life/阅读/计算机/VMware vSphere 7.0云平台运维与管理(第2版).md delete mode 100644 life/阅读/计算机/从0到1:HTML+CSS快速上手.md delete mode 100644 life/阅读/计算机/从0到1:HTML5+CSS3修炼之道.md delete mode 100644 life/阅读/计算机/从0到1:JavaScript 快速上手.md delete mode 100644 life/阅读/计算机/从0到1:jQuery快速上手.md delete mode 100644 life/阅读/计算机/明解Python.md delete mode 100644 life/阅读/计算机/流畅的Python.md delete mode 100644 life/阅读/计算机/硅谷之火:个人计算机的诞生与衰落(第3版).md delete mode 100644 life/阅读/计算机/秒懂设计模式.md delete mode 100644 life/阅读/计算机/精通Python设计模式(第2版).md delete mode 100644 life/阅读/计算机/网络安全等级保护2.0:定级、测评、实施与运维.md delete mode 100644 life/阅读/计算机/网络工程师红宝书:思科华为华三实战案例荟萃.md delete mode 100644 life/阅读/计算机/网络是怎样连接的.md delete mode 100644 life/阅读/计算机/网络运维亲历记 (网络运维纪实文学).md delete mode 100644 life/阅读/计算机/虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面应用虚拟化+Veeam备份+Zabbix监控.md delete mode 100644 life/阅读/计算机/计算机:一部历史.md delete mode 100644 life/食谱/凉菜/万能凉拌料.md delete mode 100644 life/食谱/凉菜/凉菜食材处理.md delete mode 100644 life/食谱/午餐/番茄鸡蛋盖饭.md delete mode 100644 life/食谱/早餐/三明治.md delete mode 100644 life/食谱/早餐/花样蒸蛋.md delete mode 100644 life/食谱/早餐/蒸蛋.md delete mode 100644 life/食谱/烧烤/准备工作.md delete mode 100644 life/食谱/零食/炸薯条.md delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 sidebars.js delete mode 100644 src/components/HomepageFeatures.js delete mode 100644 src/components/HomepageFeatures.module.css delete mode 100644 src/components/MyMDX.js delete mode 100644 src/components/redirect.js delete mode 100644 src/css/custom.css delete mode 100644 src/pages/index.js delete mode 100644 src/pages/index.module.css delete mode 100644 src/pages/markdown-page.md delete mode 100644 static/.nojekyll delete mode 100644 static/img/Hero.jpg delete mode 100644 static/img/bilibili.svg delete mode 100644 static/img/docusaurus.png delete mode 100644 static/img/favicon.ico delete mode 100644 static/img/github.svg delete mode 100644 static/img/index.jpg delete mode 100644 static/img/logo.svg delete mode 100644 static/img/undraw_docusaurus_mountain.svg delete mode 100644 static/img/undraw_docusaurus_react.svg delete mode 100644 static/img/undraw_docusaurus_tree.svg delete mode 100644 static/img/wechat.svg delete mode 100644 static/img/zhihu.svg delete mode 100644 static/robots.txt delete mode 100644 wiki/compilation-principle/home.md delete mode 100644 wiki/computer-composition/home.md delete mode 100644 wiki/computer-network/home.md delete mode 100644 wiki/computer-network/基础知识/_category_.json delete mode 100644 wiki/computer-network/应用服务/_category_.json delete mode 100644 wiki/computer-network/网络协议/_category_.json delete mode 100644 wiki/computer-security/home.md delete mode 100644 wiki/computer-security/信息安全/_category_.json delete mode 100644 wiki/computer-security/密码学/_category_.json delete mode 100644 wiki/computer-security/用户安全/_category_.json delete mode 100644 wiki/computer-security/系统安全/_category_.json delete mode 100644 wiki/computer-security/网络安全/_category_.json delete mode 100644 wiki/database-system/PostgreSQL/_category_.json delete mode 100644 wiki/database-system/SQL 语言/_category_.json delete mode 100644 wiki/database-system/home.md delete mode 100644 wiki/database-system/基础/_category_.json delete mode 100644 wiki/getting-started/Git/入门/_category_.json delete mode 100644 wiki/getting-started/Git/进阶/_category_.json delete mode 100644 wiki/getting-started/Git/进阶/思维导图.md delete mode 100644 wiki/getting-started/Git/高级/Github/GitHub 奇技淫巧.md delete mode 100644 wiki/getting-started/Git/高级/Github/_category_.json delete mode 100644 wiki/getting-started/Git/高级/_category_.json delete mode 100644 wiki/getting-started/Windows/Windows 下 Linux 子系统.md delete mode 100644 wiki/getting-started/Windows/Windows 下 OpenSSH 使用.md delete mode 100644 wiki/getting-started/home.md delete mode 100644 wiki/getting-started/开源/_category_.json delete mode 100644 wiki/getting-started/搜索/DuckDuckGo 搜索技巧.md delete mode 100644 wiki/getting-started/搜索/Google 搜索技巧.md delete mode 100644 wiki/getting-started/搜索/_category_.json delete mode 100644 wiki/getting-started/文档/_category_.json delete mode 100644 wiki/operating-system/Linux/哲学/_category_.json delete mode 100644 wiki/operating-system/Linux/基础/_category_.json delete mode 100644 wiki/operating-system/Linux/文化/_category_.json delete mode 100644 wiki/operating-system/Linux/进阶/_category_.json delete mode 100644 wiki/operating-system/Linux/高级/_category_.json delete mode 100644 wiki/operating-system/home.md delete mode 100644 wiki/programming-language/C++/函数方法.md delete mode 100644 wiki/programming-language/C++/基本语法.md delete mode 100644 wiki/programming-language/C++/控制语句.md delete mode 100644 wiki/programming-language/C++/简介.md delete mode 100644 wiki/programming-language/C++/面对对象.md delete mode 100644 wiki/programming-language/C/Enum 类型.md delete mode 100644 wiki/programming-language/C/IO 函数.md delete mode 100644 wiki/programming-language/C/Struct 结构.md delete mode 100644 wiki/programming-language/C/Typedef 命令.md delete mode 100644 wiki/programming-language/C/Union 结构.md delete mode 100644 wiki/programming-language/C/lib 标准库/assert.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/ctype.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/errno.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/float.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/inttypes.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/iso646.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/limits.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/locale.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/math.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/signal.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/stdarg.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/stdbool.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/stddef.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/stdint.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/stdio.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/stdlib.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/string.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/time.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/wchar.h.md delete mode 100644 wiki/programming-language/C/lib 标准库/wctype.h.md delete mode 100644 wiki/programming-language/C/内存管理.md delete mode 100644 wiki/programming-language/C/函数.md delete mode 100644 wiki/programming-language/C/变量.md delete mode 100644 wiki/programming-language/C/变量说明符.md delete mode 100644 wiki/programming-language/C/命令行环境.md delete mode 100644 wiki/programming-language/C/多字节字符.md delete mode 100644 wiki/programming-language/C/多文件项目.md delete mode 100644 wiki/programming-language/C/字符串.md delete mode 100644 wiki/programming-language/C/指针.md delete mode 100644 wiki/programming-language/C/数据类型.md delete mode 100644 wiki/programming-language/C/数组.md delete mode 100644 wiki/programming-language/C/文件操作.md delete mode 100644 wiki/programming-language/C/流程控制.md delete mode 100644 wiki/programming-language/C/简介.md delete mode 100644 wiki/programming-language/C/语法.md delete mode 100644 wiki/programming-language/C/运算符.md delete mode 100644 wiki/programming-language/C/预处理器.md delete mode 100644 wiki/programming-language/Java/基本语法.md delete mode 100644 wiki/programming-language/Java/控制语句.md delete mode 100644 wiki/programming-language/Java/简介.md delete mode 100644 wiki/programming-language/Java/面对对象.md delete mode 100644 wiki/software-engineering/home.md delete mode 100644 work/front-end-engineer/基础/_category_.json delete mode 100644 work/front-end-engineer/工具/_category_.json delete mode 100644 work/front-end-engineer/文化/_category_.json delete mode 100644 work/roadmap/求职经验/_category_.json delete mode 100644 work/roadmap/简历攻略/_category_.json delete mode 100644 work/roadmap/职业规划/_category_.json delete mode 100644 work/roadmap/职场心得/_category_.json delete mode 100644 work/roadmap/薪酬攻略/_category_.json delete mode 100644 work/roadmap/面试法则/_category_.json diff --git a/.github/workflows/algolia.yml b/.github/workflows/algolia.yml deleted file mode 100644 index 4f5bd285..00000000 --- a/.github/workflows/algolia.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Algolia Push Data -on: - schedule: - - cron: '0 2 * * 3' - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Run Crawler - env: - ALGOLIA_ADMIN_API_KEY: ${{ secrets.ALGOLIA_ADMIN_API_KEY }} - ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} - run: | - sudo apt-get update && - sudo apt-get install -y jq && - docker run -t\ - -e APPLICATION_ID=$ALGOLIA_APP_ID \ - -e API_KEY=$ALGOLIA_ADMIN_API_KEY \ - -e "CONFIG=$(cat .github/workflows/docsearch.json | jq -r tostring)" \ - algolia/docsearch-scraper \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index caaf8968..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Build HTML -on: - push: - branches: - - main -jobs: - build-and-deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Use Node 18 - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Build HTML - run: | - npm install - npm run build - - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./build - publish_branch: html - - diff --git a/.github/workflows/docsearch.json b/.github/workflows/docsearch.json deleted file mode 100644 index eb612b6d..00000000 --- a/.github/workflows/docsearch.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "index_name": "wiki", - "start_urls": [ - "https://wiki.7wate.com/" - ], - "sitemap_urls": [ - "https://wiki.7wate.com/sitemap.xml" - ], - "stop_urls": [ - "/search", - "/v3me", - "/playground", - "/inspector" - ], - "sitemap_alternate_links": true, - "selectors": { - "lvl0": { - "selector": "(//ul[contains(@class,'menu__list')]//a[contains(@class, 'menu__link menu__link--sublist menu__link--active')]/text() | //nav[contains(@class, 'navbar')]//a[contains(@class, 'navbar__link--active')]/text())[last()]", - "type": "xpath", - "global": true, - "default_value": "Documentation" - }, - "lvl1": "header h1", - "lvl2": "article h2", - "lvl3": "article h3", - "lvl4": "article h4", - "lvl5": "article h5, article td:first-child", - "lvl6": "article h6", - "text": "article p, article li, article td:last-child" - }, - "strip_chars": " .,;:#", - "custom_settings": { - "separatorsToIndex": "_", - "attributesForFaceting": [ - "language", - "version", - "type", - "docusaurus_tag" - ], - "attributesToRetrieve": [ - "hierarchy", - "content", - "anchor", - "url", - "url_without_anchor", - "type" - ] - }, - "js_render": true, - "nb_hits": 856 - } \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 645d7502..00000000 --- a/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# other -/dist -/.vscode -/.trash -.obsidian/workspace.json -/book -/canvas diff --git a/.obsidian/app.json b/.obsidian/app.json index 93ac64b8..d31a2153 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -5,7 +5,7 @@ "spellcheck": false, "spellcheckLanguages": null, "trashOption": "system", - "promptDelete": true, + "promptDelete": false, "communityPluginSortOrder": "download", "attachmentFolderPath": "static/upload", "userIgnoreFilters": [ @@ -14,7 +14,7 @@ "templates/" ], "newFileLocation": "current", - "defaultViewMode": "preview", + "defaultViewMode": "source", "showFrontmatter": true, "vimMode": false, "newLinkFormat": "absolute", diff --git a/.obsidian/backlink.json b/.obsidian/backlink.json new file mode 100644 index 00000000..48ee9136 --- /dev/null +++ b/.obsidian/backlink.json @@ -0,0 +1,3 @@ +{ + "backlinkInDocument": true +} \ No newline at end of file diff --git a/.obsidian/canvas.json b/.obsidian/canvas.json index d28c58fb..9f2b582b 100644 --- a/.obsidian/canvas.json +++ b/.obsidian/canvas.json @@ -2,5 +2,5 @@ "snapToObjects": true, "snapToGrid": true, "newFileLocation": "folder", - "newFileFolderPath": "canvas" + "newFileFolderPath": "Canvas" } \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 196cd0aa..d7435b24 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -3,7 +3,8 @@ "obsidian-hider", "templater-obsidian", "periodic-notes", - "obsidian-git", "obsidian-minimal-settings", - "obsidian-weread-plugin" + "obsidian-weread-plugin", + "obsidian-linter", + "obsidian-git" ] \ No newline at end of file diff --git a/.obsidian/core-plugins-migration.json b/.obsidian/core-plugins-migration.json index 4db2aaea..bec3e9e8 100644 --- a/.obsidian/core-plugins-migration.json +++ b/.obsidian/core-plugins-migration.json @@ -2,9 +2,9 @@ "file-explorer": true, "global-search": true, "switcher": false, - "graph": false, - "backlink": false, - "outgoing-link": false, + "graph": true, + "backlink": true, + "outgoing-link": true, "tag-pane": true, "page-preview": true, "daily-notes": false, @@ -26,6 +26,6 @@ "publish": false, "sync": false, "canvas": true, - "bookmarks": false, + "bookmarks": true, "properties": true } \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json index 290325d7..2e6b514d 100644 --- a/.obsidian/core-plugins.json +++ b/.obsidian/core-plugins.json @@ -1,12 +1,16 @@ [ "file-explorer", "global-search", + "graph", + "backlink", "canvas", + "outgoing-link", "tag-pane", "properties", "page-preview", "command-palette", "editor-status", + "bookmarks", "outline", "word-count", "workspaces", diff --git a/.obsidian/graph.json b/.obsidian/graph.json index 8a6e025d..4fbba3c6 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -4,7 +4,7 @@ "showTags": true, "showAttachments": false, "hideUnresolved": false, - "showOrphans": true, + "showOrphans": false, "collapse-color-groups": true, "colorGroups": [], "collapse-display": true, @@ -17,6 +17,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.13168724279835348, + "scale": 0.21045014194326922, "close": true } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-linter/data.json b/.obsidian/plugins/obsidian-linter/data.json new file mode 100644 index 00000000..27d86a5f --- /dev/null +++ b/.obsidian/plugins/obsidian-linter/data.json @@ -0,0 +1,257 @@ +{ + "ruleConfigs": { + "escape-yaml-special-characters": { + "enabled": false, + "try-to-escape-single-line-arrays": false + }, + "force-yaml-escape": { + "enabled": false, + "force-yaml-escape-keys": "" + }, + "format-tags-in-yaml": { + "enabled": false + }, + "format-yaml-array": { + "enabled": false, + "alias-key": true, + "tag-key": true, + "default-array-style": "single-line", + "default-array-keys": true, + "force-single-line-array-style": "", + "force-multi-line-array-style": "" + }, + "insert-yaml-attributes": { + "enabled": false, + "text-to-insert": "aliases: \ntags: " + }, + "move-tags-to-yaml": { + "enabled": false, + "how-to-handle-existing-tags": "Nothing", + "tags-to-ignore": "" + }, + "remove-yaml-keys": { + "enabled": false, + "yaml-keys-to-remove": "" + }, + "yaml-key-sort": { + "enabled": false, + "yaml-key-priority-sort-order": "", + "priority-keys-at-start-of-yaml": true, + "yaml-sort-order-for-other-keys": "None" + }, + "yaml-timestamp": { + "enabled": false, + "date-created": true, + "date-created-key": "date created", + "force-retention-of-create-value": false, + "date-modified": true, + "date-modified-key": "date modified", + "format": "dddd, MMMM Do YYYY, h:mm:ss a" + }, + "yaml-title": { + "enabled": false, + "title-key": "title", + "mode": "first-h1-or-filename-if-h1-missing" + }, + "yaml-title-alias": { + "enabled": false, + "preserve-existing-alias-section-style": true, + "keep-alias-that-matches-the-filename": false, + "use-yaml-key-to-keep-track-of-old-filename-or-heading": true + }, + "capitalize-headings": { + "enabled": true, + "style": "Title Case", + "ignore-case-words": true, + "ignore-words": "macOS, iOS, iPhone, iPad, JavaScript, TypeScript, AppleScript, I", + "lowercase-words": "a, an, the, aboard, about, abt., above, abreast, absent, across, after, against, along, aloft, alongside, amid, amidst, mid, midst, among, amongst, anti, apropos, around, round, as, aslant, astride, at, atop, ontop, bar, barring, before, B4, behind, below, beneath, neath, beside, besides, between, 'tween, beyond, but, by, chez, circa, c., ca., come, concerning, contra, counting, cum, despite, spite, down, during, effective, ere, except, excepting, excluding, failing, following, for, from, in, including, inside, into, less, like, minus, modulo, mod, near, nearer, nearest, next, notwithstanding, of, o', off, offshore, on, onto, opposite, out, outside, over, o'er, pace, past, pending, per, plus, post, pre, pro, qua, re, regarding, respecting, sans, save, saving, short, since, sub, than, through, thru, throughout, thruout, till, times, to, t', touching, toward, towards, under, underneath, unlike, until, unto, up, upon, versus, vs., v., via, vice, vis-à-vis, wanting, with, w/, w., c̄, within, w/i, without, 'thout, w/o, abroad, adrift, aft, afterward, afterwards, ahead, apart, ashore, aside, away, back, backward, backwards, beforehand, downhill, downstage, downstairs, downstream, downward, downwards, downwind, east, eastward, eastwards, forth, forward, forwards, heavenward, heavenwards, hence, henceforth, here, hereby, herein, hereof, hereto, herewith, home, homeward, homewards, indoors, inward, inwards, leftward, leftwards, north, northeast, northward, northwards, northwest, now, onward, onwards, outdoors, outward, outwards, overboard, overhead, overland, overseas, rightward, rightwards, seaward, seawards, skywards, skyward, south, southeast, southwards, southward, southwest, then, thence, thenceforth, there, thereby, therein, thereof, thereto, therewith, together, underfoot, underground, uphill, upstage, upstairs, upstream, upward, upwards, upwind, west, westward, westwards, when, whence, where, whereby, wherein, whereto, wherewith, although, because, considering, given, granted, if, lest, once, provided, providing, seeing, so, supposing, though, unless, whenever, whereas, wherever, while, whilst, ago, according to, as regards, counter to, instead of, owing to, pertaining to, at the behest of, at the expense of, at the hands of, at risk of, at the risk of, at variance with, by dint of, by means of, by virtue of, by way of, for the sake of, for sake of, for lack of, for want of, from want of, in accordance with, in addition to, in case of, in charge of, in compliance with, in conformity with, in contact with, in exchange for, in favor of, in front of, in lieu of, in light of, in the light of, in line with, in place of, in point of, in quest of, in relation to, in regard to, with regard to, in respect to, with respect to, in return for, in search of, in step with, in touch with, in terms of, in the name of, in view of, on account of, on behalf of, on grounds of, on the grounds of, on the part of, on top of, with a view to, with the exception of, à la, a la, as soon as, as well as, close to, due to, far from, in case, other than, prior to, pursuant to, regardless of, subsequent to, as long as, as much as, as far as, by the time, in as much as, inasmuch, in order to, in order that, even, provide that, if only, whether, whose, whoever, why, how, or not, whatever, what, both, and, or, not only, but also, either, neither, nor, just, rather, no sooner, such, that, yet, is, it" + }, + "file-name-heading": { + "enabled": false + }, + "header-increment": { + "enabled": true, + "start-at-h2": true + }, + "headings-start-line": { + "enabled": true + }, + "remove-trailing-punctuation-in-heading": { + "enabled": false, + "punctuation-to-remove": ".,;:!。,;:!" + }, + "footnote-after-punctuation": { + "enabled": true + }, + "move-footnotes-to-the-bottom": { + "enabled": true + }, + "re-index-footnotes": { + "enabled": false + }, + "auto-correct-common-misspellings": { + "enabled": true, + "ignore-words": "" + }, + "blockquote-style": { + "enabled": true, + "style": "space" + }, + "convert-bullet-list-markers": { + "enabled": true + }, + "emphasis-style": { + "enabled": true, + "style": "consistent" + }, + "no-bare-urls": { + "enabled": false, + "no-bare-uris": false + }, + "ordered-list-style": { + "enabled": true, + "number-style": "ascending", + "list-end-style": "." + }, + "proper-ellipsis": { + "enabled": false + }, + "quote-style": { + "enabled": false, + "single-quote-enabled": true, + "single-quote-style": "''", + "double-quote-enabled": true, + "double-quote-style": "\"\"" + }, + "remove-consecutive-list-markers": { + "enabled": true + }, + "remove-empty-list-markers": { + "enabled": true + }, + "remove-hyphenated-line-breaks": { + "enabled": false + }, + "remove-multiple-spaces": { + "enabled": false + }, + "strong-style": { + "enabled": false, + "style": "consistent" + }, + "two-spaces-between-lines-with-content": { + "enabled": false + }, + "unordered-list-style": { + "enabled": false, + "list-style": "consistent" + }, + "compact-yaml": { + "enabled": true, + "inner-new-lines": true + }, + "consecutive-blank-lines": { + "enabled": true + }, + "convert-spaces-to-tabs": { + "enabled": false, + "tabsize": 4 + }, + "empty-line-around-blockquotes": { + "enabled": true + }, + "empty-line-around-code-fences": { + "enabled": true + }, + "empty-line-around-math-blocks": { + "enabled": true + }, + "empty-line-around-tables": { + "enabled": true + }, + "heading-blank-lines": { + "enabled": true, + "bottom": true, + "empty-line-after-yaml": true + }, + "line-break-at-document-end": { + "enabled": true + }, + "move-math-block-indicators-to-their-own-line": { + "enabled": false + }, + "paragraph-blank-lines": { + "enabled": true + }, + "remove-empty-lines-between-list-markers-and-checklists": { + "enabled": false + }, + "remove-link-spacing": { + "enabled": false + }, + "remove-space-around-characters": { + "enabled": false, + "include-fullwidth-forms": true, + "include-cjk-symbols-and-punctuation": true, + "include-dashes": true, + "other-symbols": "" + }, + "remove-space-before-or-after-characters": { + "enabled": false, + "characters-to-remove-space-before": ",!?;:).’”]", + "characters-to-remove-space-after": "¿¡‘“([" + }, + "space-after-list-markers": { + "enabled": false + }, + "space-between-chinese-japanese-or-korean-and-english-or-numbers": { + "enabled": true + }, + "trailing-spaces": { + "enabled": true, + "twp-space-line-break": false + }, + "add-blockquote-indentation-on-paste": { + "enabled": false + }, + "prevent-double-checklist-indicator-on-paste": { + "enabled": false + }, + "prevent-double-list-item-indicator-on-paste": { + "enabled": false + }, + "proper-ellipsis-on-paste": { + "enabled": false + }, + "remove-hyphens-on-paste": { + "enabled": false + }, + "remove-leading-or-trailing-whitespace-on-paste": { + "enabled": false + }, + "remove-leftover-footnotes-from-quote-on-paste": { + "enabled": false + }, + "remove-multiple-blank-lines-on-paste": { + "enabled": false + } + }, + "lintOnSave": true, + "recordLintOnSaveLogs": false, + "displayChanged": true, + "lintOnFileChange": false, + "displayLintOnFileChangeNotice": false, + "settingsConvertedToConfigKeyValues": true, + "foldersToIgnore": [], + "linterLocale": "system-default", + "logLevel": "ERROR", + "lintCommands": [], + "customRegexes": [], + "commonStyles": { + "aliasArrayStyle": "multi-line", + "tagArrayStyle": "multi-line", + "minimumNumberOfDollarSignsToBeAMathBlock": 2, + "escapeCharacter": "\"", + "removeUnnecessaryEscapeCharsForMultiLineArrays": false + } +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-linter/main.js b/.obsidian/plugins/obsidian-linter/main.js new file mode 100644 index 00000000..adce9deb --- /dev/null +++ b/.obsidian/plugins/obsidian-linter/main.js @@ -0,0 +1,2657 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var Qp=Object.create;var Sn=Object.defineProperty;var Xl=Object.getOwnPropertyDescriptor;var Zp=Object.getOwnPropertyNames;var Jp=Object.getPrototypeOf,Xp=Object.prototype.hasOwnProperty;var ca=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ec=(e,t)=>{for(var i in t)Sn(e,i,{get:t[i],enumerable:!0})},ic=(e,t,i,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Zp(t))!Xp.call(e,r)&&r!==i&&Sn(e,r,{get:()=>t[r],enumerable:!(n=Xl(t,r))||n.enumerable});return e};var da=(e,t,i)=>(i=e!=null?Qp(Jp(e)):{},ic(t||!e||!e.__esModule?Sn(i,"default",{value:e,enumerable:!0}):i,e)),em=e=>ic(Sn({},"__esModule",{value:!0}),e),A=(e,t,i,n)=>{for(var r=n>1?void 0:n?Xl(t,i):t,a=e.length-1,s;a>=0;a--)(s=e[a])&&(r=(n?s(t,i,r):s(r))||r);return n&&r&&Sn(t,i,r),r};var tc=(e,t,i)=>{if(!t.has(e))throw TypeError("Cannot "+i)};var Ve=(e,t,i)=>(tc(e,t,"read from private field"),i?i.call(e):t.get(e)),Yt=(e,t,i)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,i)},nc=(e,t,i,n)=>(tc(e,t,"write to private field"),n?n.call(e,i):t.set(e,i),i);var xo=ca((Vc,ya)=>{(function(e,t){"use strict";typeof define=="function"&&define.amd?define(t):typeof ya=="object"&&ya.exports?ya.exports=t():e.log=t()})(Vc,function(){"use strict";var e=function(){},t="undefined",i=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"];function r(h,x){var b=h[x];if(typeof b.bind=="function")return b.bind(h);try{return Function.prototype.bind.call(b,h)}catch{return function(){return Function.prototype.apply.apply(b,[h,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(h){return h==="debug"&&(h="log"),typeof console===t?!1:h==="trace"&&i?a:console[h]!==void 0?r(console,h):console.log!==void 0?r(console,"log"):e}function o(h,x){for(var b=0;b=0&&q<=v.levels.SILENT){if(S=q,D!==!1&&M(q),o.call(v,q,h),typeof console===t&&q{var C=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},ee=-1,te=1,W=0;C.Diff=function(e,t){return[e,t]};C.prototype.diff_main=function(e,t,i,n){typeof n>"u"&&(this.Diff_Timeout<=0?n=Number.MAX_VALUE:n=new Date().getTime()+this.Diff_Timeout*1e3);var r=n;if(e==null||t==null)throw new Error("Null input. (diff_main)");if(e==t)return e?[new C.Diff(W,e)]:[];typeof i>"u"&&(i=!0);var a=i,s=this.diff_commonPrefix(e,t),o=e.substring(0,s);e=e.substring(s),t=t.substring(s),s=this.diff_commonSuffix(e,t);var l=e.substring(e.length-s);e=e.substring(0,e.length-s),t=t.substring(0,t.length-s);var d=this.diff_compute_(e,t,a,r);return o&&d.unshift(new C.Diff(W,o)),l&&d.push(new C.Diff(W,l)),this.diff_cleanupMerge(d),d};C.prototype.diff_compute_=function(e,t,i,n){var r;if(!e)return[new C.Diff(te,t)];if(!t)return[new C.Diff(ee,e)];var a=e.length>t.length?e:t,s=e.length>t.length?t:e,o=a.indexOf(s);if(o!=-1)return r=[new C.Diff(te,a.substring(0,o)),new C.Diff(W,s),new C.Diff(te,a.substring(o+s.length))],e.length>t.length&&(r[0][0]=r[2][0]=ee),r;if(s.length==1)return[new C.Diff(ee,e),new C.Diff(te,t)];var l=this.diff_halfMatch_(e,t);if(l){var d=l[0],c=l[1],u=l[2],m=l[3],g=l[4],h=this.diff_main(d,u,i,n),x=this.diff_main(c,m,i,n);return h.concat([new C.Diff(W,g)],x)}return i&&e.length>100&&t.length>100?this.diff_lineMode_(e,t,n):this.diff_bisect_(e,t,n)};C.prototype.diff_lineMode_=function(e,t,i){var n=this.diff_linesToChars_(e,t);e=n.chars1,t=n.chars2;var r=n.lineArray,a=this.diff_main(e,t,!1,i);this.diff_charsToLines_(a,r),this.diff_cleanupSemantic(a),a.push(new C.Diff(W,""));for(var s=0,o=0,l=0,d="",c="";s=1&&l>=1){a.splice(s-o-l,o+l),s=s-o-l;for(var u=this.diff_main(d,c,!1,i),m=u.length-1;m>=0;m--)a.splice(s,0,u[m]);s=s+u.length}l=0,o=0,d="",c="";break}s++}return a.pop(),a};C.prototype.diff_bisect_=function(e,t,i){for(var n=e.length,r=t.length,a=Math.ceil((n+r)/2),s=a,o=2*a,l=new Array(o),d=new Array(o),c=0;ci);v++){for(var S=-v+g;S<=v-h;S+=2){var L=s+S,M;S==-v||S!=v&&l[L-1]n)h+=2;else if(B>r)g+=2;else if(m){var T=s+u-S;if(T>=0&&T=_)return this.diff_bisectSplit_(e,t,M,B,i)}}}for(var q=-v+x;q<=v-b;q+=2){var T=s+q,_;q==-v||q!=v&&d[T-1]n)b+=2;else if(D>r)x+=2;else if(!m){var L=s+u-q;if(L>=0&&L=_)return this.diff_bisectSplit_(e,t,M,B,i)}}}}return[new C.Diff(ee,e),new C.Diff(te,t)]};C.prototype.diff_bisectSplit_=function(e,t,i,n,r){var a=e.substring(0,i),s=t.substring(0,n),o=e.substring(i),l=t.substring(n),d=this.diff_main(a,s,!1,r),c=this.diff_main(o,l,!1,r);return d.concat(c)};C.prototype.diff_linesToChars_=function(e,t){var i=[],n={};i[0]="";function r(l){for(var d="",c=0,u=-1,m=i.length;un?e=e.substring(i-n):it.length?e:t,n=e.length>t.length?t:e;if(i.length<4||n.length*2=h.length?[M,B,T,_,L]:null}var s=a(i,n,Math.ceil(i.length/4)),o=a(i,n,Math.ceil(i.length/2)),l;if(!s&&!o)return null;o?s?l=s[4].length>o[4].length?s:o:l=o:l=s;var d,c,u,m;e.length>t.length?(d=l[0],c=l[1],u=l[2],m=l[3]):(u=l[0],m=l[1],d=l[2],c=l[3]);var g=l[4];return[d,c,u,m,g]};C.prototype.diff_cleanupSemantic=function(e){for(var t=!1,i=[],n=0,r=null,a=0,s=0,o=0,l=0,d=0;a0?i[n-1]:-1,s=0,o=0,l=0,d=0,r=null,t=!0)),a++;for(t&&this.diff_cleanupMerge(e),this.diff_cleanupSemanticLossless(e),a=1;a=g?(m>=c.length/2||m>=u.length/2)&&(e.splice(a,0,new C.Diff(W,u.substring(0,m))),e[a-1][1]=c.substring(0,c.length-m),e[a+1][1]=u.substring(m),a++):(g>=c.length/2||g>=u.length/2)&&(e.splice(a,0,new C.Diff(W,c.substring(0,g))),e[a-1][0]=te,e[a-1][1]=u.substring(0,u.length-g),e[a+1][0]=ee,e[a+1][1]=c.substring(g),a++),a++}a++}};C.prototype.diff_cleanupSemanticLossless=function(e){function t(g,h){if(!g||!h)return 6;var x=g.charAt(g.length-1),b=h.charAt(0),v=x.match(C.nonAlphaNumericRegex_),S=b.match(C.nonAlphaNumericRegex_),L=v&&x.match(C.whitespaceRegex_),M=S&&b.match(C.whitespaceRegex_),B=L&&x.match(C.linebreakRegex_),T=M&&b.match(C.linebreakRegex_),_=B&&g.match(C.blanklineEndRegex_),q=T&&h.match(C.blanklineStartRegex_);return _||q?5:B||T?4:v&&!L&&M?3:L||M?2:v||S?1:0}for(var i=1;i=u&&(u=m,l=n,d=r,c=a)}e[i-1][1]!=l&&(l?e[i-1][1]=l:(e.splice(i-1,1),i--),e[i][1]=d,c?e[i+1][1]=c:(e.splice(i+1,1),i--))}i++}};C.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;C.whitespaceRegex_=/\s/;C.linebreakRegex_=/[\r\n]/;C.blanklineEndRegex_=/\n\r?\n$/;C.blanklineStartRegex_=/^\r?\n\r?\n/;C.prototype.diff_cleanupEfficiency=function(e){for(var t=!1,i=[],n=0,r=null,a=0,s=!1,o=!1,l=!1,d=!1;a0?i[n-1]:-1,l=d=!1),t=!0)),a++;t&&this.diff_cleanupMerge(e)};C.prototype.diff_cleanupMerge=function(e){e.push(new C.Diff(W,""));for(var t=0,i=0,n=0,r="",a="",s;t1?(i!==0&&n!==0&&(s=this.diff_commonPrefix(a,r),s!==0&&(t-i-n>0&&e[t-i-n-1][0]==W?e[t-i-n-1][1]+=a.substring(0,s):(e.splice(0,0,new C.Diff(W,a.substring(0,s))),t++),a=a.substring(s),r=r.substring(s)),s=this.diff_commonSuffix(a,r),s!==0&&(e[t][1]=a.substring(a.length-s)+e[t][1],a=a.substring(0,a.length-s),r=r.substring(0,r.length-s))),t-=i+n,e.splice(t,i+n),r.length&&(e.splice(t,0,new C.Diff(ee,r)),t++),a.length&&(e.splice(t,0,new C.Diff(te,a)),t++),t++):t!==0&&e[t-1][0]==W?(e[t-1][1]+=e[t][1],e.splice(t,1)):t++,n=0,i=0,r="",a="";break}e[e.length-1][1]===""&&e.pop();var o=!1;for(t=1;tt));s++)r=i,a=n;return e.length!=s&&e[s][0]===ee?a:a+(t-r)};C.prototype.diff_prettyHtml=function(e){for(var t=[],i=/&/g,n=//g,a=/\n/g,s=0;s");switch(o){case te:t[s]=''+d+"";break;case ee:t[s]=''+d+"";break;case W:t[s]=""+d+"";break}}return t.join("")};C.prototype.diff_text1=function(e){for(var t=[],i=0;ithis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var n=this.match_alphabet_(t),r=this;function a(M,B){var T=M/t.length,_=Math.abs(i-B);return r.Match_Distance?T+_/r.Match_Distance:_?1:T}var s=this.Match_Threshold,o=e.indexOf(t,i);o!=-1&&(s=Math.min(a(0,o),s),o=e.lastIndexOf(t,i+t.length),o!=-1&&(s=Math.min(a(0,o),s)));var l=1<=h;v--){var S=n[e.charAt(v-1)];if(g===0?b[v]=(b[v+1]<<1|1)&S:b[v]=(b[v+1]<<1|1)&S|((m[v+1]|m[v])<<1|1)|m[v+1],b[v]&l){var L=a(g,v-1);if(L<=s)if(s=L,o=v-1,o>i)h=Math.max(1,2*i-o);else break}}if(a(g+1,i)>s)break;m=b}return o};C.prototype.match_alphabet_=function(e){for(var t={},i=0;i"u")n=e,r=this.diff_main(n,t,!0),r.length>2&&(this.diff_cleanupSemantic(r),this.diff_cleanupEfficiency(r));else if(e&&typeof e=="object"&&typeof t>"u"&&typeof i>"u")r=e,n=this.diff_text1(r);else if(typeof e=="string"&&t&&typeof t=="object"&&typeof i>"u")n=e,r=t;else if(typeof e=="string"&&typeof t=="string"&&i&&typeof i=="object")n=e,r=i;else throw new Error("Unknown call format to patch_make.");if(r.length===0)return[];for(var a=[],s=new C.patch_obj,o=0,l=0,d=0,c=n,u=n,m=0;m=2*this.Patch_Margin&&o&&(this.patch_addContext_(s,c),a.push(s),s=new C.patch_obj,o=0,c=u,l=d);break}g!==te&&(l+=h.length),g!==ee&&(d+=h.length)}return o&&(this.patch_addContext_(s,c),a.push(s)),a};C.prototype.patch_deepCopy=function(e){for(var t=[],i=0;ithis.Match_MaxBits?(l=this.match_main(t,o.substring(0,this.Match_MaxBits),s),l!=-1&&(d=this.match_main(t,o.substring(o.length-this.Match_MaxBits),s+o.length-this.Match_MaxBits),(d==-1||l>=d)&&(l=-1))):l=this.match_main(t,o,s),l==-1)r[a]=!1,n-=e[a].length2-e[a].length1;else{r[a]=!0,n=l-s;var c;if(d==-1?c=t.substring(l,l+o.length):c=t.substring(l,d+this.Match_MaxBits),o==c)t=t.substring(0,l)+this.diff_text2(e[a].diffs)+t.substring(l+o.length);else{var u=this.diff_main(o,c,!1);if(o.length>this.Match_MaxBits&&this.diff_levenshtein(u)/o.length>this.Patch_DeleteThreshold)r[a]=!1;else{this.diff_cleanupSemanticLossless(u);for(var m=0,g,h=0;ha[0][1].length){var s=t-a[0][1].length;a[0][1]=i.substring(a[0][1].length)+a[0][1],r.start1-=s,r.start2-=s,r.length1+=s,r.length2+=s}if(r=e[e.length-1],a=r.diffs,a.length==0||a[a.length-1][0]!=W)a.push(new C.Diff(W,i)),r.length1+=t,r.length2+=t;else if(t>a[a.length-1][1].length){var s=t-a[a.length-1][1].length;a[a.length-1][1]+=i.substring(0,s),r.length1+=s,r.length2+=s}return i};C.prototype.patch_splitMax=function(e){for(var t=this.Match_MaxBits,i=0;i2*t?(o.length1+=c.length,r+=c.length,l=!1,o.diffs.push(new C.Diff(d,c)),n.diffs.shift()):(c=c.substring(0,t-o.length1-this.Patch_Margin),o.length1+=c.length,r+=c.length,d===W?(o.length2+=c.length,a+=c.length):l=!1,o.diffs.push(new C.Diff(d,c)),c==n.diffs[0][1]?n.diffs.shift():n.diffs[0][1]=n.diffs[0][1].substring(c.length))}s=this.diff_text2(o.diffs),s=s.substring(s.length-this.Patch_Margin);var u=this.diff_text1(n.diffs).substring(0,this.Patch_Margin);u!==""&&(o.length1+=u.length,o.length2+=u.length,o.diffs.length!==0&&o.diffs[o.diffs.length-1][0]===W?o.diffs[o.diffs.length-1][1]+=u:o.diffs.push(new C.Diff(W,u))),l||e.splice(++i,0,o)}}};C.prototype.patch_toText=function(e){for(var t=[],i=0;i{cp.exports=rx;var ev=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],iv=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],tv=["Su","Mo","Tu","We","Th","Fr","Sa"],Cs=["January","February","March","April","May","June","July","August","September","October","November","December"],nv=["ACDT","ACST","ACWT","ADT","ACT","AEDT","AEST","AFT","AKDT","AKST","ALMT","AMT","AMST","ANAT","ANAST","AQTT","ART","AST","AWDT","AWST","AZOT","AZOST","AZT","AZST","BNT","BDT","BOT","BRT","BRST","BST","BTT","B","CAST","CAT","CCT","CDT","CEDT","CEST","CET","CHADT","CHAST","CHOT","CHOST","CHsT","CHUT","CIT","CKT","CLST","CLT","COT","CST","CVT","CWST","CXT","C","DAVT","DDUT","DST","EASST","EAST","EAT","ECT","EDT","EEDT","EEST","EET","EGT","EGST","EST","E","EIT","FET","FJT","FJST","FKST","FKT","FNT","F","GALT","GAMT","GET","GFT","GILT","GMT","GST","GYT","G","HADT","HAST","HKT","HOVT","HOVST","HST","ICT","IDT","IOT","IRDT","IRKT","IRKST","IRST","IST","JST","KGT","KOST","KRAT","KRAST","KST","KUYT","LHDT","LHST","LINT","L","MAGT","MAGST","MART","MAWT","MDT","MeST","MHT","MIST","MMT","MSD","MSK","MST","MUT","MVT","MYT","NCT","NDT","NFT","N","NOVT","NOVST","NPT","NRT","NST","NT","NUT","NZDT","NZST","OMST","OMSST","ORAT","O","PDT","PET","PETT","PETST","PGT","PHT","PHOT","PKT","PMDT","PMST","PONT","PST","PWT","PYT","PYST","P","QYZT","RET","ROTT","R","SAKT","SAMT","SAST","SBT","SCT","SGT","SRT","SLT","SLST","SRET","SST","SYOT","TAHT","TFT","TJT","TKT","TLT","TMT","TOT","TRUT","TVT","T","ULAT","ULAST","UTC","UYST","UYT","UZT","U","VET","VLAT","VLAST","VOLT","VUT","V","WAKT","WAT","WAST","WDT","WEDT","WEST","WET","WFT","WGT","WGST","WIB","WIT","WITA","WST","WT","YAKT","YAKST","YAP","YEK","YEKS"],Ms=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],rv=new RegExp(ev.join("|"),"i"),av=new RegExp(iv.join("|"),"i"),sv=new RegExp("\\b("+tv.join("|")+")\\b","i"),ov=new RegExp(Cs.join("|"),"i"),lv=new RegExp(Ms.join("|"),"i"),cv=new RegExp("\\b("+nv.join("|")+")\\b","i"),dv=/(\d+)(st|nd|rd|th)\b/i,uv=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,pv=/((\+|-)(12:00|11:00|10:00|09:30|09:00|08:00|07:00|06:00|05:00|04:00|03:30|03:00|02:00|01:00|00:00|01:00|02:00|03:00|03:30|04:00|04:30|05:00|05:30|05:45|06:00|06:30|07:00|08:00|08:45|09:00|09:30|10:00|10:30|11:00|12:00|12:45|13:00|14:00))$/,mv=/((\+|-)(1200|1100|1000|0930|0900|0800|0700|0600|0500|0400|0330|0300|0200|0100|0000|0100|0200|0300|0330|0400|0430|0500|0530|0545|0600|0630|0700|0800|0845|0900|0930|1000|1030|1100|1200|1245|1300|1400))$/,cn="("+["AM?","PM?"].join("|")+")",gv=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+cn,"i"),hv=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+cn,"i"),fv=new RegExp("0\\d(\\s*)"+cn,"i"),yv=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+cn,"i"),bv=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+cn,"i"),vv=new RegExp("\\d{1,2}(\\s*)"+cn,"i"),xv=new RegExp("\\d{1,2}"),wv=new RegExp(Cs.join("|")+"-\\d{2}","i"),kv=new RegExp(Ms.join("|")+"-\\d{2}","i"),Bl=new RegExp("(\\d{1,2})(\\D+)("+Cs.join("|")+"|"+Ms.join("|")+")(\\2)('?\\d{2,4})"),zv=/\d{2}:\d{2}:\d{2}\.\d{3}/,Sv=/\d{2}:\d{2}:\d{2}\.\d{2}/,Av=/\d{2}:\d{2}:\d{2}\.\d{1}/,Tv=/T\d{2}:\d{2}:\d{2}/,Lv=/0\d:\d{2}:\d{2}/,Ev=/0\d:\d{2}/,Ov=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}/,Cv=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}\.\d{3}/,Mv=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}\.\d{2}/,qv=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}\.\d{1}/,Iv=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]/,Bv=/24:00:\d{2}/,Fv=/24:00:\d{2}\.\d{3}/,_v=/24:00:\d{2}\.\d{2}/,Rv=/24:00:\d{2}\.\d{1}/,Dv=/24:00/,Nv=/\d{4}/,jv=/\d{2}/,Kv=/'\d{2}/,rp=/0\d/,ap=/\d{1,2}/,Yv=/0\d/,Pv=/\d{1,2}/,Hv=/^([1-9])\/([1-9]|0[1-9])$/,$v=/^([1-9])\/(1[012])$/,Wv=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,Vv=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,Uv=/^([1-9])(\D)([1-9][0-9])$/,Gv=/^([1-9])(\D)([0][0-9])$/,Qv=/^(0[1-9]|1[012])(\D)([1-9][0-9])$/,Zv=/^(0[1-9]|1[012])(\D)([0][0-9])$/,Fl=/([/][M]|[M][/]|[MM]|[MMMM])/,sp=/(D)/,_l=/(Y)/,op=/\d+\D.+$/,lp=/\D+(\d+)($|Z)/,Jv=/M\s*\d{1,2}\b.+$/,Xv=/M\D+(0[1-9])\b.+$/,Os=/\d+\s+(H|h|k)/,ex=/\b(at)\b/i,ix=/\d{13}/,tx=/\d{10}/,nx={"/":"MDY",".":"DMY","-":"YMD"};function rx(e,t){var i=e.toString();if(t=t||{},t.preferredOrder=t.preferredOrder||nx,i=i.replace(ix,"x"),i=i.replace(tx,"X"),i=i.replace(ex,"[$1]"),i.match(Bl)){let[,d,c,u,m,g]=i.match(Bl),h=[];d.length===2&&d[0]==="0"||t.preferLongFormat?h.push("DD"):h.push("D"),h.push(c),u.match(Cs)?h.push("MMMM"):u.match(Ms)?h.push("MMM"):h.push(u),h.push(m),g[0]==="'"?h.push("'YY"):g.length===2?h.push("YY"):(g.length,h.push("YYYY"));var n=h.join("");i=i.replace(Bl,n)}i=i.replace(rv,"dddd"),i=i.replace(av,"ddd"),i=i.replace(sv,"dd"),i=i.replace(dv,"Do"),i=i.replace(ov,"MMMM"),i=i.replace(lv,"MMM"),i=i.replace(uv,ax.bind(null,t)),i=i.replace(cv,d=>"["+d+"]"),i=i.replace(pv,"Z"),i=i.replace(mv,"ZZ"),i=i.replace(zv,"HH:mm:ss.SSS"),i=i.replace(Sv,"HH:mm:ss.SS"),i=i.replace(Av,"HH:mm:ss.S"),i=i.replace(Tv,"THH:mm:ss");function r(d){return function(c,u,m){return d+u+(m[0].toUpperCase()===m[0]?"A":"a")}}if(i=i.replace(gv,r("hh:mm:ss")),i=i.replace(yv,r("h:mm:ss")),i=i.replace(hv,r("hh:mm")),i=i.replace(bv,r("h:mm")),i=i.replace(fv,r("hh")),i=i.replace(vv,r("h")),i=i.replace(Lv,"HH:mm:ss"),i=i.replace(Cv,"H:mm:ss.SSS"),i=i.replace(Fv,(t.preferLongFormat?"kk":"k")+":mm:ss.SSS"),i=i.replace(Mv,"H:mm:ss.SS"),i=i.replace(_v,(t.preferLongFormat?"kk":"k")+":mm:ss.SS"),i=i.replace(qv,"H:mm:ss.S"),i=i.replace(Rv,(t.preferLongFormat?"kk":"k")+":mm:ss.S"),i=i.replace(Ov,"H:mm:ss"),i=i.replace(Bv,(t.preferLongFormat?"kk":"k")+":mm:ss"),i=i.replace(Ev,"HH:mm"),i=i.replace(Iv,"H:mm"),i=i.replace(Dv,(t.preferLongFormat?"kk":"k")+":mm"),i=i.replace(Nv,"YYYY"),i=i.replace(Kv,"'YY"),i=i.replace(wv,"MMMM-YY"),i=i.replace(kv,"MMM-YY"),i=i.replace(Hv,"D/M"),i=i.replace($v,"D/MM"),i=i.replace(Wv,"DD/M"),i=i.replace(Vv,"DD/MM"),i=i.replace(Uv,"M$2YY"),i=i.replace(Qv,"MM$2YY"),i=i.replace(Gv,"M$2DD"),i=i.replace(Zv,"MM$2DD"),i.match(Fl)){var a=/0\d\.\d{2}|\d{2}\.\d{2}/,s=/\d{1}\.\d{2}/;i=i.replace(a,"H.mm"),i=i.replace(s,"h.mm")}if(!i.match(Fl)&&i.match(_l)&&(i=i.replace(Yv,"MM")),!i.match(Fl)&&i.match(_l)&&(i=i.replace(Pv,t.preferLongFormat?"MM":"M")),i.match(Xv)&&!i.match(Os)&&(i=i.replace(rp,"DD")),i.match(Jv)&&!i.match(Os)&&(i=i.replace(ap,t.preferLongFormat?"DD":"D")),!i.match(sp)&&i.match(op)&&!i.match(Os)&&(i=i.replace(rp,"DD")),!i.match(sp)&&i.match(op)&&!i.match(Os)&&(i=i.replace(ap,t.preferLongFormat?"DD":"D")),i.match(_l)||(i=i.replace(jv,"YY")),i.match(lp)){var o=i.match(lp)[1],l;o==="00"?l="HH":o==="24"?l=t.preferLongFormat?"kk":"k":o>12?l=t.preferLongFormat?"HH":"H":o[0]==="0"?l=t.preferLongFormat?"hh":"h":l=t.preferLongFormat?"hh":"k",i=i.replace(xv,l)}return i.length<1&&(i=void 0),i}function ax(e,t,i,n,r,a){var s,o=0,l=1,d=2,c=[i.length===1,r.length===1,a.length===1],u=[i[0]==="0",r[0]==="0",a[0]==="0"],m=i.length===4,g=r.length===4,h=a.length===4,x=typeof e.preferredOrder=="string"?e.preferredOrder:e.preferredOrder[n];i=parseInt(i,10),r=parseInt(r,10),a=parseInt(a,10),s=[i,r,a],x=x.toUpperCase();var b=function(S,L){c[S]!==c[L]&&!u[S]&&!u[L]&&(c[S]=!0,c[L]=!0)};if(i>31)return b(l,d),s[0]=m?"YYYY":"YY",s[1]=c[l]?"M":"MM",s[2]=c[d]?"D":"DD",s.join(n);if(i>12)return b(o,l),s[0]=c[o]?"D":"DD",s[1]=c[l]?"M":"MM",s[2]=h?"YYYY":"YY",s.join(n);if(r>12)return b(o,l),s[0]=c[o]?"M":"MM",s[1]=c[l]?"D":"DD",s[2]=h?"YYYY":"YY",s.join(n);if(a>31)return s[2]=h?"YYYY":"YY",x[0]==="M"&&i<13?(b(o,l),s[0]=c[o]?"M":"MM",s[1]=c[l]?"D":"DD",s.join(n)):(b(o,l),s[0]=c[o]?"D":"DD",s[1]=c[l]?"M":"MM",s.join(n));let v=[m,g,h];return b(x.indexOf("D"),x.indexOf("M")),s[x.indexOf("D")]=c[x.indexOf("D")]?"D":"DD",s[x.indexOf("M")]=c[x.indexOf("M")]?"M":"MM",s[x.indexOf("Y")]=v[x.indexOf("Y")]?"YYYY":"YY",s.join(n)}});var mp=ca((JI,pp)=>{var up=dp();pp.exports=up;typeof window<"u"&&window.moment&&(window.moment.parseFormat=up)});var uw={};ec(uw,{default:()=>Js});module.exports=em(uw);var oe=require("obsidian");function vc(e){return typeof e>"u"||e===null}function im(e){return typeof e=="object"&&e!==null}function tm(e){return Array.isArray(e)?e:vc(e)?[]:[e]}function nm(e,t){var i,n,r,a;if(t)for(a=Object.keys(t),i=0,n=a.length;io&&(a=" ... ",t=n-o+a.length),i-n>o&&(s=" ...",i=n+o-s.length),{str:a+e.slice(t,i).replace(/\t/g,"\u2192")+s,pos:n-t+a.length}}function ro(e,t){return xe.repeat(" ",t-e.length)+e}function pm(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var i=/\r?\n|\r|\0/g,n=[0],r=[],a,s=-1;a=i.exec(e.buffer);)r.push(a.index),n.push(a.index+a[0].length),e.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var o="",l,d,c=Math.min(e.line+t.linesAfter,r.length).toString().length,u=t.maxLength-(t.indent+c+3);for(l=1;l<=t.linesBefore&&!(s-l<0);l++)d=no(e.buffer,n[s-l],r[s-l],e.position-(n[s]-n[s-l]),u),o=xe.repeat(" ",t.indent)+ro((e.line-l+1).toString(),c)+" | "+d.str+` +`+o;for(d=no(e.buffer,n[s],r[s],e.position,u),o+=xe.repeat(" ",t.indent)+ro((e.line+1).toString(),c)+" | "+d.str+` +`,o+=xe.repeat("-",t.indent+c+3+d.pos)+`^ +`,l=1;l<=t.linesAfter&&!(s+l>=r.length);l++)d=no(e.buffer,n[s+l],r[s+l],e.position-(n[s]-n[s+l]),u),o+=xe.repeat(" ",t.indent)+ro((e.line+l+1).toString(),c)+" | "+d.str+` +`;return o.replace(/\n$/,"")}var mm=pm,gm=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],hm=["scalar","sequence","mapping"];function fm(e){var t={};return e!==null&&Object.keys(e).forEach(function(i){e[i].forEach(function(n){t[String(n)]=i})}),t}function ym(e,t){if(t=t||{},Object.keys(t).forEach(function(i){if(gm.indexOf(i)===-1)throw new De('Unknown option "'+i+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(i){return i},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=fm(t.styleAliases||null),hm.indexOf(this.kind)===-1)throw new De('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var qe=ym;function rc(e,t){var i=[];return e[t].forEach(function(n){var r=i.length;i.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(r=s)}),i[r]=n}),i}function bm(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,i;function n(r){r.multi?(e.multi[r.kind].push(r),e.multi.fallback.push(r)):e[r.kind][r.tag]=e.fallback[r.tag]=r}for(t=0,i=arguments.length;t=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Nm=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function jm(e){return!(e===null||!Nm.test(e)||e[e.length-1]==="_")}function Km(e){var t,i;return t=e.replace(/_/g,"").toLowerCase(),i=t[0]==="-"?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),t===".inf"?i===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:t===".nan"?NaN:i*parseFloat(t,10)}var Ym=/^[-+]?[0-9]+e/;function Pm(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(xe.isNegativeZero(e))return"-0.0";return i=e.toString(10),Ym.test(i)?i.replace("e",".e"):i}function Hm(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||xe.isNegativeZero(e))}var $m=new qe("tag:yaml.org,2002:float",{kind:"scalar",resolve:jm,construct:Km,predicate:Hm,represent:Pm,defaultStyle:"lowercase"}),Wm=zm.extend({implicit:[Lm,Mm,Dm,$m]}),Vm=Wm,wc=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),kc=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function Um(e){return e===null?!1:wc.exec(e)!==null||kc.exec(e)!==null}function Gm(e){var t,i,n,r,a,s,o,l=0,d=null,c,u,m;if(t=wc.exec(e),t===null&&(t=kc.exec(e)),t===null)throw new Error("Date resolve error");if(i=+t[1],n=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(i,n,r));if(a=+t[4],s=+t[5],o=+t[6],t[7]){for(l=t[7].slice(0,3);l.length<3;)l+="0";l=+l}return t[9]&&(c=+t[10],u=+(t[11]||0),d=(c*60+u)*6e4,t[9]==="-"&&(d=-d)),m=new Date(Date.UTC(i,n,r,a,s,o,l)),d&&m.setTime(m.getTime()-d),m}function Qm(e){return e.toISOString()}var Zm=new qe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:Um,construct:Gm,instanceOf:Date,represent:Qm});function Jm(e){return e==="<<"||e===null}var Xm=new qe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Jm}),po=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function eg(e){if(e===null)return!1;var t,i,n=0,r=e.length,a=po;for(i=0;i64)){if(t<0)return!1;n+=6}return n%8===0}function ig(e){var t,i,n=e.replace(/[\r\n=]/g,""),r=n.length,a=po,s=0,o=[];for(t=0;t>16&255),o.push(s>>8&255),o.push(s&255)),s=s<<6|a.indexOf(n.charAt(t));return i=r%4*6,i===0?(o.push(s>>16&255),o.push(s>>8&255),o.push(s&255)):i===18?(o.push(s>>10&255),o.push(s>>2&255)):i===12&&o.push(s>>4&255),new Uint8Array(o)}function tg(e){var t="",i=0,n,r,a=e.length,s=po;for(n=0;n>18&63],t+=s[i>>12&63],t+=s[i>>6&63],t+=s[i&63]),i=(i<<8)+e[n];return r=a%3,r===0?(t+=s[i>>18&63],t+=s[i>>12&63],t+=s[i>>6&63],t+=s[i&63]):r===2?(t+=s[i>>10&63],t+=s[i>>4&63],t+=s[i<<2&63],t+=s[64]):r===1&&(t+=s[i>>2&63],t+=s[i<<4&63],t+=s[64],t+=s[64]),t}function ng(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var rg=new qe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:eg,construct:ig,predicate:ng,represent:tg}),ag=Object.prototype.hasOwnProperty,sg=Object.prototype.toString;function og(e){if(e===null)return!0;var t=[],i,n,r,a,s,o=e;for(i=0,n=o.length;i>10)+55296,(e-65536&1023)+56320)}var Ec=new Array(256),Oc=new Array(256);for(tt=0;tt<256;tt++)Ec[tt]=oc(tt)?1:0,Oc[tt]=oc(tt);var tt;function Tg(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||zc,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Cc(e,t){var i={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return i.snippet=mm(i),new De(t,i)}function K(e,t){throw Cc(e,t)}function ma(e,t){e.onWarning&&e.onWarning.call(null,Cc(e,t))}var lc={YAML:function(t,i,n){var r,a,s;t.version!==null&&K(t,"duplication of %YAML directive"),n.length!==1&&K(t,"YAML directive accepts exactly one argument"),r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),r===null&&K(t,"ill-formed argument of the YAML directive"),a=parseInt(r[1],10),s=parseInt(r[2],10),a!==1&&K(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=s<2,s!==1&&s!==2&&ma(t,"unsupported YAML version of the document")},TAG:function(t,i,n){var r,a;n.length!==2&&K(t,"TAG directive accepts exactly two arguments"),r=n[0],a=n[1],Tc.test(r)||K(t,"ill-formed tag handle (first argument) of the TAG directive"),Ni.call(t.tagMap,r)&&K(t,'there is a previously declared suffix for "'+r+'" tag handle'),Lc.test(a)||K(t,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{K(t,"tag prefix is malformed: "+a)}t.tagMap[r]=a}};function Di(e,t,i,n){var r,a,s,o;if(t1&&(e.result+=xe.repeat(` +`,t-1))}function Lg(e,t,i){var n,r,a,s,o,l,d,c,u=e.kind,m=e.result,g;if(g=e.input.charCodeAt(e.position),$e(g)||Ht(g)||g===35||g===38||g===42||g===33||g===124||g===62||g===39||g===34||g===37||g===64||g===96||(g===63||g===45)&&(r=e.input.charCodeAt(e.position+1),$e(r)||i&&Ht(r)))return!1;for(e.kind="scalar",e.result="",a=s=e.position,o=!1;g!==0;){if(g===58){if(r=e.input.charCodeAt(e.position+1),$e(r)||i&&Ht(r))break}else if(g===35){if(n=e.input.charCodeAt(e.position-1),$e(n))break}else{if(e.position===e.lineStart&&fa(e)||i&&Ht(g))break;if(fi(g))if(l=e.line,d=e.lineStart,c=e.lineIndent,fe(e,!1,-1),e.lineIndent>=t){o=!0,g=e.input.charCodeAt(e.position);continue}else{e.position=s,e.line=l,e.lineStart=d,e.lineIndent=c;break}}o&&(Di(e,a,s,!1),go(e,e.line-l),a=s=e.position,o=!1),nt(g)||(s=e.position+1),g=e.input.charCodeAt(++e.position)}return Di(e,a,s,!1),e.result?!0:(e.kind=u,e.result=m,!1)}function Eg(e,t){var i,n,r;if(i=e.input.charCodeAt(e.position),i!==39)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;(i=e.input.charCodeAt(e.position))!==0;)if(i===39)if(Di(e,n,e.position,!0),i=e.input.charCodeAt(++e.position),i===39)n=e.position,e.position++,r=e.position;else return!0;else fi(i)?(Di(e,n,r,!0),go(e,fe(e,!1,t)),n=r=e.position):e.position===e.lineStart&&fa(e)?K(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);K(e,"unexpected end of the stream within a single quoted scalar")}function Og(e,t){var i,n,r,a,s,o;if(o=e.input.charCodeAt(e.position),o!==34)return!1;for(e.kind="scalar",e.result="",e.position++,i=n=e.position;(o=e.input.charCodeAt(e.position))!==0;){if(o===34)return Di(e,i,e.position,!0),e.position++,!0;if(o===92){if(Di(e,i,e.position,!0),o=e.input.charCodeAt(++e.position),fi(o))fe(e,!1,t);else if(o<256&&Ec[o])e.result+=Oc[o],e.position++;else if((s=zg(o))>0){for(r=s,a=0;r>0;r--)o=e.input.charCodeAt(++e.position),(s=kg(o))>=0?a=(a<<4)+s:K(e,"expected hexadecimal character");e.result+=Ag(a),e.position++}else K(e,"unknown escape sequence");i=n=e.position}else fi(o)?(Di(e,i,n,!0),go(e,fe(e,!1,t)),i=n=e.position):e.position===e.lineStart&&fa(e)?K(e,"unexpected end of the document within a double quoted scalar"):(e.position++,n=e.position)}K(e,"unexpected end of the stream within a double quoted scalar")}function Cg(e,t){var i=!0,n,r,a,s=e.tag,o,l=e.anchor,d,c,u,m,g,h=Object.create(null),x,b,v,S;if(S=e.input.charCodeAt(e.position),S===91)c=93,g=!1,o=[];else if(S===123)c=125,g=!0,o={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=o),S=e.input.charCodeAt(++e.position);S!==0;){if(fe(e,!0,t),S=e.input.charCodeAt(e.position),S===c)return e.position++,e.tag=s,e.anchor=l,e.kind=g?"mapping":"sequence",e.result=o,!0;i?S===44&&K(e,"expected the node content, but found ','"):K(e,"missed comma between flow collection entries"),b=x=v=null,u=m=!1,S===63&&(d=e.input.charCodeAt(e.position+1),$e(d)&&(u=m=!0,e.position++,fe(e,!0,t))),n=e.line,r=e.lineStart,a=e.position,Wt(e,t,ua,!1,!0),b=e.tag,x=e.result,fe(e,!0,t),S=e.input.charCodeAt(e.position),(m||e.line===n)&&S===58&&(u=!0,S=e.input.charCodeAt(++e.position),fe(e,!0,t),Wt(e,t,ua,!1,!0),v=e.result),g?$t(e,o,h,b,x,v,n,r,a):u?o.push($t(e,null,h,b,x,v,n,r,a)):o.push(x),fe(e,!0,t),S=e.input.charCodeAt(e.position),S===44?(i=!0,S=e.input.charCodeAt(++e.position)):i=!1}K(e,"unexpected end of the stream within a flow collection")}function Mg(e,t){var i,n,r=ao,a=!1,s=!1,o=t,l=0,d=!1,c,u;if(u=e.input.charCodeAt(e.position),u===124)n=!1;else if(u===62)n=!0;else return!1;for(e.kind="scalar",e.result="";u!==0;)if(u=e.input.charCodeAt(++e.position),u===43||u===45)ao===r?r=u===43?ac:bg:K(e,"repeat of a chomping mode identifier");else if((c=Sg(u))>=0)c===0?K(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?K(e,"repeat of an indentation width identifier"):(o=t+c-1,s=!0);else break;if(nt(u)){do u=e.input.charCodeAt(++e.position);while(nt(u));if(u===35)do u=e.input.charCodeAt(++e.position);while(!fi(u)&&u!==0)}for(;u!==0;){for(mo(e),e.lineIndent=0,u=e.input.charCodeAt(e.position);(!s||e.lineIndento&&(o=e.lineIndent),fi(u)){l++;continue}if(e.lineIndentt)&&l!==0)K(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(b&&(s=e.line,o=e.lineStart,l=e.position),Wt(e,t,pa,!0,r)&&(b?h=e.result:x=e.result),b||($t(e,u,m,g,h,x,s,o,l),g=h=x=null),fe(e,!0,-1),S=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>t)&&S!==0)K(e,"bad indentation of a mapping entry");else if(e.lineIndentt?l=1:e.lineIndent===t?l=0:e.lineIndentt?l=1:e.lineIndent===t?l=0:e.lineIndent tag; it should be "scalar", not "'+e.kind+'"'),u=0,m=e.implicitTypes.length;u"),e.result!==null&&h.kind!==e.kind&&K(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+h.kind+'", not "'+e.kind+'"'),h.resolve(e.result,e.tag)?(e.result=h.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):K(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||c}function _g(e){var t=e.position,i,n,r,a=!1,s;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(s=e.input.charCodeAt(e.position))!==0&&(fe(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||s!==37));){for(a=!0,s=e.input.charCodeAt(++e.position),i=e.position;s!==0&&!$e(s);)s=e.input.charCodeAt(++e.position);for(n=e.input.slice(i,e.position),r=[],n.length<1&&K(e,"directive name must not be less than one character in length");s!==0;){for(;nt(s);)s=e.input.charCodeAt(++e.position);if(s===35){do s=e.input.charCodeAt(++e.position);while(s!==0&&!fi(s));break}if(fi(s))break;for(i=e.position;s!==0&&!$e(s);)s=e.input.charCodeAt(++e.position);r.push(e.input.slice(i,e.position))}s!==0&&mo(e),Ni.call(lc,n)?lc[n](e,n,r):ma(e,'unknown document directive "'+n+'"')}if(fe(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,fe(e,!0,-1)):a&&K(e,"directives end mark is expected"),Wt(e,e.lineIndent-1,pa,!1,!0),fe(e,!0,-1),e.checkLineBreaks&&xg.test(e.input.slice(t,e.position))&&ma(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&fa(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,fe(e,!0,-1));return}if(e.position"u"&&(i=t,t=null);var n=Mc(e,i);if(typeof t!="function")return n;for(var r=0,a=n.length;r=55296&&i<=56319&&t+1=56320&&n<=57343)?(i-55296)*1024+n-56320+65536:i}function jc(e){var t=/^\n* /;return t.test(e)}var Kc=1,co=2,Yc=3,Pc=4,Pt=5;function ph(e,t,i,n,r,a,s,o){var l,d=0,c=null,u=!1,m=!1,g=n!==-1,h=-1,x=dh(An(e,0))&&uh(An(e,e.length-1));if(t||s)for(l=0;l=65536?l+=2:l++){if(d=An(e,l),!On(d))return Pt;x=x&&mc(d,c,o),c=d}else{for(l=0;l=65536?l+=2:l++){if(d=An(e,l),d===Ln)u=!0,g&&(m=m||l-h-1>n&&e[h+1]!==" ",h=l);else if(!On(d))return Pt;x=x&&mc(d,c,o),c=d}m=m||g&&l-h-1>n&&e[h+1]!==" "}return!u&&!m?x&&!s&&!r(e)?Kc:a===En?Pt:co:i>9&&jc(e)?Pt:s?a===En?Pt:co:m?Pc:Yc}function mh(e,t,i,n,r){e.dump=function(){if(t.length===0)return e.quotingType===En?'""':"''";if(!e.noCompatMode&&(nh.indexOf(t)!==-1||rh.test(t)))return e.quotingType===En?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,i),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),o=n||e.flowLevel>-1&&i>=e.flowLevel;function l(d){return ch(e,d)}switch(ph(t,o,e.indent,s,l,e.quotingType,e.forceQuotes&&!n,r)){case Kc:return t;case co:return"'"+t.replace(/'/g,"''")+"'";case Yc:return"|"+gc(t,e.indent)+hc(uc(t,a));case Pc:return">"+gc(t,e.indent)+hc(uc(gh(t,s),a));case Pt:return'"'+hh(t)+'"';default:throw new De("impossible error: invalid scalar style")}}()}function gc(e,t){var i=jc(e)?String(t):"",n=e[e.length-1]===` +`,r=n&&(e[e.length-2]===` +`||e===` +`),a=r?"+":n?"":"-";return i+a+` +`}function hc(e){return e[e.length-1]===` +`?e.slice(0,-1):e}function gh(e,t){for(var i=/(\n+)([^\n]*)/g,n=function(){var d=e.indexOf(` +`);return d=d!==-1?d:e.length,i.lastIndex=d,fc(e.slice(0,d),t)}(),r=e[0]===` +`||e[0]===" ",a,s;s=i.exec(e);){var o=s[1],l=s[2];a=l[0]===" ",n+=o+(!r&&!a&&l!==""?` +`:"")+fc(l,t),r=a}return n}function fc(e,t){if(e===""||e[0]===" ")return e;for(var i=/ [^ ]/g,n,r=0,a,s=0,o=0,l="";n=i.exec(e);)o=n.index,o-r>t&&(a=s>r?s:o,l+=` +`+e.slice(r,a),r=a+1),s=o;return l+=` +`,e.length-r>t&&s>r?l+=e.slice(r,s)+` +`+e.slice(s+1):l+=e.slice(r),l.slice(1)}function hh(e){for(var t="",i=0,n,r=0;r=65536?r+=2:r++)i=An(e,r),n=Ie[i],!n&&On(i)?(t+=e[r],i>=65536&&(t+=e[r+1])):t+=n||sh(i);return t}function fh(e,t,i){var n="",r=e.tag,a,s,o;for(a=0,s=i.length;a"u"&&Ci(e,t,null,!1,!1))&&(n!==""&&(n+=","+(e.condenseFlow?"":" ")),n+=e.dump);e.tag=r,e.dump="["+n+"]"}function yc(e,t,i,n){var r="",a=e.tag,s,o,l;for(s=0,o=i.length;s"u"&&Ci(e,t+1,null,!0,!0,!1,!0))&&((!n||r!=="")&&(r+=lo(e,t)),e.dump&&Ln===e.dump.charCodeAt(0)?r+="-":r+="- ",r+=e.dump);e.tag=a,e.dump=r||"[]"}function yh(e,t,i){var n="",r=e.tag,a=Object.keys(i),s,o,l,d,c;for(s=0,o=a.length;s1024&&(c+="? "),c+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ci(e,t,d,!1,!1)&&(c+=e.dump,n+=c));e.tag=r,e.dump="{"+n+"}"}function bh(e,t,i,n){var r="",a=e.tag,s=Object.keys(i),o,l,d,c,u,m;if(e.sortKeys===!0)s.sort();else if(typeof e.sortKeys=="function")s.sort(e.sortKeys);else if(e.sortKeys)throw new De("sortKeys must be a boolean or a function");for(o=0,l=s.length;o1024,u&&(e.dump&&Ln===e.dump.charCodeAt(0)?m+="?":m+="? "),m+=e.dump,u&&(m+=lo(e,t)),Ci(e,t+1,c,!0,u)&&(e.dump&&Ln===e.dump.charCodeAt(0)?m+=":":m+=": ",m+=e.dump,r+=m));e.tag=a,e.dump=r||"{}"}function bc(e,t,i){var n,r,a,s,o,l;for(r=i?e.explicitTypes:e.implicitTypes,a=0,s=r.length;a tag resolver accepts not "'+l+'" style');e.dump=n}return!0}return!1}function Ci(e,t,i,n,r,a,s){e.tag=null,e.dump=i,bc(e,i,!1)||bc(e,i,!0);var o=Ic.call(e.dump),l=n,d;n&&(n=e.flowLevel<0||e.flowLevel>t);var c=o==="[object Object]"||o==="[object Array]",u,m;if(c&&(u=e.duplicates.indexOf(i),m=u!==-1),(e.tag!==null&&e.tag!=="?"||m||e.indent!==2&&t>0)&&(r=!1),m&&e.usedDuplicates[u])e.dump="*ref_"+u;else{if(c&&m&&!e.usedDuplicates[u]&&(e.usedDuplicates[u]=!0),o==="[object Object]")n&&Object.keys(e.dump).length!==0?(bh(e,t,e.dump,r),m&&(e.dump="&ref_"+u+e.dump)):(yh(e,t,e.dump),m&&(e.dump="&ref_"+u+" "+e.dump));else if(o==="[object Array]")n&&e.dump.length!==0?(e.noArrayIndent&&!s&&t>0?yc(e,t-1,e.dump,r):yc(e,t,e.dump,r),m&&(e.dump="&ref_"+u+e.dump)):(fh(e,t,e.dump),m&&(e.dump="&ref_"+u+" "+e.dump));else if(o==="[object String]")e.tag!=="?"&&mh(e,e.dump,t,a,l);else{if(o==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new De("unacceptable kind of an object to dump "+o)}e.tag!==null&&e.tag!=="?"&&(d=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?d="!"+d:d.slice(0,18)==="tag:yaml.org,2002:"?d="!!"+d.slice(18):d="!<"+d+">",e.dump=d+" "+e.dump)}return!0}function vh(e,t){var i=[],n=[],r,a;for(uo(e,i,n),r=0,a=n.length;rie.default.levels.DEBUG||wo.set(e,performance.now())}function ji(e){if(ie.default.getLevel()>ie.default.levels.DEBUG)return;wo.has(e)||rt(E("logs.timing-key-not-found").replace("{TIMING_KEY}",e));let t=performance.now()-wo.get(e);oi(`${e}: ${t} `+E("logs.milliseconds-abbreviation"))}function xa(e,t){ie.default.getLevel()<=t&&va.push(e)}function Gc(){va=[]}function ko(e){Mn=e}function wa(e){switch(e){case"INFO":{ie.default.setLevel("info");break}case"TRACE":{ie.default.setLevel("trace");break}case"DEBUG":{ie.default.setLevel("debug");break}case"SILENT":{ie.default.setLevel("silent");break}case"ERROR":{ie.default.setLevel("error");break}case"WARN":{ie.default.setLevel("warn");break}}}function Qc(e){switch(e){case ie.default.levels.INFO:return"INFO";case ie.default.levels.TRACE:return"TRACE";case ie.default.levels.DEBUG:return"DEBUG";case ie.default.levels.SILENT:return"SILENT";case ie.default.levels.ERROR:return"ERROR";case ie.default.levels.WARN:return"WARN"}}var Zc={};var Jc={};var Xc={};var ed={commands:{"lint-file":{name:"Linten Sie die aktuelle Datei","error-message":"Lint-Datei-Fehler in der Datei"},"lint-file-unless-ignored":{name:"Linten Sie die aktuelle Datei, es sei denn, sie wird ignoriert"},"lint-all-files":{name:"Linten Sie alle Dateien im Vault","error-message":"Beim Linten aller Dateien Fehler in der Datei","success-message":"Alle Dateien gelinted","errors-message-singular":"Beim Linten aller Dateien gab es einen Fehler.","errors-message-plural":"Beim Linten aller Dateien gab es {NUM} Fehler.","start-message":"Dadurch werden alle Ihre Dateien ver\xE4ndert und es k\xF6nnen Fehler entstehen.","submit-button-text":"Linte alle","submit-button-notice-text":"Linte alle Dateien..."},"lint-all-files-in-folder":{name:"Linte alle Dateien im aktuellen Ordner","start-message":"Dadurch werden alle Ihre Dateien in {FOLDER_NAME} bearbeitet, einschlie\xDFlich der Dateien in den Unterordnern, was zu Fehlern f\xFChren kann.","submit-button-text":"Linte alle Dateien in {FOLDER_NAME}","submit-button-notice-text":"Linten aller Dateien in {FOLDER_NAME}...","error-message":"Beim Linten aller Dateien im Ordner gab es Fehler in der Datei","success-message":"Alle {NUM}-Dateien in {FOLDER_NAME} wurden gelinted.","message-singular":"Alle {NUM}-Dateien in {FOLDER_NAME} wurden gelinted und es trat ein Fehler auf.","message-plural":"Alle {FILE_COUNT}-Dateien in {FOLDER_NAME} wurden gelinted und es gab {ERROR_COUNT} Fehler."},"paste-as-plain-text":{name:"Einf\xFCgen als reiner Text und ohne \xC4nderungen"},"lint-file-pop-up-menu-text":{name:"Linte Datei"},"lint-folder-pop-up-menu-text":{name:"Linte Ordner"}},logs:{"plugin-load":"Plugin wird geladen","plugin-unload":"Plugin entladen","folder-lint":"Linting-Ordner ","linter-run":"Laufender Linter","paste-link-warning":"Abgebrochenes Einf\xFCgen des Lints, da der Inhalt der Zwischenablage ein Link ist, wodurch Konflikte mit anderen Plugins vermieden werden, die das Einf\xFCgen \xE4ndern.","see-console":"Weitere Informationen finden Sie in der Konsole.","unknown-error":"Beim Linten ist ein unbekannter Fehler aufgetreten.","moment-locale-not-found":"Beim Versuch, Moment.js locale auf {MOMENT_LOCALE} umzustellen, wurde {CURRENT_LOCALE} angezeigt","file-change-lint-message-start":"Linted","pre-rules":"Regeln vor regul\xE4ren Regeln","post-rules":"Regeln nach regul\xE4ren Regeln","rule-running":"Laufende Regeln","custom-regex":"Benutzerdefinierte Regex-Regeln","running-custom-regex":"Ausf\xFChren von benutzerdefinierten Regex","running-custom-lint-command":"Ausf\xFChren von benutzerdefinierten Lint-Befehlen","custom-lint-duplicate-warning":'Sie k\xF6nnen denselben Befehl ("{COMMAND_NAME}") nicht zweimal als benutzerdefinierte Lint-Regel ausf\xFChren.',"custom-lint-error-message":"Benutzerdefinierter Lint-Befehl","disabled-text":"ist deaktiviert","run-rule-text":"L\xE4uft","timing-key-not-found":"Der Timing-Schl\xFCssel '{TIMING_KEY}' ist in der Timing-Info-Liste nicht vorhanden, daher wurde er ignoriert","milliseconds-abbreviation":"ms","invalid-date-format-error":"Das Format des Erstellungsdatums '{DATE}' konnte nicht analysiert oder bestimmt werden, sodass das Erstellungsdatum in '{FILE_NAME}","invalid-delimiter-error-message":"Trennzeichen darf nur ein einzelnes Zeichen sein","missing-footnote-error-message":"Die Fu\xDFnote '{FOOTNOTE}' hat keinen entsprechenden Fu\xDFnotenverweis vor dem Fu\xDFnoteninhalt und kann nicht verarbeitet werden. Bitte achten Sie darauf, dass alle Fu\xDFnoten vor dem Inhalt der Fu\xDFnote einen entsprechenden Verweis haben.","too-many-footnotes-error-message":"Der Fu\xDFnotenschl\xFCssel '{FOOTNOTE_KEY}' hat mehr als 1 Fu\xDFnote, die darauf verweist. Bitte aktualisieren Sie die Fu\xDFnoten so, dass es nur noch eine Fu\xDFnote pro Fu\xDFnotenschl\xFCssel gibt.","wrapper-yaml-error":"Fehler in der YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"Unbekannter Fehler: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"Es gibt keinen Inhalt in der Zwischenablage.","characters-added":"Zeichen hinzugef\xFCgt","characters-removed":"Zeichen entfernt","copy-to-clipboard-failed":"Kopieren des Textes in die Zwischenablage fehlgeschlagen: "},"all-rules-option":"Alle","linter-title":"Linter","empty-search-results-text":"Keine Einstellungen stimmen mit der Suche \xFCberein","warning-text":"Warnung","file-backup-text":"Stellen Sie sicher, dass Sie Ihre Dateien gesichert haben.",tabs:{names:{general:"Allgemein",custom:"Individuell",yaml:"YAML",heading:"\xDCberschrift",content:"Inhalt",footnote:"Fu\xDFnote",spacing:"Abstand",paste:"Einf\xFCgen",debug:"Debuggen"},"default-search-bar-text":"Alle Einstellungen durchsuchen",general:{"lint-on-save":{name:"Linten beim Speichern",description:"Linten der Datei beim manuellen Speichern (wenn `Strg + S` gedr\xFCckt wird oder wenn `:w` ausgef\xFChrt wird, w\xE4hrend vim-Tastenkombinationen verwendet werden)"},"display-message":{name:"Meldung beim Linten anzeigen",description:"Zeigen Sie die Anzahl der Zeichen an, die sich nach dem Linten ge\xE4ndert haben"},"lint-on-file-change":{name:"Linten bei Datei\xE4nderungen",description:"Wenn eine Datei geschlossen oder zu einer neuen Datei gewechselt wird, wird die vorherige Datei gelinted."},"display-lint-on-file-change-message":{name:"Nachricht beim Linten nach einer Datei\xE4nderung anzeigen",description:"Zeigt eine Meldung an, wenn `Linten bei Datei\xE4nderungen` ausgel\xF6st wurde"},"folders-to-ignore":{name:"Ordner, die ignoriert werden sollen",description:"Ordner, die ignoriert werden sollen, wenn alle Dateien gelinted oder beim Speichern gelinted werden. Geben Sie Ordnerpfade ein, die durch Zeilenumbr\xFCche getrennt sind","folder-search-placeholder-text":"Ordner-Name","add-input-button-text":"Einen anderen zu ignorierenden Ordner hinzuf\xFCgen","delete-tooltip":"L\xF6schen"},"override-locale":{name:"Gebietsschema \xFCberschreiben",description:"Legen Sie diese Option fest, wenn Sie ein anderes Gebietsschema als das Standardgebietsschema verwenden m\xF6chten"},"same-as-system-locale":"Identisch mit System ({SYS_LOCALE})","yaml-aliases-section-style":{name:"YAML-Aliase-Abschnittsstil",description:"Der Stil des YAML-Aliasabschnitts"},"yaml-tags-section-style":{name:"Abschnittsstil f\xFCr YAML-Tags",description:"Der Stil des YAML-Tags-Abschnitts"},"default-escape-character":{name:"Standard-Escape-Zeichen",description:"Das Standardzeichen, das zum Maskieren von YAML-Werten verwendet werden soll, wenn ein einfaches Anf\xFChrungszeichen und kein doppeltes Anf\xFChrungszeichen vorhanden sind."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"Entfernen Sie unn\xF6tige Escape-Zeichen im mehrzeiligen Array-Format",description:"Escape-Zeichen f\xFCr mehrzeilige YAML-Arrays ben\xF6tigen nicht die gleiche Escape-Funktion wie einzeilige Arrays. Entfernen Sie also im mehrzeiligen Format zus\xE4tzliche Escapezeichen, die nicht erforderlich sind"},"number-of-dollar-signs-to-indicate-math-block":{name:"Anzahl der Dollarzeichen, die den Matheblock anzeigen",description:"Die Anzahl der Dollarzeichen, um den mathematischen Inhalt als mathematischen Block anstelle von Inline-Mathematik zu betrachten"}},debug:{"log-level":{name:"Log-Ebene",description:"Die Arten von Logmeldungen, die vom Dienst protokolliert werden d\xFCrfen. Der Standardwert ist Fehler."},"linter-config":{name:"Linter-Konfiguration",description:"Der Inhalt der data.json f\xFCr den Linter zum Zeitpunkt des Ladens der Einstellungsseite"},"log-collection":{name:"Sammeln Sie Protokolle bei aktiviertem `Linten beim Speichern` und dem Linten der aktuellen Datei",description:"Sammelt die Log-Meldungen, wenn Sie `Linten beim Speichern` aktiviert haben und die aktuelle Datei linten. Diese Protokolle k\xF6nnen beim Debuggen und Erstellen von Fehlerberichten hilfreich sein."},"linter-logs":{name:"Linter-Protokolle",description:"Die Protokolle des letzten `Linten beim Speichern`-Durchlaufes oder dem letzten Linten der aktuellen Datei werden gesammelt, wenn die Option aktiviert ist."}}},options:{"custom-command":{name:"Benutzerdefinierte Befehle",description:"Benutzerdefinierte Befehle sind Obsidian-Befehle, die ausgef\xFChrt werden, nachdem der Linter seine regul\xE4ren Regeln ausgef\xFChrt hat. Dies bedeutet, dass sie nicht ausgef\xFChrt werden, bevor die YAML-Zeitstempellogik ausgef\xFChrt wird, sodass sie dazu f\xFChren k\xF6nnen, dass der YAML-Zeitstempel bei der n\xE4chsten Ausf\xFChrung des Linters ausgel\xF6st wird. Sie k\xF6nnen einen Obsidian-Befehl nur einmal ausw\xE4hlen. **_Beachten Sie, dass dies derzeit nur beim Linten der aktuellen Datei funktioniert._**",warning:"Wenn Sie eine Option ausw\xE4hlen, stellen Sie sicher, dass Sie die Option entweder mit der Maus oder durch Dr\xFCcken der Eingabetaste ausw\xE4hlen. Andere Auswahlmethoden funktionieren m\xF6glicherweise nicht und es werden nur Auswahlen eines tats\xE4chlichen Obsidian-Befehls oder einer leeren Zeichenfolge gespeichert.","add-input-button-text":"Neuen Befehl hinzuf\xFCgen","command-search-placeholder-text":"Obsidian-Befehl","move-up-tooltip":"Aufr\xFCcken","move-down-tooltip":"Bewegen Sie sich nach unten","delete-tooltip":"L\xF6schen"},"custom-replace":{name:"Benutzerdefinierter Regex-Ersatz",description:"Der benutzerdefinierte Regex-Ersatz kann verwendet werden, um alles zu ersetzen, was mit dem Such-Regex mit dem Ersatzwert \xFCbereinstimmt. Bei den Werten replace und find muss es sich um g\xFCltige Regex-Werte handeln.",warning:"Verwenden Sie dies mit Vorsicht, wenn Sie Regex nicht kennen. Stellen Sie au\xDFerdem sicher, dass Sie keine Lookbehinds in Ihrem regul\xE4ren Ausdruck auf iOS-Mobilger\xE4ten verwenden, da dies dazu f\xFChrt, dass Lints fehlschlagen, da dies auf dieser Plattform nicht unterst\xFCtzt wird.","add-input-button-text":"Neuen Regex-Ersatz hinzuf\xFCgen","regex-to-find-placeholder-text":"Regex zu finden","flags-placeholder-text":"Flaggen","regex-to-replace-placeholder-text":"Regex zu ersetzen","label-placeholder-text":"Etikett","move-up-tooltip":"Aufr\xFCcken","move-down-tooltip":"Bewegen Sie sich nach unten","delete-tooltip":"L\xF6schen"}},rules:{"auto-correct-common-misspellings":{name:"H\xE4ufige Rechtschreibfehler automatisch korrigieren",description:"Verwendet ein W\xF6rterbuch mit h\xE4ufigen Rechtschreibfehlern, um sie automatisch in die richtige Schreibweise umzuwandeln. Siehe [Autokorrekturkarte](https://github.com/platers/obsidian-linter/tree/master/src/utils/auto-correct-misspellings.ts) f\xFCr die vollst\xE4ndige Liste der automatisch korrigierten W\xF6rter.","ignore-words":{name:"Ignorieren Sie W\xF6rter",description:"Eine durch Kommas getrennte Liste von W\xF6rtern in Kleinbuchstaben, die bei der automatischen Korrektur ignoriert werden sollen"}},"add-blockquote-indentation-on-paste":{name:"Blockquote-Einr\xFCckung beim Einf\xFCgen hinzuf\xFCgen",description:"F\xFCgt Blockzitate zu allen au\xDFer der ersten Zeile hinzu, wenn sich der Cursor w\xE4hrend des Einf\xFCgens in einer Blockquote/Callout-Zeile befindet"},"blockquote-style":{name:"Blockquote-Stil",description:"Stellt sicher, dass der Blockquote-Stil konsistent ist.",style:{name:"Stil",description:"Der f\xFCr Blockquote-Indikatoren verwendete Stil"}},"capitalize-headings":{name:"\xDCberschriften gro\xDF schreiben",description:"\xDCberschriften sollten mit Gro\xDF- und Kleinschreibung formatiert werden",style:{name:"Stil",description:"Die Art der zu verwendenden Gro\xDFschreibung"},"ignore-case-words":{name:"Ignore Cased Words",description:"Only apply title case style to words that are all lowercase"},"ignore-words":{name:"Ignorieren Sie Gro\xDF-/Kleinschreibungsw\xF6rter",description:"Eine durch Kommas getrennte Liste von W\xF6rtern, die bei der Gro\xDFschreibung ignoriert werden sollen"},"lowercase-words":{name:"W\xF6rter in Kleinbuchstaben",description:"Eine durch Kommas getrennte Liste von W\xF6rtern, um Kleinbuchstaben zu behalten"}},"compact-yaml":{name:"YAML komprimieren",description:"Entfernt f\xFChrende und nachfolgende Leerzeilen im YAML-Frontmatter.","inner-new-lines":{name:"Innere neue Zeilen",description:"Entfernen Sie neue Zeilen, die sich nicht am Anfang oder am Ende der YAML befinden"}},"consecutive-blank-lines":{name:"aufeinanderfolgende Leerzeilen zusammenfassen",description:"Es sollte h\xF6chstens eine aufeinanderfolgende Leerzeile geben."},"convert-bullet-list-markers":{name:"Konvertiere Aufz\xE4hlungszeichen",description:"Konvertiert g\xE4ngige Symbole f\xFCr Aufz\xE4hlungslisten in Markdown-Listenmarkierungen."},"convert-spaces-to-tabs":{name:"Leerzeichen in Tabulatoren konvertieren",description:"Konvertiert f\xFChrende Leerzeichen in Tabulatoren.",tabsize:{name:"Tabgr\xF6\xDFe",description:"Anzahl der Leerzeichen, die in einen Tabulator umgewandelt werden"}},"emphasis-style":{name:"Hervorhebungsstil",description:"Stellt sicher, dass der Hervorhebungsstil konsistent ist.",style:{name:"Stil",description:"Der Stil, der verwendet wird, um hervorgehobene Inhalte zu kennzeichnen"}},"empty-line-around-blockquotes":{name:"Leere Zeile um Blockquotes",description:"Stellt sicher, dass Blockzitate in einer leeren Zeile stehen, es sei denn, sie beginnen oder beenden ein Dokument. **Beachten Sie, dass eine leere Zeile entweder eine Verschachtelungsebene weniger f\xFCr Blockzitate oder ein Zeilenumbruchzeichen ist.**"},"empty-line-around-code-fences":{name:"Leere Zeile um Code-Bereiche",description:"Stellt sicher, dass Codebereiche mit einer leeren Zeile versehen sind, es sei denn, sie beginnen oder beenden ein Dokument."},"empty-line-around-math-blocks":{name:"Leere Zeile um mathematische Bl\xF6cke",description:"Stellt sicher, dass es eine leere Zeile um mathematische Bl\xF6cke gibt, indem `Anzahl der Dollarzeichen, die einen mathematischen Block anzeigen` verwendet wird, um zu bestimmen, wie viele Dollarzeichen einen mathematischen Block f\xFCr einzeilige Mathematik anzeigen."},"empty-line-around-tables":{name:"Leere Zeile um Tabellen",description:"Stellt sicher, dass es eine leere Zeile um Github-formatierte Tabellen gibt, es sei denn, sie beginnen oder beenden ein Dokument."},"escape-yaml-special-characters":{name:"Escape-YAML-Sonderzeichen",description:`Maskiert Doppelpunkte mit einem Leerzeichen nach ihnen (: ), einfache Anf\xFChrungszeichen (') und doppelte Anf\xFChrungszeichen (") in YAML.`,"try-to-escape-single-line-arrays":{name:"Versucht, Single-Line-Arrays zu vermeiden",description:'Versucht, Arraywerte zu maskieren, wobei davon ausgegangen wird, dass ein Array mit "[" beginnt, mit "]" endet und Elemente enth\xE4lt, die durch "," getrennt sind.'}},"file-name-heading":{name:"\xDCberschrift des Dateinamens",description:"F\xFCgt den Dateinamen als H1-\xDCberschrift ein, wenn keine H1-\xDCberschrift vorhanden ist."},"footnote-after-punctuation":{name:"Fu\xDFnote nach Interpunktion",description:"Stellt sicher, dass Fu\xDFnotenverweise nach der Interpunktion und nicht davor platziert werden."},"force-yaml-escape":{name:"YAML-Escape erzwingen",description:"Maskiert die Werte f\xFCr die angegebenen YAML-Schl\xFCssel.","force-yaml-escape-keys":{name:"Erzwingen Sie die YAML-Escape-Klausel f\xFCr Schl\xFCssel",description:"Verwendet das YAML-Escapezeichen f\xFCr die angegebenen YAML-Schl\xFCssel, die durch ein Zeilenumbruchzeichen getrennt sind, wenn es nicht bereits mit Escapezeichen versehen ist. Nicht auf YAML-Arrays verwenden."}},"format-tags-in-yaml":{name:"Formatieren von Tags in YAML",description:"Entfernen Sie Hashtags aus Tags im YAML-Frontmatter, da sie die Tags dort ung\xFCltig machen."},"format-yaml-array":{name:"Formatieren des YAML-Arrays",description:"Erm\xF6glicht die Formatierung von regul\xE4ren YAML-Arrays als mehrzeilig oder einzeilig und `tags` und `aliases` d\xFCrfen einige Obsidian-spezifische YAML-Formate haben. Beachten Sie, dass eine einzelne Zeichenfolge zu einer einzelnen Zeile von einem einzelnen Zeichenfolgeneintrag zu einem einzeiligen Array wechselt, wenn mehr als 1 Eintrag vorhanden ist. Das Gleiche gilt f\xFCr eine einzelne Zeichenfolge bis zu einer mehrzeiligen Zeichenfolge, mit der Ausnahme, dass sie zu einem mehrzeiligen Array wird.","alias-key":{name:'Abschnitt "YAML-Aliase" formatieren',description:"Aktiviert die Formatierung f\xFCr den Abschnitt YAML-Aliase. Sie sollten diese Option nicht zusammen mit der Regel `YAML-Titel-Alias` aktivieren, da sie m\xF6glicherweise nicht gut zusammenarbeiten oder unterschiedliche Formatstile ausgew\xE4hlt haben, was zu unerwarteten Ergebnissen f\xFChrt."},"tag-key":{name:'Abschnitt "YAML-Tags formatieren"',description:"Aktiviert die Formatierung f\xFCr den Abschnitt YAML-Tags."},"default-array-style":{name:"Standardm\xE4\xDFiger YAML-Array-Abschnittsstil",description:"Der Stil anderer YAML-Arrays, die nicht `tags` oder `aliases` sind oder bei `Erzwingt f\xFCr Schl\xFCsselwerte einzeilige Arrays` und `Erzwingt f\xFCr Schl\xFCsselwerte mehrzeilige Arrays`"},"default-array-keys":{name:"Formatieren von YAML-Array-Abschnitten",description:"Aktiviert die Formatierung f\xFCr regul\xE4re YAML-Arrays"},"force-single-line-array-style":{name:"Erzwingt f\xFCr Schl\xFCsselwerte einzeilige Arrays",description:"Erzwingt, dass das YAML-Array f\xFCr die neuen zeilengetrennten Schl\xFCssel im einzeiligen Format vorliegt (leer lassen, um diese Option zu deaktivieren)"},"force-multi-line-array-style":{name:"Erzwingt f\xFCr Schl\xFCsselwerte mehrzeilige Arrays",description:"Erzwingt, dass das YAML-Array f\xFCr die neuen zeilengetrennten Schl\xFCssel im mehrzeiligen Format vorliegt (leer lassen, um diese Option zu deaktivieren)"}},"header-increment":{name:"Header-Inkrement",description:"\xDCberschriftenebenen sollten jeweils nur um eine Ebene erh\xF6ht werden","start-at-h2":{name:"Start-Header-Inkrement auf \xDCberschriftenebene 2",description:"Legt die \xDCberschriftenebene 2 als minimale \xDCberschriftenebene in einer Datei f\xFCr das Kopfzeileninkrement fest und verschiebt alle \xDCberschriften entsprechend, sodass sie beginnend mit einer \xDCberschrift der Ebene 2 inkrementiert werden."}},"heading-blank-lines":{name:"\xDCberschriften mit Leerzeilen",description:"Alle \xDCberschriften haben sowohl davor als auch danach eine Leerzeile (au\xDFer wenn sich die \xDCberschrift am Anfang oder Ende des Dokuments befindet).",bottom:{name:"Darunter",description:"Einf\xFCgen einer Leerzeile unter \xDCberschriften"},"empty-line-after-yaml":{name:"Leere Zeile zwischen YAML und Header",description:"Behalten Sie die leere Zeile zwischen dem YAML-Frontmatter und dem Header bei"}},"headings-start-line":{name:"\xDCberschriften am Zeilenbeginn",description:"Bei \xDCberschriften, die keine Zeile beginnen, wird der vorangehende Leerraum entfernt, um sicherzustellen, dass sie als \xDCberschriften erkannt werden."},"insert-yaml-attributes":{name:"Einf\xFCgen von YAML-Attributen",description:"F\xFCgt die angegebenen YAML-Attribute in den YAML-Frontmatter ein. Setzen Sie jedes Attribut in eine einzelne Zeile.","text-to-insert":{name:"Text zum Einf\xFCgen",description:"Text, der in den YAML-Frontmatter eingef\xFCgt werden soll"}},"line-break-at-document-end":{name:"Zeilenumbruch am Dokumentende",description:"Stellt sicher, dass am Ende eines Dokuments genau ein Zeilenumbruch steht."},"move-footnotes-to-the-bottom":{name:"Fu\xDFnoten nach unten verschieben",description:"Verschieben Sie alle Fu\xDFnoten an das Ende des Dokuments."},"move-math-block-indicators-to-their-own-line":{name:"Verschieben Sie mathematische Blockindikatoren in eine eigene Zeile",description:"Verschieben Sie alle Anfangs- und Endindikatoren f\xFCr mathematische Bl\xF6cke in ihre eigenen Zeilen, indem Sie `Anzahl der Dollarzeichen, die einen mathematischen Block anzeigen` verwenden, um zu bestimmen, wie viele Dollarzeichen einen mathematischen Block f\xFCr einzeilige Mathematik anzeigen."},"move-tags-to-yaml":{name:"Tags nach YAML verschieben",description:"Verschieben Sie alle Tags in den YAML-Frontmatter des Dokuments.","how-to-handle-existing-tags":{name:"Body-Tag-Operation",description:"Die Aktion, die mit nicht ignorierten Tags im Hauptteil der Datei ausgef\xFChrt werden soll, nachdem sie in den Frontmatter verschoben wurden"},"tags-to-ignore":{name:"ignorierte Tags",description:"Die Tags, die nicht in das Tags-Array verschoben oder aus dem Textinhalt entfernt werden, wenn `Entfernen Sie den Hashtag aus Tags im Inhaltstext` aktiviert ist. Jedes Tag sollte in einer neuen Zeile und ohne das `#`` stehen. **Stellen Sie sicher, dass Sie den Hashtag nicht in den Tag-Namen aufnehmen.**"}},"no-bare-urls":{name:"Keine blo\xDFen URLs",description:"Umschlie\xDFt blo\xDFe URLs mit spitzen Klammern, es sei denn, sie sind in Back-Ticks, eckige Klammern oder einfache oder doppelte Anf\xFChrungszeichen eingeschlossen."},"ordered-list-style":{name:"Geordneter Listenstil",description:"Stellt sicher, dass geordnete Listen dem angegebenen Stil entsprechen. Beachten Sie, dass 2 Leerzeichen oder 1 Tabulator als Einr\xFCckungsebene betrachtet werden.","number-style":{name:"Zahlen-Stil",description:"Der Zahlenstil, der in geordneten Listenindikatoren verwendet wird"},"list-end-style":{name:"Endestil des Indikators f\xFCr eine geordnete Liste",description:"Das Endezeichen eines geordneten Listenkennzeichens"}},"paragraph-blank-lines":{name:"Leere Absatzzeilen",description:"Alle Abs\xE4tze sollten sowohl davor als auch danach genau eine Leerzeile haben."},"prevent-double-checklist-indicator-on-paste":{name:"Verhindern Sie eine doppelte Checklistenanzeige beim Einf\xFCgen",description:"Entfernt die Start-Checklisten-Anzeige aus dem Text, um sie einzuf\xFCgen, wenn die Zeile, auf der sich der Cursor in der Datei befindet, \xFCber eine Checklistenanzeige verf\xFCgt"},"prevent-double-list-item-indicator-on-paste":{name:"Verhindern Sie die Anzeige f\xFCr doppelte Listenelemente beim Einf\xFCgen",description:"Entfernt den Startlistenindikator aus dem Text, der eingef\xFCgt werden soll, wenn die Zeile, auf der sich der Cursor in der Datei befindet, einen Listenindikator hat"},"proper-ellipsis-on-paste":{name:"Richtige Auslassungspunkte auf Paste",description:"Ersetzt drei aufeinanderfolgende Punkte durch Auslassungspunkte, auch wenn sie im Text ein Leerzeichen zum Einf\xFCgen haben"},"proper-ellipsis":{name:"Richtige Auslassungspunkte",description:"Ersetzt drei aufeinanderfolgende Punkte durch Auslassungspunkte."},"quote-style":{name:"Zitatstil",description:"Aktualisiert die Anf\xFChrungszeichen im Textk\xF6rperinhalt, sodass sie auf die angegebenen einfachen und doppelten Anf\xFChrungszeichenstile aktualisiert werden.","single-quote-enabled":{name:"Aktivieren Sie `Stil f\xFCr einfache Anf\xFChrungszeichen`",description:"Gibt an, dass der ausgew\xE4hlte einfache Anf\xFChrungszeichenstil verwendet werden soll."},"single-quote-style":{name:"Stil f\xFCr einfache Anf\xFChrungszeichen",description:"Der Stil der zu verwendenden einfachen Anf\xFChrungszeichen."},"double-quote-enabled":{name:"Aktivieren Sie `Stil f\xFCr doppelte Anf\xFChrungszeichen`",description:"Gibt an, dass der ausgew\xE4hlte doppelte Anf\xFChrungszeichenstil verwendet werden soll."},"double-quote-style":{name:"Stil f\xFCr doppelte Anf\xFChrungszeichen",description:"Der zu verwendende Stil der doppelten Anf\xFChrungszeichen."}},"re-index-footnotes":{name:"Fu\xDFnoten neu indizieren",description:"Indiziert Fu\xDFnotenschl\xFCssel und Fu\xDFnoten basierend auf der Reihenfolge des Auftretens neu (HINWEIS: Diese Regel funktioniert *nicht*, wenn es mehr als eine Fu\xDFnote f\xFCr einen Schl\xFCssel gibt.)"},"remove-consecutive-list-markers":{name:"Entfernen Sie aufeinanderfolgende Listenmarkierungen",description:"Entfernt aufeinanderfolgende Listenmarkierungen. N\xFCtzlich beim Kopieren und Einf\xFCgen von Listenelementen."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Entfernen Sie leere Zeilen zwischen Listenmarkierungen und Checklisten",description:"Es sollten keine leeren Zeilen zwischen Listenmarkierungen und Checklisten stehen."},"remove-empty-list-markers":{name:"Entfernen Sie leere Listenmarkierungen",description:"Entfernt leere Listenmarkierungen, d.h. Listenelemente ohne Inhalt."},"remove-hyphenated-line-breaks":{name:"Entfernen Sie Zeilenumbr\xFCche mit Bindestrich",description:"Entfernt Zeilenumbr\xFCche mit Bindestrich. N\xFCtzlich beim Einf\xFCgen von Text aus Lehrb\xFCchern."},"remove-hyphens-on-paste":{name:"Entfernen Sie Bindestriche auf Paste",description:"Entfernt Bindestriche aus dem Text zum Einf\xFCgen"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Entfernen Sie f\xFChrende oder nachgestellte Leerzeichen beim Einf\xFCgen",description:"Entfernt alle f\xFChrenden Leerzeichen ohne Tabulatoren und alle nachgestellten Leerzeichen, die der Text einf\xFCgen kann"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Entfernen Sie \xFCbrig gebliebene Fu\xDFnoten aus dem Zitat beim Einf\xFCgen",description:"Entfernt alle \xFCbrig gebliebenen Fu\xDFnotenverweise, die der Text einf\xFCgen kann"},"remove-link-spacing":{name:"Linkabstand entfernen",description:"Entfernt den Abstand um den Linktext."},"remove-multiple-blank-lines-on-paste":{name:"Entfernen Sie mehrfache Leerzeilen beim Einf\xFCgen",description:"Verdichtet mehrere Leerzeilen zu einer Leerzeile, damit der Text eingef\xFCgt werden kann"},"remove-multiple-spaces":{name:"Entfernen Sie mehrfache Leerzeichen",description:"Entfernt zwei oder mehr aufeinanderfolgende Leerzeichen. Ignoriert Leerzeichen am Anfang und am Ende der Zeile."},"remove-space-around-characters":{name:"Entfernen Sie den Abstand um die Zeichen",description:"Stellt sicher, dass bestimmte Zeichen nicht von Leerzeichen umgeben sind (entweder einzelne Leerzeichen oder ein Tabulator). Beachten Sie, dass dies in einigen F\xE4llen zu Problemen mit dem Markdown-Format f\xFChren kann.","include-fullwidth-forms":{name:"Einf\xFCgen von Formularen in voller Breite",description:'Einschlie\xDFen Unicode-Block "Formulare" in voller Breite'},"include-cjk-symbols-and-punctuation":{name:"CJK-Symbole und Satzzeichen einschlie\xDFen",description:'Einschlie\xDFen CJK-Symbole und Satzzeichen Unicode-Block'},"include-dashes":{name:"Bindestriche einschlie\xDFen",description:"F\xFCgen Sie den Gedankenstrich (\u2013) und den Gedankenstrich (\u2014) ein"},"other-symbols":{name:"Andere Symbole",description:"Andere Symbole, die enthalten sind"}},"remove-space-before-or-after-characters":{name:"Entfernen Sie Leerzeichen vor oder nach Zeichen",description:"Entfernt Leerzeichen vor und nach den angegebenen Zeichen. Beachten Sie, dass dies in einigen F\xE4llen zu Problemen mit dem Markdown-Format f\xFChren kann.","characters-to-remove-space-before":{name:"Leerzeichen vor Zeichen entfernen",description:"Entfernt Leerzeichen vor den angegebenen Zeichen. **Hinweis: Die Verwendung von `{` oder `}` in der Zeichenliste wirkt sich unerwartet auf Dateien aus, da es in der Ignoriersyntax hinter den Kulissen verwendet wird.**"},"characters-to-remove-space-after":{name:"Leerzeichen nach Zeichen entfernen",description:"Entfernt Leerzeichen vor den angegebenen Zeichen. **Hinweis: Die Verwendung von `{` oder `}` in der Zeichenliste wirkt sich unerwartet auf Dateien aus, da es in der Ignoriersyntax hinter den Kulissen verwendet wird.**"}},"remove-trailing-punctuation-in-heading":{name:"Entfernen Sie nachgestellte Satzzeichen in der \xDCberschrift",description:"Entfernt die angegebene Interpunktion am Ende von \xDCberschriften, wobei darauf zu achten ist, dass das Semikolon am Ende von [HTML-Entit\xE4tsreferenzen](https://de.wikipedia.org/wiki/Typografische_Zeichen_in_XML_und_HTML) ignoriert wird.","punctuation-to-remove":{name:"Nachfolgende Interpunktion",description:"Das nachfolgende Satzzeichen, das aus den \xDCberschriften in der Datei entfernt werden soll."}},"remove-yaml-keys":{name:"Entfernen von YAML-Schl\xFCsseln",description:"Entfernt die angegebenen YAML-Schl\xFCssel","yaml-keys-to-remove":{name:"Zu entfernende YAML-Schl\xFCssel",description:"Die zu entfernenden YAML-Schl\xFCssel aus dem YAML-Frontmatter mit oder ohne Doppelpunkt"}},"space-after-list-markers":{name:"Leerzeichen nach Listenmarkierungen",description:"Es sollte ein einzelnes Leerzeichen nach Listenmarkierungen und Kontrollk\xE4stchen geben."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"Leerzeichen zwischen Chinesisch, Japanisch oder Koreanisch und Englisch oder Zahlen",description:"Stellt sicher, dass Chinesisch, Japanisch oder Koreanisch und Englisch oder Zahlen durch ein einziges Leerzeichen getrennt werden. Folgt diesen [Richtlinien](https://github.com/sparanoid/chinese-copywriting-guidelines)"},"strong-style":{name:"Starker Stil",description:"Stellt sicher, dass der starke Stil konsistent ist.",style:{name:"Stil",description:"Der Stil, der verwendet wird, um starke/fettgedruckte Inhalte zu kennzeichnen"}},"trailing-spaces":{name:"Nachgestellte Leerzeichen",description:"Entfernt zus\xE4tzliche Leerzeichen nach jeder Zeile.","twp-space-line-break":{name:"Zwei Leerzeichen Zeilenumbruch",description:'Ignorieren Sie zwei Leerzeichen, gefolgt von einem Zeilenumbruch ("Zwei-Leerzeichen-Regel").'}},"two-spaces-between-lines-with-content":{name:"Zwei Leerzeichen zwischen Zeilen mit Inhalt",description:"Stellt sicher, dass zwei Leerzeichen an den Zeilenenden hinzugef\xFCgt werden, wobei der Inhalt in der n\xE4chsten Zeile f\xFCr Abs\xE4tze, Blockzitate und Listenelemente fortgesetzt wird"},"unordered-list-style":{name:"Ungeordneter Listenstil",description:"Stellt sicher, dass ungeordnete Listen dem angegebenen Stil folgen.","list-style":{name:"Stil des Listenelements",description:"Das Listenelementformat, das in ungeordneten Listen verwendet werden soll"}},"yaml-key-sort":{name:"Sortierung von YAML-Schl\xFCsseln",description:"Sortiert die YAML-Schl\xFCssel basierend auf der angegebenen Reihenfolge und Priorit\xE4t. Hinweis: Kann auch Leerzeilen entfernen.","yaml-key-priority-sort-order":{name:"Priorit\xE4tssortierreihenfolge der YAML-Schl\xFCssel",description:"Die Reihenfolge, in der die Schl\xFCssel sortiert werden sollen, wobei in jeder Zeile ein Schl\xFCssel in der Reihenfolge der Liste sortiert wird"},"priority-keys-at-start-of-yaml":{name:"Priorit\xE4tsschl\xFCssel am Anfang von YAML",description:"Die priorisierte Sortierreihenfolge der YAML-Schl\xFCssel wird am Anfang des YAML-Frontmatters platziert"},"yaml-sort-order-for-other-keys":{name:"YAML-Sortierreihenfolge f\xFCr andere Schl\xFCssel",description:"Die Art und Weise, wie die Schl\xFCssel sortiert werden, die nicht im Textbereich der priorisierten Sortierreihenfolge von YAML-Keys vorhanden sind"}},"yaml-timestamp":{name:"YAML-Zeitstempel",description:"Verfolgen Sie das Datum, an dem die Datei zuletzt bearbeitet wurde, im YAML-Frontmatter. Ruft Datumsangaben aus Dateimetadaten ab.","date-created":{name:"Erstellungsdatum",description:"Geben Sie das Datum ein, an dem die Datei erstellt wurde"},"date-created-key":{name:"Schl\xFCssel f\xFCr das Erstellungsdatum",description:"Der YAML-Schl\xFCssel, der f\xFCr das Erstellungsdatum verwendet werden soll"},"force-retention-of-create-value":{name:"Erzwinge die Beibehaltung des Schl\xFCsselwertes f\xFCr das Erstellungsdatum",description:"Verwendet den Wert im YAML-Frontmatter f\xFCr das Erstellungsdatum anstelle den Dateimetadaten, was n\xFCtzlich ist, um zu verhindern, dass \xC4nderungen an Dateimetadaten dazu f\xFChren, dass der Wert in einen anderen Wert ge\xE4ndert wird."},"date-modified":{name:"\xC4nderungsdatum",description:"Geben Sie das Datum ein, an dem die Datei zuletzt ge\xE4ndert wurde"},"date-modified-key":{name:"Schl\xFCssel f\xFCr das \xC4nderungsdatum",description:"Der YAML-Schl\xFCssel, der f\xFCr das \xC4nderungsdatum verwendet werden soll"},format:{name:"Format",description:"Zu verwendendes Datumsformat f\xFCr Moment.js (siehe [Momentformatoptionen](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/))"}},"yaml-title-alias":{name:"YAML-Titel-Alias",description:"F\xFCgt den Titel der Datei in den Aliasabschnitt des YAML-Frontmatters ein. Ruft den Titel aus dem ersten H1- oder Dateinamen ab.","preserve-existing-alias-section-style":{name:"Vorhandenes Alias-Abschnittsformat beibehalten",description:"Wenn diese Option festgelegt ist, gilt die Einstellung `YAML-Aliase-Abschnittsstil` nur f\xFCr die neu erstellten Abschnitte"},"keep-alias-that-matches-the-filename":{name:"Behalten Sie einen Alias bei, der mit dem Dateinamen \xFCbereinstimmt",description:"Solche Aliase sind in der Regel redundant"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"Verwenden Sie den YAML-Schl\xFCssel `linter-yaml-title-alias`, um bei \xC4nderungen von Dateinamen und \xDCberschriften zu helfen",description:"Wenn sich die erste H1-\xDCberschrift \xE4ndert oder der Dateiname ge\xE4ndert wird, wenn der erste H1 nicht vorhanden ist, wird der alte Alias, der in diesem Schl\xFCssel gespeichert ist, durch den neuen Wert ersetzt, anstatt nur einen neuen Eintrag in das Alias-Array einzuf\xFCgen"}},"yaml-title":{name:"YAML-Titel",description:"F\xFCgt den Titel der Datei in das YAML-Frontmatter ein. Ruft den Titel basierend auf dem ausgew\xE4hlten Modus ab.","title-key":{name:"Titel-Schl\xFCssel",description:"Der YAML-Schl\xFCssel, der f\xFCr den Titel verwendet werden soll"},mode:{name:"Modus",description:"Die zum Abrufen des Titels zu verwendende Methode"}}},enums:{"Title Case":"Titel Gro\xDF- und Kleinschreibung","ALL CAPS":"GROSSBUCHSTABEN","First letter":"Anfangsbuchstabe",".":".",")":")",ERROR:"Fehler",TRACE:"Spur",DEBUG:"Debuggen",INFO:"Info",WARN:"Warnen",SILENT:"Leise",ascending:"aufsteigend",lazy:"lazy",Nothing:"Faul","Remove hashtag":"Hashtag entfernen","Remove whole tag":"Ganzes Tag entfernen",asterisk:"Sternchen",underscore:"unterstreichen",consistent:"folgerichtig","-":"-","*":"*","+":"+",space:"Raum","no space":"kein Platz",None:"Nichts","Ascending Alphabetical":"Aufsteigend Alphabetisch","Descending Alphabetical":"Absteigend Alphabetisch","multi-line":"mehrzeilig","single-line":"einzeilig","single string to single-line":"Single String zu Single-Line","single string to multi-line":"Single String zu Multi-Line","single string comma delimited":"Komma mit Trennzeichen f\xFCr eine Zeichenfolge","single string space delimited":"Einzelzeichenfolgenabstand durch Trennzeichen","single-line space delimited":"einzeiliger Abstand durch Trennzeichen","first-h1":"erste \xDCberschrift der Ebene 1","first-h1-or-filename-if-h1-missing":"Erste \xDCberschrift der Ebene 1 oder Dateiname, wenn die \xDCberschrift der Ebene 1 fehlt",filename:"Dateinamen","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D"}};var zo={commands:{"lint-file":{name:"Lint the current file","error-message":"Lint File Error in File"},"lint-file-unless-ignored":{name:"Lint the current file unless ignored"},"lint-all-files":{name:"Lint all files in the vault","error-message":"Lint All Files Error in File","success-message":"Linted all files","errors-message-singular":"Linted all files and there was 1 error.","errors-message-plural":"Linted all files and there were {NUM} errors.","start-message":"This will edit all of your files and may introduce errors.","submit-button-text":"Lint All","submit-button-notice-text":"Linting all files..."},"lint-all-files-in-folder":{name:"Lint all files in the current folder","start-message":"This will edit all of your files in {FOLDER_NAME} including files in its subfolders which may introduce errors.","submit-button-text":"Lint All Files in {FOLDER_NAME}","submit-button-notice-text":"Linting all files in {FOLDER_NAME}...","error-message":"Lint All Files in Folder Error in File","success-message":"Linted all {NUM} files in {FOLDER_NAME}.","message-singular":"Linted all {NUM} files in {FOLDER_NAME} and there was 1 error.","message-plural":"Linted all {FILE_COUNT} files in {FOLDER_NAME} and there were {ERROR_COUNT} error."},"paste-as-plain-text":{name:"Paste as Plain Text & without Modifications"},"lint-file-pop-up-menu-text":{name:"Lint file"},"lint-folder-pop-up-menu-text":{name:"Lint folder"}},logs:{"plugin-load":"Loading plugin","plugin-unload":"Unloading plugin","folder-lint":"Linting folder ","linter-run":"Running linter","paste-link-warning":"aborted paste lint as the clipboard content is a link and doing so will avoid conflicts with other plugins that modify pasting.","see-console":"See console for more details.","unknown-error":"An unknown error occurred during linting.","moment-locale-not-found":"Trying to switch Moment.js locale to {MOMENT_LOCALE}, got {CURRENT_LOCALE}","file-change-lint-message-start":"Linted","pre-rules":"rules before regular rules","post-rules":"rules after regular rules","rule-running":"rules running","custom-regex":"custom regex rules","running-custom-regex":"Running Custom Regex","running-custom-lint-command":"Running Custom Lint Commands","custom-lint-duplicate-warning":'You cannot run the same command ("{COMMAND_NAME}") as a custom lint rule twice.',"custom-lint-error-message":"Custom Lint Command","disabled-text":"is disabled","run-rule-text":"Running","timing-key-not-found":"timing key '{TIMING_KEY}' does not exist in the timing info list, so it was ignored","milliseconds-abbreviation":"ms","invalid-date-format-error":"The format of the created date '{DATE}' could not be parsed or determined so the created date was left alone in '{FILE_NAME}'","invalid-delimiter-error-message":"delimiter is only allowed to be a single character","missing-footnote-error-message":"Footnote '{FOOTNOTE}' has no corresponding footnote reference before the footnote contents and cannot be processed. Please make sure that all footnotes have a corresponding reference before the content of the footnote.","too-many-footnotes-error-message":"Footnote key '{FOOTNOTE_KEY}' has more than 1 footnote referencing it. Please update the footnotes so that there is only one footnote per footnote key.","wrapper-yaml-error":"error in the YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"unknown error: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"There is no clipboard content.","characters-added":"characters added","characters-removed":"characters removed","copy-to-clipboard-failed":"Failed to copy text to clipboard: "},"all-rules-option":"All","linter-title":"Linter","empty-search-results-text":"No settings match search","warning-text":"Warning","file-backup-text":"Make sure you have backed up your files.","copy-aria-label":"Copy",tabs:{names:{general:"General",custom:"Custom",yaml:"YAML",heading:"Heading",content:"Content",footnote:"Footnote",spacing:"Spacing",paste:"Paste",debug:"Debug"},"default-search-bar-text":"Search all settings",general:{"lint-on-save":{name:"Lint on save",description:"Lint the file on manual save (when `Ctrl + S` is pressed or when `:w` is executed while using vim keybindings)"},"display-message":{name:"Display message on lint",description:"Display the number of characters changed after linting"},"lint-on-file-change":{name:"Lint on File Change",description:"When the a file is closed or a new file is swapped to, the previous file is linted."},"display-lint-on-file-change-message":{name:"Display Lint on File Change Message",description:"Displays a message when `Lint on File Change` occurs"},"folders-to-ignore":{name:"Folders to ignore",description:"Folders to ignore when linting all files or linting on save.","folder-search-placeholder-text":"Folder name","add-input-button-text":"Add another folder to ignore","delete-tooltip":"Delete"},"override-locale":{name:"Override locale",description:"Set this if you want to use a locale different from the default"},"same-as-system-locale":"Same as system ({SYS_LOCALE})","yaml-aliases-section-style":{name:"YAML aliases section style",description:"The style of the YAML aliases section"},"yaml-tags-section-style":{name:"YAML tags section style",description:"The style of the YAML tags section"},"default-escape-character":{name:"Default Escape Character",description:"The default character to use to escape YAML values when a single quote and double quote are not present."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"Remove Unnecessary Escape Characters when in Multi-Line Array Format",description:"Escape characters for multi-line YAML arrays don't need the same escaping as single-line arrays, so when in multi-line format remove extra escapes that are not necessary"},"number-of-dollar-signs-to-indicate-math-block":{name:"Number of Dollar Signs to Indicate Math Block",description:"The amount of dollar signs to consider the math content to be a math block instead of inline math"}},debug:{"log-level":{name:"Log Level",description:"The types of logs that will be allowed to be logged by the service. The default is ERROR."},"linter-config":{name:"Linter Config",description:"The contents of the data.json for the Linter as of the setting page loading"},"log-collection":{name:"Collect logs when linting on save and linting the current file",description:"Goes ahead and collects logs when you `Lint on save` and linting the current file. These logs can be helpful for debugging and create bug reports."},"linter-logs":{name:"Linter Logs",description:"The logs from the last `Lint on save` or the last lint current file run if enabled."}}},options:{"custom-command":{name:"Custom Commands",description:"Custom commands are Obsidian commands that get run after the linter is finished running its regular rules. This means that they do not run before the YAML timestamp logic runs, so they can cause YAML timestamp to be triggered on the next run of the linter. You may only select an Obsidian command once. **_Note that this currently only works on linting the current file._**",warning:"When selecting an option, make sure to select the option either by using the mouse or by hitting the enter key. Other selection methods may not work and only selections of an actual Obsidian command or an empty string will be saved.","add-input-button-text":"Add new command","command-search-placeholder-text":"Obsidian command","move-up-tooltip":"Move up","move-down-tooltip":"Move down","delete-tooltip":"Delete"},"custom-replace":{name:"Custom Regex Replacement",description:"Custom regex replacement can be used to replace anything that matches the find regex with the replacement value. The replace and find values will need to be valid regex values.",warning:"Use this with caution if you do not know regex. Also, please make sure that you do not use lookbehinds in your regex on iOS mobile as that will cause linting to fail since that is not supported on that platform.","add-input-button-text":"Add new regex replacement","regex-to-find-placeholder-text":"regex to find","flags-placeholder-text":"flags","regex-to-replace-placeholder-text":"regex to replace","label-placeholder-text":"label","move-up-tooltip":"Move up","move-down-tooltip":"Move down","delete-tooltip":"Delete"}},rules:{"auto-correct-common-misspellings":{name:"Auto-correct Common Misspellings",description:"Uses a dictionary of common misspellings to automatically convert them to their proper spellings. See [auto-correct map](https://github.com/platers/obsidian-linter/tree/master/src/utils/auto-correct-misspellings.ts) for the full list of auto-corrected words.","ignore-words":{name:"Ignore Words",description:"A comma separated list of lowercased words to ignore when auto-correcting"}},"add-blockquote-indentation-on-paste":{name:"Add Blockquote Indentation on Paste",description:"Adds blockquotes to all but the first line, when the cursor is in a blockquote/callout line during pasting"},"blockquote-style":{name:"Blockquote Style",description:"Makes sure the blockquote style is consistent.",style:{name:"Style",description:"The style used on blockquote indicators"}},"capitalize-headings":{name:"Capitalize Headings",description:"Headings should be formatted with capitalization",style:{name:"Style",description:"The style of capitalization to use"},"ignore-case-words":{name:"Ignore Cased Words",description:"Only apply title case style to words that are all lowercase"},"ignore-words":{name:"Ignore Words",description:"A comma separated list of words to ignore when capitalizing"},"lowercase-words":{name:"Lowercase Words",description:"A comma separated list of words to keep lowercase"}},"compact-yaml":{name:"Compact YAML",description:"Removes leading and trailing blank lines in the YAML front matter.","inner-new-lines":{name:"Inner New Lines",description:"Remove new lines that are not at the start or the end of the YAML"}},"consecutive-blank-lines":{name:"Consecutive blank lines",description:"There should be at most one consecutive blank line."},"convert-bullet-list-markers":{name:"Convert Bullet List Markers",description:"Converts common bullet list marker symbols to markdown list markers."},"convert-spaces-to-tabs":{name:"Convert Spaces to Tabs",description:"Converts leading spaces to tabs.",tabsize:{name:"Tabsize",description:"Number of spaces that will be converted to a tab"}},"emphasis-style":{name:"Emphasis Style",description:"Makes sure the emphasis style is consistent.",style:{name:"Style",description:"The style used to denote emphasized content"}},"empty-line-around-blockquotes":{name:"Empty Line Around Blockquotes",description:"Ensures that there is an empty line around blockquotes unless they start or end a document. **Note: an empty line is either one less level of nesting for blockquotes or a newline character.**"},"empty-line-around-code-fences":{name:"Empty Line Around Code Fences",description:"Ensures that there is an empty line around code fences unless they start or end a document."},"empty-line-around-math-blocks":{name:"Empty Line Around Math Blocks",description:"Ensures that there is an empty line around math blocks using `Number of Dollar Signs to Indicate a Math Block` to determine how many dollar signs indicates a math block for single-line math."},"empty-line-around-tables":{name:"Empty Line Around Tables",description:"Ensures that there is an empty line around github flavored tables unless they start or end a document."},"escape-yaml-special-characters":{name:"Escape YAML Special Characters",description:`Escapes colons with a space after them (: ), single quotes ('), and double quotes (") in YAML.`,"try-to-escape-single-line-arrays":{name:"Try to Escape Single Line Arrays",description:'Tries to escape array values assuming that an array starts with "[", ends with "]", and has items that are delimited by ",".'}},"file-name-heading":{name:"File Name Heading",description:"Inserts the file name as a H1 heading if no H1 heading exists."},"footnote-after-punctuation":{name:"Footnote after Punctuation",description:"Ensures that footnote references are placed after punctuation, not before."},"force-yaml-escape":{name:"Force YAML Escape",description:"Escapes the values for the specified YAML keys.","force-yaml-escape-keys":{name:"Force YAML Escape on Keys",description:"Uses the YAML escape character on the specified YAML keys separated by a new line character if it is not already escaped. Do not use on YAML arrays."}},"format-tags-in-yaml":{name:"Format Tags in YAML",description:"Remove Hashtags from tags in the YAML frontmatter, as they make the tags there invalid."},"format-yaml-array":{name:"Format YAML Array",description:"Allows for the formatting of regular YAML arrays as either multi-line or single-line and `tags` and `aliases` are allowed to have some Obsidian specific YAML formats. **Note: that single string to single-line goes from a single string entry to a single-line array if more than 1 entry is present. The same is true for single string to multi-line except it becomes a multi-line array.**","alias-key":{name:"Format YAML aliases section",description:"Turns on formatting for the YAML aliases section. You should not enable this option alongside the rule `YAML Title Alias` as they may not work well together or they may have different format styles selected causing unexpected results."},"tag-key":{name:"Format YAML tags section",description:"Turns on formatting for the YAML tags section."},"default-array-style":{name:"Default YAML array section style",description:"The style of other YAML arrays that are not `tags`, `aliases` or in `Force key values to be single-line arrays` and `Force key values to be multi-line arrays`"},"default-array-keys":{name:"Format YAML array sections",description:"Turns on formatting for regular YAML arrays"},"force-single-line-array-style":{name:"Force key values to be single-line arrays",description:"Forces the YAML array for the new line separated keys to be in single-line format (leave empty to disable this option)"},"force-multi-line-array-style":{name:"Force key values to be multi-line arrays",description:"Forces the YAML array for the new line separated keys to be in multi-line format (leave empty to disable this option)"}},"header-increment":{name:"Header Increment",description:"Heading levels should only increment by one level at a time","start-at-h2":{name:"Start Header Increment at Heading Level 2",description:"Makes heading level 2 the minimum heading level in a file for header increment and shifts all headings accordingly so they increment starting with a level 2 heading."}},"heading-blank-lines":{name:"Heading blank lines",description:"All headings have a blank line both before and after (except where the heading is at the beginning or end of the document).",bottom:{name:"Bottom",description:"Insert a blank line after headings"},"empty-line-after-yaml":{name:"Empty Line Between YAML and Header",description:"Keep the empty line between the YAML frontmatter and header"}},"headings-start-line":{name:"Headings Start Line",description:"Headings that do not start a line will have their preceding whitespace removed to make sure they get recognized as headers."},"insert-yaml-attributes":{name:"Insert YAML attributes",description:"Inserts the given YAML attributes into the YAML frontmatter. Put each attribute on a single line.","text-to-insert":{name:"Text to insert",description:"Text to insert into the YAML frontmatter"}},"line-break-at-document-end":{name:"Line Break at Document End",description:"Ensures that there is exactly one line break at the end of a document."},"move-footnotes-to-the-bottom":{name:"Move Footnotes to the bottom",description:"Move all footnotes to the bottom of the document."},"move-math-block-indicators-to-their-own-line":{name:"Move Math Block Indicators to Their Own Line",description:"Move all starting and ending math block indicators to their own lines using `Number of Dollar Signs to Indicate a Math Block` to determine how many dollar signs indicates a math block for single-line math."},"move-tags-to-yaml":{name:"Move Tags to YAML",description:"Move all tags to YAML frontmatter of the document.","how-to-handle-existing-tags":{name:"Body tag operation",description:"What to do with non-ignored tags in the body of the file once they have been moved to the frontmatter"},"tags-to-ignore":{name:"Tags to ignore",description:"The tags that will not be moved to the tags array or removed from the body content if `Remove the hashtag from tags in content body` is enabled. Each tag should be on a new line and without the `#`. **Make sure not to include the hashtag in the tag name.**"}},"no-bare-urls":{name:"No Bare URLs",description:"Encloses bare URLs with angle brackets except when enclosed in back ticks, square braces, or single or double quotes.","no-bare-uris":{name:"No Bare URIs",description:"Attempts to enclose bare URIs with angle brackets except when enclosed in back ticks, square braces, or single or double quotes."}},"ordered-list-style":{name:"Ordered List Style",description:"Makes sure that ordered lists follow the style specified. **Note: that 2 spaces or 1 tab is considered to be an indentation level.**","number-style":{name:"Number Style",description:"The number style used in ordered list indicators"},"list-end-style":{name:"Ordered List Indicator End Style",description:"The ending character of an ordered list indicator"}},"paragraph-blank-lines":{name:"Paragraph blank lines",description:"All paragraphs should have exactly one blank line both before and after."},"prevent-double-checklist-indicator-on-paste":{name:"Prevent Double Checklist Indicator on Paste",description:"Removes starting checklist indicator from the text to paste if the line the cursor is on in the file has a checklist indicator"},"prevent-double-list-item-indicator-on-paste":{name:"Prevent Double List Item Indicator on Paste",description:"Removes starting list indicator from the text to paste if the line the cursor is on in the file has a list indicator"},"proper-ellipsis-on-paste":{name:"Proper Ellipsis on Paste",description:"Replaces three consecutive dots with an ellipsis even if they have a space between them in the text to paste"},"proper-ellipsis":{name:"Proper Ellipsis",description:"Replaces three consecutive dots with an ellipsis."},"quote-style":{name:"Quote Style",description:"Updates the quotes in the body content to be updated to the specified single and double quote styles.","single-quote-enabled":{name:"Enable `Single Quote Style`",description:"Specifies that the selected single quote style should be used."},"single-quote-style":{name:"Single Quote Style",description:"The style of single quotes to use."},"double-quote-enabled":{name:"Enable `Double Quote Style`",description:"Specifies that the selected double quote style should be used."},"double-quote-style":{name:"Double Quote Style",description:"The style of double quotes to use."}},"re-index-footnotes":{name:"Re-Index Footnotes",description:"Re-indexes footnote keys and footnote, based on the order of occurrence. **Note: This rule does _not_ work if there is more than one footnote for a key.**"},"remove-consecutive-list-markers":{name:"Remove Consecutive List Markers",description:"Removes consecutive list markers. Useful when copy-pasting list items."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Remove Empty Lines Between List Markers and Checklists",description:"There should not be any empty lines between list markers and checklists."},"remove-empty-list-markers":{name:"Remove Empty List Markers",description:"Removes empty list markers, i.e. list items without content."},"remove-hyphenated-line-breaks":{name:"Remove Hyphenated Line Breaks",description:"Removes hyphenated line breaks. Useful when pasting text from textbooks."},"remove-hyphens-on-paste":{name:"Remove Hyphens on Paste",description:"Removes hyphens from the text to paste"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Remove Leading or Trailing Whitespace on Paste",description:"Removes any leading non-tab whitespace and all trailing whitespace for the text to paste"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Remove Leftover Footnotes from Quote on Paste",description:"Removes any leftover footnote references for the text to paste"},"remove-link-spacing":{name:"Remove link spacing",description:"Removes spacing around link text."},"remove-multiple-blank-lines-on-paste":{name:"Remove Multiple Blank Lines on Paste",description:"Condenses multiple blank lines down into one blank line for the text to paste"},"remove-multiple-spaces":{name:"Remove Multiple Spaces",description:"Removes two or more consecutive spaces. Ignores spaces at the beginning and ending of the line. "},"remove-space-around-characters":{name:"Remove Space around Characters",description:"Ensures that certain characters are not surrounded by whitespace (either single spaces or a tab). **Note: this may causes issues with markdown format in some cases.**","include-fullwidth-forms":{name:"Include Fullwidth Forms",description:'Include Fullwidth Forms Unicode block'},"include-cjk-symbols-and-punctuation":{name:"Include CJK Symbols and Punctuation",description:'Include CJK Symbols and Punctuation Unicode block'},"include-dashes":{name:"Include Dashes",description:"Include en dash (\u2013) and em dash (\u2014)"},"other-symbols":{name:"Other symbols",description:"Other symbols to include"}},"remove-space-before-or-after-characters":{name:"Remove Space Before or After Characters",description:"Removes space before the specified characters and after the specified characters. **Note: this may causes issues with markdown format in some cases.**","characters-to-remove-space-before":{name:"Remove Space Before Characters",description:"Removes space before the specified characters. **Note: using `{` or `}` in the list of characters will unexpectedly affect files as it is used in the ignore syntax behind the scenes.**"},"characters-to-remove-space-after":{name:"Remove Space After Characters",description:"Removes space after the specified characters. **Note: using `{` or `}` in the list of characters will unexpectedly affect files as it is used in the ignore syntax behind the scenes.**"}},"remove-trailing-punctuation-in-heading":{name:"Remove Trailing Punctuation in Heading",description:"Removes the specified punctuation from the end of headings making sure to ignore the semicolon at the end of [HTML entity references](https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references).","punctuation-to-remove":{name:"Trailing Punctuation",description:"The trailing punctuation to remove from the headings in the file."}},"remove-yaml-keys":{name:"Remove YAML Keys",description:"Removes the YAML keys specified","yaml-keys-to-remove":{name:"YAML Keys to Remove",description:"The YAML keys to remove from the YAML frontmatter with or without colons"}},"space-after-list-markers":{name:"Space after list markers",description:"There should be a single space after list markers and checkboxes."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"Space between Chinese Japanese or Korean and English or numbers",description:"Ensures that Chinese, Japanese, or Korean and English or numbers are separated by a single space. Follows these [guidelines](https://github.com/sparanoid/chinese-copywriting-guidelines)"},"strong-style":{name:"Strong Style",description:"Makes sure the strong style is consistent.",style:{name:"Style",description:"The style used to denote strong/bolded content"}},"trailing-spaces":{name:"Trailing spaces",description:"Removes extra spaces after every line.","twp-space-line-break":{name:"Two Space Linebreak",description:'Ignore two spaces followed by a line break ("Two Space Rule").'}},"two-spaces-between-lines-with-content":{name:"Two Spaces Between Lines with Content",description:"Makes sure that two spaces are added to the ends of lines with content continued on the next line for paragraphs, blockquotes, and list items"},"unordered-list-style":{name:"Unordered List Style",description:"Makes sure that unordered lists follow the style specified.","list-style":{name:"List item style",description:"The list item style to use in unordered lists"}},"yaml-key-sort":{name:"YAML Key Sort",description:"Sorts the YAML keys based on the order and priority specified. **Note: may remove blank lines as well.**","yaml-key-priority-sort-order":{name:"YAML Key Priority Sort Order",description:"The order in which to sort keys with one on each line where it sorts in the order found in the list"},"priority-keys-at-start-of-yaml":{name:"Priority Keys at Start of YAML",description:"YAML Key Priority Sort Order is placed at the start of the YAML frontmatter"},"yaml-sort-order-for-other-keys":{name:"YAML Sort Order for Other Keys",description:"The way in which to sort the keys that are not found in the YAML Key Priority Sort Order text area"}},"yaml-timestamp":{name:"YAML Timestamp",description:"Keep track of the date the file was last edited in the YAML front matter. Gets dates from file metadata.","date-created":{name:"Date Created",description:"Insert the file creation date"},"date-created-key":{name:"Date Created Key",description:"Which YAML key to use for creation date"},"force-retention-of-create-value":{name:"Force Date Created Key Value Retention",description:"Reuses the value in the YAML frontmatter for date created instead of the file metadata which is useful for preventing file metadata changes from causing the value to change to a different value."},"date-modified":{name:"Date Modified",description:"Insert the date the file was last modified"},"date-modified-key":{name:"Date Modified Key",description:"Which YAML key to use for modification date"},format:{name:"Format",description:"Moment date format to use (see [Moment format options](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/))"}},"yaml-title-alias":{name:"YAML Title Alias",description:"Inserts the title of the file into the YAML frontmatter's aliases section. Gets the title from the first H1 or filename.","preserve-existing-alias-section-style":{name:"Preserve existing aliases section style",description:"If set, the `YAML aliases section style` setting applies only to the newly created sections"},"keep-alias-that-matches-the-filename":{name:"Keep alias that matches the filename",description:"Such aliases are usually redundant"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"Use the YAML key `linter-yaml-title-alias` to help with filename and heading changes",description:"If set, when the first H1 heading changes or filename if first H1 is not present changes, then the old alias stored in this key will be replaced with the new value instead of just inserting a new entry in the aliases array"}},"yaml-title":{name:"YAML Title",description:"Inserts the title of the file into the YAML frontmatter. Gets the title based on the selected mode.","title-key":{name:"Title Key",description:"Which YAML key to use for title"},mode:{name:"Mode",description:"The method to use to get the title"}}},enums:{"Title Case":"Title Case","ALL CAPS":"ALL CAPS","First letter":"First letter",".":".",")":")",ERROR:"error",TRACE:"trace",DEBUG:"debug",INFO:"info",WARN:"warn",SILENT:"silent",ascending:"ascending",lazy:"lazy",Nothing:"Nothing","Remove hashtag":"Remove hashtag","Remove whole tag":"Remove whole tag",asterisk:"asterisk",underscore:"underscore",consistent:"consistent","-":"-","*":"*","+":"+",space:"space","no space":"no space",None:"None","Ascending Alphabetical":"Ascending Alphabetical","Descending Alphabetical":"Descending Alphabetical","multi-line":"multi-line","single-line":"single-line","single string to single-line":"single string to single-line","single string to multi-line":"single string to multi-line","single string comma delimited":"single string comma delimited","single string space delimited":"single string space delimited","single-line space delimited":"single-line space delimited","first-h1":"First H1","first-h1-or-filename-if-h1-missing":"First H1 or Filename if H1 is Missing",filename:"Filename","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D"}};var id={commands:{"lint-file":{name:"Analizar este archivo","error-message":"Error Analizando un Archivooccuri\xF3 en el Archivo"},"lint-file-unless-ignored":{name:"Analizar este archivo si no es ignorado"},"lint-all-files":{name:"Analizar todos los archivos en la b\xF3veda","error-message":"Error Analizando Todos los Archivos en Archivo","success-message":"Analiz\xF3 todos los archivos","errors-message-singular":"Analiz\xF3 todos los archivos y un error ocurri\xF3.","errors-message-plural":"Analiz\xF3 todos los archivos y {NUM} errores ocurrieron","start-message":"Esto editar\xE1 todos de sus archivos y es possible que introduzca errores","submit-button-text":"Analizar Todo","submit-button-notice-text":"Analizando todos los archivos..."},"lint-all-files-in-folder":{name:"Analizar todos los archivos en esta carpeta","start-message":"Esto editar\xE1 todos de sus archivos en {FOLDER_NAME} incluyendo los archivos que existen en las subcarpetas y es possible que introduzca errores.","submit-button-text":"Analizar Todos los Archivos en {FOLDER_NAME}","submit-button-notice-text":"Analizando todos los archivos en {FOLDER_NAME}...","error-message":"Error Analizando Todos los Archivos en Carpeta en Archivo","success-message":"Analiz\xF3 los {NUM} archivos en {FOLDER_NAME}.","message-singular":"Analiz\xF3 los {NUM} archivos en {FOLDER_NAME} y un error ocurri\xF3.","message-plural":"Analiz\xF3 los {FILE_COUNT} archivos en {FOLDER_NAME} y {ERROR_COUNT} errores ocurrieron."},"paste-as-plain-text":{name:"Pegar como texto sin formato y sin modificaciones"},"lint-file-pop-up-menu-text":{name:"Analizar el archivo"},"lint-folder-pop-up-menu-text":{name:"Analizar la carpeta"}},logs:{"plugin-load":"Cargando el programa adicional","plugin-unload":"Descargando el programa adicional","folder-lint":"Analizando la carpeta ","linter-run":"Usando linter","paste-link-warning":"abort\xF3 lint de pagar porque el contento del portapapeles es un enlace y no lo hizo para evitar conflictos con otros programas adicionales que modifican lo que hace el pegar.","see-console":"Consulte la consola para obtener m\xE1s detalles.","unknown-error":"Se ha producido un error desconocido durante el linting.","moment-locale-not-found":"Intentando cambiar la zona de Moment.js a {MOMENT_LOCALE}, el resulto fue {CURRENT_LOCALE}","file-change-lint-message-start":"Analiz\xF3","pre-rules":"Las reglas antes de las reglas normales","post-rules":"las reglas despu\xE9s de las reglas normales","rule-running":"usando las reglas","custom-regex":"las reglas regex personalizadas","running-custom-regex":"Usando regex personalizada","running-custom-lint-command":"Usando comandos de lint personalizados","custom-lint-duplicate-warning":'No se puede usar el mismo comando ("{COMMAND_NAME}") dos veces como un comando de lint.',"custom-lint-error-message":"El commando de lint personalizado","disabled-text":"es inhabilitado","run-rule-text":"Usando","timing-key-not-found":"clave de ritmo '{TIMING_KEY}' no ya existe en la lista de claves de ritmo y fue ignorado por eso","milliseconds-abbreviation":"ms","invalid-date-format-error":"No se pudo analizar ni identificar el formato de la fech de creaci\xF3n `{DATE}` entonces la fecha de creaci\xF3n se dej\xF3 sola en `{FILE_NAME}`","invalid-delimiter-error-message":"El delimitador solo puede ser de un solo car\xE1cter","missing-footnote-error-message":"La nota al pie `{FOOTNOTE}` no tiene ninguna referencia de nota al pie correspondiente antes del contenido de la nota al pie y no se puede procesar. Aseg\xFArese de que todas las notas a pie de p\xE1gina tengan una referencia correspondiente antes del contenido de la nota al pie de p\xE1gina.","too-many-footnotes-error-message":"La clave de nota al pie '{FOOTNOTE_KEY}' tiene m\xE1s de 1 nota al pie que hace referencia a ella. Actualice las notas al pie para que solo haya una nota al pie por clave de nota al pie.","wrapper-yaml-error":"hubo un error en el YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"huno un error desconocido: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"No hay contenido del portapapeles.","characters-added":"Caracteres a\xF1adidos","characters-removed":"Caracteres eliminados"},"all-rules-option":"Todo","linter-title":"Linter","empty-search-results-text":"No hay configuraci\xF3n que coincida con la b\xFAsqueda","warning-text":"Advertencia","file-backup-text":"Aseg\xFArese de haber realizado una copia de seguridad de sus archivos.","copy-aria-label":"Copiar",tabs:{names:{general:"General",custom:"Personalizado",yaml:"YAML",heading:"Encabezado",content:"Contenido",footnote:"Notas al pie",spacing:"Espacio en blanco",paste:"Pegar",debug:"Depurar"},"default-search-bar-text":"Buscar en todos los ajustes",general:{"lint-on-save":{name:"Analizar en guardar",description:"Analizar el archivo en el guardado manual (cuando se presiona `Ctrl + S` o cuando se ejecuta `:w` mientras se usan combinaciones de claves de vim)"},"display-message":{name:"Mostrar mensaje en analizar",description:"Mostrar el n\xFAmero de caracteres modificados despu\xE9s de analizar"},"folders-to-ignore":{name:"Carpetas para omitir",description:"Carpetas que se deben omitir al analizar todos los archivos o al guardar en l\xEDnea.","folder-search-placeholder-text":"El nombre de la carpeta","add-input-button-text":"Agregar otra carpeta para ignorar","delete-tooltip":"Borrar"},"lint-on-file-change":{name:"Analizar archivo en cambiar",description:"Cuando se cierra un archivo o se cambia a un nuevo archivo, el archivo anterior se analiza."},"display-lint-on-file-change-message":{name:"Mostrar mensaje en cambiar el archivo",description:"Muestra un mensaje cuando se produce `Analizar archivo en cambiar`"},"override-locale":{name:"Anular configuraci\xF3n regional",description:"Establezca esta opci\xF3n si desea utilizar una configuraci\xF3n regional diferente de la predeterminada"},"same-as-system-locale":"Igual que el sistema ({SYS_LOCALE})","yaml-aliases-section-style":{name:"Estilo de secci\xF3n de alias de YAML",description:"El estilo de la secci\xF3n de alias de YAML"},"yaml-tags-section-style":{name:"Estilo de secci\xF3n de etiquetas de YAML",description:"El estilo de la secci\xF3n de etiquetas de YAML"},"default-escape-character":{name:"Car\xE1cter de escape predeterminado",description:"El car\xE1cter predeterminado que se va a usar para escapar de los valores YAML cuando no hay comillas simples y comillas dobles."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"Eliminaci\xF3n de caracteres de escape innecesarios cuando est\xE1 en formato de matriz multil\xEDnea",description:"Los caracteres de escape para matrices de YAML multil\xEDnea no necesitan el mismo escape que las matrices de una sola l\xEDnea, por lo que cuando est\xE1n en formato multil\xEDnea, elimine los escapes adicionales que no son necesarios"},"number-of-dollar-signs-to-indicate-math-block":{name:"N\xFAmero de signos de d\xF3lar para indicar el bloque matem\xE1tico",description:"La cantidad de signos de d\xF3lar para considerar el contenido matem\xE1tico como un bloque matem\xE1tico en lugar de matem\xE1ticas en l\xEDnea"}},debug:{"log-level":{name:"Nivel de registro",description:"Los tipos de registros que el servicio permitir\xE1 registrar. El valor predeterminado es error."},"linter-config":{name:"Configuraci\xF3n de Linter",description:"El contenido del archivo data.json para Linter a partir de la carga de la p\xE1gina de configuraci\xF3n"},"log-collection":{name:"Recopilar registros al activar y desactivar el archivo actual",description:"Contin\xFAa y recopila registros cuando `Analizar en guardar` y analizar el archivo actual. Estos registros pueden ser \xFAtiles para depurar y crear informes de errores."},"linter-logs":{name:"Registros de Linter",description:"Los registros del \xFAltimo `Analizar en guardar` o del \xFAltimo archivo actual de analizar se ejecutan si est\xE1n habilitados."}}},options:{"custom-command":{name:"Comandos personalizados",description:"Los comandos personalizados son comandos de Obsidian que se ejecutan despu\xE9s de que Linter termina de ejecutar sus reglas regulares. Esto significa que no se ejecutan antes de que se ejecute la l\xF3gica de marca de tiempo YAML, por lo que pueden hacer que la marca de tiempo de YAML se active en la siguiente ejecuci\xF3n del Linter. Solo puede seleccionar un comando de Obsidian una vez. **_Note que esto actualmente solo funciona para analizar el archivo actual._**",warning:"Al seleccionar una opci\xF3n, aseg\xFArese de seleccionar la opci\xF3n usando el rat\xF3n o presionando la clave Intro. Es posible que otros m\xE9todos de selecci\xF3n no funcionen y solo se guardar\xE1n las selecciones de un comando de Obsidian real o una cadena vac\xEDa.","add-input-button-text":"Agregar nuevo comando","command-search-placeholder-text":"Comando de Obsidian","move-up-tooltip":"Desplazar hacia arriba","move-down-tooltip":"Desplazar hacia abajo","delete-tooltip":"Borrar"},"custom-replace":{name:"Reemplazo regex personalizado",description:"El reemplazo de regex personalizado se puede usar para reemplazar cualquier cosa que coincida con el valor de b\xFAsqueda de regex con el valor de reemplazo. Los valores de reemplazo y b\xFAsqueda deber\xE1n ser valores regex v\xE1lidos.",warning:"Use esto con precauci\xF3n si no conoce regex. Adem\xE1s, aseg\xFArese de no usar lookbehinds en su regex en dispositivos m\xF3viles iOS, ya que eso har\xE1 que falle analizar ya que no es compatible con esa plataforma.","add-input-button-text":"Agregar nuevo reemplazo de regex","regex-to-find-placeholder-text":"Regex para encontrar","flags-placeholder-text":"Marcas","regex-to-replace-placeholder-text":"Regex para reemplazar","label-placeholder-text":"etiqueta","move-up-tooltip":"Desplazar hacia arriba","move-down-tooltip":"Desplazar hacia abajo","delete-tooltip":"Borrar"}},rules:{"auto-correct-common-misspellings":{name:"Correcci\xF3n autom\xE1tica de errores ortogr\xE1ficos comunes",description:"Utiliza un diccionario de errores ortogr\xE1ficos comunes para convertirlos autom\xE1ticamente a su ortograf\xEDa correcta. Consulte [mapa de autocorrecci\xF3n](https://github.com/platers/obsidian-linter/tree/master/src/utils/auto-correct-misspellings.ts) para obtener la lista completa de palabras corregidas autom\xE1ticamente.","ignore-words":{name:"Ignorar palabras",description:"Una lista separada por comas de palabras en min\xFAsculas para ignorar al corregir autom\xE1ticamente"}},"add-blockquote-indentation-on-paste":{name:"Agregar sangr\xEDa de blockquote en pegar",description:"Agrega blockquotes a todas menos a la primera l\xEDnea, cuando el cursor est\xE1 en una l\xEDnea blockquote/callout durante el pegado"},"blockquote-style":{name:"Estilo de cotizaci\xF3n en bloque",description:"Se asegura de que el estilo de la cita en bloque sea consistente.",style:{name:"Estilo",description:"El estilo utilizado en los indicadores de cotizaci\xF3n en bloque"}},"capitalize-headings":{name:"Poner may\xFAsculas en los encabezados",description:"Los encabezados deben estar formateados con may\xFAsculas",style:{name:"Estilo",description:"El estilo de may\xFAsculas que se va a utilizar"},"ignore-case-words":{name:"Ignorar palabras en may\xFAsculas y min\xFAsculas",description:"Solo aplique el estilo de may\xFAsculas y min\xFAsculas a las palabras que est\xE9n todas en min\xFAsculas"},"ignore-words":{name:"Ignorar palabras",description:"Una lista de palabras separadas por comas para ignorar al poner en may\xFAsculas"},"lowercase-words":{name:"Palabras en min\xFAsculas",description:"Una lista de palabras separadas por comas para mantener min\xFAsculas"}},"compact-yaml":{name:"YAML compacto",description:"Elimina las l\xEDneas en blanco iniciales y finales en la materia frontal de YAML.","inner-new-lines":{name:"Nuevas l\xEDneas internas",description:"Quitar nuevas l\xEDneas que no est\xE9n al principio o al final del YAML"}},"consecutive-blank-lines":{name:"L\xEDneas en blanco consecutivas",description:"Debe haber como m\xE1ximo una l\xEDnea en blanco consecutiva."},"convert-bullet-list-markers":{name:"Convertir marcadores de lista de vi\xF1etas",description:"Convierte s\xEDmbolos de marcador de lista de vi\xF1etas comunes en marcadores de lista de rebajas."},"convert-spaces-to-tabs":{name:"Convertir espacios en pesta\xF1as",description:"Convierte los espacios iniciales en pesta\xF1as.",tabsize:{name:"Tama\xF1o de la pesta\xF1a",description:"N\xFAmero de espacios que se convertir\xE1n en una pesta\xF1a"}},"emphasis-style":{name:"Estilo de \xE9nfasis",description:"Se asegura de que el estilo de \xE9nfasis sea consistente.",style:{name:"Estilo",description:"El estilo utilizado para denotar el contenido enfatizado"}},"empty-line-around-blockquotes":{name:"L\xEDnea vac\xEDa alrededor de blockquotes",description:"Asegura que haya una l\xEDnea vac\xEDa alrededor de blockquotes a menos que inicien o finalicen un documento. **Tenga en cuenta que una l\xEDnea vac\xEDa es un nivel menos de anidamiento para blockquotes o un car\xE1cter de nueva l\xEDnea.**"},"empty-line-around-code-fences":{name:"L\xEDnea vac\xEDa alrededor de las vallas de c\xF3digo",description:"Garantiza que haya una l\xEDnea vac\xEDa alrededor de las vallas de c\xF3digo a menos que inicien o finalicen un documento."},"empty-line-around-math-blocks":{name:"L\xEDnea vac\xEDa alrededor de los bloques matem\xE1ticos",description:"Asegura que haya una l\xEDnea vac\xEDa alrededor de los bloques matem\xE1ticos usando `N\xFAmero de signos de d\xF3lar para indicar un bloque matem\xE1tico` para determinar cu\xE1ntos signos de d\xF3lar indica un bloque matem\xE1tico para matem\xE1ticas de una sola l\xEDnea."},"empty-line-around-tables":{name:"L\xEDnea vac\xEDa alrededor de las tablas",description:"Asegura que haya una l\xEDnea vac\xEDa alrededor de las tablas con sabor a github a menos que inicien o finalicen un documento."},"escape-yaml-special-characters":{name:"Evitar los caracteres especiales de YAML",description:`Escapa dos puntos con un espacio despu\xE9s de ellos (:), comillas simples (') y comillas dobles (") en YAML.`,"try-to-escape-single-line-arrays":{name:"Intente escapar las matrices de una sola l\xEDnea",description:'Intenta escapar de los valores de matriz suponiendo que una matriz comienza con "[", termina con "]" y tiene elementos que est\xE1n delimitados por ",".'}},"file-name-heading":{name:"Encabezado de nombre de archivo",description:"Inserta el nombre de archivo como un encabezado H1 si no existe ning\xFAn encabezado H1."},"footnote-after-punctuation":{name:"Nota al pie despu\xE9s de la puntuaci\xF3n",description:"Asegura que las referencias de notas al pie se coloquen despu\xE9s de la puntuaci\xF3n, no antes."},"force-yaml-escape":{name:"Forzar escape de YAML",description:"Escapa los valores de las claves YAML especificadas.","force-yaml-escape-keys":{name:"Forzar escape de YAML en las claves",description:"Utiliza el car\xE1cter de escape de YAML en las claves de YAML especificadas separadas por un nuevo car\xE1cter de l\xEDnea si a\xFAn no est\xE1 escapado. No lo use en matrices de YAML."}},"format-tags-in-yaml":{name:"Dar formato a las etiquetas de formato en YAML",description:"Elimine los hashtags de las etiquetas en el frontmatter del YAML, ya que hacen que las etiquetas no sean v\xE1lidas."},"format-yaml-array":{name:"Dar formato a las matrices de YAML",description:"Permite el formato de matrices regulares de YAML como multil\xEDnea o de una sola l\xEDnea y las `etiquetas` y `alias` pueden tener algunos formatos espec\xEDficos de YAML de Obsidian. Tenga en cuenta que una sola cadena a una sola l\xEDnea pasa de una sola entrada de cadena a una matriz de una sola l\xEDnea si hay m\xE1s de 1 entrada presente. Lo mismo es cierto para una sola cadena a multil\xEDnea, excepto que se convierte en una matriz multil\xEDnea.","alias-key":{name:"Dar formato a la secci\xF3n de alias de YAML",description:"Activa el formato para la secci\xF3n de alias YAML. No debe habilitar esta opci\xF3n junto con la regla `Alias de t\xEDtulo YAML`, ya que es posible que no funcionen bien juntos o que tengan diferentes estilos de formato seleccionados que causen resultados inesperados."},"tag-key":{name:"Dar formato a la secci\xF3n de etiquetas de YAML",description:"Activa el formato para la secci\xF3n de etiquetas de YAML."},"default-array-style":{name:"Estilo de secci\xF3n de matriz predeterminado de YAML",description:"El estilo de otras matrices de YAML que no son `etiquetas`, `alias` o en `Forzar valores de clave para que sean matrices de una sola l\xEDnea` y `Forzar valores de clave para que sean matrices multil\xEDnea`"},"default-array-keys":{name:"Dar formato a las secciones de matrices de YAML",description:"Activa el formato para matrices normales de YAML"},"force-single-line-array-style":{name:"Forzar que los valores de clave sean matrices de una sola l\xEDnea",description:"Fuerza la matriz de YAML para que las nuevas claves separadas por l\xEDnea est\xE9n en formato de una sola l\xEDnea (deje vac\xEDo para deshabilitar esta opci\xF3n)"},"force-multi-line-array-style":{name:"Forzar que los valores de las claves sean matrices multil\xEDneas",description:"Fuerza la matriz de YAML para que las nuevas claves separadas por l\xEDnea est\xE9n en formato multil\xEDnea (deje vac\xEDa para deshabilitar esta opci\xF3n)"}},"header-increment":{name:"Incremento de encabezado",description:"Los niveles de encabezado solo deben aumentar en un nivel a la vez","start-at-h2":{name:"Iniciar el incremento de encabezado en el nivel de encabezado 2",description:"Hace que el nivel de encabezado 2 sea el nivel de t\xEDtulo m\xEDnimo en un archivo para el incremento de encabezado y desplaza todos los encabezados en consecuencia para que se incrementen a partir de un encabezado de nivel 2."}},"heading-blank-lines":{name:"L\xEDneas en blanco de encabezado",description:"Todos los encabezados tienen una l\xEDnea en blanco antes y despu\xE9s (excepto cuando el encabezado est\xE1 al principio o al final del documento).",bottom:{name:"Abajo",description:"Insertar una l\xEDnea en blanco despu\xE9s de los encabezados"},"empty-line-after-yaml":{name:"L\xEDnea vac\xEDa entre el YAML y el encabezado",description:"Mantenga la l\xEDnea vac\xEDa entre el frontmatter del YAML y el encabezado"}},"headings-start-line":{name:"Comenzar los encabezados al principio de la l\xEDnea",description:"Los encabezados que no inician una l\xEDnea tendr\xE1n su espacio en blanco anterior eliminado para asegurarse de que se reconozcan como encabezados."},"insert-yaml-attributes":{name:"Insertar atributos de YAML",description:"Inserta los atributos especificados de YAML en el frontmatter del YAML. Coloque cada atributo en una sola l\xEDnea.","text-to-insert":{name:"Texto a insertar",description:"Texto para insertar en el frontmatter del YAML"}},"line-break-at-document-end":{name:"Salto de l\xEDnea al final del documento",description:"Asegura que haya exactamente un salto de l\xEDnea al final de un documento."},"move-footnotes-to-the-bottom":{name:"Mover las notas al pie a la parte inferior",description:"Mueva todas las notas al pie de p\xE1gina a la parte inferior del documento."},"move-math-block-indicators-to-their-own-line":{name:"Mover los indicadores de bloques matem\xE1ticos a su propia l\xEDnea",description:"Mueva todos los indicadores de bloques matem\xE1ticos iniciales y finales a sus propias l\xEDneas usando `N\xFAmero de signos de d\xF3lar para indicar un bloque matem\xE1tico` para determinar cu\xE1ntos signos de d\xF3lar indica un bloque matem\xE1tico para matem\xE1ticas de una sola l\xEDnea."},"move-tags-to-yaml":{name:"Mover etiquetas a YAML",description:"Mueva todas las etiquetas al frontmatter del YAML del documento.","how-to-handle-existing-tags":{name:"Operaci\xF3n de etiqueta corporal",description:"Lo qur se debe hacer con las etiquetas no ignoradas en el cuerpo del archivo una vez que se han movido al frontmatter"},"tags-to-ignore":{name:"Etiquetas para omitir",description:"Las etiquetas que no se mover\xE1n a la matriz de etiquetas ni se eliminar\xE1n del contenido del cuerpo si est\xE1 habilitado `Eliminar el hashtag de las etiquetas en el cuerpo del contenido`. Cada etiqueta debe estar en una nueva l\xEDnea y sin el `#`. **Aseg\xFArese de no incluir el hashtag en el nombre de la etiqueta.**"}},"no-bare-urls":{name:"Sin URL desnuda",description:"Encierra las direcciones URL desnudas con corchetes angulares, excepto cuando est\xE1n encerradas en marcas traseras, llaves cuadradas o comillas simples o dobles.","no-bare-uris":{name:"Sin URI desnuda",description:"Encierra las direcciones URI desnudas con corchetes angulares, excepto cuando est\xE1n encerradas en marcas traseras, llaves cuadradas o comillas simples o dobles."}},"ordered-list-style":{name:"Estilo de lista ordenada",description:"Se asegura de que las listas ordenadas siguen el estilo especificado. Tenga en cuenta que 2 espacios o 1 tabulaci\xF3n se considera un nivel de sangr\xEDa.","number-style":{name:"Estilo num\xE9rico",description:"El estilo num\xE9rico utilizado en los indicadores de lista ordenada"},"list-end-style":{name:"Estilo final del indicador de lista ordenada",description:"El car\xE1cter final de un indicador de lista ordenada"}},"paragraph-blank-lines":{name:"L\xEDneas en blanco del p\xE1rrafo",description:"Todos los p\xE1rrafos deben tener exactamente una l\xEDnea en blanco antes y despu\xE9s."},"prevent-double-checklist-indicator-on-paste":{name:"Evitar el indicador de doble lista de verificaci\xF3n en pegar",description:"Elimina el indicador de lista de verificaci\xF3n inicial del texto para pegar si la l\xEDnea en la que se encuentra el cursor en el archivo tiene un indicador de lista de verificaci\xF3n"},"prevent-double-list-item-indicator-on-paste":{name:"Prevenir el indicador de elemento de lista doble al pegar",description:"Elimina el indicador de lista inicial del texto para pegar si la l\xEDnea en la que se encuentra el cursor en el archivo tiene un indicador de lista"},"proper-ellipsis-on-paste":{name:"Puntos suspensivos adecuados al pegar",description:"Reemplaza tres puntos consecutivos por puntos suspensivos aunque tengan un espacio entre ellos en el texto a pegar"},"proper-ellipsis":{name:"Puntos suspensivos propios",description:"Reemplaza tres puntos consecutivos con puntos suspensivos."},"quote-style":{name:"Estilo de cotizaci\xF3n",description:"Actualiza las comillas en el contenido del cuerpo para que se actualicen a los estilos de comillas simples y dobles especificados.","single-quote-enabled":{name:"Habilitar `Estilo de comillas simples`",description:"Especifica que se debe utilizar el estilo de comillas simples seleccionado."},"single-quote-style":{name:"Estilo de comillas simples",description:"El estilo de las comillas simples a utilizar."},"double-quote-enabled":{name:"Habilitar `Estilo de comillas dobles`",description:"Especifica que se debe utilizar el estilo de comillas dobles seleccionado."},"double-quote-style":{name:"Estilo de comillas dobles",description:"El estilo de comillas dobles a utilizar."}},"re-index-footnotes":{name:"Volver a indexar notas al pie",description:"Vuelve a indexar las notas al pie de p\xE1gina y las notas al pie, seg\xFAn el orden de aparici\xF3n (NOTA: esta regla *no* funciona si hay m\xE1s de una nota al pie para una clave)."},"remove-consecutive-list-markers":{name:"Eliminar marcadores de lista consecutiva",description:"Elimina marcadores de lista consecutivos. \xDAtil al copiar y pegar elementos de la lista."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Eliminar l\xEDneas vac\xEDas entre marcadores de lista y listas de verificaci\xF3n",description:"No debe haber l\xEDneas vac\xEDas entre los marcadores de lista y las listas de verificaci\xF3n."},"remove-empty-list-markers":{name:"Eliminar marcadores de lista vac\xEDa",description:"Elimina marcadores de listas vac\xEDas, es decir, lista de elementos sin contenido."},"remove-hyphenated-line-breaks":{name:"Eliminar saltos de l\xEDnea con gui\xF3n",description:"Elimina los saltos de l\xEDnea con gui\xF3n. \xDAtil al pegar texto de libros de texto."},"remove-hyphens-on-paste":{name:"Eliminar guiones al pegar",description:"Elimina guiones del texto al pegar"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Eliminar espacios en blanco iniciales o finales al pegar",description:"Elimina cualquier espacio en blanco inicial que no sea una pesta\xF1a y todos los espacios en blanco finales para que el texto se pegue"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Eliminar las notas al pie sobrantes de la cita al pegar",description:"Elimina las referencias de notas al pie sobrantes para que el texto se pegue"},"remove-link-spacing":{name:"Quitar el espacio entre enlaces",description:"Elimina el espacio alrededor del texto del enlace."},"remove-multiple-blank-lines-on-paste":{name:"Eliminar varias l\xEDneas en blanco al pegar",description:"Condensa varias l\xEDneas en blanco en una l\xEDnea en blanco para que el texto se pegue"},"remove-multiple-spaces":{name:"Quitar varios espacios",description:"Elimina dos o m\xE1s espacios consecutivos. Ignora los espacios al principio y al final de la l\xEDnea."},"remove-space-around-characters":{name:"Quitar el espacio alrededor de los caracteres",description:"Garantiza que determinados caracteres no est\xE9n rodeados de espacios en blanco (ya sean espacios individuales o tabulaciones). Tenga en cuenta que esto puede causar problemas con el formato de descuento en algunos casos.","include-fullwidth-forms":{name:"Incluir formularios de ancho completo",description:'Incluir bloque Unicode de formularios de ancho completo'},"include-cjk-symbols-and-punctuation":{name:"Incluir s\xEDmbolos de CJK y puntuaci\xF3n",description:'Incluir Bloque Unicode de s\xEDmbolos y puntuaci\xF3n de CJK'},"include-dashes":{name:"Incluir guiones",description:"Incluir gui\xF3n corto (\u2013) y gui\xF3n largo (\u2014)"},"other-symbols":{name:"Otros s\xEDmbolos",description:"Otros s\xEDmbolos para incluir"}},"remove-space-before-or-after-characters":{name:"Quitar el espacio antes o despu\xE9s de los caracteres",description:"Elimina el espacio antes de los caracteres especificados y despu\xE9s de los caracteres especificados. Tenga en cuenta que esto puede causar problemas con el formato de descuento en algunos casos.","characters-to-remove-space-before":{name:"Eliminar espacio antes de los caracteres",description:"Elimina el espacio antes de los caracteres especificados. **Nota: el uso de `{` o `}` en la lista de caracteres afectar\xE1 inesperadamente a los archivos, ya que se usa en la sintaxis de ignorar en segundo plano.**"},"characters-to-remove-space-after":{name:"Eliminar espacio despu\xE9s de los caracteres",description:"Elimina el espacio despu\xE9s de los caracteres especificados. **Nota: el uso de `{` o `}` en la lista de caracteres afectar\xE1 inesperadamente a los archivos, ya que se usa en la sintaxis de ignorar en segundo plano.**"}},"remove-trailing-punctuation-in-heading":{name:"Eliminar la puntuaci\xF3n final en el encabezado",description:"Elimina la puntuaci\xF3n especificada al final de los encabezados, asegur\xE1ndose de ignorar el punto y coma al final de [referencias de entidades de HTML](https://es.wikipedia.org/wiki/Anexo:Referencias_a_entidades_de_caracteres_XML_y_HTML).","punctuation-to-remove":{name:"Puntuaci\xF3n final",description:"La puntuaci\xF3n final que se eliminar\xE1 de los encabezados del archivo."}},"remove-yaml-keys":{name:"Eliminar claves de YAML",description:"Elimina las claves especificadas de YAML","yaml-keys-to-remove":{name:"Claves de YAML para eliminar",description:"Las claves de YAML para eliminar del frontmatter del YAML con o sin dos puntos"}},"space-after-list-markers":{name:"Espacio despu\xE9s de los marcadores de lista",description:"Debe haber un solo espacio despu\xE9s de los marcadores de lista y las casillas de verificaci\xF3n."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"Espacio entre chino japon\xE9s o coreano e ingl\xE9s o n\xFAmeros",description:"Garantiza que el chino, el japon\xE9s o el coreano y el ingl\xE9s o los n\xFAmeros est\xE9n separados por un solo espacio. Sigue estas [directrices](https://github.com/sparanoid/chinese-copywriting-guidelines)"},"strong-style":{name:"Estilo fuerte",description:"Se asegura de que el estilo fuerte sea consistente.",style:{name:"Estilo",description:"El estilo utilizado para denotar contenido fuerte/en negrita"}},"trailing-spaces":{name:"Espacios finales",description:"Elimina espacios adicionales despu\xE9s de cada l\xEDnea.","twp-space-line-break":{name:"Salto de l\xEDnea de dos espacios",description:'Ignore dos espacios seguidos de un salto de l\xEDnea ("Regla de dos espacios").'}},"two-spaces-between-lines-with-content":{name:"Dos espacios entre l\xEDneas con contenido",description:"Se asegura de que se agreguen dos espacios al final de las l\xEDneas con contenido que contin\xFAa en la siguiente l\xEDnea para p\xE1rrafos, comillas y elementos de lista"},"unordered-list-style":{name:"Estilo de lista desordenada",description:"Se asegura de que las listas desordenadas sigan el estilo especificado.","list-style":{name:"Estilo de elemento de lista",description:"El estilo de elemento de lista para usar en listas desordenadas"}},"yaml-key-sort":{name:"Clasificaci\xF3n de clave de YAML",description:"Ordena las claves de YAML seg\xFAn el orden y la prioridad especificados. Nota: tambi\xE9n puede eliminar las l\xEDneas en blanco.","yaml-key-priority-sort-order":{name:"Orden de clasificaci\xF3n de prioridad de clave de YAML",description:"El orden en el que se ordenan las claves con una en cada l\xEDnea donde se ordena en el orden que se encuentra en la lista"},"priority-keys-at-start-of-yaml":{name:"Claves de prioridad al inicio del YAML",description:"El orden de clasificaci\xF3n de prioridad clave de YAML se coloca al comienzo del frontmatter del YAML"},"yaml-sort-order-for-other-keys":{name:"Orden de clasificaci\xF3n de YAML para otras claves",description:"La forma en que ordenar las claves que no se encuentran en el \xE1rea de texto `Orden de clasificaci\xF3n de prioridad de clave de YAML`"}},"yaml-timestamp":{name:"Marca de tiempo de YAML",description:"Lleve un registro de la fecha en que se edit\xF3 el archivo por \xFAltima vez en el frente del YAML. Obtiene las fechas de los metadatos del archivo.","date-created":{name:"Fecha de creaci\xF3n",description:"Inserte la fecha de creaci\xF3n del archivo"},"date-created-key":{name:"Clave de fecha de creaci\xF3n",description:"La clave de YAML para usar para la fecha de creaci\xF3n"},"force-retention-of-create-value":{name:"Forzar la fecha de creaci\xF3n de la retenci\xF3n del valor clave",description:"Reutiliza el valor en el frontmatter del YAML para la fecha de creaci\xF3n en lugar de los metadatos del archivo, lo que es \xFAtil para evitar que los cambios en los metadatos del archivo provoquen que el valor cambie a un valor diferente."},"date-modified":{name:"Fecha modificada",description:"Inserte la fecha en que se modific\xF3 el archivo por \xFAltima vez"},"date-modified-key":{name:"Clave de fecha modificada",description:"La clave de YAML para usar para la fecha de modificaci\xF3n"},format:{name:"Formato",description:"Formato de fecha de Moment a usar (ver [Opciones de formato de Moment](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/))"}},"yaml-title-alias":{name:"Alias de t\xEDtulo de YAML",description:"Inserta el t\xEDtulo del archivo en la secci\xF3n de alias de YAML frontmatter. Obtiene el t\xEDtulo del primer H1 o nombre de archivo.","preserve-existing-alias-section-style":{name:"Conservar el estilo de secci\xF3n de alias existente",description:"Si se establece, la configuraci\xF3n `Estilo de secci\xF3n de alias de YAML` se aplica solo a las secciones reci\xE9n creadas"},"keep-alias-that-matches-the-filename":{name:"Mantenga el alias que coincida con el nombre del archivo",description:"Estos alias suelen ser redundantes."},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"Use la clave de YAML `linter-yaml-title-alias` para ayudar con los cambios de nombre de archivo y encabezado",description:"Si se establece, cuando cambia el primer encabezado H1 o cambia el nombre de archivo si el primer H1 no est\xE1 presente, el alias anterior almacenado en esta clave se reemplazar\xE1 con el nuevo valor en lugar de simplemente insertar una nueva entrada en la matriz de alias."}},"yaml-title":{name:"T\xEDtulo de YAML",description:"Inserta el t\xEDtulo del archivo en el frontmatter de YAML. Obtiene el t\xEDtulo seg\xFAn el modo seleccionado.","title-key":{name:"Clave de t\xEDtulo",description:"La clave de YAML para usar para el t\xEDtulo"},mode:{name:"Modo",description:"El m\xE9todo a utilizar para obtener el t\xEDtulo"}}},enums:{"Title Case":"Titulo del Caso","ALL CAPS":"TODO MAY\xDASCULAS","First letter":"Primera letra",".":".",")":")",ERROR:"error",TRACE:"trazar",DEBUG:"depurar",INFO:"informaci\xF3n",WARN:"advertencia",SILENT:"silencio",ascending:"ascendente",lazy:"perezoso",Nothing:"nada","Remove hashtag":"Remove hashtag","Remove whole tag":"Remove whole tag",asterisk:"asterisco",underscore:"guion bajo",consistent:"congruente","-":"-","*":"*","+":"+",space:"espacio","no space":"sin espacio",None:"nada","Ascending Alphabetical":"Ascendente alfab\xE9tico","Descending Alphabetical":"Descendiente alfab\xE9tico","multi-line":"multil\xEDnea","single-line":"linea sola","single string to single-line":"una sola cadena a una sola l\xEDnea","single string to multi-line":"cadena \xFAnica a multil\xEDnea","single string comma delimited":"cadena \xFAnica delimitada por comas","single string space delimited":"espacio de una sola cadena delimitado","single-line space delimited":"espacio de una sola l\xEDnea delimitado","first-h1":"primer encabezado de nivel 1","first-h1-or-filename-if-h1-missing":"primer encabezado de nivel 1 o nombre de archivo si falta el encabezado de primer nivel 1",filename:"nombre del archivo","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D"}};var td={};var nd={};var rd={};var ad={};var sd={};var od={};var ld={};var cd={};var dd={};var ud={};var pd={};var md={};var gd={};var hd={};var fd={commands:{"lint-file":{name:"Ge\xE7erli dosyay\u0131 lintle","error-message":"Dosyada Lintleme Hatas\u0131"},"lint-file-unless-ignored":{name:"Yoksay\u0131lmad\u0131k\xE7a ge\xE7erli dosyay\u0131 lintle"},"lint-all-files":{name:"Kasadaki t\xFCm dosyalar\u0131 lintle","error-message":"Dosyada T\xFCm Dosyalar\u0131 Lintleme Hatas\u0131","success-message":"T\xFCm dosyalar lintlendi","errors-message-singular":"T\xFCm dosyalar lintlendi ve 1 hata vard\u0131.","errors-message-plural":"T\xFCm dosyalar lintlendi ve {NUM} hata vard\u0131.","start-message":"Bu, t\xFCm dosyalar\u0131n\u0131z\u0131 d\xFCzenler ve hatalara yol a\xE7abilir.","submit-button-text":"T\xFCm\xFCn\xFC Lintle","submit-button-notice-text":"T\xFCm dosyalar lintleniyor..."},"lint-all-files-in-folder":{name:"Ge\xE7erli klas\xF6rdeki t\xFCm dosyalar\u0131 lintle","start-message":"Bu, {FOLDER_NAME} dahilindeki t\xFCm dosyalar\u0131n\u0131z\u0131 ve alt klas\xF6rlerini d\xFCzenler ve hatalara yol a\xE7abilir.","submit-button-text":"{FOLDER_NAME} i\xE7indeki T\xFCm Dosyalar\u0131 Lintle","submit-button-notice-text":"{FOLDER_NAME} i\xE7indeki t\xFCm dosyalar lintleniyor...","error-message":"Klas\xF6rdeki T\xFCm Dosyalar\u0131 Lintleme Hatas\u0131 Dosyada","success-message":"{FOLDER_NAME} i\xE7indeki t\xFCm {NUM} dosya lintlendi.","message-singular":"{FOLDER_NAME} i\xE7indeki t\xFCm {NUM} dosya lintlendi ve 1 hata vard\u0131.","message-plural":"{FOLDER_NAME} i\xE7indeki t\xFCm {FILE_COUNT} dosya lintlendi ve {ERROR_COUNT} hata vard\u0131."},"paste-as-plain-text":{name:"D\xFCz Metin Olarak & Modifikasyonsuz Yap\u0131\u015Ft\u0131r"},"lint-file-pop-up-menu-text":{name:"Dosyay\u0131 lintle"},"lint-folder-pop-up-menu-text":{name:"Klas\xF6r\xFC lintle"}},logs:{"plugin-load":"Eklenti y\xFCkleniyor","plugin-unload":"Eklenti kald\u0131r\u0131l\u0131yor","folder-lint":"Klas\xF6r lintleniyor ","linter-run":"Lintleme \xE7al\u0131\u015Ft\u0131r\u0131l\u0131yor","paste-link-warning":"pano i\xE7eri\u011Fi bir link oldu\u011Fu ve yap\u0131\u015Ft\u0131rmay\u0131 de\u011Fi\u015Ftiren di\u011Fer eklentilerle \xE7ak\u0131\u015Fmay\u0131 \xF6nlemek i\xE7in lintleme yap\u0131\u015Ft\u0131rmas\u0131 iptal edildi.","see-console":"Daha fazla detay i\xE7in konsolu kontrol edin.","unknown-error":"Lintleme s\u0131ras\u0131nda bilinmeyen bir hata olu\u015Ftu.","moment-locale-not-found":"Moment.js yerelini {MOMENT_LOCALE} olarak de\u011Fi\u015Ftirmeye \xE7al\u0131\u015F\u0131yor, elde edilen {CURRENT_LOCALE}","file-change-lint-message-start":"Lintlendi","pre-rules":"normal kurallardan \xF6nceki kurallar","post-rules":"normal kurallardan sonraki kurallar","rule-running":"kurallar \xE7al\u0131\u015Ft\u0131r\u0131l\u0131yor","custom-regex":"\xF6zel regex kurallar\u0131","running-custom-regex":"\xD6zel Regex \xC7al\u0131\u015Ft\u0131r\u0131l\u0131yor","running-custom-lint-command":"\xD6zel Lint Komutlar\u0131 \xC7al\u0131\u015Ft\u0131r\u0131l\u0131yor","custom-lint-duplicate-warning":'Ayn\u0131 komutu ("{COMMAND_NAME}") \xF6zel bir lint kural\u0131 olarak iki kez \xE7al\u0131\u015Ft\u0131ramazs\u0131n\u0131z.',"custom-lint-error-message":"\xD6zel Lint Komutu Hatas\u0131","disabled-text":"devre d\u0131\u015F\u0131","run-rule-text":"\xC7al\u0131\u015Ft\u0131r\u0131l\u0131yor","timing-key-not-found":"'{TIMING_KEY}' zamanlama anahtar\u0131 zamanlama bilgisi listesinde bulunamad\u0131, bu y\xFCzden yoksay\u0131ld\u0131","milliseconds-abbreviation":"ms","invalid-date-format-error":"Olu\u015Fturulan tarih format\u0131 '{DATE}' ayr\u0131\u015Ft\u0131r\u0131lamad\u0131 veya belirlenemedi, bu y\xFCzden '{FILE_NAME}' dosyas\u0131ndaki olu\u015Fturulan tarih ayn\u0131 b\u0131rak\u0131ld\u0131","invalid-delimiter-error-message":"ayra\xE7 sadece tek bir karakter olabilir","missing-footnote-error-message":"'{FOOTNOTE}' dipnotunun i\xE7eri\u011Finden \xF6nce kar\u015F\u0131l\u0131k gelen bir dipnot referans\u0131 yok ve i\u015Flenemez. L\xFCtfen t\xFCm dipnotlar\u0131n, dipnot i\xE7eri\u011Finden \xF6nce kar\u015F\u0131l\u0131k gelen bir referans\u0131 oldu\u011Fundan emin olun.","too-many-footnotes-error-message":"'{FOOTNOTE_KEY}' dipnot anahtar\u0131 birden fazla dipnota at\u0131fta bulunuyor. L\xFCtfen dipnotlar\u0131 g\xFCncelleyin, b\xF6ylece her dipnot anahtar\u0131 i\xE7in yaln\u0131zca bir dipnot olur.","wrapper-yaml-error":"YAML'da hata: {ERROR_MESSAGE}","wrapper-unknown-error":"bilinmeyen hata: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"Panoda i\xE7erik yok.","characters-added":"karakterler eklendi","characters-removed":"karakterler kald\u0131r\u0131ld\u0131"},"all-rules-option":"T\xFCm\xFC","linter-title":"Linter","empty-search-results-text":"Arama ile e\u015Fle\u015Fen ayar bulunamad\u0131","warning-text":"Uyar\u0131","file-backup-text":"Dosyalar\u0131n\u0131z\u0131n yede\u011Fini ald\u0131\u011F\u0131n\u0131zdan emin olun.",tabs:{names:{general:"Genel",custom:"\xD6zel",yaml:"YAML",heading:"Ba\u015Fl\u0131k",content:"\u0130\xE7erik",footnote:"Dipnot",spacing:"Bo\u015Fluk",paste:"Yap\u0131\u015Ft\u0131r",debug:"Hata ay\u0131kla"},"default-search-bar-text":"T\xFCm ayarlar\u0131 ara",general:{"lint-on-save":{name:"Kaydederken d\xFCzelt",description:"Manuel kaydetme (Ctrl + S tu\u015Funa bas\u0131ld\u0131\u011F\u0131nda veya vim tu\u015F ba\u011Flamalar\u0131n\u0131 kullan\u0131rken :w komutu \xE7al\u0131\u015Ft\u0131r\u0131ld\u0131\u011F\u0131nda) dosyay\u0131 d\xFCzeltir"},"display-message":{name:"D\xFCzeltme sonras\u0131 mesaj\u0131 g\xF6ster",description:"D\xFCzeltme sonras\u0131 de\u011Fi\u015Fen karakter say\u0131s\u0131n\u0131 g\xF6sterir"},"lint-on-file-change":{name:"Dosya De\u011Fi\u015Fikli\u011Finde D\xFCzeltme",description:"Bir dosya kapat\u0131ld\u0131\u011F\u0131nda veya yeni bir dosya a\xE7\u0131ld\u0131\u011F\u0131nda, \xF6nceki dosya d\xFCzeltilir."},"display-lint-on-file-change-message":{name:"Dosya De\u011Fi\u015Fikli\u011Finde D\xFCzeltme Mesaj\u0131n\u0131 G\xF6ster",description:"`Dosya De\u011Fi\u015Fikli\u011Finde D\xFCzeltme` oldu\u011Funda bir mesaj g\xF6sterir"},"folders-to-ignore":{name:"Yoksay\u0131lacak klas\xF6rler",description:"T\xFCm dosyalar\u0131 d\xFCzeltirken veya kaydederken d\xFCzeltme i\u015Fleminin yoksay\u0131laca\u011F\u0131 klas\xF6rler. Klas\xF6r yollar\u0131n\u0131 yeni sat\u0131rlarla ay\u0131rarak girin"},"override-locale":{name:"Yerel ayarlar\u0131n \xFCzerine yaz",description:"Varsay\u0131lan\u0131n d\u0131\u015F\u0131nda bir yerel ayar kullanmak istiyorsan\u0131z bunu ayarlay\u0131n"},"same-as-system-locale":"Sistemle ayn\u0131 ({SYS_LOCALE})","yaml-aliases-section-style":{name:"YAML takma adlar\u0131 b\xF6l\xFCm\xFC stili",description:"YAML takma adlar\u0131 b\xF6l\xFCm\xFCn\xFCn stili"},"yaml-tags-section-style":{name:"YAML etiketleri b\xF6l\xFCm\xFC stili",description:"YAML etiketleri b\xF6l\xFCm\xFCn\xFCn stili"},"default-escape-character":{name:"Varsay\u0131lan Ka\xE7\u0131\u015F Karakteri",description:"Tek t\u0131rnak ve \xE7ift t\u0131rnak bulunmayan YAML de\u011Ferlerinden ka\xE7mak i\xE7in kullan\u0131lacak varsay\u0131lan karakter."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"\xC7ok Sat\u0131rl\u0131 Dizi Format\u0131ndayken Gereksiz Ka\xE7\u0131\u015F Karakterlerini Kald\u0131r",description:"\xC7ok sat\u0131rl\u0131 YAML dizileri i\xE7in ka\xE7\u0131\u015F karakterleri tek sat\u0131rl\u0131 dizilere g\xF6re ayn\u0131 ka\xE7\u0131\u015Fa ihtiya\xE7 duymaz, bu y\xFCzden \xE7ok sat\u0131rl\u0131 format i\xE7erisinde gerekli olmayan ekstra ka\xE7\u0131\u015Flar\u0131 kald\u0131r\u0131r"},"number-of-dollar-signs-to-indicate-math-block":{name:"Matematiksel Blo\u011Fu Belirtmek \u0130\xE7in Dolar \u0130\u015Fareti Say\u0131s\u0131",description:"Matematik i\xE7eri\u011Finin bir matematiksel blok yerine inline matematik olup olmad\u0131\u011F\u0131n\u0131 belirlemek i\xE7in kullan\u0131lacak dolar i\u015Fareti say\u0131s\u0131"}},debug:{"log-level":{name:"Log D\xFCzeyi",description:"Hizmetin loglamaya izin verdi\u011Fi log t\xFCrleri. Varsay\u0131lan ERROR'dur."},"linter-config":{name:"Linter Yap\u0131land\u0131rmas\u0131",description:"Ayar sayfas\u0131n\u0131n y\xFCklenmesi s\u0131ras\u0131nda Linter i\xE7in data.json i\xE7eri\u011Fi"},"log-collection":{name:"Kaydetme d\xFCzeltmesi ve mevcut dosyan\u0131n d\xFCzeltilmesi s\u0131ras\u0131nda loglar\u0131 topla",description:"`Kaydetme d\xFCzeltmesi` yapt\u0131\u011F\u0131n\u0131zda ve mevcut dosyay\u0131 d\xFCzeltirken loglar\u0131 toplar. Bu loglar hata ay\u0131klama ve hata raporlar\u0131 olu\u015Fturma i\xE7in yard\u0131mc\u0131 olabilir."},"linter-logs":{name:"Linter Loglar\u0131",description:"Son `Kaydetme d\xFCzeltmesi` veya son mevcut dosya \xE7al\u0131\u015Ft\u0131rmas\u0131ndan elde edilen loglar (e\u011Fer etkinle\u015Ftirilmi\u015Fse)."}}},options:{"custom-command":{name:"\xD6zel Komutlar",description:"\xD6zel komutlar, linter normal kurallar\u0131n\u0131 \xE7al\u0131\u015Ft\u0131rmay\u0131 bitirdikten sonra \xE7al\u0131\u015Ft\u0131r\u0131lan Obsidyen komutlard\u0131r. Bu, YAML zaman damgas\u0131 mant\u0131\u011F\u0131 \xE7al\u0131\u015Fmadan \xF6nce \xE7al\u0131\u015Fmad\u0131klar\u0131 anlam\u0131na gelir, dolay\u0131s\u0131yla linterin bir sonraki \xE7al\u0131\u015Fmas\u0131nda YAML zaman damgas\u0131n\u0131n tetiklenmesine neden olabilirler. Bir Obsidyen komutunu yaln\u0131zca bir kez se\xE7ebilirsiniz. **_Bunun \u015Fu anda yaln\u0131zca ge\xE7erli dosyaya sat\u0131r dizilirken \xE7al\u0131\u015Ft\u0131\u011F\u0131n\u0131 unutmay\u0131n._**",warning:"Bir se\xE7ene\u011Fi se\xE7erken, se\xE7ene\u011Fi fareyi kullanarak veya enter tu\u015Funa basarak se\xE7ti\u011Finizden emin olun. Di\u011Fer se\xE7im y\xF6ntemleri \xE7al\u0131\u015Fmayabilir ve yaln\u0131zca ger\xE7ek bir Obsidian komutunun veya bo\u015F bir dizinin se\xE7imleri kaydedilir.","add-input-button-text":"Yeni komut ekle","command-search-placeholder-text":"Obsidian komutu","move-up-tooltip":"Yukar\u0131","move-down-tooltip":"A\u015Fa\u011F\u0131","delete-tooltip":"Sil"},"custom-replace":{name:"\xD6zel Regex De\u011Fi\u015Ftirme",description:"\xD6zel regex de\u011Fi\u015Ftirme, bulunan regex ile e\u015Fle\u015Fen her \u015Feyi de\u011Fi\u015Ftirme de\u011Feri ile de\u011Fi\u015Ftirmek i\xE7in kullan\u0131labilir. De\u011Fi\u015Ftirme ve bulma de\u011Ferleri ge\xE7erli regex de\u011Ferleri olmal\u0131d\u0131r.",warning:"Regex hakk\u0131nda bilginiz yoksa dikkatli kullan\u0131n. Ayr\u0131ca, l\xFCtle iOS mobil platformunda regexinizde geriye d\xF6n\xFCk aramalar\u0131 kullanmay\u0131n \xE7\xFCnk\xFC bu, o platformda desteklenmedi\u011Fi i\xE7in lint i\u015Fleminin ba\u015Far\u0131s\u0131z olmas\u0131na neden olur.","add-input-button-text":"Yeni regex de\u011Fi\u015Ftirme ekle","regex-to-find-placeholder-text":"bulunacak regex","flags-placeholder-text":"bayraklar","regex-to-replace-placeholder-text":"de\u011Fi\u015Ftirilecek regex","label-placeholder-text":"etiket","move-up-tooltip":"Yukar\u0131 ta\u015F\u0131","move-down-tooltip":"A\u015Fa\u011F\u0131 ta\u015F\u0131","delete-tooltip":"Sil"}},rules:{"auto-correct-common-misspellings":{name:"Yayg\u0131n Yanl\u0131\u015F Yaz\u0131mlar\u0131 Otomatik D\xFCzelt",description:"Yayg\u0131n yanl\u0131\u015F yaz\u0131mlar\u0131n s\xF6zl\xFC\u011F\xFCn\xFC kullanarak bunlar\u0131 do\u011Fru yaz\u0131mlar\u0131na otomatik olarak d\xF6n\xFC\u015Ft\xFCr\xFCr. Otomatik d\xFCzeltilen kelimelerin tam listesi i\xE7in [otomatik-d\xFCzeltme haritas\u0131na](https://github.com/platers/obsidian-linter/tree/master/src/utils/auto-correct-misspellings.ts) bak\u0131n.","ignore-words":{name:"Kelimeleri Yoksay",description:"Otomatik d\xFCzeltme s\u0131ras\u0131nda yoksay\u0131lacak k\xFC\xE7\xFCk harfli kelimelerin virg\xFClle ayr\u0131lm\u0131\u015F listesi"}},"add-blockquote-indentation-on-paste":{name:"Yap\u0131\u015Ft\u0131rma S\u0131ras\u0131nda Blok Al\u0131nt\u0131 Girintisini Ekle",description:"\u0130mle\xE7 bir blok al\u0131nt\u0131/callout sat\u0131r\u0131nda oldu\u011Funda, t\xFCm sat\u0131rlara, ilk sat\u0131r hari\xE7, blok al\u0131nt\u0131lar ekler"},"blockquote-style":{name:"Blok Al\u0131nt\u0131 Stili",description:"Blok al\u0131nt\u0131 stili tutarl\u0131 olmal\u0131d\u0131r.",style:{name:"Stil",description:"Blok al\u0131nt\u0131 g\xF6stergelerinde kullan\u0131lan stil"}},"capitalize-headings":{name:"B\xFCy\xFCk Harfli Ba\u015Fl\u0131klar",description:"Ba\u015Fl\u0131klar b\xFCy\xFCk harfle bi\xE7imlendirilmelidir",style:{name:"Stil",description:"Kullan\u0131lacak b\xFCy\xFCk harfle ba\u015Flatma stili"},"ignore-case-words":{name:"Durum S\xF6zc\xFCklerini Yoksay",description:"Ba\u015Fl\u0131k durum stilini sadece t\xFCm k\xFC\xE7\xFCk harfli s\xF6zc\xFCklere uygula"},"ignore-words":{name:"S\xF6zc\xFCkleri Yoksay",description:"B\xFCy\xFCk harfle ba\u015Flat\u0131rken yoksay\u0131lacak s\xF6zc\xFCklerin virg\xFClle ayr\u0131lm\u0131\u015F listesi"},"lowercase-words":{name:"K\xFC\xE7\xFCk Harfli S\xF6zc\xFCkler",description:"K\xFC\xE7\xFCk harfli tutulacak s\xF6zc\xFCklerin virg\xFClle ayr\u0131lm\u0131\u015F listesi"}},"compact-yaml":{name:"S\u0131k\u0131\u015Ft\u0131r\u0131lm\u0131\u015F YAML",description:"YAML \xF6n bilgisindeki ba\u015Ftaki ve sondaki bo\u015F sat\u0131rlar\u0131 kald\u0131r\u0131r.","inner-new-lines":{name:"\u0130\xE7 Yeni Sat\u0131rlar",description:"YAML'\u0131n ba\u015F\u0131nda veya sonunda olmayan yeni sat\u0131rlar\u0131 kald\u0131r\u0131r."}},"consecutive-blank-lines":{name:"Ard\u0131\u015F\u0131k bo\u015F sat\u0131rlar",description:"En fazla bir ard\u0131\u015F\u0131k bo\u015F sat\u0131r olmal\u0131d\u0131r."},"convert-bullet-list-markers":{name:"Bullet List Markerlar\u0131n\u0131 D\xF6n\xFC\u015Ft\xFCr",description:"Bullet list marker sembollerini markdown list markerlar\u0131na d\xF6n\xFC\u015Ft\xFCr\xFCr."},"convert-spaces-to-tabs":{name:"Bo\u015Fluklar\u0131 Sekmeye D\xF6n\xFC\u015Ft\xFCr",description:"Ba\u015Ftaki bo\u015Fluklar\u0131 sekmeye d\xF6n\xFC\u015Ft\xFCr\xFCr.",tabsize:{name:"Sekme Boyutu",description:"Bir sekme haline d\xF6n\xFC\u015Ft\xFCr\xFClecek bo\u015Fluk say\u0131s\u0131"}},"emphasis-style":{name:"Vurgu Stili",description:"Vurgu stilinin tutarl\u0131 olmas\u0131n\u0131 sa\u011Flar.",style:{name:"Stil",description:"Vurgulanan i\xE7eri\u011Fi belirtmek i\xE7in kullan\u0131lan stil"}},"empty-line-around-blockquotes":{name:"Al\u0131nt\u0131 Bloklar\u0131n\u0131n Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Bir belgenin ba\u015F\u0131n\u0131 veya sonunu ba\u015Flatmayan al\u0131nt\u0131 bloklar\u0131n etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r. **Not: bo\u015F bir sat\u0131r ya al\u0131nt\u0131 bloklar i\xE7in bir seviye daha az girinti veya yeni bir sat\u0131r karakteri demektir.**"},"empty-line-around-code-fences":{name:"Kod \xC7itlerinin Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Bir belgenin ba\u015F\u0131n\u0131 veya sonunu ba\u015Flatmayan kod \xE7itlerinin etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r."},"empty-line-around-math-blocks":{name:"Matematik Bloklar\u0131n\u0131n Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Tek sat\u0131rl\u0131k matematik i\xE7in bir matematik blo\u011Funu belirtmek i\xE7in ka\xE7 dolar i\u015Fareti oldu\u011Funu belirleyen `Dolar \u0130\u015Faretlerinin Say\u0131s\u0131yla Matematik Blo\u011Funu Belirt` kullan\u0131larak matematik bloklar\u0131n\u0131n etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r."},"empty-line-around-tables":{name:"Tablolar\u0131n Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Bir belgenin ba\u015F\u0131n\u0131 veya sonunu ba\u015Flatmayan github flavored tablolar\u0131n etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r."},"escape-yaml-special-characters":{name:"YAML \xD6zel Karakterlerine Ka\xE7\u0131\u015F \u0130\u015Flemi Yap",description:`YAML i\xE7indeki bo\u015Flukla beraber gelen iki nokta \xFCst \xFCste (:), tek t\u0131rnak (') ve \xE7ift t\u0131rnak (") karakterlerini ka\xE7\u0131\u015F i\u015Flemine tabi tutar.`,"try-to-escape-single-line-arrays":{name:"Tek Sat\u0131rl\u0131k Listeleri Ka\xE7\u0131\u015F Denemesi",description:'Bir dizinin "[" ile ba\u015Flad\u0131\u011F\u0131n\u0131, "]" ile bitti\u011Fini ve \xF6\u011Felerin "," ile ayr\u0131ld\u0131\u011F\u0131n\u0131 varsayarak dizi de\u011Ferlerini ka\xE7\u0131\u015F i\u015Flemine tabi tutmaya \xE7al\u0131\u015F\u0131r.'}},"file-name-heading":{name:"Dosya Ad\u0131 Ba\u015Fl\u0131\u011F\u0131",description:"E\u011Fer hi\xE7 H1 ba\u015Fl\u0131\u011F\u0131 yoksa dosya ad\u0131n\u0131 H1 ba\u015Fl\u0131\u011F\u0131 olarak ekler."},"footnote-after-punctuation":{name:"Noktalama \u0130\u015Faretinden Sonra Dipnot",description:"Dipnot referanslar\u0131n\u0131n noktalama i\u015Faretinden \xF6nce de\u011Fil, sonra yerle\u015Ftirildi\u011Finden emin olur."},"force-yaml-escape":{name:"YAML Ka\xE7\u0131\u015F\u0131n\u0131 Zorla",description:"Belirtilen YAML anahtarlar\u0131 i\xE7in ka\xE7\u0131\u015F de\u011Ferleri.","force-yaml-escape-keys":{name:"Anahtarlarda YAML Ka\xE7\u0131\u015F\u0131n\u0131 Zorla",description:"Yeni bir sat\u0131r karakteri ile ayr\u0131lm\u0131\u015F belirtilen YAML anahtarlar\u0131nda YAML ka\xE7\u0131\u015F karakterini kullan\u0131r, e\u011Fer zaten ka\xE7\u0131\u015F yap\u0131lmam\u0131\u015Fsa. YAML dizilerinde kullanmay\u0131n"}},"format-tags-in-yaml":{name:"YAML Etiketlerini Bi\xE7imlendir",description:"YAML \xF6n madde i\xE7indeki etiketlerden hashtagleri kald\u0131r\u0131r, \xE7\xFCnk\xFC bunlar etiketleri ge\xE7ersiz k\u0131lar."},"format-yaml-array":{name:"YAML Dizisini Bi\xE7imlendir",description:"Normal YAML dizilerinin \xE7ok sat\u0131rl\u0131 veya tek sat\u0131rl\u0131 olarak bi\xE7imlendirilmesine izin verir ve `tags` ve `aliases` baz\u0131 Obsidian \xF6zg\xFC \xF6zelliklerine sahip YAML formatlar\u0131nda bulunabilir. **Not: Tek giri\u015Fli bir diziden birden fazla giri\u015Fi olan tek sat\u0131rl\u0131 bir diziye ge\xE7mek ayn\u0131d\u0131r, tek fark \xE7ok sat\u0131rl\u0131 bir dizi olmas\u0131d\u0131r.**","alias-key":{name:"YAML takma adlar\u0131 b\xF6l\xFCm\xFCn\xFC bi\xE7imlendir",description:"YAML takma adlar\u0131 b\xF6l\xFCm\xFC i\xE7in bi\xE7imlendirmeyi a\xE7ar. Bu se\xE7ene\u011Fi `YAML Title Alias` kural\u0131yla birlikte kullanmaman\u0131z \xF6nerilir \xE7\xFCnk\xFC birlikte d\xFCzg\xFCn \xE7al\u0131\u015Fmayabilir veya farkl\u0131 bi\xE7imlendirme stilleri se\xE7ilmi\u015F olabilir, bu beklenmeyen sonu\xE7lara yol a\xE7abilir."},"tag-key":{name:"YAML etiketleri b\xF6l\xFCm\xFCn\xFC bi\xE7imlendir",description:"YAML etiketleri b\xF6l\xFCm\xFC i\xE7in bi\xE7imlendirmeyi a\xE7ar."},"default-array-style":{name:"Varsay\u0131lan YAML dizi b\xF6l\xFCm\xFC stili",description:"`tags`, `aliases` veya `Force key values to be single-line arrays` ve `Force key values to be multi-line arrays` olmayan di\u011Fer YAML dizilerinin stili"},"default-array-keys":{name:"YAML dizi b\xF6l\xFCmlerini bi\xE7imlendir",description:"Normal YAML dizileri i\xE7in bi\xE7imlendirmeyi a\xE7ar"},"force-single-line-array-style":{name:"Anahtar de\u011Ferlerini tek sat\u0131rl\u0131 dizilere zorla",description:"Yeni sat\u0131r ile ayr\u0131lan anahtarlar i\xE7in YAML dizisini tek sat\u0131rl\u0131 formatta olmaya zorlar (bu se\xE7ene\u011Fi devre d\u0131\u015F\u0131 b\u0131rakmak i\xE7in bo\u015F b\u0131rak\u0131n)"},"force-multi-line-array-style":{name:"Anahtar de\u011Ferlerini \xE7ok sat\u0131rl\u0131 dizilere zorla",description:"Yeni sat\u0131r ile ayr\u0131lan anahtarlar i\xE7in YAML dizisini \xE7ok sat\u0131rl\u0131 formatta olmaya zorlar (bu se\xE7ene\u011Fi devre d\u0131\u015F\u0131 b\u0131rakmak i\xE7in bo\u015F b\u0131rak\u0131n)"}},"header-increment":{name:"Ba\u015Fl\u0131k Art\u0131r\u0131m\u0131",description:"Ba\u015Fl\u0131k seviyeleri bir seferde sadece bir seviye artmal\u0131d\u0131r","start-at-h2":{name:"Ba\u015Fl\u0131k Art\u0131r\u0131m\u0131n\u0131 Ba\u015Fl\u0131k Seviyesi 2\u2019de Ba\u015Flat",description:"Bir dosyadaki minimum ba\u015Fl\u0131k seviyesini ba\u015Fl\u0131k seviyesi 2 yapar ve buna g\xF6re t\xFCm ba\u015Fl\u0131klar\u0131 kayd\u0131r\u0131r, b\xF6ylece ba\u015Fl\u0131k art\u0131\u015F\u0131 seviye 2 ba\u015Fl\u0131\u011F\u0131 ile ba\u015Flar."}},"heading-blank-lines":{name:"Ba\u015Fl\u0131k Bo\u015F Sat\u0131rlar\u0131",description:"T\xFCm ba\u015Fl\u0131klar\u0131n hem \xF6ncesinde hem de sonras\u0131nda birer bo\u015F sat\u0131r olmal\u0131d\u0131r (ba\u015Fl\u0131k belgenin ba\u015F\u0131nda veya sonunda oldu\u011Funda bu durum ge\xE7erli de\u011Fildir).",bottom:{name:"Alt",description:"Ba\u015Fl\u0131klar\u0131n sonras\u0131na bo\u015F sat\u0131r ekler"},"empty-line-after-yaml":{name:"YAML ve Ba\u015Fl\u0131k Aras\u0131nda Bo\u015F Sat\u0131r",description:"YAML \xF6n madde ve ba\u015Fl\u0131k aras\u0131ndaki bo\u015F sat\u0131r\u0131 korur"}},"headings-start-line":{name:"Ba\u015Fl\u0131klar Sat\u0131r\u0131 Ba\u015Flat\u0131r",description:"Bir sat\u0131r\u0131 ba\u015Flatmayan ba\u015Fl\u0131klar\u0131n \xF6ncesi bo\u015Fluklar\u0131 kald\u0131r\u0131l\u0131r ki ba\u015Fl\u0131klar ba\u015Fl\u0131k olarak tan\u0131nabilsin."},"insert-yaml-attributes":{name:"YAML \xD6zniteliklerini Ekle",description:"Verilen YAML \xF6zniteliklerini YAML \xF6n maddesine ekler. Her \xF6zniteli\u011Fi tek bir sat\u0131ra koyun.","text-to-insert":{name:"Eklenecek metin",description:"YAML \xF6n maddesine eklenen metin"}},"line-break-at-document-end":{name:"Belge Sonunda Sat\u0131r Sonu",description:"Bir belgenin sonunda tam olarak bir sat\u0131r sonu oldu\u011Funu garanti eder."},"move-footnotes-to-the-bottom":{name:"Dipnotlar\u0131 Altbilgiye Ta\u015F\u0131",description:"T\xFCm dipnotlar\u0131 belgenin alt\u0131na ta\u015F\u0131r."},"move-math-block-indicators-to-their-own-line":{name:"Matematik Blok G\xF6stergelerini Kendi Sat\u0131rlar\u0131na Ta\u015F\u0131",description:'Tek sat\u0131rl\u0131 matematik i\xE7in ka\xE7 dolar i\u015Faretinin bir matematik blo\u011Funu g\xF6sterdi\u011Fini belirlemek i\xE7in "Bir Matematik Blo\u011Fu G\xF6stermek \u0130\xE7in Dolar \u0130\u015Fareti Say\u0131s\u0131"n\u0131 kullanarak t\xFCm ba\u015Flang\u0131\xE7 ve biti\u015F matematik blo\u011Fu g\xF6stergelerini kendi sat\u0131rlar\u0131na ta\u015F\u0131y\u0131n.'},"move-tags-to-yaml":{name:"Etiketleri YAML'a Ta\u015F\u0131",description:"T\xFCm etiketleri belgenin YAML \xF6n maddesine ta\u015F\u0131r.","how-to-handle-existing-tags":{name:"Metin i\xE7indeki etiket i\u015Flemi",description:"\xD6n maddeye ta\u015F\u0131nd\u0131ktan sonra dosyan\u0131n i\xE7eri\u011Finde bulunan ve yoksay\u0131lmayan etiketlerle ne yap\u0131laca\u011F\u0131"},"tags-to-ignore":{name:"Yoksay\u0131lacak etiketler",description:"\u0130\xE7erik g\xF6vdesindeki hashtag'lerden kald\u0131rma etkinle\u015Ftirilmi\u015Fse, etiketler dizisine ta\u015F\u0131nmayacak veya i\xE7erik g\xF6vdesinden kald\u0131r\u0131lmayacak etiketler. Her etiket yeni bir sat\u0131rda ve `#` olmadan olmal\u0131d\u0131r. **Etiket ad\u0131nda hashtag i\xE7ermedi\u011Finizden emin olun.**"}},"no-bare-urls":{name:"Yal\u0131n URL'ler Olmas\u0131n",description:"Yal\u0131n URL'leri a\xE7\u0131l\u0131 ayra\xE7lar ile ku\u015Fat\u0131r, tek veya \xE7ift t\u0131rnak, k\xF6\u015Feli parantez veya e\u011Fik kesme i\u015Fareti i\xE7inde de\u011Filse."},"ordered-list-style":{name:"S\u0131ral\u0131 Liste Stili",description:"S\u0131ral\u0131 listelerin belirtilen stili izlemesini sa\u011Flar. **Not: 2 bo\u015Fluk veya 1 sekme bir girinti seviyesi olarak kabul edilir.**","number-style":{name:"Numara Stili",description:"S\u0131ral\u0131 liste g\xF6stergelerinde kullan\u0131lan numara stili"},"list-end-style":{name:"S\u0131ral\u0131 Liste G\xF6sterge Sonu Stili",description:"Bir s\u0131ral\u0131 liste g\xF6stergesinin biti\u015F karakteri"}},"paragraph-blank-lines":{name:"Paragraf Bo\u015F Sat\u0131rlar\u0131",description:"T\xFCm paragraflar\u0131n hem \xF6nce hem sonra tam olarak bir bo\u015F sat\u0131r\u0131 olmal\u0131d\u0131r."},"prevent-double-checklist-indicator-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada \xC7ift Kontrol Listesi G\xF6stergesini \xD6nle",description:"Kurs\xF6r\xFCn dosyadaki sat\u0131rda bir kontrol listesi g\xF6stergesi varsa, yap\u0131\u015Ft\u0131r\u0131lacak metinden ba\u015Flang\u0131\xE7 kontrol listesi g\xF6stergesini kald\u0131r\u0131r"},"prevent-double-list-item-indicator-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada \xC7ift Liste \xD6\u011Fesi G\xF6stergesini \xD6nle",description:"Kurs\xF6r\xFCn dosyadaki sat\u0131rda bir liste g\xF6stergesi varsa, yap\u0131\u015Ft\u0131r\u0131lacak metinden ba\u015Flang\u0131\xE7 listesi g\xF6stergesini kald\u0131r\u0131r"},"proper-ellipsis-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada Uygun \xDC\xE7 Nokta",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metinde aralar\u0131nda bo\u015Fluk olsa bile ard\u0131\u015F\u0131k \xFC\xE7 noktay\u0131, \xFC\xE7 nokta karakteriyle ile de\u011Fi\u015Ftirir"},"proper-ellipsis":{name:"Uygun \xDC\xE7 Nokta",description:"Ard\u0131\u015F\u0131k \xFC\xE7 tane noktay\u0131, \xFC\xE7 nokta karakteriyle de\u011Fi\u015Ftirir."},"quote-style":{name:"\xFC\xE7 nokta karakteriyle",description:"G\xF6vde i\xE7eri\u011Findeki al\u0131nt\u0131lar\u0131 belirtilen tek ve \xE7ift al\u0131nt\u0131 stillerine g\xFCnceller.","single-quote-enabled":{name:"`Tek Al\u0131nt\u0131 Stili` Kullan\u0131m\u0131",description:"Se\xE7ilen tek al\u0131nt\u0131 stilinin kullan\u0131laca\u011F\u0131n\u0131 belirtir."},"single-quote-style":{name:"Tek Al\u0131nt\u0131 Stili",description:"Kullan\u0131lacak tek al\u0131nt\u0131 stilidir."},"double-quote-enabled":{name:"`\xC7ift Al\u0131nt\u0131 Stili` Kullan\u0131m\u0131",description:"Se\xE7ilen \xE7ift al\u0131nt\u0131 stilinin kullan\u0131laca\u011F\u0131n\u0131 belirtir."},"double-quote-style":{name:"\xC7ift Al\u0131nt\u0131 Stili",description:"Kullan\u0131lacak \xE7ift al\u0131nt\u0131 stilidir."}},"re-index-footnotes":{name:"Dipnotlar\u0131 Yeniden \u0130ndeksle",description:"Dipnot anahtarlar\u0131n\u0131 ve dipnotlar\u0131, olu\u015Fum s\u0131ras\u0131na g\xF6re yeniden indeksler. **Not: Bir anahtar i\xE7in birden fazla dipnot varsa, bu kural \xE7al\u0131\u015Fmaz.**"},"remove-consecutive-list-markers":{name:"Ard\u0131\u015F\u0131k Liste \u0130\u015Faretlerini Kald\u0131r",description:"Ard\u0131\u015F\u0131k liste i\u015Faretlerini kald\u0131r\u0131r. Liste \xF6\u011Felerini kopyala-yap\u0131\u015Ft\u0131r yaparken kullan\u0131\u015Fl\u0131d\u0131r."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Liste \u0130\u015Faretleri ve Kontrol Listeleri Aras\u0131ndaki Bo\u015F Sat\u0131rlar\u0131 Kald\u0131r",description:"Liste i\u015Faretleri ve kontrol listeleri aras\u0131nda bo\u015F sat\u0131r olmamal\u0131d\u0131r."},"remove-empty-list-markers":{name:"Bo\u015F Liste \u0130\u015Faret\xE7ilerini Kald\u0131r",description:"Bo\u015F liste i\u015Faret\xE7ilerini, yani i\xE7eriksiz liste \xF6\u011Felerini kald\u0131r\u0131r."},"remove-hyphenated-line-breaks":{name:"Tireli Sat\u0131r Sonlar\u0131n\u0131 Kald\u0131r",description:"Removes hyphenated line breaks. Useful when pasting text from textbooks."},"remove-hyphens-on-paste":{name:"Yap\u0131\u015Ft\u0131r\u0131rken Tireleri Kald\u0131r",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metindeki tireleri kald\u0131r\u0131r"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Yap\u0131\u015Ft\u0131rda \xD6ndeki veya Sondaki Bo\u015Fluklar\u0131 Kald\u0131r",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metnin ba\u015F\u0131ndaki sekme olmayan bo\u015Fluklar\u0131 ve sonundaki t\xFCm bo\u015Fluklar\u0131 kald\u0131r\u0131r"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada Al\u0131nt\u0131dan Kalan Dipnotlar\u0131 Kald\u0131r",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metinden herhangi bir kal\u0131nt\u0131 dipnot referanslar\u0131n\u0131 kald\u0131r\u0131r"},"remove-link-spacing":{name:"Link Aral\u0131\u011F\u0131n\u0131 Kald\u0131r",description:"Link metninin etraf\u0131ndaki bo\u015Fluklar\u0131 kald\u0131r\u0131r."},"remove-multiple-blank-lines-on-paste":{name:"Yap\u0131\u015Ft\u0131r\u0131rken Birden Fazla Bo\u015F Sat\u0131r\u0131 Kald\u0131r",description:"Metnin yap\u0131\u015Ft\u0131r\u0131lmas\u0131 i\xE7in birden \xE7ok bo\u015F sat\u0131r\u0131 tek bir bo\u015F sat\u0131ra s\u0131k\u0131\u015Ft\u0131r\u0131r"},"remove-multiple-spaces":{name:"Birden Fazla Bo\u015Flu\u011Fu Kald\u0131r",description:"\u0130ki veya daha fazla ard\u0131\u015F\u0131k bo\u015Flu\u011Fu kald\u0131r\u0131r. Sat\u0131r\u0131n ba\u015F\u0131ndaki ve sonundaki bo\u015Fluklar\u0131 g\xF6rmezden gelir. "},"remove-space-around-characters":{name:"Karakterler Etraf\u0131ndaki Bo\u015Flu\u011Fu Kald\u0131r",description:"Belirli karakterlerin bo\u015Fluklarla (tek bo\u015Fluk veya sekme) \xE7evrelenmemesini sa\u011Flar. **Not: Bu, baz\u0131 durumlarda indirim bi\xE7imiyle ilgili sorunlara neden olabilir.**","include-fullwidth-forms":{name:"Tam Geni\u015Flikte Formlar\u0131 Dahil Et",description:'Tam Geni\u015Flikte Formlar Unicode blo\u011Funu dahil eder'},"include-cjk-symbols-and-punctuation":{name:"CJK Sembol ve Noktalama \u0130\u015Faretlerini Dahil Et",description:'CJK Sembol ve Noktalama Unicode blo\u011Funu dahil eder'},"include-dashes":{name:"Tireleri Dahil Et",description:"En tire (\u2013) ve em tireyi (\u2014) dahil eder"},"other-symbols":{name:"Di\u011Fer Semboller",description:"Dahil edilecek di\u011Fer semboller"}},"remove-space-before-or-after-characters":{name:"Karakterlerden \xD6nce veya Sonra Bo\u015Flu\u011Fu Kald\u0131r",description:"Belirtilen karakterlerden \xF6nceki ve sonraki bo\u015Flu\u011Fu kald\u0131r\u0131r. **Not: bu durum baz\u0131 durumlarda markdown format\u0131nda sorunlara neden olabilir.**","characters-to-remove-space-before":{name:"\xD6nceki Bo\u015Flu\u011Fu Kald\u0131r\u0131lacak Karakterler",description:"Belirtilen karakterlerden \xF6nceki bo\u015Flu\u011Fu kald\u0131r\u0131r. **Not: karakter listesinde `{` veya `}` kullanmak, sahne arkas\u0131nda yoksayma s\xF6zdizimi kullan\u0131ld\u0131\u011F\u0131 i\xE7in dosyalar\u0131 beklenmedik \u015Fekilde etkiler.**"},"characters-to-remove-space-after":{name:"Sonraki Bo\u015Flu\u011Fu Kald\u0131r\u0131lacak Karakterler",description:"Belirtilen karakterlerden sonraki bo\u015Flu\u011Fu kald\u0131r\u0131r. **Not: karakter listesinde `{` veya `}` kullanmak, sahne arkas\u0131nda yoksayma s\xF6zdizimi kullan\u0131ld\u0131\u011F\u0131 i\xE7in dosyalar\u0131 beklenmedik \u015Fekilde etkiler.**"}},"remove-trailing-punctuation-in-heading":{name:"Ba\u015Fl\u0131klardaki Son Noktalama \u0130\u015Faretlerini Kald\u0131r",description:"Belirtilen noktalama i\u015Faretlerini ba\u015Fl\u0131klar\u0131n sonundan kald\u0131r\u0131r ve [HTML varl\u0131k referanslar\u0131n\u0131n](https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references) sonundaki noktal\u0131 virg\xFCl\xFC yoksayar.","punctuation-to-remove":{name:"Sondaki Noktalama",description:"Dosyadaki ba\u015Fl\u0131klardan kald\u0131r\u0131lacak noktalama i\u015Faretleri."}},"remove-yaml-keys":{name:"YAML Anahtarlar\u0131n\u0131 Kald\u0131r",description:"Belirtilen YAML anahtarlar\u0131n\u0131 kald\u0131r\u0131r","yaml-keys-to-remove":{name:"Kald\u0131r\u0131lacak YAML Anahtarlar\u0131",description:"YAML \xF6n maddesinden iki nokta \xFCst \xFCste ile veya olmadan kald\u0131r\u0131lacak YAML anahtarlar\u0131"}},"space-after-list-markers":{name:"Liste \u0130\u015Faretlerinden Sonra Bo\u015Fluk",description:"Liste i\u015Faretleri ve onay kutular\u0131ndan sonra tek bir bo\u015Fluk olmal\u0131d\u0131r"},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"\xC7ince, Japonca veya Korece ve \u0130ngilizce veya Say\u0131lar Aras\u0131nda Bo\u015Fluk",description:"\xC7ince, Japonca veya Korece ve \u0130ngilizce veya say\u0131lar aras\u0131nda tek bir bo\u015Fluk olmas\u0131 gerekti\u011Fini sa\u011Flar. Bu [kurallar\u0131](https://github.com/sparanoid/chinese-copywriting-guidelines) takip eder"},"strong-style":{name:"Kal\u0131n Stil",description:"Kal\u0131n stilin tutarl\u0131 oldu\u011Funu garanti eder.",style:{name:"Stil",description:"Kal\u0131n/yo\u011Fun i\xE7eri\u011Fi belirtmek i\xE7in kullan\u0131lan stil"}},"trailing-spaces":{name:"Sondaki bo\u015Fluklar",description:"Her sat\u0131r\u0131n sonundaki fazladan bo\u015Fluklar\u0131 kald\u0131r\u0131r.","twp-space-line-break":{name:"\u0130ki Bo\u015Fluklu Sat\u0131r Sonu",description:'Bir sat\u0131r sonunu takiben iki bo\u015Flu\u011Fu g\xF6z ard\u0131 et ("\u0130ki Bo\u015Fluk Kural\u0131").'}},"two-spaces-between-lines-with-content":{name:"\u0130\xE7eri\u011Fi Olan Sat\u0131rlar Aras\u0131nda \u0130ki Bo\u015Fluk",description:"\u0130\xE7eri\u011Fi devam eden sat\u0131rlar\u0131n sonuna paragraflar, blok al\u0131nt\u0131lar\u0131 ve liste \xF6\u011Feleri i\xE7in iki bo\u015Fluk eklenmesini sa\u011Flar"},"unordered-list-style":{name:"S\u0131ras\u0131z Liste Stili",description:"S\u0131ras\u0131z listelerin belirtilen stili takip etti\u011Finden emin olur.","list-style":{name:"Liste \xF6\u011Fesi stili",description:"S\u0131ras\u0131z listelerde kullan\u0131lacak liste \xF6\u011Fesi stili"}},"yaml-key-sort":{name:"YAML Anahtar S\u0131ralamas\u0131",description:"YAML anahtarlar\u0131n\u0131 belirtilen s\u0131ra ve \xF6nceli\u011Fe g\xF6re s\u0131ralar. **Not: bo\u015F sat\u0131rlar\u0131 da kald\u0131rabilir.**","yaml-key-priority-sort-order":{name:"YAML Anahtar \xD6ncelik S\u0131ralama D\xFCzeni",description:"Her sat\u0131rda bir tane olacak \u015Fekilde anahtarlar\u0131n hangi s\u0131rayla s\u0131ralanaca\u011F\u0131"},"priority-keys-at-start-of-yaml":{name:"\xD6ncelikli Anahtarlar YAML'\u0131n Ba\u015F\u0131nda",description:"YAML Anahtar \xD6ncelik S\u0131ralama D\xFCzeni, YAML \xF6n maddesinin ba\u015F\u0131nda yer al\u0131r"},"yaml-sort-order-for-other-keys":{name:"Di\u011Fer Anahtarlar \u0130\xE7in YAML S\u0131ralama D\xFCzeni",description:"YAML Anahtar \xD6ncelik S\u0131ralama D\xFCzeni metin alan\u0131nda bulunmayan anahtarlar\u0131 nas\u0131l s\u0131ralayaca\u011F\u0131"}},"yaml-timestamp":{name:"YAML Zaman Damgas\u0131",description:"Dosyan\u0131n son d\xFCzenlendi\u011Fi tarihi YAML \xF6n maddesinde takip eder. Tarihler dosya metadatas\u0131ndan al\u0131n\u0131r.","date-created":{name:"Olu\u015Fturma Tarihi",description:"Dosyan\u0131n olu\u015Fturma tarihini ekler"},"date-created-key":{name:"Olu\u015Fturma Tarihi Anahtar\u0131",description:"Olu\u015Fturma tarihi i\xE7in hangi YAML anahtar\u0131n\u0131 kullanaca\u011F\u0131"},"force-retention-of-create-value":{name:"Olu\u015Fturma Tarihi Anahtar De\u011Ferinin Korunmas\u0131n\u0131 Zorla",description:"Dosya metadatas\u0131 yerine YAML \xF6n maddesindeki tarihi yeniden kullan\u0131r, bu da dosya metadatas\u0131ndaki de\u011Fi\u015Fikliklerin de\u011Ferin farkl\u0131 bir de\u011Fere de\u011Fi\u015Fmesine neden olmas\u0131n\u0131 \xF6nler."},"date-modified":{name:"De\u011Fi\u015Ftirme Tarihi",description:"Dosyan\u0131n son de\u011Fi\u015Ftirildi\u011Fi tarihi ekler"},"date-modified-key":{name:"De\u011Fi\u015Ftirme Tarihi Anahtar\u0131",description:"De\u011Fi\u015Ftirme tarihi i\xE7in hangi YAML anahtar\u0131n\u0131 kullanaca\u011F\u0131"},format:{name:"Format",description:"Kullan\u0131lacak Zaman format\u0131 (bak\u0131n\u0131z [Moment format options](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/))"}},"yaml-title-alias":{name:"YAML Ba\u015Fl\u0131k Takma Ad\u0131",description:"Dosyan\u0131n ba\u015Fl\u0131\u011F\u0131n\u0131 YAML \xF6n maddesinin takma adlar\u0131 b\xF6l\xFCm\xFCne ekler. Ba\u015Fl\u0131\u011F\u0131 ilk H1 veya dosya ad\u0131ndan al\u0131r.","preserve-existing-alias-section-style":{name:"Mevcut takma adlar b\xF6l\xFCm stilini koru",description:"Ayarlan\u0131rsa, `YAML takma adlar b\xF6l\xFCm\xFC stili` ayar\u0131 yaln\u0131zca yeni olu\u015Fturulan b\xF6l\xFCmlere uygulan\u0131r"},"keep-alias-that-matches-the-filename":{name:"Dosya ad\u0131na uyan takma ad\u0131 koru",description:"Bu t\xFCr takma adlar genellikle gereksizdir"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"`linter-yaml-title-alias` YAML anahtar\u0131n\u0131 kullanarak eski dosya ad\u0131 ve ba\u015Fl\u0131k de\u011Fi\u015Fikliklerini takip et",description:"Ayarlan\u0131rsa, ilk H1 ba\u015Fl\u0131\u011F\u0131 de\u011Fi\u015Fti\u011Finde veya ilk H1 yoksa dosya ad\u0131 de\u011Fi\u015Fti\u011Finde, bu anahtarda saklanan eski takma ad, takma adlar dizisine yeni bir giri\u015F eklemek yerine yeni de\u011Ferle de\u011Fi\u015Ftirilir"}},"yaml-title":{name:"YAML Ba\u015Fl\u0131k",description:"Dosyan\u0131n ba\u015Fl\u0131\u011F\u0131n\u0131 YAML \xF6n maddesine ekler. Ba\u015Fl\u0131k se\xE7ilen moda g\xF6re al\u0131n\u0131r.","title-key":{name:"Ba\u015Fl\u0131k Anahtar\u0131",description:"Ba\u015Fl\u0131k i\xE7in hangi YAML anahtar\u0131n\u0131 kullanaca\u011F\u0131"},mode:{name:"Mod",description:"Ba\u015Fl\u0131\u011F\u0131 almak i\xE7in kullan\u0131lacak y\xF6ntem"}}},enums:{"Title Case":"Ba\u015F Harfleri B\xFCy\xFCk","ALL CAPS":"T\xDCM\xDC B\xDCY\xDCK HARF","First letter":"\u0130lk Harf",".":".",")":")",ERROR:"hata",TRACE:"i\u015Faret",DEBUG:"hata ay\u0131klama",INFO:"bilgi",WARN:"uyar\u0131",SILENT:"sessiz",ascending:"artan",lazy:"tembel",Nothing:"Hi\xE7biri","Remove hashtag":"Hashtagi Kald\u0131r","Remove whole tag":"T\xFCm Etiketi Kald\u0131r",asterisk:"y\u0131ld\u0131z",underscore:"alt \xE7izgi",consistent:"tutarl\u0131","-":"-","*":"*","+":"+",space:"bo\u015Fluk","no space":"bo\u015Fluk yok",None:"Yok","Ascending Alphabetical":"Artan Alfabetik","Descending Alphabetical":"Azalan Alfabetik","multi-line":"\xE7oklu-sat\u0131r","single-line":"tek-sat\u0131r","single string to single-line":"tek dizeden tek sat\u0131ra","single string to multi-line":"tek dizeden \xE7ok sat\u0131ra","single string comma delimited":"virg\xFClle ayr\u0131lm\u0131\u015F tek dize","single string space delimited":"bo\u015Flukla ayr\u0131lm\u0131\u015F tek dize","single-line space delimited":"bo\u015Flukla ayr\u0131lm\u0131\u015F tek sat\u0131r","first-h1":"\u0130lk H1","first-h1-or-filename-if-h1-missing":"\u0130lk H1 veya H1 Eksikse Dosya Ad\u0131",filename:"Dosya Ad\u0131","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D"}};var yd={};var bd={commands:{"lint-file":{name:"\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6","error-message":"\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u51FA\u9519"},"lint-file-unless-ignored":{name:"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\uFF08\u9664\u4E86\u88AB\u5FFD\u7565\u7684\u6587\u4EF6\uFF09"},"lint-all-files":{name:"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6","error-message":"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\u65F6\u51FA\u9519","success-message":"\u5DF2\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6","errors-message-singular":"\u5DF2\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 1 \u4E2A\u9519\u8BEF","errors-message-plural":"\u5DF2\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 {NUM} \u4E2A\u9519\u8BEF","start-message":"\u8FD9\u5C06\u6539\u52A8\u6240\u6709\u6587\u4EF6\uFF0C\u5305\u62EC\u5B50\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\uFF0C\u53EF\u80FD\u4F1A\u5F15\u5165\u9519\u8BEF","submit-button-text":"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6","submit-button-notice-text":"\u6B63\u5728\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6..."},"lint-all-files-in-folder":{name:"\u683C\u5F0F\u5316\u6587\u4EF6\u5939\u4E2D\u7684\u6240\u6709\u6587\u4EF6","start-message":"\u8FD9\u5C06\u6539\u52A8\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709\u6587\u4EF6\uFF0C\u5305\u62EC\u5B50\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\uFF0C\u53EF\u80FD\u4F1A\u5F15\u5165\u9519\u8BEF","submit-button-text":"\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709\u6587\u4EF6","submit-button-notice-text":"\u6B63\u5728\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709\u6587\u4EF6...","error-message":"\u683C\u5F0F\u5316\u6587\u4EF6\u5939\u4E2D\u7684\u6240\u6709\u6587\u4EF6\u65F6\u51FA\u9519","success-message":"\u5DF2\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709 {NUM} \u4E2A\u6587\u4EF6","message-singular":"\u5DF2\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709 {NUM} \u4E2A\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 1 \u4E2A\u9519\u8BEF","message-plural":"\u5DF2\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684 {FILE_COUNT} \u4E2A\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 {ERROR_COUNT} \u4E2A\u9519\u8BEF."},"paste-as-plain-text":{name:"\u7C98\u8D34\u4E3A\u7EAF\u6587\u672C\u4E14\u4E0D\u63D0\u9192"},"lint-file-pop-up-menu-text":{name:"\u683C\u5F0F\u5316\u6587\u4EF6"},"lint-folder-pop-up-menu-text":{name:"\u683C\u5F0F\u5316\u6587\u4EF6\u5939"}},logs:{"plugin-load":"\u6B63\u5728\u52A0\u8F7D\u63D2\u4EF6","plugin-unload":"\u6B63\u5728\u5378\u8F7D\u63D2\u4EF6","folder-lint":"\u6B63\u5728\u683C\u5F0F\u5316\u6587\u4EF6\u5939","linter-run":"\u6B63\u5728\u8FD0\u884C Linter","paste-link-warning":"\u4E2D\u6B62\u7C98\u8D34\u683C\u5F0F\u5316 \uFF0C\u56E0\u4E3A\u526A\u8D34\u677F\u5185\u5BB9\u662F\u4E00\u4E2A\u94FE\u63A5\uFF0C\u8FD9\u6837\u505A\u5C06\u907F\u514D\u4E0E\u5176\u4ED6\u4FEE\u6539\u7C98\u8D34\u884C\u4E3A\u7684\u63D2\u4EF6\u53D1\u751F\u51B2\u7A81","see-console":"\u8BF7\u67E5\u770B\u63A7\u5236\u53F0\u4EE5\u83B7\u53D6\u66F4\u591A\u4FE1\u606F","unknown-error":"\u683C\u5F0F\u5316\u8FC7\u7A0B\u53D1\u751F\u672A\u77E5\u9519\u8BEF","moment-locale-not-found":"\u5C1D\u8BD5\u5C06 Moment.js \u7684\u9ED8\u8BA4\u5730\u533A\u8BED\u8A00\u5207\u6362\u5230 {MOMENT_LOCALE}, \u5B9E\u9645\u5207\u6362\u5230 {CURRENT_LOCALE}","file-change-lint-message-start":"\u683C\u5F0F\u5316\u5DF2\u5B8C\u6210","pre-rules":"\u6BD4\u6B63\u5E38\u89C4\u5219\u4F18\u5148\u7EA7\u66F4\u9AD8\u7684\u89C4\u5219","post-rules":"\u6BD4\u6B63\u5E38\u89C4\u5219\u4F18\u5148\u7EA7\u66F4\u4F4E\u7684\u89C4\u5219","rule-running":"\u6B63\u5728\u8FD0\u884C\u89C4\u5219","custom-regex":"\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u89C4\u5219","running-custom-regex":"\u6B63\u5728\u8FD0\u884C\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u89C4\u5219","running-custom-lint-command":"\u6B63\u5728\u8FD0\u884C\u81EA\u5B9A\u4E49\u683C\u5F0F\u5316\u547D\u4EE4","custom-lint-duplicate-warning":'\u4F60\u4E0D\u80FD\u8FD0\u884C\u540C\u4E00\u4E2A\u81EA\u5B9A\u4E49\u89C4\u5219 ("{COMMAND_NAME}") \u4E24\u6B21',"custom-lint-error-message":"\u81EA\u5B9A\u4E49\u683C\u5F0F\u5316\u547D\u4EE4","disabled-text":"\u5DF2\u7981\u7528","run-rule-text":"\u8FD0\u884C\u4E2D","timing-key-not-found":"\u8BA1\u65F6\u952E '{TIMING_KEY}' \u5728\u8BA1\u65F6\u4FE1\u606F\u5217\u8868\u4E2D\u4E0D\u5B58\u5728\uFF0C\u5DF2\u5FFD\u7565","milliseconds-abbreviation":"\u6BEB\u79D2","invalid-date-format-error":"\u65E0\u6CD5\u89E3\u6790\u6216\u786E\u5B9A'{FILE_NAME}'\u4E2D\u7684\u521B\u5EFA\u65E5\u671F'{DATE}'\u7684\u683C\u5F0F\uFF0C\u521B\u5EFA\u65E5\u671F\u672A\u8FDB\u884C\u4FEE\u6539","invalid-delimiter-error-message":"\u5206\u9694\u7B26\u53EA\u80FD\u4E3A\u5355\u4E2A\u5B57\u7B26","missing-footnote-error-message":"\u811A\u6CE8 '{FOOTNOTE}' \u6CA1\u6709\u5BF9\u5E94\u7684\u5F15\u7528\uFF0C\u65E0\u6CD5\u5904\u7406\u3002\u8BF7\u786E\u4FDD\u6240\u6709\u811A\u6CE8\u90FD\u6709\u76F8\u5E94\u7684\u5F15\u7528\u3002","too-many-footnotes-error-message":"\u811A\u6CE8\u7F16\u53F7 '{FOOTNOTE_KEY}' \u6709\u8D85\u8FC71\u4E2A\u811A\u6CE8\u5728\u4F7F\u7528\uFF0C\u8BF7\u4FEE\u6539\u811A\u6CE8\u4F7F\u5F97\u4E00\u4E2A\u811A\u6CE8\u7F16\u53F7\u5BF9\u5E94\u4E00\u4E2A\u811A\u6CE8","wrapper-yaml-error":"yaml\u51FA\u73B0\u9519\u8BEF: {ERROR_MESSAGE}","wrapper-unknown-error":"\u672A\u77E5\u9519\u8BEF: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"\u526A\u8D34\u677F\u4E3A\u7A7A","characters-added":"\u4E2A\u5B57\u7B26\u88AB\u6DFB\u52A0","characters-removed":"\u4E2A\u5B57\u7B26\u88AB\u79FB\u9664"},"all-rules-option":"\u5168\u90E8","linter-title":"Linter","empty-search-results-text":"\u6CA1\u6709\u5339\u914D\u7684\u8BBE\u7F6E\u9879","warning-text":"\u8B66\u544A","file-backup-text":"\u8BF7\u786E\u4FDD\u4F60\u5DF2\u5907\u4EFD\u6587\u4EF6",tabs:{names:{general:"\u57FA\u7840",custom:"\u81EA\u5B9A\u4E49",yaml:"YAML",heading:"\u6807\u9898",content:"\u5185\u5BB9",footnote:"\u811A\u6CE8",spacing:"\u7A7A\u884C",paste:"\u7C98\u8D34",debug:"Debug"},"default-search-bar-text":"\u641C\u7D22\u8BBE\u7F6E\u9879",general:{"lint-on-save":{name:"\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u6587\u4EF6",description:"\u624B\u52A8\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u6587\u4EF6\uFF08\u5F53\u6309 `Ctrl + S` \u65F6\u6216\u5728 vim \u6A21\u5F0F\u4E2D\u4F7F\u7528 `:w` \u65F6\uFF09"},"display-message":{name:"\u683C\u5F0F\u5316\u540E\u663E\u793A\u6D88\u606F",description:"\u683C\u5F0F\u5316\u540E\u663E\u793A\u4FEE\u6539\u4E86\u591A\u5C11\u5B57\u7B26"},"lint-on-file-change":{name:"\u6587\u4EF6\u4FEE\u6539\u65F6\u683C\u5F0F\u5316",description:"\u5F53\u6587\u4EF6\u5173\u95ED\u6216\u662F\u5207\u6362\u5230\u65B0\u6587\u4EF6\u65F6\uFF0C\u683C\u5F0F\u5316\u4E4B\u524D\u7684\u6587\u4EF6"},"display-lint-on-file-change-message":{name:"\u63D0\u9192\u6587\u4EF6\u4FEE\u6539\u65F6\u683C\u5F0F\u5316",description:"\u5F53`\u6587\u4EF6\u4FEE\u6539\u65F6\u683C\u5F0F\u5316`\u89E6\u53D1\u65F6\uFF0C\u5F39\u51FA\u4E00\u6761\u63D0\u793A\u4FE1\u606F"},"folders-to-ignore":{name:"\u5FFD\u7565\u6587\u4EF6\u5939",description:"\u9700\u8981\u5FFD\u7565\u7684\u6587\u4EF6\u5939\uFF08\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\u6216\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u65F6\u751F\u6548\uFF09\uFF0C\u6BCF\u884C\u8F93\u5165\u4E00\u4E2A\u6587\u4EF6\u5939\u8DEF\u5F84"},"override-locale":{name:"\u8986\u76D6\u9ED8\u8BA4\u5730\u533A\u8BED\u8A00",description:"\u4F7F\u7528\u4E0D\u540C\u4E8E\u9ED8\u8BA4\u5730\u533A\u8BED\u8A00\u65F6\u9700\u8981\u8BBE\u7F6E\u6B64\u9879"},"same-as-system-locale":"\u9ED8\u8BA4 ({SYS_LOCALE}) ","yaml-aliases-section-style":{name:"YAML aliases \u6837\u5F0F",description:"YAML aliases \u6837\u5F0F"},"yaml-tags-section-style":{name:"YAML tags \u6837\u5F0F",description:"YAML tags \u6837\u5F0F"},"default-escape-character":{name:"\u9ED8\u8BA4\u8F6C\u4E49\u5B57\u7B26",description:"\u5F53\u5355\u5F15\u53F7\u6216\u53CC\u5F15\u53F7\u4E0D\u5B58\u5728\u65F6\u7528\u4E8E\u8F6C\u4E49 YAML \u503C\u7684\u9ED8\u8BA4\u5B57\u7B26"},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"\u5F53\u4F7F\u7528 YAML \u591A\u884C\u6570\u7EC4\u65F6\u5220\u9664\u4E0D\u5FC5\u8981\u7684\u8F6C\u4E49\u5B57\u7B26",description:"YAML \u591A\u884C\u6570\u7EC4\u7684\u8F6C\u4E49\u5B57\u7B26\u548C YAML \u5355\u884C\u6570\u7EC4\u4E0D\u540C\uFF0C\u56E0\u6B64\u5728\u4F7F\u7528\u591A\u884C\u6570\u7EC4\u65F6\uFF0C\u5220\u9664\u4E0D\u5FC5\u8981\u7684\u8F6C\u4E49\u5B57\u7B26"},"number-of-dollar-signs-to-indicate-math-block":{name:"\u6307\u793A Latex \u5757\u7684 $ \u7B26\u53F7\u6570\u91CF",description:"\u5C06 Latex \u5185\u5BB9\u89C6\u4E3A Latex \u5757\u800C\u4E0D\u662F\u884C\u5185 Latex \u7684 $ \u7B26\u53F7\u7684\u6570\u91CF"}},debug:{"log-level":{name:"\u65E5\u5FD7\u7EA7\u522B",description:"\u5141\u8BB8\u6253\u5370\u7684\u65E5\u5FD7\u7C7B\u578B\uFF0C\u9ED8\u8BA4\u662F ERROR"},"linter-config":{name:"\u683C\u5F0F\u5316\u914D\u7F6E",description:"\u5728\u8BBE\u7F6E\u9875\u9762\u52A0\u8F7D\u65F6\uFF0CLinter \u4E2D data.json \u7684\u5185\u5BB9"},"log-collection":{name:"\u5728\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u548C\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u6536\u96C6\u65E5\u5FD7",description:"\u5728\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u548C\u683C\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u6536\u96C6\u65E5\u5FD7\u3002\u8FD9\u4E9B\u65E5\u5FD7\u6709\u52A9\u4E8E\u8C03\u8BD5\u548C\u521B\u5EFA\u9519\u8BEF\u62A5\u544A"},"linter-logs":{name:"Linter \u65E5\u5FD7",description:"\u5982\u679C\u5F00\u542F\uFF0C\u5219\u663E\u793A\u6700\u540E\u4E00\u6B21\u683C\u5F0F\u5316\u65F6\u4FDD\u5B58\u6216\u8005\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u751F\u6210\u7684\u65E5\u5FD7"}}},options:{"custom-command":{name:"\u81EA\u5B9A\u4E49\u547D\u4EE4",description:"\u81EA\u5B9A\u4E49\u547D\u4EE4\u662F\u5728 Linter \u5B8C\u6210\u683C\u5F0F\u5316\u540E\u8FD0\u884C\u7684 Obsidian \u547D\u4EE4\u3002\u8FD9\u610F\u5473\u7740 Obsidian \u547D\u4EE4\u4F1A\u5728 YAML \u65F6\u95F4\u6233\u4FEE\u6539\u4E4B\u540E\u8FD0\u884C\uFF0C\u56E0\u6B64\u5B83\u4EEC\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5728\u4E0B\u6B21\u8FD0\u884C Linter \u65F6\u89E6\u53D1 YAML \u65F6\u95F4\u6233\u4FEE\u6539\u3002\u4E00\u4E2A Obsidian \u547D\u4EE4\u53EA\u80FD\u9009\u62E9\u4E00\u6B21\u3002**_\u6CE8\u610F\uFF0C\u8FD9\u76EE\u524D\u4EC5\u9002\u7528\u4E8E\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6_**",warning:"\u9009\u62E9\u547D\u4EE4\u65F6\uFF0C\u8BF7\u786E\u4FDD\u4F7F\u7528\u9F20\u6807\u6216\u6309\u56DE\u8F66\u952E\u9009\u62E9\u8BE5\u9009\u9879\uFF0C\u5176\u4ED6\u9009\u62E9\u65B9\u6CD5\u53EF\u80FD\u4E0D\u8D77\u4F5C\u7528\u3002\u53EA\u6709 Obsidian \u547D\u4EE4\u6216\u7A7A\u5B57\u7B26\u4E32\u4F1A\u88AB\u4FDD\u5B58","add-input-button-text":"\u6DFB\u52A0\u65B0\u547D\u4EE4","command-search-placeholder-text":"Obsidian \u547D\u4EE4","move-up-tooltip":"\u4E0A\u79FB","move-down-tooltip":"\u4E0B\u79FB","delete-tooltip":"\u5220\u9664"},"custom-replace":{name:"\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u66FF\u6362",description:"\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u66FF\u6362\u53EF\u5C06\u4EFB\u610F\u7684\u6B63\u5219\u5339\u914D\u5185\u5BB9\u66FF\u6362\u4E3A\u6307\u5B9A\u503C\u3002\u67E5\u627E\u503C\u548C\u66FF\u6362\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F",warning:"\u5982\u679C\u60A8\u4E0D\u77E5\u9053\u6B63\u5219\u8868\u8FBE\u5F0F\u662F\u4EC0\u4E48\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\u3002\u53E6\u5916\uFF0C\u8BF7\u786E\u4FDD\u60A8\u4E0D\u8981\u5728 iOS \u79FB\u52A8\u8BBE\u5907\u4E0A\u4F7F\u7528\u540E\u884C\u65AD\u8A00\uFF0C\u7531\u4E8E\u8BE5\u5E73\u53F0\u4E0D\u652F\u6301\uFF0C\u4F1A\u5BFC\u81F4\u683C\u5F0F\u5316\u5931\u8D25","add-input-button-text":"\u6DFB\u52A0\u65B0\u7684\u6B63\u5219\u66FF\u6362\u89C4\u5219","regex-to-find-placeholder-text":"\u67E5\u627E\u6B63\u5219\u5F0F","flags-placeholder-text":"\u53C2\u6570","regex-to-replace-placeholder-text":"\u66FF\u6362\u6B63\u5219\u5F0F","label-placeholder-text":"\u7B80\u79F0","move-up-tooltip":"\u4E0A\u79FB","move-down-tooltip":"\u4E0B\u79FB","delete-tooltip":"\u5220\u9664"}},rules:{"auto-correct-common-misspellings":{name:"\u81EA\u52A8\u66F4\u6B63\u5E38\u89C1\u7684\u62FC\u5199\u9519\u8BEF",description:"\u901A\u8FC7\u5E38\u89C1\u62FC\u5199\u9519\u8BEF\u5B57\u5178\u81EA\u52A8\u5C06\u9519\u8BEF\u62FC\u5199\u66F4\u6B63\u4E3A\u6B63\u786E\u62FC\u5199\u3002\u6709\u5173\u81EA\u52A8\u66F4\u6B63\u5355\u8BCD\u7684\u5B8C\u6574\u5217\u8868\uFF0C\u8BF7\u53C2\u9605 [auto-correct map](https://github.com/platers/obsidian-linter/tree/master/src/utils/auto-correct-misspellings.ts)","ignore-words":{name:"\u5FFD\u7565\u5355\u8BCD",description:"\u4EE5\u9017\u53F7\u5206\u9694\u7684\u5C0F\u5199\u5355\u8BCD\u5217\u8868\uFF0C\u5728\u81EA\u52A8\u66F4\u6B63\u65F6\u4F1A\u5FFD\u7565"}},"add-blockquote-indentation-on-paste":{name:"\u6DFB\u52A0\u5F15\u7528\u5757\u7F29\u8FDB",description:"\u7C98\u8D34\u65F6\uFF0C\u5982\u679C\u5149\u6807\u4F4D\u4E8E\u5F15\u7528\u884C\u6216\u6807\u6CE8\u884C\uFF0C\u5219\u5C06\u5F15\u7528\u6DFB\u52A0\u5230\u9664\u7B2C\u4E00\u884C\u4EE5\u5916\u7684\u6240\u6709\u884C"},"blockquote-style":{name:"\u5F15\u7528\u5757\u6837\u5F0F",description:"\u786E\u4FDD\u5F15\u7528\u5757\u6837\u5F0F\u4E00\u81F4",style:{name:"\u6837\u5F0F",description:"\u5F15\u7528\u5757\u6807\u5FD7\u5B57\u7B26\u7684\u6837\u5F0F"}},"capitalize-headings":{name:"\u5927\u5199\u6807\u9898",description:"\u6807\u9898\u4F1A\u5728\u683C\u5F0F\u5316\u540E\u5927\u5199",style:{name:"\u6837\u5F0F",description:"\u5927\u5199\u7684\u65B9\u5F0F"},"ignore-case-words":{name:"\u5FFD\u7565\u5927\u5199\u5355\u8BCD",description:"\u5728\u6837\u5F0F\u8BBE\u4E3A\u6BCF\u8BCD\u9996\u5B57\u6BCD\u5927\u5199\u65F6\uFF0C\u4EC5\u683C\u5F0F\u5316\u5168\u5C0F\u5199\u7684\u5355\u8BCD"},"ignore-words":{name:"\u5FFD\u7565\u5355\u8BCD",description:"\u4E0D\u683C\u5F0F\u5316\u7684\u5355\u8BCD\uFF0C\u4EE5\u9017\u53F7\u5206\u9694"},"lowercase-words":{name:"\u5C0F\u5199\u5355\u8BCD",description:"\u4FDD\u6301\u5C0F\u5199\u7684\u5355\u8BCD\uFF0C\u4EE5\u9017\u53F7\u5206\u9694"}},"compact-yaml":{name:"\u7CBE\u7B80 YAML",description:"\u79FB\u9664 YAML Front-matter \u5F00\u5934\u7ED3\u5C3E\u7684\u7A7A\u884C","inner-new-lines":{name:"\u5185\u90E8\u7A7A\u884C",description:"\u79FB\u9664 YAML Front-matter \u5185\u90E8\u7684\u7A7A\u884C"}},"consecutive-blank-lines":{name:"\u8FDE\u7EED\u7A7A\u884C",description:"\u6700\u591A\u5141\u8BB8\u4E00\u4E2A\u8FDE\u7EED\u7A7A\u884C"},"convert-bullet-list-markers":{name:"\u8F6C\u6362\u65E0\u5E8F\u5217\u8868\u6807\u5FD7",description:"\u5C06\u5176\u4ED6\u683C\u5F0F\u65E0\u5E8F\u5217\u8868\u6807\u5FD7\u8F6C\u6362\u4E3A Markdown \u683C\u5F0F\u65E0\u5E8F\u5217\u8868\u6807\u5FD7"},"convert-spaces-to-tabs":{name:"\u8F6C\u6362\u7A7A\u683C\u4E3A\u5236\u8868\u7B26",description:"\u5C06\u524D\u5BFC\u7A7A\u683C\u8F6C\u6362\u4E3A\u5236\u8868\u7B26",tabsize:{name:"\u5236\u8868\u7B26\u5BBD\u5EA6",description:"\u5236\u8868\u7B26\u5BF9\u5E94\u7684\u7A7A\u683C\u5BBD\u5EA6"}},"emphasis-style":{name:"\u7A81\u51FA\u6837\u5F0F",description:"\u4FDD\u6301\u7A81\u51FA\u6837\u5F0F\u4E00\u81F4\u6027",style:{name:"\u6837\u5F0F",description:"\u7528\u4E8E\u8868\u793A\u7A81\u51FA\u5185\u5BB9\u7684\u6837\u5F0F"}},"empty-line-around-blockquotes":{name:"\u5F15\u7528\u5757\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u5F15\u7528\u5757\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E\u3002**\u6CE8\u610F\uFF0C\u8FD9\u91CC\u5D4C\u5957\u5F15\u7528\u5757\u4E5F\u4F1A\u6709\u5BF9\u5E94\u7684\u7A7A\u884C**"},"empty-line-around-code-fences":{name:"\u4EE3\u7801\u5757\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u4EE3\u7801\u5757\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E"},"empty-line-around-math-blocks":{name:"Latex \u5757\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDDLatex \u5757\u524D\u540E\u6709\u7A7A\u884C\u3002\u4F7F\u7528**\u6307\u793A Latex \u5757\u7684 `$` \u7B26\u53F7\u6570\u91CF**\u6765\u786E\u5B9A\u5355\u884C Latex \u662F\u5426\u88AB\u8BA4\u5B9A\u4E3A Latex \u5757"},"empty-line-around-tables":{name:"\u8868\u683C\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u8868\u683C\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E"},"escape-yaml-special-characters":{name:"\u8F6C\u4E49 YAML \u7279\u6B8A\u5B57\u7B26",description:`\u8F6C\u4E49 YAML \u4E2D\u7684\u5192\u53F7(: )\uFF0C\u5355\u5F15\u53F7 (') \u548C\u53CC\u5F15\u53F7 (")`,"try-to-escape-single-line-arrays":{name:"\u5C1D\u8BD5\u8F6C\u4E49\u5355\u884C\u6570\u7EC4",description:"\u5C1D\u8BD5\u8F6C\u4E49\u6570\u7EC4\u503C\uFF0C\u5047\u8BBE\u6570\u7EC4\u4EE5`[`\u5F00\u5934\uFF0C`]`\u7ED3\u5C3E\uFF0C\u5E76\u4E14\u7531`,`\u5206\u9694"}},"file-name-heading":{name:"\u6587\u4EF6\u540D\u4F5C\u4E3A\u6807\u9898",description:"\u5982\u679C\u6CA1\u6709 H1 \u6807\u9898\uFF0C\u5219\u63D2\u5165\u6587\u4EF6\u540D\u4F5C\u4E3A H1 \u6807\u9898"},"footnote-after-punctuation":{name:"\u811A\u6CE8\u5728\u6807\u70B9\u7B26\u53F7\u540E",description:"\u786E\u4FDD\u811A\u6CE8\u5F15\u7528\u7F6E\u4E8E\u6807\u70B9\u7B26\u53F7\u4E4B\u540E\uFF0C\u800C\u4E0D\u662F\u4E4B\u524D"},"force-yaml-escape":{name:"\u5F3A\u5236 YAML \u8F6C\u4E49",description:"\u8F6C\u4E49\u6307\u5B9A YAML \u952E\u7684\u503C","force-yaml-escape-keys":{name:"\u8981\u5F3A\u5236\u8F6C\u79FB\u7684 YAML \u952E",description:"\u5982\u679C\u672A\u8F6C\u4E49\uFF0C\u5219\u4F7F\u7528 YAML \u8F6C\u4E49\u5B57\u7B26\u5BF9\u6307\u5B9A YAML \u952E\u8FDB\u884C\u8F6C\u4E49\uFF0C\u6BCF\u4E2A\u952E\u4E00\u884C\u3002 \u4E0D\u8981\u5BF9 YAML \u6570\u7EC4\u4F7F\u7528"}},"format-tags-in-yaml":{name:"\u683C\u5F0F\u5316 YAML \u4E2D\u7684 tags",description:"\u628A YAML Front-matter \u4E2D tag \u7684\u4E95\u53F7\u5220\u9664\uFF0C\u56E0\u4E3A\u4E95\u53F7\u4F1A\u4F7F tag \u65E0\u6548"},"format-yaml-array":{name:"\u683C\u5F0F\u5316 YAML \u6570\u7EC4",description:"\u5141\u8BB8\u5C06\u5E38\u89C4 YAML \u6570\u7EC4\u683C\u5F0F\u5316\u4E3A\u591A\u884C\u6216\u5355\u884C\uFF0C\u5E76\u5141\u8BB8\u90E8\u5206\u6570\u7EC4(`tags`, `aliases`) \u4FDD\u7559 Obsidian \u539F\u6709\u7684 YAML \u683C\u5F0F\u3002\u8BF7\u6CE8\u610F\uFF0C\u5355\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u5355\u884C\uFF0C\u5982\u679C\u5B58\u5728\u591A\u4E2A\u6761\u76EE\uFF0C\u5219\u4F1A\u53D8\u4E3A\u5355\u884C\u6570\u7EC4\u3002\u5BF9\u4E8E\u5355\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u591A\u884C\uFF0C\u60C5\u51B5\u4E5F\u662F\u5982\u6B64\uFF0C\u53EA\u662F\u5B83\u53D8\u6210\u4E86\u591A\u884C\u6570\u7EC4","alias-key":{name:"\u683C\u5F0F\u5316 YAML aliases",description:"\u6253\u5F00 YAML aliases \u90E8\u5206\u7684\u683C\u5F0F\u8BBE\u7F6E\u3002\u4E0D\u5E94\u4E0E\u89C4\u5219`YAML \u6807\u9898\u522B\u540D`\u540C\u65F6\u542F\u7528\uFF0C\u56E0\u4E3A\u5B83\u4EEC\u53EF\u80FD\u4E0D\u4F1A\u5F88\u597D\u5730\u534F\u540C\u5DE5\u4F5C\uFF0C\u6216\u8005\u5B83\u4EEC\u53EF\u80FD\u6709\u4E0D\u540C\u7684\u683C\u5F0F\u6837\u5F0F\u9009\u62E9\uFF0C\u4ECE\u800C\u5BFC\u81F4\u610F\u5916\u7ED3\u679C"},"tag-key":{name:"\u683C\u5F0F\u5316 YAML tags",description:"\u6253\u5F00 YAML tags \u90E8\u5206\u7684\u683C\u5F0F\u8BBE\u7F6E"},"default-array-style":{name:"\u9ED8\u8BA4\u7684 YAML \u6570\u7EC4\u683C\u5F0F",description:"\u9664\u4E86 tags, aliases \u6216\u5C06\u952E\u503C\u5F3A\u5236\u4E3A\u5355\u884C\u6570\u7EC4\u548C\u5C06\u952E\u503C\u5F3A\u5236\u4E3A\u591A\u884C\u6570\u7EC4\u4E4B\u5916\uFF0C\u5176\u4ED6\u4E3A\u5E38\u89C4 YAML \u6570\u7EC4\u7684\u6837\u5F0F"},"default-array-keys":{name:"\u683C\u5F0F\u5316 YAML \u6570\u7EC4",description:"\u5BF9 YAML \u6570\u7EC4\u8FDB\u884C\u683C\u5F0F\u5316"},"force-single-line-array-style":{name:"\u5F3A\u5236\u8F6C\u4E3A\u5355\u884C\u6570\u7EC4",description:"\u5F3A\u5236\u5C06\u6307\u5B9A\u952E\u7684 YAML \u6570\u7EC4\u8F6C\u4E3A\u5355\u884C\u6570\u7EC4\uFF0C\u6309\u884C\u5206\u9694\uFF08\u7559\u7A7A\u4EE5\u7981\u7528\u6B64\u9009\u9879\uFF09"},"force-multi-line-array-style":{name:"\u5F3A\u5236\u8F6C\u4E3A\u591A\u884C\u6570\u7EC4",description:"\u5F3A\u5236\u5C06\u6307\u5B9A\u952E\u7684 YAML \u6570\u7EC4\u8F6C\u4E3A\u591A\u884C\u6570\u7EC4\uFF0C\u6309\u884C\u5206\u9694\uFF08\u7559\u7A7A\u4EE5\u7981\u7528\u6B64\u9009\u9879\uFF09"}},"header-increment":{name:"\u6807\u9898\u7EA7\u522B\u9012\u589E",description:"\u6807\u9898\u4E00\u6B21\u4EC5\u9012\u589E\u4E00\u4E2A\u7EA7\u522B","start-at-h2":{name:"\u4ECE H2 \u6807\u9898\u5F00\u59CB\u9012\u589E",description:"\u4F7F H2 \u6807\u9898\u6210\u4E3A\u6587\u4EF6\u4E2D\u7684\u6700\u5C0F\u6807\u9898\u7EA7\u522B\uFF0C\u5176\u4ED6\u7EA7\u522B\u7684\u6807\u9898\u8FDB\u884C\u76F8\u5E94\u7684\u9012\u63A8"}},"heading-blank-lines":{name:"\u6807\u9898\u7A7A\u884C",description:"\u4FDD\u8BC1\u6240\u6709\u6807\u9898\u524D\u540E\u5747\u6709\u4E00\u4E2A\u7A7A\u884C\uFF08\u9664\u975E\u6807\u9898\u4F4D\u4E8E\u6587\u6863\u5F00\u5934\u6216\u7ED3\u5C3E\u5904\uFF09",bottom:{name:"\u5E95\u90E8",description:"\u5728\u6807\u9898\u540E\u63D2\u5165\u4E00\u4E2A\u7A7A\u884C"},"empty-line-after-yaml":{name:"YAML \u4E0E\u6807\u9898\u4E4B\u95F4\u7684\u7A7A\u884C",description:"\u4FDD\u7559 YAML Front-matter \u548C\u6807\u9898\u4E4B\u95F4\u7684\u7A7A\u884C"}},"headings-start-line":{name:"\u6807\u9898\u5BF9\u9F50\u884C\u9996",description:"\u5C06\u4E0D\u4EE5\u884C\u9996\u5F00\u59CB\u7684\u6807\u9898\u524D\u9762\u7684\u7A7A\u767D\u5220\u9664\uFF0C\u6807\u9898\u80FD\u88AB\u6B63\u786E\u8BC6\u522B"},"insert-yaml-attributes":{name:"\u63D2\u5165 YAML \u5C5E\u6027",description:"\u628A\u6307\u5B9A\u7684 YAML \u952E\u63D2\u5165\u5230 YAML Front-matter \u4E2D\u3002\u6BCF\u4E2A\u952E\u5360\u4E00\u884C","text-to-insert":{name:"\u8981\u63D2\u5165\u7684\u952E",description:"\u8981\u63D2\u5165\u5230 YAML Front-matter \u4E2D\u7684\u952E"}},"line-break-at-document-end":{name:"\u6587\u4EF6\u7ED3\u5C3E\u6362\u884C",description:"\u786E\u4FDD\u6587\u6863\u7ED3\u5C3E\u6709\u4E00\u884C\u7A7A\u884C"},"move-footnotes-to-the-bottom":{name:"\u79FB\u52A8\u811A\u6CE8\u81F3\u5E95\u90E8",description:"\u5C06\u6240\u6709\u811A\u6CE8\u79FB\u52A8\u5230\u6587\u6863\u5E95\u90E8"},"move-math-block-indicators-to-their-own-line":{name:"\u683C\u5F0F\u5316 Latex \u5757\u6807\u5FD7",description:"\u5C06 Latex \u5757\u6807\u5FD7\u79FB\u5230\u65B0\u884C\u3002\u4F7F\u7528**\u6307\u793A Latex \u5757\u7684 `$` \u7B26\u53F7\u6570\u91CF**\u6765\u786E\u5B9A\u5355\u884C Latex \u662F\u5426\u88AB\u8BA4\u5B9A\u4E3A Latex \u5757"},"move-tags-to-yaml":{name:"\u5C06 tags \u79FB\u81F3 YAML",description:"\u5C06\u6587\u6863\u5185\u6240\u6709\u7684 tags \u79FB\u52A8\u5230 YAML Front-matter \u5185","how-to-handle-existing-tags":{name:"\u5982\u4F55\u5904\u7406\u539F\u6709\u7684 tag",description:"\u5BF9\u4E8E\u6587\u6863\u4E2D\u975E\u88AB\u5FFD\u7565\u7684 tag\uFF0C\u79FB\u52A8\u5230 YAML Front-matter \u540E\u5E94\u8BE5\u91C7\u53D6\u4F55\u79CD\u64CD\u4F5C\uFF1F"},"tags-to-ignore":{name:"\u5FFD\u7565\u7684 tag",description:"\u8FD9\u4E9B tags \u4E0D\u4F1A\u88AB\u79FB\u52A8 YAML Front-matter \u4E2D\u3002\u6BCF\u4E2A tag \u6309\u884C\u5206\u9694\uFF0C\u4E0D\u8981\u5305\u542B`#`"}},"no-bare-urls":{name:"\u7981\u6B62\u539F\u59CB URL",description:"\u9664\u975E\u88AB\u53CD\u5F15\u53F7\u3001\u65B9\u62EC\u53F7\u6216\u5355\u5F15\u53F7/\u53CC\u5F15\u53F7\u5305\u56F4\uFF0C\u5426\u5219\u5C06\u539F\u59CB URL \u7528\u5C16\u62EC\u53F7\u5305\u56F4"},"ordered-list-style":{name:"\u6709\u5E8F\u5217\u8868\u6837\u5F0F",description:"\u786E\u4FDD\u6709\u5E8F\u5217\u8868\u9075\u5FAA\u6307\u5B9A\u7684\u6837\u5F0F\u3002\u8BF7\u6CE8\u610F\uFF0C2\u4E2A\u7A7A\u683C\u62161\u4E2A\u5236\u8868\u7B26\u88AB\u89C6\u4E3A\u4E00\u4E2A\u7F29\u8FDB\u7EA7\u522B","number-style":{name:"\u6392\u5E8F\u65B9\u5F0F",description:"\u6709\u5E8F\u5217\u8868\u5E8F\u53F7\u683C\u5F0F\u5316\u65B9\u5F0F"},"list-end-style":{name:"\u6709\u5E8F\u5217\u8868\u6807\u5FD7\u6837\u5F0F",description:"\u6709\u5E8F\u5217\u8868\u6807\u5FD7\u6837\u5F0F"}},"paragraph-blank-lines":{name:"\u6BB5\u843D\u7A7A\u884C",description:"\u6BCF\u4E2A\u6BB5\u843D\u524D\u540E\u4FDD\u8BC1\u6709\u4E14\u4EC5\u6709\u4E00\u884C\u7A7A\u884C"},"prevent-double-checklist-indicator-on-paste":{name:"\u9632\u6B62\u91CD\u590D\u7684 checklist \u6807\u5FD7",description:"\u7C98\u8D34\u65F6\uFF0C\u5982\u679C\u5149\u6807\u6240\u5728\u884C\u6709 checklist \u6807\u5FD7\uFF0C\u5219\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664 checklist \u6807\u5FD7"},"prevent-double-list-item-indicator-on-paste":{name:"\u9632\u6B62\u91CD\u590D\u7684\u5217\u8868\u6807\u5FD7",description:"\u7C98\u8D34\u65F6\uFF0C\u5982\u679C\u5149\u6807\u6240\u5728\u884C\u6709\u5217\u8868\u6807\u5FD7\uFF0C\u5219\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u5217\u8868\u6807\u5FD7"},"proper-ellipsis-on-paste":{name:"\u6B63\u786E\u7684\u7701\u7565\u53F7",description:"\u7C98\u8D34\u65F6\uFF0C\u5373\u4F7F\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u6709\u7A7A\u683C\uFF0C\u4E5F\u7528\u7701\u7565\u53F7\u66FF\u6362\u4E09\u4E2A\u8FDE\u7EED\u7684\u70B9"},"proper-ellipsis":{name:"\u6B63\u786E\u7684\u7701\u7565\u53F7",description:"\u7528\u7701\u7565\u53F7\u66FF\u6362\u4E09\u4E2A\u8FDE\u7EED\u7684\u70B9"},"quote-style":{name:"\u5F15\u53F7\u6837\u5F0F",description:"\u683C\u5F0F\u5316\u6B63\u6587\u5185\u5BB9\u4E2D\u7684\u5F15\u53F7\u6837\u5F0F\u4E3A\u5355\u5F15\u53F7\u6216\u53CC\u5F15\u53F7","single-quote-enabled":{name:"\u542F\u7528\u5355\u5F15\u53F7\u6837\u5F0F",description:"\u6307\u5B9A\u5E94\u4F7F\u7528\u9009\u5B9A\u7684\u5355\u5F15\u53F7\u6837\u5F0F"},"single-quote-style":{name:"\u5355\u5F15\u53F7\u6837\u5F0F",description:"\u8981\u4F7F\u7528\u7684\u5355\u5F15\u53F7\u6837\u5F0F"},"double-quote-enabled":{name:"\u542F\u7528\u53CC\u5F15\u53F7\u6837\u5F0F",description:"\u6307\u5B9A\u5E94\u4F7F\u7528\u9009\u5B9A\u7684\u53CC\u5F15\u53F7\u6837\u5F0F"},"double-quote-style":{name:"\u53CC\u5F15\u53F7\u6837\u5F0F",description:"\u8981\u4F7F\u7528\u7684\u53CC\u5F15\u53F7\u6837\u5F0F"}},"re-index-footnotes":{name:"\u91CD\u65B0\u7D22\u5F15\u811A\u6CE8",description:"\u57FA\u4E8E\u51FA\u73B0\u7684\u987A\u5E8F\u91CD\u65B0\u7D22\u5F15\u811A\u6CE8\u3002**\u6CE8\u610F\uFF0C\u5982\u679C\u4E00\u4E2A\u952E\u5BF9\u5E94\u591A\u4E2A\u811A\u6CE8\uFF0C\u5219\u6B64\u89C4\u5219\u4E0D\u9002\u7528**"},"remove-consecutive-list-markers":{name:"\u79FB\u9664\u91CD\u590D\u7684\u5217\u8868\u6807\u5FD7",description:"\u79FB\u9664\u91CD\u590D\u7684\u5217\u8868\u6807\u5FD7\u3002\u590D\u5236\u7C98\u8D34\u5217\u8868\u9879\u65F6\u5F88\u6709\u7528"},"remove-empty-lines-between-list-markers-and-checklists":{name:"\u79FB\u9664\u5217\u8868\u548C checklist \u9879\u76EE\u4E4B\u95F4\u7684\u7A7A\u884C",description:"\u5217\u8868\u548C checklist \u9879\u76EE\u4E4B\u95F4\u4E0D\u5E94\u6709\u7A7A\u884C"},"remove-empty-list-markers":{name:"\u79FB\u9664\u7A7A\u7684\u5217\u8868\u6807\u5FD7",description:"\u79FB\u9664\u7A7A\u7684\u5217\u8868\u6807\u5FD7\uFF0C\u6BD4\u5982\u5217\u8868\u540E\u6CA1\u5185\u5BB9"},"remove-hyphenated-line-breaks":{name:"\u79FB\u9664\u8FDE\u5B57\u7B26",description:"\u79FB\u9664\u4E2D\u5212\u7EBF\u8FDE\u5B57\u7B26\u3002\u4ECE\u6587\u7AE0\u4E2D\u7C98\u8D34\u65F6\u5F88\u6709\u7528"},"remove-hyphens-on-paste":{name:"\u79FB\u9664\u8FDE\u5B57\u7B26",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u8FDE\u5B57\u7B26"},"remove-leading-or-trailing-whitespace-on-paste":{name:"\u79FB\u9664\u524D\u5BFC\u6216\u5C3E\u968F\u7A7A\u683C",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u4EFB\u4F55\u524D\u5BFC\u975E\u5236\u8868\u7B26\u7A7A\u683C\u548C\u6240\u6709\u5C3E\u968F\u7A7A\u683C"},"remove-leftover-footnotes-from-quote-on-paste":{name:"\u79FB\u9664\u591A\u4F59\u811A\u6CE8",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u591A\u4F59\u811A\u6CE8"},"remove-link-spacing":{name:"\u79FB\u9664\u94FE\u63A5\u7A7A\u683C",description:"\u79FB\u9664\u94FE\u63A5\u6587\u672C\u9996\u5C3E\u7684\u7A7A\u683C"},"remove-multiple-blank-lines-on-paste":{name:"\u79FB\u9664\u91CD\u590D\u7A7A\u884C",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u5C06\u591A\u4E2A\u7A7A\u884C\u538B\u7F29\u4E3A\u4E00\u4E2A\u7A7A\u884C"},"remove-multiple-spaces":{name:"\u79FB\u9664\u91CD\u590D\u7A7A\u683C",description:"\u79FB\u9664\u4E24\u4E2A\u6216\u66F4\u591A\u8FDE\u7EED\u7684\u7A7A\u683C\uFF0C\u5FFD\u7565\u884C\u9996\u548C\u884C\u5C3E\u7684\u7A7A\u683C"},"remove-space-around-characters":{name:"\u79FB\u9664\u5B57\u7B26\u5468\u56F4\u7684\u7A7A\u683C",description:"\u786E\u4FDD\u67D0\u4E9B\u5B57\u7B26\u5468\u56F4\u6CA1\u6709\u7A7A\u683C\uFF08\u5305\u62EC\u5355\u4E2A\u7A7A\u683C\u6216\u5236\u8868\u7B26\uFF09\u3002**\u6CE8\u610F\uFF0C\u8FD9\u53EF\u80FD\u4F1A\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B\u5F71\u54CD markdown \u683C\u5F0F**","include-fullwidth-forms":{name:"\u5305\u62EC\u5168\u89D2\u5F62\u5F0F",description:'\u5305\u62EC\u5168\u89D2\u5F62\u5F0FUnicode\u5757'},"include-cjk-symbols-and-punctuation":{name:"\u5305\u62ECCJK\u7B26\u53F7\u548C\u6807\u70B9",description:'\u5305\u62ECCJK\u7B26\u53F7\u548C\u6807\u70B9Unicode\u5757'},"include-dashes":{name:"\u5305\u62EC\u7834\u6298\u53F7",description:"\u5305\u62EC en dash (\u2013) \u548C em dash (\u2014)"},"other-symbols":{name:"\u5176\u4ED6\u7B26\u53F7",description:"\u8981\u5305\u62EC\u7684\u5176\u4ED6\u7B26\u53F7"}},"remove-space-before-or-after-characters":{name:"\u79FB\u9664\u5B57\u7B26\u524D\u540E\u7684\u7A7A\u683C",description:"\u79FB\u9664\u6307\u5B9A\u5B57\u7B26\u4E4B\u524D\u548C\u6307\u5B9A\u5B57\u7B26\u4E4B\u540E\u7684\u7A7A\u683C\u3002 **\u6CE8\u610F\uFF0C\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B\uFF0C\u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4 markdown \u683C\u5F0F\u51FA\u73B0\u95EE\u9898**","characters-to-remove-space-before":{name:"\u79FB\u9664\u5B57\u7B26\u524D\u7684\u7A7A\u683C",description:"\u79FB\u9664\u6307\u5B9A\u5B57\u7B26\u524D\u7684\u7A7A\u683C\u3002 **\u6CE8\u610F\uFF0C\u5728\u5B57\u7B26\u5217\u8868\u4E2D\u4F7F\u7528`{`\u6216`}`\u4F1A\u610F\u5916\u5F71\u54CD\u6587\u4EF6\uFF0C\u56E0\u4E3A\u5B83\u5728\u7A0B\u5E8F\u540E\u53F0\u7684\u5FFD\u7565\u8BED\u6CD5\u4E2D\u4F7F\u7528**"},"characters-to-remove-space-after":{name:"\u79FB\u9664\u5B57\u7B26\u540E\u7684\u7A7A\u683C",description:"\u79FB\u9664\u6307\u5B9A\u5B57\u7B26\u540E\u7684\u7A7A\u683C\u3002 **\u6CE8\u610F\uFF0C\u5728\u5B57\u7B26\u5217\u8868\u4E2D\u4F7F\u7528`{`\u6216`}`\u4F1A\u610F\u5916\u5F71\u54CD\u6587\u4EF6\uFF0C\u56E0\u4E3A\u5B83\u5728\u7A0B\u5E8F\u540E\u53F0\u7684\u5FFD\u7565\u8BED\u6CD5\u4E2D\u4F7F\u7528**"}},"remove-trailing-punctuation-in-heading":{name:"\u79FB\u9664\u6807\u9898\u4E2D\u7684\u7ED3\u5C3E\u6807\u70B9\u7B26\u53F7",description:"\u4ECE\u6807\u9898\u7684\u672B\u5C3E\u5220\u9664\u6307\u5B9A\u7684\u6807\u70B9\u7B26\u53F7\uFF0C\u786E\u4FDD\u5FFD\u7565[HTML \u5B57\u7B26\u5B9E\u4F53](https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references)\u672B\u5C3E\u7684\u5206\u53F7","punctuation-to-remove":{name:"\u8981\u5220\u9664\u7684\u7ED3\u5C3E\u6807\u70B9\u7B26\u53F7",description:"\u8981\u4ECE\u6587\u4EF6\u6807\u9898\u7ED3\u5C3E\u4E2D\u5220\u9664\u7684\u6807\u70B9\u7B26\u53F7"}},"remove-yaml-keys":{name:"\u79FB\u9664 YAML \u952E",description:"\u79FB\u9664\u6307\u5B9A\u7684 YAML \u952E","yaml-keys-to-remove":{name:"\u9700\u8981\u79FB\u9664\u7684 YAML \u952E",description:"\u8981\u4ECE YAML Front-matter \u4E2D\u5220\u9664\u7684 YAML \u952E \uFF08\u53EF\u5E26\u6216\u4E0D\u5E26\u5192\u53F7\uFF09"}},"space-after-list-markers":{name:"\u5217\u8868\u6807\u5FD7\u7A7A\u683C",description:"\u5217\u8868\u6807\u5FD7\u548C checkbox \u540E\u5E94\u6709\u4E00\u4E2A\u7A7A\u683C"},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"\u4E2D\u65E5\u97E9\u8BED\u4E0E\u82F1\u8BED\u6216\u6570\u5B57\u4E4B\u95F4\u7684\u7A7A\u683C",description:"\u786E\u4FDD\u4E2D\u6587\u3001\u65E5\u6587\u6216\u97E9\u6587\u548C\u82F1\u6587\u6216\u6570\u5B57\u7531\u5355\u4E2A\u7A7A\u683C\u5206\u9694. [\u53C2\u8003\u94FE\u63A5](https://github.com/sparanoid/chinese-copywriting-guidelines)"},"strong-style":{name:"\u7C97\u4F53\u6837\u5F0F",description:"\u786E\u4FDD\u7C97\u4F53\u6837\u5F0F\u4E00\u81F4",style:{name:"\u6837\u5F0F",description:"\u7528\u4E8E\u8868\u793A\u7C97\u4F53\u7684\u6837\u5F0F"}},"trailing-spaces":{name:"\u672B\u5C3E\u7A7A\u683C",description:"\u79FB\u9664\u6BCF\u884C\u672B\u5C3E\u591A\u4F59\u7684\u7A7A\u683C","twp-space-line-break":{name:"\u4E24\u7A7A\u683C\u6362\u884C",description:'\u5FFD\u7565\u4E24\u4E2A\u7A7A\u683C\u540E\u63A5\u6362\u884C\u7B26\u7684\u60C5\u51B5\uFF08"\u4E24\u7A7A\u683C\u89C4\u5219"\uFF09'}},"two-spaces-between-lines-with-content":{name:"\u5185\u5BB9\u95F4\u9694\u4E24\u4E2A\u7A7A\u683C",description:"\u786E\u4FDD\u5728\u6BB5\u843D\u3001\u5F15\u7528\u548C\u5217\u8868\u9879\u4E2D\uFF0C\u6700\u540E\u4E00\u884C\u5185\u5BB9\u7684\u884C\u672B\u6DFB\u52A0\u4E24\u4E2A\u7A7A\u683C"},"unordered-list-style":{name:"\u65E0\u5E8F\u5217\u8868\u6837\u5F0F",description:"\u786E\u4FDD\u65E0\u5E8F\u5217\u8868\u7B26\u5408\u6307\u5B9A\u7684\u6837\u5F0F","list-style":{name:"\u5217\u8868\u9879\u6837\u5F0F",description:"\u5217\u8868\u9879\u9700\u8981\u6307\u5B9A\u7684\u6837\u5F0F"}},"yaml-key-sort":{name:"YAML \u952E\u6392\u5E8F",description:"\u6839\u636E\u6307\u5B9A\u7684\u987A\u5E8F\u548C\u4F18\u5148\u7EA7\u5BF9 YAML \u952E\u8FDB\u884C\u6392\u5E8F\u3002**\u6CE8\u610F\uFF0C\u4E5F\u8BB8\u4E5F\u4F1A\u5220\u9664\u7A7A\u884C**","yaml-key-priority-sort-order":{name:"YAML \u952E\u4F18\u5148\u7EA7\u6392\u5E8F\u987A\u5E8F",description:"\u5BF9\u952E\u8FDB\u884C\u6392\u5E8F\u7684\u987A\u5E8F\uFF0C\u6BCF\u884C\u4E00\u4E2A\u952E\uFF0C\u6309\u5217\u8868\u4E2D\u7684\u987A\u5E8F\u8FDB\u884C\u6392\u5E8F"},"priority-keys-at-start-of-yaml":{name:"\u6392\u5E8F\u952E\u653E\u5728 YAML \u5F00\u5934",description:"\u6309\u7167 `YAML \u952E\u4F18\u5148\u7EA7\u6392\u5E8F\u987A\u5E8F`\u5C06\u952E\u653E\u4E8E YAML Front-matter \u5F00\u5934"},"yaml-sort-order-for-other-keys":{name:"YAML \u5176\u5B83\u952E\u7684\u6392\u5E8F\u987A\u5E8F",description:"\u5BF9 `YAML \u952E\u4F18\u5148\u7EA7\u6392\u5E8F\u987A\u5E8F`\u4E2D\u672A\u627E\u5230\u7684\u952E\u8FDB\u884C\u6392\u5E8F"}},"yaml-timestamp":{name:"YAML \u65F6\u95F4\u6233",description:"\u5728 YAML Front-matter \u4E2D\u8BB0\u5F55\u4E0A\u6B21\u7F16\u8F91\u6587\u6863\u7684\u65E5\u671F\u3002\u4ECE\u6587\u6863\u5143\u6570\u636E\u4E2D\u83B7\u53D6\u65E5\u671F\u6570\u636E","date-created":{name:"\u521B\u5EFA\u65E5\u671F",description:"\u63D2\u5165\u6587\u4EF6\u7684\u521B\u5EFA\u65E5\u671F"},"date-created-key":{name:"\u521B\u5EFA\u65E5\u671F\u952E\u540D",description:"\u4F7F\u7528\u54EA\u4E2A YAML \u952E\u6765\u8868\u793A\u521B\u5EFA\u65E5\u671F"},"force-retention-of-create-value":{name:"\u5F3A\u5236\u4FDD\u7559\u521B\u5EFA\u65E5\u671F\u503C",description:"\u6CBF\u7528 YAML Front-matter \u4E2D\u5DF2\u6709\u7684\u521B\u5EFA\u65E5\u671F\uFF0C\u5FFD\u7565\u6587\u6863\u5143\u6570\u636E\u3002\u5BF9\u4E8E\u6587\u6863\u5143\u6570\u636E\u66F4\u6539\uFF08\u6BD4\u5982\u590D\u5236\u6587\u4EF6\uFF09\u5BFC\u81F4\u7684\u521B\u5EFA\u65F6\u95F4\u66F4\u6539\u975E\u5E38\u6709\u7528"},"date-modified":{name:"\u4FEE\u6539\u65E5\u671F",description:"\u63D2\u5165\u6587\u4EF6\u7684\u6700\u8FD1\u4E00\u6B21\u7684\u4FEE\u6539\u65E5\u671F"},"date-modified-key":{name:"\u4FEE\u6539\u65E5\u671F\u952E\u540D",description:"\u4F7F\u7528\u54EA\u4E2A YAML \u952E\u6765\u8868\u793A\u4FEE\u6539\u65E5\u671F"},format:{name:"\u683C\u5F0F",description:"Moment.js \u8BED\u6CD5\u683C\u5F0F\uFF08\u8BE6\u60C5\u8BBE\u7F6E\u89C1[Moment format options](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/)"}},"yaml-title-alias":{name:"YAML \u6807\u9898\u522B\u540D",description:"\u5C06\u6587\u6863\u7684\u6807\u9898\u63D2\u5165 YAML Front-matter \u7684 aliases \u90E8\u5206\u3002\u4ECE\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u6216\u6587\u6863\u540D\u4E2D\u83B7\u53D6\u503C","preserve-existing-alias-section-style":{name:"\u4FDD\u7559\u73B0\u6709\u522B\u540D\u90E8\u5206\u6837\u5F0F",description:"\u5982\u679C\u8BBE\u7F6E\uFF0C\u6B64\u9879\u4EC5\u5728\u65B0\u521B\u5EFA\u7684\u522B\u540D\u90E8\u5206\u751F\u6548"},"keep-alias-that-matches-the-filename":{name:"\u786E\u4FDD\u522B\u540D\u4E0E\u6587\u4EF6\u540D\u5339\u914D",description:"\u8FD9\u6837\u7684\u522B\u540D\u901A\u5E38\u662F\u5197\u4F59\u7684"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"\u4F7F\u7528 YAML \u952E `linter-yaml-title-alias` \u6765\u4FDD\u7559\u6807\u9898\u4FEE\u6539\u8BB0\u5F55",description:"\u5982\u679C\u8BBE\u7F6E\uFF0C\u5F53\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u66F4\u6539\u6216\u6587\u6863\u540D\u66F4\u6539\u65F6\uFF0C\u6B64\u952E\u4E2D\u5B58\u50A8\u7684\u65E7 aliases \u5C06\u66FF\u6362\u4E3A\u65B0\u503C\uFF0C\u800C\u4E0D\u4EC5\u4EC5\u662F\u5728 aliases \u4E2D\u63D2\u5165\u65B0\u6761\u76EE"}},"yaml-title":{name:"YAML \u6807\u9898",description:"\u5C06\u6587\u4EF6\u7684\u6807\u9898\u63D2\u5165\u5230 YAML Front-matter \u4E2D\u3002 \u6839\u636E\u6240\u9009\u6A21\u5F0F\u83B7\u53D6\u6807\u9898","title-key":{name:"\u6807\u9898\u952E",description:"\u6807\u9898\u4F7F\u7528\u54EA\u4E00\u4E2A YAML \u952E"},mode:{name:"\u6A21\u5F0F",description:"\u7528\u4E8E\u83B7\u53D6\u6807\u9898\u7684\u65B9\u6CD5"}}},enums:{"Title Case":"\u6BCF\u8BCD\u9996\u5B57\u6BCD\u5927\u5199","ALL CAPS":"\u5168\u90E8\u5927\u5199","First letter":"\u4EC5\u9996\u5B57\u6BCD\u5927\u5199",".":".",")":")",ERROR:"ERROR",TRACE:"TRACE",DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",SILENT:"SILENT",ascending:"\u5347\u5E8F",lazy:"\u5168\u4E3A1",Nothing:"\u65E0","Remove hashtag":"\u79FB\u9664hashtag","Remove whole tag":"\u79FB\u9664\u6574\u4E2A tag",asterisk:"\u661F\u53F7(*)",underscore:"\u4E0B\u5212\u7EBF(_)",consistent:"\u4FDD\u6301\u4E00\u81F4","-":"-","*":"*","+":"+",space:"\u6709\u7A7A\u683C","no space":"\u65E0\u7A7A\u683C",None:"\u65E0","Ascending Alphabetical":"\u6309\u5B57\u6BCD\u987A\u5E8F\u5347\u5E8F","Descending Alphabetical":"\u6309\u5B57\u6BCD\u987A\u5E8F\u964D\u5E8F","multi-line":"\u591A\u884C\u6570\u7EC4","single-line":"\u5355\u884C\u6570\u7EC4","single string to single-line":"\u5B57\u7B26\u4E32\u8F6C\u5355\u884C\u6570\u7EC4","single string to multi-line":"\u5B57\u7B26\u4E32\u8F6C\u591A\u884C\u6570\u7EC4","single string comma delimited":"\u9017\u53F7\u5206\u9694\u5B57\u7B26\u4E32","single string space delimited":"\u7A7A\u683C\u5206\u9694\u5B57\u7B26\u4E32","single-line space delimited":"\u7A7A\u683C\u5206\u9694\u5355\u884C\u6570\u7EC4","first-h1":"\u7B2C\u4E00\u4E2A H1 \u6807\u9898","first-h1-or-filename-if-h1-missing":"\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u6216\u6587\u4EF6\u540D\uFF08\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u4E0D\u5B58\u5728\u65F6\uFF09",filename:"\u6587\u4EF6\u540D","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D"}};var vd={};var xd={ar:Zc,cz:Jc,da:Xc,de:ed,en:zo,es:id,fr:td,hi:nd,id:rd,it:ad,ja:sd,ko:od,nl:ld,no:cd,pl:dd,"pt-BR":pd,pt:ud,ro:md,ru:gd,sq:hd,tr:fd,uk:yd,"zh-TW":vd,zh:bd},za="en",ka=xd[za];function Sa(e){za=e,ka=xd[za||"en"]}function E(e){return ka||rt(`locale not found for '${za}'`),ka&&Cn(ka,e)||Cn(zo,e)}var Aa=function(e){if(e==null)return Th;if(typeof e=="string")return Ah(e);if(typeof e=="object")return Array.isArray(e)?zh(e):Sh(e);if(typeof e=="function")return Ta(e);throw new Error("Expected function, string, or object as test")};function zh(e){let t=[],i=-1;for(;++i":""))+")"})}return u;function u(){let m=[],g,h,x;if((!t||r(o,l,d[d.length-1]||null))&&(m=Lh(i(o,d)),m[0]===La))return m;if(o.children&&m[0]!==Ao)for(h=(n?o.children.length:-1)+a,x=d.concat(o);h>-1&&h=0;){let r=e.charAt(n);if(r===` +`)break;r.trim()===""||r===">"?i=r+i:i="",n--}return[i,n]}function Lo(e=""){let[t]=kd(e,e.length);return` +`+t.trim()}function zd(e="",t=!1,i=1){let n=Lo(e),r=Ut(n,">");return(t||Eo.test(e))&&i===r?n.substring(0,n.lastIndexOf(">")):n}function Eh(e,t){if(t===0)return e;let i=t,n=t;for(;i>=0;){let r=e.charAt(i);if(r.trim()!=="")break;r===` +`&&(n=i),i--}return i<0||n===0?e.substring(t+1):e.substring(0,n)+` +`+e.substring(t)}function Oh(e,t,i,n=!1,r=!1){if(i===0)return e;let a=t.split(">").length-1,s=i,o=i,l=0,d=!1,c="";for(;s>=0;){let b=e.charAt(s);if(b.trim()!==""&&b!==">")break;if(b===">"){if(d)break;l++}else if(b===` +`)if(l===0||l===a||l+1===a)o=s,l=0,c===` +`&&(d=!0);else break;s--,c=b}if(s<0||o===0)return e.substring(i+1);let u=e.substring(o,i);if(u===` +`||u.startsWith(` + +`))return e.substring(0,o)+` +`+e.substring(i);let g=e.lastIndexOf(` +`,o-1),h="";g===-1?h=e.substring(0,o):h=e.substring(g,o);let x=r?zd(h,n,a):Lo(h);return e.substring(0,o)+x+e.substring(i)}function Ch(e,t){if(t===e.length-1)return e;let i=t,n=t,r=!0;for(;i").length-1,s=i,o=i,l=!0,d=0,c=!1,u="";for(;s")break;if(v===">"){if(c)break;d++}else if(v===` +`)if(d===0||d===a||d+1===a)d=0,l?l=!1:o=s,u===` +`&&(c=!0);else break;s++,u=v}if(s===e.length||o===e.length-1)return e.substring(0,i);let m=e.substring(i,o);if(m===` +`||m.endsWith(` + +`))return e.substring(0,i)+` +`+e.substring(o);let h=e.indexOf(` +`,o+1),x="";h===-1?x=e.substring(o):x=e.substring(o+1,h);let b=r?zd(x,n,a):Lo(x);return e.substring(0,i)+b+e.substring(o)}function ot(e,t,i,n=!1){let[r,a]=kd(e,t);if(r.trim()!==""){let o=Eo.test(e.substring(t,i)),l=Mh(e,r,i,o,n);return Oh(l,r,a,o,n)}let s=Ch(e,i);return Eh(s,a)}function Sd(e,t=0){let i=3735928559^t,n=1103547991^t;for(let r=0,a;r>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&n)+(i>>>0)}function Ad(e){return e=e.replaceAll("\\b","\b"),e=e.replaceAll("\\f","\f"),e=e.replaceAll("\\n",` +`),e=e.replaceAll("\\r","\r"),e=e.replaceAll("\\t"," "),e=e.replaceAll("\\v","\v"),e}function qn(e,t){if(t==0)return t;let i=t;for(;i>0&&e.charAt(i-1)!==` +`;)i--;return i}function Td(e,t,i,n){return n>e.length-1?e:e.slice(0,n)+e.slice(n,e.length).replace(t,i)}function Ut(e,t){let i=0;for(let n=0,r=e.length;n-1&&(i++,n=a)}return i}function Oa(e){let t=typeof e;return t!="string"?t==="number":!isNaN(e)&&!isNaN(parseFloat(e))}function Ld(e,t){let i=[],n=-1;for(;(n=t.indexOf(e,n+1))>=0;)i.push(n);return i}function Oe(e,t,i,n){let r=e.length,a=0,s;if(t<0?t=-t>r?0:r+t:t=t>r?r:t,i=i>0?i:0,n.length<1e4)s=Array.from(n),s.unshift(t,i),[].splice.apply(e,s);else for(i&&[].splice.apply(e,[t,i]);a0?(Oe(e,e.length,0,t),e):t}var Ed=/[!-/:-@[-`{-~\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/;var Ue=Ki(/[A-Za-z]/),In=Ki(/\d/),Od=Ki(/[\dA-Fa-f]/),je=Ki(/[\dA-Za-z]/),Cd=Ki(/[!-/:-@[-`{-~]/),Oo=Ki(/[#-'*+\--9=?A-Z^-~]/);function Bn(e){return e!==null&&(e<32||e===127)}function X(e){return e!==null&&(e<0||e===32)}function F(e){return e!==null&&e<-2}function G(e){return e===-2||e===-1||e===32}var Md=Ki(/\s/),qd=Ki(Ed);function Ki(e){return t;function t(i){return i!==null&&e.test(String.fromCharCode(i))}}function Co(e){if(e===null||X(e)||Md(e))return 1;if(qd(e))return 2}function Gt(e,t,i){let n=[],r=-1;for(;++r1&&e[i][1].end.offset-e[i][1].start.offset>1?2:1;let u=Object.assign({},e[n][1].end),m=Object.assign({},e[i][1].start);Id(u,-l),Id(m,l),s={type:l>1?"strongSequence":"emphasisSequence",start:u,end:Object.assign({},e[n][1].end)},o={type:l>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[i][1].start),end:m},a={type:l>1?"strongText":"emphasisText",start:Object.assign({},e[n][1].end),end:Object.assign({},e[i][1].start)},r={type:l>1?"strong":"emphasis",start:Object.assign({},s.start),end:Object.assign({},o.end)},e[n][1].end=Object.assign({},s.start),e[i][1].start=Object.assign({},o.end),d=[],e[n][1].end.offset-e[n][1].start.offset&&(d=Ne(d,[["enter",e[n][1],t],["exit",e[n][1],t]])),d=Ne(d,[["enter",r,t],["enter",s,t],["exit",s,t],["enter",a,t]]),d=Ne(d,Gt(t.parser.constructs.insideSpan.null,e.slice(n+1,i),t)),d=Ne(d,[["exit",a,t],["enter",o,t],["exit",o,t],["exit",r,t]]),e[i][1].end.offset-e[i][1].start.offset?(c=2,d=Ne(d,[["enter",e[i][1],t],["exit",e[i][1],t]])):c=0,Oe(e,n-1,i-n+3,d),i=n+d.length-c-2;break}}for(i=-1;++i=4?s(d):i(d)}function s(d){return d===null?l(d):F(d)?e.attempt(Yh,s,l)(d):(e.enter("codeFlowValue"),o(d))}function o(d){return d===null||F(d)?(e.exit("codeFlowValue"),s(d)):(e.consume(d),o)}function l(d){return e.exit("codeIndented"),t(d)}}function Hh(e,t,i){let n=this;return r;function r(s){return n.parser.lazy[n.now().line]?i(s):F(s)?(e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),r):Y(e,a,"linePrefix",4+1)(s)}function a(s){let o=n.events[n.events.length-1];return o&&o[1].type==="linePrefix"&&o[2].sliceSerialize(o[1],!0).length>=4?t(s):F(s)?r(s):i(s)}}var qo={name:"codeText",tokenize:Vh,resolve:$h,previous:Wh};function $h(e){let t=e.length-4,i=3,n,r;if((e[i][1].type==="lineEnding"||e[i][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=i;++n=4?t(s):e.interrupt(n.parser.constructs.flow,i,t)(s)}}function Fa(e,t,i,n,r,a,s,o,l){let d=l||Number.POSITIVE_INFINITY,c=0;return u;function u(v){return v===60?(e.enter(n),e.enter(r),e.enter(a),e.consume(v),e.exit(a),m):v===null||v===41||Bn(v)?i(v):(e.enter(n),e.enter(s),e.enter(o),e.enter("chunkString",{contentType:"string"}),x(v))}function m(v){return v===62?(e.enter(a),e.consume(v),e.exit(a),e.exit(r),e.exit(n),t):(e.enter(o),e.enter("chunkString",{contentType:"string"}),g(v))}function g(v){return v===62?(e.exit("chunkString"),e.exit(o),m(v)):v===null||v===60||F(v)?i(v):(e.consume(v),v===92?h:g)}function h(v){return v===60||v===62||v===92?(e.consume(v),g):g(v)}function x(v){return v===40?++c>d?i(v):(e.consume(v),x):v===41?c--?(e.consume(v),x):(e.exit("chunkString"),e.exit(o),e.exit(s),e.exit(n),t(v)):v===null||X(v)?c?i(v):(e.exit("chunkString"),e.exit(o),e.exit(s),e.exit(n),t(v)):Bn(v)?i(v):(e.consume(v),v===92?b:x)}function b(v){return v===40||v===41||v===92?(e.consume(v),x):x(v)}}function _a(e,t,i,n,r,a){let s=this,o=0,l;return d;function d(g){return e.enter(n),e.enter(r),e.consume(g),e.exit(r),e.enter(a),c}function c(g){return g===null||g===91||g===93&&!l||g===94&&!o&&"_hiddenFootnoteSupport"in s.parser.constructs||o>999?i(g):g===93?(e.exit(a),e.enter(r),e.consume(g),e.exit(r),e.exit(n),t):F(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),u(g))}function u(g){return g===null||g===91||g===93||F(g)||o++>999?(e.exit("chunkString"),c(g)):(e.consume(g),l=l||!G(g),g===92?m:u)}function m(g){return g===91||g===92||g===93?(e.consume(g),o++,u):u(g)}}function Ra(e,t,i,n,r,a){let s;return o;function o(m){return e.enter(n),e.enter(r),e.consume(m),e.exit(r),s=m===40?41:m,l}function l(m){return m===s?(e.enter(r),e.consume(m),e.exit(r),e.exit(n),t):(e.enter(a),d(m))}function d(m){return m===s?(e.exit(a),l(s)):m===null?i(m):F(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),Y(e,d,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(m))}function c(m){return m===s||m===null||F(m)?(e.exit("chunkString"),d(m)):(e.consume(m),m===92?u:c)}function u(m){return m===s||m===92?(e.consume(m),c):c(m)}}function lt(e,t){let i;return n;function n(r){return F(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),i=!0,n):G(r)?Y(e,n,i?"linePrefix":"lineSuffix")(r):t(r)}}function Be(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var Bo={name:"definition",tokenize:ef},Xh={tokenize:tf,partial:!0};function ef(e,t,i){let n=this,r;return a;function a(l){return e.enter("definition"),_a.call(n,e,s,i,"definitionLabel","definitionLabelMarker","definitionLabelString")(l)}function s(l){return r=Be(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),l===58?(e.enter("definitionMarker"),e.consume(l),e.exit("definitionMarker"),lt(e,Fa(e,e.attempt(Xh,Y(e,o,"whitespace"),Y(e,o,"whitespace")),i,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):i(l)}function o(l){return l===null||F(l)?(e.exit("definition"),n.parser.defined.includes(r)||n.parser.defined.push(r),t(l)):i(l)}}function tf(e,t,i){return n;function n(s){return X(s)?lt(e,r)(s):i(s)}function r(s){return s===34||s===39||s===40?Ra(e,Y(e,a,"whitespace"),i,"definitionTitle","definitionTitleMarker","definitionTitleString")(s):i(s)}function a(s){return s===null||F(s)?t(s):i(s)}}var Fo={name:"hardBreakEscape",tokenize:nf};function nf(e,t,i){return n;function n(a){return e.enter("hardBreakEscape"),e.enter("escapeMarker"),e.consume(a),r}function r(a){return F(a)?(e.exit("escapeMarker"),e.exit("hardBreakEscape"),t(a)):i(a)}}var _o={name:"headingAtx",tokenize:af,resolve:rf};function rf(e,t){let i=e.length-2,n=3,r,a;return e[n][1].type==="whitespace"&&(n+=2),i-2>n&&e[i][1].type==="whitespace"&&(i-=2),e[i][1].type==="atxHeadingSequence"&&(n===i-1||i-4>n&&e[i-2][1].type==="whitespace")&&(i-=n+1===i?2:4),i>n&&(r={type:"atxHeadingText",start:e[n][1].start,end:e[i][1].end},a={type:"chunkText",start:e[n][1].start,end:e[i][1].end,contentType:"text"},Oe(e,n,i-n+1,[["enter",r,t],["enter",a,t],["exit",a,t],["exit",r,t]])),e}function af(e,t,i){let n=this,r=0;return a;function a(c){return e.enter("atxHeading"),e.enter("atxHeadingSequence"),s(c)}function s(c){return c===35&&r++<6?(e.consume(c),s):c===null||X(c)?(e.exit("atxHeadingSequence"),n.interrupt?t(c):o(c)):i(c)}function o(c){return c===35?(e.enter("atxHeadingSequence"),l(c)):c===null||F(c)?(e.exit("atxHeading"),t(c)):G(c)?Y(e,o,"whitespace")(c):(e.enter("atxHeadingText"),d(c))}function l(c){return c===35?(e.consume(c),l):(e.exit("atxHeadingSequence"),o(c))}function d(c){return c===null||c===35||X(c)?(e.exit("atxHeadingText"),o(c)):(e.consume(c),d)}}var Fd=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Ro=["pre","script","style","textarea"];var Do={name:"htmlFlow",tokenize:lf,resolveTo:of,concrete:!0},sf={tokenize:cf,partial:!0};function of(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function lf(e,t,i){let n=this,r,a,s,o,l;return d;function d(k){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(k),c}function c(k){return k===33?(e.consume(k),u):k===47?(e.consume(k),h):k===63?(e.consume(k),r=3,n.interrupt?t:ue):Ue(k)?(e.consume(k),s=String.fromCharCode(k),a=!0,x):i(k)}function u(k){return k===45?(e.consume(k),r=2,m):k===91?(e.consume(k),r=5,s="CDATA[",o=0,g):Ue(k)?(e.consume(k),r=4,n.interrupt?t:ue):i(k)}function m(k){return k===45?(e.consume(k),n.interrupt?t:ue):i(k)}function g(k){return k===s.charCodeAt(o++)?(e.consume(k),o===s.length?n.interrupt?t:j:g):i(k)}function h(k){return Ue(k)?(e.consume(k),s=String.fromCharCode(k),x):i(k)}function x(k){return k===null||k===47||k===62||X(k)?k!==47&&a&&Ro.includes(s.toLowerCase())?(r=1,n.interrupt?t(k):j(k)):Fd.includes(s.toLowerCase())?(r=6,k===47?(e.consume(k),b):n.interrupt?t(k):j(k)):(r=7,n.interrupt&&!n.parser.lazy[n.now().line]?i(k):a?S(k):v(k)):k===45||je(k)?(e.consume(k),s+=String.fromCharCode(k),x):i(k)}function b(k){return k===62?(e.consume(k),n.interrupt?t:j):i(k)}function v(k){return G(k)?(e.consume(k),v):D(k)}function S(k){return k===47?(e.consume(k),D):k===58||k===95||Ue(k)?(e.consume(k),L):G(k)?(e.consume(k),S):D(k)}function L(k){return k===45||k===46||k===58||k===95||je(k)?(e.consume(k),L):M(k)}function M(k){return k===61?(e.consume(k),B):G(k)?(e.consume(k),M):S(k)}function B(k){return k===null||k===60||k===61||k===62||k===96?i(k):k===34||k===39?(e.consume(k),l=k,T):G(k)?(e.consume(k),B):(l=null,_(k))}function T(k){return k===null||F(k)?i(k):k===l?(e.consume(k),q):(e.consume(k),T)}function _(k){return k===null||k===34||k===39||k===60||k===61||k===62||k===96||X(k)?M(k):(e.consume(k),_)}function q(k){return k===47||k===62||G(k)?S(k):i(k)}function D(k){return k===62?(e.consume(k),H):i(k)}function H(k){return G(k)?(e.consume(k),H):k===null||F(k)?j(k):i(k)}function j(k){return k===45&&r===2?(e.consume(k),re):k===60&&r===1?(e.consume(k),Q):k===62&&r===4?(e.consume(k),ae):k===63&&r===3?(e.consume(k),ue):k===93&&r===5?(e.consume(k),de):F(k)&&(r===6||r===7)?e.check(sf,ae,V)(k):k===null||F(k)?V(k):(e.consume(k),j)}function V(k){return e.exit("htmlFlowData"),R(k)}function R(k){return k===null?z(k):F(k)?e.attempt({tokenize:$,partial:!0},R,z)(k):(e.enter("htmlFlowData"),j(k))}function $(k,mi,He){return _e;function _e(Re){return k.enter("lineEnding"),k.consume(Re),k.exit("lineEnding"),ri}function ri(Re){return n.parser.lazy[n.now().line]?He(Re):mi(Re)}}function re(k){return k===45?(e.consume(k),ue):j(k)}function Q(k){return k===47?(e.consume(k),s="",ce):j(k)}function ce(k){return k===62&&Ro.includes(s.toLowerCase())?(e.consume(k),ae):Ue(k)&&s.length<8?(e.consume(k),s+=String.fromCharCode(k),ce):j(k)}function de(k){return k===93?(e.consume(k),ue):j(k)}function ue(k){return k===62?(e.consume(k),ae):k===45&&r===2?(e.consume(k),ue):j(k)}function ae(k){return k===null||F(k)?(e.exit("htmlFlowData"),z(k)):(e.consume(k),ae)}function z(k){return e.exit("htmlFlow"),t(k)}}function cf(e,t,i){return n;function n(r){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),e.attempt(yi,t,i)}}var No={name:"htmlText",tokenize:df};function df(e,t,i){let n=this,r,a,s,o;return l;function l(z){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(z),d}function d(z){return z===33?(e.consume(z),c):z===47?(e.consume(z),_):z===63?(e.consume(z),B):Ue(z)?(e.consume(z),H):i(z)}function c(z){return z===45?(e.consume(z),u):z===91?(e.consume(z),a="CDATA[",s=0,b):Ue(z)?(e.consume(z),M):i(z)}function u(z){return z===45?(e.consume(z),m):i(z)}function m(z){return z===null||z===62?i(z):z===45?(e.consume(z),g):h(z)}function g(z){return z===null||z===62?i(z):h(z)}function h(z){return z===null?i(z):z===45?(e.consume(z),x):F(z)?(o=h,de(z)):(e.consume(z),h)}function x(z){return z===45?(e.consume(z),ae):h(z)}function b(z){return z===a.charCodeAt(s++)?(e.consume(z),s===a.length?v:b):i(z)}function v(z){return z===null?i(z):z===93?(e.consume(z),S):F(z)?(o=v,de(z)):(e.consume(z),v)}function S(z){return z===93?(e.consume(z),L):v(z)}function L(z){return z===62?ae(z):z===93?(e.consume(z),L):v(z)}function M(z){return z===null||z===62?ae(z):F(z)?(o=M,de(z)):(e.consume(z),M)}function B(z){return z===null?i(z):z===63?(e.consume(z),T):F(z)?(o=B,de(z)):(e.consume(z),B)}function T(z){return z===62?ae(z):B(z)}function _(z){return Ue(z)?(e.consume(z),q):i(z)}function q(z){return z===45||je(z)?(e.consume(z),q):D(z)}function D(z){return F(z)?(o=D,de(z)):G(z)?(e.consume(z),D):ae(z)}function H(z){return z===45||je(z)?(e.consume(z),H):z===47||z===62||X(z)?j(z):i(z)}function j(z){return z===47?(e.consume(z),ae):z===58||z===95||Ue(z)?(e.consume(z),V):F(z)?(o=j,de(z)):G(z)?(e.consume(z),j):ae(z)}function V(z){return z===45||z===46||z===58||z===95||je(z)?(e.consume(z),V):R(z)}function R(z){return z===61?(e.consume(z),$):F(z)?(o=R,de(z)):G(z)?(e.consume(z),R):j(z)}function $(z){return z===null||z===60||z===61||z===62||z===96?i(z):z===34||z===39?(e.consume(z),r=z,re):F(z)?(o=$,de(z)):G(z)?(e.consume(z),$):(e.consume(z),r=void 0,ce)}function re(z){return z===r?(e.consume(z),Q):z===null?i(z):F(z)?(o=re,de(z)):(e.consume(z),re)}function Q(z){return z===62||z===47||X(z)?j(z):i(z)}function ce(z){return z===null||z===34||z===39||z===60||z===61||z===96?i(z):z===62||X(z)?j(z):(e.consume(z),ce)}function de(z){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(z),e.exit("lineEnding"),Y(e,ue,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function ue(z){return e.enter("htmlTextData"),o(z)}function ae(z){return z===62?(e.consume(z),e.exit("htmlTextData"),e.exit("htmlText"),t):i(z)}}var ct={name:"labelEnd",tokenize:ff,resolveTo:hf,resolveAll:gf},uf={tokenize:yf},pf={tokenize:bf},mf={tokenize:vf};function gf(e){let t=-1,i;for(;++t999||u===93&&!s||u===null||u===91||X(u))return i(u);if(u===93){e.exit("chunkString");let m=e.exit("gfmFootnoteCallString");return r.includes(Be(n.sliceSerialize(m)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(u),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):i(u)}return X(u)||(s=!0),a++,e.consume(u),u===92?c:d}function c(u){return u===91||u===92||u===93?(e.consume(u),a++,d):d(u)}}function Rf(e,t,i){let n=this,r=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]),a,s=0,o;return l;function l(h){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(h),e.exit("gfmFootnoteDefinitionLabelMarker"),d}function d(h){return h===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(h),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",c):i(h)}function c(h){if(s>999||h===93&&!o||h===null||h===91||X(h))return i(h);if(h===93){e.exit("chunkString");let x=e.exit("gfmFootnoteDefinitionLabelString");return a=Be(n.sliceSerialize(x)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(h),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),m}return X(h)||(o=!0),s++,e.consume(h),h===92?u:c}function u(h){return h===91||h===92||h===93?(e.consume(h),s++,c):c(h)}function m(h){return h===58?(e.enter("definitionMarker"),e.consume(h),e.exit("definitionMarker"),r.includes(a)||r.push(a),Y(e,g,"gfmFootnoteDefinitionWhitespace")):i(h)}function g(h){return t(h)}}function Df(e,t,i){return e.check(yi,t,e.attempt(If,t,i))}function Nf(e){e.exit("gfmFootnoteDefinition")}function jf(e,t,i){let n=this;return Y(e,r,"gfmFootnoteDefinitionIndent",4+1);function r(a){let s=n.events[n.events.length-1];return s&&s[1].type==="gfmFootnoteDefinitionIndent"&&s[2].sliceSerialize(s[1],!0).length===4?t(a):i(a)}}var Kf={tokenize:Yf},Po={text:{[91]:Kf}};function Yf(e,t,i){let n=this;return r;function r(l){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?i(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),a)}function a(l){return X(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),s):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),s):i(l)}function s(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),o):i(l)}function o(l){return F(l)?t(l):G(l)?e.check({tokenize:Pf},t,i)(l):i(l)}}function Pf(e,t,i){return Y(e,n,"whitespace");function n(r){return r===null?i(r):t(r)}}var _d={}.hasOwnProperty;function Na(e){let t={},i=-1;for(;++i=d||c+1s))return;let _=t.events.length,q=_,D,H;for(;q--;)if(t.events[q][0]==="exit"&&t.events[q][1].type==="chunkFlow"){if(D){H=t.events[q][1].end;break}D=!0}for(v(n),T=_;TL;){let B=i[M];t.containerState=B[1],B[0].exit.call(t,e)}i.length=L}function S(){r.write([null]),a=void 0,r=void 0,t.containerState._closeFlow=void 0}}function iy(e,t,i){return Y(e,e.attempt(this.parser.constructs.document,t,i),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}var Zd={tokenize:ty};function ty(e){let t=this,i=e.attempt(yi,n,e.attempt(this.parser.constructs.flowInitial,r,Y(e,e.attempt(this.parser.constructs.flow,r,e.attempt(Io,r)),"linePrefix")));return i;function n(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),t.currentConstruct=void 0,i}function r(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),t.currentConstruct=void 0,i}}var Jd={resolveAll:tu()},Xd=iu("string"),eu=iu("text");function iu(e){return{tokenize:t,resolveAll:tu(e==="text"?ny:void 0)};function t(i){let n=this,r=this.parser.constructs[e],a=i.attempt(r,s,o);return s;function s(c){return d(c)?a(c):o(c)}function o(c){if(c===null){i.consume(c);return}return i.enter("data"),i.consume(c),l}function l(c){return d(c)?(i.exit("data"),a(c)):(i.consume(c),l)}function d(c){if(c===null)return!0;let u=r[c],m=-1;if(u)for(;++m-1&&(s[0]=s[0].slice(n)),a>0&&s.push(e[r].slice(0,a))),s}function ay(e,t){let i=-1,n=[],r;for(;++imy,contentInitial:()=>oy,disable:()=>gy,document:()=>sy,flow:()=>cy,flowInitial:()=>ly,insideSpan:()=>py,string:()=>dy,text:()=>uy});var sy={[42]:Fe,[43]:Fe,[45]:Fe,[48]:Fe,[49]:Fe,[50]:Fe,[51]:Fe,[52]:Fe,[53]:Fe,[54]:Fe,[55]:Fe,[56]:Fe,[57]:Fe,[62]:Ca},oy={[91]:Bo},ly={[-2]:_n,[-1]:_n,[32]:_n},cy={[35]:_o,[42]:dt,[45]:[Da,dt],[60]:Do,[61]:Da,[95]:dt,[96]:Ia,[126]:Ia},dy={[38]:qa,[92]:Ma},uy={[-5]:Rn,[-4]:Rn,[-3]:Rn,[33]:jo,[38]:qa,[42]:Fn,[60]:[Mo,No],[91]:Ko,[92]:[Fo,Ma],[93]:ct,[95]:Fn,[96]:qo},py={null:[Fn,Jd]},my={null:[42,95]},gy={null:[]};function ru(e={}){let t=Na([Vo].concat(e.extensions||[])),i={defined:[],lazy:{},constructs:t,content:n(Ud),document:n(Qd),flow:n(Zd),string:n(Xd),text:n(eu)};return i;function n(r){return a;function a(s){return nu(i,r,s)}}}var au=/[\0\t\n\r]/g;function su(){let e=1,t="",i=!0,n;return r;function r(a,s,o){let l=[],d,c,u,m,g;for(a=t+a.toString(s),u=0,t="",i&&(a.charCodeAt(0)===65279&&u++,i=void 0);u13&&i<32||i>126&&i<160||i>55295&&i<57344||i>64975&&i<65008||(i&65535)===65535||(i&65535)===65534||i>1114111?"\uFFFD":String.fromCharCode(i)}var hy=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Ka(e){return e.replace(hy,fy)}function fy(e,t,i){if(t)return t;if(i.charCodeAt(0)===35){let r=i.charCodeAt(1),a=r===120||r===88;return ja(i.slice(a?2:1),a?16:10)}return Qt(i)||e}function Zt(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?lu(e.position):"start"in e||"end"in e?lu(e):"line"in e||"column"in e?Uo(e):""}function Uo(e){return cu(e&&e.line)+":"+cu(e&&e.column)}function lu(e){return Uo(e&&e.start)+"-"+Uo(e&&e.end)}function cu(e){return e&&typeof e=="number"?e:1}var uu={}.hasOwnProperty,Go=function(e,t,i){return typeof t!="string"&&(i=t,t=void 0),yy(i)(ou(ru(i).document().write(su()(e,t,!0))))};function yy(e){let t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(hi),autolinkProtocol:j,autolinkEmail:j,atxHeading:o(vn),blockQuote:o(gi),characterEscape:j,characterReference:j,codeFenced:o(Li),codeFencedFenceInfo:l,codeFencedFenceMeta:l,codeIndented:o(Li,l),codeText:o(Kt,l),codeTextData:j,data:j,codeFlowValue:j,definition:o(Xs),definitionDestinationString:l,definitionLabelString:l,definitionTitleString:l,emphasis:o(eo),hardBreakEscape:o(xn),hardBreakTrailing:o(xn),htmlFlow:o(ra,l),htmlFlowData:j,htmlText:o(ra,l),htmlTextData:j,image:o(io),label:l,link:o(hi),listItem:o(aa),listItemValue:h,listOrdered:o(it,g),listUnordered:o(it),paragraph:o(sa),reference:_e,referenceString:l,resourceDestinationString:l,resourceTitleString:l,setextHeading:o(vn),strong:o(wn),thematicBreak:o(la)},exit:{atxHeading:c(),atxHeadingSequence:_,autolink:c(),autolinkEmail:ai,autolinkProtocol:Ti,blockQuote:c(),characterEscapeValue:V,characterReferenceMarkerHexadecimal:Re,characterReferenceMarkerNumeric:Re,characterReferenceValue:se,codeFenced:c(S),codeFencedFence:v,codeFencedFenceInfo:x,codeFencedFenceMeta:b,codeFlowValue:V,codeIndented:c(L),codeText:c(ce),codeTextData:V,data:V,definition:c(),definitionDestinationString:T,definitionLabelString:M,definitionTitleString:B,emphasis:c(),hardBreakEscape:c($),hardBreakTrailing:c($),htmlFlow:c(re),htmlFlowData:V,htmlText:c(Q),htmlTextData:V,image:c(ue),label:z,labelText:ae,lineEnding:R,link:c(de),listItem:c(),listOrdered:c(),listUnordered:c(),paragraph:c(),referenceString:ri,resourceDestinationString:k,resourceTitleString:mi,resource:He,setextHeading:c(H),setextHeadingLineSequence:D,setextHeadingText:q,strong:c(),thematicBreak:c()}};pu(t,(e||{}).mdastExtensions||[]);let i={};return n;function n(O){let I={type:"root",children:[]},P={stack:[I],tokenStack:[],config:t,enter:d,exit:u,buffer:l,resume:m,setData:a,getData:s},Z=[],J=-1;for(;++J0){let si=P.tokenStack[P.tokenStack.length-1];(si[1]||du).call(P,void 0,si[0])}for(I.position={start:Yi(O.length>0?O[0][1].start:{line:1,column:1,offset:0}),end:Yi(O.length>0?O[O.length-2][1].end:{line:1,column:1,offset:0})},J=-1;++J0))throw new TypeError("`maxSize` must be a number greater than 0");if(typeof t.maxAge=="number"&&t.maxAge===0)throw new TypeError("`maxAge` must be a number greater than 0");this.maxSize=t.maxSize,this.maxAge=t.maxAge||Number.POSITIVE_INFINITY,this.onEviction=t.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_emitEvictions(t){if(typeof this.onEviction=="function")for(let[i,n]of t)this.onEviction(i,n.value)}_deleteIfExpired(t,i){return typeof i.expiry=="number"&&i.expiry<=Date.now()?(typeof this.onEviction=="function"&&this.onEviction(t,i.value),this.delete(t)):!1}_getOrDeleteIfExpired(t,i){if(this._deleteIfExpired(t,i)===!1)return i.value}_getItemValue(t,i){return i.expiry?this._getOrDeleteIfExpired(t,i):i.value}_peek(t,i){let n=i.get(t);return this._getItemValue(t,n)}_set(t,i){this.cache.set(t,i),this._size++,this._size>=this.maxSize&&(this._size=0,this._emitEvictions(this.oldCache),this.oldCache=this.cache,this.cache=new Map)}_moveToRecent(t,i){this.oldCache.delete(t),this._set(t,i)}*_entriesAscending(){for(let t of this.oldCache){let[i,n]=t;this.cache.has(i)||this._deleteIfExpired(i,n)===!1&&(yield t)}for(let t of this.cache){let[i,n]=t;this._deleteIfExpired(i,n)===!1&&(yield t)}}get(t){if(this.cache.has(t)){let i=this.cache.get(t);return this._getItemValue(t,i)}if(this.oldCache.has(t)){let i=this.oldCache.get(t);if(this._deleteIfExpired(t,i)===!1)return this._moveToRecent(t,i),i.value}}set(t,i,{maxAge:n=this.maxAge}={}){let r=typeof n=="number"&&n!==Number.POSITIVE_INFINITY?Date.now()+n:void 0;this.cache.has(t)?this.cache.set(t,{value:i,expiry:r}):this._set(t,{value:i,expiry:r})}has(t){return this.cache.has(t)?!this._deleteIfExpired(t,this.cache.get(t)):this.oldCache.has(t)?!this._deleteIfExpired(t,this.oldCache.get(t)):!1}peek(t){if(this.cache.has(t))return this._peek(t,this.cache);if(this.oldCache.has(t))return this._peek(t,this.oldCache)}delete(t){let i=this.cache.delete(t);return i&&this._size--,this.oldCache.delete(t)||i}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}resize(t){if(!(t&&t>0))throw new TypeError("`maxSize` must be a number greater than 0");let i=[...this._entriesAscending()],n=i.length-t;n<0?(this.cache=new Map(i),this.oldCache=new Map,this._size=i.length):(n>0&&this._emitEvictions(i.slice(0,n)),this.oldCache=new Map(i.slice(n)),this.cache=new Map,this._size=0),this.maxSize=t}*keys(){for(let[t]of this)yield t}*values(){for(let[,t]of this)yield t}*[Symbol.iterator](){for(let t of this.cache){let[i,n]=t;this._deleteIfExpired(i,n)===!1&&(yield[i,n.value])}for(let t of this.oldCache){let[i,n]=t;this.cache.has(i)||this._deleteIfExpired(i,n)===!1&&(yield[i,n.value])}}*entriesDescending(){let t=[...this.cache];for(let i=t.length-1;i>=0;--i){let n=t[i],[r,a]=n;this._deleteIfExpired(r,a)===!1&&(yield[r,a.value])}t=[...this.oldCache];for(let i=t.length-1;i>=0;--i){let n=t[i],[r,a]=n;this.cache.has(r)||this._deleteIfExpired(r,a)===!1&&(yield[r,a.value])}}*entriesAscending(){for(let[t,i]of this._entriesAscending())yield[t,i.value]}get size(){if(!this._size)return this.oldCache.size;let t=0;for(let i of this.oldCache.keys())this.cache.has(i)||t++;return Math.min(this._size+t,this.maxSize)}entries(){return this.entriesAscending()}forEach(t,i=this){for(let[n,r]of this.entriesAscending())t.call(i,r,n,this)}get[Symbol.toStringTag](){return JSON.stringify([...this.entriesAscending()])}};var Jo=new Dn({maxSize:200});function fu(e){let t=Sd(e);if(Jo.has(t))return Jo.get(t);let i=Go(e,{extensions:[Na([Yo(),Po]),Ho()],mdastExtensions:[[Qo(),Zo],$o()]});return Jo.set(t,i),i}function ye(e,t){let i=fu(t),n=[];return Ea(i,e,r=>{n.push(r.position)}),n.sort((r,a)=>a.start.offset-r.start.offset),n}function Cy(e){let t=fu(e),i=[];return Ea(t,"listItem",n=>{if(n.children)for(let r of n.children)r.type==="paragraph"&&i.push(r.position)}),i.sort((n,r)=>r.start.offset-n.start.offset),i}function yu(e){let t=ye("footnoteDefinition",e),i=[],n=new Map,r=new Map;e=vu(t,e,i,function(s,o,l){let d=o.match(/\[\^.*?\]/)[0];if(n.has(d)){let g=n.get(d);g.footnotesReferencingKey.push(o),n.set(d,g);return}let c,u=[];do c=s.lastIndexOf(d,l),c!==-1&&(u.push(c),l=c-1);while(c>0);let m={key:d,referencePositions:u,footnotesReferencingKey:[o]};n.set(d,m)});for(let s of n){let o=s[1],l=o.referencePositions.length-o.footnotesReferencingKey.length;l=l>=0?l:0;let d=0;for(let c of o.footnotesReferencingKey){if(d+l>=o.referencePositions.length)throw new Error(E("logs.missing-footnote-error-message").replace("{FOOTNOTE}",c));r.set(c,o.referencePositions[l+d++])}}i=i.sort((s,o)=>r.get(s)-r.get(o)),i.length>0&&(e=e.trimEnd()+` +`);for(let s of i)e+=` +`+s;return e}function bu(e){let t=ye("footnoteDefinition",e),i=[],n=new Map,r=new Map,a=new Map,s=[],o=new Set,l=function(u,m,g){let h=m.match(/\[\^.*?\]/)[0];r.set(m,h);let x=o.has(h);if(x&&n.has(m))return n.get(m);if(x)throw new Error(E("logs.too-many-footnotes-error-message").replace("{FOOTNOTE_KEY}",h));let b,v=-1;do b=u.lastIndexOf(h,g),b!==-1&&(s.push({key:h,position:b}),v=b,g=b-1);while(b>0);return o.add(h),v};e=vu(t,e,i,(u,m,g)=>{n.set(m,l(u,m,g))}),i=i.sort((u,m)=>n.get(u)-n.get(m)),s=s.sort((u,m)=>m.position-u.position),i.length>0&&(e=e.trimEnd()+` +`);let d=1,c=new Set;for(let u of i){if(c.has(u))continue;c.add(u);let m=r.get(u),g=`[^${d++}]`;a.set(m,g),e+=` +`+u.replace(m,g)}for(let u of s){let m=a.get(u.key);e=Td(e,u.key,m,u.position)}return e}function vu(e,t,i,n){for(let r of e){let a=t.substring(r.start.offset,r.end.offset);i.push(a),r.end.offset")||s.endsWith("
")||(n[a]=s+" ")}e=pe(e,i.start.offset,i.end.offset,n.join(` +`))}}return e}function wu(e){let t=e.endsWith(` +`),i=ye("paragraph",e);if(i.length===0)return e;for(let n of i){let r=n.start.offset;for(r>0&&r--;r>=0&&e.charAt(r)!=` +`;)r--;r++;let a=e.substring(r,n.end.offset).split(` +`),s=a[0].trimStart();if(s.startsWith(">")||s.startsWith("- ")||s.startsWith("- ")||s.match(/^[0-9]+\.( |\t)+/)||s.match($a))continue;let o=a.length,l=[],d=!1;for(let h=0;h")||x.endsWith("
")||x.endsWith(" ")}for(;r>0&&e.charAt(r-1)==` +`;)r--;let c=e.length,u=n.end.offset;for(u0&&e.charAt(r-1).trim()==="";)r--;(r===0||e.charAt(r-1).trim()!="")&&r++;let a=e.substring(r,n.end.offset);_u.test(a)&&(r+=4,a=a.substring(4)),a=t(a),e=pe(e,r,n.end.offset,a)}return e}function Au(e){let t=ye("code",e);for(let i of t)e.substring(i.start.offset,i.end.offset).startsWith("```")&&(e=ot(e,i.start.offset,i.end.offset));return e}function Tu(e,t){let i=ye("math",e);for(let n of i)e=ot(e,n.start.offset,n.end.offset);i=ye("inlineMath",e);for(let n of i)e.substring(n.start.offset,n.end.offset).startsWith("$".repeat(t))&&(e=ot(e,n.start.offset,n.end.offset));return e}function Lu(e){let t=ye("blockquote",e);for(let i of t){let n=i.end.offset;for(;n0&&e.charAt(a-1)!==` +`;)a--;let s=e.substring(a,r.end.offset),o=function(u){let m=u.lastIndexOf("> ");return m!==-1&&(u=u.substring(m+2)),u=u.replaceAll(" "," "),Math.floor((u.split(" ").length-1)/2)+1},l=new Map,d=function(u,m){let g=m;for(;g>u;)l.delete(g--)},c=-1;s=s.replace(/^(( |\t|> )*)((\d+(\.|\)))|[-*+])([^\n]*)$/gm,(u,m="",g,h,x,b,v)=>{let S=1,L=o(m);if(!/^\d/.test(h)){let M=L>c?L:c;return d(L,M),u}return l.has(L)?t==="ascending"&&(S=l.get(L)+1,l.set(L,S)):l.set(L,1),c>L&&d(L,c),c=L,`${m}${S}${i}${v}`}),e=pe(e,a,r.end.offset,s)}return e}function Ou(e,t){let i=ye("listItem",e);if(!i)return e;let n=/^((\d+[.)])|(- \[[ x]\]))/m,r=t;if(t=="consistent"){let a=i.length-1;for(;a>=0;){let s=e.substring(i[a].start.offset,i[a].end.offset);if(a--,!s.match(n)){r=s.charAt(0);break}}if(a==-1)return e}for(let a of i){let s=e.substring(a.start.offset,a.end.offset);s.match(n)||(s=r+s.substring(1),e=pe(e,a.start.offset,a.end.offset,s))}return e}function el(e,t){let i=ye("blockquote",e);for(let n of i){let r=n.end.offset;for(;r2;){let d=e.indexOf(n,l)+n.length;a.unshift({startIndex:o,endIndex:i+d}),o=i+d+1,l=d+1,s-=2}return a.unshift({startIndex:i+e.indexOf(n,l),endIndex:i+e.length}),a}function hu(e,t,i,n,r){let a=e.substring(qn(e,t),t)??"",s=e.substring(qn(e,i),i)??"",o=/^(>( |\t)*)+\$+$/m,l=e.substring(t,i);return l=l.replace(n,(d,c,u="")=>u===""?c+` +`+a:c+` +`),l=l.replace(r,(d,c="",u,m)=>{let g=c==="";return g&&o.test(s.trim())?d:g?` +`+a+u+m:` +`+u+m}),pe(e,t,i,l)}function Ha(e){let t=[...e.matchAll(qu)],i=[];for(let n of t){let r=qn(e,n.index);if(r===0)continue;let a=qn(e,r-1),s=n[0],o=e.substring(r,n.index+s.length);if(qy(o,s))continue;let l=a,d=e.substring(a,r-1);if(!s.includes("|")&&!d.includes("|"))continue;d=d.replace(Xo,h=>{let x=h.trim();return x===""||x==="|"||(l+=h.length-1),""});let c=s.replace(Xo,"");if(d.endsWith("|")&&(d=d.slice(0,-1)),c.endsWith("|")&&(c=c.slice(0,-1)),d.split("|").length!==c.split("|").length)continue;let u=n.index+n[0].length;if(u>=e.length-1){i.push({startIndex:l,endIndex:e.length});continue}let m=e.substring(u+1).split(` +`),g=0;for(;g]/.test(i)}function Mu(e){let t=0,i=[],n=[...e.matchAll(Bu)];if(!n||n.length===0)return i;let r=[...e.matchAll(Fu)];return n.forEach(a=>{t=a.index;let s=!1,o=e.length-1;for(;r&&r.length!==0&&!s;)if(r[0].index<=t)r.shift();else{s=!0;let l=r[0];o=l.index+l[0].length}i.push({startIndex:t,endIndex:o}),!r||r.length}),i.reverse()}var Pi=/^([ \t]*)(#+)([ \t]+)([^\n\r]*?)([ \t]+#+)?$/gm,Ru=`^XXX\\.*? +(?:((?:.| +)*?) +)?XXX(?=\\s|$)$`,Ge=/^---\n((?:(((?!---)(?:.|\n)*?)\n)?))---(?=\n|$)/,Iy=Ru.replaceAll("X","`"),By=Ru.replaceAll("X","~"),Fy=`^(( |( {4})).* +)+`,iT=new RegExp(`${Iy}|${By}|${Fy}`,"gm"),Wa=/(!?)\[{2}([^\][\n|]+)(\|([^\][\n|]+))?(\|([^\][\n|]+))?\]{2}/g,Nn=/(!?)\[([^[]*)\](\(.*\))/g,jn=/(\s|^)(#[^\s#;.,>\\s*)*",qu=/(\|? *:?-{1,}:? *\|?)(\| *:?-{1,}:? *\|?)*( |\t)*$/gm,Xo=/^(((>[ ]?)*)|([ ]{0,3}))\|/m,Iu=/[^\n]*?\|[^\n]*?(\n|$)/m,Nu=/(([a-z\-0-9]+:)\/{2})([^\s/?#]*[^\s")'.?!/]|[/])?(([/?#][^\s")']*[^\s")'.?!])|[/])?/gi,Jt=/(?:(?:(?:[a-z]+:)?\/\/)|www\.)(?:localhost|(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?|(?:(?:[a-z\u00a1-\uffff0-9][-_]*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:(?:[/?#][^\s")']*[^\s")'.])|[/])?/gi,ju=/]+)>((?:.(?!<\/a>))*.)<\/a>/g,Ku=/[\p{L}\p{N}\p{Pc}\p{M}\-'’`]+/gu,Yu=/&[^\s]+;$/mi,Bu=Qu(!0),Fu=Qu(!1),Pu=/[“”„«»]/g,Hu=/[‘’‚‹›]/g,$u=/<%[^]*?%>/g,Xt="\\[.\\]",_u=new RegExp(`^${Xt}`),Wu=new RegExp(`^${Yn}- ${Xt} `),Ua=new RegExp(`^\\s*- ${Xt} `),$a=/^(\[\^\w+\]) ?([,.;!:?])/gm,Eo=/^(>\s*)+\[![^\s]*\]/m,il=RegExp(/\p{L}/,"u");function Ke(e){return e.replace(/\$/g,"$$$$")}function Pn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Vu(e){let t=e.match(Wa);if(t){for(let i of t)if(i.includes("|")){let n=i.indexOf("|"),r=i.substring(0,n+1)+i.substring(n+1,i.length-2).trim()+"]]";e=e.replace(i,r)}}return e}function Uu(e){let t=Ha(e);if(t.length===0)return e;for(let i of t)e=ot(e,i.startIndex,i.endIndex);return e}function Ga(e){let t=e.match(/^#\s+(.*)/m);if(t&&t[1]){let i=t[1];return i=i.replaceAll(Wa,(n,r,a,s)=>s!=null?s.replace("|",""):a),i.replaceAll(Nn,"$2")}return""}function Gu(e){return[...e.matchAll(jn)].map(t=>t[2])}function Qu(e){let t="",i="";return e?i+="disable":i+="enable",new RegExp(t.replace("{ENDING_TEXT}",i),"g")}var tl="tag",Hn="tags",$n=[tl,Hn],_y="alias",nl="aliases",Wn=[_y,nl],Za="linter-yaml-title-alias",en="disabled rules";function bi(e){return e.match(Ge)===null&&(e=`--- +--- +`+e),e}function tn(e){let t=e.match(Ge);return t?t[1]:null}function Ae(e,t){if(!e.match(Ge))return e;let i=e.match(Ge)[0],n=t(i);return e=e.replace(i,Ke(n)),e}function rl(e){return new RegExp(`^([\\t ]*)${e}:[ \\t]*(\\S.*|(?:(?:\\n *- \\S.*)|((?:\\n *- *))*|(\\n([ \\t]+[^\\n]*))*)*)\\n`,"m")}function Te(e,t,i){let n=`${t}:${i} +`,r=!1,a=e.replace(rl(t),(s,o)=>(r=!0,o+n));return r||(a=`${e}${n}`),a}function Ce(e,t){let i=e.match(rl(t));return i==null?null:i[2]}function ut(e,t){return e.replace(rl(t),"")}function Mi(e){if(e==null)return null;let t=yo(e.replace(/\n(\t)+/g,` + `));return t??{}}function Qe(e,t,i,n,r=!1){if(typeof e=="string"&&(e=[e]),e==null||e.length===0)return Ry(t);let a=n&&(t=="multi-line"||t=="single string to multi-line"&&e.length>1);if(r||a)for(let s=0;si!="");if(e.includes(` +`)){let t=e.split(/[ \t]*\n[ \t]*-[ \t]*/);return t.splice(0,1),t=t.filter(i=>i!=""),t==null||t.length===0?null:t}return e}function Ja(e){if(e==null)return[];let t=[],i=[];Array.isArray(e)?i=e:e.includes(",")?i=Qa(e,","):i=Qa(e," ");for(let n of i)t.push(n.trim());return t}function Xa(e){return typeof e=="string"?Qa(e,","):e}function Qa(e,t=","){if(e==""||e==null)return null;if(t.length>1)throw new Error(E("logs.invalid-delimiter-error-message"));let i=[],n="",r=0;for(;r1&&(e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"'))}function li(e,t,i=!1,n=!1){let r=Ny(e,t,i);if(n)return r;try{if(yo(r)===e)return r}catch{}let a=bo(e,{lineWidth:-1,quotingType:t,forceQuotes:i}).slice(0,-1),s=bo(e,{lineWidth:-1,quotingType:t=='"'?"'":'"',forceQuotes:i}).slice(0,-1);return s===e||s.length")&&(n=n.substring(3)),n.endsWith("

")&&(n=n.substring(0,n.length-4)),t.innerHTML=n}function Xe(e){e.addClass("linter-visually-hidden")}function wi(e){e.removeClass("linter-visually-hidden")}var pt=class{constructor(t,i,n,r,a){this.configKey=t;this.nameKey=i;this.descriptionKey=n;this.defaultValue=r;a&&(this.ruleAlias=a)}getName(){return E(this.nameKey)??""}getDescription(){return E(this.descriptionKey)??""}getSearchInfo(){return{name:this.getName(),description:this.getDescription()}}setOption(t,i){i.ruleConfigs[this.ruleAlias][this.configKey]=t}parseNameAndDescriptionAndRemoveSettingBorder(t,i){xi(this.getName(),t.nameEl,i.settingsTab.component),xi(this.getDescription(),t.descEl,i.settingsTab.component),t.settingEl.addClass("linter-no-border")}},rn=class extends pt{display(i,n,r){let a=new an.Setting(i).addToggle(s=>{s.setValue(n.ruleConfigs[this.ruleAlias][this.configKey]),s.onChange(o=>{this.setOption(o,n),r.settings=n,r.saveSettings()})});this.parseNameAndDescriptionAndRemoveSettingBorder(a,r)}},Vn=class extends pt{display(i,n,r){let a=new an.Setting(i).addText(s=>{s.setValue(n.ruleConfigs[this.ruleAlias][this.configKey]),s.onChange(o=>{this.setOption(o,n),r.settings=n,r.saveSettings()})});this.parseNameAndDescriptionAndRemoveSettingBorder(a,r)}},es=class extends pt{display(i,n,r){let a=new an.Setting(i).addTextArea(s=>{s.setValue(n.ruleConfigs[this.ruleAlias][this.configKey]),s.onChange(o=>{this.setOption(o,n),r.settings=n,r.saveSettings()})});this.parseNameAndDescriptionAndRemoveSettingBorder(a,r)}},is=class extends pt{display(i,n,r){let a=new an.Setting(i).addMomentFormat(s=>{s.setValue(n.ruleConfigs[this.ruleAlias][this.configKey]),s.setPlaceholder("dddd, MMMM Do YYYY, h:mm:ss a"),s.onChange(o=>{this.setOption(o,n),r.settings=n,r.saveSettings()})});this.parseNameAndDescriptionAndRemoveSettingBorder(a,r)}},ts=class{constructor(t,i){this.value=t,this.description=i}getDisplayValue(){return E(this.value)??""}},ns=class extends pt{constructor(i,n,r,a,s,o){super(i,n,r,a,o);this.options=s}getSearchInfo(){return{name:this.getName(),description:this.getDescription(),options:this.options}}display(i,n,r){let a=new an.Setting(i).addDropdown(s=>{for(let o of this.options)s.addOption(o.value.replace("enums.",""),o.getDisplayValue());s.setValue(n.ruleConfigs[this.ruleAlias][this.configKey]),s.onChange(o=>{this.setOption(o,n),r.settings=n,r.saveSettings()})});this.parseNameAndDescriptionAndRemoveSettingBorder(a,r)}};var Hi=class extends Error{constructor(t,i){super(t),this.cause=i??null,this.stack=i.stack??null,Object.setPrototypeOf(this,Hi.prototype)}};var f={code:{replaceAction:"code",placeholder:"{CODE_BLOCK_PLACEHOLDER}"},inlineCode:{replaceAction:"inlineCode",placeholder:"{INLINE_CODE_BLOCK_PLACEHOLDER}"},image:{replaceAction:"image",placeholder:"{IMAGE_PLACEHOLDER}"},thematicBreak:{replaceAction:"thematicBreak",placeholder:"{HORIZONTAL_RULE_PLACEHOLDER}"},italics:{replaceAction:"emphasis",placeholder:"{ITALICS_PLACEHOLDER}"},bold:{replaceAction:"strong",placeholder:"{STRONG_PLACEHOLDER}"},list:{replaceAction:"list",placeholder:"{LIST_PLACEHOLDER}"},blockquote:{replaceAction:"blockquote",placeholder:"{BLOCKQUOTE_PLACEHOLDER}"},math:{replaceAction:"math",placeholder:"{MATH_PLACEHOLDER}"},inlineMath:{replaceAction:"inlineMath",placeholder:"{INLINE_MATH_PLACEHOLDER}"},html:{replaceAction:"html",placeholder:"{HTML_PLACEHOLDER}"},yaml:{replaceAction:Ge,placeholder:Ke(`--- +---`)},wikiLink:{replaceAction:Wa,placeholder:"{WIKI_LINK_PLACEHOLDER}"},obsidianMultiLineComments:{replaceAction:Du,placeholder:"{OBSIDIAN_COMMENT_PLACEHOLDER}"},footnoteAtStartOfLine:{replaceAction:$a,placeholder:"{FOOTNOTE_AT_START_OF_LINE_PLACEHOLDER}"},footnoteAfterATask:{replaceAction:/- \[.] (\[\^\w+\]) ?([,.;!:?])/gm,placeholder:"{FOOTNOTE_AFTER_A_TASK_PLACEHOLDER}"},url:{replaceAction:Jt,placeholder:"{URL_PLACEHOLDER}"},anchorTag:{replaceAction:ju,placeholder:"{ANCHOR_PLACEHOLDER}"},templaterCommand:{replaceAction:$u,placeholder:"{TEMPLATER_PLACEHOLDER}"},link:{replaceAction:Yy,placeholder:"{REGULAR_LINK_PLACEHOLDER}"},tag:{replaceAction:Py,placeholder:"#tag-placeholder"},table:{replaceAction:Hy,placeholder:"{TABLE_PLACEHOLDER}"},customIgnore:{replaceAction:$y,placeholder:"{CUSTOM_IGNORE_PLACEHOLDER}"}};function we(e,t,i){let n=[];for(let r of e){let a;if(typeof r.replaceAction=="string")a=jy(t,r.placeholder,r.replaceAction);else if(r.replaceAction instanceof RegExp)a=Ky(t,r.placeholder,r.replaceAction);else if(typeof r.replaceAction=="function"){let s=r.replaceAction;a=s(t,r.placeholder)}t=a.newText,n.push({replacedValues:a.replacedValues,placeholder:r.placeholder})}return t=i(t),n=n.reverse(),n!=null&&n.length>0&&n.forEach(r=>{r.replacedValues.forEach(a=>{t=t.replace(new RegExp(r.placeholder,"i"),Ke(a))})}),t}function jy(e,t,i){let n=ye(i,e),r=[];for(let a of n){let s=e.substring(a.start.offset,a.end.offset);r.push(s),e=pe(e,a.start.offset,a.end.offset,t)}return r.reverse(),{newText:e,replacedValues:r}}function Ky(e,t,i){let n=e.match(i),r=[];if(i.flags.includes("g")){if(e=e.replaceAll(i,t),n)for(let a of n)r.push(a)}else e=e.replace(i,t),n&&r.push(n[0]);return{newText:e,replacedValues:r}}function Yy(e,t){let i=ye("link",e),n=[];for(let r of i){if(r==null)continue;let a=e.substring(r.start.offset,r.end.offset);a.match(Nn)&&(n.push(a),e=pe(e,r.start.offset,r.end.offset,t))}return n.reverse(),{newText:e,replacedValues:n}}function Py(e,t){let i=[];return e=e.replace(jn,(n,r,a)=>(i.push(a),r+t)),{newText:e,replacedValues:i}}function Hy(e,t){let i=Ha(e),n=new Array(i.length),r=0,a=n.length;for(let s of i)n[a-1-r++]=e.substring(s.startIndex,s.endIndex),e=pe(e,s.startIndex,s.endIndex,t);return{newText:e,replacedValues:n}}function $y(e,t){let i=Mu(e),n=new Array(i.length),r=0,a=n.length;for(let s of i)n[a-1-r++]=e.substring(s.startIndex,s.endIndex),e=pe(e,s.startIndex,s.endIndex,t);return{newText:e,replacedValues:n}}var N=(s=>(s.YAML="YAML",s.HEADING="Heading",s.FOOTNOTE="Footnote",s.CONTENT="Content",s.SPACING="Spacing",s.PASTE="Paste",s))(N||{}),rs=class{constructor(t,i,n,r,a,s,o,l=[],d=!1,c=[]){this.nameKey=t;this.descriptionKey=i;this.settingsKey=n;this.alias=r;this.type=a;this.applyAfterIgnore=s;this.examples=o;this.options=l;this.hasSpecialExecutionOrder=d;this.ignoreTypes=c;this.ruleHeading=this.getName().toLowerCase().replaceAll(" ","-"),l.unshift(new rn("enabled",this.descriptionKey,"",!1));for(let u of l)u.ruleAlias=r}getDefaultOptions(){let t={};for(let i of this.options)t[i.configKey]=i.defaultValue;return t}getOptions(t){return t.ruleConfigs[this.settingsKey]}getName(){return E(this.nameKey)}getDescription(){return E(this.descriptionKey)}getURL(){return"https://platers.github.io/obsidian-linter/settings/"+this.type.toLowerCase()+"-rules/#"+this.ruleHeading}enabledOptionName(){return this.options[0].configKey}apply(t,i){return we(this.ignoreTypes,t,n=>this.applyAfterIgnore(n,i))}},as=class{constructor(t,i,n,r={}){this.description=t,this.options=r,this.before=i,this.after=n}},ip=Object.values(N);function ss(e){let t=tn(e);if(t===null)return[[],!1];let i=Ju(t);return i.includes("all")?[ki.map(n=>n.alias),!0]:[i,!1]}var ki=[],Wy={},mt=new Map;function tp(e){ki.push(e),ki.sort((t,i)=>ip.indexOf(t.type)-ip.indexOf(i.type)||t.settingsKey.localeCompare(i.settingsKey)),Wy[e.alias]=e,mt.has(e.type)?mt.get(e.type).push(e):mt.set(e.type,[e])}function os(e,t){let i;throw e instanceof Hc?(i=e.toString(),i=E("logs.wrapper-yaml-error").replace("{ERROR_MESSAGE}",i.substring(i.indexOf(":")+1))):i=E("logs.wrapper-unknown-error").replace("{ERROR_MESSAGE}",e.message),new Hi(`"${t}" encountered an ${i}`,e)}var bn=da(np());function Vy(e){for(var t=[],i=1;in.example),t.optionBuilders.map(n=>n.option),t.hasSpecialExecutionOrder,t.ignoreTypes);Ve(ei,on).set(this.name,i),Ve(ei,Un).set(t.alias,t)}return Ve(ei,on).get(this.name)}static applyIfEnabledBase(t,i,n,r){let a=t.getOptions(n);if(a[t.enabledOptionName()]){at(t.alias);let s=Object.assign({},a,r);oi(`${E("logs.run-rule-text")} ${t.getName()}`);try{let o=t.apply(i,s);return ji(t.alias),oi(o),[o,!0]}catch(o){ji(t.alias),os(o,t.getName())}}else return[i,!1]}static getBuilderByName(t){return Ve(ei,Un).get(t)}static setNoSettingControl(t,i){Ve(ei,$i).has(t)||Ve(ei,$i).set(t,[]),Ve(ei,$i).get(t).push(i)}static hasSettingControl(t,i){return!Ve(ei,$i).has(t)||!Ve(ei,$i).get(t).includes(i)}},ci=ei;on=new WeakMap,Un=new WeakMap,$i=new WeakMap,Yt(ci,on,new Map),Yt(ci,Un,new Map),Yt(ci,$i,new Map);var w=class extends ci{constructor(i){super();this.alias=i.nameKey.replace(/rules\.(.*)\.name/,"$1"),this.settingsKey=i.nameKey.replace(/rules\.(.*)\.name/,"$1"),this.nameKey=i.nameKey,this.descriptionKey=i.descriptionKey,this.type=i.type,this.hasSpecialExecutionOrder=i.hasSpecialExecutionOrder??!1,i.ruleIgnoreTypes?this.ignoreTypes=[f.customIgnore,...i.ruleIgnoreTypes]:this.ignoreTypes=[f.customIgnore]}static register(i){let n=i.getRule();tp(n)}safeApply(i,n){return this.apply(i,this.buildRuleOptions(n))}buildRuleOptions(i){i=i??{};let n=new this.OptionsClass,r=Object.assign(n,i);for(let a of this.optionBuilders)a.setRuleOption(r,i);return r}static applyIfEnabled(i,n,r,a){let s=this.getRule();return r.includes(s.alias)?(oi(s.alias+" "+E("logs.disabled-text")),[i,!1]):ci.applyIfEnabledBase(s,i,n,a)}static getRuleOptions(i){let n=ci.getRule.bind(this)(),r=new this,a=n.getOptions(i);return r.buildRuleOptions(a)}static noSettingControl(){return(i,n)=>{let r=i.constructor.name;ci.setNoSettingControl(r,n)}}},al,y=class{constructor(t){Yt(this,al,void 0);this.example=new as(t.description,t.before,t.after,t.options)}};al=new WeakMap;var ln,Wi=class{constructor(t){Yt(this,ln,void 0);this.OptionsClass=t.OptionsClass;let i=t.nameKey.split(".");i.length==1?this.configKey=i[0]:this.configKey=i[i.length-2],this.nameKey=t.nameKey,this.descriptionKey=t.descriptionKey,this.optionsKey=t.optionsKey}get defaultValue(){return new this.OptionsClass()[this.optionsKey]}get option(){return Ve(this,ln)||nc(this,ln,this.buildOption()),Ve(this,ln)}setRuleOption(t,i){let n=i[this.configKey];n!==void 0&&(t[this.optionsKey]=n)}};ln=new WeakMap;var U=class extends Wi{buildOption(){return new rn(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}},ls=class extends Wi{buildOption(){return new Vn(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}},ne=class extends Wi{constructor(i){super(i);this.records=i.records.map(n=>new ts("enums."+n.value,n.description))}buildOption(){return new ns(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue,this.records)}},be=class extends Wi{constructor(i){super(i);this.separator=i.separator??` +`,this.splitter=i.splitter??/\n/}buildOption(){return new es(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue.join(this.separator))}setRuleOption(i,n){if(n[this.configKey]!==void 0){let r=n[this.configKey].split(this.splitter).filter(function(a){return a!=""});i[this.optionsKey]=r}}},We=class extends Wi{buildOption(){return new Vn(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}},cs=class extends Wi{buildOption(){return new is(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}};var sl=new Map([["1nd","1st"],["2rd","2nd"],["2st","2nd"],["3nd","3rd"],["3st","3rd"],["4rd","4th"],["a-diaerers","a-diaereses"],["aaccess","access"],["aaccessibility","accessibility"],["aaccession","accession"],["aack","ack"],["aactual","actual"],["aactually","actually"],["aadd","add"],["aagain","again"],["aaggregation","aggregation"],["aanother","another"],["aapply","apply"],["aaproximate","approximate"],["aaproximated","approximated"],["aaproximately","approximately"],["aaproximates","approximates"],["aaproximating","approximating"],["aare","are"],["aassign","assign"],["aassignment","assignment"],["aassignments","assignments"],["aassociated","associated"],["aassumed","assumed"],["aautomatic","automatic"],["aautomatically","automatically"],["abailable","available"],["abanden","abandon"],["abandonded","abandoned"],["abandone","abandon"],["abandonned","abandoned"],["abandonning","abandoning"],["abbbreviated","abbreviated"],["abberation","aberration"],["abberations","aberrations"],["abberivates","abbreviates"],["abberration","aberration"],["abborted","aborted"],["abborting","aborting"],["abbrevate","abbreviate"],["abbrevation","abbreviation"],["abbrevations","abbreviations"],["abbreviaton","abbreviation"],["abbreviatons","abbreviations"],["abbriviate","abbreviate"],["abbriviation","abbreviation"],["abbriviations","abbreviations"],["aberation","aberration"],["abigious","ambiguous"],["abiguity","ambiguity"],["abilityes","abilities"],["abilties","abilities"],["abilty","ability"],["abiss","abyss"],["abitrarily","arbitrarily"],["abitrary","arbitrary"],["abitrate","arbitrate"],["abitration","arbitration"],["abizmal","abysmal"],["abnoramlly","abnormally"],["abnormalty","abnormally"],["abnormaly","abnormally"],["abnornally","abnormally"],["abnove","above"],["abnrormal","abnormal"],["aboluste","absolute"],["abolustely","absolutely"],["abolute","absolute"],["abondon","abandon"],["abondoned","abandoned"],["abondoning","abandoning"],["abondons","abandons"],["aboout","about"],["aborigene","aborigine"],["abortificant","abortifacient"],["aboslute","absolute"],["aboslutely","absolutely"],["abosulte","absolute"],["abosultely","absolutely"],["abosulute","absolute"],["abosulutely","absolutely"],["abotu","about"],["abount","about"],["aboutit","about it"],["aboutthe","about the"],["abouve","above"],["abov","above"],["aboved","above"],["abovemtioned","abovementioned"],["aboves","above"],["abovmentioned","abovementioned"],["abreviate","abbreviate"],["abreviated","abbreviated"],["abreviates","abbreviates"],["abreviating","abbreviating"],["abreviation","abbreviation"],["abreviations","abbreviations"],["abritrarily","arbitrarily"],["abritrary","arbitrary"],["abriviate","abbreviate"],["absail","abseil"],["absailing","abseiling"],["absance","absence"],["abscence","absence"],["abscound","abscond"],["abselutely","absolutely"],["abselutly","absolutely"],["absense","absence"],["absodefly","absolute"],["absodeflyly","absolutely"],["absolate","absolute"],["absolately","absolutely"],["absolaute","absolute"],["absolautely","absolutely"],["absoleted","obsoleted"],["absoletely","absolutely"],["absoliute","absolute"],["absoliutely","absolutely"],["absoloute","absolute"],["absoloutely","absolutely"],["absolte","absolute"],["absoltely","absolutely"],["absoltue","absolute"],["absoltuely","absolutely"],["absoluate","absolute"],["absoluately","absolutely"],["absolue","absolute"],["absoluely","absolutely"],["absoluet","absolute"],["absoluetly","absolutely"],["absolule","absolute"],["absolulte","absolute"],["absolultely","absolutely"],["absolune","absolute"],["absolunely","absolutely"],["absolure","absolute"],["absolurely","absolutely"],["absolut","absolute"],["absolutelly","absolutely"],["absoluth","absolute"],["absoluthe","absolute"],["absoluthely","absolutely"],["absoluthly","absolutely"],["absolutley","absolutely"],["absolutly","absolutely"],["absolutlye","absolutely"],["absoluute","absolute"],["absoluutely","absolutely"],["absoluve","absolute"],["absoluvely","absolutely"],["absoolute","absolute"],["absoolutely","absolutely"],["absorbant","absorbent"],["absorbsion","absorption"],["absorbtion","absorption"],["absorve","absorb"],["absould","absolute"],["absouldly","absolutely"],["absoule","absolute"],["absoulely","absolutely"],["absouletely","absolutely"],["absoult","absolute"],["absoulte","absolute"],["absoultely","absolutely"],["absoultly","absolutely"],["absoulute","absolute"],["absoulutely","absolutely"],["absout","absolute"],["absoute","absolute"],["absoutely","absolutely"],["absoutly","absolutely"],["abstact","abstract"],["abstacted","abstracted"],["abstacter","abstracter"],["abstacting","abstracting"],["abstaction","abstraction"],["abstactions","abstractions"],["abstactly","abstractly"],["abstactness","abstractness"],["abstactor","abstractor"],["abstacts","abstracts"],["abstanence","abstinence"],["abstrac","abstract"],["abstraced","abstracted"],["abstracer","abstracter"],["abstracing","abstracting"],["abstracion","abstraction"],["abstracions","abstractions"],["abstracly","abstractly"],["abstracness","abstractness"],["abstracor","abstractor"],["abstracs","abstracts"],["abstrat","abstract"],["abstrated","abstracted"],["abstrater","abstracter"],["abstrating","abstracting"],["abstration","abstraction"],["abstrations","abstractions"],["abstratly","abstractly"],["abstratness","abstractness"],["abstrator","abstractor"],["abstrats","abstracts"],["abstrct","abstract"],["abstrcted","abstracted"],["abstrcter","abstracter"],["abstrcting","abstracting"],["abstrction","abstraction"],["abstrctions","abstractions"],["abstrctly","abstractly"],["abstrctness","abstractness"],["abstrctor","abstractor"],["abstrcts","abstracts"],["absulute","absolute"],["absymal","abysmal"],["abtract","abstract"],["abtracted","abstracted"],["abtracter","abstracter"],["abtracting","abstracting"],["abtraction","abstraction"],["abtractions","abstractions"],["abtractly","abstractly"],["abtractness","abstractness"],["abtractor","abstractor"],["abtracts","abstracts"],["abudance","abundance"],["abudances","abundances"],["abundacies","abundances"],["abundancies","abundances"],["abundand","abundant"],["abundence","abundance"],["abundent","abundant"],["abundunt","abundant"],["abutts","abuts"],["abvailable","available"],["abvious","obvious"],["acadamy","academy"],["acadimy","academy"],["acadmic","academic"],["acale","scale"],["acatemy","academy"],["accademic","academic"],["accademy","academy"],["accapt","accept"],["accapted","accepted"],["accapts","accepts"],["acccept","accept"],["acccepted","accepted"],["acccepting","accepting"],["acccepts","accepts"],["accces","access"],["acccess","access"],["acccessd","accessed"],["acccessed","accessed"],["acccesses","accesses"],["acccessibility","accessibility"],["acccessible","accessible"],["acccessing","accessing"],["acccession","accession"],["acccessor","accessor"],["acccessors","accessors"],["acccord","accord"],["acccordance","accordance"],["acccordances","accordances"],["acccorded","accorded"],["acccording","according"],["acccordingly","accordingly"],["acccords","accords"],["acccount","account"],["acccumulate","accumulate"],["acccuracy","accuracy"],["acccurate","accurate"],["acccurately","accurately"],["acccused","accused"],["accecpt","accept"],["accecpted","accepted"],["accees","access"],["acceess","access"],["accelarate","accelerate"],["accelaration","acceleration"],["accelarete","accelerate"],["accelearion","acceleration"],["accelearte","accelerate"],["accelearted","accelerated"],["acceleartes","accelerates"],["acceleartion","acceleration"],["acceleartor","accelerator"],["acceleated","accelerated"],["acceleratoin","acceleration"],["acceleraton","acceleration"],["acceleratrion","acceleration"],["accelerte","accelerate"],["accelertion","acceleration"],["accellerate","accelerate"],["accellerated","accelerated"],["accellerating","accelerating"],["accelleration","acceleration"],["accellerator","accelerator"],["accending","ascending"],["acceot","accept"],["accepatble","acceptable"],["accepect","accept"],["accepected","accepted"],["accepeted","accepted"],["acceppt","accept"],["acceptence","acceptance"],["acceptible","acceptable"],["acceptted","accepted"],["acces","access"],["accesed","accessed"],["acceses","accesses"],["accesibility","accessibility"],["accesible","accessible"],["accesiblity","accessibility"],["accesiibility","accessibility"],["accesiiblity","accessibility"],["accesing","accessing"],["accesnt","accent"],["accesor","accessor"],["accesories","accessories"],["accesors","accessors"],["accesory","accessory"],["accessability","accessibility"],["accessable","accessible"],["accessbile","accessible"],["accessiable","accessible"],["accessibile","accessible"],["accessibiliity","accessibility"],["accessibilitiy","accessibility"],["accessibiltiy","accessibility"],["accessibilty","accessibility"],["accessiblilty","accessibility"],["accessiblity","accessibility"],["accessiibility","accessibility"],["accessiiblity","accessibility"],["accessile","accessible"],["accessintg","accessing"],["accessisble","accessible"],["accessoire","accessory"],["accessort","accessor"],["accesss","access"],["accesssibility","accessibility"],["accesssible","accessible"],["accesssiblity","accessibility"],["accesssiiblity","accessibility"],["accesssing","accessing"],["accesssor","accessor"],["accesssors","accessors"],["accet","accept"],["accetable","acceptable"],["accets","accepts"],["acchiev","achieve"],["acchievable","achievable"],["acchieve","achieve"],["acchieveable","achievable"],["acchieved","achieved"],["acchievement","achievement"],["acchievements","achievements"],["acchiever","achiever"],["acchieves","achieves"],["accidant","accident"],["acciddently","accidentally"],["accidentaly","accidentally"],["accidential","accidental"],["accidentially","accidentally"],["accidentically","accidentally"],["accidentilly","accidentally"],["accidentily","accidentally"],["accidently","accidentally"],["accidentually","accidentally"],["accidetly","accidentally"],["acciedential","accidental"],["acciednetally","accidentally"],["accient","accident"],["acciental","accidental"],["acclerated","accelerated"],["acclerates","accelerates"],["accleration","acceleration"],["acclerometers","accelerometers"],["acclimitization","acclimatization"],["accociate","associate"],["accociated","associated"],["accociates","associates"],["accociating","associating"],["accociation","association"],["accociations","associations"],["accoding","according"],["accodingly","accordingly"],["accodr","accord"],["accodrance","accordance"],["accodred","accorded"],["accodring","according"],["accodringly","accordingly"],["accodrs","accords"],["accointing","accounting"],["accoird","accord"],["accoirding","according"],["accomadate","accommodate"],["accomadated","accommodated"],["accomadates","accommodates"],["accomadating","accommodating"],["accomadation","accommodation"],["accomadations","accommodations"],["accomdate","accommodate"],["accomidate","accommodate"],["accommadate","accommodate"],["accommadates","accommodates"],["accommadating","accommodating"],["accommdated","accommodated"],["accomodata","accommodate"],["accomodate","accommodate"],["accomodated","accommodated"],["accomodates","accommodates"],["accomodating","accommodating"],["accomodation","accommodation"],["accomodations","accommodations"],["accompagned","accompanied"],["accompagnied","accompanied"],["accompagnies","accompanies"],["accompagniment","accompaniment"],["accompagning","accompanying"],["accompagny","accompany"],["accompagnying","accompanying"],["accompained","accompanied"],["accompanyed","accompanied"],["accompt","account"],["acconding","according"],["accont","account"],["accontant","accountant"],["acconted","accounted"],["acconting","accounting"],["accoording","according"],["accoordingly","accordingly"],["accoount","account"],["accopunt","account"],["accordding","according"],["accordeon","accordion"],["accordian","accordion"],["accordign","according"],["accordiingly","accordingly"],["accordinag","according"],["accordind","according"],["accordinly","accordingly"],["accordint","according"],["accordintly","accordingly"],["accordling","according"],["accordlingly","accordingly"],["accordng","according"],["accordngly","accordingly"],["accoriding","according"],["accoridng","according"],["accoridngly","accordingly"],["accoringly","accordingly"],["accorndingly","accordingly"],["accort","accord"],["accortance","accordance"],["accorted","accorded"],["accortind","according"],["accorting","according"],["accound","account"],["accouned","accounted"],["accoustic","acoustic"],["accoustically","acoustically"],["accoustics","acoustics"],["accout","account"],["accouting","accounting"],["accoutn","account"],["accpet","accept"],["accpets","accepts"],["accquainted","acquainted"],["accquire","acquire"],["accquired","acquired"],["accquires","acquires"],["accquiring","acquiring"],["accracy","accuracy"],["accrate","accurate"],["accrding","according"],["accrdingly","accordingly"],["accrediation","accreditation"],["accredidation","accreditation"],["accress","access"],["accroding","according"],["accrodingly","accordingly"],["accronym","acronym"],["accronyms","acronyms"],["accrording","according"],["accros","across"],["accrose","across"],["accross","across"],["accsess","access"],["accss","access"],["accssible","accessible"],["accssor","accessor"],["acctual","actual"],["accuarcy","accuracy"],["accuarte","accurate"],["accuartely","accurately"],["accumalate","accumulate"],["accumalates","accumulates"],["accumalator","accumulator"],["accumalte","accumulate"],["accumalted","accumulated"],["accumilated","accumulated"],["accumlate","accumulate"],["accumlated","accumulated"],["accumlates","accumulates"],["accumlating","accumulating"],["accumlator","accumulator"],["accummulating","accumulating"],["accummulators","accumulators"],["accumualte","accumulate"],["accumualtion","accumulation"],["accupied","occupied"],["accupts","accepts"],["accurable","accurate"],["accuraccies","accuracies"],["accuraccy","accuracy"],["accurancy","accuracy"],["accurarcy","accuracy"],["accuratelly","accurately"],["accuratley","accurately"],["accuratly","accurately"],["accurences","occurrences"],["accurracy","accuracy"],["accurring","occurring"],["accussed","accused"],["acditionally","additionally"],["acecess","access"],["acedemic","academic"],["acelerated","accelerated"],["acend","ascend"],["acendance","ascendance"],["acendancey","ascendancy"],["acended","ascended"],["acendence","ascendance"],["acendencey","ascendancy"],["acendency","ascendancy"],["acender","ascender"],["acending","ascending"],["acent","ascent"],["aceptable","acceptable"],["acerage","acreage"],["acess","access"],["acessable","accessible"],["acessed","accessed"],["acesses","accesses"],["acessible","accessible"],["acessing","accessing"],["acessor","accessor"],["acheive","achieve"],["acheived","achieved"],["acheivement","achievement"],["acheivements","achievements"],["acheives","achieves"],["acheiving","achieving"],["acheivment","achievement"],["acheivments","achievements"],["achievment","achievement"],["achievments","achievements"],["achitecture","architecture"],["achitectures","architectures"],["achivable","achievable"],["achivement","achievement"],["achivements","achievements"],["achor","anchor"],["achored","anchored"],["achoring","anchoring"],["achors","anchors"],["ACI","ACPI"],["acident","accident"],["acidental","accidental"],["acidentally","accidentally"],["acidents","accidents"],["acient","ancient"],["acients","ancients"],["ACII","ASCII"],["acition","action"],["acitions","actions"],["acitivate","activate"],["acitivation","activation"],["acitivity","activity"],["acitvate","activate"],["acitve","active"],["acivate","activate"],["acive","active"],["acknodledgment","acknowledgment"],["acknodledgments","acknowledgments"],["acknoledge","acknowledge"],["acknoledged","acknowledged"],["acknoledges","acknowledges"],["acknoledging","acknowledging"],["acknoledgment","acknowledgment"],["acknoledgments","acknowledgments"],["acknowldeged","acknowledged"],["acknowldegement","acknowledgement"],["acknowldegements","acknowledgements"],["acknowledgeing","acknowledging"],["acknowleding","acknowledging"],["acknowlege","acknowledge"],["acknowleged","acknowledged"],["acknowlegement","acknowledgement"],["acknowlegements","acknowledgements"],["acknowleges","acknowledges"],["acknowleging","acknowledging"],["acknowlegment","acknowledgment"],["ackowledge","acknowledge"],["ackowledged","acknowledged"],["ackowledgement","acknowledgement"],["ackowledgements","acknowledgements"],["ackowledges","acknowledges"],["ackowledging","acknowledging"],["acnowledge","acknowledge"],["acocunt","account"],["acommodate","accommodate"],["acommodated","accommodated"],["acommodates","accommodates"],["acommodating","accommodating"],["acommodation","accommodation"],["acommpany","accompany"],["acommpanying","accompanying"],["acomodate","accommodate"],["acomodated","accommodated"],["acompanies","accompanies"],["acomplish","accomplish"],["acomplished","accomplished"],["acomplishment","accomplishment"],["acomplishments","accomplishments"],["acontiguous","a contiguous"],["acoording","according"],["acoordingly","accordingly"],["acording","according"],["acordingly","accordingly"],["acordinng","according"],["acorss","across"],["acorting","according"],["acount","account"],["acounts","accounts"],["acquaintence","acquaintance"],["acquaintences","acquaintances"],["acquiantence","acquaintance"],["acquiantences","acquaintances"],["acquiesence","acquiescence"],["acquisiton","acquisition"],["acquisitons","acquisitions"],["acquited","acquitted"],["acquition","acquisition"],["acqure","acquire"],["acqured","acquired"],["acqures","acquires"],["acquring","acquiring"],["acqusition","acquisition"],["acqusitions","acquisitions"],["acrage","acreage"],["acroos","across"],["acrosss","across"],["acrue","accrue"],["acrued","accrued"],["acssume","assume"],["acssumed","assumed"],["actal","actual"],["actally","actually"],["actaly","actually"],["actaul","actual"],["actaully","actually"],["actial","actual"],["actially","actually"],["actialy","actually"],["actiavte","activate"],["actiavted","activated"],["actiavtes","activates"],["actiavting","activating"],["actiavtion","activation"],["actiavtions","activations"],["actiavtor","activator"],["actibity","activity"],["acticate","activate"],["actice","active"],["actine","active"],["actiual","actual"],["activ","active"],["activaed","activated"],["activationg","activating"],["actived","activated"],["activeta","activate"],["activete","activate"],["activeted","activated"],["activetes","activates"],["activiate","activate"],["activies","activities"],["activites","activities"],["activitis","activities"],["activitites","activities"],["activitiy","activity"],["activley","actively"],["activly","actively"],["activste","activate"],["activsted","activated"],["activstes","activates"],["activtes","activates"],["activties","activities"],["activtion","activation"],["activty","activity"],["activw","active"],["activy","activity"],["actove","active"],["actuaal","actual"],["actuaally","actually"],["actuak","actual"],["actuakly","actually"],["actuallin","actually"],["actualy","actually"],["actualyl","actually"],["actuell","actual"],["actuion","action"],["actuionable","actionable"],["actul","actual"],["actullay","actually"],["actully","actually"],["actural","actual"],["acturally","actually"],["actusally","actually"],["actve","active"],["actzal","actual"],["acual","actual"],["acually","actually"],["acuired","acquired"],["acuires","acquires"],["acumulate","accumulate"],["acumulated","accumulated"],["acumulates","accumulates"],["acumulating","accumulating"],["acumulation","accumulation"],["acumulative","accumulative"],["acumulator","accumulator"],["acuqire","acquire"],["acuracy","accuracy"],["acurate","accurate"],["acused","accused"],["acustom","accustom"],["acustommed","accustomed"],["acutal","actual"],["acutally","actually"],["acutual","actual"],["adapated","adapted"],["adapater","adapter"],["adapaters","adapters"],["adapative","adaptive"],["adapdive","adaptive"],["adapive","adaptive"],["adaptaion","adaptation"],["adaptare","adapter"],["adapte","adapter"],["adaptee","adapted"],["adaptes","adapters"],["adaptibe","adaptive"],["adaquate","adequate"],["adaquately","adequately"],["adatper","adapter"],["adatpers","adapters"],["adavance","advance"],["adavanced","advanced"],["adbandon","abandon"],["addapt","adapt"],["addaptation","adaptation"],["addaptations","adaptations"],["addapted","adapted"],["addapting","adapting"],["addapts","adapts"],["addd","add"],["addded","added"],["addding","adding"],["adddress","address"],["adddresses","addresses"],["addds","adds"],["addedd","added"],["addeed","added"],["addersses","addresses"],["addert","assert"],["adderted","asserted"],["addess","address"],["addessed","addressed"],["addesses","addresses"],["addessing","addressing"],["addied","added"],["addig","adding"],["addiional","additional"],["addiiton","addition"],["addiitonall","additional"],["addional","additional"],["addionally","additionally"],["addiotion","addition"],["addiotional","additional"],["addiotionally","additionally"],["addiotions","additions"],["additianal","additional"],["additianally","additionally"],["additinal","additional"],["additinally","additionally"],["additioanal","additional"],["additioanally","additionally"],["additioanlly","additionally"],["additiona","additional"],["additionallly","additionally"],["additionals","additional"],["additionaly","additionally"],["additionalyy","additionally"],["additionnal","additional"],["additionnally","additionally"],["additionnaly","additionally"],["additoin","addition"],["additoinal","additional"],["additoinally","additionally"],["additoinaly","additionally"],["additon","addition"],["additonal","additional"],["additonally","additionally"],["additonaly","additionally"],["addjust","adjust"],["addjusted","adjusted"],["addjusting","adjusting"],["addjusts","adjusts"],["addmission","admission"],["addmit","admit"],["addopt","adopt"],["addopted","adopted"],["addpress","address"],["addrass","address"],["addrees","address"],["addreess","address"],["addrerss","address"],["addrerssed","addressed"],["addrersser","addresser"],["addrersses","addresses"],["addrerssing","addressing"],["addrersss","address"],["addrersssed","addressed"],["addrerssser","addresser"],["addrerssses","addresses"],["addrersssing","addressing"],["addres","address"],["addresable","addressable"],["addresed","addressed"],["addreses","addresses"],["addresess","addresses"],["addresing","addressing"],["addressess","addresses"],["addressings","addressing"],["addresss","address"],["addresssed","addressed"],["addressses","addresses"],["addresssing","addressing"],["addrress","address"],["addrss","address"],["addrssed","addressed"],["addrsses","addresses"],["addrssing","addressing"],["addted","added"],["addtion","addition"],["addtional","additional"],["addtionally","additionally"],["addtitional","additional"],["adecuate","adequate"],["aded","added"],["adequit","adequate"],["adevnture","adventure"],["adevntured","adventured"],["adevnturer","adventurer"],["adevnturers","adventurers"],["adevntures","adventures"],["adevnturing","adventuring"],["adhearing","adhering"],["adherance","adherence"],["adiacent","adjacent"],["adiditon","addition"],["adin","admin"],["ading","adding"],["adition","addition"],["aditional","additional"],["aditionally","additionally"],["aditionaly","additionally"],["aditionnal","additional"],["adivsories","advisories"],["adivsoriyes","advisories"],["adivsory","advisory"],["adjacentsy","adjacency"],["adjactend","adjacent"],["adjancent","adjacent"],["adjascent","adjacent"],["adjasence","adjacence"],["adjasencies","adjacencies"],["adjasensy","adjacency"],["adjasent","adjacent"],["adjast","adjust"],["adjcence","adjacence"],["adjcencies","adjacencies"],["adjcent","adjacent"],["adjcentcy","adjacency"],["adjsence","adjacence"],["adjsencies","adjacencies"],["adjsuted","adjusted"],["adjuscent","adjacent"],["adjusment","adjustment"],["adjustement","adjustment"],["adjustements","adjustments"],["adjustificat","justification"],["adjustification","justification"],["adjustmant","adjustment"],["adjustmants","adjustments"],["adjustmenet","adjustment"],["admendment","amendment"],["admi","admin"],["admininistrative","administrative"],["admininistrator","administrator"],["admininistrators","administrators"],["admininstrator","administrator"],["administation","administration"],["administator","administrator"],["administor","administrator"],["administraively","administratively"],["adminitrator","administrator"],["adminssion","admission"],["adminstered","administered"],["adminstrate","administrate"],["adminstration","administration"],["adminstrative","administrative"],["adminstrator","administrator"],["adminstrators","administrators"],["admisible","admissible"],["admissability","admissibility"],["admissable","admissible"],["admited","admitted"],["admitedly","admittedly"],["admn","admin"],["admnistrator","administrator"],["admnistrators","administrators"],["adn","and"],["adobted","adopted"],["adolecent","adolescent"],["adpapted","adapted"],["adpat","adapt"],["adpated","adapted"],["adpater","adapter"],["adpaters","adapters"],["adpats","adapts"],["adpter","adapter"],["adquire","acquire"],["adquired","acquired"],["adquires","acquires"],["adquiring","acquiring"],["adrea","area"],["adrerss","address"],["adrerssed","addressed"],["adrersser","addresser"],["adrersses","addresses"],["adrerssing","addressing"],["adres","address"],["adresable","addressable"],["adresing","addressing"],["adress","address"],["adressable","addressable"],["adresse","address"],["adressed","addressed"],["adresses","addresses"],["adressing","addressing"],["adresss","address"],["adressses","addresses"],["adrress","address"],["adrresses","addresses"],["adtodetect","autodetect"],["adusted","adjusted"],["adustment","adjustment"],["advanatage","advantage"],["advanatages","advantages"],["advanatge","advantage"],["advandced","advanced"],["advane","advance"],["advaned","advanced"],["advantagous","advantageous"],["advanved","advanced"],["adventages","advantages"],["adventrous","adventurous"],["adverised","advertised"],["advertice","advertise"],["adverticed","advertised"],["advertisment","advertisement"],["advertisments","advertisements"],["advertistment","advertisement"],["advertistments","advertisements"],["advertize","advertise"],["advertized","advertised"],["advertizes","advertises"],["advesary","adversary"],["advetise","advertise"],["adviced","advised"],["adviseable","advisable"],["advisoriyes","advisories"],["advizable","advisable"],["adwances","advances"],["aequidistant","equidistant"],["aequivalent","equivalent"],["aeriel","aerial"],["aeriels","aerials"],["aesily","easily"],["aesy","easy"],["aexs","axes"],["afair","affair"],["afaraid","afraid"],["afe","safe"],["afecting","affecting"],["afer","after"],["aferwards","afterwards"],["afetr","after"],["affecfted","affected"],["afficianados","aficionados"],["afficionado","aficionado"],["afficionados","aficionados"],["affilate","affiliate"],["affilates","affiliates"],["affilation","affiliation"],["affilations","affiliations"],["affilliate","affiliate"],["affinitied","affinities"],["affinitiy","affinity"],["affinitze","affinitize"],["affinties","affinities"],["affintiy","affinity"],["affintize","affinitize"],["affinty","affinity"],["affitnity","affinity"],["afforementioned","aforementioned"],["affortable","affordable"],["afforts","affords"],["affraid","afraid"],["afinity","affinity"],["afor","for"],["aforememtioned","aforementioned"],["aforementiond","aforementioned"],["aforementionned","aforementioned"],["aformentioned","aforementioned"],["afterall","after all"],["afterw","after"],["aftrer","after"],["aftzer","after"],["againnst","against"],["againsg","against"],["againt","against"],["againts","against"],["agaisnt","against"],["agaist","against"],["agancies","agencies"],["agancy","agency"],["aganist","against"],["agant","agent"],["aggaravates","aggravates"],["aggegate","aggregate"],["aggessive","aggressive"],["aggessively","aggressively"],["agggregate","aggregate"],["aggragate","aggregate"],["aggragator","aggregator"],["aggrated","aggregated"],["aggreagate","aggregate"],["aggreataon","aggregation"],["aggreate","aggregate"],["aggreated","aggregated"],["aggreation","aggregation"],["aggreations","aggregations"],["aggreed","agreed"],["aggreement","agreement"],["aggregatet","aggregated"],["aggregetor","aggregator"],["aggreggate","aggregate"],["aggregious","egregious"],["aggregrate","aggregate"],["aggregrated","aggregated"],["aggresive","aggressive"],["aggresively","aggressively"],["aggrevate","aggravate"],["aggrgate","aggregate"],["agian","again"],["agianst","against"],["agin","again"],["aginst","against"],["aglorithm","algorithm"],["aglorithms","algorithms"],["agorithm","algorithm"],["agrain","again"],["agravate","aggravate"],["agre","agree"],["agred","agreed"],["agreeement","agreement"],["agreemnet","agreement"],["agreemnets","agreements"],["agreemnt","agreement"],["agregate","aggregate"],["agregated","aggregated"],["agregates","aggregates"],["agregation","aggregation"],["agregator","aggregator"],["agreing","agreeing"],["agrement","agreement"],["agression","aggression"],["agressive","aggressive"],["agressively","aggressively"],["agressiveness","aggressiveness"],["agressivity","aggressivity"],["agressor","aggressor"],["agresssive","aggressive"],["agrgument","argument"],["agrguments","arguments"],["agricultue","agriculture"],["agriculure","agriculture"],["agricuture","agriculture"],["agrieved","aggrieved"],["agrresive","aggressive"],["agrument","argument"],["agruments","arguments"],["agsinst","against"],["agument","argument"],["agumented","augmented"],["aguments","arguments"],["aheared","adhered"],["ahev","have"],["ahlpa","alpha"],["ahlpas","alphas"],["ahppen","happen"],["ahve","have"],["aicraft","aircraft"],["aiffer","differ"],["ailgn","align"],["aiport","airport"],["airator","aerator"],["airbourne","airborne"],["aircaft","aircraft"],["aircrafts'","aircraft's"],["aircrafts","aircraft"],["airfow","airflow"],["airlfow","airflow"],["airloom","heirloom"],["airporta","airports"],["airrcraft","aircraft"],["aisian","Asian"],["aixs","axis"],["aizmuth","azimuth"],["ajacence","adjacence"],["ajacencies","adjacencies"],["ajacency","adjacency"],["ajacent","adjacent"],["ajacentcy","adjacency"],["ajasence","adjacence"],["ajasencies","adjacencies"],["ajative","adjective"],["ajcencies","adjacencies"],["ajsencies","adjacencies"],["ajurnment","adjournment"],["ajust","adjust"],["ajusted","adjusted"],["ajustement","adjustment"],["ajusting","adjusting"],["ajustment","adjustment"],["ajustments","adjustments"],["ake","ache"],["akkumulate","accumulate"],["akkumulated","accumulated"],["akkumulates","accumulates"],["akkumulating","accumulating"],["akkumulation","accumulation"],["akkumulative","accumulative"],["akkumulator","accumulator"],["aknowledge","acknowledge"],["aks","ask"],["aksed","asked"],["aktivate","activate"],["aktivated","activated"],["aktivates","activates"],["aktivating","activating"],["aktivation","activation"],["akumulate","accumulate"],["akumulated","accumulated"],["akumulates","accumulates"],["akumulating","accumulating"],["akumulation","accumulation"],["akumulative","accumulative"],["akumulator","accumulator"],["alaready","already"],["albiet","albeit"],["albumns","albums"],["alcemy","alchemy"],["alchohol","alcohol"],["alchoholic","alcoholic"],["alchol","alcohol"],["alcholic","alcoholic"],["alcohal","alcohol"],["alcoholical","alcoholic"],["aleady","already"],["aleays","always"],["aledge","allege"],["aledged","alleged"],["aledges","alleges"],["alegance","allegiance"],["alege","allege"],["aleged","alleged"],["alegience","allegiance"],["alegorical","allegorical"],["alernate","alternate"],["alernated","alternated"],["alernately","alternately"],["alernates","alternates"],["alers","alerts"],["aleviate","alleviate"],["aleviates","alleviates"],["aleviating","alleviating"],["alevt","alert"],["algebraical","algebraic"],["algebric","algebraic"],["algebrra","algebra"],["algee","algae"],["alghorithm","algorithm"],["alghoritm","algorithm"],["alghoritmic","algorithmic"],["alghoritmically","algorithmically"],["alghoritms","algorithms"],["algined","aligned"],["alginment","alignment"],["alginments","alignments"],["algohm","algorithm"],["algohmic","algorithmic"],["algohmically","algorithmically"],["algohms","algorithms"],["algoirthm","algorithm"],["algoirthmic","algorithmic"],["algoirthmically","algorithmically"],["algoirthms","algorithms"],["algoithm","algorithm"],["algoithmic","algorithmic"],["algoithmically","algorithmically"],["algoithms","algorithms"],["algolithm","algorithm"],["algolithmic","algorithmic"],["algolithmically","algorithmically"],["algolithms","algorithms"],["algoorithm","algorithm"],["algoorithmic","algorithmic"],["algoorithmically","algorithmically"],["algoorithms","algorithms"],["algoprithm","algorithm"],["algoprithmic","algorithmic"],["algoprithmically","algorithmically"],["algoprithms","algorithms"],["algorgithm","algorithm"],["algorgithmic","algorithmic"],["algorgithmically","algorithmically"],["algorgithms","algorithms"],["algorhithm","algorithm"],["algorhithmic","algorithmic"],["algorhithmically","algorithmically"],["algorhithms","algorithms"],["algorhitm","algorithm"],["algorhitmic","algorithmic"],["algorhitmically","algorithmically"],["algorhitms","algorithms"],["algorhtm","algorithm"],["algorhtmic","algorithmic"],["algorhtmically","algorithmically"],["algorhtms","algorithms"],["algorhythm","algorithm"],["algorhythmic","algorithmic"],["algorhythmically","algorithmically"],["algorhythms","algorithms"],["algorhytm","algorithm"],["algorhytmic","algorithmic"],["algorhytmically","algorithmically"],["algorhytms","algorithms"],["algorightm","algorithm"],["algorightmic","algorithmic"],["algorightmically","algorithmically"],["algorightms","algorithms"],["algorihm","algorithm"],["algorihmic","algorithmic"],["algorihmically","algorithmically"],["algorihms","algorithms"],["algorihtm","algorithm"],["algorihtmic","algorithmic"],["algorihtmically","algorithmically"],["algorihtms","algorithms"],["algoristhms","algorithms"],["algorith","algorithm"],["algorithem","algorithm"],["algorithemic","algorithmic"],["algorithemically","algorithmically"],["algorithems","algorithms"],["algorithic","algorithmic"],["algorithically","algorithmically"],["algorithim","algorithm"],["algorithimes","algorithms"],["algorithimic","algorithmic"],["algorithimically","algorithmically"],["algorithims","algorithms"],["algorithmes","algorithms"],["algorithmi","algorithm"],["algorithmical","algorithmically"],["algorithmm","algorithm"],["algorithmmic","algorithmic"],["algorithmmically","algorithmically"],["algorithmms","algorithms"],["algorithmn","algorithm"],["algorithmnic","algorithmic"],["algorithmnically","algorithmically"],["algorithmns","algorithms"],["algoriths","algorithms"],["algorithsmic","algorithmic"],["algorithsmically","algorithmically"],["algorithsms","algorithms"],["algoritm","algorithm"],["algoritmic","algorithmic"],["algoritmically","algorithmically"],["algoritms","algorithms"],["algoroithm","algorithm"],["algoroithmic","algorithmic"],["algoroithmically","algorithmically"],["algoroithms","algorithms"],["algororithm","algorithm"],["algororithmic","algorithmic"],["algororithmically","algorithmically"],["algororithms","algorithms"],["algorothm","algorithm"],["algorothmic","algorithmic"],["algorothmically","algorithmically"],["algorothms","algorithms"],["algorrithm","algorithm"],["algorrithmic","algorithmic"],["algorrithmically","algorithmically"],["algorrithms","algorithms"],["algorritm","algorithm"],["algorritmic","algorithmic"],["algorritmically","algorithmically"],["algorritms","algorithms"],["algorthim","algorithm"],["algorthimic","algorithmic"],["algorthimically","algorithmically"],["algorthims","algorithms"],["algorthin","algorithm"],["algorthinic","algorithmic"],["algorthinically","algorithmically"],["algorthins","algorithms"],["algorthm","algorithm"],["algorthmic","algorithmic"],["algorthmically","algorithmically"],["algorthms","algorithms"],["algorthn","algorithm"],["algorthnic","algorithmic"],["algorthnically","algorithmically"],["algorthns","algorithms"],["algorthym","algorithm"],["algorthymic","algorithmic"],["algorthymically","algorithmically"],["algorthyms","algorithms"],["algorthyn","algorithm"],["algorthynic","algorithmic"],["algorthynically","algorithmically"],["algorthyns","algorithms"],["algortihm","algorithm"],["algortihmic","algorithmic"],["algortihmically","algorithmically"],["algortihms","algorithms"],["algortim","algorithm"],["algortimic","algorithmic"],["algortimically","algorithmically"],["algortims","algorithms"],["algortism","algorithm"],["algortismic","algorithmic"],["algortismically","algorithmically"],["algortisms","algorithms"],["algortithm","algorithm"],["algortithmic","algorithmic"],["algortithmically","algorithmically"],["algortithms","algorithms"],["algoruthm","algorithm"],["algoruthmic","algorithmic"],["algoruthmically","algorithmically"],["algoruthms","algorithms"],["algorwwithm","algorithm"],["algorwwithmic","algorithmic"],["algorwwithmically","algorithmically"],["algorwwithms","algorithms"],["algorythem","algorithm"],["algorythemic","algorithmic"],["algorythemically","algorithmically"],["algorythems","algorithms"],["algorythm","algorithm"],["algorythmic","algorithmic"],["algorythmically","algorithmically"],["algorythms","algorithms"],["algothitm","algorithm"],["algothitmic","algorithmic"],["algothitmically","algorithmically"],["algothitms","algorithms"],["algotighm","algorithm"],["algotighmic","algorithmic"],["algotighmically","algorithmically"],["algotighms","algorithms"],["algotihm","algorithm"],["algotihmic","algorithmic"],["algotihmically","algorithmically"],["algotihms","algorithms"],["algotirhm","algorithm"],["algotirhmic","algorithmic"],["algotirhmically","algorithmically"],["algotirhms","algorithms"],["algotithm","algorithm"],["algotithmic","algorithmic"],["algotithmically","algorithmically"],["algotithms","algorithms"],["algotrithm","algorithm"],["algotrithmic","algorithmic"],["algotrithmically","algorithmically"],["algotrithms","algorithms"],["alha","alpha"],["alhabet","alphabet"],["alhabetical","alphabetical"],["alhabetically","alphabetically"],["alhabeticaly","alphabetically"],["alhabets","alphabets"],["alhapet","alphabet"],["alhapetical","alphabetical"],["alhapetically","alphabetically"],["alhapeticaly","alphabetically"],["alhapets","alphabets"],["alhough","although"],["alhpa","alpha"],["alhpabet","alphabet"],["alhpabetical","alphabetical"],["alhpabetically","alphabetically"],["alhpabeticaly","alphabetically"],["alhpabets","alphabets"],["aliagn","align"],["aliasas","aliases"],["aliasses","aliases"],["alientating","alienating"],["aliged","aligned"],["alighned","aligned"],["alighnment","alignment"],["aligin","align"],["aligined","aligned"],["aligining","aligning"],["aliginment","alignment"],["aligins","aligns"],["aligment","alignment"],["aligments","alignments"],["alignation","alignment"],["alignd","aligned"],["aligne","align"],["alignement","alignment"],["alignemnt","alignment"],["alignemnts","alignments"],["alignemt","alignment"],["alignes","aligns"],["alignmant","alignment"],["alignmen","alignment"],["alignmenet","alignment"],["alignmenets","alignments"],["alignmenton","alignment on"],["alignmet","alignment"],["alignmets","alignments"],["alignmment","alignment"],["alignmments","alignments"],["alignmnet","alignment"],["alignmnt","alignment"],["alignrigh","alignright"],["alined","aligned"],["alinged","aligned"],["alinging","aligning"],["alingment","alignment"],["alinment","alignment"],["alinments","alignments"],["alising","aliasing"],["allcate","allocate"],["allcateing","allocating"],["allcater","allocator"],["allcaters","allocators"],["allcating","allocating"],["allcation","allocation"],["allcator","allocator"],["allcoate","allocate"],["allcoated","allocated"],["allcoateing","allocating"],["allcoateng","allocating"],["allcoater","allocator"],["allcoaters","allocators"],["allcoating","allocating"],["allcoation","allocation"],["allcoator","allocator"],["allcoators","allocators"],["alledge","allege"],["alledged","alleged"],["alledgedly","allegedly"],["alledges","alleges"],["allegedely","allegedly"],["allegedy","allegedly"],["allegely","allegedly"],["allegence","allegiance"],["allegience","allegiance"],["allif","all if"],["allign","align"],["alligned","aligned"],["allignement","alignment"],["allignemnt","alignment"],["alligning","aligning"],["allignment","alignment"],["allignmenterror","alignmenterror"],["allignments","alignments"],["alligns","aligns"],["alliviate","alleviate"],["allk","all"],["alllocate","allocate"],["alllocation","allocation"],["alllow","allow"],["alllowed","allowed"],["alllows","allows"],["allmost","almost"],["alloacate","allocate"],["allocae","allocate"],["allocaed","allocated"],["allocaes","allocates"],["allocagtor","allocator"],["allocaiing","allocating"],["allocaing","allocating"],["allocaion","allocation"],["allocaions","allocations"],["allocaite","allocate"],["allocaites","allocates"],["allocaiting","allocating"],["allocaition","allocation"],["allocaitions","allocations"],["allocaiton","allocation"],["allocaitons","allocations"],["allocal","allocate"],["allocarion","allocation"],["allocat","allocate"],["allocatbale","allocatable"],["allocatedi","allocated"],["allocatedp","allocated"],["allocateing","allocating"],["allocateng","allocating"],["allocaton","allocation"],["allocatoor","allocator"],["allocatote","allocate"],["allocatrd","allocated"],["allocattion","allocation"],["alloco","alloc"],["allocos","allocs"],["allocte","allocate"],["allocted","allocated"],["allocting","allocating"],["alloction","allocation"],["alloctions","allocations"],["alloctor","allocator"],["alloews","allows"],["allong","along"],["alloocates","allocates"],["allopone","allophone"],["allopones","allophones"],["allos","allows"],["alloted","allotted"],["allowence","allowance"],["allowences","allowances"],["allpication","application"],["allpications","applications"],["allso","also"],["allthough","although"],["alltough","although"],["allways","always"],["allwo","allow"],["allwos","allows"],["allws","allows"],["allwys","always"],["almoast","almost"],["almostly","almost"],["almsot","almost"],["alo","also"],["alocatable","allocatable"],["alocate","allocate"],["alocated","allocated"],["alocates","allocates"],["alocating","allocating"],["alocations","allocations"],["alochol","alcohol"],["alog","along"],["alogirhtm","algorithm"],["alogirhtmic","algorithmic"],["alogirhtmically","algorithmically"],["alogirhtms","algorithms"],["alogirthm","algorithm"],["alogirthmic","algorithmic"],["alogirthmically","algorithmically"],["alogirthms","algorithms"],["alogned","aligned"],["alogorithms","algorithms"],["alogrithm","algorithm"],["alogrithmic","algorithmic"],["alogrithmically","algorithmically"],["alogrithms","algorithms"],["alomst","almost"],["aloows","allows"],["alorithm","algorithm"],["alos","also"],["alotted","allotted"],["alow","allow"],["alowed","allowed"],["alowing","allowing"],["alows","allows"],["alpabet","alphabet"],["alpabetic","alphabetic"],["alpabetical","alphabetical"],["alpabets","alphabets"],["alpah","alpha"],["alpahabetical","alphabetical"],["alpahbetically","alphabetically"],["alph","alpha"],["alpha-numeric","alphanumeric"],["alphabeticaly","alphabetically"],["alphabeticly","alphabetical"],["alphapeicall","alphabetical"],["alphapeticaly","alphabetically"],["alrady","already"],["alraedy","already"],["alread","already"],["alreadly","already"],["alreadt","already"],["alreasy","already"],["alreay","already"],["alreayd","already"],["alreday","already"],["alredy","already"],["alrelady","already"],["alrms","alarms"],["alrogithm","algorithm"],["alrteady","already"],["als","also"],["alsmost","almost"],["alsot","also"],["alsready","already"],["altenative","alternative"],["alterated","altered"],["alterately","alternately"],["alterative","alternative"],["alteratives","alternatives"],["alterior","ulterior"],["alternaive","alternative"],["alternaives","alternatives"],["alternarive","alternative"],["alternarives","alternatives"],["alternatievly","alternatively"],["alternativey","alternatively"],["alternativley","alternatively"],["alternativly","alternatively"],["alternatve","alternative"],["alternavtely","alternatively"],["alternavtive","alternative"],["alternavtives","alternatives"],["alternetive","alternative"],["alternetives","alternatives"],["alternitive","alternative"],["alternitively","alternatively"],["alternitiveness","alternativeness"],["alternitives","alternatives"],["alternitivly","alternatively"],["altetnative","alternative"],["altho","although"],["althogh","although"],["althorithm","algorithm"],["althorithmic","algorithmic"],["althorithmically","algorithmically"],["althorithms","algorithms"],["althoug","although"],["althought","although"],["althougth","although"],["althouth","although"],["altitide","altitude"],["altitute","altitude"],["altogehter","altogether"],["altough","although"],["altought","although"],["altready","already"],["alue","value"],["alvorithm","algorithm"],["alvorithmic","algorithmic"],["alvorithmically","algorithmically"],["alvorithms","algorithms"],["alwais","always"],["alwas","always"],["alwast","always"],["alwasy","always"],["alwasys","always"],["alwauys","always"],["alway","always"],["alwyas","always"],["alwys","always"],["alyways","always"],["amacing","amazing"],["amacingly","amazingly"],["amalgomated","amalgamated"],["amatuer","amateur"],["amazaing","amazing"],["ambedded","embedded"],["ambibuity","ambiguity"],["ambien","ambient"],["ambigious","ambiguous"],["ambigous","ambiguous"],["ambiguious","ambiguous"],["ambiguitiy","ambiguity"],["ambiguos","ambiguous"],["ambitous","ambitious"],["ambuguity","ambiguity"],["ambulence","ambulance"],["ambulences","ambulances"],["amdgput","amdgpu"],["amendement","amendment"],["amendmant","amendment"],["Amercia","America"],["amerliorate","ameliorate"],["amgle","angle"],["amgles","angles"],["amiguous","ambiguous"],["amke","make"],["amking","making"],["ammend","amend"],["ammended","amended"],["ammending","amending"],["ammendment","amendment"],["ammendments","amendments"],["ammends","amends"],["ammong","among"],["ammongst","amongst"],["ammortizes","amortizes"],["ammoung","among"],["ammoungst","amongst"],["ammount","amount"],["ammused","amused"],["amny","many"],["amongs","among"],["amonst","amongst"],["amonut","amount"],["amound","amount"],["amounds","amounts"],["amoung","among"],["amoungst","amongst"],["amout","amount"],["amoutn","amount"],["amoutns","amounts"],["amouts","amounts"],["amperstands","ampersands"],["amphasis","emphasis"],["amplifer","amplifier"],["amplifyer","amplifier"],["amplitud","amplitude"],["ampty","empty"],["amuch","much"],["amung","among"],["amunition","ammunition"],["amunt","amount"],["analagous","analogous"],["analagus","analogous"],["analaog","analog"],["analgous","analogous"],["analig","analog"],["analise","analyse"],["analised","analysed"],["analiser","analyser"],["analising","analysing"],["analisis","analysis"],["analitic","analytic"],["analitical","analytical"],["analitically","analytically"],["analiticaly","analytically"],["analize","analyze"],["analized","analyzed"],["analizer","analyzer"],["analizes","analyzes"],["analizing","analyzing"],["analogeous","analogous"],["analogicaly","analogically"],["analoguous","analogous"],["analoguously","analogously"],["analogus","analogous"],["analouge","analogue"],["analouges","analogues"],["analsye","analyse"],["analsyed","analysed"],["analsyer","analyser"],["analsyers","analysers"],["analsyes","analyses"],["analsying","analysing"],["analsyis","analysis"],["analsyt","analyst"],["analsyts","analysts"],["analyis","analysis"],["analysator","analyser"],["analysus","analysis"],["analysy","analysis"],["analyticaly","analytically"],["analyticly","analytically"],["analyzator","analyzer"],["analzye","analyze"],["analzyed","analyzed"],["analzyer","analyzer"],["analzyers","analyzers"],["analzyes","analyzes"],["analzying","analyzing"],["ananlog","analog"],["anarchim","anarchism"],["anarchistm","anarchism"],["anarquism","anarchism"],["anarquist","anarchist"],["anaylse","analyse"],["anaylsed","analysed"],["anaylser","analyser"],["anaylses","analyses"],["anaylsis","analysis"],["anaylsises","analysises"],["anayltic","analytic"],["anayltical","analytical"],["anayltically","analytically"],["anayltics","analytics"],["anaylze","analyze"],["anaylzed","analyzed"],["anaylzer","analyzer"],["anaylzes","analyzes"],["anbd","and"],["ancapsulate","encapsulate"],["ancapsulated","encapsulated"],["ancapsulates","encapsulates"],["ancapsulating","encapsulating"],["ancapsulation","encapsulation"],["ancesetor","ancestor"],["ancesetors","ancestors"],["ancester","ancestor"],["ancesteres","ancestors"],["ancesters","ancestors"],["ancestore","ancestor"],["ancestores","ancestors"],["ancestory","ancestry"],["anchestor","ancestor"],["anchestors","ancestors"],["anchord","anchored"],["ancilliary","ancillary"],["andd","and"],["andoid","android"],["andoids","androids"],["andorid","android"],["andorids","androids"],["andriod","android"],["andriods","androids"],["androgenous","androgynous"],["androgeny","androgyny"],["androidextra","androidextras"],["androind","android"],["androinds","androids"],["andthe","and the"],["ane","and"],["anevironment","environment"],["anevironments","environments"],["angluar","angular"],["anhoter","another"],["anid","and"],["anihilation","annihilation"],["animaing","animating"],["animaite","animate"],["animaiter","animator"],["animaiters","animators"],["animaiton","animation"],["animaitons","animations"],["animaitor","animator"],["animaitors","animators"],["animaton","animation"],["animatonic","animatronic"],["animete","animate"],["animeted","animated"],["animetion","animation"],["animetions","animations"],["animets","animates"],["animore","anymore"],["aninate","animate"],["anination","animation"],["aniother","any other"],["anisotrophically","anisotropically"],["anitaliasing","antialiasing"],["anithing","anything"],["anitialising","antialiasing"],["anitime","anytime"],["anitrez","antirez"],["aniversary","anniversary"],["aniway","anyway"],["aniwhere","anywhere"],["anlge","angle"],["anlysis","analysis"],["anlyzing","analyzing"],["annayed","annoyed"],["annaying","annoying"],["annd","and"],["anniversery","anniversary"],["annnounce","announce"],["annoation","annotation"],["annoint","anoint"],["annointed","anointed"],["annointing","anointing"],["annoints","anoints"],["annonate","annotate"],["annonated","annotated"],["annonates","annotates"],["annonce","announce"],["annonced","announced"],["annoncement","announcement"],["annoncements","announcements"],["annonces","announces"],["annoncing","announcing"],["annonymous","anonymous"],["annotaion","annotation"],["annotaions","annotations"],["annoted","annotated"],["annother","another"],["annouce","announce"],["annouced","announced"],["annoucement","announcement"],["annoucements","announcements"],["annouces","announces"],["annoucing","announcing"],["annouing","annoying"],["announcment","announcement"],["announcments","announcements"],["announed","announced"],["announement","announcement"],["announements","announcements"],["annoymous","anonymous"],["annoyying","annoying"],["annualy","annually"],["annuled","annulled"],["annyoingly","annoyingly"],["anoher","another"],["anohter","another"],["anologon","analogon"],["anomally","anomaly"],["anomolies","anomalies"],["anomolous","anomalous"],["anomoly","anomaly"],["anonimity","anonymity"],["anononymous","anonymous"],["anonther","another"],["anonymouse","anonymous"],["anonyms","anonymous"],["anonymus","anonymous"],["anormalies","anomalies"],["anormaly","abnormally"],["anotate","annotate"],["anotated","annotated"],["anotates","annotates"],["anotating","annotating"],["anotation","annotation"],["anotations","annotations"],["anoter","another"],["anothe","another"],["anothers","another"],["anothr","another"],["anounce","announce"],["anounced","announced"],["anouncement","announcement"],["anount","amount"],["anoying","annoying"],["anoymous","anonymous"],["anroid","android"],["ansalisation","nasalisation"],["ansalization","nasalization"],["anser","answer"],["ansester","ancestor"],["ansesters","ancestors"],["ansestor","ancestor"],["ansestors","ancestors"],["answhare","answer"],["answhared","answered"],["answhareing","answering"],["answhares","answers"],["answharing","answering"],["answhars","answers"],["ansynchronous","asynchronous"],["antaliasing","antialiasing"],["antartic","antarctic"],["antecedant","antecedent"],["anteena","antenna"],["anteenas","antennas"],["anthing","anything"],["anthings","anythings"],["anthor","another"],["anthromorphization","anthropomorphization"],["anthropolgist","anthropologist"],["anthropolgy","anthropology"],["antialialised","antialiased"],["antialising","antialiasing"],["antiapartheid","anti-apartheid"],["anticpate","anticipate"],["antry","entry"],["antyhing","anything"],["anual","annual"],["anually","annually"],["anulled","annulled"],["anumber","a number"],["anuwhere","anywhere"],["anway","anyway"],["anways","anyway"],["anwhere","anywhere"],["anwser","answer"],["anwsered","answered"],["anwsering","answering"],["anwsers","answers"],["anyawy","anyway"],["anyhing","anything"],["anyhting","anything"],["anyhwere","anywhere"],["anylsing","analysing"],["anylzing","analyzing"],["anynmore","anymore"],["anyother","any other"],["anytghing","anything"],["anythig","anything"],["anythign","anything"],["anythimng","anything"],["anytiem","anytime"],["anytihng","anything"],["anyting","anything"],["anytning","anything"],["anytrhing","anything"],["anytthing","anything"],["anytying","anything"],["anywere","anywhere"],["anyy","any"],["aoache","apache"],["aond","and"],["aoto","auto"],["aotomate","automate"],["aotomated","automated"],["aotomatic","automatic"],["aotomatical","automatic"],["aotomaticall","automatically"],["aotomatically","automatically"],["aotomation","automation"],["aovid","avoid"],["apach","apache"],["apapted","adapted"],["aparant","apparent"],["aparantly","apparently"],["aparent","apparent"],["aparently","apparently"],["aparment","apartment"],["apdated","updated"],["apeal","appeal"],["apealed","appealed"],["apealing","appealing"],["apeals","appeals"],["apear","appear"],["apeared","appeared"],["apears","appears"],["apect","aspect"],["apects","aspects"],["apeends","appends"],["apend","append"],["apendage","appendage"],["apended","appended"],["apender","appender"],["apendices","appendices"],["apending","appending"],["apendix","appendix"],["apenines","Apennines"],["aperatures","apertures"],["aperure","aperture"],["aperures","apertures"],["apeture","aperture"],["apetures","apertures"],["apilogue","epilogue"],["aplha","alpha"],["aplication","application"],["aplications","applications"],["aplied","applied"],["aplies","applies"],["apllicatin","application"],["apllicatins","applications"],["apllication","application"],["apllications","applications"],["apllied","applied"],["apllies","applies"],["aplly","apply"],["apllying","applying"],["aply","apply"],["aplyed","applied"],["aplying","applying"],["apointed","appointed"],["apointing","appointing"],["apointment","appointment"],["apoints","appoints"],["apolegetic","apologetic"],["apolegetics","apologetics"],["aportionable","apportionable"],["apostrophie","apostrophe"],["apostrophies","apostrophes"],["appar","appear"],["apparant","apparent"],["apparantly","apparently"],["appared","appeared"],["apparence","appearance"],["apparenlty","apparently"],["apparenly","apparently"],["appares","appears"],["apparoches","approaches"],["appars","appears"],["appart","apart"],["appartment","apartment"],["appartments","apartments"],["appearaing","appearing"],["appearantly","apparently"],["appeareance","appearance"],["appearence","appearance"],["appearences","appearances"],["appearently","apparently"],["appeares","appears"],["appearning","appearing"],["appearrs","appears"],["appeciate","appreciate"],["appeded","appended"],["appeding","appending"],["appedn","append"],["appen","append"],["appendend","appended"],["appendent","appended"],["appendex","appendix"],["appendig","appending"],["appendign","appending"],["appendt","append"],["appeneded","appended"],["appenines","Apennines"],["appens","appends"],["appent","append"],["apperance","appearance"],["apperances","appearances"],["apperar","appear"],["apperarance","appearance"],["apperarances","appearances"],["apperared","appeared"],["apperaring","appearing"],["apperars","appears"],["appereance","appearance"],["appereances","appearances"],["appered","appeared"],["apperent","apparent"],["apperently","apparently"],["appers","appears"],["apperture","aperture"],["appicability","applicability"],["appicable","applicable"],["appicaliton","application"],["appicalitons","applications"],["appicant","applicant"],["appication","application"],["appication-specific","application-specific"],["appications","applications"],["appicative","applicative"],["appied","applied"],["appies","applies"],["applay","apply"],["applcation","application"],["applcations","applications"],["appliable","applicable"],["appliacable","applicable"],["appliaction","application"],["appliactions","applications"],["appliation","application"],["appliations","applications"],["applicabel","applicable"],["applicaion","application"],["applicaions","applications"],["applicaiton","application"],["applicaitons","applications"],["applicance","appliance"],["applicapility","applicability"],["applicaple","applicable"],["applicatable","applicable"],["applicaten","application"],["applicatin","application"],["applicatins","applications"],["applicatio","application"],["applicationb","application"],["applicatios","applications"],["applicatiosn","applications"],["applicaton","application"],["applicatons","applications"],["appliction","application"],["applictions","applications"],["applide","applied"],["applikation","application"],["applikations","applications"],["appllied","applied"],["applly","apply"],["applyable","applicable"],["applycable","applicable"],["applyed","applied"],["applyes","applies"],["applyied","applied"],["applyig","applying"],["applys","applies"],["applyting","applying"],["appned","append"],["appologies","apologies"],["appology","apology"],["appon","upon"],["appopriate","appropriate"],["apporach","approach"],["apporached","approached"],["apporaches","approaches"],["apporaching","approaching"],["apporiate","appropriate"],["apporoximate","approximate"],["apporoximated","approximated"],["apporpiate","appropriate"],["apporpriate","appropriate"],["apporpriated","appropriated"],["apporpriately","appropriately"],["apporpriates","appropriates"],["apporpriating","appropriating"],["apporpriation","appropriation"],["apporpriations","appropriations"],["apporval","approval"],["apporve","approve"],["apporved","approved"],["apporves","approves"],["apporving","approving"],["appoval","approval"],["appove","approve"],["appoved","approved"],["appoves","approves"],["appoving","approving"],["appoximate","approximate"],["appoximately","approximately"],["appoximates","approximates"],["appoximation","approximation"],["appoximations","approximations"],["apppear","appear"],["apppears","appears"],["apppend","append"],["apppends","appends"],["appplet","applet"],["appplication","application"],["appplications","applications"],["appplying","applying"],["apppriate","appropriate"],["appproach","approach"],["apppropriate","appropriate"],["appraoch","approach"],["appraochable","approachable"],["appraoched","approached"],["appraoches","approaches"],["appraoching","approaching"],["apprearance","appearance"],["apprently","apparently"],["appreteate","appreciate"],["appreteated","appreciated"],["appretiate","appreciate"],["appretiated","appreciated"],["appretiates","appreciates"],["appretiating","appreciating"],["appretiation","appreciation"],["appretiative","appreciative"],["apprieciate","appreciate"],["apprieciated","appreciated"],["apprieciates","appreciates"],["apprieciating","appreciating"],["apprieciation","appreciation"],["apprieciative","appreciative"],["appriopriate","appropriate"],["appripriate","appropriate"],["appriproate","appropriate"],["apprixamate","approximate"],["apprixamated","approximated"],["apprixamately","approximately"],["apprixamates","approximates"],["apprixamating","approximating"],["apprixamation","approximation"],["apprixamations","approximations"],["appriximate","approximate"],["appriximated","approximated"],["appriximately","approximately"],["appriximates","approximates"],["appriximating","approximating"],["appriximation","approximation"],["appriximations","approximations"],["approachs","approaches"],["approbiate","appropriate"],["approch","approach"],["approche","approach"],["approched","approached"],["approches","approaches"],["approching","approaching"],["approiate","appropriate"],["approopriate","appropriate"],["approoximate","approximate"],["approoximately","approximately"],["approoximates","approximates"],["approoximation","approximation"],["approoximations","approximations"],["approperiate","appropriate"],["appropiate","appropriate"],["appropiately","appropriately"],["approppriately","appropriately"],["appropraite","appropriate"],["appropraitely","appropriately"],["approprate","appropriate"],["approprated","appropriated"],["approprately","appropriately"],["appropration","appropriation"],["approprations","appropriations"],["appropriage","appropriate"],["appropriatedly","appropriately"],["appropriatee","appropriate"],["appropriatly","appropriately"],["appropriatness","appropriateness"],["appropriete","appropriate"],["appropritae","appropriate"],["appropritate","appropriate"],["appropritately","appropriately"],["approprite","appropriate"],["approproate","appropriate"],["appropropiate","appropriate"],["appropropiately","appropriately"],["appropropreate","appropriate"],["appropropriate","appropriate"],["approproximate","approximate"],["approproximately","approximately"],["approproximates","approximates"],["approproximation","approximation"],["approproximations","approximations"],["approprpiate","appropriate"],["approriate","appropriate"],["approriately","appropriately"],["approrpriate","appropriate"],["approrpriately","appropriately"],["approuval","approval"],["approuve","approve"],["approuved","approved"],["approuves","approves"],["approuving","approving"],["approvement","approval"],["approxamate","approximate"],["approxamately","approximately"],["approxamates","approximates"],["approxamation","approximation"],["approxamations","approximations"],["approxamatly","approximately"],["approxametely","approximately"],["approxiamte","approximate"],["approxiamtely","approximately"],["approxiamtes","approximates"],["approxiamtion","approximation"],["approxiamtions","approximations"],["approxiate","approximate"],["approxiately","approximately"],["approxiates","approximates"],["approxiation","approximation"],["approxiations","approximations"],["approximatively","approximately"],["approximatly","approximately"],["approximed","approximated"],["approximetely","approximately"],["approximitely","approximately"],["approxmate","approximate"],["approxmately","approximately"],["approxmates","approximates"],["approxmation","approximation"],["approxmations","approximations"],["approxmimation","approximation"],["apprpriate","appropriate"],["apprpriately","appropriately"],["appy","apply"],["appying","applying"],["apreciate","appreciate"],["apreciated","appreciated"],["apreciates","appreciates"],["apreciating","appreciating"],["apreciation","appreciation"],["apreciative","appreciative"],["aprehensive","apprehensive"],["apreteate","appreciate"],["apreteated","appreciated"],["apreteating","appreciating"],["apretiate","appreciate"],["apretiated","appreciated"],["apretiates","appreciates"],["apretiating","appreciating"],["apretiation","appreciation"],["apretiative","appreciative"],["aproach","approach"],["aproached","approached"],["aproaches","approaches"],["aproaching","approaching"],["aproch","approach"],["aproched","approached"],["aproches","approaches"],["aproching","approaching"],["aproove","approve"],["aprooved","approved"],["apropiate","appropriate"],["apropiately","appropriately"],["apropriate","appropriate"],["apropriately","appropriately"],["aproval","approval"],["aproximate","approximate"],["aproximately","approximately"],["aproximates","approximates"],["aproximation","approximation"],["aproximations","approximations"],["aprrovement","approval"],["aprroximate","approximate"],["aprroximately","approximately"],["aprroximates","approximates"],["aprroximation","approximation"],["aprroximations","approximations"],["aprtment","apartment"],["aqain","again"],["aqcuire","acquire"],["aqcuired","acquired"],["aqcuires","acquires"],["aqcuiring","acquiring"],["aquaduct","aqueduct"],["aquaint","acquaint"],["aquaintance","acquaintance"],["aquainted","acquainted"],["aquainting","acquainting"],["aquaints","acquaints"],["aquiantance","acquaintance"],["aquire","acquire"],["aquired","acquired"],["aquires","acquires"],["aquiring","acquiring"],["aquisition","acquisition"],["aquisitions","acquisitions"],["aquit","acquit"],["aquitted","acquitted"],["arameters","parameters"],["aranged","arranged"],["arangement","arrangement"],["araound","around"],["ararbic","arabic"],["aray","array"],["arays","arrays"],["arbiatraily","arbitrarily"],["arbiatray","arbitrary"],["arbibtarily","arbitrarily"],["arbibtary","arbitrary"],["arbibtrarily","arbitrarily"],["arbibtrary","arbitrary"],["arbiitrarily","arbitrarily"],["arbiitrary","arbitrary"],["arbirarily","arbitrarily"],["arbirary","arbitrary"],["arbiratily","arbitrarily"],["arbiraty","arbitrary"],["arbirtarily","arbitrarily"],["arbirtary","arbitrary"],["arbirtrarily","arbitrarily"],["arbirtrary","arbitrary"],["arbitarary","arbitrary"],["arbitarily","arbitrarily"],["arbitary","arbitrary"],["arbitiarily","arbitrarily"],["arbitiary","arbitrary"],["arbitiraly","arbitrarily"],["arbitiray","arbitrary"],["arbitrailly","arbitrarily"],["arbitraily","arbitrarily"],["arbitraion","arbitration"],["arbitrairly","arbitrarily"],["arbitrairy","arbitrary"],["arbitral","arbitrary"],["arbitralily","arbitrarily"],["arbitrally","arbitrarily"],["arbitralrily","arbitrarily"],["arbitralry","arbitrary"],["arbitraly","arbitrary"],["arbitrarion","arbitration"],["arbitraryily","arbitrarily"],["arbitraryly","arbitrary"],["arbitratily","arbitrarily"],["arbitratiojn","arbitration"],["arbitraton","arbitration"],["arbitratrily","arbitrarily"],["arbitratrion","arbitration"],["arbitratry","arbitrary"],["arbitraty","arbitrary"],["arbitray","arbitrary"],["arbitriarily","arbitrarily"],["arbitriary","arbitrary"],["arbitrily","arbitrarily"],["arbitrion","arbitration"],["arbitriraly","arbitrarily"],["arbitriray","arbitrary"],["arbitrition","arbitration"],["arbitrtily","arbitrarily"],["arbitrty","arbitrary"],["arbitry","arbitrary"],["arbitryarily","arbitrarily"],["arbitryary","arbitrary"],["arbitual","arbitrary"],["arbitually","arbitrarily"],["arbitualy","arbitrary"],["arbituarily","arbitrarily"],["arbituary","arbitrary"],["arbiturarily","arbitrarily"],["arbiturary","arbitrary"],["arbort","abort"],["arborted","aborted"],["arborting","aborting"],["arborts","aborts"],["arbritary","arbitrary"],["arbritrarily","arbitrarily"],["arbritrary","arbitrary"],["arbtirarily","arbitrarily"],["arbtirary","arbitrary"],["arbtrarily","arbitrarily"],["arbtrary","arbitrary"],["arbutrarily","arbitrarily"],["arbutrary","arbitrary"],["arch-dependet","arch-dependent"],["arch-independet","arch-independent"],["archaelogical","archaeological"],["archaelogists","archaeologists"],["archaelogy","archaeology"],["archetect","architect"],["archetects","architects"],["archetectural","architectural"],["archetecturally","architecturally"],["archetecture","architecture"],["archiac","archaic"],["archictect","architect"],["archictecture","architecture"],["archictectures","architectures"],["archicture","architecture"],["archiecture","architecture"],["archiectures","architectures"],["archimedian","archimedean"],["architct","architect"],["architcts","architects"],["architcture","architecture"],["architctures","architectures"],["architecht","architect"],["architechts","architects"],["architechturally","architecturally"],["architechture","architecture"],["architechtures","architectures"],["architectual","architectural"],["architectur","architecture"],["architecturs","architectures"],["architecturse","architectures"],["architecure","architecture"],["architecures","architectures"],["architecutre","architecture"],["architecutres","architectures"],["architecuture","architecture"],["architecutures","architectures"],["architetcure","architecture"],["architetcures","architectures"],["architeture","architecture"],["architetures","architectures"],["architure","architecture"],["architures","architectures"],["archiv","archive"],["archivel","archival"],["archor","anchor"],["archtecture","architecture"],["archtectures","architectures"],["archtiecture","architecture"],["archtiectures","architectures"],["archtitecture","architecture"],["archtitectures","architectures"],["archtype","archetype"],["archtypes","archetypes"],["archvie","archive"],["archvies","archives"],["archving","archiving"],["arcitecture","architecture"],["arcitectures","architectures"],["arcive","archive"],["arcived","archived"],["arciver","archiver"],["arcives","archives"],["arciving","archiving"],["arcticle","article"],["Ardiuno","Arduino"],["are'nt","aren't"],["aready","already"],["areea","area"],["aren's","aren't"],["aren;t","aren't"],["arent'","aren't"],["arent","aren't"],["arent;","aren't"],["areodynamics","aerodynamics"],["argement","argument"],["argements","arguments"],["argemnt","argument"],["argemnts","arguments"],["argment","argument"],["argments","arguments"],["argmument","argument"],["argmuments","arguments"],["argreement","agreement"],["argreements","agreements"],["argubly","arguably"],["arguement","argument"],["arguements","arguments"],["arguemnt","argument"],["arguemnts","arguments"],["arguemtn","argument"],["arguemtns","arguments"],["arguents","arguments"],["argumant","argument"],["argumants","arguments"],["argumeent","argument"],["argumeents","arguments"],["argumement","argument"],["argumements","arguments"],["argumemnt","argument"],["argumemnts","arguments"],["argumeng","argument"],["argumengs","arguments"],["argumens","arguments"],["argumenst","arguments"],["argumentents","arguments"],["argumeny","argument"],["argumet","argument"],["argumetn","argument"],["argumetns","arguments"],["argumets","arguments"],["argumnet","argument"],["argumnets","arguments"],["argumnt","argument"],["argumnts","arguments"],["arhive","archive"],["arhives","archives"],["aribitary","arbitrary"],["aribiter","arbiter"],["aribrary","arbitrary"],["aribtrarily","arbitrarily"],["aribtrary","arbitrary"],["ariflow","airflow"],["arised","arose"],["arithemetic","arithmetic"],["arithemtic","arithmetic"],["arithmatic","arithmetic"],["arithmentic","arithmetic"],["arithmetc","arithmetic"],["arithmethic","arithmetic"],["arithmitic","arithmetic"],["aritmetic","arithmetic"],["aritrary","arbitrary"],["aritst","artist"],["arival","arrival"],["arive","arrive"],["arlready","already"],["armamant","armament"],["armistace","armistice"],["armonic","harmonic"],["arn't","aren't"],["arne't","aren't"],["arogant","arrogant"],["arogent","arrogant"],["aronud","around"],["aroud","around"],["aroudn","around"],["arouind","around"],["arounf","around"],["aroung","around"],["arount","around"],["arquitecture","architecture"],["arquitectures","architectures"],["arraay","array"],["arragement","arrangement"],["arraival","arrival"],["arral","array"],["arranable","arrangeable"],["arrance","arrange"],["arrane","arrange"],["arraned","arranged"],["arranement","arrangement"],["arranements","arrangements"],["arranent","arrangement"],["arranents","arrangements"],["arranes","arranges"],["arrang","arrange"],["arrangable","arrangeable"],["arrangaeble","arrangeable"],["arrangaelbe","arrangeable"],["arrangd","arranged"],["arrangde","arranged"],["arrangemenet","arrangement"],["arrangemenets","arrangements"],["arrangent","arrangement"],["arrangents","arrangements"],["arrangmeent","arrangement"],["arrangmeents","arrangements"],["arrangmenet","arrangement"],["arrangmenets","arrangements"],["arrangment","arrangement"],["arrangments","arrangements"],["arrangnig","arranging"],["arrangs","arranges"],["arrangse","arranges"],["arrangt","arrangement"],["arrangte","arrange"],["arrangteable","arrangeable"],["arrangted","arranged"],["arrangtement","arrangement"],["arrangtements","arrangements"],["arrangtes","arranges"],["arrangting","arranging"],["arrangts","arrangements"],["arraning","arranging"],["arranment","arrangement"],["arranments","arrangements"],["arrants","arrangements"],["arraows","arrows"],["arrary","array"],["arrayes","arrays"],["arre","are"],["arreay","array"],["arrengement","arrangement"],["arrengements","arrangements"],["arriveis","arrives"],["arrivial","arrival"],["arround","around"],["arrray","array"],["arrrays","arrays"],["arrrive","arrive"],["arrrived","arrived"],["arrrives","arrives"],["arrtibute","attribute"],["arrya","array"],["arryas","arrays"],["arrys","arrays"],["artcile","article"],["articaft","artifact"],["articafts","artifacts"],["artical","article"],["articals","articles"],["articat","artifact"],["articats","artifacts"],["artice","article"],["articel","article"],["articels","articles"],["artifac","artifact"],["artifacs","artifacts"],["artifcat","artifact"],["artifcats","artifacts"],["artifical","artificial"],["artifically","artificially"],["artihmetic","arithmetic"],["artilce","article"],["artillary","artillery"],["artuments","arguments"],["arugment","argument"],["arugments","arguments"],["arument","argument"],["aruments","arguments"],["arund","around"],["arvg","argv"],["asai","Asia"],["asain","Asian"],["asbolute","absolute"],["asbolutelly","absolutely"],["asbolutely","absolutely"],["asbtract","abstract"],["asbtracted","abstracted"],["asbtracter","abstracter"],["asbtracting","abstracting"],["asbtraction","abstraction"],["asbtractions","abstractions"],["asbtractly","abstractly"],["asbtractness","abstractness"],["asbtractor","abstractor"],["asbtracts","abstracts"],["ascconciated","associated"],["asceding","ascending"],["ascpect","aspect"],["ascpects","aspects"],["asdignment","assignment"],["asdignments","assignments"],["asemble","assemble"],["asembled","assembled"],["asembler","assembler"],["asemblers","assemblers"],["asembles","assembles"],["asemblies","assemblies"],["asembling","assembling"],["asembly","assembly"],["asendance","ascendance"],["asendancey","ascendancy"],["asendancy","ascendancy"],["asendence","ascendance"],["asendencey","ascendancy"],["asendency","ascendancy"],["asending","ascending"],["asent","ascent"],["aserted","asserted"],["asertion","assertion"],["asess","assess"],["asessment","assessment"],["asessments","assessments"],["asetic","ascetic"],["asfar","as far"],["asign","assign"],["asigned","assigned"],["asignee","assignee"],["asignees","assignees"],["asigning","assigning"],["asignmend","assignment"],["asignmends","assignments"],["asignment","assignment"],["asignor","assignor"],["asigns","assigns"],["asii","ascii"],["asisstant","assistant"],["asisstants","assistants"],["asistance","assistance"],["aske","ask"],["askes","asks"],["aslo","also"],["asnwer","answer"],["asnwered","answered"],["asnwerer","answerer"],["asnwerers","answerers"],["asnwering","answering"],["asnwers","answers"],["asny","any"],["asnychronoue","asynchronous"],["asociated","associated"],["asolute","absolute"],["asorbed","absorbed"],["aspected","expected"],["asphyxation","asphyxiation"],["assasin","assassin"],["assasinate","assassinate"],["assasinated","assassinated"],["assasinates","assassinates"],["assasination","assassination"],["assasinations","assassinations"],["assasined","assassinated"],["assasins","assassins"],["assassintation","assassination"],["asscciated","associated"],["assciated","associated"],["asscii","ASCII"],["asscociated","associated"],["asscoitaed","associated"],["assebly","assembly"],["assebmly","assembly"],["assembe","assemble"],["assembed","assembled"],["assembeld","assembled"],["assember","assembler"],["assemblys","assemblies"],["assemby","assembly"],["assemly","assembly"],["assemnly","assembly"],["assemple","assemble"],["assending","ascending"],["asser","assert"],["assersion","assertion"],["assertation","assertion"],["assertio","assertion"],["assertting","asserting"],["assesmenet","assessment"],["assesment","assessment"],["assesments","assessments"],["assessmant","assessment"],["assessmants","assessments"],["assgin","assign"],["assgined","assigned"],["assgining","assigning"],["assginment","assignment"],["assginments","assignments"],["assgins","assigns"],["assicate","associate"],["assicated","associated"],["assicates","associates"],["assicating","associating"],["assication","association"],["assications","associations"],["assiciate","associate"],["assiciated","associated"],["assiciates","associates"],["assiciation","association"],["assiciations","associations"],["asside","aside"],["assiged","assigned"],["assigend","assigned"],["assigh","assign"],["assighed","assigned"],["assighee","assignee"],["assighees","assignees"],["assigher","assigner"],["assighers","assigners"],["assighing","assigning"],["assighor","assignor"],["assighors","assignors"],["assighs","assigns"],["assiging","assigning"],["assigment","assignment"],["assigments","assignments"],["assigmnent","assignment"],["assignalble","assignable"],["assignement","assignment"],["assignements","assignments"],["assignemnt","assignment"],["assignemnts","assignments"],["assignemtn","assignment"],["assignend","assigned"],["assignenment","assignment"],["assignenmentes","assignments"],["assignenments","assignments"],["assignenmet","assignment"],["assignes","assigns"],["assignmenet","assignment"],["assignmens","assignments"],["assignmet","assignment"],["assignmetns","assignments"],["assignmnet","assignment"],["assignt","assign"],["assigntment","assignment"],["assihnment","assignment"],["assihnments","assignments"],["assime","assume"],["assined","assigned"],["assing","assign"],["assinged","assigned"],["assinging","assigning"],["assingled","assigned"],["assingment","assignment"],["assingned","assigned"],["assingnment","assignment"],["assings","assigns"],["assinment","assignment"],["assiocate","associate"],["assiocated","associated"],["assiocates","associates"],["assiocating","associating"],["assiocation","association"],["assiociate","associate"],["assiociated","associated"],["assiociates","associates"],["assiociating","associating"],["assiociation","association"],["assisance","assistance"],["assisant","assistant"],["assisants","assistants"],["assising","assisting"],["assisnate","assassinate"],["assistence","assistance"],["assistent","assistant"],["assit","assist"],["assitant","assistant"],["assition","assertion"],["assmbler","assembler"],["assmeble","assemble"],["assmebler","assembler"],["assmebles","assembles"],["assmebling","assembling"],["assmebly","assembly"],["assmelber","assembler"],["assmption","assumption"],["assmptions","assumptions"],["assmume","assume"],["assmumed","assumed"],["assmumes","assumes"],["assmuming","assuming"],["assmumption","assumption"],["assmumptions","assumptions"],["assoaiate","associate"],["assoaiated","associated"],["assoaiates","associates"],["assoaiating","associating"],["assoaiation","association"],["assoaiations","associations"],["assoaiative","associative"],["assocaited","associated"],["assocate","associate"],["assocated","associated"],["assocates","associates"],["assocating","associating"],["assocation","association"],["assocations","associations"],["assocciated","associated"],["assocciation","association"],["assocciations","associations"],["assocciative","associative"],["associatated","associated"],["associatd","associated"],["associatied","associated"],["associcate","associate"],["associcated","associated"],["associcates","associates"],["associcating","associating"],["associdated","associated"],["associeate","associate"],["associeated","associated"],["associeates","associates"],["associeating","associating"],["associeation","association"],["associeations","associations"],["associeted","associated"],["associte","associate"],["associted","associated"],["assocites","associates"],["associting","associating"],["assocition","association"],["associtions","associations"],["associtive","associative"],["associuated","associated"],["assoction","association"],["assoiated","associated"],["assoicate","associate"],["assoicated","associated"],["assoicates","associates"],["assoication","association"],["assoiciative","associative"],["assomption","assumption"],["assosciate","associate"],["assosciated","associated"],["assosciates","associates"],["assosciating","associating"],["assosiacition","association"],["assosiacitions","associations"],["assosiacted","associated"],["assosiate","associate"],["assosiated","associated"],["assosiates","associates"],["assosiating","associating"],["assosiation","association"],["assosiations","associations"],["assosiative","associative"],["assosication","assassination"],["assotiated","associated"],["assoziated","associated"],["asssassans","assassins"],["asssembler","assembler"],["asssembly","assembly"],["asssert","assert"],["asssertion","assertion"],["asssociate","associated"],["asssociated","associated"],["asssociation","association"],["asssume","assume"],["asssumes","assumes"],["asssuming","assuming"],["assualt","assault"],["assualted","assaulted"],["assuembly","assembly"],["assum","assume"],["assuma","assume"],["assumad","assumed"],["assumang","assuming"],["assumas","assumes"],["assumbe","assume"],["assumbed","assumed"],["assumbes","assumes"],["assumbing","assuming"],["assumend","assumed"],["assumking","assuming"],["assumme","assume"],["assummed","assumed"],["assummes","assumes"],["assumming","assuming"],["assumne","assume"],["assumned","assumed"],["assumnes","assumes"],["assumning","assuming"],["assumong","assuming"],["assumotion","assumption"],["assumotions","assumptions"],["assumpation","assumption"],["assumpted","assumed"],["assums","assumes"],["assumse","assumes"],["assumtion","assumption"],["assumtions","assumptions"],["assumtpion","assumption"],["assumtpions","assumptions"],["assumu","assume"],["assumud","assumed"],["assumue","assume"],["assumued","assumed"],["assumues","assumes"],["assumuing","assuming"],["assumung","assuming"],["assumuption","assumption"],["assumuptions","assumptions"],["assumus","assumes"],["assupmption","assumption"],["assuption","assumption"],["assuptions","assumptions"],["assurred","assured"],["assymetric","asymmetric"],["assymetrical","asymmetrical"],["assymetries","asymmetries"],["assymetry","asymmetry"],["assymmetric","asymmetric"],["assymmetrical","asymmetrical"],["assymmetries","asymmetries"],["assymmetry","asymmetry"],["assymptote","asymptote"],["assymptotes","asymptotes"],["assymptotic","asymptotic"],["assymptotically","asymptotically"],["assymthotic","asymptotic"],["assymtote","asymptote"],["assymtotes","asymptotes"],["assymtotic","asymptotic"],["assymtotically","asymptotically"],["asterices","asterisks"],["asteriod","asteroid"],["astethic","aesthetic"],["astethically","aesthetically"],["astethicism","aestheticism"],["astethics","aesthetics"],["asthetic","aesthetic"],["asthetical","aesthetical"],["asthetically","aesthetically"],["asthetics","aesthetics"],["astiimate","estimate"],["astiimation","estimation"],["asume","assume"],["asumed","assumed"],["asumes","assumes"],["asuming","assuming"],["asumption","assumption"],["asure","assure"],["aswell","as well"],["asychronize","asynchronize"],["asychronized","asynchronized"],["asychronous","asynchronous"],["asychronously","asynchronously"],["asycn","async"],["asycnhronous","asynchronous"],["asycnhronously","asynchronously"],["asycronous","asynchronous"],["asymetic","asymmetric"],["asymetric","asymmetric"],["asymetrical","asymmetrical"],["asymetricaly","asymmetrically"],["asymmeric","asymmetric"],["asynchnous","asynchronous"],["asynchonous","asynchronous"],["asynchonously","asynchronously"],["asynchornous","asynchronous"],["asynchoronous","asynchronous"],["asynchrnous","asynchronous"],["asynchrnously","asynchronously"],["asynchromous","asynchronous"],["asynchron","asynchronous"],["asynchroneously","asynchronously"],["asynchronious","asynchronous"],["asynchronlous","asynchronous"],["asynchrons","asynchronous"],["asynchroous","asynchronous"],["asynchrounous","asynchronous"],["asynchrounsly","asynchronously"],["asyncronous","asynchronous"],["asyncronously","asynchronously"],["asynnc","async"],["asynschron","asynchronous"],["atach","attach"],["atached","attached"],["ataching","attaching"],["atachment","attachment"],["atachments","attachments"],["atack","attack"],["atain","attain"],["atatch","attach"],["atatchable","attachable"],["atatched","attached"],["atatches","attaches"],["atatching","attaching"],["atatchment","attachment"],["atatchments","attachments"],["atempt","attempt"],["atempting","attempting"],["atempts","attempts"],["atendance","attendance"],["atended","attended"],["atendee","attendee"],["atends","attends"],["atention","attention"],["atheistical","atheistic"],["athenean","Athenian"],["atheneans","Athenians"],["ather","other"],["athiesm","atheism"],["athiest","atheist"],["athough","although"],["athron","athlon"],["athros","atheros"],["atleast","at least"],["atll","all"],["atmoic","atomic"],["atmoically","atomically"],["atomatically","automatically"],["atomical","atomic"],["atomicly","atomically"],["atomiticity","atomicity"],["atomtical","automatic"],["atomtically","automatically"],["atomticaly","automatically"],["atomticlly","automatically"],["atomticly","automatically"],["atorecovery","autorecovery"],["atorney","attorney"],["atquired","acquired"],["atribs","attribs"],["atribut","attribute"],["atribute","attribute"],["atributed","attributed"],["atributes","attributes"],["atrribute","attribute"],["atrributes","attributes"],["atrtribute","attribute"],["atrtributes","attributes"],["attaced","attached"],["attachd","attached"],["attachement","attachment"],["attachements","attachments"],["attachemnt","attachment"],["attachemnts","attachments"],["attachen","attach"],["attachged","attached"],["attachmant","attachment"],["attachmants","attachments"],["attachs","attaches"],["attachted","attached"],["attacs","attacks"],["attacthed","attached"],["attampt","attempt"],["attatch","attach"],["attatched","attached"],["attatches","attaches"],["attatching","attaching"],["attatchment","attachment"],["attatchments","attachments"],["attch","attach"],["attched","attached"],["attches","attaches"],["attching","attaching"],["attchment","attachment"],["attement","attempt"],["attemented","attempted"],["attementing","attempting"],["attements","attempts"],["attemp","attempt"],["attemped","attempted"],["attemping","attempting"],["attemppt","attempt"],["attemps","attempts"],["attemptes","attempts"],["attemptting","attempting"],["attemt","attempt"],["attemted","attempted"],["attemting","attempting"],["attemtp","attempt"],["attemtped","attempted"],["attemtping","attempting"],["attemtps","attempts"],["attemtpted","attempted"],["attemtpts","attempts"],["attemts","attempts"],["attendence","attendance"],["attendent","attendant"],["attendents","attendants"],["attened","attended"],["attennuation","attenuation"],["attension","attention"],["attented","attended"],["attentuation","attenuation"],["attentuations","attenuations"],["attepmpt","attempt"],["attept","attempt"],["attetntion","attention"],["attibute","attribute"],["attibuted","attributed"],["attibutes","attributes"],["attirbute","attribute"],["attirbutes","attributes"],["attiribute","attribute"],["attitide","attitude"],["attmept","attempt"],["attmpt","attempt"],["attnetion","attention"],["attosencond","attosecond"],["attosenconds","attoseconds"],["attrbiute","attribute"],["attrbute","attribute"],["attrbuted","attributed"],["attrbutes","attributes"],["attrbution","attribution"],["attrbutions","attributions"],["attribbute","attribute"],["attribiute","attribute"],["attribiutes","attributes"],["attribte","attribute"],["attribted","attributed"],["attribting","attributing"],["attribtue","attribute"],["attribtutes","attributes"],["attribude","attribute"],["attribue","attribute"],["attribues","attributes"],["attribuets","attributes"],["attribuite","attribute"],["attribuites","attributes"],["attribuition","attribution"],["attribure","attribute"],["attribured","attributed"],["attribures","attributes"],["attriburte","attribute"],["attriburted","attributed"],["attriburtes","attributes"],["attriburtion","attribution"],["attribut","attribute"],["attributei","attribute"],["attributen","attribute"],["attributess","attributes"],["attributred","attributed"],["attributs","attributes"],["attribye","attribute"],["attribyes","attributes"],["attribyte","attribute"],["attribytes","attributes"],["attriebute","attribute"],["attriebuted","attributed"],["attriebutes","attributes"],["attriebuting","attributing"],["attrirbute","attribute"],["attrirbuted","attributed"],["attrirbutes","attributes"],["attrirbution","attribution"],["attritube","attribute"],["attritubed","attributed"],["attritubes","attributes"],["attriubtes","attributes"],["attriubute","attribute"],["attrocities","atrocities"],["attrribute","attribute"],["attrributed","attributed"],["attrributes","attributes"],["attrribution","attribution"],["attrubite","attribute"],["attrubites","attributes"],["attrubte","attribute"],["attrubtes","attributes"],["attrubure","attribute"],["attrubures","attributes"],["attrubute","attribute"],["attrubutes","attributes"],["attrubyte","attribute"],["attrubytes","attributes"],["attruibute","attribute"],["attruibutes","attributes"],["atttached","attached"],["atttribute","attribute"],["atttributes","attributes"],["atuhenticate","authenticate"],["atuhenticated","authenticated"],["atuhenticates","authenticates"],["atuhenticating","authenticating"],["atuhentication","authentication"],["atuhenticator","authenticator"],["atuhenticators","authenticators"],["auccess","success"],["auccessive","successive"],["audeince","audience"],["audiance","audience"],["augest","August"],["augmnet","augment"],["augmnetation","augmentation"],["augmneted","augmented"],["augmneter","augmenter"],["augmneters","augmenters"],["augmnetes","augments"],["augmneting","augmenting"],["augmnets","augments"],["auguest","august"],["auhtor","author"],["auhtors","authors"],["aunthenticate","authenticate"],["aunthenticated","authenticated"],["aunthenticates","authenticates"],["aunthenticating","authenticating"],["aunthentication","authentication"],["aunthenticator","authenticator"],["aunthenticators","authenticators"],["auospacing","autospacing"],["auot","auto"],["auotmatic","automatic"],["auromated","automated"],["austrailia","Australia"],["austrailian","Australian"],["Australien","Australian"],["Austrlaian","Australian"],["autasave","autosave"],["autasaves","autosaves"],["autenticate","authenticate"],["autenticated","authenticated"],["autenticates","authenticates"],["autenticating","authenticating"],["autentication","authentication"],["autenticator","authenticator"],["autenticators","authenticators"],["authecate","authenticate"],["authecated","authenticated"],["authecates","authenticates"],["authecating","authenticating"],["authecation","authentication"],["authecator","authenticator"],["authecators","authenticators"],["authenaticate","authenticate"],["authenaticated","authenticated"],["authenaticates","authenticates"],["authenaticating","authenticating"],["authenatication","authentication"],["authenaticator","authenticator"],["authenaticators","authenticators"],["authencate","authenticate"],["authencated","authenticated"],["authencates","authenticates"],["authencating","authenticating"],["authencation","authentication"],["authencator","authenticator"],["authencators","authenticators"],["authenciate","authenticate"],["authenciated","authenticated"],["authenciates","authenticates"],["authenciating","authenticating"],["authenciation","authentication"],["authenciator","authenticator"],["authenciators","authenticators"],["authencicate","authenticate"],["authencicated","authenticated"],["authencicates","authenticates"],["authencicating","authenticating"],["authencication","authentication"],["authencicator","authenticator"],["authencicators","authenticators"],["authencity","authenticity"],["authencticate","authenticate"],["authencticated","authenticated"],["authencticates","authenticates"],["authencticating","authenticating"],["authenctication","authentication"],["authencticator","authenticator"],["authencticators","authenticators"],["authendicate","authenticate"],["authendicated","authenticated"],["authendicates","authenticates"],["authendicating","authenticating"],["authendication","authentication"],["authendicator","authenticator"],["authendicators","authenticators"],["authenenticate","authenticate"],["authenenticated","authenticated"],["authenenticates","authenticates"],["authenenticating","authenticating"],["authenentication","authentication"],["authenenticator","authenticator"],["authenenticators","authenticators"],["authenfie","authenticate"],["authenfied","authenticated"],["authenfies","authenticates"],["authenfiing","authenticating"],["authenfiion","authentication"],["authenfior","authenticator"],["authenfiors","authenticators"],["authenicae","authenticate"],["authenicaed","authenticated"],["authenicaes","authenticates"],["authenicaing","authenticating"],["authenicaion","authentication"],["authenicaor","authenticator"],["authenicaors","authenticators"],["authenicate","authenticate"],["authenicated","authenticated"],["authenicates","authenticates"],["authenicating","authenticating"],["authenication","authentication"],["authenicator","authenticator"],["authenicators","authenticators"],["authenificate","authenticate"],["authenificated","authenticated"],["authenificates","authenticates"],["authenificating","authenticating"],["authenification","authentication"],["authenificator","authenticator"],["authenificators","authenticators"],["authenitcate","authenticate"],["authenitcated","authenticated"],["authenitcates","authenticates"],["authenitcating","authenticating"],["authenitcation","authentication"],["authenitcator","authenticator"],["authenitcators","authenticators"],["autheniticate","authenticate"],["autheniticated","authenticated"],["autheniticates","authenticates"],["autheniticating","authenticating"],["authenitication","authentication"],["autheniticator","authenticator"],["autheniticators","authenticators"],["authenricate","authenticate"],["authenricated","authenticated"],["authenricates","authenticates"],["authenricating","authenticating"],["authenrication","authentication"],["authenricator","authenticator"],["authenricators","authenticators"],["authentation","authentication"],["authentcated","authenticated"],["authentciate","authenticate"],["authentciated","authenticated"],["authentciates","authenticates"],["authentciating","authenticating"],["authentciation","authentication"],["authentciator","authenticator"],["authentciators","authenticators"],["authenticaiton","authentication"],["authenticateion","authentication"],["authentiction","authentication"],["authentification","authentication"],["auther","author"],["autherisation","authorisation"],["autherise","authorise"],["autherization","authorization"],["autherize","authorize"],["authers","authors"],["authethenticate","authenticate"],["authethenticated","authenticated"],["authethenticates","authenticates"],["authethenticating","authenticating"],["authethentication","authentication"],["authethenticator","authenticator"],["authethenticators","authenticators"],["authethicate","authenticate"],["authethicated","authenticated"],["authethicates","authenticates"],["authethicating","authenticating"],["authethication","authentication"],["authethicator","authenticator"],["authethicators","authenticators"],["autheticate","authenticate"],["autheticated","authenticated"],["autheticates","authenticates"],["autheticating","authenticating"],["authetication","authentication"],["autheticator","authenticator"],["autheticators","authenticators"],["authetnicate","authenticate"],["authetnicated","authenticated"],["authetnicates","authenticates"],["authetnicating","authenticating"],["authetnication","authentication"],["authetnicator","authenticator"],["authetnicators","authenticators"],["authetnticate","authenticate"],["authetnticated","authenticated"],["authetnticates","authenticates"],["authetnticating","authenticating"],["authetntication","authentication"],["authetnticator","authenticator"],["authetnticators","authenticators"],["authobiographic","autobiographic"],["authobiography","autobiography"],["authoer","author"],["authoratative","authoritative"],["authorative","authoritative"],["authorded","authored"],["authorites","authorities"],["authorithy","authority"],["authoritiers","authorities"],["authorititive","authoritative"],["authoritive","authoritative"],["authorizeed","authorized"],["authror","author"],["authrored","authored"],["authrorisation","authorisation"],["authrorities","authorities"],["authrorization","authorization"],["authrors","authors"],["autimatic","automatic"],["autimatically","automatically"],["autmatically","automatically"],["auto-dependancies","auto-dependencies"],["auto-destrcut","auto-destruct"],["auto-genrated","auto-generated"],["auto-genratet","auto-generated"],["auto-genration","auto-generation"],["auto-negatiotiation","auto-negotiation"],["auto-negatiotiations","auto-negotiations"],["auto-negoatiation","auto-negotiation"],["auto-negoatiations","auto-negotiations"],["auto-negoation","auto-negotiation"],["auto-negoations","auto-negotiations"],["auto-negociation","auto-negotiation"],["auto-negociations","auto-negotiations"],["auto-negogtiation","auto-negotiation"],["auto-negogtiations","auto-negotiations"],["auto-negoitation","auto-negotiation"],["auto-negoitations","auto-negotiations"],["auto-negoptionsotiation","auto-negotiation"],["auto-negoptionsotiations","auto-negotiations"],["auto-negosiation","auto-negotiation"],["auto-negosiations","auto-negotiations"],["auto-negotaiation","auto-negotiation"],["auto-negotaiations","auto-negotiations"],["auto-negotaition","auto-negotiation"],["auto-negotaitions","auto-negotiations"],["auto-negotatiation","auto-negotiation"],["auto-negotatiations","auto-negotiations"],["auto-negotation","auto-negotiation"],["auto-negotations","auto-negotiations"],["auto-negothiation","auto-negotiation"],["auto-negothiations","auto-negotiations"],["auto-negotication","auto-negotiation"],["auto-negotications","auto-negotiations"],["auto-negotioation","auto-negotiation"],["auto-negotioations","auto-negotiations"],["auto-negotion","auto-negotiation"],["auto-negotionation","auto-negotiation"],["auto-negotionations","auto-negotiations"],["auto-negotions","auto-negotiations"],["auto-negotiotation","auto-negotiation"],["auto-negotiotations","auto-negotiations"],["auto-negotitaion","auto-negotiation"],["auto-negotitaions","auto-negotiations"],["auto-negotitation","auto-negotiation"],["auto-negotitations","auto-negotiations"],["auto-negotition","auto-negotiation"],["auto-negotitions","auto-negotiations"],["auto-negoziation","auto-negotiation"],["auto-negoziations","auto-negotiations"],["auto-realease","auto-release"],["auto-realeased","auto-released"],["autochtonous","autochthonous"],["autocmplete","autocomplete"],["autocmpleted","autocompleted"],["autocmpletes","autocompletes"],["autocmpleting","autocompleting"],["autocommiting","autocommitting"],["autoconplete","autocomplete"],["autoconpleted","autocompleted"],["autoconpletes","autocompletes"],["autoconpleting","autocompleting"],["autoconpletion","autocompletion"],["autocoomit","autocommit"],["autoctonous","autochthonous"],["autoeselect","autoselect"],["autofilt","autofilter"],["autofomat","autoformat"],["autoformating","autoformatting"],["autogenrated","autogenerated"],["autogenratet","autogenerated"],["autogenration","autogeneration"],["autogroping","autogrouping"],["autohorized","authorized"],["autoincrememnt","autoincrement"],["autoincrementive","autoincrement"],["automaatically","automatically"],["automagicaly","automagically"],["automaitc","automatic"],["automaitcally","automatically"],["automanifactured","automanufactured"],["automatcally","automatically"],["automatially","automatically"],["automaticallly","automatically"],["automaticaly","automatically"],["automaticalyl","automatically"],["automaticalyy","automatically"],["automaticlly","automatically"],["automaticly","automatically"],["autometic","automatic"],["autometically","automatically"],["automibile","automobile"],["automical","automatic"],["automically","automatically"],["automicaly","automatically"],["automicatilly","automatically"],["automiclly","automatically"],["automicly","automatically"],["automonomous","autonomous"],["automtic","automatic"],["automtically","automatically"],["autonagotiation","autonegotiation"],["autonegatiotiation","autonegotiation"],["autonegatiotiations","autonegotiations"],["autonegoatiation","autonegotiation"],["autonegoatiations","autonegotiations"],["autonegoation","autonegotiation"],["autonegoations","autonegotiations"],["autonegociated","autonegotiated"],["autonegociation","autonegotiation"],["autonegociations","autonegotiations"],["autonegogtiation","autonegotiation"],["autonegogtiations","autonegotiations"],["autonegoitation","autonegotiation"],["autonegoitations","autonegotiations"],["autonegoptionsotiation","autonegotiation"],["autonegoptionsotiations","autonegotiations"],["autonegosiation","autonegotiation"],["autonegosiations","autonegotiations"],["autonegotaiation","autonegotiation"],["autonegotaiations","autonegotiations"],["autonegotaition","autonegotiation"],["autonegotaitions","autonegotiations"],["autonegotatiation","autonegotiation"],["autonegotatiations","autonegotiations"],["autonegotation","autonegotiation"],["autonegotations","autonegotiations"],["autonegothiation","autonegotiation"],["autonegothiations","autonegotiations"],["autonegotication","autonegotiation"],["autonegotications","autonegotiations"],["autonegotioation","autonegotiation"],["autonegotioations","autonegotiations"],["autonegotion","autonegotiation"],["autonegotionation","autonegotiation"],["autonegotionations","autonegotiations"],["autonegotions","autonegotiations"],["autonegotiotation","autonegotiation"],["autonegotiotations","autonegotiations"],["autonegotitaion","autonegotiation"],["autonegotitaions","autonegotiations"],["autonegotitation","autonegotiation"],["autonegotitations","autonegotiations"],["autonegotition","autonegotiation"],["autonegotitions","autonegotiations"],["autonegoziation","autonegotiation"],["autonegoziations","autonegotiations"],["autoneogotiation","autonegotiation"],["autoneotiation","autonegotiation"],["autonogotiation","autonegotiation"],["autonymous","autonomous"],["autoonf","autoconf"],["autopsec","autospec"],["autor","author"],["autorealease","autorelease"],["autorisation","authorisation"],["autoritative","authoritative"],["autority","authority"],["autorization","authorization"],["autoropeat","autorepeat"],["autors","authors"],["autosae","autosave"],["autosavegs","autosaves"],["autosaveperodical","autosaveperiodical"],["autosence","autosense"],["autum","autumn"],["auxialiary","auxiliary"],["auxilaries","auxiliaries"],["auxilary","auxiliary"],["auxileries","auxiliaries"],["auxilery","auxiliary"],["auxiliar","auxiliary"],["auxillaries","auxiliaries"],["auxillary","auxiliary"],["auxilleries","auxiliaries"],["auxillery","auxiliary"],["auxilliaries","auxiliaries"],["auxilliary","auxiliary"],["auxiluary","auxiliary"],["auxliliary","auxiliary"],["avaiable","available"],["avaialable","available"],["avaialbale","available"],["avaialbe","available"],["avaialbel","available"],["avaialbility","availability"],["avaialble","available"],["avaiblable","available"],["avaible","available"],["avaiiability","availability"],["avaiiable","available"],["avaiibility","availability"],["avaiible","available"],["avaiilable","available"],["availaable","available"],["availabable","available"],["availabal","available"],["availabale","available"],["availabality","availability"],["availabble","available"],["availabe","available"],["availabed","available"],["availabel","available"],["availabele","available"],["availabelity","availability"],["availabillity","availability"],["availabilty","availability"],["availabke","available"],["availabl","available"],["availabled","available"],["availablen","available"],["availablity","availability"],["availabyl","available"],["availaiable","available"],["availaibility","availability"],["availaible","available"],["availailability","availability"],["availaility","availability"],["availalable","available"],["availalbe","available"],["availalble","available"],["availale","available"],["availaliable","available"],["availality","availability"],["availanle","available"],["availavble","available"],["availavility","availability"],["availavle","available"],["availbable","available"],["availbale","available"],["availbe","available"],["availble","available"],["availeable","available"],["availebilities","availabilities"],["availebility","availability"],["availeble","available"],["availiable","available"],["availibility","availability"],["availibilty","availability"],["availible","available"],["availlable","available"],["avalable","available"],["avalaible","available"],["avalance","avalanche"],["avaliable","available"],["avalibale","available"],["avalible","available"],["avaloable","available"],["avaluate","evaluate"],["avaluated","evaluated"],["avaluates","evaluates"],["avaluating","evaluating"],["avance","advance"],["avanced","advanced"],["avances","advances"],["avancing","advancing"],["avaoid","avoid"],["avaoidable","avoidable"],["avaoided","avoided"],["avarage","average"],["avarageing","averaging"],["avarege","average"],["avation","aviation"],["avcoid","avoid"],["avcoids","avoids"],["avdisories","advisories"],["avdisoriyes","advisories"],["avdisory","advisory"],["avengence","a vengeance"],["averageed","averaged"],["averagine","averaging"],["averload","overload"],["averloaded","overloaded"],["averloads","overloads"],["avertising","advertising"],["avgerage","average"],["aviable","available"],["avialable","available"],["avilability","availability"],["avilable","available"],["aviod","avoid"],["avioded","avoided"],["avioding","avoiding"],["aviods","avoids"],["avisories","advisories"],["avisoriyes","advisories"],["avisory","advisory"],["avod","avoid"],["avoded","avoided"],["avoding","avoiding"],["avods","avoids"],["avoidence","avoidance"],["avoind","avoid"],["avoinded","avoided"],["avoinding","avoiding"],["avoinds","avoids"],["avriable","variable"],["avriables","variables"],["avriant","variant"],["avriants","variants"],["avtive","active"],["awared","awarded"],["aweful","awful"],["awefully","awfully"],["awkard","awkward"],["awming","awning"],["awmings","awnings"],["awnser","answer"],["awnsered","answered"],["awnsers","answers"],["awoid","avoid"],["awsome","awesome"],["awya","away"],["axises","axes"],["axissymmetric","axisymmetric"],["axix","axis"],["axixsymmetric","axisymmetric"],["axpressed","expressed"],["aysnc","async"],["ayways","always"],["bacause","because"],["baceause","because"],["bacground","background"],["bacic","basic"],["backards","backwards"],["backbround","background"],["backbrounds","backgrounds"],["backedn","backend"],["backedns","backends"],["backgorund","background"],["backgorunds","backgrounds"],["backgound","background"],["backgounds","backgrounds"],["backgournd","background"],["backgournds","backgrounds"],["backgrond","background"],["backgronds","backgrounds"],["backgroound","background"],["backgroounds","backgrounds"],["backgroud","background"],["backgroudn","background"],["backgroudns","backgrounds"],["backgrouds","backgrounds"],["backgroun","background"],["backgroung","background"],["backgroungs","backgrounds"],["backgrouns","backgrounds"],["backgrount","background"],["backgrounts","backgrounds"],["backgrouund","background"],["backgrund","background"],["backgrunds","backgrounds"],["backgruond","background"],["backgruonds","backgrounds"],["backlght","backlight"],["backlghting","backlighting"],["backlghts","backlights"],["backned","backend"],["backneds","backends"],["backound","background"],["backounds","backgrounds"],["backpsace","backspace"],["backrefence","backreference"],["backrgound","background"],["backrgounds","backgrounds"],["backround","background"],["backrounds","backgrounds"],["backsapce","backspace"],["backslase","backslash"],["backslases","backslashes"],["backslashs","backslashes"],["backwad","backwards"],["backwardss","backwards"],["backware","backward"],["backwark","backward"],["backwrad","backward"],["bactracking","backtracking"],["bacup","backup"],["baed","based"],["bage","bag"],["bahaving","behaving"],["bahavior","behavior"],["bahavioral","behavioral"],["bahaviors","behaviors"],["bahaviour","behaviour"],["baisc","basic"],["baised","raised"],["bakc","back"],["bakcrefs","backrefs"],["bakends","backends"],["bakground","background"],["bakgrounds","backgrounds"],["bakup","backup"],["bakups","backups"],["bakward","backward"],["bakwards","backwards"],["balacing","balancing"],["balence","balance"],["baloon","balloon"],["baloons","balloons"],["balse","false"],["banannas","bananas"],["bandwdith","bandwidth"],["bandwdiths","bandwidths"],["bandwidht","bandwidth"],["bandwidthm","bandwidth"],["bandwitdh","bandwidth"],["bandwith","bandwidth"],["bankrupcy","bankruptcy"],["banlance","balance"],["banruptcy","bankruptcy"],["barbedos","barbados"],["bariier","barrier"],["barnch","branch"],["barnched","branched"],["barncher","brancher"],["barnchers","branchers"],["barnches","branches"],["barnching","branching"],["barriors","barriers"],["barrriers","barriers"],["barycentic","barycentric"],["basci","basic"],["bascially","basically"],["bascktrack","backtrack"],["basf","base"],["basicallly","basically"],["basicaly","basically"],["basiclly","basically"],["basicly","basically"],["basline","baseline"],["baslines","baselines"],["bassic","basic"],["bassically","basically"],["bastract","abstract"],["bastracted","abstracted"],["bastracter","abstracter"],["bastracting","abstracting"],["bastraction","abstraction"],["bastractions","abstractions"],["bastractly","abstractly"],["bastractness","abstractness"],["bastractor","abstractor"],["bastracts","abstracts"],["bateries","batteries"],["batery","battery"],["battaries","batteries"],["battary","battery"],["bbefore","before"],["bboolean","boolean"],["bbooleans","booleans"],["bcak","back"],["bcause","because"],["beable","be able"],["beacaon","beacon"],["beacause","because"],["beachead","beachhead"],["beacuse","because"],["beaon","beacon"],["bearword","bareword"],["beastiality","bestiality"],["beatiful","beautiful"],["beauracracy","bureaucracy"],["beaurocracy","bureaucracy"],["beaurocratic","bureaucratic"],["beause","because"],["beauti","beauty"],["beautiy","beauty"],["beautyfied","beautified"],["beautyfull","beautiful"],["beaviour","behaviour"],["bebongs","belongs"],["becaause","because"],["becacdd","because"],["becahse","because"],["becamae","became"],["becaouse","because"],["becase","because"],["becasue","because"],["becasuse","because"],["becauae","because"],["becauce","because"],["becaue","because"],["becaues","because"],["becaus","because"],["becausee","because"],["becauseq","because"],["becauses","because"],["becausw","because"],["beccause","because"],["bechmark","benchmark"],["bechmarked","benchmarked"],["bechmarking","benchmarking"],["bechmarks","benchmarks"],["becoem","become"],["becomeing","becoming"],["becomme","become"],["becommes","becomes"],["becomming","becoming"],["becoms","becomes"],["becouse","because"],["becoz","because"],["bector","vector"],["bectors","vectors"],["becuase","because"],["becuse","because"],["becxause","because"],["bedore","before"],["beeings","beings"],["beetween","between"],["beetwen","between"],["beffer","buffer"],["befoer","before"],["befor","before"],["beforehands","beforehand"],["beforere","before"],["befores","before"],["beforing","before"],["befure","before"],["begginer","beginner"],["begginers","beginners"],["beggingin","beginning"],["begginging","beginning"],["begginig","beginning"],["beggining","beginning"],["begginings","beginnings"],["begginnig","beginning"],["begginning","beginning"],["beggins","begins"],["beghavior","behavior"],["beghaviors","behaviors"],["begiinning","beginning"],["beginer","beginner"],["begines","begins"],["begining","beginning"],["beginining","beginning"],["begininings","beginnings"],["begininng","beginning"],["begininngs","beginnings"],["beginn","begin"],["beginnig","beginning"],["beginnin","beginning"],["beginnning","beginning"],["beginnnings","beginnings"],["behabior","behavior"],["behabiors","behaviors"],["behabiour","behaviour"],["behabiours","behaviours"],["behabviour","behaviour"],["behaivior","behavior"],["behaiviour","behaviour"],["behaiviuor","behaviour"],["behaivor","behavior"],["behaivors","behaviors"],["behaivour","behaviour"],["behaivoural","behavioural"],["behaivours","behaviours"],["behavioutr","behaviour"],["behaviro","behavior"],["behaviuor","behaviour"],["behavoir","behavior"],["behavoirs","behaviors"],["behavour","behaviour"],["behavriour","behaviour"],["behavriours","behaviours"],["behinde","behind"],["behvaiour","behaviour"],["behviour","behaviour"],["beigin","begin"],["beiginning","beginning"],["beind","behind"],["beinning","beginning"],["bejond","beyond"],["beleagured","beleaguered"],["beleif","belief"],["beleifable","believable"],["beleifed","believed"],["beleifing","believing"],["beleivable","believable"],["beleive","believe"],["beleived","believed"],["beleives","believes"],["beleiving","believing"],["beliefable","believable"],["beliefed","believed"],["beliefing","believing"],["beligum","belgium"],["beling","belong"],["belivable","believable"],["belive","believe"],["beliveable","believable"],["beliveably","believably"],["beliveble","believable"],["belivebly","believably"],["beliving","believing"],["belligerant","belligerent"],["bellweather","bellwether"],["belog","belong"],["beloging","belonging"],["belogs","belongs"],["belond","belong"],["beloning","belonging"],["belown","belong"],["belwo","below"],["bemusemnt","bemusement"],["benchamarked","benchmarked"],["benchamarking","benchmarking"],["benchamrk","benchmark"],["benchamrked","benchmarked"],["benchamrking","benchmarking"],["benchamrks","benchmarks"],["benchmkar","benchmark"],["benchmkared","benchmarked"],["benchmkaring","benchmarking"],["benchmkars","benchmarks"],["benchs","benches"],["benckmark","benchmark"],["benckmarked","benchmarked"],["benckmarking","benchmarking"],["benckmarks","benchmarks"],["benechmark","benchmark"],["benechmarked","benchmarked"],["benechmarking","benchmarking"],["benechmarks","benchmarks"],["beneeth","beneath"],["benefical","beneficial"],["beneficary","beneficiary"],["benefied","benefited"],["benefitial","beneficial"],["beneits","benefits"],["benetifs","benefits"],["beng","being"],["benhind","behind"],["benificial","beneficial"],["benifit","benefit"],["benifite","benefit"],["benifited","benefited"],["benifitial","beneficial"],["benifits","benefits"],["benig","being"],["beond","beyond"],["berforming","performing"],["bergamont","bergamot"],["Berkley","Berkeley"],["Bernouilli","Bernoulli"],["berween","between"],["besed","based"],["beseige","besiege"],["beseiged","besieged"],["beseiging","besieging"],["besure","be sure"],["beteeen","between"],["beteen","between"],["beter","better"],["beteween","between"],["betrween","between"],["bettern","better"],["bettween","between"],["betwean","between"],["betwee","between"],["betweed","between"],["betweeen","between"],["betweem","between"],["betweend","between"],["betweeness","betweenness"],["betweent","between"],["betwen","between"],["betwene","between"],["betwenn","between"],["betwern","between"],["betwween","between"],["beucase","because"],["beuracracy","bureaucracy"],["beutification","beautification"],["beutiful","beautiful"],["beutifully","beautifully"],["bever","never"],["bevore","before"],["bevorehand","beforehand"],["bevorhand","beforehand"],["beweeen","between"],["beween","between"],["bewteen","between"],["bewteeness","betweenness"],["beyone","beyond"],["beyong","beyond"],["beyound","beyond"],["bffer","buffer"],["bginning","beginning"],["bi-langual","bi-lingual"],["bianries","binaries"],["bianry","binary"],["biappicative","biapplicative"],["biddings","bidding"],["bidimentionnal","bidimensional"],["bidning","binding"],["bidnings","bindings"],["bigallic","bigalloc"],["bigining","beginning"],["biginning","beginning"],["biinary","binary"],["bilangual","bilingual"],["bilateraly","bilaterally"],["billingualism","bilingualism"],["billon","billion"],["bimask","bitmask"],["bimillenia","bimillennia"],["bimillenial","bimillennial"],["bimillenium","bimillennium"],["bimontly","bimonthly"],["binairy","binary"],["binanary","binary"],["binar","binary"],["binay","binary"],["bindins","bindings"],["binidng","binding"],["binominal","binomial"],["binraries","binaries"],["binrary","binary"],["bion","bio"],["birght","bright"],["birghten","brighten"],["birghter","brighter"],["birghtest","brightest"],["birghtness","brightness"],["biridectionality","bidirectionality"],["bisct","bisect"],["bisines","business"],["bisiness","business"],["bisnes","business"],["bisness","business"],["bistream","bitstream"],["bisunes","business"],["bisuness","business"],["bitamps","bitmaps"],["bitap","bitmap"],["bitfileld","bitfield"],["bitfilelds","bitfields"],["bitis","bits"],["bitmast","bitmask"],["bitnaps","bitmaps"],["bitwise-orring","bitwise-oring"],["bizare","bizarre"],["bizarely","bizarrely"],["bizzare","bizarre"],["bject","object"],["bjects","objects"],["blackslashes","backslashes"],["blaclist","blacklist"],["blaim","blame"],["blaimed","blamed"],["blanace","balance"],["blancked","blanked"],["blatent","blatant"],["blatently","blatantly"],["blbos","blobs"],["blcok","block"],["blcoks","blocks"],["bleading","bleeding"],["blessd","blessed"],["blessure","blessing"],["bletooth","bluetooth"],["bleutooth","bluetooth"],["blindy","blindly"],["Blitzkreig","Blitzkrieg"],["bload","bloat"],["bloaded","bloated"],["blocack","blockack"],["bloccks","blocks"],["blocekd","blocked"],["blockhain","blockchain"],["blockhains","blockchains"],["blockin","blocking"],["blockse","blocks"],["bloddy","bloody"],["blodk","block"],["bloek","bloke"],["bloekes","blokes"],["bloeks","blokes"],["bloekss","blokes"],["blohted","bloated"],["blokcer","blocker"],["blokchain","blockchain"],["blokchains","blockchains"],["blokcing","blocking"],["bloked","blocked"],["bloker","blocker"],["bloking","blocking"],["blong","belong"],["blonged","belonged"],["blonging","belonging"],["blongs","belongs"],["bloock","block"],["bloocks","blocks"],["bloted","bloated"],["bluestooth","bluetooth"],["bluetooh","bluetooth"],["bluetoot","bluetooth"],["bluetootn","bluetooth"],["blured","blurred"],["blutooth","bluetooth"],["bnecause","because"],["boads","boards"],["boardcast","broadcast"],["bocome","become"],["boddy","body"],["bodiese","bodies"],["bodydbuilder","bodybuilder"],["boelean","boolean"],["boeleans","booleans"],["boffer","buffer"],["bofore","before"],["bofy","body"],["boggus","bogus"],["bogos","bogus"],["bointer","pointer"],["bolean","boolean"],["boleen","boolean"],["bolor","color"],["bombardement","bombardment"],["bombarment","bombardment"],["bondary","boundary"],["Bonnano","Bonanno"],["bood","boot"],["bookeeping","bookkeeping"],["bookkeeing","bookkeeping"],["bookkeeiping","bookkeeping"],["bookkepp","bookkeep"],["bookmakr","bookmark"],["bookmar","bookmark"],["booleam","boolean"],["booleamn","boolean"],["booleamns","booleans"],["booleams","booleans"],["booleanss","booleans"],["booleen","boolean"],["booleens","booleans"],["boolen","boolean"],["boolens","booleans"],["booltloader","bootloader"],["booltloaders","bootloaders"],["boomark","bookmark"],["boomarks","bookmarks"],["boook","book"],["booolean","boolean"],["boooleans","booleans"],["booshelf","bookshelf"],["booshelves","bookshelves"],["boostrap","bootstrap"],["boostrapped","bootstrapped"],["boostrapping","bootstrapping"],["boostraps","bootstraps"],["booteek","boutique"],["bootlaoder","bootloader"],["bootlaoders","bootloaders"],["bootoloader","bootloader"],["bootom","bottom"],["bootraping","bootstrapping"],["bootsram","bootram"],["bootsrap","bootstrap"],["bootstap","bootstrap"],["bootstapped","bootstrapped"],["bootstapping","bootstrapping"],["bootstaps","bootstraps"],["booundaries","boundaries"],["booundary","boundary"],["boquet","bouquet"],["borad","board"],["boradcast","broadcast"],["bording","boarding"],["bordreline","borderline"],["bordrelines","borderlines"],["borgwasy","bourgeoisie"],["borke","broke"],["borken","broken"],["borow","borrow"],["borwser","browsers"],["borwsers","browsers"],["bothe","both"],["boths","both"],["botifies","notifies"],["bottem","bottom"],["bottlenck","bottleneck"],["bottlencks","bottlenecks"],["bottlenect","bottleneck"],["bottlenects","bottlenecks"],["bottlneck","bottleneck"],["bottlnecks","bottlenecks"],["bottomborde","bottomborder"],["bottome","bottom"],["bottomn","bottom"],["bottonm","bottom"],["botttom","bottom"],["bouce","bounce"],["bouces","bounces"],["boudaries","boundaries"],["boudary","boundary"],["bouding","bounding"],["boudnaries","boundaries"],["boudnary","boundary"],["bouds","bounds"],["bouind","bound"],["bouinded","bounded"],["bouinding","bounding"],["bouinds","bounds"],["boun","bound"],["bounaaries","boundaries"],["bounaary","boundary"],["bounad","bound"],["bounadaries","boundaries"],["bounadary","boundary"],["bounaded","bounded"],["bounading","bounding"],["bounadries","boundaries"],["bounadry","boundary"],["bounads","bounds"],["bounardies","boundaries"],["bounardy","boundary"],["bounaries","boundaries"],["bounary","boundary"],["bounbdaries","boundaries"],["bounbdary","boundary"],["boundares","boundaries"],["boundaryi","boundary"],["boundarys","boundaries"],["bounday","boundary"],["boundays","boundaries"],["bounderies","boundaries"],["boundery","boundary"],["boundig","bounding"],["boundimg","bounding"],["boundin","bounding"],["boundrary","boundary"],["boundries","boundaries"],["boundry","boundary"],["bounduaries","boundaries"],["bouned","bounded"],["boungaries","boundaries"],["boungary","boundary"],["boungin","bounding"],["boungind","bounding"],["bounhdaries","boundaries"],["bounhdary","boundary"],["bounidng","bounding"],["bouning","bounding"],["bounnd","bound"],["bounndaries","boundaries"],["bounndary","boundary"],["bounnded","bounded"],["bounnding","bounding"],["bounnds","bounds"],["bounradies","boundaries"],["bounrady","boundary"],["bounraies","boundaries"],["bounraries","boundaries"],["bounrary","boundary"],["bounray","boundary"],["bouns","bounds"],["bounsaries","boundaries"],["bounsary","boundary"],["bounsd","bounds"],["bount","bound"],["bountries","boundaries"],["bountry","boundary"],["bounudaries","boundaries"],["bounudary","boundary"],["bounus","bonus"],["bouqet","bouquet"],["bouund","bound"],["bouunded","bounded"],["bouunding","bounding"],["bouunds","bounds"],["bouy","buoy"],["bouyancy","buoyancy"],["bouyant","buoyant"],["boyant","buoyant"],["boycot","boycott"],["bracese","braces"],["brach","branch"],["brackeds","brackets"],["bracketwith","bracket with"],["brackground","background"],["bradcast","broadcast"],["brakpoint","breakpoint"],["brakpoints","breakpoints"],["branchces","branches"],["brancheswith","branches with"],["branchs","branches"],["branchsi","branches"],["branck","branch"],["branckes","branches"],["brancket","bracket"],["branckets","brackets"],["brane","brain"],["braodcast","broadcast"],["braodcasted","broadcasted"],["braodcasts","broadcasts"],["Brasillian","Brazilian"],["brazeer","brassiere"],["brazillian","Brazilian"],["breakes","breaks"],["breakthough","breakthrough"],["breakthroughts","breakthroughs"],["breakthruogh","breakthrough"],["breakthruoghs","breakthroughs"],["breal","break"],["breefly","briefly"],["brefore","before"],["breif","brief"],["breifly","briefly"],["brekpoint","breakpoint"],["brekpoints","breakpoints"],["breshed","brushed"],["breshes","brushes"],["breshing","brushing"],["brethen","brethren"],["bretheren","brethren"],["brfore","before"],["bridg","bridge"],["brievely","briefly"],["brievety","brevity"],["brigde","bridge"],["brige","bridge"],["briges","bridges"],["brighness","brightness"],["brightnesss","brightness"],["brigth","bright"],["brigthnes","brightness"],["brigthness","brightness"],["briliant","brilliant"],["brilinear","bilinear"],["brillant","brilliant"],["brimestone","brimstone"],["bringin","bringing"],["bringtofont","bringtofront"],["brite","bright"],["briten","brighten"],["britened","brightened"],["britener","brightener"],["briteners","brighteners"],["britenes","brightenes"],["britening","brightening"],["briter","brighter"],["Britian","Britain"],["Brittish","British"],["brnach","branch"],["brnaches","branches"],["broacast","broadcast"],["broacasted","broadcast"],["broacasting","broadcasting"],["broacasts","broadcasts"],["broadacasting","broadcasting"],["broadcas","broadcast"],["broadcase","broadcast"],["broadcasti","broadcast"],["broadcat","broadcast"],["broady","broadly"],["broardcast","broadcast"],["broblematic","problematic"],["brocher","brochure"],["brocken","broken"],["brockend","broken"],["brockened","broken"],["brocolee","broccoli"],["brodcast","broadcast"],["broked","broken"],["brokem","broken"],["brokend","broken"],["brokened","broken"],["brokeness","brokenness"],["bronken","broken"],["brosable","browsable"],["broser","browser"],["brosers","browsers"],["brosing","browsing"],["broswable","browsable"],["broswe","browse"],["broswed","browsed"],["broswer","browser"],["broswers","browsers"],["broswing","browsing"],["brower","browser"],["browers","browsers"],["browing","browsing"],["browseable","browsable"],["browswable","browsable"],["browswe","browse"],["browswed","browsed"],["browswer","browser"],["browswers","browsers"],["browswing","browsing"],["brutaly","brutally"],["brwosable","browsable"],["brwose","browse"],["brwosed","browsed"],["brwoser","browser"],["brwosers","browsers"],["brwosing","browsing"],["btye","byte"],["btyes","bytes"],["buad","baud"],["bubbless","bubbles"],["Buddah","Buddha"],["Buddist","Buddhist"],["bufefr","buffer"],["bufer","buffer"],["bufers","buffers"],["buffereed","buffered"],["bufferent","buffered"],["bufferes","buffers"],["bufferred","buffered"],["buffeur","buffer"],["bufffer","buffer"],["bufffers","buffers"],["buffor","buffer"],["buffors","buffers"],["buffr","buffer"],["buffred","buffered"],["buffring","buffering"],["bufufer","buffer"],["buggest","biggest"],["bugous","bogus"],["buguous","bogus"],["bugus","bogus"],["buid","build"],["buider","builder"],["buiders","builders"],["buiding","building"],["buidl","build"],["buidling","building"],["buidlings","buildings"],["buidls","builds"],["buiild","build"],["buik","bulk"],["build-dependancies","build-dependencies"],["build-dependancy","build-dependency"],["build-in","built-in"],["builded","built"],["buildpackge","buildpackage"],["buildpackges","buildpackages"],["builing","building"],["builings","buildings"],["buillt","built"],["built-time","build-time"],["builter","builder"],["builters","builders"],["buinseses","businesses"],["buinsess","business"],["buinsesses","businesses"],["buipd","build"],["buisness","business"],["buisnessman","businessman"],["buissiness","business"],["buissinesses","businesses"],["buit","built"],["buitin","builtin"],["buitins","builtins"],["buitlin","builtin"],["buitlins","builtins"],["buitton","button"],["buittons","buttons"],["buld","build"],["bulding","building"],["bulds","builds"],["bulid","build"],["buliding","building"],["bulids","builds"],["bulit","built"],["bulitin","built-in"],["bulle","bullet"],["bulletted","bulleted"],["bulnerabilities","vulnerabilities"],["bulnerability","vulnerability"],["bulnerable","vulnerable"],["bult","built"],["bult-in","built-in"],["bultin","builtin"],["bumby","bumpy"],["bumpded","bumped"],["bumpt","bump"],["bumpted","bumped"],["bumpter","bumper"],["bumpting","bumping"],["bundel","bundle"],["bundeled","bundled"],["bundels","bundles"],["buoancy","buoyancy"],["bureauracy","bureaucracy"],["burocratic","bureaucratic"],["burried","buried"],["burtst","burst"],["busines","business"],["busness","business"],["bussiness","business"],["bussy","busy"],["buton","button"],["butons","buttons"],["butterly","butterfly"],["buttong","button"],["buttonn","button"],["buttonns","buttons"],["buttosn","buttons"],["buttton","button"],["butttons","buttons"],["buufers","buffers"],["buuild","build"],["buuilds","builds"],["bve","be"],["bwtween","between"],["bypas","bypass"],["bypased","bypassed"],["bypasing","bypassing"],["bytetream","bytestream"],["bytetreams","bytestreams"],["cabint","cabinet"],["cabints","cabinets"],["cacahe","cache"],["cacahes","caches"],["cace","cache"],["cachable","cacheable"],["cacheed","cached"],["cacheing","caching"],["cachline","cacheline"],["cacl","calc"],["caclate","calculate"],["cacluate","calculate"],["cacluated","calculated"],["cacluater","calculator"],["cacluates","calculates"],["cacluating","calculating"],["cacluation","calculation"],["cacluations","calculations"],["cacluator","calculator"],["caclucate","calculate"],["caclucation","calculation"],["caclucations","calculations"],["caclucator","calculator"],["caclulate","calculate"],["caclulated","calculated"],["caclulates","calculates"],["caclulating","calculating"],["caclulation","calculation"],["caclulations","calculations"],["caculate","calculate"],["caculated","calculated"],["caculater","calculator"],["caculates","calculates"],["caculating","calculating"],["caculation","calculation"],["caculations","calculations"],["caculator","calculator"],["cacuses","caucuses"],["cadidate","candidate"],["caefully","carefully"],["Caesarian","Caesarean"],["cahacter","character"],["cahacters","characters"],["cahange","change"],["cahanged","changed"],["cahanges","changes"],["cahanging","changing"],["cahannel","channel"],["caharacter","character"],["caharacters","characters"],["caharcter","character"],["caharcters","characters"],["cahc","cache"],["cahce","cache"],["cahced","cached"],["cahces","caches"],["cahche","cache"],["cahchedb","cachedb"],["cahches","caches"],["cahcing","caching"],["cahcs","caches"],["cahdidate","candidate"],["cahdidates","candidates"],["cahe","cache"],["cahes","caches"],["cahgne","change"],["cahgned","changed"],["cahgner","changer"],["cahgners","changers"],["cahgnes","changes"],["cahgning","changing"],["cahhel","channel"],["cahhels","channels"],["cahined","chained"],["cahing","caching"],["cahining","chaining"],["cahnge","change"],["cahnged","changed"],["cahnges","changes"],["cahnging","changing"],["cahnnel","channel"],["cahnnels","channels"],["cahr","char"],["cahracter","character"],["cahracters","characters"],["cahrging","charging"],["cahrs","chars"],["calaber","caliber"],["calalog","catalog"],["calback","callback"],["calbirate","calibrate"],["calbirated","calibrated"],["calbirates","calibrates"],["calbirating","calibrating"],["calbiration","calibration"],["calbirations","calibrations"],["calbirator","calibrator"],["calbirators","calibrators"],["calcable","calculable"],["calcalate","calculate"],["calciulate","calculate"],["calciulating","calculating"],["calclation","calculation"],["calcluate","calculate"],["calcluated","calculated"],["calcluates","calculates"],["calclulate","calculate"],["calclulated","calculated"],["calclulates","calculates"],["calclulating","calculating"],["calclulation","calculation"],["calclulations","calculations"],["calcualate","calculate"],["calcualated","calculated"],["calcualates","calculates"],["calcualating","calculating"],["calcualation","calculation"],["calcualations","calculations"],["calcualte","calculate"],["calcualted","calculated"],["calcualter","calculator"],["calcualtes","calculates"],["calcualting","calculating"],["calcualtion","calculation"],["calcualtions","calculations"],["calcualtor","calculator"],["calcuate","calculate"],["calcuated","calculated"],["calcuates","calculates"],["calcuation","calculation"],["calcuations","calculations"],["calculaion","calculation"],["calculataed","calculated"],["calculater","calculator"],["calculatted","calculated"],["calculatter","calculator"],["calculattion","calculation"],["calculattions","calculations"],["calculaution","calculation"],["calculautions","calculations"],["calculcate","calculate"],["calculcation","calculation"],["calculed","calculated"],["calculs","calculus"],["calcultate","calculate"],["calcultated","calculated"],["calcultater","calculator"],["calcultating","calculating"],["calcultator","calculator"],["calculting","calculating"],["calculuations","calculations"],["calcurate","calculate"],["calcurated","calculated"],["calcurates","calculates"],["calcurating","calculating"],["calcutate","calculate"],["calcutated","calculated"],["calcutates","calculates"],["calcutating","calculating"],["caleed","called"],["caleee","callee"],["calees","callees"],["caler","caller"],["calescing","coalescing"],["caliased","aliased"],["calibraiton","calibration"],["calibraitons","calibrations"],["calibrte","calibrate"],["calibrtion","calibration"],["caligraphy","calligraphy"],["calilng","calling"],["caliming","claiming"],["callabck","callback"],["callabcks","callbacks"],["callack","callback"],["callbacl","callback"],["callbacsk","callback"],["callbak","callback"],["callbakc","callback"],["callbakcs","callbacks"],["callbck","callback"],["callcack","callback"],["callcain","callchain"],["calld","called"],["calle","called"],["callef","called"],["callibrate","calibrate"],["callibrated","calibrated"],["callibrates","calibrates"],["callibrating","calibrating"],["callibration","calibration"],["callibrations","calibrations"],["callibri","calibri"],["callig","calling"],["callint","calling"],["callled","called"],["calllee","callee"],["calloed","called"],["callsr","calls"],["calsses","classes"],["calucalte","calculate"],["calucalted","calculated"],["calucaltes","calculates"],["calucalting","calculating"],["calucaltion","calculation"],["calucaltions","calculations"],["calucate","calculate"],["caluclate","calculate"],["caluclated","calculated"],["caluclater","calculator"],["caluclates","calculates"],["caluclating","calculating"],["caluclation","calculation"],["caluclations","calculations"],["caluclator","calculator"],["caluculate","calculate"],["caluculated","calculated"],["caluculates","calculates"],["caluculating","calculating"],["caluculation","calculation"],["caluculations","calculations"],["calue","value"],["calulate","calculate"],["calulated","calculated"],["calulater","calculator"],["calulates","calculates"],["calulating","calculating"],["calulation","calculation"],["calulations","calculations"],["Cambrige","Cambridge"],["camoflage","camouflage"],["camoflague","camouflage"],["campagin","campaign"],["campain","campaign"],["campaing","campaign"],["campains","campaigns"],["camparing","comparing"],["can;t","can't"],["canadan","canadian"],["canbe","can be"],["cancelaltion","cancellation"],["cancelation","cancellation"],["cancelations","cancellations"],["canceles","cancels"],["cancell","cancel"],["cancelles","cancels"],["cances","cancel"],["cancl","cancel"],["cancle","cancel"],["cancled","canceled"],["candadate","candidate"],["candadates","candidates"],["candiate","candidate"],["candiates","candidates"],["candidat","candidate"],["candidats","candidates"],["candidiate","candidate"],["candidiates","candidates"],["candinate","candidate"],["candinates","candidates"],["canditate","candidate"],["canditates","candidates"],["cange","change"],["canged","changed"],["canges","changes"],["canging","changing"],["canidate","candidate"],["canidates","candidates"],["cann't","can't"],["cann","can"],["cannister","canister"],["cannisters","canisters"],["cannnot","cannot"],["cannobt","cannot"],["cannonical","canonical"],["cannonicalize","canonicalize"],["cannont","cannot"],["cannotation","connotation"],["cannotations","connotations"],["cannott","cannot"],["canonalize","canonicalize"],["canonalized","canonicalized"],["canonalizes","canonicalizes"],["canonalizing","canonicalizing"],["canoncial","canonical"],["canonicalizations","canonicalization"],["canonival","canonical"],["canot","cannot"],["cant'","can't"],["cant't","can't"],["cant;","can't"],["cantact","contact"],["cantacted","contacted"],["cantacting","contacting"],["cantacts","contacts"],["canvase","canvas"],["caost","coast"],["capabable","capable"],["capabicity","capability"],["capabiities","capabilities"],["capabiity","capability"],["capabilies","capabilities"],["capabiliites","capabilities"],["capabilites","capabilities"],["capabilitieis","capabilities"],["capabilitiies","capabilities"],["capabilitires","capabilities"],["capabilitiy","capability"],["capabillity","capability"],["capabilties","capabilities"],["capabiltity","capability"],["capabilty","capability"],["capabitilies","capabilities"],["capablilities","capabilities"],["capablities","capabilities"],["capablity","capability"],["capaciy","capacity"],["capalize","capitalize"],["capalized","capitalized"],["capapbilities","capabilities"],["capatibilities","capabilities"],["capbability","capability"],["capbale","capable"],["capela","capella"],["caperbility","capability"],["Capetown","Cape Town"],["capibilities","capabilities"],["capible","capable"],["capitolize","capitalize"],["cappable","capable"],["captable","capable"],["captial","capital"],["captrure","capture"],["captued","captured"],["capturd","captured"],["caputre","capture"],["caputred","captured"],["caputres","captures"],["caputure","capture"],["carachter","character"],["caracter","character"],["caractere","character"],["caracteristic","characteristic"],["caracterized","characterized"],["caracters","characters"],["carbus","cardbus"],["carefuly","carefully"],["careing","caring"],["carfull","careful"],["cariage","carriage"],["caridge","carriage"],["cariier","carrier"],["carismatic","charismatic"],["Carmalite","Carmelite"],["Carnagie","Carnegie"],["Carnagie-Mellon","Carnegie-Mellon"],["Carnigie","Carnegie"],["Carnigie-Mellon","Carnegie-Mellon"],["carniverous","carnivorous"],["caronavirus","coronavirus"],["caronaviruses","coronaviruses"],["carreer","career"],["carreid","carried"],["carrers","careers"],["carret","caret"],["carriadge","carriage"],["Carribbean","Caribbean"],["Carribean","Caribbean"],["carrien","carrier"],["carrige","carriage"],["carrrier","carrier"],["carryintg","carrying"],["carryng","carrying"],["cartain","certain"],["cartdridge","cartridge"],["cartensian","Cartesian"],["Carthagian","Carthaginian"],["carthesian","cartesian"],["carthographer","cartographer"],["cartiesian","cartesian"],["cartilege","cartilage"],["cartilidge","cartilage"],["cartrige","cartridge"],["caryy","carry"],["cascace","cascade"],["case-insensative","case-insensitive"],["case-insensetive","case-insensitive"],["case-insensistive","case-insensitive"],["case-insensitiv","case-insensitive"],["case-insensitivy","case-insensitivity"],["case-insensitve","case-insensitive"],["case-insenstive","case-insensitive"],["case-insentive","case-insensitive"],["case-insentivite","case-insensitive"],["case-insesitive","case-insensitive"],["case-intensitive","case-insensitive"],["case-sensative","case-sensitive"],["case-sensetive","case-sensitive"],["case-sensistive","case-sensitive"],["case-sensitiv","case-sensitive"],["case-sensitve","case-sensitive"],["case-senstive","case-sensitive"],["case-sentive","case-sensitive"],["case-sentivite","case-sensitive"],["case-sesitive","case-sensitive"],["case-unsensitive","case-insensitive"],["caseinsensative","case-insensitive"],["caseinsensetive","case-insensitive"],["caseinsensistive","case-insensitive"],["caseinsensitiv","case-insensitive"],["caseinsensitve","case-insensitive"],["caseinsenstive","case-insensitive"],["caseinsentive","case-insensitive"],["caseinsentivite","case-insensitive"],["caseinsesitive","case-insensitive"],["caseintensitive","case-insensitive"],["caselessely","caselessly"],["casesensative","case-sensitive"],["casesensetive","casesensitive"],["casesensistive","case-sensitive"],["casesensitiv","case-sensitive"],["casesensitve","case-sensitive"],["casesenstive","case-sensitive"],["casesentive","case-sensitive"],["casesentivite","case-sensitive"],["casesesitive","case-sensitive"],["casette","cassette"],["cashe","cache"],["casion","caisson"],["caspule","capsule"],["caspules","capsules"],["cassawory","cassowary"],["cassowarry","cassowary"],["casue","cause"],["casued","caused"],["casues","causes"],["casuing","causing"],["casulaties","casualties"],["casulaty","casualty"],["cataalogue","catalogue"],["catagori","category"],["catagories","categories"],["catagorization","categorization"],["catagorizations","categorizations"],["catagorized","categorized"],["catagory","category"],["catapillar","caterpillar"],["catapillars","caterpillars"],["catapiller","caterpillar"],["catapillers","caterpillars"],["catastronphic","catastrophic"],["catastropic","catastrophic"],["catastropically","catastrophically"],["catastrphic","catastrophic"],["catche","catch"],["catched","caught"],["catchi","catch"],["catchs","catches"],["categogical","categorical"],["categogically","categorically"],["categogies","categories"],["categogy","category"],["cateogrical","categorical"],["cateogrically","categorically"],["cateogries","categories"],["cateogry","category"],["catepillar","caterpillar"],["catepillars","caterpillars"],["catergorize","categorize"],["catergorized","categorized"],["caterpilar","caterpillar"],["caterpilars","caterpillars"],["caterpiller","caterpillar"],["caterpillers","caterpillars"],["catgorical","categorical"],["catgorically","categorically"],["catgories","categories"],["catgory","category"],["cathlic","catholic"],["catholocism","catholicism"],["catloag","catalog"],["catloaged","cataloged"],["catloags","catalogs"],["catory","factory"],["catpture","capture"],["catpure","capture"],["catpured","captured"],["catpures","captures"],["catterpilar","caterpillar"],["catterpilars","caterpillars"],["catterpillar","caterpillar"],["catterpillars","caterpillars"],["cattleship","battleship"],["caucasion","caucasian"],["cauched","caught"],["caugt","caught"],["cauhgt","caught"],["cauing","causing"],["causees","causes"],["causion","caution"],["causioned","cautioned"],["causions","cautions"],["causious","cautious"],["cavaet","caveat"],["cavaets","caveats"],["ccahe","cache"],["ccale","scale"],["ccertificate","certificate"],["ccertificated","certificated"],["ccertificates","certificates"],["ccertification","certification"],["ccessible","accessible"],["cche","cache"],["cconfiguration","configuration"],["ccordinate","coordinate"],["ccordinates","coordinates"],["ccordinats","coordinates"],["ccoutant","accountant"],["ccpcheck","cppcheck"],["ccurred","occurred"],["ccustom","custom"],["ccustoms","customs"],["cdecompress","decompress"],["ceartype","cleartype"],["Ceasar","Caesar"],["ceate","create"],["ceated","created"],["ceates","creates"],["ceating","creating"],["ceation","creation"],["ceck","check"],["cecked","checked"],["cecker","checker"],["cecking","checking"],["cecks","checks"],["cedential","credential"],["cedentials","credentials"],["cehck","check"],["cehcked","checked"],["cehcker","checker"],["cehcking","checking"],["cehcks","checks"],["Celcius","Celsius"],["celles","cells"],["cellpading","cellpadding"],["cellst","cells"],["cellxs","cells"],["celsuis","celsius"],["cementary","cemetery"],["cemetarey","cemetery"],["cemetaries","cemeteries"],["cemetary","cemetery"],["cenario","scenario"],["cenarios","scenarios"],["cencter","center"],["cencus","census"],["cengter","center"],["censequence","consequence"],["centain","certain"],["cententenial","centennial"],["centerd","centered"],["centisencond","centisecond"],["centisenconds","centiseconds"],["centrifugeable","centrifugable"],["centrigrade","centigrade"],["centriod","centroid"],["centriods","centroids"],["centruies","centuries"],["centruy","century"],["centuties","centuries"],["centuty","century"],["cerain","certain"],["cerainly","certainly"],["cerainty","certainty"],["cerate","create"],["cereates","creates"],["cerimonial","ceremonial"],["cerimonies","ceremonies"],["cerimonious","ceremonious"],["cerimony","ceremony"],["ceromony","ceremony"],["certaily","certainly"],["certaincy","certainty"],["certainity","certainty"],["certaint","certain"],["certaion","certain"],["certan","certain"],["certficate","certificate"],["certficated","certificated"],["certficates","certificates"],["certfication","certification"],["certfications","certifications"],["certficiate","certificate"],["certficiated","certificated"],["certficiates","certificates"],["certficiation","certification"],["certficiations","certifications"],["certfied","certified"],["certfy","certify"],["certian","certain"],["certianly","certainly"],["certicate","certificate"],["certicated","certificated"],["certicates","certificates"],["certication","certification"],["certicicate","certificate"],["certifacte","certificate"],["certifacted","certificated"],["certifactes","certificates"],["certifaction","certification"],["certifcate","certificate"],["certifcated","certificated"],["certifcates","certificates"],["certifcation","certification"],["certifciate","certificate"],["certifciated","certificated"],["certifciates","certificates"],["certifciation","certification"],["certifiate","certificate"],["certifiated","certificated"],["certifiates","certificates"],["certifiating","certificating"],["certifiation","certification"],["certifiations","certifications"],["certificat","certificate"],["certificatd","certificated"],["certificaton","certification"],["certificats","certificates"],["certifice","certificate"],["certificed","certificated"],["certifices","certificates"],["certificion","certification"],["certificste","certificate"],["certificsted","certificated"],["certificstes","certificates"],["certificsting","certificating"],["certificstion","certification"],["certifificate","certificate"],["certifificated","certificated"],["certifificates","certificates"],["certifification","certification"],["certiticate","certificate"],["certiticated","certificated"],["certiticates","certificates"],["certitication","certification"],["cetain","certain"],["cetainly","certainly"],["cetainty","certainty"],["cetrainly","certainly"],["cetting","setting"],["Cgywin","Cygwin"],["chaarges","charges"],["chacacter","character"],["chacacters","characters"],["chache","cache"],["chached","cached"],["chacheline","cacheline"],["chaeck","check"],["chaecked","checked"],["chaecker","checker"],["chaecking","checking"],["chaecks","checks"],["chagne","change"],["chagned","changed"],["chagnes","changes"],["chahged","changed"],["chahging","changing"],["chaied","chained"],["chaing","chain"],["chalenging","challenging"],["challanage","challenge"],["challange","challenge"],["challanged","challenged"],["challanges","challenges"],["challege","challenge"],["chambre","chamber"],["chambres","chambers"],["Champange","Champagne"],["chanage","change"],["chanaged","changed"],["chanager","changer"],["chanages","changes"],["chanaging","changing"],["chanceled","canceled"],["chanceling","canceling"],["chanched","changed"],["chaneged","changed"],["chaneging","changing"],["chanel","channel"],["chanell","channel"],["chanels","channels"],["changable","changeable"],["changeble","changeable"],["changeing","changing"],["changge","change"],["changged","changed"],["changgeling","changeling"],["changges","changes"],["changlog","changelog"],["changuing","changing"],["chanined","chained"],["chaninging","changing"],["chanllenge","challenge"],["chanllenging","challenging"],["channael","channel"],["channe","channel"],["channeles","channels"],["channl","channel"],["channle","channel"],["channles","channels"],["channnel","channel"],["channnels","channels"],["chanses","chances"],["chaper","chapter"],["characaters","characters"],["characer","character"],["characers","characters"],["characeter","character"],["characeters","characters"],["characetrs","characters"],["characher","character"],["charachers","characters"],["charachter","character"],["charachters","characters"],["characstyle","charstyle"],["charactar","character"],["charactaristic","characteristic"],["charactaristics","characteristics"],["charactars","characters"],["characte","character"],["charactear","character"],["charactears","characters"],["characted","character"],["characteds","characters"],["characteer","character"],["characteers","characters"],["characteisation","characterisation"],["characteization","characterization"],["characteor","character"],["characteors","characters"],["characterclasses","character classes"],["characteres","characters"],["characterisic","characteristic"],["characterisically","characteristically"],["characterisicly","characteristically"],["characterisics","characteristics"],["characterisitic","characteristic"],["characterisitics","characteristics"],["characteristicly","characteristically"],["characteritic","characteristic"],["characteritics","characteristics"],["characteritisc","characteristic"],["characteritiscs","characteristics"],["charactersistic","characteristic"],["charactersistically","characteristically"],["charactersistics","characteristics"],["charactersitic","characteristic"],["charactersm","characters"],["characterss","characters"],["characterstic","characteristic"],["characterstically","characteristically"],["characterstics","characteristics"],["charactertistic","characteristic"],["charactertistically","characteristically"],["charactertistics","characteristics"],["charactes","characters"],["charactet","character"],["characteter","character"],["characteteristic","characteristic"],["characteteristics","characteristics"],["characteters","characters"],["charactetistic","characteristic"],["charactetistics","characteristics"],["charactetr","character"],["charactetrs","characters"],["charactets","characters"],["characther","character"],["charactiristic","characteristic"],["charactiristically","characteristically"],["charactiristics","characteristics"],["charactor","character"],["charactors","characters"],["charactristic","characteristic"],["charactristically","characteristically"],["charactristics","characteristics"],["charactrs","characters"],["characts","characters"],["characture","character"],["charakter","character"],["charakters","characters"],["chararacter","character"],["chararacters","characters"],["chararcter","character"],["chararcters","characters"],["charas","chars"],["charascter","character"],["charascters","characters"],["charasmatic","charismatic"],["charater","character"],["charaterize","characterize"],["charaterized","characterized"],["charaters","characters"],["charator","character"],["charators","characters"],["charcater","character"],["charcter","character"],["charcteristic","characteristic"],["charcteristics","characteristics"],["charcters","characters"],["charctor","character"],["charctors","characters"],["charecter","character"],["charecters","characters"],["charector","character"],["chargind","charging"],["charicter","character"],["charicters","characters"],["charictor","character"],["charictors","characters"],["chariman","chairman"],["charistics","characteristics"],["charizma","charisma"],["chartroose","chartreuse"],["chassy","chassis"],["chatacter","character"],["chatacters","characters"],["chatch","catch"],["chater","chapter"],["chawk","chalk"],["chcek","check"],["chceked","checked"],["chceking","checking"],["chceks","checks"],["chck","check"],["chckbox","checkbox"],["cheapeast","cheapest"],["cheatta","cheetah"],["chec","check"],["checbox","checkbox"],["checboxes","checkboxes"],["checg","check"],["checged","checked"],["checheckpoit","checkpoint"],["checheckpoits","checkpoints"],["cheched","checked"],["cheching","checking"],["chechk","check"],["chechs","checks"],["checkalaises","checkaliases"],["checkcsum","checksum"],["checkd","checked"],["checkes","checks"],["checket","checked"],["checkk","check"],["checkng","checking"],["checkoslovakia","czechoslovakia"],["checkox","checkbox"],["checkpoing","checkpoint"],["checkstum","checksum"],["checkstuming","checksumming"],["checkstumming","checksumming"],["checkstums","checksums"],["checksume","checksum"],["checksumed","checksummed"],["checksuming","checksumming"],["checkt","checked"],["checkum","checksum"],["checkums","checksums"],["checkuot","checkout"],["checl","check"],["checled","checked"],["checling","checking"],["checls","checks"],["cheduling","scheduling"],["cheeper","cheaper"],["cheeta","cheetah"],["cheif","chief"],["cheifs","chiefs"],["chek","check"],["chekc","check"],["chekcing","checking"],["chekd","checked"],["cheked","checked"],["chekers","checkers"],["cheking","checking"],["cheks","checks"],["cheksum","checksum"],["cheksums","checksums"],["chello","cello"],["chemcial","chemical"],["chemcially","chemically"],["chemestry","chemistry"],["chemicaly","chemically"],["chenged","changed"],["chennel","channel"],["cherch","church"],["cherchs","churches"],["cherck","check"],["chercking","checking"],["chercks","checks"],["chescksums","checksums"],["chgange","change"],["chganged","changed"],["chganges","changes"],["chganging","changing"],["chidren","children"],["childbird","childbirth"],["childen","children"],["childeren","children"],["childern","children"],["childlren","children"],["chiledren","children"],["chilren","children"],["chineese","Chinese"],["chinense","Chinese"],["chinesse","Chinese"],["chipersuite","ciphersuite"],["chipersuites","ciphersuites"],["chipertext","ciphertext"],["chipertexts","ciphertexts"],["chipet","chipset"],["chipslect","chipselect"],["chipstes","chipsets"],["chiuldren","children"],["chked","checked"],["chnage","change"],["chnaged","changed"],["chnages","changes"],["chnaging","changing"],["chnge","change"],["chnged","changed"],["chnges","changes"],["chnging","changing"],["chnnel","channel"],["choclate","chocolate"],["choicing","choosing"],["choise","choice"],["choises","choices"],["choising","choosing"],["chooose","choose"],["choos","choose"],["choosen","chosen"],["chopipng","chopping"],["choronological","chronological"],["chosed","chose"],["choseen","chosen"],["choser","chooser"],["chosing","choosing"],["chossen","chosen"],["chowsing","choosing"],["chracter","character"],["chracters","characters"],["chractor","character"],["chractors","characters"],["chrminance","chrominance"],["chromum","chromium"],["chuch","church"],["chuks","chunks"],["chunaks","chunks"],["chunc","chunk"],["chunck","chunk"],["chuncked","chunked"],["chuncking","chunking"],["chuncks","chunks"],["chuncksize","chunksize"],["chuncs","chunks"],["chuned","chunked"],["churchs","churches"],["cick","click"],["cicrle","circle"],["cicruit","circuit"],["cicruits","circuits"],["cicular","circular"],["ciculars","circulars"],["cihpher","cipher"],["cihphers","ciphers"],["cilinder","cylinder"],["cilinders","cylinders"],["cilindrical","cylindrical"],["cilyndre","cylinder"],["cilyndres","cylinders"],["cilyndrs","cylinders"],["Cincinatti","Cincinnati"],["Cincinnatti","Cincinnati"],["cinfiguration","configuration"],["cinfigurations","configurations"],["cintaner","container"],["ciontrol","control"],["ciper","cipher"],["cipers","ciphers"],["cipersuite","ciphersuite"],["cipersuites","ciphersuites"],["cipertext","ciphertext"],["cipertexts","ciphertexts"],["ciphe","cipher"],["cipherntext","ciphertext"],["ciphersuit","ciphersuite"],["ciphersuits","ciphersuites"],["ciphersute","ciphersuite"],["ciphersutes","ciphersuites"],["cipheruite","ciphersuite"],["cipheruites","ciphersuites"],["ciphes","ciphers"],["ciphr","cipher"],["ciphrs","ciphers"],["cips","chips"],["circluar","circular"],["circluarly","circularly"],["circluars","circulars"],["circomvent","circumvent"],["circomvented","circumvented"],["circomvents","circumvents"],["circual","circular"],["circuitery","circuitry"],["circulaton","circulation"],["circumferance","circumference"],["circumferencial","circumferential"],["circumsicion","circumcision"],["circumstancial","circumstantial"],["circumstansial","circumstantial"],["circumstnce","circumstance"],["circumstnces","circumstances"],["circumstncial","circumstantial"],["circumstntial","circumstantial"],["circumvernt","circumvent"],["circunference","circumference"],["circunferences","circumferences"],["circunstance","circumstance"],["circunstances","circumstances"],["circunstantial","circumstantial"],["circustances","circumstances"],["circut","circuit"],["circuts","circuits"],["ciricle","circle"],["ciricles","circles"],["ciricuit","circuit"],["ciricuits","circuits"],["ciricular","circular"],["ciricularise","circularise"],["ciricularize","circularize"],["ciriculum","curriculum"],["cirilic","Cyrillic"],["cirillic","Cyrillic"],["ciritc","critic"],["ciritcal","critical"],["ciritcality","criticality"],["ciritcals","criticals"],["ciritcs","critics"],["ciriteria","criteria"],["ciritic","critic"],["ciritical","critical"],["ciriticality","criticality"],["ciriticals","criticals"],["ciritics","critics"],["cirlce","circle"],["cirle","circle"],["cirles","circles"],["cirsumstances","circumstances"],["cirtcuit","circuit"],["cirucal","circular"],["cirucit","circuit"],["cirucits","circuits"],["ciruclar","circular"],["ciruclation","circulation"],["ciruclator","circulator"],["cirucmflex","circumflex"],["cirucular","circular"],["cirucumstance","circumstance"],["cirucumstances","circumstances"],["ciruit","circuit"],["ciruits","circuits"],["cirumflex","circumflex"],["cirumstance","circumstance"],["cirumstances","circumstances"],["civillian","civilian"],["civillians","civilians"],["cjange","change"],["cjanged","changed"],["cjanges","changes"],["cjoice","choice"],["cjoices","choices"],["ckecksum","checksum"],["claaes","classes"],["claculate","calculate"],["claculation","calculation"],["claer","clear"],["claerer","clearer"],["claerly","clearly"],["claibscale","calibscale"],["claime","claim"],["claimes","claims"],["clame","claim"],["claread","cleared"],["clared","cleared"],["clarety","clarity"],["claring","clearing"],["clasic","classic"],["clasical","classical"],["clasically","classically"],["clasification","classification"],["clasified","classified"],["clasifies","classifies"],["clasify","classify"],["clasifying","classifying"],["clasroom","classroom"],["clasrooms","classrooms"],["classess","classes"],["classesss","classes"],["classifcation","classification"],["classifed","classified"],["classifer","classifier"],["classifers","classifiers"],["classificaion","classification"],["classrom","classroom"],["classroms","classrooms"],["classs","class"],["classses","classes"],["clatified","clarified"],["claus","clause"],["clcoksource","clocksource"],["clcosed","closed"],["clea","clean"],["cleaered","cleared"],["cleaing","cleaning"],["cleancacne","cleancache"],["cleaness","cleanness"],["cleanning","cleaning"],["cleannup","cleanup"],["cleanpu","cleanup"],["cleanpus","cleanups"],["cleantup","cleanup"],["cleareance","clearance"],["cleares","clears"],["clearified","clarified"],["clearifies","clarifies"],["clearify","clarify"],["clearifying","clarifying"],["clearling","clearing"],["clearnance","clearance"],["clearnances","clearances"],["clearouput","clearoutput"],["clearted","cleared"],["cleary","clearly"],["cleaup","cleanup"],["cleaups","cleanups"],["cleck","check"],["cleean","clean"],["cleen","clean"],["cleened","cleaned"],["cleens","cleans"],["cleff","clef"],["cleint's","client's"],["cleint","client"],["cleints","clients"],["clened","cleaned"],["clener","cleaner"],["clening","cleaning"],["cler","clear"],["clese","close"],["cleses","closes"],["clevely","cleverly"],["cliboard","clipboard"],["cliboards","clipboards"],["clibpoard","clipboard"],["clibpoards","clipboards"],["cliens","clients"],["cliensite","client-side"],["clienta","client"],["clientelle","clientele"],["clik","click"],["cliks","clicks"],["climer","climber"],["climers","climbers"],["climing","climbing"],["clincial","clinical"],["clinets","clients"],["clinicaly","clinically"],["clipboad","clipboard"],["clipboads","clipboards"],["clipoard","clipboard"],["clipoards","clipboards"],["clipoing","clipping"],["cliuent","client"],["cliuents","clients"],["clloud","cloud"],["cllouded","clouded"],["clloudes","clouds"],["cllouding","clouding"],["cllouds","clouds"],["cloack","cloak"],["cloacks","cloaks"],["cloberring","clobbering"],["clocksourc","clocksource"],["clockw\xEDse","clockwise"],["clock_getttime","clock_gettime"],["cloding","closing"],["cloes","close"],["cloesd","closed"],["cloesed","closed"],["cloesing","closing"],["clonning","cloning"],["clory","glory"],["clos","close"],["closeing","closing"],["closesly","closely"],["closig","closing"],["clossed","closed"],["clossing","closing"],["clossion","collision"],["clossions","collisions"],["cloude","cloud"],["cloudes","clouds"],["cloumn","column"],["cloumns","columns"],["clousre","closure"],["clsoe","close"],["clssroom","classroom"],["clssrooms","classrooms"],["cluase","clause"],["clumn","column"],["clumsly","clumsily"],["cluser","cluster"],["clusetr","cluster"],["clustred","clustered"],["cmak","cmake"],["cmmand","command"],["cmmanded","commanded"],["cmmanding","commanding"],["cmmands","commands"],["cmobination","combination"],["cmoputer","computer"],["cmoputers","computers"],["cna","can"],["cnannel","channel"],["cnat'","can't"],["cnat","can't"],["cnfiguration","configuration"],["cnfigure","configure"],["cnfigured","configured"],["cnfigures","configures"],["cnfiguring","configuring"],["cnosole","console"],["cnosoles","consoles"],["cntain","contain"],["cntains","contains"],["cnter","center"],["co-incided","coincided"],["co-opearte","co-operate"],["co-opeartes","co-operates"],["co-ordinate","coordinate"],["co-ordinates","coordinates"],["coalace","coalesce"],["coalaced","coalesced"],["coalacence","coalescence"],["coalacing","coalescing"],["coalaesce","coalesce"],["coalaesced","coalesced"],["coalaescence","coalescence"],["coalaescing","coalescing"],["coalascece","coalescence"],["coalascence","coalescence"],["coalase","coalesce"],["coalasece","coalescence"],["coalased","coalesced"],["coalasence","coalescence"],["coalases","coalesces"],["coalasing","coalescing"],["coalcece","coalescence"],["coalcence","coalescence"],["coalesc","coalesce"],["coalescsing","coalescing"],["coalesed","coalesced"],["coalesence","coalescence"],["coalessing","coalescing"],["coallate","collate"],["coallates","collates"],["coallating","collating"],["coallece","coalesce"],["coalleced","coalesced"],["coallecence","coalescence"],["coalleces","coalesces"],["coallecing","coalescing"],["coallee","coalesce"],["coalleed","coalesced"],["coalleence","coalescence"],["coallees","coalesces"],["coalleing","coalescing"],["coallesce","coalesce"],["coallesced","coalesced"],["coallesceing","coalescing"],["coallescence","coalescence"],["coallesces","coalesces"],["coallescing","coalescing"],["coallese","coalesce"],["coallesed","coalesced"],["coallesence","coalescence"],["coalleses","coalesces"],["coallesing","coalescing"],["coallesse","coalesce"],["coallessed","coalesced"],["coallessence","coalescence"],["coallesses","coalesces"],["coallessing","coalescing"],["coallision","collision"],["coallisions","collisions"],["coalsce","coalesce"],["coalscece","coalescence"],["coalsced","coalesced"],["coalscence","coalescence"],["coalscing","coalescing"],["coalsece","coalescence"],["coalseced","coalesced"],["coalsecense","coalescence"],["coalsence","coalescence"],["coaslescing","coalescing"],["cobining","combining"],["cobvers","covers"],["coccinele","coccinelle"],["coctail","cocktail"],["cocument","document"],["cocumentation","documentation"],["cocuments","document"],["codeing","coding"],["codepoitn","codepoint"],["codesc","codecs"],["codespel","codespell"],["codesream","codestream"],["codition","condition"],["coditioned","conditioned"],["coditions","conditions"],["codo","code"],["codos","codes"],["coduct","conduct"],["coducted","conducted"],["coducter","conductor"],["coducting","conducting"],["coductor","conductor"],["coducts","conducts"],["coeffcient","coefficient"],["coeffcients","coefficients"],["coefficeint","coefficient"],["coefficeints","coefficients"],["coefficent","coefficient"],["coefficents","coefficients"],["coefficiens","coefficients"],["coefficientss","coefficients"],["coeffiecient","coefficient"],["coeffiecients","coefficients"],["coeffient","coefficient"],["coeffients","coefficients"],["coeficent","coefficient"],["coeficents","coefficients"],["coeficient","coefficient"],["coeficients","coefficients"],["coelesce","coalesce"],["coercable","coercible"],["coerceion","coercion"],["cofeee","coffee"],["cofficient","coefficient"],["cofficients","coefficients"],["cofidence","confidence"],["cofiguration","configuration"],["cofigure","configure"],["cofigured","configured"],["cofigures","configures"],["cofiguring","configuring"],["cofirm","confirm"],["cofirmation","confirmation"],["cofirmations","confirmations"],["cofirmed","confirmed"],["cofirming","confirming"],["cofirms","confirms"],["coform","conform"],["cofrim","confirm"],["cofrimation","confirmation"],["cofrimations","confirmations"],["cofrimed","confirmed"],["cofriming","confirming"],["cofrims","confirms"],["cognizent","cognizant"],["coherance","coherence"],["coherancy","coherency"],["coherant","coherent"],["coherantly","coherently"],["coice","choice"],["coincedentally","coincidentally"],["coinitailize","coinitialize"],["coinside","coincide"],["coinsided","coincided"],["coinsidence","coincidence"],["coinsident","coincident"],["coinsides","coincides"],["coinsiding","coinciding"],["cointain","contain"],["cointained","contained"],["cointaining","containing"],["cointains","contains"],["cokies","cookies"],["colaboration","collaboration"],["colaborations","collaborations"],["colateral","collateral"],["coldplg","coldplug"],["colected","collected"],["colection","collection"],["colections","collections"],["colelction","collection"],["colelctive","collective"],["colerscheme","colorscheme"],["colescing","coalescing"],["colision","collision"],["colission","collision"],["collaberative","collaborative"],["collaction","collection"],["collaobrative","collaborative"],["collaps","collapse"],["collapsable","collapsible"],["collasion","collision"],["collaspe","collapse"],["collasped","collapsed"],["collaspes","collapses"],["collaspible","collapsible"],["collasping","collapsing"],["collationg","collation"],["collborative","collaborative"],["collecing","collecting"],["collecion","collection"],["collecions","collections"],["colleciton","collection"],["collecitons","collections"],["collectin","collection"],["collecton","collection"],["collectons","collections"],["colleection","collection"],["collegue","colleague"],["collegues","colleagues"],["collektion","collection"],["colletion","collection"],["collidies","collides"],["collissions","collisions"],["collistion","collision"],["collistions","collisions"],["colllapses","collapses"],["collocalized","colocalized"],["collonade","colonnade"],["collonies","colonies"],["collony","colony"],["collorscheme","colorscheme"],["collosal","colossal"],["collpase","collapse"],["collpased","collapsed"],["collpases","collapses"],["collpasing","collapsing"],["collsion","collision"],["collsions","collisions"],["collumn","column"],["collumns","columns"],["colmn","column"],["colmns","columns"],["colmuned","columned"],["coloer","color"],["coloeration","coloration"],["coloered","colored"],["coloering","coloring"],["coloers","colors"],["coloful","colorful"],["colomn","column"],["colomns","columns"],["colon-seperated","colon-separated"],["colonizators","colonizers"],["coloringh","coloring"],["colorizoer","colorizer"],["colorpsace","colorspace"],["colorpsaces","colorspaces"],["colose","close"],["coloum","column"],["coloumn","column"],["coloumns","columns"],["coloums","columns"],["colourpsace","colourspace"],["colourpsaces","colourspaces"],["colsed","closed"],["colum","column"],["columm","column"],["colummn","column"],["colummns","columns"],["columms","columns"],["columnn","column"],["columnns","columns"],["columnss","columns"],["columnular","columnar"],["colums","columns"],["columsn","columns"],["colunns","columns"],["comammand","command"],["comamnd","command"],["comamnd-line","command-line"],["comamnded","commanded"],["comamnding","commanding"],["comamndline","commandline"],["comamnds","commands"],["comand","command"],["comand-line","command-line"],["comanded","commanded"],["comanding","commanding"],["comandline","commandline"],["comando","commando"],["comandos","commandos"],["comands","commands"],["comany","company"],["comapany","company"],["comapared","compared"],["comapatibility","compatibility"],["comapatible","compatible"],["comapletion","completion"],["comapnies","companies"],["comapny","company"],["comapre","compare"],["comapring","comparing"],["comaprison","comparison"],["comaptibele","compatible"],["comaptibelities","compatibilities"],["comaptibelity","compatibility"],["comaptible","compatible"],["comarators","comparators"],["comback","comeback"],["combained","combined"],["combanations","combinations"],["combatibility","compatibility"],["combatible","compatible"],["combiantion","combination"],["combiation","combination"],["combiations","combinations"],["combinate","combine"],["combinateion","combination"],["combinateions","combinations"],["combinatins","combinations"],["combinatio","combination"],["combinatios","combinations"],["combinaton","combination"],["combinatorical","combinatorial"],["combinbe","combined"],["combind","combined"],["combinded","combined"],["combiniation","combination"],["combiniations","combinations"],["combinine","combine"],["combintaion","combination"],["combintaions","combinations"],["combusion","combustion"],["comceptually","conceptually"],["comdemnation","condemnation"],["comect","connect"],["comected","connected"],["comecting","connecting"],["comectivity","connectivity"],["comedlib","comedilib"],["comemmorates","commemorates"],["comemoretion","commemoration"],["coment","comment"],["comented","commented"],["comenting","commenting"],["coments","comments"],["comfirm","confirm"],["comflicting","conflicting"],["comformance","conformance"],["comiled","compiled"],["comilers","compilers"],["comination","combination"],["comision","commission"],["comisioned","commissioned"],["comisioner","commissioner"],["comisioning","commissioning"],["comisions","commissions"],["comission","commission"],["comissioned","commissioned"],["comissioner","commissioner"],["comissioning","commissioning"],["comissions","commissions"],["comit","commit"],["comited","committed"],["comitee","committee"],["comiting","committing"],["comits","commits"],["comitted","committed"],["comittee","committee"],["comittees","committees"],["comitter","committer"],["comitting","committing"],["comittish","committish"],["comlain","complain"],["comlained","complained"],["comlainer","complainer"],["comlaining","complaining"],["comlains","complains"],["comlaint","complaint"],["comlaints","complaints"],["comlete","complete"],["comleted","completed"],["comletely","completely"],["comletion","completion"],["comletly","completely"],["comlex","complex"],["comlexity","complexity"],["comlpeter","completer"],["comma-separeted","comma-separated"],["commad","command"],["commadn","command"],["commadn-line","command-line"],["commadnline","commandline"],["commadns","commands"],["commads","commands"],["commandi","command"],["commandoes","commandos"],["commannd","command"],["commans","commands"],["commansd","commands"],["commect","connect"],["commected","connected"],["commecting","connecting"],["commectivity","connectivity"],["commedic","comedic"],["commemerative","commemorative"],["commemmorate","commemorate"],["commemmorating","commemorating"],["commenet","comment"],["commenetd","commented"],["commeneted","commented"],["commenstatus","commentstatus"],["commerical","commercial"],["commerically","commercially"],["commericial","commercial"],["commericially","commercially"],["commerorative","commemorative"],["comming","coming"],["comminication","communication"],["comminity","community"],["comminucating","communicating"],["comminucation","communication"],["commision","commission"],["commisioned","commissioned"],["commisioner","commissioner"],["commisioning","commissioning"],["commisions","commissions"],["commitable","committable"],["commited","committed"],["commitee","committee"],["commiter","committer"],["commiters","committers"],["commitin","committing"],["commiting","committing"],["commitish","committish"],["committ","commit"],["committe","committee"],["committi","committee"],["committis","committees"],["committment","commitment"],["committments","commitments"],["committy","committee"],["commma","comma"],["commma-separated","comma-separated"],["commmand","command"],["commmand-line","command-line"],["commmandline","commandline"],["commmands","commands"],["commmemorated","commemorated"],["commment","comment"],["commmented","commented"],["commmenting","commenting"],["commments","comments"],["commmet","comment"],["commmets","comments"],["commmit","commit"],["commmited","committed"],["commmiting","committing"],["commmits","commits"],["commmitted","committed"],["commmitter","committer"],["commmitters","committers"],["commmitting","committing"],["commmon","common"],["commmunicate","communicate"],["commmunicated","communicated"],["commmunicates","communicates"],["commmunicating","communicating"],["commmunication","communication"],["commmunity","community"],["commna","comma"],["commna-separated","comma-separated"],["commnad","command"],["commnad-line","command-line"],["commnadline","commandline"],["commnads","commands"],["commnand","command"],["commnand-line","command-line"],["commnandline","commandline"],["commnands","commands"],["commnd","command"],["commnd-line","command-line"],["commndline","commandline"],["commnds","commands"],["commnent","comment"],["commnents","comments"],["commnet","comment"],["commnetaries","commentaries"],["commnetary","commentary"],["commnetator","commentator"],["commnetators","commentators"],["commneted","commented"],["commneting","commenting"],["commnets","comments"],["commnication","communication"],["commnities","communities"],["commnity","community"],["commnt","comment"],["commnted","commented"],["commnuative","commutative"],["commnunicating","communicating"],["commnunication","communication"],["commnunity","community"],["commoditiy","commodity"],["commom","common"],["commond","command"],["commongly","commonly"],["commontly","commonly"],["commonweath","commonwealth"],["commpact","compact"],["commpaction","compaction"],["commpare","compare"],["commparisons","comparisons"],["commpatibility","compatibility"],["commpatible","compatible"],["commpessed","compressed"],["commpilation","compilation"],["commpile","compile"],["commpiled","compiled"],["commpiling","compiling"],["commplain","complain"],["commplete","complete"],["commpleted","completed"],["commpletely","completely"],["commpletes","completes"],["commpletion","completion"],["commplex","complex"],["commpliant","compliant"],["commplied","complied"],["commpn","common"],["commponent","component"],["commponents","components"],["commpound","compound"],["commpresd","compressed"],["commpresed","compressed"],["commpresion","compression"],["commpress","compress"],["commpressd","compressed"],["commpressed","compressed"],["commpression","compression"],["commpute","compute"],["commputed","computed"],["commputer","computer"],["commputes","computes"],["commputing","computing"],["commtited","committed"],["commtted","committed"],["commuication","communication"],["commuications","communications"],["commuinications","communications"],["communcated","communicated"],["communcation","communication"],["communcations","communications"],["communciation","communication"],["communiation","communication"],["communicaion","communication"],["communicatie","communication"],["communicaton","communication"],["communitcate","communicate"],["communitcated","communicated"],["communitcates","communicates"],["communitcation","communication"],["communitcations","communications"],["communites","communities"],["communiy","community"],["communiyt","community"],["communuication","communication"],["commutated","commuted"],["commutating","commuting"],["commutive","commutative"],["comnmand","command"],["comnnected","connected"],["comnparing","comparing"],["comnpletion","completion"],["comnpresion","compression"],["comnpress","compress"],["comobobox","combo-box"],["comon","common"],["comonent","component"],["comor","color"],["compability","compatibility"],["compabillity","compatibility"],["compabitiliby","compatibility"],["compabitility","compatibility"],["compagnion","companion"],["compagny","company"],["compaibility","compatibility"],["compain","complain"],["compair","compare"],["compaire","compare"],["compaired","compared"],["compairing","comparing"],["compairison","comparison"],["compairisons","comparisons"],["compairs","compares"],["compansate","compensate"],["compansated","compensated"],["compansates","compensates"],["compansating","compensating"],["compansation","compensation"],["compansations","compensations"],["comparaison","comparison"],["comparare","compare"],["comparasion","comparison"],["comparasions","comparisons"],["comparater","comparator"],["comparation","comparison"],["comparations","comparisons"],["compareable","comparable"],["compareing","comparing"],["compareison","comparison"],["compareisons","comparisons"],["comparements","compartments"],["compariable","comparable"],["comparied","compared"],["comparign","comparing"],["comparigon","comparison"],["comparigons","comparisons"],["compariing","comparing"],["comparion","comparison"],["comparions","comparisons"],["comparios","comparison"],["comparioss","comparisons"],["comparisaion","comparison"],["comparisaions","comparisons"],["comparisation","comparison"],["comparisations","comparisons"],["comparisement","comparison"],["comparisements","comparisons"],["comparisin","comparison"],["comparising","comparing"],["comparisins","comparisons"],["comparision","comparison"],["comparisions","comparisons"],["comparism","comparison"],["comparisment","comparison"],["comparisments","comparisons"],["comparisms","comparisons"],["comparisn","comparison"],["comparisns","comparisons"],["comparispon","comparison"],["comparispons","comparisons"],["comparission","comparison"],["comparissions","comparisons"],["comparisson","comparison"],["comparissons","comparisons"],["comparistion","comparison"],["comparistions","comparisons"],["compariston","comparison"],["comparistons","comparisons"],["comparition","comparison"],["comparitions","comparisons"],["comparititive","comparative"],["comparititively","comparatively"],["comparitive","comparative"],["comparitively","comparatively"],["comparitor","comparator"],["comparitors","comparators"],["comparizon","comparison"],["comparizons","comparisons"],["comparment","compartment"],["comparotor","comparator"],["comparotors","comparators"],["comparre","compare"],["comparsion","comparison"],["comparsions","comparisons"],["compatabable","compatible"],["compatabiity","compatibility"],["compatabile","compatible"],["compatabilities","compatibilities"],["compatability","compatibility"],["compatabillity","compatibility"],["compatabilty","compatibility"],["compatabily","compatibility"],["compatable","compatible"],["compatablility","compatibility"],["compatablities","compatibilities"],["compatablitiy","compatibility"],["compatablity","compatibility"],["compatably","compatibly"],["compataibility","compatibility"],["compataible","compatible"],["compataility","compatibility"],["compatatbility","compatibility"],["compatatble","compatible"],["compatatible","compatible"],["compatator","comparator"],["compatators","comparators"],["compatbile","compatible"],["compatbility","compatibility"],["compatiability","compatibility"],["compatiable","compatible"],["compatiablity","compatibility"],["compatibel","compatible"],["compatibile","compatible"],["compatibiliy","compatibility"],["compatibiltiy","compatibility"],["compatibilty","compatibility"],["compatibily","compatibility"],["compatibity","compatibility"],["compatiblilty","compatibility"],["compatiblities","compatibilities"],["compatiblity","compatibility"],["compation","compaction"],["compatitbility","compatibility"],["compativle","compatible"],["compaytibility","compatibility"],["compeitions","competitions"],["compeletely","completely"],["compelte","complete"],["compeltelyt","completely"],["compeltion","completion"],["compeltly","completely"],["compelx","complex"],["compelxes","complexes"],["compelxities","complexities"],["compelxity","complexity"],["compensantion","compensation"],["compenstate","compensate"],["compenstated","compensated"],["compenstates","compensates"],["competance","competence"],["competant","competent"],["competative","competitive"],["competetive","competitive"],["competions","completions"],["competitiion","competition"],["competive","competitive"],["competiveness","competitiveness"],["compex","complex"],["compfortable","comfortable"],["comphrehensive","comprehensive"],["compiant","compliant"],["compicated","complicated"],["compications","complications"],["compied","compiled"],["compilability","compatibility"],["compilant","compliant"],["compilaton","compilation"],["compilatons","compilations"],["compilcate","complicate"],["compilcated","complicated"],["compilcatedly","complicatedly"],["compilcates","complicates"],["compilcating","complicating"],["compilcation","complication"],["compilcations","complications"],["compileable","compilable"],["compiletime","compile time"],["compiliant","compliant"],["compiliation","compilation"],["compilier","compiler"],["compiliers","compilers"],["compitability","compatibility"],["compitable","compatible"],["compitent","competent"],["compitible","compatible"],["complaing","complaining"],["complanied","complained"],["complate","complete"],["complated","completed"],["complates","completes"],["complating","completing"],["complatly","completely"],["complatness","completeness"],["complats","completes"],["complcated","complicated"],["compleate","complete"],["compleated","completed"],["compleates","completes"],["compleating","completing"],["compleatly","completely"],["compleete","complete"],["compleeted","completed"],["compleetly","completely"],["compleetness","completeness"],["complelely","completely"],["complelte","complete"],["complementt","complement"],["compleness","completeness"],["complession","compression"],["complet","complete"],["completedthe","completed the"],["completeion","completion"],["completelly","completely"],["completelty","completely"],["completelyl","completely"],["completetion","completion"],["completetly","completely"],["completiom","completion"],["completition","completion"],["completley","completely"],["completly","completely"],["completness","completeness"],["complette","complete"],["complettly","completely"],["complety","completely"],["complext","complexity"],["compliace","compliance"],["complianse","compliance"],["compliation","compilation"],["compliations","compilations"],["complied-in","compiled-in"],["complience","compliance"],["complient","compliant"],["complile","compile"],["compliled","compiled"],["compliler","compiler"],["compliles","compiles"],["compliling","compiling"],["compling","compiling"],["complitely","completely"],["complmenet","complement"],["complted","completed"],["compluter","computer"],["compnent","component"],["compnents","components"],["compoennt","component"],["compoent","component"],["compoents","components"],["compoesd","composed"],["compoment","component"],["compoments","components"],["componant","component"],["componants","components"],["componbents","components"],["componding","compounding"],["componeent","component"],["componeents","components"],["componemt","component"],["componemts","components"],["componenet","component"],["componenets","components"],["componens","components"],["componentes","components"],["componet","component"],["componets","components"],["componnents","components"],["componoent","component"],["componoents","components"],["componsites","composites"],["compontent","component"],["compontents","components"],["composablity","composability"],["composibility","composability"],["composiblity","composability"],["composit","composite"],["compositong","compositing"],["composits","composites"],["compount","compound"],["comppatible","compatible"],["comppiler","compiler"],["comppilers","compilers"],["comppliance","compliance"],["comprable","comparable"],["compredded","compressed"],["compresed","compressed"],["compreser","compressor"],["compresers","compressors"],["compreses","compresses"],["compresible","compressible"],["compresing","compressing"],["compresion","compression"],["compresions","compressions"],["compresor","compressor"],["compresors","compressors"],["compressable","compressible"],["compresser","compressor"],["compressers","compressors"],["compresss","compress"],["compresssed","compressed"],["compresssion","compression"],["comprimise","compromise"],["compromize","compromise"],["compromized","compromised"],["compsable","composable"],["compsite","composite"],["comptabile","compatible"],["comptible","compatible"],["comptue","compute"],["compuatation","computation"],["compuation","computation"],["compulsary","compulsory"],["compulsery","compulsory"],["compund","compound"],["compunds","compounds"],["computaion","computation"],["computarized","computerized"],["computaton","computation"],["computtaion","computation"],["computtaions","computations"],["comress","compress"],["comressed","compressed"],["comresses","compresses"],["comressing","compressing"],["comression","compression"],["comrpess","compress"],["comrpessed","compressed"],["comrpesses","compresses"],["comrpessing","compressing"],["comrpession","compression"],["comstraint","constraint"],["comsume","consume"],["comsumed","consumed"],["comsumer","consumer"],["comsumers","consumers"],["comsumes","consumes"],["comsuming","consuming"],["comsumption","consumption"],["comtain","contain"],["comtained","contained"],["comtainer","container"],["comtains","contains"],["comunicate","communicate"],["comunication","communication"],["comunity","community"],["comventions","conventions"],["comverted","converted"],["conain","contain"],["conained","contained"],["conainer","container"],["conainers","containers"],["conaines","contains"],["conaining","containing"],["conains","contains"],["conaint","contain"],["conainted","contained"],["conainter","container"],["conatain","contain"],["conatainer","container"],["conatainers","containers"],["conatains","contains"],["conatin","contain"],["conatined","contained"],["conatiner","container"],["conatiners","containers"],["conatining","containing"],["conatins","contains"],["conbination","combination"],["conbinations","combinations"],["conbtrols","controls"],["concaneted","concatenated"],["concantenated","concatenated"],["concatenaded","concatenated"],["concatenaion","concatenation"],["concatened","concatenated"],["concatentaion","concatenation"],["concatentate","concatenate"],["concatentated","concatenated"],["concatentates","concatenates"],["concatentating","concatenating"],["concatentation","concatenation"],["concatentations","concatenations"],["concatented","concatenated"],["concatinate","concatenate"],["concatinated","concatenated"],["concatination","concatenation"],["concatinations","concatenations"],["concating","concatenating"],["concatonate","concatenate"],["concatonated","concatenated"],["concatonates","concatenates"],["concatonating","concatenating"],["conceed","concede"],["conceedd","conceded"],["concensors","consensus"],["concensus","consensus"],["concentate","concentrate"],["concentated","concentrated"],["concentates","concentrates"],["concentating","concentrating"],["concentation","concentration"],["concentic","concentric"],["concentraze","concentrate"],["concered","concerned"],["concerened","concerned"],["concering","concerning"],["concerntrating","concentrating"],["concicely","concisely"],["concider","consider"],["concidered","considered"],["concidering","considering"],["conciders","considers"],["concieted","conceited"],["concieve","conceive"],["concieved","conceived"],["concious","conscious"],["conciously","consciously"],["conciousness","consciousness"],["concurence","concurrence"],["concurency","concurrency"],["concurent","concurrent"],["concurently","concurrently"],["concurrect","concurrent"],["condamned","condemned"],["condem","condemn"],["condemmed","condemned"],["condfiguration","configuration"],["condfigurations","configurations"],["condfigure","configure"],["condfigured","configured"],["condfigures","configures"],["condfiguring","configuring"],["condict","conduct"],["condicted","conducted"],["condidate","candidate"],["condidates","candidates"],["condident","confident"],["condidential","confidential"],["condidional","conditional"],["condidtion","condition"],["condidtioning","conditioning"],["condidtions","conditions"],["condifurable","configurable"],["condifuration","configuration"],["condifure","configure"],["condifured","configured"],["condig","config"],["condigdialog","configdialog"],["condiiton","condition"],["condionally","conditionally"],["conditial","conditional"],["conditially","conditionally"],["conditialy","conditionally"],["conditianal","conditional"],["conditianally","conditionally"],["conditianaly","conditionally"],["conditionaly","conditionally"],["conditionn","condition"],["conditionnal","conditional"],["conditionnaly","conditionally"],["conditionned","conditioned"],["conditionsof","conditions of"],["conditoinal","conditional"],["conditon","condition"],["conditonal","conditional"],["conditons","conditions"],["condntional","conditional"],["condtiion","condition"],["condtiions","conditions"],["condtion","condition"],["condtional","conditional"],["condtionally","conditionally"],["condtionals","conditionals"],["condtioned","conditioned"],["condtions","conditions"],["condtition","condition"],["condtitional","conditional"],["condtitionals","conditionals"],["condtitions","conditions"],["conecct","connect"],["coneccted","connected"],["coneccting","connecting"],["conecction","connection"],["conecctions","connections"],["conecctivities","connectivities"],["conecctivity","connectivity"],["conecctor","connector"],["conecctors","connectors"],["coneccts","connects"],["conecept","concept"],["conecepts","concepts"],["conecjture","conjecture"],["conecjtures","conjectures"],["conecntrate","concentrate"],["conecntrated","concentrated"],["conecntrates","concentrates"],["conecpt","concept"],["conecpts","concepts"],["conect","connect"],["conected","connected"],["conecting","connecting"],["conection","connection"],["conections","connections"],["conectivities","connectivities"],["conectivity","connectivity"],["conectix","connectix"],["conector","connector"],["conectors","connectors"],["conects","connects"],["conecurrency","concurrency"],["conecutive","consecutive"],["coneect","connect"],["coneected","connected"],["coneecting","connecting"],["coneection","connection"],["coneections","connections"],["coneectivities","connectivities"],["coneectivity","connectivity"],["coneector","connector"],["coneectors","connectors"],["coneects","connects"],["conenct","connect"],["conencted","connected"],["conencting","connecting"],["conenction","connection"],["conenctions","connections"],["conenctivities","connectivities"],["conenctivity","connectivity"],["conenctor","connector"],["conenctors","connectors"],["conencts","connects"],["conenience","convenience"],["conenient","convenient"],["coneninece","convenience"],["coneninet","convenient"],["conent","content"],["conents","contents"],["conergence","convergence"],["conern","concern"],["conerning","concerning"],["conersion","conversion"],["conersions","conversions"],["conert","convert"],["conerted","converted"],["conerter","converter"],["conerters","converters"],["conerting","converting"],["conervative","conservative"],["conesencus","consensus"],["conet","connect"],["coneted","connected"],["coneting","connecting"],["conetion","connection"],["conetions","connections"],["conetivities","connectivities"],["conetivity","connectivity"],["conetnt","content"],["conetor","connector"],["conetors","connectors"],["conets","connects"],["conexant","connexant"],["conferene","conference"],["conferrencing","conferencing"],["confert","convert"],["confety","confetti"],["conffiguration","configuration"],["confgiuration","configuration"],["confgiure","configure"],["confgiured","configured"],["confguration","configuration"],["confgure","configure"],["confgured","configured"],["confict","conflict"],["conficted","conflicted"],["conficts","conflicts"],["confidance","confidence"],["confidantal","confidential"],["confidantally","confidentially"],["confidantals","confidentials"],["confidantial","confidential"],["confidantially","confidentially"],["confidental","confidential"],["confidentally","confidentially"],["confids","confides"],["confifurable","configurable"],["confifuration","configuration"],["confifure","configure"],["confifured","configured"],["configaration","configuration"],["configed","configured"],["configer","configure"],["configiration","configuration"],["configire","configure"],["configiuration","configuration"],["configration","configuration"],["configrations","configurations"],["configred","configured"],["configruation","configuration"],["configruations","configurations"],["configrued","configured"],["configuaration","configuration"],["configuarble","configurable"],["configuare","configure"],["configuared","configured"],["configuarion","configuration"],["configuarions","configurations"],["configuartion","configuration"],["configuartions","configurations"],["configuation","configuration"],["configuations","configurations"],["configue","configure"],["configued","configured"],["configuerd","configured"],["configuered","configured"],["configues","configures"],["configulate","configurate"],["configulation","configuration"],["configulations","configurations"],["configuraion","configuration"],["configuraiton","configuration"],["configuratiens","configurations"],["configuratiom","configuration"],["configurationn","configuration"],["configuratioon","configuration"],["configuratoin","configuration"],["configuratoins","configurations"],["configuraton","configuration"],["configuratons","configurations"],["configuratrions","configurations"],["configuratuion","configuration"],["configureable","configurable"],["configureing","configuring"],["configuretion","configuration"],["configurres","configures"],["configurring","configuring"],["configurses","configures"],["configurtation","configuration"],["configurting","configuring"],["configurtion","configuration"],["configurtoin","configuration"],["configury","configurable"],["configutation","configuration"],["configutations","configurations"],["configute","configure"],["configuted","configured"],["configutes","configures"],["configutration","configuration"],["confim","confirm"],["confimation","confirmation"],["confimations","confirmations"],["confimed","confirmed"],["confiming","confirming"],["confimred","confirmed"],["confims","confirms"],["confiramtion","confirmation"],["confirmacion","confirmation"],["confirmaed","confirmed"],["confirmas","confirms"],["confirmatino","confirmation"],["confirmatinon","confirmation"],["confirmd","confirmed"],["confirmedd","confirmed"],["confirmeed","confirmed"],["confirmming","confirming"],["confiug","config"],["confiugrable","configurable"],["confiugration","configuration"],["confiugrations","configurations"],["confiugre","configure"],["confiugred","configured"],["confiugres","configures"],["confiugring","configuring"],["confiugure","configure"],["conflictin","conflicting"],["conflift","conflict"],["conflit","conflict"],["confoguration","configuration"],["confort","comfort"],["confortable","comfortable"],["confrim","confirm"],["confrimation","confirmation"],["confrimations","confirmations"],["confrimed","confirmed"],["confriming","confirming"],["confrims","confirms"],["confucing","confusing"],["confucion","confusion"],["confuction","conjunction"],["confudion","confusion"],["confue","confuse"],["confued","confused"],["confues","confuses"],["confugiration","configuration"],["confugirble","configurable"],["confugire","configure"],["confugired","configured"],["confugires","configures"],["confugiring","configuring"],["confugrable","configurable"],["confugration","configuration"],["confugre","configure"],["confugred","configured"],["confugres","configures"],["confugring","configuring"],["confugurable","configurable"],["confuguration","configuration"],["confugure","configure"],["confugured","configured"],["confugures","configures"],["confuguring","configuring"],["confuigration","configuration"],["confuigrations","configurations"],["confuing","confusing"],["confunction","conjunction"],["confunder","confounder"],["confunse","confuse"],["confunsed","confused"],["confunses","confuses"],["confunsing","confusing"],["confurable","configurable"],["confuration","configuration"],["confure","configure"],["confured","configured"],["confures","configures"],["confuring","configuring"],["confurse","confuse"],["confursed","confused"],["confurses","confuses"],["confursing","confusing"],["confusting","confusing"],["confuze","confuse"],["confuzed","confused"],["confuzes","confuses"],["confuzing","confusing"],["confuzze","confuse"],["confuzzed","confused"],["confuzzes","confuses"],["confuzzing","confusing"],["congifurable","configurable"],["congifuration","configuration"],["congifure","configure"],["congifured","configured"],["congig","config"],["congigs","configs"],["congiguration","configuration"],["congigurations","configurations"],["congigure","configure"],["congnition","cognition"],["congnitive","cognitive"],["congradulations","congratulations"],["congresional","congressional"],["conider","consider"],["conifguration","configuration"],["conifiguration","configuration"],["conig","config"],["conigurable","configurable"],["conigured","configured"],["conincide","coincide"],["conincidence","coincidence"],["conincident","coincident"],["conincides","coincides"],["coninciding","coinciding"],["coninient","convenient"],["coninstallable","coinstallable"],["coninuation","continuation"],["coninue","continue"],["coninues","continues"],["coninuity","continuity"],["coninuous","continuous"],["conitinue","continue"],["conived","connived"],["conjecutre","conjecture"],["conjonction","conjunction"],["conjonctive","conjunctive"],["conjuction","conjunction"],["conjuctions","conjunctions"],["conjuncion","conjunction"],["conjuntion","conjunction"],["conjuntions","conjunctions"],["conlcude","conclude"],["conlcuded","concluded"],["conlcudes","concludes"],["conlcuding","concluding"],["conlcusion","conclusion"],["conlcusions","conclusions"],["conly","only"],["conmnection","connection"],["conmpress","compress"],["conmpression","compression"],["connaect","connect"],["conncection","connection"],["conncetion","connection"],["connction","connection"],["conncurrent","concurrent"],["connecetd","connected"],["connecion","connection"],["connecions","connections"],["conneciton","connection"],["connecitons","connections"],["connecor","connector"],["connecotr","connector"],["connecstatus","connectstatus"],["connectd","connected"],["connecte","connected"],["connectec","connected"],["connectes","connects"],["connectet","connected"],["connectibity","connectivity"],["connectino","connection"],["connectinos","connections"],["connectins","connections"],["connectiom","connection"],["connectioms","connections"],["connectiona","connection"],["connectionas","connections"],["connectiviy","connectivity"],["connectivty","connectivity"],["connecto","connect"],["connectted","connected"],["connecttion","connection"],["conneection","connection"],["conneiction","connection"],["connektors","connectors"],["connetced","connected"],["connetcion","connection"],["conneted","connected"],["Conneticut","Connecticut"],["connetion","connection"],["connetor","connector"],["connexion","connection"],["connnect","connect"],["connnected","connected"],["connnecting","connecting"],["connnection","connection"],["connnections","connections"],["connnects","connects"],["connot","cannot"],["connstrain","constrain"],["connstrained","constrained"],["connstraint","constraint"],["conntents","contents"],["conntroller","controller"],["conosuer","connoisseur"],["conotation","connotation"],["conotations","connotations"],["conotrol","control"],["conotroled","controlled"],["conotroling","controlling"],["conotrolled","controlled"],["conotrols","controls"],["conpares","compares"],["conplete","complete"],["conpleted","completed"],["conpletes","completes"],["conpleting","completing"],["conpletion","completion"],["conquerd","conquered"],["conquerer","conqueror"],["conquerers","conquerors"],["conqured","conquered"],["conrete","concrete"],["conrol","control"],["conroller","controller"],["conrrespond","correspond"],["conrrespondence","correspondence"],["conrrespondences","correspondences"],["conrrespondent","correspondent"],["conrrespondents","correspondents"],["conrresponding","corresponding"],["conrrespondingly","correspondingly"],["conrresponds","corresponds"],["conrrol","control"],["conrrupt","corrupt"],["conrruptable","corruptible"],["conrrupted","corrupted"],["conrruptible","corruptible"],["conrruption","corruption"],["conrruptions","corruptions"],["conrrupts","corrupts"],["conrtib","contrib"],["conrtibs","contribs"],["consants","constants"],["conscent","consent"],["consciencious","conscientious"],["consciouness","consciousness"],["consctruct","construct"],["consctructed","constructed"],["consctructing","constructing"],["consctruction","construction"],["consctructions","constructions"],["consctructive","constructive"],["consctructor","constructor"],["consctructors","constructors"],["consctructs","constructs"],["consdider","consider"],["consdidered","considered"],["consdiered","considered"],["consdired","considered"],["conseat","conceit"],["conseated","conceited"],["consective","consecutive"],["consectively","consecutively"],["consectutive","consecutive"],["consectuve","consecutive"],["consecuitively","consecutively"],["conseed","concede"],["conseedd","conceded"],["conseeded","conceded"],["conseeds","concedes"],["consenquently","consequently"],["consensis","consensus"],["consentrate","concentrate"],["consentrated","concentrated"],["consentrates","concentrates"],["consept","concept"],["consepts","concepts"],["consequentely","consequently"],["consequentually","consequently"],["consequeseces","consequences"],["consequetive","consecutive"],["consequtive","consecutive"],["consequtively","consecutively"],["consern","concern"],["conserned","concerned"],["conserning","concerning"],["conservativeky","conservatively"],["conservitive","conservative"],["consestently","consistently"],["consevible","conceivable"],["consiciousness","consciousness"],["consicousness","consciousness"],["considder","consider"],["considderation","consideration"],["considdered","considered"],["considdering","considering"],["considerd","considered"],["consideren","considered"],["considerion","consideration"],["considerions","considerations"],["considred","considered"],["consier","consider"],["consiers","considers"],["consifer","consider"],["consifered","considered"],["consious","conscious"],["consisant","consistent"],["consisent","consistent"],["consisently","consistently"],["consisntency","consistency"],["consistancy","consistency"],["consistant","consistent"],["consistantly","consistently"],["consisten","consistent"],["consistend","consistent"],["consistendly","consistently"],["consistendt","consistent"],["consistendtly","consistently"],["consistenly","consistently"],["consistuents","constituents"],["consit","consist"],["consitant","consistent"],["consited","consisted"],["consitency","consistency"],["consitent","consistent"],["consitently","consistently"],["consiting","consisting"],["consitional","conditional"],["consits","consists"],["consituencies","constituencies"],["consituency","constituency"],["consituent","constituent"],["consituents","constituents"],["consitute","constitute"],["consituted","constituted"],["consitutes","constitutes"],["consituting","constituting"],["consitution","constitution"],["consitutional","constitutional"],["consitutuent","constituent"],["consitutuents","constituents"],["consitutute","constitute"],["consitututed","constituted"],["consitututes","constitutes"],["consitututing","constituting"],["consntant","constant"],["consntantly","constantly"],["consntants","constants"],["consol","console"],["consolodate","consolidate"],["consolodated","consolidated"],["consonent","consonant"],["consonents","consonants"],["consorcium","consortium"],["conspiracys","conspiracies"],["conspiriator","conspirator"],["consquence","consequence"],["consquences","consequences"],["consquent","consequent"],["consquently","consequently"],["consrtuct","construct"],["consrtucted","constructed"],["consrtuctor","constructor"],["consrtuctors","constructors"],["consrtucts","constructs"],["consruction","construction"],["consructions","constructions"],["consructor","constructor"],["consructors","constructors"],["constaint","constraint"],["constainted","constrained"],["constaints","constraints"],["constallation","constellation"],["constallations","constellations"],["constan","constant"],["constanly","constantly"],["constantsm","constants"],["constarin","constrain"],["constarint","constraint"],["constarints","constraints"],["constarnation","consternation"],["constatn","constant"],["constatnt","constant"],["constatnts","constants"],["constcurts","constructs"],["constext","context"],["consting","consisting"],["constinually","continually"],["constistency","consistency"],["constists","consists"],["constitently","consistently"],["constituant","constituent"],["constituants","constituents"],["constitue","constitute"],["constitues","constitutes"],["constituion","constitution"],["constituional","constitutional"],["constitutent","constituent"],["constitutents","constituents"],["constly","costly"],["constract","construct"],["constracted","constructed"],["constractor","constructor"],["constractors","constructors"],["constrainsts","constraints"],["constrainted","constrained"],["constraintes","constraints"],["constrainting","constraining"],["constrait","constraint"],["constraits","constraints"],["constrans","constrains"],["constrant","constraint"],["constrants","constraints"],["constrast","contrast"],["constrasts","contrasts"],["constratints","constraints"],["constraucts","constructs"],["constrcuct","construct"],["constrcut","construct"],["constrcuted","constructed"],["constrcution","construction"],["constrcutor","constructor"],["constrcutors","constructors"],["constrcuts","constructs"],["constriants","constraints"],["constrint","constraint"],["constrints","constraints"],["constrollers","controllers"],["construc","construct"],["construces","constructs"],["construcing","constructing"],["construcion","construction"],["construciton","construction"],["construcor","constructor"],["construcs","constructs"],["constructcor","constructor"],["constructer","constructor"],["constructers","constructors"],["constructes","constructs"],["constructred","constructed"],["constructt","construct"],["constructted","constructed"],["constructting","constructing"],["constructtor","constructor"],["constructtors","constructors"],["constructts","constructs"],["constructued","constructed"],["constructur","constructor"],["constructure","constructor"],["constructurs","constructors"],["construktor","constructor"],["construnctor","constructor"],["construrtors","constructors"],["construst","construct"],["construsts","constructs"],["construt","construct"],["construtced","constructed"],["construter","constructor"],["construters","constructors"],["constrution","construction"],["construtor","constructor"],["construtors","constructors"],["consttruct","construct"],["consttructer","constructor"],["consttructers","constructors"],["consttruction","construction"],["consttructor","constructor"],["consttructors","constructors"],["constuct","construct"],["constucted","constructed"],["constucter","constructor"],["constucters","constructors"],["constucting","constructing"],["constuction","construction"],["constuctions","constructions"],["constuctor","constructor"],["constuctors","constructors"],["constucts","constructs"],["consturct","construct"],["consturctor","constructor"],["consuder","consider"],["consuemr","consumer"],["consulant","consultant"],["consultunt","consultant"],["consumate","consummate"],["consumated","consummated"],["consumating","consummating"],["consummed","consumed"],["consummer","consumer"],["consummers","consumers"],["consumtion","consumption"],["contacentaion","concatenation"],["contagen","contagion"],["contaienr","container"],["contaier","container"],["contails","contains"],["contaiminate","contaminate"],["contaiminated","contaminated"],["contaiminating","contaminating"],["containa","contain"],["containees","containers"],["containerr","container"],["containg","containing"],["containging","containing"],["containig","containing"],["containings","containing"],["containining","containing"],["containint","containing"],["containn","contain"],["containner","container"],["containners","containers"],["containns","contains"],["containr","container"],["containrs","containers"],["containted","contained"],["containter","container"],["containters","containers"],["containting","containing"],["containts","contains"],["containuations","continuations"],["contais","contains"],["contaisn","contains"],["contaiun","contain"],["contamporaries","contemporaries"],["contamporary","contemporary"],["contan","contain"],["contaned","contained"],["contanined","contained"],["contaning","containing"],["contanins","contains"],["contans","contains"],["contary","contrary"],["contatenated","concatenated"],["contatining","containing"],["contein","contain"],["conteined","contained"],["conteining","containing"],["conteins","contains"],["contempoary","contemporary"],["contemporaneus","contemporaneous"],["contempory","contemporary"],["conten","contain"],["contence","contents"],["contendor","contender"],["contener","container"],["conteners","containers"],["contenht","content"],["content-negatiotiation","content-negotiation"],["content-negoatiation","content-negotiation"],["content-negoation","content-negotiation"],["content-negociation","content-negotiation"],["content-negogtiation","content-negotiation"],["content-negoitation","content-negotiation"],["content-negoptionsotiation","content-negotiation"],["content-negosiation","content-negotiation"],["content-negotaiation","content-negotiation"],["content-negotaition","content-negotiation"],["content-negotatiation","content-negotiation"],["content-negotation","content-negotiation"],["content-negothiation","content-negotiation"],["content-negotication","content-negotiation"],["content-negotioation","content-negotiation"],["content-negotion","content-negotiation"],["content-negotionation","content-negotiation"],["content-negotiotation","content-negotiation"],["content-negotitaion","content-negotiation"],["content-negotitation","content-negotiation"],["content-negotition","content-negotiation"],["content-negoziation","content-negotiation"],["contentended","contended"],["contentn","content"],["contentss","contents"],["contermporaneous","contemporaneous"],["conterpart","counterpart"],["conterparts","counterparts"],["contersink","countersink"],["contex","context"],["contexta","context"],["contexual","contextual"],["contiains","contains"],["contian","contain"],["contianed","contained"],["contianer","container"],["contianers","containers"],["contianing","containing"],["contians","contains"],["contibute","contribute"],["contibuted","contributed"],["contibutes","contributes"],["contibutor","contributor"],["contigent","contingent"],["contigious","contiguous"],["contigiously","contiguously"],["contignuous","contiguous"],["contigous","contiguous"],["contiguious","contiguous"],["contiguities","continuities"],["contiguos","contiguous"],["contiguous-non","non-contiguous"],["continaing","containing"],["contination","continuation"],["contined","continued"],["continential","continental"],["continging","containing"],["contingous","contiguous"],["continguous","contiguous"],["continious","continuous"],["continiously","continuously"],["continoue","continue"],["continouos","continuous"],["continous","continuous"],["continously","continuously"],["continueing","continuing"],["continuely","continually"],["continuem","continuum"],["continuos","continuous"],["continuosly","continuously"],["continure","continue"],["continusly","continuously"],["continuting","continuing"],["contious","continuous"],["contiously","continuously"],["contiuation","continuation"],["contiue","continue"],["contiuguous","contiguous"],["contiuing","continuing"],["contniue","continue"],["contniued","continued"],["contniues","continues"],["contnt","content"],["contol","control"],["contoler","controller"],["contoller","controller"],["contollers","controllers"],["contolls","controls"],["contols","controls"],["contongency","contingency"],["contorl","control"],["contorled","controlled"],["contorls","controls"],["contoroller","controller"],["contraciction","contradiction"],["contracictions","contradictions"],["contracition","contradiction"],["contracitions","contradictions"],["contracter","contractor"],["contracters","contractors"],["contradically","contradictory"],["contradictary","contradictory"],["contrain","constrain"],["contrainers","containers"],["contraining","constraining"],["contraint","constraint"],["contrainted","constrained"],["contraints","constraints"],["contraitns","constraints"],["contraveining","contravening"],["contravercial","controversial"],["contraversy","controversy"],["contrbution","contribution"],["contribte","contribute"],["contribted","contributed"],["contribtes","contributes"],["contributer","contributor"],["contributers","contributors"],["contries","countries"],["contrinution","contribution"],["contrinutions","contributions"],["contritutions","contributions"],["contriubte","contribute"],["contriubted","contributed"],["contriubtes","contributes"],["contriubting","contributing"],["contriubtion","contribution"],["contriubtions","contributions"],["contrl","control"],["contrller","controller"],["contro","control"],["controlable","controllable"],["controled","controlled"],["controlelrs","controllers"],["controler","controller"],["controlers","controllers"],["controling","controlling"],["controll","control"],["controllerd","controlled"],["controllled","controlled"],["controlller","controller"],["controlllers","controllers"],["controllling","controlling"],["controllor","controller"],["controlls","controls"],["contronl","control"],["contronls","controls"],["controoler","controller"],["controvercial","controversial"],["controvercy","controversy"],["controveries","controversies"],["controversal","controversial"],["controversey","controversy"],["controversials","controversial"],["controvertial","controversial"],["controvery","controversy"],["contrrol","control"],["contrrols","controls"],["contrst","contrast"],["contrsted","contrasted"],["contrsting","contrasting"],["contrsts","contrasts"],["contrtoller","controller"],["contruct","construct"],["contructed","constructed"],["contructing","constructing"],["contruction","construction"],["contructions","constructions"],["contructor","constructor"],["contructors","constructors"],["contructs","constructs"],["contry","country"],["contryie","countryie"],["contsruction","construction"],["contsructor","constructor"],["contstant","constant"],["contstants","constants"],["contstraint","constraint"],["contstructing","constructing"],["contstruction","construction"],["contstructor","constructor"],["contstructors","constructors"],["contur","contour"],["contzains","contains"],["conuntry","country"],["conusmer","consumer"],["convaless","convalesce"],["convax","convex"],["convaxiity","convexity"],["convaxly","convexly"],["convaxness","convexness"],["conveinence","convenience"],["conveinences","conveniences"],["conveinent","convenient"],["conveinience","convenience"],["conveinient","convenient"],["convenant","covenant"],["conveneince","convenience"],["conveniance","convenience"],["conveniant","convenient"],["conveniantly","conveniently"],["convenince","convenience"],["conveninent","convenient"],["convense","convince"],["convential","conventional"],["conventient","convenient"],["convenvient","convenient"],["conver","convert"],["convereted","converted"],["convergance","convergence"],["converion","conversion"],["converions","conversions"],["converison","conversion"],["converitble","convertible"],["conversly","conversely"],["conversoin","conversion"],["converson","conversion"],["conversons","conversions"],["converssion","conversion"],["converst","convert"],["convertable","convertible"],["convertables","convertibles"],["convertet","converted"],["convertion","conversion"],["convertions","conversions"],["convery","convert"],["convesion","conversion"],["convesions","conversions"],["convet","convert"],["conveted","converted"],["conveter","converter"],["conveters","converters"],["conveting","converting"],["convetion","convention"],["convetions","conventions"],["convets","converts"],["conveyer","conveyor"],["conviced","convinced"],["conviencece","convenience"],["convienence","convenience"],["convienent","convenient"],["convienience","convenience"],["convienient","convenient"],["convieniently","conveniently"],["conviently","conveniently"],["conviguration","configuration"],["convigure","configure"],["convination","combination"],["convine","combine"],["convineance","convenience"],["convineances","conveniences"],["convineient","convenient"],["convinence","convenience"],["convinences","conveniences"],["convinent","convenient"],["convinently","conveniently"],["conviniance","convenience"],["conviniances","conveniences"],["convinience","convenience"],["conviniences","conveniences"],["conviniency","convenience"],["conviniencys","conveniences"],["convinient","convenient"],["conviniently","conveniently"],["convining","combining"],["convinve","convince"],["convinved","convinced"],["convinving","convincing"],["convirted","converted"],["convirting","converting"],["convised","convinced"],["convoultion","convolution"],["convoultions","convolutions"],["convovle","convolve"],["convovled","convolved"],["convovling","convolving"],["convrt","convert"],["convserion","conversion"],["conyak","cognac"],["coodinate","coordinate"],["coodinates","coordinates"],["coodrinate","coordinate"],["coodrinates","coordinates"],["cooefficient","coefficient"],["cooefficients","coefficients"],["cooger","cougar"],["cookoo","cuckoo"],["coolent","coolant"],["coolot","culotte"],["coolots","culottes"],["coomand","command"],["coommand","command"],["coomon","common"],["coonstantly","constantly"],["coonstructed","constructed"],["cooordinate","coordinate"],["cooordinates","coordinates"],["coopearte","cooperate"],["coopeartes","cooperates"],["cooporative","cooperative"],["coordanate","coordinate"],["coordanates","coordinates"],["coordenate","coordinate"],["coordenates","coordinates"],["coordiante","coordinate"],["coordiantes","coordinates"],["coordiantion","coordination"],["coordiate","coordinate"],["coordiates","coordinates"],["coordiinates","coordinates"],["coordinatess","coordinates"],["coordinats","coordinates"],["coordindate","coordinate"],["coordindates","coordinates"],["coordine","coordinate"],["coordines","coordinates"],["coording","according"],["coordingate","coordinate"],["coordingates","coordinates"],["coordingly","accordingly"],["coordiniate","coordinate"],["coordiniates","coordinates"],["coordinite","coordinate"],["coordinites","coordinates"],["coordinnate","coordinate"],["coordinnates","coordinates"],["coordintae","coordinate"],["coordintaes","coordinates"],["coordintate","coordinate"],["coordintates","coordinates"],["coordinte","coordinate"],["coordintes","coordinates"],["coorditate","coordinate"],["coordonate","coordinate"],["coordonated","coordinated"],["coordonates","coordinates"],["coorespond","correspond"],["cooresponded","corresponded"],["coorespondend","correspondent"],["coorespondent","correspondent"],["cooresponding","corresponding"],["cooresponds","corresponds"],["cooridate","coordinate"],["cooridated","coordinated"],["cooridates","coordinates"],["cooridnate","coordinate"],["cooridnated","coordinated"],["cooridnates","coordinates"],["coorinate","coordinate"],["coorinates","coordinates"],["coorination","coordination"],["cootdinate","coordinate"],["cootdinated","coordinated"],["cootdinates","coordinates"],["cootdinating","coordinating"],["cootdination","coordination"],["copeing","copying"],["copiese","copies"],["copiing","copying"],["copiler","compiler"],["coplete","complete"],["copleted","completed"],["copletely","completely"],["copletes","completes"],["copmetitors","competitors"],["copmilation","compilation"],["copmonent","component"],["copmutations","computations"],["copntroller","controller"],["coponent","component"],["copoying","copying"],["coppermines","coppermine"],["coppied","copied"],["copright","copyright"],["coprighted","copyrighted"],["coprights","copyrights"],["coproccessor","coprocessor"],["coproccessors","coprocessors"],["coprocesor","coprocessor"],["coprorate","corporate"],["coprorates","corporates"],["coproration","corporation"],["coprorations","corporations"],["coprright","copyright"],["coprrighted","copyrighted"],["coprrights","copyrights"],["copstruction","construction"],["copuright","copyright"],["copurighted","copyrighted"],["copurights","copyrights"],["copute","compute"],["coputed","computed"],["coputer","computer"],["coputes","computes"],["copver","cover"],["copyed","copied"],["copyeight","copyright"],["copyeighted","copyrighted"],["copyeights","copyrights"],["copyied","copied"],["copyrigth","copyright"],["copyrigthed","copyrighted"],["copyrigths","copyrights"],["copyritght","copyright"],["copyritghted","copyrighted"],["copyritghts","copyrights"],["copyrught","copyright"],["copyrughted","copyrighted"],["copyrughts","copyrights"],["copys","copies"],["copytight","copyright"],["copytighted","copyrighted"],["copytights","copyrights"],["copyting","copying"],["corale","chorale"],["cordinate","coordinate"],["cordinates","coordinates"],["cordoroy","corduroy"],["cordump","coredump"],["corecct","correct"],["corecctly","correctly"],["corect","correct"],["corected","corrected"],["corecting","correcting"],["corection","correction"],["corectly","correctly"],["corectness","correctness"],["corects","corrects"],["coreespond","correspond"],["coregated","corrugated"],["corelate","correlate"],["corelated","correlated"],["corelates","correlates"],["corellation","correlation"],["coreolis","Coriolis"],["corerct","correct"],["corerctly","correctly"],["corespond","correspond"],["coresponded","corresponded"],["corespondence","correspondence"],["coresponding","corresponding"],["coresponds","corresponds"],["corfirms","confirms"],["coridal","cordial"],["corispond","correspond"],["cornmitted","committed"],["corordinate","coordinate"],["corordinates","coordinates"],["corordination","coordination"],["corosbonding","corresponding"],["corosion","corrosion"],["corospond","correspond"],["corospondance","correspondence"],["corosponded","corresponded"],["corospondence","correspondence"],["corosponding","corresponding"],["corosponds","corresponds"],["corousel","carousel"],["corparate","corporate"],["corperations","corporations"],["corpration","corporation"],["corproration","corporation"],["corprorations","corporations"],["corrcect","correct"],["corrct","correct"],["corrdinate","coordinate"],["corrdinated","coordinated"],["corrdinates","coordinates"],["corrdinating","coordinating"],["corrdination","coordination"],["corrdinator","coordinator"],["corrdinators","coordinators"],["correclty","correctly"],["correcly","correctly"],["correcpond","correspond"],["correcponded","corresponded"],["correcponding","corresponding"],["correcponds","corresponds"],["correcs","corrects"],["correctably","correctable"],["correctely","correctly"],["correcters","correctors"],["correctlly","correctly"],["correctnes","correctness"],["correcton","correction"],["correctons","corrections"],["correcttness","correctness"],["correctures","correctors"],["correcty","correctly"],["correctyly","correctly"],["correcxt","correct"],["correcy","correct"],["correect","correct"],["correectly","correctly"],["correespond","correspond"],["correesponded","corresponded"],["correespondence","correspondence"],["correespondences","correspondences"],["correespondent","correspondent"],["correesponding","corresponding"],["correesponds","corresponds"],["correlasion","correlation"],["correlatd","correlated"],["correllate","correlate"],["correllation","correlation"],["correllations","correlations"],["correnspond","correspond"],["corrensponded","corresponded"],["correnspondence","correspondence"],["correnspondences","correspondences"],["correnspondent","correspondent"],["correnspondents","correspondents"],["corrensponding","corresponding"],["corrensponds","corresponds"],["correograph","choreograph"],["correponding","corresponding"],["correponds","corresponds"],["correponsing","corresponding"],["correposding","corresponding"],["correpsondence","correspondence"],["correpsonding","corresponding"],["corresond","correspond"],["corresonded","corresponded"],["corresonding","corresponding"],["corresonds","corresponds"],["correspdoning","corresponding"],["correspending","corresponding"],["correspinding","corresponding"],["correspnding","corresponding"],["correspodence","correspondence"],["correspoding","corresponding"],["correspoinding","corresponding"],["correspomd","correspond"],["correspomded","corresponded"],["correspomdence","correspondence"],["correspomdences","correspondences"],["correspomdent","correspondent"],["correspomdents","correspondents"],["correspomding","corresponding"],["correspomds","corresponds"],["correspon","correspond"],["correspondance","correspondence"],["correspondances","correspondences"],["correspondant","correspondent"],["correspondants","correspondents"],["correspondd","corresponded"],["correspondend","correspondent"],["correspondes","corresponds"],["correspondg","corresponding"],["correspondig","corresponding"],["corresponed","corresponded"],["corresponging","corresponding"],["corresponing","corresponding"],["correspons","corresponds"],["corresponsding","corresponding"],["corresponsing","corresponding"],["correspont","correspond"],["correspontence","correspondence"],["correspontences","correspondences"],["correspontend","correspondent"],["correspontent","correspondent"],["correspontents","correspondents"],["corresponting","corresponding"],["corresponts","corresponds"],["correspoond","correspond"],["corressponding","corresponding"],["corret","correct"],["correted","corrected"],["corretion","correction"],["corretly","correctly"],["corridoor","corridor"],["corridoors","corridors"],["corrispond","correspond"],["corrispondant","correspondent"],["corrispondants","correspondents"],["corrisponded","corresponded"],["corrispondence","correspondence"],["corrispondences","correspondences"],["corrisponding","corresponding"],["corrisponds","corresponds"],["corrleation","correlation"],["corrleations","correlations"],["corrolated","correlated"],["corrolates","correlates"],["corrolation","correlation"],["corrolations","correlations"],["corrrect","correct"],["corrrected","corrected"],["corrrecting","correcting"],["corrrection","correction"],["corrrections","corrections"],["corrrectly","correctly"],["corrrectness","correctness"],["corrrects","corrects"],["corrresponding","corresponding"],["corrresponds","corresponds"],["corrrupt","corrupt"],["corrrupted","corrupted"],["corrruption","corruption"],["corrseponding","corresponding"],["corrspond","correspond"],["corrsponded","corresponded"],["corrsponding","corresponding"],["corrsponds","corresponds"],["corrupeted","corrupted"],["corruptable","corruptible"],["corruptiuon","corruption"],["cors-site","cross-site"],["cors-sute","cross-site"],["corse","course"],["corsor","cursor"],["corss-compiling","cross-compiling"],["corss-site","cross-site"],["corss-sute","cross-site"],["corsshair","crosshair"],["corsshairs","crosshairs"],["corssite","cross-site"],["corsssite","cross-site"],["corsssute","cross-site"],["corssute","cross-site"],["corupt","corrupt"],["corupted","corrupted"],["coruption","corruption"],["coruptions","corruptions"],["corupts","corrupts"],["corus","chorus"],["corvering","covering"],["cosed","closed"],["cosnsrain","constrain"],["cosnsrained","constrained"],["cosntitutive","constitutive"],["cosntrain","constrain"],["cosntrained","constrained"],["cosntraining","constraining"],["cosntraint","constraint"],["cosntraints","constraints"],["cosntructed","constructed"],["cosntructor","constructor"],["cosnumer","consumer"],["cosolation","consolation"],["cosole","console"],["cosoled","consoled"],["cosoles","consoles"],["cosoling","consoling"],["costant","constant"],["costexpr","constexpr"],["costitution","constitution"],["costruct","construct"],["costructer","constructor"],["costructor","constructor"],["costumary","customary"],["costumize","customize"],["cotain","contain"],["cotained","contained"],["cotainer","container"],["cotains","contains"],["cotave","octave"],["cotaves","octaves"],["cotnain","contain"],["cotnained","contained"],["cotnainer","container"],["cotnainers","containers"],["cotnaining","containing"],["cotnains","contains"],["cotranser","cotransfer"],["cotrasferred","cotransferred"],["cotrasfers","cotransfers"],["cotrol","control"],["cotroll","control"],["cotrolled","controlled"],["cotroller","controller"],["cotrolles","controls"],["cotrolling","controlling"],["cotrolls","controls"],["cotrols","controls"],["cotten","cotton"],["coucil","council"],["coud","could"],["coudn't","couldn't"],["coudnt","couldn't"],["coul","could"],["could'nt","couldn't"],["could't","couldn't"],["couldent","couldn't"],["coulden`t","couldn't"],["couldn;t","couldn't"],["couldnt'","couldn't"],["couldnt","couldn't"],["couldnt;","couldn't"],["coulmns","columns"],["couln't","couldn't"],["couloumb","coulomb"],["coult","could"],["coummunities","communities"],["coummunity","community"],["coumpound","compound"],["coumpounds","compounds"],["counded","counted"],["counding","counting"],["coundition","condition"],["counds","counts"],["counld","could"],["counpound","compound"],["counpounds","compounds"],["countain","contain"],["countainer","container"],["countainers","containers"],["countains","contains"],["counterfit","counterfeit"],["counterfits","counterfeits"],["counterintuive","counter intuitive"],["countermeausure","countermeasure"],["countermeausures","countermeasures"],["counterpar","counterpart"],["counterpoart","counterpart"],["counterpoarts","counterparts"],["countinue","continue"],["courtesey","courtesy"],["cousing","cousin"],["couted","counted"],["couter","counter"],["coutermeasuere","countermeasure"],["coutermeasueres","countermeasures"],["coutermeasure","countermeasure"],["coutermeasures","countermeasures"],["couterpart","counterpart"],["couting","counting"],["coutner","counter"],["coutners","counters"],["couuld","could"],["couuldn't","couldn't"],["covarage","coverage"],["covarages","coverages"],["covarege","coverage"],["covection","convection"],["covention","convention"],["coventions","conventions"],["coverd","covered"],["covere","cover"],["coveres","covers"],["covergence","convergence"],["coverred","covered"],["coversion","conversion"],["coversions","conversions"],["coverting","converting"],["covnersion","conversion"],["covnert","convert"],["covnerted","converted"],["covnerter","converter"],["covnerters","converters"],["covnertible","convertible"],["covnerting","converting"],["covnertor","converter"],["covnertors","converters"],["covnerts","converts"],["covriance","covariance"],["covriate","covariate"],["covriates","covariates"],["coyp","copy"],["coypright","copyright"],["coyprighted","copyrighted"],["coyprights","copyrights"],["coyright","copyright"],["coyrighted","copyrighted"],["coyrights","copyrights"],["cpacities","capacities"],["cpacity","capacity"],["cpation","caption"],["cpcheck","cppcheck"],["cpontent","content"],["cppp","cpp"],["cpuld","could"],["craced","graced"],["craceful","graceful"],["cracefully","gracefully"],["cracefulness","gracefulness"],["craceless","graceless"],["cracing","gracing"],["crahed","crashed"],["crahes","crashes"],["crahses","crashes"],["crashaes","crashes"],["crasheed","crashed"],["crashees","crashes"],["crashess","crashes"],["crashign","crashing"],["crashs","crashes"],["crationist","creationist"],["crationists","creationists"],["creaate","create"],["creadential","credential"],["creadentialed","credentialed"],["creadentials","credentials"],["creaed","created"],["creaeted","created"],["creasoat","creosote"],["creastor","creator"],["creatation","creation"],["createa","create"],["createable","creatable"],["createdd","created"],["createing","creating"],["createive","creative"],["creatning","creating"],["creatre","create"],["creatred","created"],["creats","creates"],["credate","created"],["credetial","credential"],["credetials","credentials"],["credidential","credential"],["credidentials","credentials"],["credintial","credential"],["credintials","credentials"],["credis","credits"],["credists","credits"],["creditted","credited"],["creedence","credence"],["cresent","crescent"],["cresits","credits"],["cretae","create"],["cretaed","created"],["cretaes","creates"],["cretaing","creating"],["cretate","create"],["cretated","created"],["cretates","creates"],["cretating","creating"],["cretator","creator"],["cretators","creators"],["creted","created"],["creteria","criteria"],["crewsant","croissant"],["cricital","critical"],["cricitally","critically"],["cricitals","criticals"],["crirical","critical"],["crirically","critically"],["criricals","criticals"],["critcal","critical"],["critcally","critically"],["critcals","criticals"],["critcial","critical"],["critcially","critically"],["critcials","criticals"],["criteak","critique"],["critera","criteria"],["critereon","criterion"],["criterias","criteria"],["criteriom","criterion"],["criticial","critical"],["criticially","critically"],["criticials","criticals"],["criticists","critics"],["critiera","criteria"],["critiical","critical"],["critiically","critically"],["critiicals","criticals"],["critisising","criticising"],["critisism","criticism"],["critisisms","criticisms"],["critized","criticized"],["critizing","criticizing"],["croch","crotch"],["crockadile","crocodile"],["crockodiles","crocodiles"],["cronological","chronological"],["cronologically","chronologically"],["croppped","cropped"],["cros","cross"],["cros-site","cross-site"],["cros-sute","cross-site"],["croshet","crochet"],["crosreference","cross-reference"],["crosreferenced","cross-referenced"],["crosreferences","cross-references"],["cross-commpilation","cross-compilation"],["cross-orgin","cross-origin"],["crossgne","crossgen"],["crossin","crossing"],["crossite","cross-site"],["crossreference","cross-reference"],["crossreferenced","cross-referenced"],["crossreferences","cross-references"],["crosssite","cross-site"],["crosssute","cross-site"],["crossute","cross-site"],["crowdsigna","crowdsignal"],["crowkay","croquet"],["crowm","crown"],["crrespond","correspond"],["crsytal","crystal"],["crsytalline","crystalline"],["crsytallisation","crystallisation"],["crsytallise","crystallise"],["crsytallization","crystallization"],["crsytallize","crystallize"],["crsytallographic","crystallographic"],["crsytals","crystals"],["crtical","critical"],["crtically","critically"],["crticals","criticals"],["crticised","criticised"],["crucialy","crucially"],["crucifiction","crucifixion"],["cruncing","crunching"],["crurrent","current"],["crusies","cruises"],["crusor","cursor"],["crutial","crucial"],["crutially","crucially"],["crutialy","crucially"],["crypted","encrypted"],["cryptocraphic","cryptographic"],["cryptograpic","cryptographic"],["crystalisation","crystallisation"],["cryto","crypto"],["crytpo","crypto"],["csae","case"],["csaes","cases"],["cteate","create"],["cteateing","creating"],["cteater","creator"],["cteates","creates"],["cteating","creating"],["cteation","creation"],["cteations","creations"],["cteator","creator"],["ctificate","certificate"],["ctificated","certificated"],["ctificates","certificates"],["ctification","certification"],["cuasality","causality"],["cuasation","causation"],["cuase","cause"],["cuased","caused"],["cuases","causes"],["cuasing","causing"],["cuestion","question"],["cuestioned","questioned"],["cuestions","questions"],["cuileoga","cuileog"],["culiminating","culminating"],["cumlative","cumulative"],["cummand","command"],["cummulated","cumulated"],["cummulative","cumulative"],["cummunicate","communicate"],["cumulatative","cumulative"],["cumulattive","cumulative"],["cuncurency","concurrency"],["curch","church"],["curcuit","circuit"],["curcuits","circuits"],["curcumstance","circumstance"],["curcumstances","circumstances"],["cureful","careful"],["curefully","carefully"],["curefuly","carefully"],["curent","current"],["curentfilter","currentfilter"],["curently","currently"],["curernt","current"],["curerntly","currently"],["curev","curve"],["curevd","curved"],["curevs","curves"],["curiousities","curiosities"],["curiousity's","curiosity's"],["curiousity","curiosity"],["curnilinear","curvilinear"],["currecnies","currencies"],["currecny","currency"],["currected","corrected"],["currecting","correcting"],["curreent","current"],["curreents","currents"],["curremt","current"],["curremtly","currently"],["curremts","currents"],["curren","current"],["currenlty","currently"],["currenly","currently"],["currennt","current"],["currenntly","currently"],["currennts","currents"],["currentl","currently"],["currentlly","currently"],["currentry","currently"],["currenty","currently"],["curresponding","corresponding"],["curretly","currently"],["curretnly","currently"],["curriculem","curriculum"],["currious","curious"],["currnet","current"],["currnt","current"],["currntly","currently"],["curros","cursor"],["currrency","currency"],["currrent","current"],["currrently","currently"],["curruent","current"],["currupt","corrupt"],["curruptable","corruptible"],["currupted","corrupted"],["curruptible","corruptible"],["curruption","corruption"],["curruptions","corruptions"],["currupts","corrupts"],["currus","cirrus"],["curser","cursor"],["cursot","cursor"],["cursro","cursor"],["curvatrue","curvature"],["curvatrues","curvatures"],["curvelinear","curvilinear"],["cusstom","custom"],["cusstomer","customer"],["cusstomers","customers"],["cusstomizable","customizable"],["cusstomization","customization"],["cusstomize","customize"],["cusstomized","customized"],["cusstoms","customs"],["custoisable","customisable"],["custoisation","customisation"],["custoise","customise"],["custoised","customised"],["custoiser","customiser"],["custoisers","customisers"],["custoising","customising"],["custoizable","customizable"],["custoization","customization"],["custoize","customize"],["custoized","customized"],["custoizer","customizer"],["custoizers","customizers"],["custoizing","customizing"],["customable","customizable"],["customie","customize"],["customied","customized"],["customisaton","customisation"],["customisatons","customisations"],["customizaton","customization"],["customizatons","customizations"],["customizeble","customizable"],["customn","custom"],["customns","customs"],["customsied","customised"],["customzied","customized"],["custon","custom"],["custonary","customary"],["custoner","customer"],["custoners","customers"],["custonisable","customisable"],["custonisation","customisation"],["custonise","customise"],["custonised","customised"],["custoniser","customiser"],["custonisers","customisers"],["custonising","customising"],["custonizable","customizable"],["custonization","customization"],["custonize","customize"],["custonized","customized"],["custonizer","customizer"],["custonizers","customizers"],["custonizing","customizing"],["custons","customs"],["custormer","customer"],["custum","custom"],["custumer","customer"],["custumised","customised"],["custumized","customized"],["custums","customs"],["cutom","custom"],["cutted","cut"],["cuurently","currently"],["cuurrent","current"],["cuurrents","currents"],["cvignore","cvsignore"],["cxan","cyan"],["cycic","cyclic"],["cyclinder","cylinder"],["cyclinders","cylinders"],["cycular","circular"],["cygin","cygwin"],["cylcic","cyclic"],["cylcical","cyclical"],["cyle","cycle"],["cylic","cyclic"],["cylider","cylinder"],["cyliders","cylinders"],["cylindical","cylindrical"],["cylindre","cylinder"],["cyllinder","cylinder"],["cyllinders","cylinders"],["cylnder","cylinder"],["cylnders","cylinders"],["cylynders","cylinders"],["cymk","CMYK"],["cyphersuite","ciphersuite"],["cyphersuites","ciphersuites"],["cyphertext","ciphertext"],["cyphertexts","ciphertexts"],["cyprt","crypt"],["cyprtic","cryptic"],["cyprto","crypto"],["Cyrllic","Cyrillic"],["cyrpto","crypto"],["cyrrent","current"],["cyrrilic","Cyrillic"],["cyrstal","crystal"],["cyrstalline","crystalline"],["cyrstallisation","crystallisation"],["cyrstallise","crystallise"],["cyrstallization","crystallization"],["cyrstallize","crystallize"],["cyrstals","crystals"],["cyrto","crypto"],["cywgin","Cygwin"],["daa","data"],["dabase","database"],["daclaration","declaration"],["dacquiri","daiquiri"],["dadlock","deadlock"],["daed","dead"],["dafault","default"],["dafaults","defaults"],["dafaut","default"],["dafualt","default"],["dafualted","defaulted"],["dafualts","defaults"],["daita","data"],["dake","take"],["dalmation","Dalmatian"],["dalta","delta"],["damamge","damage"],["damamged","damaged"],["damamges","damages"],["damamging","damaging"],["damange","damage"],["damanged","damaged"],["damanges","damages"],["damanging","damaging"],["damenor","demeanor"],["damge","damage"],["dammage","damage"],["dammages","damages"],["danceing","dancing"],["dandidates","candidates"],["daplicating","duplicating"],["Dardenelles","Dardanelles"],["dasboard","dashboard"],["dasboards","dashboards"],["dasdot","dashdot"],["dashbaord","dashboard"],["dashbaords","dashboards"],["dashboad","dashboard"],["dashboads","dashboards"],["dashboar","dashboard"],["dashboars","dashboards"],["dashbord","dashboard"],["dashbords","dashboards"],["dashs","dashes"],["data-strcuture","data-structure"],["data-strcutures","data-structures"],["databaase","database"],["databaases","databases"],["databae","database"],["databaes","database"],["databaeses","databases"],["databas","database"],["databsae","database"],["databsaes","databases"],["databse","database"],["databses","databases"],["datadsir","datadir"],["dataet","dataset"],["dataets","datasets"],["datas","data"],["datastrcuture","datastructure"],["datastrcutures","datastructures"],["datastrem","datastream"],["datatbase","database"],["datatbases","databases"],["datatgram","datagram"],["datatgrams","datagrams"],["datatore","datastore"],["datatores","datastores"],["datatpe","datatype"],["datatpes","datatypes"],["datatpye","datatype"],["datatpyes","datatypes"],["datatset","dataset"],["datatsets","datasets"],["datatstructure","datastructure"],["datatstructures","datastructures"],["datattype","datatype"],["datattypes","datatypes"],["datatye","datatype"],["datatyep","datatype"],["datatyepe","datatype"],["datatyepes","datatypes"],["datatyeps","datatypes"],["datatyes","datatypes"],["datatyoe","datatype"],["datatyoes","datatypes"],["datatytpe","datatype"],["datatytpes","datatypes"],["dataum","datum"],["datbase","database"],["datbases","databases"],["datecreatedd","datecreated"],["datection","detection"],["datections","detections"],["datee","date"],["dateset","dataset"],["datesets","datasets"],["datset","dataset"],["datsets","datasets"],["daugher","daughter"],["daugther","daughter"],["daugthers","daughters"],["dbeian","Debian"],["DCHP","DHCP"],["dcok","dock"],["dcoked","docked"],["dcoker","docker"],["dcoking","docking"],["dcoks","docks"],["dcument","document"],["dcumented","documented"],["dcumenting","documenting"],["dcuments","documents"],["ddelete","delete"],["de-actived","deactivated"],["de-duplacate","de-duplicate"],["de-duplacated","de-duplicated"],["de-duplacates","de-duplicates"],["de-duplacation","de-duplication"],["de-duplacte","de-duplicate"],["de-duplacted","de-duplicated"],["de-duplactes","de-duplicates"],["de-duplaction","de-duplication"],["de-duplaicate","de-duplicate"],["de-duplaicated","de-duplicated"],["de-duplaicates","de-duplicates"],["de-duplaication","de-duplication"],["de-duplate","de-duplicate"],["de-duplated","de-duplicated"],["de-duplates","de-duplicates"],["de-duplation","de-duplication"],["de-fualt","default"],["de-fualts","defaults"],["de-registeres","de-registers"],["deacitivation","deactivation"],["deacitvated","deactivated"],["deactivatiion","deactivation"],["deactive","deactivate"],["deactiveate","deactivate"],["deactived","deactivated"],["deactivete","deactivate"],["deactiveted","deactivated"],["deactivetes","deactivates"],["deactiviate","deactivate"],["deactiviates","deactivates"],["deactiving","deactivating"],["deaemon","daemon"],["deafault","default"],["deafualt","default"],["deafualts","defaults"],["deafult","default"],["deafulted","defaulted"],["deafults","defaults"],["deail","deal"],["deailing","dealing"],["deaktivate","deactivate"],["deaktivated","deactivated"],["dealed","dealt"],["dealilng","dealing"],["dealloacte","deallocate"],["deallocaed","deallocated"],["dealocate","deallocate"],["dealte","delete"],["deamand","demand"],["deamanding","demanding"],["deamands","demands"],["deambigate","disambiguate"],["deambigates","disambiguates"],["deambigation","disambiguation"],["deambiguage","disambiguate"],["deambiguages","disambiguates"],["deambiguate","disambiguate"],["deambiguates","disambiguates"],["deambiguation","disambiguation"],["deamiguate","disambiguate"],["deamiguates","disambiguates"],["deamiguation","disambiguation"],["deamon","daemon"],["deamonisation","daemonisation"],["deamonise","daemonise"],["deamonised","daemonised"],["deamonises","daemonises"],["deamonising","daemonising"],["deamonization","daemonization"],["deamonize","daemonize"],["deamonized","daemonized"],["deamonizes","daemonizes"],["deamonizing","daemonizing"],["deamons","daemons"],["deassering","deasserting"],["deatch","detach"],["deatched","detached"],["deatches","detaches"],["deatching","detaching"],["deatil","detail"],["deatiled","detailed"],["deatiling","detailing"],["deatils","details"],["deativate","deactivate"],["deativated","deactivated"],["deativates","deactivates"],["deativation","deactivation"],["deattach","detach"],["deattached","detached"],["deattaches","detaches"],["deattaching","detaching"],["deattachment","detachment"],["deault","default"],["deaults","defaults"],["deauthenication","deauthentication"],["debain","Debian"],["debateable","debatable"],["debbuger","debugger"],["debehlper","debhelper"],["debgu","debug"],["debgug","debug"],["debguging","debugging"],["debhlper","debhelper"],["debia","Debian"],["debiab","Debian"],["debians","Debian's"],["debina","Debian"],["debloking","deblocking"],["debnia","Debian"],["debth","depth"],["debths","depths"],["debudg","debug"],["debudgged","debugged"],["debudgger","debugger"],["debudgging","debugging"],["debudgs","debugs"],["debufs","debugfs"],["debugee","debuggee"],["debuger","debugger"],["debugg","debug"],["debuggg","debug"],["debuggge","debuggee"],["debuggged","debugged"],["debugggee","debuggee"],["debuggger","debugger"],["debuggging","debugging"],["debugggs","debugs"],["debugginf","debugging"],["debuggs","debugs"],["debuging","debugging"],["decaffinated","decaffeinated"],["decalare","declare"],["decalared","declared"],["decalares","declares"],["decalaring","declaring"],["decalration","declaration"],["decalrations","declarations"],["decalratiosn","declarations"],["decapsulting","decapsulating"],["decathalon","decathlon"],["deccelerate","decelerate"],["deccelerated","decelerated"],["deccelerates","decelerates"],["deccelerating","decelerating"],["decceleration","deceleration"],["deccrement","decrement"],["deccremented","decremented"],["deccrements","decrements"],["Decemer","December"],["decend","descend"],["decendant","descendant"],["decendants","descendants"],["decendentant","descendant"],["decendentants","descendants"],["decending","descending"],["deciaml","decimal"],["deciamls","decimals"],["decices","decides"],["decidate","dedicate"],["decidated","dedicated"],["decidates","dedicates"],["decideable","decidable"],["decidely","decidedly"],["decie","decide"],["deciedd","decided"],["deciede","decide"],["decieded","decided"],["deciedes","decides"],["decieding","deciding"],["decieds","decides"],["deciemal","decimal"],["decies","decides"],["decieve","deceive"],["decieved","deceived"],["decieves","deceives"],["decieving","deceiving"],["decimials","decimals"],["decison","decision"],["decission","decision"],["declar","declare"],["declaraion","declaration"],["declaraions","declarations"],["declarated","declared"],["declaratinos","declarations"],["declaratiom","declaration"],["declaraton","declaration"],["declaratons","declarations"],["declarayion","declaration"],["declarayions","declarations"],["declard","declared"],["declarded","declared"],["declaritive","declarative"],["declaritively","declaratively"],["declarnig","declaring"],["declartated","declared"],["declartation","declaration"],["declartations","declarations"],["declartative","declarative"],["declartator","declarator"],["declartators","declarators"],["declarted","declared"],["declartion","declaration"],["declartions","declarations"],["declartiuon","declaration"],["declartiuons","declarations"],["declartiuve","declarative"],["declartive","declarative"],["declartor","declarator"],["declartors","declarators"],["declataions","declarations"],["declatation","declaration"],["declatations","declarations"],["declated","declared"],["declation","declaration"],["declations","declarations"],["declatory","declaratory"],["decleration","declaration"],["declerations","declarations"],["declration","declaration"],["decocde","decode"],["decocded","decoded"],["decocder","decoder"],["decocders","decoders"],["decocdes","decodes"],["decocding","decoding"],["decocdings","decodings"],["decodded","decoded"],["decodding","decoding"],["decodeing","decoding"],["decomissioned","decommissioned"],["decomissioning","decommissioning"],["decommissionn","decommission"],["decommissionned","decommissioned"],["decommpress","decompress"],["decomoposition","decomposition"],["decomposion","decomposition"],["decomposit","decompose"],["decomposited","decomposed"],["decompositing","decomposing"],["decompositon","decomposition"],["decompositons","decompositions"],["decomposits","decomposes"],["decompostion","decomposition"],["decompostition","decomposition"],["decompres","decompress"],["decompresed","decompressed"],["decompreser","decompressor"],["decompreses","decompresses"],["decompresing","decompressing"],["decompresion","decompression"],["decompresor","decompressor"],["decompressd","decompressed"],["decompresser","decompressor"],["decompresssion","decompression"],["decompse","decompose"],["decond","decode"],["deconde","decode"],["deconded","decoded"],["deconder","decoder"],["deconders","decoders"],["decondes","decodes"],["deconding","decoding"],["decondings","decodings"],["deconstract","deconstruct"],["deconstracted","deconstructed"],["deconstrcutor","deconstructor"],["decopose","decompose"],["decoposes","decomposes"],["decoraded","decorated"],["decoratrion","decoration"],["decorde","decode"],["decorded","decoded"],["decorder","decoder"],["decorders","decoders"],["decordes","decodes"],["decording","decoding"],["decordings","decodings"],["decorrellation","decorrelation"],["decortator","decorator"],["decortive","decorative"],["decose","decode"],["decosed","decoded"],["decoser","decoder"],["decosers","decoders"],["decoses","decodes"],["decosing","decoding"],["decosings","decodings"],["decration","decoration"],["decreace","decrease"],["decreas","decrease"],["decremenet","decrement"],["decremenetd","decremented"],["decremeneted","decremented"],["decrese","decrease"],["decress","decrees"],["decribe","describe"],["decribed","described"],["decribes","describes"],["decribing","describing"],["decriptive","descriptive"],["decriptor","descriptor"],["decriptors","descriptors"],["decrmenet","decrement"],["decrmenetd","decremented"],["decrmeneted","decremented"],["decrment","decrement"],["decrmented","decremented"],["decrmenting","decrementing"],["decrments","decrements"],["decroation","decoration"],["decrpt","decrypt"],["decrpted","decrypted"],["decrption","decryption"],["decrytion","decryption"],["decscription","description"],["decsion","decision"],["decsions","decisions"],["decsiptors","descriptors"],["decsribed","described"],["decsriptor","descriptor"],["decsriptors","descriptors"],["decstiption","description"],["decstiptions","descriptions"],["dectect","detect"],["dectected","detected"],["dectecting","detecting"],["dectection","detection"],["dectections","detections"],["dectector","detector"],["dectivate","deactivate"],["decutable","deductible"],["decutables","deductibles"],["decypher","decipher"],["decyphered","deciphered"],["ded","dead"],["dedault","default"],["dedections","detections"],["dedented","indented"],["dedfined","defined"],["dedidate","dedicate"],["dedidated","dedicated"],["dedidates","dedicates"],["dedly","deadly"],["deductable","deductible"],["deductables","deductibles"],["deduplacate","deduplicate"],["deduplacated","deduplicated"],["deduplacates","deduplicates"],["deduplacation","deduplication"],["deduplacte","deduplicate"],["deduplacted","deduplicated"],["deduplactes","deduplicates"],["deduplaction","deduplication"],["deduplaicate","deduplicate"],["deduplaicated","deduplicated"],["deduplaicates","deduplicates"],["deduplaication","deduplication"],["deduplate","deduplicate"],["deduplated","deduplicated"],["deduplates","deduplicates"],["deduplation","deduplication"],["dedupliate","deduplicate"],["dedupliated","deduplicated"],["deecorator","decorator"],["deeep","deep"],["deelte","delete"],["deendencies","dependencies"],["deendency","dependency"],["defail","detail"],["defailt","default"],["defalt","default"],["defalts","defaults"],["defalut","default"],["defargkey","defragkey"],["defatult","default"],["defaukt","default"],["defaul","default"],["defaulat","default"],["defaulats","defaults"],["defauld","default"],["defaulds","defaults"],["defaule","default"],["defaules","defaults"],["defaulf","default"],["defaulfs","defaults"],["defaulg","default"],["defaulgs","defaults"],["defaulh","default"],["defaulhs","defaults"],["defauling","defaulting"],["defaulit","default"],["defaulits","defaults"],["defaulkt","default"],["defaulkts","defaults"],["defaull","default"],["defaulls","defaults"],["defaullt","default"],["defaullts","defaults"],["defaulr","default"],["defaulrs","defaults"],["defaulrt","default"],["defaulrts","defaults"],["defaultet","defaulted"],["defaulty","default"],["defauly","default"],["defaulys","defaults"],["defaut","default"],["defautl","default"],["defautled","defaulted"],["defautling","defaulting"],["defautls","defaults"],["defautlt","default"],["defautly","default"],["defauts","defaults"],["defautt","default"],["defautted","defaulted"],["defautting","defaulting"],["defautts","defaults"],["defeault","default"],["defeaulted","defaulted"],["defeaulting","defaulting"],["defeaults","defaults"],["defecit","deficit"],["defeine","define"],["defeines","defines"],["defenate","definite"],["defenately","definitely"],["defendent","defendant"],["defendents","defendants"],["defenitely","definitely"],["defenition","definition"],["defenitions","definitions"],["defenitly","definitely"],["deferal","deferral"],["deferals","deferrals"],["deferance","deference"],["defered","deferred"],["deferencing","dereferencing"],["deferentiating","differentiating"],["defering","deferring"],["deferreal","deferral"],["deffensively","defensively"],["defferently","differently"],["deffering","differing"],["defferred","deferred"],["deffine","define"],["deffined","defined"],["deffinition","definition"],["deffinitively","definitively"],["deffirent","different"],["defiantely","defiantly"],["defice","device"],["defien","define"],["defiend","defined"],["defiened","defined"],["defin","define"],["definad","defined"],["definance","defiance"],["definate","definite"],["definately","definitely"],["defination","definition"],["definations","definitions"],["definatly","definitely"],["definding","defining"],["defineas","defines"],["defineed","defined"],["definend","defined"],["definete","definite"],["definetelly","definitely"],["definetely","definitely"],["definetly","definitely"],["definiation","definition"],["definied","defined"],["definietly","definitely"],["definifiton","definition"],["definining","defining"],["defininition","definition"],["defininitions","definitions"],["definintion","definition"],["definit","definite"],["definitian","definition"],["definitiion","definition"],["definitiions","definitions"],["definitio","definition"],["definitios","definitions"],["definitivly","definitively"],["definitly","definitely"],["definitoin","definition"],["definiton","definition"],["definitons","definitions"],["definned","defined"],["definnition","definition"],["defintian","definition"],["defintiion","definition"],["defintiions","definitions"],["defintion","definition"],["defintions","definitions"],["defintition","definition"],["defintivly","definitively"],["defition","definition"],["defitions","definitions"],["deflaut","default"],["defninition","definition"],["defninitions","definitions"],["defnitions","definitions"],["defore","before"],["defqault","default"],["defragmenation","defragmentation"],["defualt","default"],["defualtdict","defaultdict"],["defualts","defaults"],["defult","default"],["defulted","defaulted"],["defulting","defaulting"],["defults","defaults"],["degenarate","degenerate"],["degenarated","degenerated"],["degenarating","degenerating"],["degenaration","degeneration"],["degenracy","degeneracy"],["degenrate","degenerate"],["degenrated","degenerated"],["degenrates","degenerates"],["degenratet","degenerated"],["degenrating","degenerating"],["degenration","degeneration"],["degerate","degenerate"],["degeree","degree"],["degnerate","degenerate"],["degnerated","degenerated"],["degnerates","degenerates"],["degrads","degrades"],["degration","degradation"],["degredation","degradation"],["degreee","degree"],["degreeee","degree"],["degreeees","degrees"],["degreees","degrees"],["deifne","define"],["deifned","defined"],["deifnes","defines"],["deifning","defining"],["deimiter","delimiter"],["deine","define"],["deinitailse","deinitialise"],["deinitailze","deinitialize"],["deinitalized","deinitialized"],["deinstantating","deinstantiating"],["deintialize","deinitialize"],["deintialized","deinitialized"],["deintializing","deinitializing"],["deisgn","design"],["deisgned","designed"],["deisgner","designer"],["deisgners","designers"],["deisgning","designing"],["deisgns","designs"],["deivative","derivative"],["deivatives","derivatives"],["deivce","device"],["deivces","devices"],["deivices","devices"],["deklaration","declaration"],["dekstop","desktop"],["dekstops","desktops"],["dektop","desktop"],["dektops","desktops"],["delagate","delegate"],["delagates","delegates"],["delaloc","delalloc"],["delalyed","delayed"],["delapidated","dilapidated"],["delaraction","declaration"],["delaractions","declarations"],["delarations","declarations"],["delare","declare"],["delared","declared"],["delares","declares"],["delaring","declaring"],["delate","delete"],["delayis","delays"],["delcarations","declarations"],["delcare","declare"],["delcared","declared"],["delcares","declares"],["delclaration","declaration"],["delele","delete"],["delelete","delete"],["deleleted","deleted"],["deleletes","deletes"],["deleleting","deleting"],["delelte","delete"],["delemeter","delimiter"],["delemiter","delimiter"],["delerious","delirious"],["delet","delete"],["deletd","deleted"],["deleteable","deletable"],["deleteed","deleted"],["deleteing","deleting"],["deleteion","deletion"],["deleteting","deleting"],["deletiong","deletion"],["delets","deletes"],["delevopment","development"],["delevopp","develop"],["delgate","delegate"],["delgated","delegated"],["delgates","delegates"],["delgating","delegating"],["delgation","delegation"],["delgations","delegations"],["delgator","delegator"],["delgators","delegators"],["deliberatey","deliberately"],["deliberatly","deliberately"],["deliberite","deliberate"],["deliberitely","deliberately"],["delibery","delivery"],["delibrate","deliberate"],["delibrately","deliberately"],["delievering","delivering"],["delievery","delivery"],["delievred","delivered"],["delievries","deliveries"],["delievry","delivery"],["delimeted","delimited"],["delimeter","delimiter"],["delimeters","delimiters"],["delimiited","delimited"],["delimiiter","delimiter"],["delimiiters","delimiters"],["delimitiaion","delimitation"],["delimitiaions","delimitations"],["delimitiation","delimitation"],["delimitiations","delimitations"],["delimitied","delimited"],["delimitier","delimiter"],["delimitiers","delimiters"],["delimitiing","delimiting"],["delimitimg","delimiting"],["delimition","delimitation"],["delimitions","delimitations"],["delimitis","delimits"],["delimititation","delimitation"],["delimititations","delimitations"],["delimitited","delimited"],["delimititer","delimiter"],["delimititers","delimiters"],["delimititing","delimiting"],["delimitor","delimiter"],["delimitors","delimiters"],["delimitted","delimited"],["delimma","dilemma"],["delimted","delimited"],["delimters","delimiter"],["delink","unlink"],["delivared","delivered"],["delivative","derivative"],["delivatives","derivatives"],["deliverate","deliberate"],["delivermode","deliverymode"],["deliverying","delivering"],["delte","delete"],["delted","deleted"],["deltes","deletes"],["delting","deleting"],["deltion","deletion"],["delusionally","delusively"],["delvery","delivery"],["demaind","demand"],["demenor","demeanor"],["demension","dimension"],["demensional","dimensional"],["demensions","dimensions"],["demodualtor","demodulator"],["demog","demo"],["demographical","demographic"],["demolishon","demolition"],["demolision","demolition"],["demoninator","denominator"],["demoninators","denominators"],["demonstates","demonstrates"],["demonstrat","demonstrate"],["demonstrats","demonstrates"],["demorcracy","democracy"],["demostrate","demonstrate"],["demostrated","demonstrated"],["demostrates","demonstrates"],["demostrating","demonstrating"],["demostration","demonstration"],["demudulator","demodulator"],["denegrating","denigrating"],["denisty","density"],["denomitator","denominator"],["denomitators","denominators"],["densitity","density"],["densly","densely"],["denstiy","density"],["deocde","decode"],["deocded","decoded"],["deocder","decoder"],["deocders","decoders"],["deocdes","decodes"],["deocding","decoding"],["deocdings","decodings"],["deoes","does"],["deoesn't","doesn't"],["deompression","decompression"],["depandance","dependence"],["depandancies","dependencies"],["depandancy","dependency"],["depandent","dependent"],["deparment","department"],["deparmental","departmental"],["deparments","departments"],["depcrecated","deprecated"],["depden","depend"],["depdence","dependence"],["depdencente","dependence"],["depdencentes","dependences"],["depdences","dependences"],["depdencies","dependencies"],["depdency","dependency"],["depdend","depend"],["depdendancies","dependencies"],["depdendancy","dependency"],["depdendant","dependent"],["depdendants","dependents"],["depdended","depended"],["depdendence","dependence"],["depdendences","dependences"],["depdendencies","dependencies"],["depdendency","dependency"],["depdendent","dependent"],["depdendents","dependents"],["depdendet","dependent"],["depdendets","dependents"],["depdending","depending"],["depdends","depends"],["depdenence","dependence"],["depdenences","dependences"],["depdenencies","dependencies"],["depdenency","dependency"],["depdenent","dependent"],["depdenents","dependents"],["depdening","depending"],["depdenncies","dependencies"],["depdenncy","dependency"],["depdens","depends"],["depdent","dependent"],["depdents","dependents"],["depecated","deprecated"],["depedencies","dependencies"],["depedency","dependency"],["depedencys","dependencies"],["depedent","dependent"],["depeding","depending"],["depencencies","dependencies"],["depencency","dependency"],["depencendencies","dependencies"],["depencendency","dependency"],["depencendencys","dependencies"],["depencent","dependent"],["depencies","dependencies"],["depency","dependency"],["dependance","dependence"],["dependancies","dependencies"],["dependancy","dependency"],["dependancys","dependencies"],["dependand","dependent"],["dependcies","dependencies"],["dependcy","dependency"],["dependding","depending"],["dependecies","dependencies"],["dependecy","dependency"],["dependecys","dependencies"],["dependedn","dependent"],["dependees","dependencies"],["dependeing","depending"],["dependenceis","dependencies"],["dependencey","dependency"],["dependencie","dependency"],["dependencied","dependency"],["dependenciens","dependencies"],["dependencis","dependencies"],["dependencys","dependencies"],["dependendencies","dependencies"],["dependendency","dependency"],["dependendent","dependent"],["dependenies","dependencies"],["dependening","depending"],["dependeny","dependency"],["dependet","dependent"],["dependices","dependencies"],["dependicy","dependency"],["dependig","depending"],["dependncies","dependencies"],["dependncy","dependency"],["depened","depend"],["depenedecies","dependencies"],["depenedecy","dependency"],["depenedent","dependent"],["depenencies","dependencies"],["depenencis","dependencies"],["depenency","dependency"],["depenencys","dependencies"],["depenend","depend"],["depenendecies","dependencies"],["depenendecy","dependency"],["depenendence","dependence"],["depenendencies","dependencies"],["depenendency","dependency"],["depenendent","dependent"],["depenending","depending"],["depenent","dependent"],["depenently","dependently"],["depennding","depending"],["depent","depend"],["deperecate","deprecate"],["deperecated","deprecated"],["deperecates","deprecates"],["deperecating","deprecating"],["deploied","deployed"],["deploiment","deployment"],["deploiments","deployments"],["deployement","deployment"],["deploymenet","deployment"],["deploymenets","deployments"],["depndant","dependent"],["depnds","depends"],["deporarily","temporarily"],["deposint","deposing"],["depracated","deprecated"],["depreacte","deprecate"],["depreacted","deprecated"],["depreacts","deprecates"],["depreate","deprecate"],["depreated","deprecated"],["depreates","deprecates"],["depreating","deprecating"],["deprecatedf","deprecated"],["deprectaed","deprecated"],["deprectat","deprecate"],["deprectate","deprecate"],["deprectated","deprecated"],["deprectates","deprecates"],["deprectating","deprecating"],["deprectation","deprecation"],["deprectats","deprecates"],["deprected","deprecated"],["depricate","deprecate"],["depricated","deprecated"],["depricates","deprecates"],["depricating","deprecating"],["dequed","dequeued"],["dequeing","dequeuing"],["deques","dequeues"],["derageable","dirigible"],["derective","directive"],["derectory","directory"],["derefence","dereference"],["derefenced","dereferenced"],["derefencing","dereferencing"],["derefenrence","dereference"],["dereferance","dereference"],["dereferanced","dereferenced"],["dereferances","dereferences"],["dereferencable","dereferenceable"],["dereferencce","dereference"],["dereferencced","dereferenced"],["dereferencces","dereferences"],["dereferenccing","dereferencing"],["derefernce","dereference"],["derefernced","dereferenced"],["dereferncence","dereference"],["dereferncencer","dereferencer"],["dereferncencers","dereferencers"],["dereferncences","dereferences"],["dereferncer","dereferencer"],["dereferncers","dereferencers"],["derefernces","dereferences"],["dereferncing","dereferencing"],["derefernece","dereference"],["derefrencable","dereferenceable"],["derefrence","dereference"],["deregistartion","deregistration"],["deregisted","deregistered"],["deregisteres","deregisters"],["deregistrated","deregistered"],["deregistred","deregistered"],["deregiter","deregister"],["deregiters","deregisters"],["derevative","derivative"],["derevatives","derivatives"],["derferencing","dereferencing"],["derfien","define"],["derfiend","defined"],["derfine","define"],["derfined","defined"],["dergeistered","deregistered"],["dergistration","deregistration"],["deriair","derriere"],["dericed","derived"],["dericteries","directories"],["derictery","directory"],["dericteryes","directories"],["dericterys","directories"],["deriffed","derived"],["derivaties","derivatives"],["derivatio","derivation"],["derivativ","derivative"],["derivativs","derivatives"],["deriviated","derived"],["derivitive","derivative"],["derivitives","derivatives"],["derivitivs","derivatives"],["derivtive","derivative"],["derivtives","derivatives"],["dermine","determine"],["dermined","determined"],["dermines","determines"],["dermining","determining"],["derogitory","derogatory"],["derprecated","deprecated"],["derrivatives","derivatives"],["derrive","derive"],["derrived","derived"],["dertermine","determine"],["derterming","determining"],["derth","dearth"],["derviative","derivative"],["derviatives","derivatives"],["dervie","derive"],["dervied","derived"],["dervies","derives"],["dervived","derived"],["desactivate","deactivate"],["desactivated","deactivated"],["desallocate","deallocate"],["desallocated","deallocated"],["desallocates","deallocates"],["desaster","disaster"],["descallocate","deallocate"],["descallocated","deallocated"],["descchedules","deschedules"],["desccription","description"],["descencing","descending"],["descendands","descendants"],["descibe","describe"],["descibed","described"],["descibes","describes"],["descibing","describing"],["descide","decide"],["descided","decided"],["descides","decides"],["desciding","deciding"],["desciption","description"],["desciptions","descriptions"],["desciptor","descriptor"],["desciptors","descriptors"],["desciribe","describe"],["desciribed","described"],["desciribes","describes"],["desciribing","describing"],["desciription","description"],["desciriptions","descriptions"],["descirption","description"],["descirptor","descriptor"],["descision","decision"],["descisions","decisions"],["descize","disguise"],["descized","disguised"],["descktop","desktop"],["descktops","desktops"],["desconstructed","deconstructed"],["descover","discover"],["descovered","discovered"],["descovering","discovering"],["descovery","discovery"],["descrease","decrease"],["descreased","decreased"],["descreases","decreases"],["descreasing","decreasing"],["descrementing","decrementing"],["descrete","discrete"],["describ","describe"],["describbed","described"],["describibg","describing"],["describng","describing"],["describtion","description"],["describtions","descriptions"],["descrice","describe"],["descriced","described"],["descrices","describes"],["descricing","describing"],["descrie","describe"],["descriibes","describes"],["descriminant","discriminant"],["descriminate","discriminate"],["descriminated","discriminated"],["descriminates","discriminates"],["descriminating","discriminating"],["descriont","description"],["descriotor","descriptor"],["descripe","describe"],["descriped","described"],["descripes","describes"],["descriping","describing"],["descripition","description"],["descripor","descriptor"],["descripors","descriptors"],["descripter","descriptor"],["descripters","descriptors"],["descriptio","description"],["descriptiom","description"],["descriptionm","description"],["descriptior","descriptor"],["descriptiors","descriptors"],["descripto","descriptor"],["descriptoin","description"],["descriptoins","descriptions"],["descripton","description"],["descriptons","descriptions"],["descriptot","descriptor"],["descriptoy","descriptor"],["descriptuve","descriptive"],["descrition","description"],["descritpion","description"],["descritpions","descriptions"],["descritpiton","description"],["descritpitons","descriptions"],["descritpor","descriptor"],["descritpors","descriptors"],["descritpr","descriptor"],["descritpro","descriptor"],["descritpros","descriptors"],["descritprs","descriptors"],["descritption","description"],["descritptions","descriptions"],["descritptive","descriptive"],["descritptor","descriptor"],["descritptors","descriptors"],["descrption","description"],["descrptions","descriptions"],["descrptor","descriptor"],["descrptors","descriptors"],["descrtiption","description"],["descrtiptions","descriptions"],["descrutor","destructor"],["descrybe","describe"],["descrybing","describing"],["descryption","description"],["descryptions","descriptions"],["desctiption","description"],["desctiptor","descriptor"],["desctiptors","descriptors"],["desctop","desktop"],["desctructed","destructed"],["desctruction","destruction"],["desctructive","destructive"],["desctructor","destructor"],["desctructors","destructors"],["descuss","discuss"],["descvription","description"],["descvriptions","descriptions"],["deselct","deselect"],["deselctable","deselectable"],["deselctables","deselectable"],["deselcted","deselected"],["deselcting","deselecting"],["desepears","disappears"],["deserailise","deserialise"],["deserailize","deserialize"],["deserialisazion","deserialisation"],["deserializaed","deserialized"],["deserializazion","deserialization"],["deserialsiation","deserialisation"],["deserialsie","deserialise"],["deserialsied","deserialised"],["deserialsies","deserialises"],["deserialsing","deserialising"],["deserialze","deserialize"],["deserialzed","deserialized"],["deserialzes","deserializes"],["deserialziation","deserialization"],["deserialzie","deserialize"],["deserialzied","deserialized"],["deserialzies","deserializes"],["deserialzing","deserializing"],["desgin","design"],["desgin-mode","design-mode"],["desgined","designed"],["desginer","designer"],["desiar","desire"],["desicate","desiccate"],["desicion","decision"],["desicions","decisions"],["deside","decide"],["desided","decided"],["desides","decides"],["desig","design"],["desigern","designer"],["desigining","designing"],["designd","designed"],["desination","destination"],["desinations","destinations"],["desine","design"],["desing","design"],["desingable","designable"],["desinged","designed"],["desinger","designer"],["desinging","designing"],["desingn","design"],["desingned","designed"],["desingner","designer"],["desingning","designing"],["desingns","designs"],["desings","designs"],["desintaiton","destination"],["desintaitons","destinations"],["desintation","destination"],["desintations","destinations"],["desintegrated","disintegrated"],["desintegration","disintegration"],["desipite","despite"],["desireable","desirable"],["desision","decision"],["desisions","decisions"],["desitable","desirable"],["desitination","destination"],["desitinations","destinations"],["desition","decision"],["desitions","decisions"],["desitned","destined"],["deskop","desktop"],["deskops","desktops"],["desktiop","desktop"],["deskys","disguise"],["deslected","deselected"],["deslects","deselects"],["desltop","desktop"],["desltops","desktops"],["desn't","doesn't"],["desne","dense"],["desnse","dense"],["desogn","design"],["desogned","designed"],["desogner","designer"],["desogning","designing"],["desogns","designs"],["desolve","dissolve"],["desorder","disorder"],["desoriented","disoriented"],["desparately","desperately"],["despatch","dispatch"],["despict","depict"],["despiration","desperation"],["desplay","display"],["desplayed","displayed"],["desplays","displays"],["desposition","disposition"],["desrciption","description"],["desrciptions","descriptions"],["desribe","describe"],["desribed","described"],["desribes","describes"],["desribing","describing"],["desription","description"],["desriptions","descriptions"],["desriptor","descriptor"],["desriptors","descriptors"],["desrire","desire"],["desrired","desired"],["desroyer","destroyer"],["desscribe","describe"],["desscribing","describing"],["desscription","description"],["dessicate","desiccate"],["dessicated","desiccated"],["dessication","desiccation"],["dessigned","designed"],["desstructor","destructor"],["destablized","destabilized"],["destanation","destination"],["destanations","destinations"],["destiantion","destination"],["destiantions","destinations"],["destiation","destination"],["destiations","destinations"],["destinaion","destination"],["destinaions","destinations"],["destinaiton","destination"],["destinaitons","destinations"],["destinarion","destination"],["destinarions","destinations"],["destinataion","destination"],["destinataions","destinations"],["destinatin","destination"],["destinatino","destination"],["destinatinos","destinations"],["destinatins","destinations"],["destinaton","destination"],["destinatons","destinations"],["destinguish","distinguish"],["destintation","destination"],["destintations","destinations"],["destionation","destination"],["destionations","destinations"],["destop","desktop"],["destops","desktops"],["destoried","destroyed"],["destort","distort"],["destory","destroy"],["destoryed","destroyed"],["destorying","destroying"],["destorys","destroys"],["destoy","destroy"],["destoyed","destroyed"],["destrcut","destruct"],["destrcuted","destructed"],["destrcutor","destructor"],["destrcutors","destructors"],["destribute","distribute"],["destributed","distributed"],["destroi","destroy"],["destroied","destroyed"],["destroing","destroying"],["destrois","destroys"],["destroyes","destroys"],["destruciton","destruction"],["destructro","destructor"],["destructros","destructors"],["destruktor","destructor"],["destruktors","destructors"],["destrutor","destructor"],["destrutors","destructors"],["destry","destroy"],["destryed","destroyed"],["destryer","destroyer"],["destrying","destroying"],["destryiong","destroying"],["destryoed","destroyed"],["destryoing","destroying"],["destryong","destroying"],["destrys","destroys"],["destuction","destruction"],["destuctive","destructive"],["destuctor","destructor"],["destuctors","destructors"],["desturcted","destructed"],["desturtor","destructor"],["desturtors","destructors"],["desychronize","desynchronize"],["desychronized","desynchronized"],["detabase","database"],["detachs","detaches"],["detahced","detached"],["detaild","detailed"],["detailled","detailed"],["detais","details"],["detals","details"],["detatch","detach"],["detatched","detached"],["detatches","detaches"],["detatching","detaching"],["detault","default"],["detaulted","defaulted"],["detaulting","defaulting"],["detaults","defaults"],["detction","detection"],["detctions","detections"],["deteced","detected"],["detecing","detecting"],["detecion","detection"],["detecions","detections"],["detectected","detected"],["detectes","detects"],["detectetd","detected"],["detectsion","detection"],["detectsions","detections"],["detemine","determine"],["detemined","determined"],["detemines","determines"],["detemining","determining"],["deteoriated","deteriorated"],["deterant","deterrent"],["deteremine","determine"],["deteremined","determined"],["deteriate","deteriorate"],["deterimined","determined"],["deterine","determine"],["deterioriating","deteriorating"],["determaine","determine"],["determenant","determinant"],["determenistic","deterministic"],["determiens","determines"],["determimnes","determines"],["determin","determine"],["determinated","determined"],["determind","determined"],["determinded","determined"],["determinee","determine"],["determineing","determining"],["determinining","determining"],["deterministinc","deterministic"],["determinne","determine"],["determins","determines"],["determinse","determines"],["determinstic","deterministic"],["determinstically","deterministically"],["determintes","determines"],["determnine","determine"],["deternine","determine"],["detetmine","determine"],["detial","detail"],["detialed","detailed"],["detialing","detailing"],["detials","details"],["detination","destination"],["detinations","destinations"],["detremental","detrimental"],["detremining","determining"],["detrmine","determine"],["detrmined","determined"],["detrmines","determines"],["detrmining","determining"],["detroy","destroy"],["detroyed","destroyed"],["detroying","destroying"],["detroys","destroys"],["detructed","destructed"],["dettach","detach"],["dettaching","detaching"],["detur","detour"],["deturance","deterrence"],["deubug","debug"],["deubuging","debugging"],["deug","debug"],["deugging","debugging"],["devasted","devastated"],["devation","deviation"],["devce","device"],["devcent","decent"],["devcie","device"],["devcies","devices"],["develoers","developers"],["develoment","development"],["develoments","developments"],["develompent","development"],["develompental","developmental"],["develompents","developments"],["develope","develop"],["developement","development"],["developements","developments"],["developmemt","development"],["developmet","development"],["developmetns","developments"],["developmets","developments"],["developp","develop"],["developpe","develop"],["developped","developed"],["developpement","development"],["developper","developer"],["developpers","developers"],["developpment","development"],["develp","develop"],["develped","developed"],["develper","developer"],["develpers","developers"],["develping","developing"],["develpment","development"],["develpments","developments"],["develps","develops"],["devels","delves"],["deveolpment","development"],["deveopers","developers"],["deverloper","developer"],["deverlopers","developers"],["devestated","devastated"],["devestating","devastating"],["devfine","define"],["devfined","defined"],["devfines","defines"],["devic","device"],["devicde","device"],["devicdes","devices"],["device-dependend","device-dependent"],["devicec","device"],["devicecoordiinates","devicecoordinates"],["deviceremoveable","deviceremovable"],["devicesr","devices"],["devicess","devices"],["devicest","devices"],["devide","divide"],["devided","divided"],["devider","divider"],["deviders","dividers"],["devides","divides"],["deviding","dividing"],["deviece","device"],["devied","device"],["deviiate","deviate"],["deviiated","deviated"],["deviiates","deviates"],["deviiating","deviating"],["deviiation","deviation"],["deviiations","deviations"],["devined","defined"],["devired","derived"],["devirtualisaion","devirtualisation"],["devirtualisaiton","devirtualisation"],["devirtualizaion","devirtualization"],["devirtualizaiton","devirtualization"],["devirutalisation","devirtualisation"],["devirutalise","devirtualise"],["devirutalised","devirtualised"],["devirutalization","devirtualization"],["devirutalize","devirtualize"],["devirutalized","devirtualized"],["devisible","divisible"],["devision","division"],["devistating","devastating"],["devive","device"],["devleop","develop"],["devleoped","developed"],["devleoper","developer"],["devleopers","developers"],["devleoping","developing"],["devleopment","development"],["devleopper","developer"],["devleoppers","developers"],["devlop","develop"],["devloped","developed"],["devloper's","developer's"],["devloper","developer"],["devlopers","developers"],["devloping","developing"],["devlopment","development"],["devlopments","developments"],["devlopper","developer"],["devloppers","developers"],["devlops","develops"],["devolopement","development"],["devritualisation","devirtualisation"],["devritualization","devirtualization"],["devuce","device"],["dewrapping","unwrapping"],["dezert","dessert"],["dezibel","decibel"],["dezine","design"],["dezinens","denizens"],["dfine","define"],["dfined","defined"],["dfines","defines"],["dfinition","definition"],["dfinitions","definitions"],["dgetttext","dgettext"],["diable","disable"],["diabled","disabled"],["diabler","disabler"],["diablers","disablers"],["diables","disables"],["diablical","diabolical"],["diabling","disabling"],["diaciritc","diacritic"],["diaciritcs","diacritics"],["diagnistic","diagnostic"],["diagnoal","diagonal"],["diagnoals","diagonals"],["diagnol","diagonal"],["diagnosics","diagnostics"],["diagnositc","diagnostic"],["diagnotic","diagnostic"],["diagnotics","diagnostics"],["diagnxostic","diagnostic"],["diagonale","diagonal"],["diagonales","diagonals"],["diagramas","diagrams"],["diagramm","diagram"],["dialaog","dialog"],["dialate","dilate"],["dialgo","dialog"],["dialgos","dialogs"],["dialig","dialog"],["dialigs","dialogs"],["diamater","diameter"],["diamaters","diameters"],["diamon","diamond"],["diamons","diamonds"],["diamter","diameter"],["diamters","diameters"],["diangose","diagnose"],["dianostic","diagnostic"],["dianostics","diagnostics"],["diaplay","display"],["diaplays","displays"],["diappeares","disappears"],["diarea","diarrhea"],["diaresis","diaeresis"],["diasble","disable"],["diasbled","disabled"],["diasbles","disables"],["diasbling","disabling"],["diaspra","diaspora"],["diaster","disaster"],["diatance","distance"],["diatancing","distancing"],["dicard","discard"],["dicarded","discarded"],["dicarding","discarding"],["dicards","discards"],["dicates","dictates"],["dicationaries","dictionaries"],["dicationary","dictionary"],["dicergence","divergence"],["dichtomy","dichotomy"],["dicionaries","dictionaries"],["dicionary","dictionary"],["dicipline","discipline"],["dicitonaries","dictionaries"],["dicitonary","dictionary"],["dicline","decline"],["diconnected","disconnected"],["diconnection","disconnection"],["diconnects","disconnects"],["dicover","discover"],["dicovered","discovered"],["dicovering","discovering"],["dicovers","discovers"],["dicovery","discovery"],["dicrectory","directory"],["dicrete","discrete"],["dicretion","discretion"],["dicretionary","discretionary"],["dicriminate","discriminate"],["dicriminated","discriminated"],["dicriminates","discriminates"],["dicriminating","discriminating"],["dicriminator","discriminator"],["dicriminators","discriminators"],["dicsriminated","discriminated"],["dictaionaries","dictionaries"],["dictaionary","dictionary"],["dictinary","dictionary"],["dictioanries","dictionaries"],["dictioanry","dictionary"],["dictionarys","dictionaries"],["dictionay","dictionary"],["dictionnaries","dictionaries"],["dictionnary","dictionary"],["dictionries","dictionaries"],["dictionry","dictionary"],["dictoinaries","dictionaries"],["dictoinary","dictionary"],["dictonaries","dictionaries"],["dictonary","dictionary"],["dictrionaries","dictionaries"],["dictrionary","dictionary"],["dicussed","discussed"],["dicussions","discussions"],["did'nt","didn't"],["didi","did"],["didn;t","didn't"],["didnt'","didn't"],["didnt't","didn't"],["didnt","didn't"],["didnt;","didn't"],["diect","direct"],["diectly","directly"],["dielectirc","dielectric"],["dielectircs","dielectrics"],["diemsion","dimension"],["dieties","deities"],["diety","deity"],["diference","difference"],["diferences","differences"],["diferent","different"],["diferentiate","differentiate"],["diferentiated","differentiated"],["diferentiates","differentiates"],["diferentiating","differentiating"],["diferently","differently"],["diferrent","different"],["diffcult","difficult"],["diffculties","difficulties"],["diffculty","difficulty"],["diffeent","different"],["diffence","difference"],["diffenet","different"],["diffenrence","difference"],["diffenrences","differences"],["differance","difference"],["differances","differences"],["differant","different"],["differantiate","differentiate"],["differantiation","differentiation"],["differantiator","differentiator"],["differantion","differentiation"],["differate","differentiate"],["differece","difference"],["differect","different"],["differen","different"],["differencess","differences"],["differencial","differential"],["differenciate","differentiate"],["differenciated","differentiated"],["differenciates","differentiates"],["differenciating","differentiating"],["differenciation","differentiation"],["differencies","differences"],["differenct","different"],["differend","different"],["differene","difference"],["differenes","differences"],["differenly","differently"],["differens","difference"],["differense","difference"],["differentiatiations","differentiations"],["differentiaton","differentiation"],["differentl","differently"],["differernt","different"],["differes","differs"],["differetnt","different"],["differnce","difference"],["differnces","differences"],["differnciate","differentiate"],["differnec","difference"],["differnece","difference"],["differneces","differences"],["differnecs","differences"],["differnence","difference"],["differnences","differences"],["differnencing","differencing"],["differnent","different"],["differnet","different"],["differnetiate","differentiate"],["differnetiated","differentiated"],["differnetly","differently"],["differnt","different"],["differntiable","differentiable"],["differntial","differential"],["differntials","differentials"],["differntiate","differentiate"],["differntiated","differentiated"],["differntiates","differentiates"],["differntiating","differentiating"],["differntly","differently"],["differred","differed"],["differrence","difference"],["differrent","different"],["difffered","differed"],["diffferent","different"],["diffferently","differently"],["difffers","differs"],["difficault","difficult"],["difficaulties","difficulties"],["difficaulty","difficulty"],["difficulity","difficulty"],["difficutl","difficult"],["difficutly","difficulty"],["diffreences","differences"],["diffreent","different"],["diffrence","difference"],["diffrences","differences"],["diffrent","different"],["diffrential","differential"],["diffrentiate","differentiate"],["diffrentiated","differentiated"],["diffrently","differently"],["diffrerence","difference"],["diffrerences","differences"],["diffult","difficult"],["diffussion","diffusion"],["diffussive","diffusive"],["dificulties","difficulties"],["dificulty","difficulty"],["difinition","definition"],["difinitions","definitions"],["difract","diffract"],["difracted","diffracted"],["difraction","diffraction"],["difractive","diffractive"],["difussion","diffusion"],["difussive","diffusive"],["digesty","digest"],["diggit","digit"],["diggital","digital"],["diggits","digits"],["digial","digital"],["digist","digits"],["digitalise","digitize"],["digitalising","digitizing"],["digitalize","digitize"],["digitalizing","digitizing"],["digitial","digital"],["digitis","digits"],["dignostics","diagnostics"],["dilema","dilemma"],["dilemas","dilemmas"],["dilineate","delineate"],["dillema","dilemma"],["dillemas","dilemmas"],["dilligence","diligence"],["dilligent","diligent"],["dilligently","diligently"],["dillimport","dllimport"],["dimansion","dimension"],["dimansional","dimensional"],["dimansions","dimensions"],["dimemsions","dimensions"],["dimenional","dimensional"],["dimenionalities","dimensionalities"],["dimenionality","dimensionality"],["dimenions","dimensions"],["dimenionsal","dimensional"],["dimenionsalities","dimensionalities"],["dimenionsality","dimensionality"],["dimenison","dimension"],["dimensinal","dimensional"],["dimensinoal","dimensional"],["dimensinos","dimensions"],["dimensionaility","dimensionality"],["dimensiones","dimensions"],["dimensonal","dimensional"],["dimenstion","dimension"],["dimenstions","dimensions"],["dimention","dimension"],["dimentional","dimensional"],["dimentionnal","dimensional"],["dimentionnals","dimensional"],["dimentions","dimensions"],["dimesions","dimensions"],["dimesnion","dimension"],["dimesnional","dimensional"],["dimesnions","dimensions"],["diminsh","diminish"],["diminshed","diminished"],["diminuitive","diminutive"],["dimissed","dismissed"],["dimmension","dimension"],["dimmensioned","dimensioned"],["dimmensioning","dimensioning"],["dimmensions","dimensions"],["dimnension","dimension"],["dimnention","dimension"],["dimunitive","diminutive"],["dinamic","dynamic"],["dinamically","dynamically"],["dinamicaly","dynamically"],["dinamiclly","dynamically"],["dinamicly","dynamically"],["dinmaic","dynamic"],["dinteractively","interactively"],["diong","doing"],["diosese","diocese"],["diphtong","diphthong"],["diphtongs","diphthongs"],["diplacement","displacement"],["diplay","display"],["diplayed","displayed"],["diplaying","displaying"],["diplays","displays"],["diplomancy","diplomacy"],["dipthong","diphthong"],["dipthongs","diphthongs"],["dircet","direct"],["dircetories","directories"],["dircetory","directory"],["dirctly","directly"],["dirctories","directories"],["dirctory","directory"],["direccion","direction"],["direcctly","directly"],["direcctory","directory"],["direcctorys","directories"],["direcctries","directories"],["direcdories","directories"],["direcdory","directory"],["direcdorys","directories"],["direcion","direction"],["direcions","directions"],["direciton","direction"],["direcitonal","directional"],["direcitons","directions"],["direclty","directly"],["direcly","directly"],["direcories","directories"],["direcory","directory"],["direcotories","directories"],["direcotory","directory"],["direcotries","directories"],["direcotry","directory"],["direcoty","directory"],["directd","directed"],["directely","directly"],["directes","directs"],["directgories","directories"],["directgory","directory"],["directiories","directories"],["directiory","directory"],["directoies","directories"],["directon","direction"],["directoories","directories"],["directoory","directory"],["directores","directories"],["directoris","directories"],["directort","directory"],["directorty","directory"],["directorys","directories"],["directoty","directory"],["directove","directive"],["directoves","directives"],["directoy","directory"],["directpries","directories"],["directpry","directory"],["directries","directories"],["directrive","directive"],["directrives","directives"],["directrly","directly"],["directroies","directories"],["directrories","directories"],["directrory","directory"],["directroy","directory"],["directry","directory"],["directsion","direction"],["directsions","directions"],["directtories","directories"],["directtory","directory"],["directy","directly"],["direectly","directly"],["diregard","disregard"],["direktly","directly"],["direrctor","director"],["direrctories","directories"],["direrctors","directors"],["direrctory","directory"],["diretive","directive"],["diretly","directly"],["diretories","directories"],["diretory","directory"],["direvctory","directory"],["dirived","derived"],["dirrectly","directly"],["dirtectory","directory"],["dirtyed","dirtied"],["dirtyness","dirtiness"],["dirver","driver"],["disabe","disable"],["disabeling","disabling"],["disabels","disables"],["disabes","disables"],["disabilitiles","disabilities"],["disabilitily","disability"],["disabiltities","disabilities"],["disabiltitiy","disability"],["disabing","disabling"],["disabl","disable"],["disablle","disable"],["disadvantadge","disadvantage"],["disagreeed","disagreed"],["disagress","disagrees"],["disalb","disable"],["disalbe","disable"],["disalbed","disabled"],["disalbes","disables"],["disale","disable"],["disaled","disabled"],["disalow","disallow"],["disambigouate","disambiguate"],["disambiguaiton","disambiguation"],["disambiguiation","disambiguation"],["disapear","disappear"],["disapeard","disappeared"],["disapeared","disappeared"],["disapearing","disappearing"],["disapears","disappears"],["disapline","discipline"],["disapoint","disappoint"],["disapointed","disappointed"],["disapointing","disappointing"],["disappared","disappeared"],["disappearaing","disappearing"],["disappeard","disappeared"],["disappearred","disappeared"],["disapper","disappear"],["disapperar","disappear"],["disapperarance","disappearance"],["disapperared","disappeared"],["disapperars","disappears"],["disappered","disappeared"],["disappering","disappearing"],["disappers","disappears"],["disapporval","disapproval"],["disapporve","disapprove"],["disapporved","disapproved"],["disapporves","disapproves"],["disapporving","disapproving"],["disapprouval","disapproval"],["disapprouve","disapprove"],["disapprouved","disapproved"],["disapprouves","disapproves"],["disapprouving","disapproving"],["disaproval","disapproval"],["disard","discard"],["disariable","desirable"],["disassebled","disassembled"],["disassocate","disassociate"],["disassocation","disassociation"],["disasssembler","disassembler"],["disasterous","disastrous"],["disatisfaction","dissatisfaction"],["disatisfied","dissatisfied"],["disatrous","disastrous"],["disbale","disable"],["disbaled","disabled"],["disbales","disables"],["disbaling","disabling"],["disble","disable"],["disbled","disabled"],["discared","discarded"],["discareded","discarded"],["discarge","discharge"],["discconecct","disconnect"],["discconeccted","disconnected"],["discconeccting","disconnecting"],["discconecction","disconnection"],["discconecctions","disconnections"],["discconeccts","disconnects"],["discconect","disconnect"],["discconected","disconnected"],["discconecting","disconnecting"],["discconection","disconnection"],["discconections","disconnections"],["discconects","disconnects"],["discconeect","disconnect"],["discconeected","disconnected"],["discconeecting","disconnecting"],["discconeection","disconnection"],["discconeections","disconnections"],["discconeects","disconnects"],["discconenct","disconnect"],["discconencted","disconnected"],["discconencting","disconnecting"],["discconenction","disconnection"],["discconenctions","disconnections"],["discconencts","disconnects"],["discconet","disconnect"],["discconeted","disconnected"],["discconeting","disconnecting"],["discconetion","disconnection"],["discconetions","disconnections"],["discconets","disconnects"],["disccuss","discuss"],["discernable","discernible"],["dischare","discharge"],["discimenation","dissemination"],["disciplins","disciplines"],["disclamer","disclaimer"],["disconecct","disconnect"],["disconeccted","disconnected"],["disconeccting","disconnecting"],["disconecction","disconnection"],["disconecctions","disconnections"],["disconeccts","disconnects"],["disconect","disconnect"],["disconected","disconnected"],["disconecting","disconnecting"],["disconection","disconnection"],["disconections","disconnections"],["disconects","disconnects"],["disconeect","disconnect"],["disconeected","disconnected"],["disconeecting","disconnecting"],["disconeection","disconnection"],["disconeections","disconnections"],["disconeects","disconnects"],["disconenct","disconnect"],["disconencted","disconnected"],["disconencting","disconnecting"],["disconenction","disconnection"],["disconenctions","disconnections"],["disconencts","disconnects"],["disconet","disconnect"],["disconeted","disconnected"],["disconeting","disconnecting"],["disconetion","disconnection"],["disconetions","disconnections"],["disconets","disconnects"],["disconnec","disconnect"],["disconneced","disconnected"],["disconnet","disconnect"],["disconneted","disconnected"],["disconneting","disconnecting"],["disconnets","disconnects"],["disconnnect","disconnect"],["discontigious","discontiguous"],["discontigous","discontiguous"],["discontiguities","discontinuities"],["discontinous","discontinuous"],["discontinuos","discontinuous"],["discoraged","discouraged"],["discouranged","discouraged"],["discourarged","discouraged"],["discourrage","discourage"],["discourraged","discouraged"],["discove","discover"],["discoved","discovered"],["discovereability","discoverability"],["discoveribility","discoverability"],["discovey","discovery"],["discovr","discover"],["discovred","discovered"],["discovring","discovering"],["discovrs","discovers"],["discrace","disgrace"],["discraced","disgraced"],["discraceful","disgraceful"],["discracefully","disgracefully"],["discracefulness","disgracefulness"],["discraces","disgraces"],["discracing","disgracing"],["discrards","discards"],["discreminates","discriminates"],["discrepencies","discrepancies"],["discrepency","discrepancy"],["discrepicies","discrepancies"],["discribe","describe"],["discribed","described"],["discribes","describes"],["discribing","describing"],["discription","description"],["discriptions","descriptions"],["discriptor's","descriptor's"],["discriptor","descriptor"],["discriptors","descriptors"],["disctinction","distinction"],["disctinctive","distinctive"],["disctinguish","distinguish"],["disctionaries","dictionaries"],["disctionary","dictionary"],["discuassed","discussed"],["discused","discussed"],["discusion","discussion"],["discusions","discussions"],["discusson","discussion"],["discussons","discussions"],["discusting","disgusting"],["discuusion","discussion"],["disdvantage","disadvantage"],["disecting","dissecting"],["disection","dissection"],["diselect","deselect"],["disemination","dissemination"],["disenchanged","disenchanted"],["disencouraged","discouraged"],["disertation","dissertation"],["disfunctional","dysfunctional"],["disfunctionality","dysfunctionality"],["disgn","design"],["disgned","designed"],["disgner","designer"],["disgning","designing-"],["disgnostic","diagnostic"],["disgnostics","diagnostics"],["disgns","designs"],["disguisting","disgusting"],["disharge","discharge"],["disign","design"],["disignated","designated"],["disinguish","distinguish"],["disiplined","disciplined"],["disired","desired"],["disitributions","distributions"],["diskrete","discrete"],["diskretion","discretion"],["diskretization","discretization"],["diskretize","discretize"],["diskretized","discretized"],["diskrimination","discrimination"],["dislaimer","disclaimer"],["dislay","display"],["dislayed","displayed"],["dislaying","displaying"],["dislays","displays"],["dislpay","display"],["dislpayed","displayed"],["dislpaying","displaying"],["dislpays","displays"],["disnabled","disabled"],["disobediance","disobedience"],["disobediant","disobedient"],["disokay","display"],["disolve","dissolve"],["disolved","dissolved"],["disonnect","disconnect"],["disonnected","disconnected"],["disover","discover"],["disovered","discovered"],["disovering","discovering"],["disovery","discovery"],["dispached","dispatched"],["dispair","despair"],["dispalcement","displacement"],["dispalcements","displacements"],["dispaly","display"],["dispalyable","displayable"],["dispalyed","displayed"],["dispalyes","displays"],["dispalying","displaying"],["dispalys","displays"],["disparingly","disparagingly"],["disparite","disparate"],["dispatcgh","dispatch"],["dispatchs","dispatches"],["dispath","dispatch"],["dispathed","dispatched"],["dispathes","dispatches"],["dispathing","dispatching"],["dispay","display"],["dispayed","displayed"],["dispayes","displays"],["dispayport","displayport"],["dispays","displays"],["dispbibute","distribute"],["dispell","dispel"],["dispence","dispense"],["dispenced","dispensed"],["dispencing","dispensing"],["dispertion","dispersion"],["dispicable","despicable"],["dispite","despite"],["displa","display"],["displacemnt","displacement"],["displacemnts","displacements"],["displacment","displacement"],["displacments","displacements"],["displayd","displayed"],["displayied","displayed"],["displayig","displaying"],["disply","display"],["displyed","displayed"],["displying","displaying"],["displys","displays"],["dispode","dispose"],["disporue","disparue"],["disporve","disprove"],["disporved","disproved"],["disporves","disproves"],["disporving","disproving"],["disposel","disposal"],["dispossable","disposable"],["dispossal","disposal"],["disposse","dispose"],["dispossing","disposing"],["dispostion","disposition"],["disproportiate","disproportionate"],["disproportionatly","disproportionately"],["disputandem","disputandum"],["disregrad","disregard"],["disrete","discrete"],["disretion","discretion"],["disribution","distribution"],["disricts","districts"],["disrm","disarm"],["dissable","disable"],["dissabled","disabled"],["dissables","disables"],["dissabling","disabling"],["dissadvantage","disadvantage"],["dissadvantages","disadvantages"],["dissagreement","disagreement"],["dissagregation","dissaggregation"],["dissallow","disallow"],["dissallowed","disallowed"],["dissallowing","disallowing"],["dissallows","disallows"],["dissalow","disallow"],["dissalowed","disallowed"],["dissalowing","disallowing"],["dissalows","disallows"],["dissambiguate","disambiguate"],["dissamble","disassemble"],["dissambled","disassembled"],["dissambler","disassembler"],["dissambles","disassembles"],["dissamblies","disassemblies"],["dissambling","disassembling"],["dissambly","disassembly"],["dissapate","dissipate"],["dissapates","dissipates"],["dissapear","disappear"],["dissapearance","disappearance"],["dissapeard","disappeared"],["dissapeared","disappeared"],["dissapearing","disappearing"],["dissapears","disappears"],["dissaper","disappear"],["dissaperd","disappeared"],["dissapered","disappeared"],["dissapering","disappearing"],["dissapers","disappears"],["dissapoint","disappoint"],["dissapointed","disappointed"],["dissapointing","disappointing"],["dissapoints","disappoints"],["dissappear","disappear"],["dissappeard","disappeared"],["dissappeared","disappeared"],["dissappearing","disappearing"],["dissappears","disappears"],["dissapper","disappear"],["dissapperd","disappeared"],["dissappered","disappeared"],["dissappering","disappearing"],["dissappers","disappears"],["dissappointed","disappointed"],["dissapprove","disapprove"],["dissapproves","disapproves"],["dissarray","disarray"],["dissasemble","disassemble"],["dissasembled","disassembled"],["dissasembler","disassembler"],["dissasembles","disassembles"],["dissasemblies","disassemblies"],["dissasembling","disassembling"],["dissasembly","disassembly"],["dissasociate","disassociate"],["dissasociated","disassociated"],["dissasociates","disassociates"],["dissasociation","disassociation"],["dissassemble","disassemble"],["dissassembled","disassembled"],["dissassembler","disassembler"],["dissassembles","disassembles"],["dissassemblies","disassemblies"],["dissassembling","disassembling"],["dissassembly","disassembly"],["dissassociate","disassociate"],["dissassociated","disassociated"],["dissassociates","disassociates"],["dissassociating","disassociating"],["dissaster","disaster"],["dissasters","disasters"],["dissble","disable"],["dissbled","disabled"],["dissbles","disables"],["dissbling","disabling"],["dissconect","disconnect"],["dissconnect","disconnect"],["dissconnected","disconnected"],["dissconnects","disconnects"],["disscover","discover"],["disscovered","discovered"],["disscovering","discovering"],["disscovers","discovers"],["disscovery","discovery"],["dissct","dissect"],["disscted","dissected"],["disscting","dissecting"],["dissctor","dissector"],["dissctors","dissectors"],["disscts","dissects"],["disscuesed","discussed"],["disscus","discuss"],["disscused","discussed"],["disscuses","discusses"],["disscusing","discussing"],["disscusion","discussion"],["disscuss","discuss"],["disscussed","discussed"],["disscusses","discusses"],["disscussing","discussing"],["disscussion","discussion"],["disscussions","discussions"],["disshearteningly","dishearteningly"],["dissimialr","dissimilar"],["dissimialrity","dissimilarity"],["dissimialrly","dissimilarly"],["dissimiar","dissimilar"],["dissimilarily","dissimilarly"],["dissimilary","dissimilarly"],["dissimilat","dissimilar"],["dissimilia","dissimilar"],["dissimiliar","dissimilar"],["dissimiliarity","dissimilarity"],["dissimiliarly","dissimilarly"],["dissimiliarty","dissimilarity"],["dissimiliary","dissimilarity"],["dissimillar","dissimilar"],["dissimlar","dissimilar"],["dissimlarlity","dissimilarity"],["dissimlarly","dissimilarly"],["dissimliar","dissimilar"],["dissimliarly","dissimilarly"],["dissimmetric","dissymmetric"],["dissimmetrical","dissymmetrical"],["dissimmetry","dissymmetry"],["dissmantle","dismantle"],["dissmantled","dismantled"],["dissmantles","dismantles"],["dissmantling","dismantling"],["dissmis","dismiss"],["dissmised","dismissed"],["dissmises","dismisses"],["dissmising","dismissing"],["dissmiss","dismiss"],["dissmissed","dismissed"],["dissmisses","dismisses"],["dissmissing","dismissing"],["dissobediance","disobedience"],["dissobediant","disobedient"],["dissobedience","disobedience"],["dissobedient","disobedient"],["dissplay","display"],["dissrupt","disrupt"],["dissrupted","disrupted"],["dissrupting","disrupting"],["dissrupts","disrupts"],["disssemble","disassemble"],["disssembled","disassembled"],["disssembler","disassembler"],["disssembles","disassembles"],["disssemblies","disassemblies"],["disssembling","disassembling"],["disssembly","disassembly"],["disssociate","dissociate"],["disssociated","dissociated"],["disssociates","dissociates"],["disssociating","dissociating"],["distaced","distanced"],["distange","distance"],["distanse","distance"],["distantce","distance"],["distarct","distract"],["distater","disaster"],["distengish","distinguish"],["distibute","distribute"],["distibuted","distributed"],["distibutes","distributes"],["distibuting","distributing"],["distibution","distribution"],["distibutions","distributions"],["distiction","distinction"],["distictly","distinctly"],["distiguish","distinguish"],["distiguished","distinguished"],["distinative","distinctive"],["distingish","distinguish"],["distingished","distinguished"],["distingishes","distinguishes"],["distingishing","distinguishing"],["distingiush","distinguish"],["distingquished","distinguished"],["distinguise","distinguish"],["distinguised","distinguished"],["distinguises","distinguishes"],["distingush","distinguish"],["distingushed","distinguished"],["distingushes","distinguishes"],["distingushing","distinguishing"],["distingusih","distinguish"],["distinquish","distinguish"],["distinquishable","distinguishable"],["distinquished","distinguished"],["distinquishes","distinguishes"],["distinquishing","distinguishing"],["distintions","distinctions"],["distirbute","distribute"],["distirbuted","distributed"],["distirbutes","distributes"],["distirbuting","distributing"],["distirbution","distribution"],["distirbutions","distributions"],["distirted","distorted"],["distnace","distance"],["distnaces","distances"],["distnce","distance"],["distnces","distances"],["distnct","distinct"],["distncte","distance"],["distnctes","distances"],["distnguish","distinguish"],["distnguished","distinguished"],["distniguish","distinguish"],["distniguished","distinguished"],["distorsion","distortion"],["distorsional","distortional"],["distorsions","distortions"],["distrbute","distribute"],["distrbuted","distributed"],["distrbutes","distributes"],["distrbuting","distributing"],["distrbution","distribution"],["distrbutions","distributions"],["distrct","district"],["distrcts","districts"],["distrebuted","distributed"],["distribtion","distribution"],["distribtions","distributions"],["distribtuion","distribution"],["distribtuions","distributions"],["distribtution","distributions"],["distribue","distribute"],["distribued","distributed"],["distribues","distributes"],["distribuion","distribution"],["distribuite","distribute"],["distribuited","distributed"],["distribuiting","distributing"],["distribuition","distribution"],["distribuitng","distributing"],["distribure","distribute"],["districct","district"],["distrobute","distribute"],["distrobuted","distributed"],["distrobutes","distributes"],["distrobuting","distributing"],["distrobution","distribution"],["distrobutions","distributions"],["distrobuts","distributes"],["distroname","distro name"],["distroying","destroying"],["distrub","disturb"],["distrubiotion","distribution"],["distrubite","distribute"],["distrubtion","distribution"],["distrubute","distribute"],["distrubuted","distributed"],["distrubution","distribution"],["distrubutions","distributions"],["distrubutor","distributor"],["distrubutors","distributors"],["distruction","destruction"],["distructive","destructive"],["distructor","destructor"],["distructors","destructors"],["distuingish","distinguish"],["disuade","dissuade"],["disucssion","discussion"],["disucssions","discussions"],["disucussion","discussion"],["disussion","discussion"],["disussions","discussions"],["disutils","distutils"],["ditance","distance"],["ditial","digital"],["ditinguishes","distinguishes"],["ditorconfig","editorconfig"],["ditribute","distribute"],["ditributed","distributed"],["ditribution","distribution"],["ditributions","distributions"],["divde","divide"],["divded","divided"],["divdes","divides"],["divding","dividing"],["divertion","diversion"],["divertions","diversions"],["divet","divot"],["divice","device"],["divicer","divider"],["divion","division"],["divisable","divisible"],["divisior","divisor"],["divison","division"],["divisons","divisions"],["divrese","diverse"],["divsion","division"],["divsions","divisions"],["divsiors","divisors"],["dloating","floating"],["dnamically","dynamically"],["dne","done"],["dnymaic","dynamic"],["do'nt","don't"],["doagonal","diagonal"],["doagonals","diagonals"],["doalog","dialog"],["doamins","domains"],["doasn't","doesn't"],["doble","double"],["dobled","doubled"],["dobles","doubles"],["dobling","doubling"],["doccument","document"],["doccumented","documented"],["doccuments","documents"],["dockson","dachshund"],["docmenetation","documentation"],["docmuent","document"],["docmunet","document"],["docmunetation","documentation"],["docmuneted","documented"],["docmuneting","documenting"],["docmunets","documents"],["docoment","document"],["docomentation","documentation"],["docomented","documented"],["docomenting","documenting"],["docoments","documents"],["docrines","doctrines"],["docstatistik","docstatistic"],["docsund","dachshund"],["doctines","doctrines"],["doctorial","doctoral"],["docucument","document"],["docuement","document"],["docuements","documents"],["docuemnt","document"],["docuemnts","documents"],["docuemtn","document"],["docuemtnation","documentation"],["docuemtned","documented"],["docuemtning","documenting"],["docuemtns","documents"],["docuent","document"],["docuentation","documentation"],["documant","document"],["documantation","documentation"],["documants","documents"],["documation","documentation"],["documemt","document"],["documen","document"],["documenatation","documentation"],["documenation","documentation"],["documenatry","documentary"],["documenet","document"],["documenetation","documentation"],["documeneted","documented"],["documeneter","documenter"],["documeneters","documenters"],["documeneting","documenting"],["documenets","documents"],["documentaion","documentation"],["documentaiton","documentation"],["documentataion","documentation"],["documentataions","documentations"],["documentaton","documentation"],["documentes","documents"],["documention","documentation"],["documetation","documentation"],["documetnation","documentation"],["documment","document"],["documments","documents"],["documnet","document"],["documnetation","documentation"],["documument","document"],["docunment","document"],["doed","does"],["doen's","doesn't"],["doen't","doesn't"],["doen","done"],["doens't","doesn't"],["doens","does"],["doensn't","doesn't"],["does'nt","doesn't"],["does't","doesn't"],["doese't","doesn't"],["doese","does"],["doesen't","doesn't"],["doesent'","doesn't"],["doesent","doesn't"],["doesits","does its"],["doesn'","doesn't"],["doesn't't","doesn't"],["doesn;t","doesn't"],["doesnexist","doesn't exist"],["doesnt'","doesn't"],["doesnt't","doesn't"],["doesnt;","doesn't"],["doess","does"],["doestn't","doesn't"],["doign","doing"],["doiing","doing"],["doiuble","double"],["doiubled","doubled"],["dokc","dock"],["dokced","docked"],["dokcer","docker"],["dokcing","docking"],["dokcre","docker"],["dokcs","docks"],["doller","dollar"],["dollers","dollars"],["dollor","dollar"],["dollors","dollars"],["domait","domain"],["doman","domain"],["domans","domains"],["domension","dimension"],["domensions","dimensions"],["domian","domain"],["domians","domains"],["dominanted","dominated"],["dominanting","dominating"],["dominantion","domination"],["dominaton","domination"],["dominent","dominant"],["dominiant","dominant"],["domonstrate","demonstrate"],["domonstrates","demonstrates"],["domonstrating","demonstrating"],["domonstration","demonstration"],["domonstrations","demonstrations"],["donain","domain"],["donains","domains"],["donejun","dungeon"],["donejuns","dungeons"],["donig","doing"],["donn't","don't"],["donnot","do not"],["dont'","don't"],["dont't","don't"],["donwload","download"],["donwloaded","downloaded"],["donwloading","downloading"],["donwloads","downloads"],["doocument","document"],["doocumentaries","documentaries"],["doocumentary","documentary"],["doocumentation","documentation"],["doocumentations","documentations"],["doocumented","documented"],["doocumenting","documenting"],["doocuments","documents"],["doorjam","doorjamb"],["dorce","force"],["dorced","forced"],["dorceful","forceful"],["dordered","ordered"],["dorment","dormant"],["dorp","drop"],["dosclosed","disclosed"],["doscloses","discloses"],["dosclosing","disclosing"],["dosclosure","disclosure"],["dosclosures","disclosures"],["dosen't","doesn't"],["dosen;t","doesn't"],["dosens","dozens"],["dosent'","doesn't"],["dosent","doesn't"],["dosent;","doesn't"],["dosn't","doesn't"],["dosn;t","doesn't"],["dosnt","doesn't"],["dosposing","disposing"],["dosument","document"],["dosuments","documents"],["dota","data"],["doube","double"],["doube-click","double-click"],["doube-clicked","double-clicked"],["doube-clicks","double-clicks"],["doube-quote","double-quote"],["doube-quoted","double-quoted"],["doube-word","double-word"],["doube-wprd","double-word"],["doubeclick","double-click"],["doubeclicked","double-clicked"],["doubeclicks","double-clicks"],["doubel","double"],["doubele-click","double-click"],["doubele-clicked","double-clicked"],["doubele-clicks","double-clicks"],["doubeleclick","double-click"],["doubeleclicked","double-clicked"],["doubeleclicks","double-clicks"],["doubely","doubly"],["doubes","doubles"],["doublde","double"],["doublded","doubled"],["doubldes","doubles"],["doubleclick","double-click"],["doublely","doubly"],["doubletquote","doublequote"],["doubth","doubt"],["doubthed","doubted"],["doubthing","doubting"],["doubths","doubts"],["doucment","document"],["doucmentated","documented"],["doucmentation","documentation"],["doucmented","documented"],["doucmenter","documenter"],["doucmenters","documenters"],["doucmentes","documents"],["doucmenting","documenting"],["doucments","documents"],["douible","double"],["douibled","doubled"],["doulbe","double"],["doumentc","document"],["dout","doubt"],["dowgrade","downgrade"],["dowlink","downlink"],["dowlinks","downlinks"],["dowload","download"],["dowloaded","downloaded"],["dowloader","downloader"],["dowloaders","downloaders"],["dowloading","downloading"],["dowloads","downloads"],["downagrade","downgrade"],["downagraded","downgraded"],["downagrades","downgrades"],["downagrading","downgrading"],["downgade","downgrade"],["downgaded","downgraded"],["downgades","downgrades"],["downgading","downgrading"],["downgarade","downgrade"],["downgaraded","downgraded"],["downgarades","downgrades"],["downgarading","downgrading"],["downgarde","downgrade"],["downgarded","downgraded"],["downgardes","downgrades"],["downgarding","downgrading"],["downgarte","downgrade"],["downgarted","downgraded"],["downgartes","downgrades"],["downgarting","downgrading"],["downgradde","downgrade"],["downgradded","downgraded"],["downgraddes","downgrades"],["downgradding","downgrading"],["downgradei","downgrade"],["downgradingn","downgrading"],["downgrate","downgrade"],["downgrated","downgraded"],["downgrates","downgrades"],["downgrating","downgrading"],["downlad","download"],["downladed","downloaded"],["downlading","downloading"],["downlads","downloads"],["downlaod","download"],["downlaoded","downloaded"],["downlaodes","downloads"],["downlaoding","downloading"],["downlaods","downloads"],["downloadmanger","downloadmanager"],["downlod","download"],["downloded","downloaded"],["downloding","downloading"],["downlods","downloads"],["downlowd","download"],["downlowded","downloaded"],["downlowding","downloading"],["downlowds","downloads"],["downoad","download"],["downoaded","downloaded"],["downoading","downloading"],["downoads","downloads"],["downoload","download"],["downoloaded","downloaded"],["downoloading","downloading"],["downoloads","downloads"],["downrade","downgrade"],["downraded","downgraded"],["downrades","downgrades"],["downrading","downgrading"],["downrgade","downgrade"],["downrgaded","downgraded"],["downrgades","downgrades"],["downrgading","downgrading"],["downsteram","downstream"],["downsteramed","downstreamed"],["downsteramer","downstreamer"],["downsteramers","downstreamers"],["downsteraming","downstreaming"],["downsterams","downstreams"],["dows","does"],["dowt","doubt"],["doxgen","doxygen"],["doygen","doxygen"],["dpeends","depends"],["dpendent","dependent"],["dpkg-buildpackge","dpkg-buildpackage"],["dpkg-buildpackges","dpkg-buildpackages"],["dpuble","double"],["dpubles","doubles"],["draconain","draconian"],["dragable","draggable"],["draged","dragged"],["draging","dragging"],["draing","drawing"],["drammatic","dramatic"],["dramtic","dramatic"],["dran","drawn"],["drastical","drastically"],["drasticaly","drastically"],["drats","drafts"],["draughtman","draughtsman"],["Dravadian","Dravidian"],["draview","drawview"],["drawack","drawback"],["drawacks","drawbacks"],["drawm","drawn"],["drawng","drawing"],["dreasm","dreams"],["dreawn","drawn"],["dregee","degree"],["dregees","degrees"],["dregree","degree"],["dregrees","degrees"],["drescription","description"],["drescriptions","descriptions"],["driagram","diagram"],["driagrammed","diagrammed"],["driagramming","diagramming"],["driagrams","diagrams"],["driectly","directly"],["drity","dirty"],["driveing","driving"],["drivr","driver"],["drnik","drink"],["drob","drop"],["dropabel","droppable"],["dropable","droppable"],["droped","dropped"],["droping","dropping"],["droppend","dropped"],["droppped","dropped"],["dropse","drops"],["droput","dropout"],["druing","during"],["druming","drumming"],["drummless","drumless"],["drvier","driver"],["drwaing","drawing"],["drwawing","drawing"],["drwawings","drawings"],["dscrete","discrete"],["dscretion","discretion"],["dscribed","described"],["dsiable","disable"],["dsiabled","disabled"],["dsplays","displays"],["dstination","destination"],["dstinations","destinations"],["dthe","the"],["dtoring","storing"],["dubios","dubious"],["dublicade","duplicate"],["dublicat","duplicate"],["dublicate","duplicate"],["dublicated","duplicated"],["dublicates","duplicates"],["dublication","duplication"],["ducment","document"],["ducument","document"],["duirng","during"],["dulicate","duplicate"],["dum","dumb"],["dumplicate","duplicate"],["dumplicated","duplicated"],["dumplicates","duplicates"],["dumplicating","duplicating"],["duoblequote","doublequote"],["dupicate","duplicate"],["duplacate","duplicate"],["duplacated","duplicated"],["duplacates","duplicates"],["duplacation","duplication"],["duplacte","duplicate"],["duplacted","duplicated"],["duplactes","duplicates"],["duplaction","duplication"],["duplaicate","duplicate"],["duplaicated","duplicated"],["duplaicates","duplicates"],["duplaication","duplication"],["duplate","duplicate"],["duplated","duplicated"],["duplates","duplicates"],["duplation","duplication"],["duplcate","duplicate"],["duplciate","duplicate"],["dupliacate","duplicate"],["dupliacates","duplicates"],["dupliace","duplicate"],["dupliacte","duplicate"],["dupliacted","duplicated"],["dupliactes","duplicates"],["dupliagte","duplicate"],["dupliate","duplicate"],["dupliated","duplicated"],["dupliates","duplicates"],["dupliating","duplicating"],["dupliation","duplication"],["dupliations","duplications"],["duplicat","duplicate"],["duplicatd","duplicated"],["duplicats","duplicates"],["dupplicate","duplicate"],["dupplicated","duplicated"],["dupplicates","duplicates"],["dupplicating","duplicating"],["dupplication","duplication"],["dupplications","duplications"],["durationm","duration"],["durectories","directories"],["durectory","directory"],["dureing","during"],["durig","during"],["durining","during"],["durning","during"],["durring","during"],["duting","during"],["dyanamically","dynamically"],["dyanmic","dynamic"],["dyanmically","dynamically"],["dyas","dryas"],["dymamically","dynamically"],["dynamc","dynamic"],["dynamcly","dynamically"],["dynamcs","dynamics"],["dynamicaly","dynamically"],["dynamiclly","dynamically"],["dynamicly","dynamically"],["dynaminc","dynamic"],["dynamincal","dynamical"],["dynamincally","dynamically"],["dynamincs","dynamics"],["dynamlic","dynamic"],["dynamlically","dynamically"],["dynically","dynamically"],["dynmaic","dynamic"],["dynmaically","dynamically"],["dynmic","dynamic"],["dynmically","dynamically"],["dynmics","dynamics"],["eabled","enabled"],["eacf","each"],["eacg","each"],["eachother","each other"],["eachs","each"],["eactly","exactly"],["eagrely","eagerly"],["eahc","each"],["eailier","earlier"],["eaiser","easier"],["ealier","earlier"],["ealiest","earliest"],["eample","example"],["eamples","examples"],["eanable","enable"],["eanble","enable"],["earleir","earlier"],["earler","earlier"],["earliear","earlier"],["earlies","earliest"],["earlist","earliest"],["earlyer","earlier"],["earnt","earned"],["earpeice","earpiece"],["easely","easily"],["easili","easily"],["easiliy","easily"],["easilly","easily"],["easist","easiest"],["easiy","easily"],["easly","easily"],["easyer","easier"],["eaxct","exact"],["ebale","enable"],["ebaled","enabled"],["EBCIDC","EBCDIC"],["ebedded","embedded"],["eccessive","excessive"],["ecclectic","eclectic"],["eceonomy","economy"],["ecept","except"],["eception","exception"],["eceptions","exceptions"],["ecidious","deciduous"],["eclise","eclipse"],["eclispe","eclipse"],["ecnetricity","eccentricity"],["ecognized","recognized"],["ecomonic","economic"],["ecounter","encounter"],["ecountered","encountered"],["ecountering","encountering"],["ecounters","encounters"],["ecplicit","explicit"],["ecplicitly","explicitly"],["ecspecially","especially"],["ect","etc"],["ecxept","except"],["ecxite","excite"],["ecxited","excited"],["ecxites","excites"],["ecxiting","exciting"],["ecxtracted","extracted"],["EDCDIC","EBCDIC"],["eddge","edge"],["eddges","edges"],["edditable","editable"],["ede","edge"],["ediable","editable"],["edige","edge"],["ediges","edges"],["ediit","edit"],["ediiting","editing"],["ediitor","editor"],["ediitors","editors"],["ediits","edits"],["editedt","edited"],["editiing","editing"],["editoro","editor"],["editot","editor"],["editots","editors"],["editt","edit"],["editted","edited"],["editter","editor"],["editting","editing"],["edittor","editor"],["edn","end"],["ednif","endif"],["edxpected","expected"],["eearly","early"],["eeeprom","EEPROM"],["eescription","description"],["eevery","every"],["eeverything","everything"],["eeverywhere","everywhere"],["eextract","extract"],["eextracted","extracted"],["eextracting","extracting"],["eextraction","extraction"],["eextracts","extracts"],["efect","effect"],["efective","effective"],["efectively","effectively"],["efel","evil"],["eferences","references"],["efetivity","effectivity"],["effciency","efficiency"],["effcient","efficient"],["effciently","efficiently"],["effctive","effective"],["effctively","effectively"],["effeciency","efficiency"],["effecient","efficient"],["effeciently","efficiently"],["effecitvely","effectively"],["effeck","effect"],["effecked","effected"],["effecks","effects"],["effeckt","effect"],["effectice","effective"],["effecticely","effectively"],["effectiviness","effectiveness"],["effectivness","effectiveness"],["effectly","effectively"],["effedts","effects"],["effekt","effect"],["effexts","effects"],["efficcient","efficient"],["efficencty","efficiency"],["efficency","efficiency"],["efficent","efficient"],["efficently","efficiently"],["effiency","efficiency"],["effient","efficient"],["effiently","efficiently"],["effulence","effluence"],["eforceable","enforceable"],["egal","equal"],["egals","equals"],["egde","edge"],["egdes","edges"],["ege","edge"],["egenral","general"],["egenralise","generalise"],["egenralised","generalised"],["egenralises","generalises"],["egenralize","generalize"],["egenralized","generalized"],["egenralizes","generalizes"],["egenrally","generally"],["ehance","enhance"],["ehanced","enhanced"],["ehancement","enhancement"],["ehancements","enhancements"],["ehenever","whenever"],["ehough","enough"],["ehr","her"],["ehternet","Ethernet"],["ehthernet","ethernet"],["eighter","either"],["eihter","either"],["einstance","instance"],["eisntance","instance"],["eiter","either"],["eith","with"],["elaspe","elapse"],["elasped","elapsed"],["elaspes","elapses"],["elasping","elapsing"],["elction","election"],["elctromagnetic","electromagnetic"],["elease","release"],["eleased","released"],["eleases","releases"],["eleate","relate"],["electical","electrical"],["electirc","electric"],["electircal","electrical"],["electrial","electrical"],["electricly","electrically"],["electricty","electricity"],["electrinics","electronics"],["electriv","electric"],["electrnoics","electronics"],["eleemnt","element"],["eleent","element"],["elegible","eligible"],["elelement","element"],["elelements","elements"],["elelment","element"],["elelmental","elemental"],["elelmentary","elementary"],["elelments","elements"],["elemant","element"],["elemantary","elementary"],["elemement","element"],["elemements","elements"],["elememt","element"],["elemen","element"],["elemenent","element"],["elemenental","elemental"],["elemenents","elements"],["elemenet","element"],["elemenets","elements"],["elemens","elements"],["elemenst","elements"],["elementay","elementary"],["elementry","elementary"],["elemet","element"],["elemetal","elemental"],["elemetn","element"],["elemetns","elements"],["elemets","elements"],["eleminate","eliminate"],["eleminated","eliminated"],["eleminates","eliminates"],["eleminating","eliminating"],["elemnets","elements"],["elemnt","element"],["elemntal","elemental"],["elemnts","elements"],["elemt","element"],["elemtary","elementary"],["elemts","elements"],["elenment","element"],["eles","else"],["eletricity","electricity"],["eletromagnitic","electromagnetic"],["eletronic","electronic"],["elgible","eligible"],["elicided","elicited"],["eligable","eligible"],["elimentary","elementary"],["elimiante","eliminate"],["elimiate","eliminate"],["eliminetaion","elimination"],["elimintate","eliminate"],["eliminte","eliminate"],["elimnated","eliminated"],["eliptic","elliptic"],["eliptical","elliptical"],["elipticity","ellipticity"],["ellapsed","elapsed"],["ellected","elected"],["ellement","element"],["ellemental","elemental"],["ellementals","elementals"],["ellements","elements"],["elliminate","eliminate"],["elliminated","eliminated"],["elliminates","eliminates"],["elliminating","eliminating"],["ellipsises","ellipsis"],["ellision","elision"],["elmenet","element"],["elmenets","elements"],["elment","element"],["elments","elements"],["elminate","eliminate"],["elminated","eliminated"],["elminates","eliminates"],["elminating","eliminating"],["elphant","elephant"],["elsef","elseif"],["elsehwere","elsewhere"],["elseof","elseif"],["elseswhere","elsewhere"],["elsewehere","elsewhere"],["elsewere","elsewhere"],["elsewhwere","elsewhere"],["elsiof","elseif"],["elsof","elseif"],["emabaroged","embargoed"],["emable","enable"],["emabled","enabled"],["emables","enables"],["emabling","enabling"],["emailling","emailing"],["embarass","embarrass"],["embarassed","embarrassed"],["embarasses","embarrasses"],["embarassing","embarrassing"],["embarassment","embarrassment"],["embargos","embargoes"],["embarras","embarrass"],["embarrased","embarrassed"],["embarrasing","embarrassing"],["embarrasingly","embarrassingly"],["embarrasment","embarrassment"],["embbedded","embedded"],["embbeded","embedded"],["embdder","embedder"],["embdedded","embedded"],["embebbed","embedded"],["embedd","embed"],["embeddded","embedded"],["embeddeding","embedding"],["embedds","embeds"],["embeded","embedded"],["embededded","embedded"],["embeed","embed"],["embezelled","embezzled"],["emblamatic","emblematic"],["embold","embolden"],["embrodery","embroidery"],["emcompass","encompass"],["emcompassed","encompassed"],["emcompassing","encompassing"],["emedded","embedded"],["emegrency","emergency"],["emenet","element"],["emenets","elements"],["emiited","emitted"],["eminate","emanate"],["eminated","emanated"],["emision","emission"],["emited","emitted"],["emiting","emitting"],["emlation","emulation"],["emmediately","immediately"],["emminently","eminently"],["emmisaries","emissaries"],["emmisarries","emissaries"],["emmisarry","emissary"],["emmisary","emissary"],["emmision","emission"],["emmisions","emissions"],["emmit","emit"],["emmited","emitted"],["emmiting","emitting"],["emmits","emits"],["emmitted","emitted"],["emmitting","emitting"],["emnity","enmity"],["emoty","empty"],["emough","enough"],["emought","enough"],["emperical","empirical"],["emperically","empirically"],["emphaised","emphasised"],["emphsis","emphasis"],["emphysyma","emphysema"],["empiracally","empirically"],["empiricaly","empirically"],["emplyed","employed"],["emplyee","employee"],["emplyees","employees"],["emplyer","employer"],["emplyers","employers"],["emplying","employing"],["emplyment","employment"],["emplyments","employments"],["emporer","emperor"],["emprically","empirically"],["emprisoned","imprisoned"],["emprove","improve"],["emproved","improved"],["emprovement","improvement"],["emprovements","improvements"],["emproves","improves"],["emproving","improving"],["emptniess","emptiness"],["emptry","empty"],["emptyed","emptied"],["emptyy","empty"],["empy","empty"],["emtied","emptied"],["emties","empties"],["emtpies","empties"],["emtpy","empty"],["emty","empty"],["emtying","emptying"],["emultor","emulator"],["emultors","emulators"],["enabe","enable"],["enabel","enable"],["enabeled","enabled"],["enabeling","enabling"],["enabing","enabling"],["enabledi","enabled"],["enableing","enabling"],["enablen","enabled"],["enalbe","enable"],["enalbed","enabled"],["enalbes","enables"],["enameld","enameled"],["enaugh","enough"],["enbable","enable"],["enbabled","enabled"],["enbabling","enabling"],["enbale","enable"],["enbaled","enabled"],["enbales","enables"],["enbaling","enabling"],["enbedding","embedding"],["enble","enable"],["encapsualtes","encapsulates"],["encapsulatzion","encapsulation"],["encapsultion","encapsulation"],["encaspulate","encapsulate"],["encaspulated","encapsulated"],["encaspulates","encapsulates"],["encaspulating","encapsulating"],["encaspulation","encapsulation"],["enchanced","enhanced"],["enclosng","enclosing"],["enclosue","enclosure"],["enclosung","enclosing"],["enclude","include"],["encluding","including"],["encocde","encode"],["encocded","encoded"],["encocder","encoder"],["encocders","encoders"],["encocdes","encodes"],["encocding","encoding"],["encocdings","encodings"],["encodingt","encoding"],["encodning","encoding"],["encodnings","encodings"],["encompas","encompass"],["encompased","encompassed"],["encompases","encompasses"],["encompasing","encompassing"],["enconde","encode"],["enconded","encoded"],["enconder","encoder"],["enconders","encoders"],["encondes","encodes"],["enconding","encoding"],["encondings","encodings"],["encorded","encoded"],["encorder","encoder"],["encorders","encoders"],["encording","encoding"],["encordings","encodings"],["encorporating","incorporating"],["encoser","encoder"],["encosers","encoders"],["encosure","enclosure"],["encounterd","encountered"],["encountres","encounters"],["encouraing","encouraging"],["encouter","encounter"],["encoutered","encountered"],["encouters","encounters"],["encoutner","encounter"],["encoutners","encounters"],["encouttering","encountering"],["encrcypt","encrypt"],["encrcypted","encrypted"],["encrcyption","encryption"],["encrcyptions","encryptions"],["encrcypts","encrypts"],["encript","encrypt"],["encripted","encrypted"],["encription","encryption"],["encriptions","encryptions"],["encripts","encrypts"],["encrpt","encrypt"],["encrpted","encrypted"],["encrption","encryption"],["encrptions","encryptions"],["encrpts","encrypts"],["encrupted","encrypted"],["encrypiton","encryption"],["encryptiion","encryption"],["encryptio","encryption"],["encryptiong","encryption"],["encrytion","encryption"],["encrytped","encrypted"],["encrytption","encryption"],["encupsulates","encapsulates"],["encylopedia","encyclopedia"],["encypted","encrypted"],["encyption","encryption"],["endcoded","encoded"],["endcoder","encoder"],["endcoders","encoders"],["endcodes","encodes"],["endcoding","encoding"],["endcodings","encodings"],["endding","ending"],["ende","end"],["endevors","endeavors"],["endevour","endeavour"],["endfi","endif"],["endianes","endianness"],["endianess","endianness"],["endianity","endianness"],["endiannes","endianness"],["endig","ending"],["endiness","endianness"],["endnoden","endnode"],["endoint","endpoint"],["endolithes","endoliths"],["endpints","endpoints"],["endpiont","endpoint"],["endpionts","endpoints"],["endpont","endpoint"],["endponts","endpoints"],["endsup","ends up"],["enduce","induce"],["eneables","enables"],["enebale","enable"],["enebaled","enabled"],["eneble","enable"],["ened","need"],["enegeries","energies"],["enegery","energy"],["enehanced","enhanced"],["enery","energy"],["eneter","enter"],["enetered","entered"],["enetities","entities"],["enetity","entity"],["eneumeration","enumeration"],["eneumerations","enumerations"],["eneumretaion","enumeration"],["eneumretaions","enumerations"],["enew","new"],["enflamed","inflamed"],["enforcable","enforceable"],["enforceing","enforcing"],["enforcmement","enforcement"],["enforcment","enforcement"],["enfore","enforce"],["enfored","enforced"],["enfores","enforces"],["enforncing","enforcing"],["engagment","engagement"],["engeneer","engineer"],["engeneering","engineering"],["engery","energy"],["engieer","engineer"],["engieneer","engineer"],["engieneers","engineers"],["enginee","engine"],["enginge","engine"],["enginin","engine"],["enginineer","engineer"],["engoug","enough"],["enhabce","enhance"],["enhabced","enhanced"],["enhabces","enhances"],["enhabcing","enhancing"],["enhace","enhance"],["enhaced","enhanced"],["enhacement","enhancement"],["enhacements","enhancements"],["enhancd","enhanced"],["enhancment","enhancement"],["enhancments","enhancements"],["enhaned","enhanced"],["enhence","enhance"],["enhenced","enhanced"],["enhencement","enhancement"],["enhencements","enhancements"],["enhencment","enhancement"],["enhencments","enhancements"],["enironment","environment"],["enironments","environments"],["enities","entities"],["enitities","entities"],["enitity","entity"],["enitre","entire"],["enivornment","environment"],["enivornments","environments"],["enivronment","environment"],["enlargment","enlargement"],["enlargments","enlargements"],["enlightnment","enlightenment"],["enlose","enclose"],["enmpty","empty"],["enmum","enum"],["ennpoint","endpoint"],["enntries","entries"],["enocde","encode"],["enocded","encoded"],["enocder","encoder"],["enocders","encoders"],["enocdes","encodes"],["enocding","encoding"],["enocdings","encodings"],["enogh","enough"],["enoght","enough"],["enoguh","enough"],["enouch","enough"],["enoucnter","encounter"],["enoucntered","encountered"],["enoucntering","encountering"],["enoucnters","encounters"],["enouf","enough"],["enoufh","enough"],["enought","enough"],["enoughts","enough"],["enougth","enough"],["enouh","enough"],["enouhg","enough"],["enouncter","encounter"],["enounctered","encountered"],["enounctering","encountering"],["enouncters","encounters"],["enoung","enough"],["enoungh","enough"],["enounter","encounter"],["enountered","encountered"],["enountering","encountering"],["enounters","encounters"],["enouph","enough"],["enourage","encourage"],["enouraged","encouraged"],["enourages","encourages"],["enouraging","encouraging"],["enourmous","enormous"],["enourmously","enormously"],["enouth","enough"],["enouugh","enough"],["enpoint","endpoint"],["enpoints","endpoints"],["enque","enqueue"],["enqueing","enqueuing"],["enrties","entries"],["enrtries","entries"],["enrtry","entry"],["enrty","entry"],["ensconsed","ensconced"],["entaglements","entanglements"],["entended","intended"],["entension","extension"],["entensions","extensions"],["ententries","entries"],["enterance","entrance"],["enteratinment","entertainment"],["entereing","entering"],["enterie","entry"],["enteries","entries"],["enterily","entirely"],["enterprice","enterprise"],["enterprices","enterprises"],["entery","entry"],["enteties","entities"],["entety","entity"],["enthaplies","enthalpies"],["enthaply","enthalpy"],["enthousiasm","enthusiasm"],["enthusiam","enthusiasm"],["enthusiatic","enthusiastic"],["entierly","entirely"],["entireity","entirety"],["entires","entries"],["entirey","entirely"],["entirity","entirety"],["entirly","entirely"],["entitee","entity"],["entitees","entities"],["entites","entities"],["entiti","entity"],["entitie","entity"],["entitites","entities"],["entitities","entities"],["entitity","entity"],["entitiy","entity"],["entitiys","entities"],["entitlied","entitled"],["entitys","entities"],["entoties","entities"],["entoty","entity"],["entrace","entrance"],["entraced","entranced"],["entraces","entrances"],["entrepeneur","entrepreneur"],["entrepeneurs","entrepreneurs"],["entriess","entries"],["entrophy","entropy"],["enttries","entries"],["enttry","entry"],["enulation","emulation"],["enumarate","enumerate"],["enumarated","enumerated"],["enumarates","enumerates"],["enumarating","enumerating"],["enumation","enumeration"],["enumearate","enumerate"],["enumearation","enumeration"],["enumerble","enumerable"],["enumertaion","enumeration"],["enusre","ensure"],["envaluation","evaluation"],["enveloppe","envelope"],["envelopped","enveloped"],["enveloppes","envelopes"],["envelopping","enveloping"],["enver","never"],["envioment","environment"],["enviomental","environmental"],["envioments","environments"],["envionment","environment"],["envionmental","environmental"],["envionments","environments"],["enviorement","environment"],["envioremental","environmental"],["enviorements","environments"],["enviorenment","environment"],["enviorenmental","environmental"],["enviorenments","environments"],["enviorment","environment"],["enviormental","environmental"],["enviormentally","environmentally"],["enviorments","environments"],["enviornemnt","environment"],["enviornemntal","environmental"],["enviornemnts","environments"],["enviornment","environment"],["enviornmental","environmental"],["enviornmentalist","environmentalist"],["enviornmentally","environmentally"],["enviornments","environments"],["envioronment","environment"],["envioronmental","environmental"],["envioronments","environments"],["envireonment","environment"],["envirionment","environment"],["envirnment","environment"],["envirnmental","environmental"],["envirnments","environments"],["envirnoment","environment"],["envirnoments","environments"],["enviroiment","environment"],["enviroment","environment"],["enviromental","environmental"],["enviromentalist","environmentalist"],["enviromentally","environmentally"],["enviroments","environments"],["enviromnent","environment"],["enviromnental","environmental"],["enviromnentally","environmentally"],["enviromnents","environments"],["environement","environment"],["environemnt","environment"],["environemntal","environmental"],["environemnts","environments"],["environent","environment"],["environmane","environment"],["environmenet","environment"],["environmenets","environments"],["environmet","environment"],["environmets","environments"],["environmnet","environment"],["environmont","environment"],["environnement","environment"],["environtment","environment"],["envolutionary","evolutionary"],["envolved","involved"],["envorce","enforce"],["envrion","environ"],["envrionment","environment"],["envrionmental","environmental"],["envrionments","environments"],["envrions","environs"],["envriron","environ"],["envrironment","environment"],["envrironmental","environmental"],["envrironments","environments"],["envrirons","environs"],["envvironment","environment"],["enxt","next"],["enything","anything"],["enyway","anyway"],["epecifica","especifica"],["epect","expect"],["epected","expected"],["epectedly","expectedly"],["epecting","expecting"],["epects","expects"],["ephememeral","ephemeral"],["ephememeris","ephemeris"],["epidsodes","episodes"],["epigramic","epigrammatic"],["epilgoue","epilogue"],["episdoe","episode"],["episdoes","episodes"],["eploit","exploit"],["eploits","exploits"],["epmty","empty"],["epressions","expressions"],["epsiode","episode"],["eptied","emptied"],["eptier","emptier"],["epties","empties"],["eptrapolate","extrapolate"],["eptrapolated","extrapolated"],["eptrapolates","extrapolates"],["epty","empty"],["epxanded","expanded"],["epxected","expected"],["epxiressions","expressions"],["epxlicit","explicit"],["eqaul","equal"],["eqaulity","equality"],["eqaulizer","equalizer"],["eqivalent","equivalent"],["eqivalents","equivalents"],["equailateral","equilateral"],["equalibrium","equilibrium"],["equallity","equality"],["equalls","equals"],["equaly","equally"],["equeation","equation"],["equeations","equations"],["equel","equal"],["equelibrium","equilibrium"],["equialent","equivalent"],["equil","equal"],["equilavalent","equivalent"],["equilibium","equilibrium"],["equilibrum","equilibrium"],["equilvalent","equivalent"],["equilvalently","equivalently"],["equilvalents","equivalents"],["equiped","equipped"],["equipmentd","equipment"],["equipments","equipment"],["equippment","equipment"],["equiptment","equipment"],["equitorial","equatorial"],["equivalance","equivalence"],["equivalant","equivalent"],["equivelant","equivalent"],["equivelent","equivalent"],["equivelents","equivalents"],["equivilant","equivalent"],["equivilent","equivalent"],["equivivalent","equivalent"],["equivlalent","equivalent"],["equivlantly","equivalently"],["equivlent","equivalent"],["equivlently","equivalently"],["equivlents","equivalents"],["equivqlent","equivalent"],["eqution","equation"],["equtions","equations"],["equvalent","equivalent"],["equvivalent","equivalent"],["erasablocks","eraseblocks"],["eratic","erratic"],["eratically","erratically"],["eraticly","erratically"],["erformance","performance"],["erliear","earlier"],["erlier","earlier"],["erly","early"],["ermergency","emergency"],["eroneous","erroneous"],["eror","error"],["erorneus","erroneous"],["erorneusly","erroneously"],["erorr","error"],["erorrs","errors"],["erors","errors"],["erraneously","erroneously"],["erro","error"],["erroneus","erroneous"],["erroneusly","erroneously"],["erronous","erroneous"],["erronously","erroneously"],["errorneous","erroneous"],["errorneously","erroneously"],["errorneus","erroneous"],["errornous","erroneous"],["errornously","erroneously"],["errorprone","error-prone"],["errorr","error"],["erros","errors"],["errot","error"],["errots","errors"],["errro","error"],["errror","error"],["errrors","errors"],["errros","errors"],["errupted","erupted"],["ertoneous","erroneous"],["ertoneously","erroneously"],["ervery","every"],["erverything","everything"],["esacpe","escape"],["esacped","escaped"],["esacpes","escapes"],["escalte","escalate"],["escalted","escalated"],["escaltes","escalates"],["escalting","escalating"],["escaltion","escalation"],["escapeable","escapable"],["escapemant","escapement"],["escased","escaped"],["escation","escalation"],["esccape","escape"],["esccaped","escaped"],["escpae","escape"],["escpaed","escaped"],["esecute","execute"],["esential","essential"],["esentially","essentially"],["esge","edge"],["esger","edger"],["esgers","edgers"],["esges","edges"],["esging","edging"],["esiest","easiest"],["esimate","estimate"],["esimated","estimated"],["esimates","estimates"],["esimating","estimating"],["esimation","estimation"],["esimations","estimations"],["esimator","estimator"],["esimators","estimators"],["esists","exists"],["esitmate","estimate"],["esitmated","estimated"],["esitmates","estimates"],["esitmating","estimating"],["esitmation","estimation"],["esitmations","estimations"],["esitmator","estimator"],["esitmators","estimators"],["esle","else"],["esnure","ensure"],["esnured","ensured"],["esnures","ensures"],["espacally","especially"],["espace","escape"],["espaced","escaped"],["espaces","escapes"],["espacially","especially"],["espacing","escaping"],["espcially","especially"],["especailly","especially"],["especally","especially"],["especialy","especially"],["especialyl","especially"],["especiially","especially"],["espect","expect"],["espeically","especially"],["esseintially","essentially"],["essencial","essential"],["essense","essence"],["essentail","essential"],["essentailly","essentially"],["essentaily","essentially"],["essental","essential"],["essentally","essentially"],["essentals","essentials"],["essentialy","essentially"],["essentual","essential"],["essentually","essentially"],["essentualy","essentially"],["essesital","essential"],["essesitally","essentially"],["essesitaly","essentially"],["essiential","essential"],["esssential","essential"],["estabilish","establish"],["estabish","establish"],["estabishd","established"],["estabished","established"],["estabishes","establishes"],["estabishing","establishing"],["establised","established"],["establishs","establishes"],["establising","establishing"],["establsihed","established"],["estbalishment","establishment"],["estimage","estimate"],["estimages","estimates"],["estiomator","estimator"],["estiomators","estimators"],["esy","easy"],["etablish","establish"],["etablishd","established"],["etablished","established"],["etablishing","establishing"],["etcc","etc"],["etcp","etc"],["etensible","extensible"],["etension","extension"],["etensions","extensions"],["ethe","the"],["etherenet","Ethernet"],["ethernal","eternal"],["ethnocentricm","ethnocentrism"],["etiher","either"],["etroneous","erroneous"],["etroneously","erroneously"],["etsablishment","establishment"],["etsbalishment","establishment"],["etst","test"],["etsts","tests"],["etxt","text"],["euclidian","euclidean"],["euivalent","equivalent"],["euivalents","equivalents"],["euqivalent","equivalent"],["euqivalents","equivalents"],["euristic","heuristic"],["euristics","heuristics"],["Europian","European"],["Europians","Europeans"],["Eurpean","European"],["Eurpoean","European"],["evalation","evaluation"],["evalite","evaluate"],["evalited","evaluated"],["evalites","evaluates"],["evaluataion","evaluation"],["evaluataions","evaluations"],["evalueate","evaluate"],["evalueated","evaluated"],["evaluete","evaluate"],["evalueted","evaluated"],["evalulates","evaluates"],["evalutae","evaluate"],["evalutaed","evaluated"],["evalutaeing","evaluating"],["evalutaes","evaluates"],["evalutaing","evaluating"],["evalutaion","evaluation"],["evalutaions","evaluations"],["evalutaor","evaluator"],["evalutate","evaluate"],["evalutated","evaluated"],["evalutates","evaluates"],["evalutating","evaluating"],["evalutation","evaluation"],["evalutations","evaluations"],["evalute","evaluate"],["evaluted","evaluated"],["evalutes","evaluates"],["evaluting","evaluating"],["evalutions","evaluations"],["evalutive","evaluative"],["evalutor","evaluator"],["evalutors","evaluators"],["evaulate","evaluate"],["evaulated","evaluated"],["evaulates","evaluates"],["evaulating","evaluating"],["evaulation","evaluation"],["evaulator","evaluator"],["evaulted","evaluated"],["evauluate","evaluate"],["evauluated","evaluated"],["evauluates","evaluates"],["evauluation","evaluation"],["eveluate","evaluate"],["eveluated","evaluated"],["eveluates","evaluates"],["eveluating","evaluating"],["eveluation","evaluation"],["eveluations","evaluations"],["eveluator","evaluator"],["eveluators","evaluators"],["evenhtually","eventually"],["eventally","eventually"],["eventaully","eventually"],["eventhanders","event handlers"],["eventhough","even though"],["eventially","eventually"],["eventuall","eventually"],["eventualy","eventually"],["evenually","eventually"],["eveolution","evolution"],["eveolutionary","evolutionary"],["eveolve","evolve"],["eveolved","evolved"],["eveolves","evolves"],["eveolving","evolving"],["everage","average"],["everaged","averaged"],["everbody","everybody"],["everithing","everything"],["everone","everyone"],["everthing","everything"],["evertyhign","everything"],["evertyhing","everything"],["evertything","everything"],["everwhere","everywhere"],["everyhing","everything"],["everyhting","everything"],["everythig","everything"],["everythign","everything"],["everythin","everything"],["everythings","everything"],["everytime","every time"],["everyting","everything"],["everytone","everyone"],["evey","every"],["eveyone","everyone"],["eveyr","every"],["evidentally","evidently"],["evironment","environment"],["evironments","environments"],["evition","eviction"],["evluate","evaluate"],["evluated","evaluated"],["evluates","evaluates"],["evluating","evaluating"],["evluation","evaluation"],["evluations","evaluations"],["evluative","evaluative"],["evluator","evaluator"],["evluators","evaluators"],["evnet","event"],["evnts","events"],["evoluate","evaluate"],["evoluated","evaluated"],["evoluates","evaluates"],["evoluation","evaluations"],["evovler","evolver"],["evovling","evolving"],["evrithing","everything"],["evry","every"],["evrythign","everything"],["evrything","everything"],["evrywhere","everywhere"],["evyrthing","everything"],["ewhwer","where"],["exaclty","exactly"],["exacly","exactly"],["exactely","exactly"],["exacty","exactly"],["exacutable","executable"],["exagerate","exaggerate"],["exagerated","exaggerated"],["exagerates","exaggerates"],["exagerating","exaggerating"],["exagerrate","exaggerate"],["exagerrated","exaggerated"],["exagerrates","exaggerates"],["exagerrating","exaggerating"],["exameple","example"],["exameples","examples"],["examied","examined"],["examinated","examined"],["examing","examining"],["examinining","examining"],["examle","example"],["examles","examples"],["examlpe","example"],["examlpes","examples"],["examnple","example"],["examnples","examples"],["exampel","example"],["exampeles","examples"],["exampels","examples"],["examplees","examples"],["examplifies","exemplifies"],["exampple","example"],["exampples","examples"],["exampt","exempt"],["exand","expand"],["exansive","expansive"],["exapansion","expansion"],["exapend","expand"],["exaplain","explain"],["exaplaination","explanation"],["exaplained","explained"],["exaplaining","explaining"],["exaplains","explains"],["exaplanation","explanation"],["exaplanations","explanations"],["exaple","example"],["exaples","examples"],["exapmle","example"],["exapmles","examples"],["exapnsion","expansion"],["exat","exact"],["exatcly","exactly"],["exatctly","exactly"],["exatly","exactly"],["exausted","exhausted"],["excact","exact"],["excactly","exactly"],["excahcnge","exchange"],["excahnge","exchange"],["excahnges","exchanges"],["excange","exchange"],["excape","escape"],["excaped","escaped"],["excapes","escapes"],["excat","exact"],["excating","exacting"],["excatly","exactly"],["exccute","execute"],["excecise","exercise"],["excecises","exercises"],["excecpt","except"],["excecption","exception"],["excecptional","exceptional"],["excecptions","exceptions"],["excectable","executable"],["excectables","executables"],["excecte","execute"],["excectedly","expectedly"],["excectes","executes"],["excecting","executing"],["excectional","exceptional"],["excective","executive"],["excectives","executives"],["excector","executor"],["excectors","executors"],["excects","expects"],["excecutable","executable"],["excecutables","executables"],["excecute","execute"],["excecuted","executed"],["excecutes","executes"],["excecuting","executing"],["excecution","execution"],["excecutions","executions"],["excecutive","executive"],["excecutives","executives"],["excecutor","executor"],["excecutors","executors"],["excecuts","executes"],["exced","exceed"],["excedded","exceeded"],["excedding","exceeding"],["excede","exceed"],["exceded","exceeded"],["excedeed","exceeded"],["excedes","exceeds"],["exceding","exceeding"],["exceeed","exceed"],["exceirpt","excerpt"],["exceirpts","excerpts"],["excelent","excellent"],["excell","excel"],["excellance","excellence"],["excellant","excellent"],["excells","excels"],["excempt","exempt"],["excempted","exempted"],["excemption","exemption"],["excemptions","exemptions"],["excempts","exempts"],["excentric","eccentric"],["excentricity","eccentricity"],["excentuating","accentuating"],["exceopt","exempt"],["exceopted","exempted"],["exceopts","exempts"],["exceotion","exemption"],["exceotions","exemptions"],["excepetion","exception"],["excepion","exception"],["excepional","exceptional"],["excepionally","exceptionally"],["excepions","exceptions"],["exceprt","excerpt"],["exceprts","excerpts"],["exceptation","expectation"],["exceptionnal","exceptional"],["exceptionss","exceptions"],["exceptionts","exceptions"],["excercise","exercise"],["excercised","exercised"],["excerciser","exerciser"],["excercises","exercises"],["excercising","exercising"],["excerise","exercise"],["exces","excess"],["excesed","exceeded"],["excesive","excessive"],["excesively","excessively"],["excesss","excess"],["excesv","excessive"],["excesvly","excessively"],["excetion","exception"],["excetional","exceptional"],["excetions","exceptions"],["excetpion","exception"],["excetpional","exceptional"],["excetpions","exceptions"],["excetption","exception"],["excetptional","exceptional"],["excetptions","exceptions"],["excetra","etcetera"],["excetutable","executable"],["excetutables","executables"],["excetute","execute"],["excetuted","executed"],["excetutes","executes"],["excetuting","executing"],["excetution","execution"],["excetutions","executions"],["excetutive","executive"],["excetutives","executives"],["excetutor","executor"],["excetutors","executors"],["exceuctable","executable"],["exceuctables","executables"],["exceucte","execute"],["exceucted","executed"],["exceuctes","executes"],["exceucting","executing"],["exceuction","execution"],["exceuctions","executions"],["exceuctive","executive"],["exceuctives","executives"],["exceuctor","executor"],["exceuctors","executors"],["exceutable","executable"],["exceutables","executables"],["exceute","execute"],["exceuted","executed"],["exceutes","executes"],["exceuting","executing"],["exceution","execution"],["exceutions","executions"],["exceutive","executive"],["exceutives","executives"],["exceutor","executor"],["exceutors","executors"],["excewption","exception"],["excewptional","exceptional"],["excewptions","exceptions"],["exchage","exchange"],["exchaged","exchanged"],["exchages","exchanges"],["exchaging","exchanging"],["exchagne","exchange"],["exchagned","exchanged"],["exchagnes","exchanges"],["exchagnge","exchange"],["exchagnged","exchanged"],["exchagnges","exchanges"],["exchagnging","exchanging"],["exchagning","exchanging"],["exchanage","exchange"],["exchanaged","exchanged"],["exchanages","exchanges"],["exchanaging","exchanging"],["exchance","exchange"],["exchanced","exchanged"],["exchances","exchanges"],["exchanche","exchange"],["exchanched","exchanged"],["exchanches","exchanges"],["exchanching","exchanging"],["exchancing","exchanging"],["exchane","exchange"],["exchaned","exchanged"],["exchanes","exchanges"],["exchangable","exchangeable"],["exchaning","exchanging"],["exchaust","exhaust"],["exchausted","exhausted"],["exchausting","exhausting"],["exchaustive","exhaustive"],["exchausts","exhausts"],["exchenge","exchange"],["exchenged","exchanged"],["exchenges","exchanges"],["exchenging","exchanging"],["exchnage","exchange"],["exchnaged","exchanged"],["exchnages","exchanges"],["exchnaging","exchanging"],["exchng","exchange"],["exchngd","exchanged"],["exchnge","exchange"],["exchnged","exchanged"],["exchnges","exchanges"],["exchnging","exchanging"],["exchngng","exchanging"],["exchngs","exchanges"],["exciation","excitation"],["excipt","except"],["exciption","exception"],["exciptions","exceptions"],["excist","exist"],["excisted","existed"],["excisting","existing"],["excitment","excitement"],["exclamantion","exclamation"],["excludde","exclude"],["excludind","excluding"],["exclusiv","exclusive"],["exclusivelly","exclusively"],["exclusivly","exclusively"],["exclusivs","exclusives"],["excluslvely","exclusively"],["exclusuive","exclusive"],["exclusuively","exclusively"],["exclusuives","exclusives"],["excpect","expect"],["excpected","expected"],["excpecting","expecting"],["excpects","expects"],["excpeption","exception"],["excpet","except"],["excpetion","exception"],["excpetional","exceptional"],["excpetions","exceptions"],["excplicit","explicit"],["excplicitly","explicitly"],["excplict","explicit"],["excplictly","explicitly"],["excract","extract"],["exctacted","extracted"],["exctract","extract"],["exctracted","extracted"],["exctracting","extracting"],["exctraction","extraction"],["exctractions","extractions"],["exctractor","extractor"],["exctractors","extractors"],["exctracts","extracts"],["exculde","exclude"],["exculding","excluding"],["exculsive","exclusive"],["exculsively","exclusively"],["exculsivly","exclusively"],["excutable","executable"],["excutables","executables"],["excute","execute"],["excuted","executed"],["excutes","executes"],["excuting","executing"],["excution","execution"],["execeed","exceed"],["execeeded","exceeded"],["execeeds","exceeds"],["exeception","exception"],["execeptions","exceptions"],["execising","exercising"],["execption","exception"],["execptions","exceptions"],["exectable","executable"],["exection","execution"],["exections","executions"],["exectuable","executable"],["exectuableness","executableness"],["exectuables","executables"],["exectued","executed"],["exectuion","execution"],["exectuions","executions"],["execture","execute"],["exectured","executed"],["exectures","executes"],["execturing","executing"],["exectute","execute"],["exectuted","executed"],["exectutes","executes"],["exectution","execution"],["exectutions","executions"],["execuable","executable"],["execuables","executables"],["execuatable","executable"],["execuatables","executables"],["execuatble","executable"],["execuatbles","executables"],["execuate","execute"],["execuated","executed"],["execuates","executes"],["execuation","execution"],["execuations","executions"],["execubale","executable"],["execubales","executables"],["execucte","execute"],["execucted","executed"],["execuctes","executes"],["execuction","execution"],["execuctions","executions"],["execuctor","executor"],["execuctors","executors"],["execude","execute"],["execuded","executed"],["execudes","executes"],["execue","execute"],["execued","executed"],["execues","executes"],["execuet","execute"],["execuetable","executable"],["execuetd","executed"],["execuete","execute"],["execueted","executed"],["execuetes","executes"],["execuets","executes"],["execuing","executing"],["execuion","execution"],["execuions","executions"],["execuitable","executable"],["execuitables","executables"],["execuite","execute"],["execuited","executed"],["execuites","executes"],["execuiting","executing"],["execuition","execution"],["execuitions","executions"],["execulatble","executable"],["execulatbles","executables"],["execultable","executable"],["execultables","executables"],["execulusive","exclusive"],["execune","execute"],["execuned","executed"],["execunes","executes"],["execunting","executing"],["execurable","executable"],["execurables","executables"],["execure","execute"],["execured","executed"],["execures","executes"],["execusion","execution"],["execusions","executions"],["execusive","exclusive"],["execustion","execution"],["execustions","executions"],["execut","execute"],["executabable","executable"],["executabables","executables"],["executabe","executable"],["executabel","executable"],["executabels","executables"],["executabes","executables"],["executablble","executable"],["executabnle","executable"],["executabnles","executables"],["executation","execution"],["executations","executions"],["executbale","executable"],["executbales","executables"],["executble","executable"],["executbles","executables"],["executd","executed"],["executding","executing"],["executeable","executable"],["executeables","executables"],["executible","executable"],["executign","executing"],["executng","executing"],["executre","execute"],["executred","executed"],["executres","executes"],["executs","executes"],["executting","executing"],["executtion","execution"],["executtions","executions"],["executuable","executable"],["executuables","executables"],["executuble","executable"],["executubles","executables"],["executue","execute"],["executued","executed"],["executues","executes"],["executuing","executing"],["executuion","execution"],["executuions","executions"],["executung","executing"],["executuon","execution"],["executuons","executions"],["executute","execute"],["execututed","executed"],["execututes","executes"],["executution","execution"],["execututions","executions"],["exeed","exceed"],["exeeding","exceeding"],["exeedingly","exceedingly"],["exeeds","exceeds"],["exelent","excellent"],["exellent","excellent"],["exempel","example"],["exempels","examples"],["exemple","example"],["exemples","examples"],["exended","extended"],["exension","extension"],["exensions","extensions"],["exent","extent"],["exentended","extended"],["exepct","expect"],["exepcted","expected"],["exepcts","expects"],["exepect","expect"],["exepectation","expectation"],["exepectations","expectations"],["exepected","expected"],["exepectedly","expectedly"],["exepecting","expecting"],["exepects","expects"],["exepriment","experiment"],["exeprimental","experimental"],["exeptional","exceptional"],["exeptions","exceptions"],["exeqution","execution"],["exerbate","exacerbate"],["exerbated","exacerbated"],["exerciese","exercise"],["exerciesed","exercised"],["exercieses","exercises"],["exerciesing","exercising"],["exercize","exercise"],["exerimental","experimental"],["exerpt","excerpt"],["exerpts","excerpts"],["exersize","exercise"],["exersizes","exercises"],["exerternal","external"],["exeucte","execute"],["exeucted","executed"],["exeuctes","executes"],["exeution","execution"],["exexutable","executable"],["exhalted","exalted"],["exhange","exchange"],["exhanged","exchanged"],["exhanges","exchanges"],["exhanging","exchanging"],["exhaused","exhausted"],["exhautivity","exhaustivity"],["exhcuast","exhaust"],["exhcuasted","exhausted"],["exhibtion","exhibition"],["exhist","exist"],["exhistance","existence"],["exhisted","existed"],["exhistence","existence"],["exhisting","existing"],["exhists","exists"],["exhostive","exhaustive"],["exhustiveness","exhaustiveness"],["exibition","exhibition"],["exibitions","exhibitions"],["exicting","exciting"],["exinct","extinct"],["exipration","expiration"],["exipre","expire"],["exipred","expired"],["exipres","expires"],["exising","existing"],["exisit","exist"],["exisited","existed"],["exisitent","existent"],["exisiting","existing"],["exisitng","existing"],["exisits","exists"],["existance","existence"],["existant","existent"],["existatus","exitstatus"],["existencd","existence"],["existend","existed"],["existense","existence"],["existin","existing"],["existince","existence"],["existng","existing"],["existsing","existing"],["existting","existing"],["existung","existing"],["existy","exist"],["existying","existing"],["exitance","existence"],["exitation","excitation"],["exitations","excitations"],["exitt","exit"],["exitted","exited"],["exitting","exiting"],["exitts","exits"],["exixst","exist"],["exixt","exist"],["exlamation","exclamation"],["exlcude","exclude"],["exlcuding","excluding"],["exlcusion","exclusion"],["exlcusions","exclusions"],["exlcusive","exclusive"],["exlicit","explicit"],["exlicite","explicit"],["exlicitely","explicitly"],["exlicitly","explicitly"],["exliled","exiled"],["exlpoit","exploit"],["exlpoited","exploited"],["exlpoits","exploits"],["exlusion","exclusion"],["exlusionary","exclusionary"],["exlusions","exclusions"],["exlusive","exclusive"],["exlusively","exclusively"],["exmaine","examine"],["exmained","examined"],["exmaines","examines"],["exmaple","example"],["exmaples","examples"],["exmple","example"],["exmport","export"],["exnternal","external"],["exnternalities","externalities"],["exnternality","externality"],["exnternally","externally"],["exntry","entry"],["exolicit","explicit"],["exolicitly","explicitly"],["exonorate","exonerate"],["exort","export"],["exoskelaton","exoskeleton"],["expalin","explain"],["expaning","expanding"],["expanion","expansion"],["expanions","expansions"],["expanshion","expansion"],["expanshions","expansions"],["expanssion","expansion"],["exparation","expiration"],["expasion","expansion"],["expatriot","expatriate"],["expception","exception"],["expcetation","expectation"],["expcetations","expectations"],["expceted","expected"],["expceting","expecting"],["expcets","expects"],["expct","expect"],["expcted","expected"],["expctedly","expectedly"],["expcting","expecting"],["expeced","expected"],["expeceted","expected"],["expecially","especially"],["expectaion","expectation"],["expectaions","expectations"],["expectatoins","expectations"],["expectatons","expectations"],["expectd","expected"],["expecte","expected"],["expectes","expects"],["expection","exception"],["expections","exceptions"],["expeditonary","expeditionary"],["expeect","expect"],["expeected","expected"],["expeectedly","expectedly"],["expeecting","expecting"],["expeects","expects"],["expeense","expense"],["expeenses","expenses"],["expeensive","expensive"],["expeience","experience"],["expeienced","experienced"],["expeiences","experiences"],["expeiencing","experiencing"],["expeiment","experiment"],["expeimental","experimental"],["expeimentally","experimentally"],["expeimentation","experimentation"],["expeimentations","experimentations"],["expeimented","experimented"],["expeimentel","experimental"],["expeimentelly","experimentally"],["expeimenter","experimenter"],["expeimenters","experimenters"],["expeimenting","experimenting"],["expeiments","experiments"],["expeiriment","experiment"],["expeirimental","experimental"],["expeirimentally","experimentally"],["expeirimentation","experimentation"],["expeirimentations","experimentations"],["expeirimented","experimented"],["expeirimentel","experimental"],["expeirimentelly","experimentally"],["expeirimenter","experimenter"],["expeirimenters","experimenters"],["expeirimenting","experimenting"],["expeiriments","experiments"],["expell","expel"],["expells","expels"],["expement","experiment"],["expemental","experimental"],["expementally","experimentally"],["expementation","experimentation"],["expementations","experimentations"],["expemented","experimented"],["expementel","experimental"],["expementelly","experimentally"],["expementer","experimenter"],["expementers","experimenters"],["expementing","experimenting"],["expements","experiments"],["expemplar","exemplar"],["expemplars","exemplars"],["expemplary","exemplary"],["expempt","exempt"],["expempted","exempted"],["expemt","exempt"],["expemted","exempted"],["expemtion","exemption"],["expemtions","exemptions"],["expemts","exempts"],["expence","expense"],["expences","expenses"],["expencive","expensive"],["expendeble","expendable"],["expepect","expect"],["expepected","expected"],["expepectedly","expectedly"],["expepecting","expecting"],["expepects","expects"],["expepted","expected"],["expeptedly","expectedly"],["expepting","expecting"],["expeption","exception"],["expeptions","exceptions"],["expepts","expects"],["experament","experiment"],["experamental","experimental"],["experamentally","experimentally"],["experamentation","experimentation"],["experamentations","experimentations"],["experamented","experimented"],["experamentel","experimental"],["experamentelly","experimentally"],["experamenter","experimenter"],["experamenters","experimenters"],["experamenting","experimenting"],["experaments","experiments"],["experation","expiration"],["expercting","expecting"],["expercts","expects"],["expereince","experience"],["expereinced","experienced"],["expereinces","experiences"],["expereincing","experiencing"],["experement","experiment"],["experemental","experimental"],["experementally","experimentally"],["experementation","experimentation"],["experementations","experimentations"],["experemented","experimented"],["experementel","experimental"],["experementelly","experimentally"],["experementer","experimenter"],["experementers","experimenters"],["experementing","experimenting"],["experements","experiments"],["experence","experience"],["experenced","experienced"],["experences","experiences"],["experencing","experiencing"],["experes","express"],["experesed","expressed"],["experesion","expression"],["experesions","expressions"],["experess","express"],["experessed","expressed"],["experesses","expresses"],["experessing","expressing"],["experession's","expression's"],["experession","expression"],["experessions","expressions"],["experiance","experience"],["experianced","experienced"],["experiances","experiences"],["experiancial","experiential"],["experiancing","experiencing"],["experiansial","experiential"],["experiantial","experiential"],["experiation","expiration"],["experiations","expirations"],["experice","experience"],["expericed","experienced"],["experices","experiences"],["expericing","experiencing"],["experiement","experiment"],["experienshial","experiential"],["experiensial","experiential"],["experies","expires"],["experim","experiment"],["experimal","experimental"],["experimally","experimentally"],["experimanent","experiment"],["experimanental","experimental"],["experimanentally","experimentally"],["experimanentation","experimentation"],["experimanentations","experimentations"],["experimanented","experimented"],["experimanentel","experimental"],["experimanentelly","experimentally"],["experimanenter","experimenter"],["experimanenters","experimenters"],["experimanenting","experimenting"],["experimanents","experiments"],["experimanet","experiment"],["experimanetal","experimental"],["experimanetally","experimentally"],["experimanetation","experimentation"],["experimanetations","experimentations"],["experimaneted","experimented"],["experimanetel","experimental"],["experimanetelly","experimentally"],["experimaneter","experimenter"],["experimaneters","experimenters"],["experimaneting","experimenting"],["experimanets","experiments"],["experimant","experiment"],["experimantal","experimental"],["experimantally","experimentally"],["experimantation","experimentation"],["experimantations","experimentations"],["experimanted","experimented"],["experimantel","experimental"],["experimantelly","experimentally"],["experimanter","experimenter"],["experimanters","experimenters"],["experimanting","experimenting"],["experimants","experiments"],["experimation","experimentation"],["experimations","experimentations"],["experimdnt","experiment"],["experimdntal","experimental"],["experimdntally","experimentally"],["experimdntation","experimentation"],["experimdntations","experimentations"],["experimdnted","experimented"],["experimdntel","experimental"],["experimdntelly","experimentally"],["experimdnter","experimenter"],["experimdnters","experimenters"],["experimdnting","experimenting"],["experimdnts","experiments"],["experimed","experimented"],["experimel","experimental"],["experimelly","experimentally"],["experimen","experiment"],["experimenal","experimental"],["experimenally","experimentally"],["experimenat","experiment"],["experimenatal","experimental"],["experimenatally","experimentally"],["experimenatation","experimentation"],["experimenatations","experimentations"],["experimenated","experimented"],["experimenatel","experimental"],["experimenatelly","experimentally"],["experimenater","experimenter"],["experimenaters","experimenters"],["experimenating","experimenting"],["experimenation","experimentation"],["experimenations","experimentations"],["experimenats","experiments"],["experimened","experimented"],["experimenel","experimental"],["experimenelly","experimentally"],["experimener","experimenter"],["experimeners","experimenters"],["experimening","experimenting"],["experimens","experiments"],["experimentaal","experimental"],["experimentaally","experimentally"],["experimentaat","experiment"],["experimentaatl","experimental"],["experimentaatlly","experimentally"],["experimentaats","experiments"],["experimentaed","experimented"],["experimentaer","experimenter"],["experimentaing","experimenting"],["experimentaion","experimentation"],["experimentaions","experimentations"],["experimentait","experiment"],["experimentaital","experimental"],["experimentaitally","experimentally"],["experimentaited","experimented"],["experimentaiter","experimenter"],["experimentaiters","experimenters"],["experimentaitng","experimenting"],["experimentaiton","experimentation"],["experimentaitons","experimentations"],["experimentat","experimental"],["experimentatal","experimental"],["experimentatally","experimentally"],["experimentatation","experimentation"],["experimentatations","experimentations"],["experimentated","experimented"],["experimentater","experimenter"],["experimentatl","experimental"],["experimentatlly","experimentally"],["experimentatly","experimentally"],["experimentel","experimental"],["experimentelly","experimentally"],["experimentt","experiment"],["experimentted","experimented"],["experimentter","experimenter"],["experimentters","experimenters"],["experimentts","experiments"],["experimer","experimenter"],["experimers","experimenters"],["experimet","experiment"],["experimetal","experimental"],["experimetally","experimentally"],["experimetation","experimentation"],["experimetations","experimentations"],["experimeted","experimented"],["experimetel","experimental"],["experimetelly","experimentally"],["experimetent","experiment"],["experimetental","experimental"],["experimetentally","experimentally"],["experimetentation","experimentation"],["experimetentations","experimentations"],["experimetented","experimented"],["experimetentel","experimental"],["experimetentelly","experimentally"],["experimetenter","experimenter"],["experimetenters","experimenters"],["experimetenting","experimenting"],["experimetents","experiments"],["experimeter","experimenter"],["experimeters","experimenters"],["experimeting","experimenting"],["experimetn","experiment"],["experimetnal","experimental"],["experimetnally","experimentally"],["experimetnation","experimentation"],["experimetnations","experimentations"],["experimetned","experimented"],["experimetnel","experimental"],["experimetnelly","experimentally"],["experimetner","experimenter"],["experimetners","experimenters"],["experimetning","experimenting"],["experimetns","experiments"],["experimets","experiments"],["experiming","experimenting"],["experimint","experiment"],["experimintal","experimental"],["experimintally","experimentally"],["experimintation","experimentation"],["experimintations","experimentations"],["experiminted","experimented"],["experimintel","experimental"],["experimintelly","experimentally"],["experiminter","experimenter"],["experiminters","experimenters"],["experiminting","experimenting"],["experimints","experiments"],["experimment","experiment"],["experimmental","experimental"],["experimmentally","experimentally"],["experimmentation","experimentation"],["experimmentations","experimentations"],["experimmented","experimented"],["experimmentel","experimental"],["experimmentelly","experimentally"],["experimmenter","experimenter"],["experimmenters","experimenters"],["experimmenting","experimenting"],["experimments","experiments"],["experimnet","experiment"],["experimnetal","experimental"],["experimnetally","experimentally"],["experimnetation","experimentation"],["experimnetations","experimentations"],["experimneted","experimented"],["experimnetel","experimental"],["experimnetelly","experimentally"],["experimneter","experimenter"],["experimneters","experimenters"],["experimneting","experimenting"],["experimnets","experiments"],["experimnt","experiment"],["experimntal","experimental"],["experimntally","experimentally"],["experimntation","experimentation"],["experimntations","experimentations"],["experimnted","experimented"],["experimntel","experimental"],["experimntelly","experimentally"],["experimnter","experimenter"],["experimnters","experimenters"],["experimnting","experimenting"],["experimnts","experiments"],["experims","experiments"],["experimten","experiment"],["experimtenal","experimental"],["experimtenally","experimentally"],["experimtenation","experimentation"],["experimtenations","experimentations"],["experimtened","experimented"],["experimtenel","experimental"],["experimtenelly","experimentally"],["experimtener","experimenter"],["experimteners","experimenters"],["experimtening","experimenting"],["experimtens","experiments"],["experinece","experience"],["experineced","experienced"],["experinement","experiment"],["experinemental","experimental"],["experinementally","experimentally"],["experinementation","experimentation"],["experinementations","experimentations"],["experinemented","experimented"],["experinementel","experimental"],["experinementelly","experimentally"],["experinementer","experimenter"],["experinementers","experimenters"],["experinementing","experimenting"],["experinements","experiments"],["experiration","expiration"],["experirations","expirations"],["expermenet","experiment"],["expermenetal","experimental"],["expermenetally","experimentally"],["expermenetation","experimentation"],["expermenetations","experimentations"],["expermeneted","experimented"],["expermenetel","experimental"],["expermenetelly","experimentally"],["expermeneter","experimenter"],["expermeneters","experimenters"],["expermeneting","experimenting"],["expermenets","experiments"],["experment","experiment"],["expermental","experimental"],["expermentally","experimentally"],["expermentation","experimentation"],["expermentations","experimentations"],["expermented","experimented"],["expermentel","experimental"],["expermentelly","experimentally"],["expermenter","experimenter"],["expermenters","experimenters"],["expermenting","experimenting"],["experments","experiments"],["expermient","experiment"],["expermiental","experimental"],["expermientally","experimentally"],["expermientation","experimentation"],["expermientations","experimentations"],["expermiented","experimented"],["expermientel","experimental"],["expermientelly","experimentally"],["expermienter","experimenter"],["expermienters","experimenters"],["expermienting","experimenting"],["expermients","experiments"],["expermiment","experiment"],["expermimental","experimental"],["expermimentally","experimentally"],["expermimentation","experimentation"],["expermimentations","experimentations"],["expermimented","experimented"],["expermimentel","experimental"],["expermimentelly","experimentally"],["expermimenter","experimenter"],["expermimenters","experimenters"],["expermimenting","experimenting"],["expermiments","experiments"],["experminent","experiment"],["experminental","experimental"],["experminentally","experimentally"],["experminentation","experimentation"],["experminentations","experimentations"],["experminents","experiments"],["expernal","external"],["expers","express"],["expersed","expressed"],["expersing","expressing"],["expersion","expression"],["expersions","expressions"],["expersive","expensive"],["experss","express"],["experssed","expressed"],["expersses","expresses"],["experssing","expressing"],["experssion","expression"],["experssions","expressions"],["expese","expense"],["expeses","expenses"],["expesive","expensive"],["expesnce","expense"],["expesnces","expenses"],["expesncive","expensive"],["expess","express"],["expessed","expressed"],["expesses","expresses"],["expessing","expressing"],["expession","expression"],["expessions","expressions"],["expest","expect"],["expested","expected"],["expestedly","expectedly"],["expesting","expecting"],["expetancy","expectancy"],["expetation","expectation"],["expetc","expect"],["expetced","expected"],["expetcedly","expectedly"],["expetcing","expecting"],["expetcs","expects"],["expetct","expect"],["expetcted","expected"],["expetctedly","expectedly"],["expetcting","expecting"],["expetcts","expects"],["expetect","expect"],["expetected","expected"],["expetectedly","expectedly"],["expetecting","expecting"],["expetectly","expectedly"],["expetects","expects"],["expeted","expected"],["expetedly","expectedly"],["expetiment","experiment"],["expetimental","experimental"],["expetimentally","experimentally"],["expetimentation","experimentation"],["expetimentations","experimentations"],["expetimented","experimented"],["expetimentel","experimental"],["expetimentelly","experimentally"],["expetimenter","experimenter"],["expetimenters","experimenters"],["expetimenting","experimenting"],["expetiments","experiments"],["expeting","expecting"],["expetion","exception"],["expetional","exceptional"],["expetions","exceptions"],["expets","expects"],["expewriment","experiment"],["expewrimental","experimental"],["expewrimentally","experimentally"],["expewrimentation","experimentation"],["expewrimentations","experimentations"],["expewrimented","experimented"],["expewrimentel","experimental"],["expewrimentelly","experimentally"],["expewrimenter","experimenter"],["expewrimenters","experimenters"],["expewrimenting","experimenting"],["expewriments","experiments"],["expexct","expect"],["expexcted","expected"],["expexctedly","expectedly"],["expexcting","expecting"],["expexcts","expects"],["expexnasion","expansion"],["expexnasions","expansions"],["expext","expect"],["expexted","expected"],["expextedly","expectedly"],["expexting","expecting"],["expexts","expects"],["expicit","explicit"],["expicitly","explicitly"],["expidition","expedition"],["expiditions","expeditions"],["expierence","experience"],["expierenced","experienced"],["expierences","experiences"],["expierience","experience"],["expieriences","experiences"],["expilicitely","explicitly"],["expireitme","expiretime"],["expiriation","expiration"],["expirie","expire"],["expiried","expired"],["expirience","experience"],["expiriences","experiences"],["expirimental","experimental"],["expiriy","expiry"],["explaination","explanation"],["explainations","explanations"],["explainatory","explanatory"],["explaind","explained"],["explanaiton","explanation"],["explanaitons","explanations"],["explane","explain"],["explaned","explained"],["explanes","explains"],["explaning","explaining"],["explantion","explanation"],["explantions","explanations"],["explcit","explicit"],["explecit","explicit"],["explecitely","explicitly"],["explecitily","explicitly"],["explecitly","explicitly"],["explenation","explanation"],["explicat","explicate"],["explicilt","explicit"],["explicilty","explicitly"],["explicitelly","explicitly"],["explicitely","explicitly"],["explicitily","explicitly"],["explicity","explicitly"],["explicityly","explicitly"],["explict","explicit"],["explictely","explicitly"],["explictily","explicitly"],["explictly","explicitly"],["explin","explain"],["explination","explanation"],["explinations","explanations"],["explined","explained"],["explins","explains"],["explit","explicit"],["explitictly","explicitly"],["explitit","explicit"],["explitly","explicitly"],["explizit","explicit"],["explizitly","explicitly"],["exploititive","exploitative"],["expoed","exposed"],["expoent","exponent"],["expoential","exponential"],["expoentially","exponentially"],["expoentntial","exponential"],["expoerted","exported"],["expoit","exploit"],["expoitation","exploitation"],["expoited","exploited"],["expoits","exploits"],["expolde","explode"],["exponant","exponent"],["exponantation","exponentiation"],["exponantially","exponentially"],["exponantialy","exponentially"],["exponants","exponents"],["exponentation","exponentiation"],["exponentialy","exponentially"],["exponentiel","exponential"],["exponentiell","exponential"],["exponetial","exponential"],["exporession","expression"],["expors","exports"],["expport","export"],["exppressed","expressed"],["expres","express"],["expresed","expressed"],["expresing","expressing"],["expresion","expression"],["expresions","expressions"],["expressable","expressible"],["expressino","expression"],["expresso","espresso"],["expresss","express"],["expresssion","expression"],["expresssions","expressions"],["exprience","experience"],["exprienced","experienced"],["expriences","experiences"],["exprimental","experimental"],["expropiated","expropriated"],["expropiation","expropriation"],["exprot","export"],["exproted","exported"],["exproting","exporting"],["exprots","exports"],["exprted","exported"],["exptected","expected"],["exra","extra"],["exract","extract"],["exressed","expressed"],["exression","expression"],["exsistence","existence"],["exsistent","existent"],["exsisting","existing"],["exsists","exists"],["exsiting","existing"],["exspect","expect"],["exspected","expected"],["exspectedly","expectedly"],["exspecting","expecting"],["exspects","expects"],["exspense","expense"],["exspensed","expensed"],["exspenses","expenses"],["exstacy","ecstasy"],["exsted","existed"],["exsting","existing"],["exstream","extreme"],["exsts","exists"],["extaction","extraction"],["extactly","exactly"],["extacy","ecstasy"],["extarnal","external"],["extarnally","externally"],["extatic","ecstatic"],["extedn","extend"],["extedned","extended"],["extedner","extender"],["extedners","extenders"],["extedns","extends"],["extemely","extremely"],["exten","extent"],["extenal","external"],["extendded","extended"],["extendet","extended"],["extendsions","extensions"],["extened","extended"],["exteneded","extended"],["extenisble","extensible"],["extennsions","extensions"],["extensability","extensibility"],["extensiable","extensible"],["extensibity","extensibility"],["extensilbe","extensible"],["extensiones","extensions"],["extensivly","extensively"],["extenson","extension"],["extenstion","extension"],["extenstions","extensions"],["extented","extended"],["extention","extension"],["extentions","extensions"],["extepect","expect"],["extepecting","expecting"],["extepects","expects"],["exteral","external"],["extered","exerted"],["extereme","extreme"],["exterme","extreme"],["extermest","extremest"],["extermist","extremist"],["extermists","extremists"],["extermly","extremely"],["extermporaneous","extemporaneous"],["externaly","externally"],["externel","external"],["externelly","externally"],["externels","externals"],["extesion","extension"],["extesions","extensions"],["extesnion","extension"],["extesnions","extensions"],["extimate","estimate"],["extimated","estimated"],["extimates","estimates"],["extimating","estimating"],["extimation","estimation"],["extimations","estimations"],["extimator","estimator"],["extimators","estimators"],["extist","exist"],["extit","exit"],["extnesion","extension"],["extrac","extract"],["extraced","extracted"],["extracing","extracting"],["extracter","extractor"],["extractet","extracted"],["extractino","extracting"],["extractins","extractions"],["extradiction","extradition"],["extraenous","extraneous"],["extranous","extraneous"],["extrapoliate","extrapolate"],["extrat","extract"],["extrated","extracted"],["extraterrestial","extraterrestrial"],["extraterrestials","extraterrestrials"],["extrates","extracts"],["extrating","extracting"],["extration","extraction"],["extrator","extractor"],["extrators","extractors"],["extrats","extracts"],["extravagent","extravagant"],["extraversion","extroversion"],["extravert","extrovert"],["extraverts","extroverts"],["extraxt","extract"],["extraxted","extracted"],["extraxting","extracting"],["extraxtors","extractors"],["extraxts","extracts"],["extream","extreme"],["extreamely","extremely"],["extreamily","extremely"],["extreamly","extremely"],["extreams","extremes"],["extreem","extreme"],["extreemly","extremely"],["extremaly","extremely"],["extremeley","extremely"],["extremelly","extremely"],["extrememe","extreme"],["extrememely","extremely"],["extrememly","extremely"],["extremeophile","extremophile"],["extremitys","extremities"],["extremly","extremely"],["extrenal","external"],["extrenally","externally"],["extrenaly","externally"],["extrime","extreme"],["extrimely","extremely"],["extrimly","extremely"],["extrmities","extremities"],["extrodinary","extraordinary"],["extrordinarily","extraordinarily"],["extrordinary","extraordinary"],["extry","entry"],["exturd","extrude"],["exturde","extrude"],["exturded","extruded"],["exturdes","extrudes"],["exturding","extruding"],["exuberent","exuberant"],["exucuted","executed"],["eyt","yet"],["ezdrop","eavesdrop"],["fability","facility"],["fabircate","fabricate"],["fabircated","fabricated"],["fabircates","fabricates"],["fabircatings","fabricating"],["fabircation","fabrication"],["facce","face"],["faciliate","facilitate"],["faciliated","facilitated"],["faciliates","facilitates"],["faciliating","facilitating"],["facilites","facilities"],["facilitiate","facilitate"],["facilitiates","facilitates"],["facilititate","facilitate"],["facillitate","facilitate"],["facillities","facilities"],["faciltate","facilitate"],["facilties","facilities"],["facinated","fascinated"],["facirity","facility"],["facist","fascist"],["facorite","favorite"],["facorites","favorites"],["facourite","favourite"],["facourites","favourites"],["facours","favours"],["factization","factorization"],["factorizaiton","factorization"],["factorys","factories"],["fadind","fading"],["faeture","feature"],["faetures","features"],["Fahrenheight","Fahrenheit"],["faield","failed"],["faild","failed"],["failded","failed"],["faile","failed"],["failer","failure"],["failes","fails"],["failicies","facilities"],["failicy","facility"],["failied","failed"],["failiure","failure"],["failiures","failures"],["failiver","failover"],["faill","fail"],["failled","failed"],["faillure","failure"],["failng","failing"],["failre","failure"],["failrue","failure"],["failture","failure"],["failue","failure"],["failuer","failure"],["failues","failures"],["failured","failed"],["faireness","fairness"],["fairoh","pharaoh"],["faiway","fairway"],["faiways","fairways"],["faktor","factor"],["faktored","factored"],["faktoring","factoring"],["faktors","factors"],["falg","flag"],["falgs","flags"],["falied","failed"],["faliure","failure"],["faliures","failures"],["fallabck","fallback"],["fallbck","fallback"],["fallhrough","fallthrough"],["fallthruogh","fallthrough"],["falltrough","fallthrough"],["falshed","flashed"],["falshes","flashes"],["falshing","flashing"],["falsly","falsely"],["falt","fault"],["falure","failure"],["familar","familiar"],["familes","families"],["familiies","families"],["familiy","family"],["familliar","familiar"],["familly","family"],["famlilies","families"],["famlily","family"],["famoust","famous"],["fanatism","fanaticism"],["fancyness","fanciness"],["Farenheight","Fahrenheit"],["Farenheit","Fahrenheit"],["faries","fairies"],["farmework","framework"],["fasade","facade"],["fasion","fashion"],["fasle","false"],["fassade","facade"],["fassinate","fascinate"],["fasterner","fastener"],["fasterners","fasteners"],["fastner","fastener"],["fastners","fasteners"],["fastr","faster"],["fatc","fact"],["fater","faster"],["fatig","fatigue"],["fatser","faster"],["fature","feature"],["faught","fought"],["fauilure","failure"],["fauilures","failures"],["fauture","feature"],["fautured","featured"],["fautures","features"],["fauturing","featuring"],["favoutrable","favourable"],["favuourites","favourites"],["faymus","famous"],["fcound","found"],["feasabile","feasible"],["feasability","feasibility"],["feasable","feasible"],["featchd","fetched"],["featched","fetched"],["featching","fetching"],["featchs","fetches"],["featchss","fetches"],["featchure","feature"],["featchured","featured"],["featchures","features"],["featchuring","featuring"],["featre","feature"],["featue","feature"],["featued","featured"],["featues","features"],["featur","feature"],["featurs","features"],["feautre","feature"],["feauture","feature"],["feautures","features"],["febbruary","February"],["febewary","February"],["februar","February"],["Febuary","February"],["Feburary","February"],["fecthing","fetching"],["fedality","fidelity"],["fedreally","federally"],["feeback","feedback"],["feeded","fed"],["feek","feel"],["feeks","feels"],["feetur","feature"],["feeture","feature"],["feild","field"],["feld","field"],["felisatus","felicitous"],["femminist","feminist"],["fempto","femto"],["feonsay","fianc\xE9e"],["fequency","frequency"],["feromone","pheromone"],["fertil","fertile"],["fertily","fertility"],["fetaure","feature"],["fetaures","features"],["fetchs","fetches"],["feture","feature"],["fetures","features"],["fewsha","fuchsia"],["fezent","pheasant"],["fhurter","further"],["fials","fails"],["fianite","finite"],["fianlly","finally"],["fibonaacci","Fibonacci"],["ficticious","fictitious"],["fictious","fictitious"],["fidality","fidelity"],["fiddley","fiddly"],["fidn","find"],["fied","field"],["fiedl","field"],["fiedled","fielded"],["fiedls","fields"],["fieid","field"],["fieldlst","fieldlist"],["fieled","field"],["fielesystem","filesystem"],["fielesystems","filesystems"],["fielname","filename"],["fielneame","filename"],["fiercly","fiercely"],["fightings","fighting"],["figurestyle","figurestyles"],["filal","final"],["fileand","file and"],["fileds","fields"],["fileld","field"],["filelds","fields"],["filenae","filename"],["filese","files"],["fileshystem","filesystem"],["fileshystems","filesystems"],["filesnames","filenames"],["filess","files"],["filesstem","filesystem"],["filessytem","filesystem"],["filessytems","filesystems"],["fileststem","filesystem"],["filesysems","filesystems"],["filesysthem","filesystem"],["filesysthems","filesystems"],["filesystmes","filesystems"],["filesystyem","filesystem"],["filesystyems","filesystems"],["filesytem","filesystem"],["filesytems","filesystems"],["filesytsem","filesystem"],["fileter","filter"],["filetest","file test"],["filetests","file tests"],["fileystem","filesystem"],["fileystems","filesystems"],["filiament","filament"],["fillay","fillet"],["fillement","filament"],["fillowing","following"],["fillung","filling"],["filnal","final"],["filname","filename"],["filp","flip"],["filpped","flipped"],["filpping","flipping"],["filps","flips"],["filse","files"],["filsystem","filesystem"],["filsystems","filesystems"],["filterd","filtered"],["filterig","filtering"],["filterin","filtering"],["filterring","filtering"],["filtersing","filtering"],["filterss","filters"],["filtype","filetype"],["filtypes","filetypes"],["fimilies","families"],["fimrware","firmware"],["fimware","firmware"],["finacial","financial"],["finailse","finalise"],["finailze","finalize"],["finallly","finally"],["finanace","finance"],["finanaced","financed"],["finanaces","finances"],["finanacially","financially"],["finanacier","financier"],["financialy","financially"],["finanize","finalize"],["finanlize","finalize"],["fincally","finally"],["finctionalities","functionalities"],["finctionality","functionality"],["finde","find"],["findn","find"],["findout","find out"],["finelly","finally"],["finess","finesse"],["fingeprint","fingerprint"],["finialization","finalization"],["finializing","finalizing"],["finilizes","finalizes"],["finisched","finished"],["finised","finished"],["finishied","finished"],["finishs","finishes"],["finitel","finite"],["finness","finesse"],["finnished","finished"],["finshed","finished"],["finshing","finishing"],["finsih","finish"],["finsihed","finished"],["finsihes","finishes"],["finsihing","finishing"],["finsished","finished"],["finxed","fixed"],["finxing","fixing"],["fiorget","forget"],["firday","Friday"],["firends","friends"],["firey","fiery"],["firmare","firmware"],["firmaware","firmware"],["firmawre","firmware"],["firmeare","firmware"],["firmeware","firmware"],["firmnware","firmware"],["firmwart","firmware"],["firmwear","firmware"],["firmwqre","firmware"],["firmwre","firmware"],["firmwware","firmware"],["firsr","first"],["firsth","first"],["firware","firmware"],["firwmare","firmware"],["fisionable","fissionable"],["fisisist","physicist"],["fisist","physicist"],["fisrt","first"],["fitering","filtering"],["fitler","filter"],["fitlers","filters"],["fivety","fifty"],["fixel","pixel"],["fixels","pixels"],["fixeme","fixme"],["fixwd","fixed"],["fizeek","physique"],["flacor","flavor"],["flacored","flavored"],["flacoring","flavoring"],["flacorings","flavorings"],["flacors","flavors"],["flacour","flavour"],["flacoured","flavoured"],["flacouring","flavouring"],["flacourings","flavourings"],["flacours","flavours"],["flaged","flagged"],["flages","flags"],["flagg","flag"],["flahsed","flashed"],["flahses","flashes"],["flahsing","flashing"],["flakyness","flakiness"],["flamable","flammable"],["flaot","float"],["flaoting","floating"],["flashflame","flashframe"],["flashig","flashing"],["flasing","flashing"],["flate","flat"],["flatened","flattened"],["flattend","flattened"],["flattenning","flattening"],["flawess","flawless"],["fle","file"],["flem","phlegm"],["Flemmish","Flemish"],["flewant","fluent"],["flexability","flexibility"],["flexable","flexible"],["flexibel","flexible"],["flexibele","flexible"],["flexibilty","flexibility"],["flext","flex"],["flie","file"],["fliter","filter"],["flitered","filtered"],["flitering","filtering"],["fliters","filters"],["floading-add","floating-add"],["floatation","flotation"],["floride","fluoride"],["floting","floating"],["flouride","fluoride"],["flourine","fluorine"],["flourishment","flourishing"],["flter","filter"],["fluctuand","fluctuant"],["flud","flood"],["fluorish","flourish"],["fluoroscent","fluorescent"],["fluroescent","fluorescent"],["flushs","flushes"],["flusing","flushing"],["focu","focus"],["focued","focused"],["focument","document"],["focuse","focus"],["focusf","focus"],["focuss","focus"],["focussed","focused"],["focusses","focuses"],["fof","for"],["foget","forget"],["fogot","forgot"],["fogotten","forgotten"],["fointers","pointers"],["foler","folder"],["folers","folders"],["folfer","folder"],["folfers","folders"],["folled","followed"],["foller","follower"],["follers","followers"],["follew","follow"],["follewed","followed"],["follewer","follower"],["follewers","followers"],["follewin","following"],["follewind","following"],["follewing","following"],["follewinwg","following"],["follewiong","following"],["follewiwng","following"],["follewong","following"],["follews","follows"],["follfow","follow"],["follfowed","followed"],["follfower","follower"],["follfowers","followers"],["follfowin","following"],["follfowind","following"],["follfowing","following"],["follfowinwg","following"],["follfowiong","following"],["follfowiwng","following"],["follfowong","following"],["follfows","follows"],["follin","following"],["follind","following"],["follinwg","following"],["folliong","following"],["folliw","follow"],["folliwed","followed"],["folliwer","follower"],["folliwers","followers"],["folliwin","following"],["folliwind","following"],["folliwing","following"],["folliwinwg","following"],["folliwiong","following"],["folliwiwng","following"],["folliwng","following"],["folliwong","following"],["folliws","follows"],["folllow","follow"],["folllowed","followed"],["folllower","follower"],["folllowers","followers"],["folllowin","following"],["folllowind","following"],["folllowing","following"],["folllowinwg","following"],["folllowiong","following"],["folllowiwng","following"],["folllowong","following"],["follod","followed"],["folloeing","following"],["folloing","following"],["folloiwng","following"],["follolwing","following"],["follong","following"],["follos","follows"],["followes","follows"],["followig","following"],["followign","following"],["followin","following"],["followind","following"],["followint","following"],["followng","following"],["followwing","following"],["followwings","followings"],["folls","follows"],["follw","follow"],["follwed","followed"],["follwer","follower"],["follwers","followers"],["follwin","following"],["follwind","following"],["follwing","following"],["follwinwg","following"],["follwiong","following"],["follwiwng","following"],["follwo","follow"],["follwoe","follow"],["follwoed","followed"],["follwoeed","followed"],["follwoeer","follower"],["follwoeers","followers"],["follwoein","following"],["follwoeind","following"],["follwoeing","following"],["follwoeinwg","following"],["follwoeiong","following"],["follwoeiwng","following"],["follwoeong","following"],["follwoer","follower"],["follwoers","followers"],["follwoes","follows"],["follwoin","following"],["follwoind","following"],["follwoing","following"],["follwoinwg","following"],["follwoiong","following"],["follwoiwng","following"],["follwong","following"],["follwoong","following"],["follwos","follows"],["follwow","follow"],["follwowed","followed"],["follwower","follower"],["follwowers","followers"],["follwowin","following"],["follwowind","following"],["follwowing","following"],["follwowinwg","following"],["follwowiong","following"],["follwowiwng","following"],["follwowong","following"],["follwows","follows"],["follws","follows"],["follww","follow"],["follwwed","followed"],["follwwer","follower"],["follwwers","followers"],["follwwin","following"],["follwwind","following"],["follwwing","following"],["follwwinwg","following"],["follwwiong","following"],["follwwiwng","following"],["follwwong","following"],["follwws","follows"],["foloow","follow"],["foloowed","followed"],["foloower","follower"],["foloowers","followers"],["foloowin","following"],["foloowind","following"],["foloowing","following"],["foloowinwg","following"],["foloowiong","following"],["foloowiwng","following"],["foloowong","following"],["foloows","follows"],["folow","follow"],["folowed","followed"],["folower","follower"],["folowers","followers"],["folowin","following"],["folowind","following"],["folowing","following"],["folowinwg","following"],["folowiong","following"],["folowiwng","following"],["folowong","following"],["folows","follows"],["foloww","follow"],["folowwed","followed"],["folowwer","follower"],["folowwers","followers"],["folowwin","following"],["folowwind","following"],["folowwing","following"],["folowwinwg","following"],["folowwiong","following"],["folowwiwng","following"],["folowwong","following"],["folowws","follows"],["folse","false"],["folwo","follow"],["folwoed","followed"],["folwoer","follower"],["folwoers","followers"],["folwoin","following"],["folwoind","following"],["folwoing","following"],["folwoinwg","following"],["folwoiong","following"],["folwoiwng","following"],["folwoong","following"],["folwos","follows"],["folx","folks"],["fom","from"],["fomat","format"],["fomated","formatted"],["fomater","formatter"],["fomates","formats"],["fomating","formatting"],["fomats","formats"],["fomatted","formatted"],["fomatter","formatter"],["fomatting","formatting"],["fomed","formed"],["fomrat","format"],["fomrated","formatted"],["fomrater","formatter"],["fomrating","formatting"],["fomrats","formats"],["fomratted","formatted"],["fomratter","formatter"],["fomratting","formatting"],["fomula","formula"],["fomulas","formula"],["fonction","function"],["fonctional","functional"],["fonctionalities","functionalities"],["fonctionality","functionality"],["fonctioning","functioning"],["fonctionnalies","functionalities"],["fonctionnalities","functionalities"],["fonctionnality","functionality"],["fonctions","functions"],["fonetic","phonetic"],["fontier","frontier"],["fontonfig","fontconfig"],["fontrier","frontier"],["fonud","found"],["foontnotes","footnotes"],["foootball","football"],["foorter","footer"],["footnoes","footnotes"],["footprinst","footprints"],["foound","found"],["foppy","floppy"],["foppys","floppies"],["foramatting","formatting"],["foramt","format"],["forat","format"],["forbad","forbade"],["forbbiden","forbidden"],["forbiden","forbidden"],["forbit","forbid"],["forbiten","forbidden"],["forbitten","forbidden"],["forcably","forcibly"],["forcast","forecast"],["forcasted","forecasted"],["forcaster","forecaster"],["forcasters","forecasters"],["forcasting","forecasting"],["forcasts","forecasts"],["forcot","forgot"],["forece","force"],["foreced","forced"],["foreces","forces"],["foregrond","foreground"],["foregronds","foregrounds"],["foreing","foreign"],["forementionned","aforementioned"],["forermly","formerly"],["forfiet","forfeit"],["forgeround","foreground"],["forgoten","forgotten"],["forground","foreground"],["forhead","forehead"],["foriegn","foreign"],["forld","fold"],["forlder","folder"],["forlders","folders"],["Formalhaut","Fomalhaut"],["formallize","formalize"],["formallized","formalized"],["formate","format"],["formated","formatted"],["formater","formatter"],["formaters","formatters"],["formates","formats"],["formath","format"],["formaths","formats"],["formating","formatting"],["formatteded","formatted"],["formattgin","formatting"],["formattind","formatting"],["formattings","formatting"],["formattring","formatting"],["formattted","formatted"],["formattting","formatting"],["formelly","formerly"],["formely","formerly"],["formend","formed"],["formidible","formidable"],["formmatted","formatted"],["formost","foremost"],["formt","format"],["formua","formula"],["formual","formula"],["formuale","formulae"],["formuals","formulas"],["fornat","format"],["fornated","formatted"],["fornater","formatter"],["fornats","formats"],["fornatted","formatted"],["fornatter","formatter"],["forot","forgot"],["forotten","forgotten"],["forr","for"],["forsaw","foresaw"],["forse","force"],["forseeable","foreseeable"],["fortan","fortran"],["fortat","format"],["forteen","fourteen"],["fortelling","foretelling"],["forthcominng","forthcoming"],["forthcomming","forthcoming"],["fortunaly","fortunately"],["fortunat","fortunate"],["fortunatelly","fortunately"],["fortunatly","fortunately"],["fortunetly","fortunately"],["forula","formula"],["forulas","formulas"],["forumla","formula"],["forumlas","formulas"],["forumula","formula"],["forumulas","formulas"],["forunate","fortunate"],["forunately","fortunately"],["forunner","forerunner"],["forutunate","fortunate"],["forutunately","fortunately"],["forver","forever"],["forwad","forward"],["forwaded","forwarded"],["forwading","forwarding"],["forwads","forwards"],["forwardig","forwarding"],["forwaring","forwarding"],["forwwarded","forwarded"],["foto","photo"],["fotograf","photograph"],["fotografic","photographic"],["fotografical","photographical"],["fotografy","photography"],["fotograph","photograph"],["fotography","photography"],["foucs","focus"],["foudn","found"],["foudning","founding"],["fougth","fought"],["foult","fault"],["foults","faults"],["foundaries","foundries"],["foundary","foundry"],["Foundland","Newfoundland"],["fourties","forties"],["fourty","forty"],["fouth","fourth"],["fouund","found"],["foward","forward"],["fowarded","forwarded"],["fowarding","forwarding"],["fowards","forwards"],["fprmat","format"],["fracional","fractional"],["fragement","fragment"],["fragementation","fragmentation"],["fragements","fragments"],["fragmant","fragment"],["fragmantation","fragmentation"],["fragmants","fragments"],["fragmenet","fragment"],["fragmenetd","fragmented"],["fragmeneted","fragmented"],["fragmeneting","fragmenting"],["fragmenets","fragments"],["fragmnet","fragment"],["frambuffer","framebuffer"],["framebufer","framebuffer"],["framei","frame"],["frament","fragment"],["framented","fragmented"],["framents","fragments"],["frametyp","frametype"],["framewoek","framework"],["framewoeks","frameworks"],["frameworkk","framework"],["framlayout","framelayout"],["framming","framing"],["framwework","framework"],["framwork","framework"],["framworks","frameworks"],["frane","frame"],["frankin","franklin"],["Fransiscan","Franciscan"],["Fransiscans","Franciscans"],["franzise","franchise"],["frecuencies","frequencies"],["frecuency","frequency"],["frecuent","frequent"],["frecuented","frequented"],["frecuently","frequently"],["frecuents","frequents"],["freecallrelpy","freecallreply"],["freedon","freedom"],["freedons","freedoms"],["freedum","freedom"],["freedums","freedoms"],["freee","free"],["freeed","freed"],["freezs","freezes"],["freind","friend"],["freindly","friendly"],["freqencies","frequencies"],["freqency","frequency"],["freqeuncies","frequencies"],["freqeuncy","frequency"],["freqiencies","frequencies"],["freqiency","frequency"],["freqquencies","frequencies"],["freqquency","frequency"],["frequancies","frequencies"],["frequancy","frequency"],["frequant","frequent"],["frequantly","frequently"],["frequences","frequencies"],["frequencey","frequency"],["frequenies","frequencies"],["frequentily","frequently"],["frequncies","frequencies"],["frequncy","frequency"],["freze","freeze"],["frezes","freezes"],["frgament","fragment"],["fricton","friction"],["fridey","Friday"],["frimware","firmware"],["frisday","Friday"],["frist","first"],["frition","friction"],["fritional","frictional"],["fritions","frictions"],["frmat","format"],["frmo","from"],["froce","force"],["frok","from"],["fromal","formal"],["fromat","format"],["fromated","formatted"],["fromates","formats"],["fromating","formatting"],["fromation","formation"],["fromats","formats"],["frome","from"],["fromed","formed"],["fromm","from"],["froms","forms"],["fromt","from"],["fromthe","from the"],["fronend","frontend"],["fronends","frontends"],["froniter","frontier"],["frontent","frontend"],["frontents","frontends"],["frop","drop"],["fropm","from"],["frops","drops"],["frowarded","forwarded"],["frowrad","forward"],["frowrading","forwarding"],["frowrads","forwards"],["frozee","frozen"],["fschk","fsck"],["FTBS","FTBFS"],["ftrunacate","ftruncate"],["fualt","fault"],["fualts","faults"],["fucntion","function"],["fucntional","functional"],["fucntionality","functionality"],["fucntioned","functioned"],["fucntioning","functioning"],["fucntions","functions"],["fuction","function"],["fuctionality","functionality"],["fuctiones","functioned"],["fuctioning","functioning"],["fuctionoid","functionoid"],["fuctions","functions"],["fuetherst","furthest"],["fuethest","furthest"],["fufill","fulfill"],["fufilled","fulfilled"],["fugure","figure"],["fugured","figured"],["fugures","figures"],["fule","file"],["fulfiled","fulfilled"],["fullfiled","fulfilled"],["fullfiling","fulfilling"],["fullfilled","fulfilled"],["fullfilling","fulfilling"],["fullfills","fulfills"],["fullly","fully"],["fulsh","flush"],["fuly","fully"],["fumction","function"],["fumctional","functional"],["fumctionally","functionally"],["fumctioned","functioned"],["fumctions","functions"],["funcation","function"],["funchtion","function"],["funchtional","functional"],["funchtioned","functioned"],["funchtioning","functioning"],["funchtionn","function"],["funchtionnal","functional"],["funchtionned","functioned"],["funchtionning","functioning"],["funchtionns","functions"],["funchtions","functions"],["funcion","function"],["funcions","functions"],["funciotn","function"],["funciotns","functions"],["funciton","function"],["funcitonal","functional"],["funcitonality","functionality"],["funcitonally","functionally"],["funcitoned","functioned"],["funcitoning","functioning"],["funcitons","functions"],["funcstions","functions"],["functiion","function"],["functiional","functional"],["functiionality","functionality"],["functiionally","functionally"],["functiioning","functioning"],["functiions","functions"],["functin","function"],["functinality","functionality"],["functino","function"],["functins","functions"],["functio","function"],["functionability","functionality"],["functionaility","functionality"],["functionailty","functionality"],["functionaily","functionality"],["functionallities","functionalities"],["functionallity","functionality"],["functionaltiy","functionality"],["functionalty","functionality"],["functionionalities","functionalities"],["functionionality","functionality"],["functionnal","functional"],["functionnalities","functionalities"],["functionnality","functionality"],["functionnaly","functionally"],["functionning","functioning"],["functionon","function"],["functionss","functions"],["functios","functions"],["functiosn","functions"],["functiton","function"],["functitonal","functional"],["functitonally","functionally"],["functitoned","functioned"],["functitons","functions"],["functon","function"],["functonal","functional"],["functonality","functionality"],["functoning","functioning"],["functons","functions"],["functtion","function"],["functtional","functional"],["functtionalities","functionalities"],["functtioned","functioned"],["functtioning","functioning"],["functtions","functions"],["funczion","function"],["fundametal","fundamental"],["fundametals","fundamentals"],["fundation","foundation"],["fundemantal","fundamental"],["fundemental","fundamental"],["fundementally","fundamentally"],["fundementals","fundamentals"],["funguses","fungi"],["funktion","function"],["funnnily","funnily"],["funtion","function"],["funtional","functional"],["funtionalities","functionalities"],["funtionality","functionality"],["funtionallity","functionality"],["funtionally","functionally"],["funtionalty","functionality"],["funtioning","functioning"],["funtions","functions"],["funvtion","function"],["funvtional","functional"],["funvtionalities","functionalities"],["funvtionality","functionality"],["funvtioned","functioned"],["funvtioning","functioning"],["funvtions","functions"],["funxtion","function"],["funxtional","functional"],["funxtionalities","functionalities"],["funxtionality","functionality"],["funxtioned","functioned"],["funxtioning","functioning"],["funxtions","functions"],["furether","further"],["furethermore","furthermore"],["furethest","furthest"],["furfill","fulfill"],["furher","further"],["furhermore","furthermore"],["furhest","furthest"],["furhter","further"],["furhtermore","furthermore"],["furhtest","furthest"],["furmalae","formulae"],["furmula","formula"],["furmulae","formulae"],["furnction","function"],["furnctional","functional"],["furnctions","functions"],["furneture","furniture"],["furser","further"],["fursermore","furthermore"],["furst","first"],["fursther","further"],["fursthermore","furthermore"],["fursthest","furthest"],["furter","further"],["furthemore","furthermore"],["furthermor","furthermore"],["furtherst","furthest"],["furthremore","furthermore"],["furthrest","furthest"],["furthur","further"],["furture","future"],["furure","future"],["furuther","further"],["furutre","future"],["furzzer","fuzzer"],["fuschia","fuchsia"],["fushed","flushed"],["fushing","flushing"],["futher","further"],["futherize","further"],["futhermore","furthermore"],["futrue","future"],["futrure","future"],["futture","future"],["fwe","few"],["fwirte","fwrite"],["fxed","fixed"],["fysical","physical"],["fysisist","physicist"],["fysisit","physicist"],["gabage","garbage"],["galatic","galactic"],["Galations","Galatians"],["gallaries","galleries"],["gallary","gallery"],["gallaxies","galaxies"],["gallleries","galleries"],["galllery","gallery"],["galllerys","galleries"],["galvinized","galvanized"],["Gameboy","Game Boy"],["ganbia","gambia"],["ganerate","generate"],["ganes","games"],["ganster","gangster"],["garabge","garbage"],["garantee","guarantee"],["garanteed","guaranteed"],["garanteeed","guaranteed"],["garantees","guarantees"],["garantied","guaranteed"],["garanty","guarantee"],["garbadge","garbage"],["garbage-dollected","garbage-collected"],["garbagge","garbage"],["garbarge","garbage"],["gard","guard"],["gardai","garda\xED"],["garentee","guarantee"],["garnison","garrison"],["garuantee","guarantee"],["garuanteed","guaranteed"],["garuantees","guarantees"],["garuantied","guaranteed"],["gatable","gateable"],["gateing","gating"],["gatherig","gathering"],["gatway","gateway"],["gauage","gauge"],["gauarana","guaran\xE1"],["gauarantee","guarantee"],["gauaranteed","guaranteed"],["gauarentee","guarantee"],["gauarenteed","guaranteed"],["gaurantee","guarantee"],["gauranteed","guaranteed"],["gauranteeing","guaranteeing"],["gaurantees","guarantees"],["gaurentee","guarantee"],["gaurenteed","guaranteed"],["gaurentees","guarantees"],["gaus'","Gauss'"],["gaus's","Gauss'"],["gausian","gaussian"],["geeneric","generic"],["geenrate","generate"],["geenrated","generated"],["geenrates","generates"],["geenration","generation"],["geenrational","generational"],["geeoteen","guillotine"],["geeral","general"],["gemetrical","geometrical"],["gemetry","geometry"],["gemoetry","geometry"],["gemometric","geometric"],["genarate","generate"],["genarated","generated"],["genarating","generating"],["genaration","generation"],["genearal","general"],["genearally","generally"],["genearted","generated"],["geneate","generate"],["geneated","generated"],["geneates","generates"],["geneating","generating"],["geneation","generation"],["geneological","genealogical"],["geneologies","genealogies"],["geneology","genealogy"],["generaates","generates"],["generaly","generally"],["generalyl","generally"],["generalyse","generalise"],["generater","generator"],["generaters","generators"],["generatig","generating"],["generatng","generating"],["generatting","generating"],["genereate","generate"],["genereated","generated"],["genereates","generates"],["genereating","generating"],["genered","generated"],["genereic","generic"],["generell","general"],["generelly","generally"],["genererate","generate"],["genererated","generated"],["genererater","generator"],["genererating","generating"],["genereration","generation"],["genereted","generated"],["generilise","generalise"],["generilised","generalised"],["generilises","generalises"],["generilize","generalize"],["generilized","generalized"],["generilizes","generalizes"],["generiously","generously"],["generla","general"],["generlaizes","generalizes"],["generlas","generals"],["generted","generated"],["generting","generating"],["genertion","generation"],["genertor","generator"],["genertors","generators"],["genialia","genitalia"],["genral","general"],["genralisation","generalisation"],["genralisations","generalisations"],["genralise","generalise"],["genralised","generalised"],["genralises","generalises"],["genralization","generalization"],["genralizations","generalizations"],["genralize","generalize"],["genralized","generalized"],["genralizes","generalizes"],["genrally","generally"],["genrals","generals"],["genrate","generate"],["genrated","generated"],["genrates","generates"],["genratet","generated"],["genrating","generating"],["genration","generation"],["genrations","generations"],["genrator","generator"],["genrators","generators"],["genreate","generate"],["genreated","generated"],["genreates","generates"],["genreating","generating"],["genreic","generic"],["genric","generic"],["genrics","generics"],["gental","gentle"],["genuin","genuine"],["geocentic","geocentric"],["geoemtries","geometries"],["geoemtry","geometry"],["geogcountry","geocountry"],["geographich","geographic"],["geographicial","geographical"],["geoio","geoip"],["geomertic","geometric"],["geomerties","geometries"],["geomerty","geometry"],["geomery","geometry"],["geometites","geometries"],["geometrician","geometer"],["geometricians","geometers"],["geometrie","geometry"],["geometrys","geometries"],["geomety","geometry"],["geometyr","geometry"],["geomitrically","geometrically"],["geomoetric","geometric"],["geomoetrically","geometrically"],["geomoetry","geometry"],["geomtery","geometry"],["geomtries","geometries"],["geomtry","geometry"],["geomtrys","geometries"],["georeferncing","georeferencing"],["geraff","giraffe"],["geraphics","graphics"],["gerat","great"],["gereating","generating"],["gerenate","generate"],["gerenated","generated"],["gerenates","generates"],["gerenating","generating"],["gerenation","generation"],["gerenations","generations"],["gerenic","generic"],["gerenics","generics"],["gererate","generate"],["gererated","generated"],["gerilla","guerrilla"],["gerneral","general"],["gernerally","generally"],["gerneraly","generally"],["gernerate","generate"],["gernerated","generated"],["gernerates","generates"],["gernerating","generating"],["gerneration","generation"],["gernerator","generator"],["gernerators","generators"],["gerneric","generic"],["gernerics","generics"],["gess","guess"],["get's","gets"],["get;s","gets"],["getfastproperyvalue","getfastpropertyvalue"],["getimezone","gettimezone"],["geting","getting"],["getlael","getlabel"],["getoe","ghetto"],["getoject","getobject"],["gettetx","gettext"],["gettter","getter"],["gettters","getters"],["getttext","gettext"],["getttime","gettime"],["getttimeofday","gettimeofday"],["gettting","getting"],["ggogled","Googled"],["Ghandi","Gandhi"],["ghostcript","ghostscript"],["ghostscritp","ghostscript"],["ghraphic","graphic"],["gien","given"],["gigibit","gigabit"],["gilotine","guillotine"],["gilty","guilty"],["ginee","guinea"],["gingam","gingham"],["gioen","given"],["gir","git"],["giser","geyser"],["gisers","geysers"],["git-buildpackge","git-buildpackage"],["git-buildpackges","git-buildpackages"],["gitar","guitar"],["gitars","guitars"],["gitatributes","gitattributes"],["giveing","giving"],["givveing","giving"],["givven","given"],["givving","giving"],["glamourous","glamorous"],["glight","flight"],["gloab","globe"],["gloabal","global"],["gloabl","global"],["gloassaries","glossaries"],["gloassary","glossary"],["globablly","globally"],["globaly","globally"],["globbal","global"],["globel","global"],["glorfied","glorified"],["glpyh","glyph"],["glpyhs","glyphs"],["glyh","glyph"],["glyhs","glyphs"],["glyped","glyphed"],["glyphes","glyphs"],["glyping","glyphing"],["glyserin","glycerin"],["gnawwed","gnawed"],["gneral","general"],["gnerally","generally"],["gnerals","generals"],["gnerate","generate"],["gnerated","generated"],["gnerates","generates"],["gnerating","generating"],["gneration","generation"],["gnerations","generations"],["gneric","generic"],["gnorung","ignoring"],["gobal","global"],["gocde","gcode"],["godess","goddess"],["godesses","goddesses"],["Godounov","Godunov"],["goemetries","geometries"],["goess","goes"],["gogether","together"],["goign","going"],["goin","going"],["goind","going"],["golbal","global"],["golbally","globally"],["golbaly","globally"],["gonig","going"],["gool","ghoul"],["gord","gourd"],["gormay","gourmet"],["gorry","gory"],["gorup","group"],["goruped","grouped"],["goruping","grouping"],["gorups","groups"],["gost","ghost"],["Gothenberg","Gothenburg"],["Gottleib","Gottlieb"],["goup","group"],["gouped","grouped"],["goups","groups"],["gouvener","governor"],["govement","government"],["govenment","government"],["govenor","governor"],["govenrment","government"],["goverance","governance"],["goverment","government"],["govermental","governmental"],["govermnment","government"],["governer","governor"],["governmnet","government"],["govorment","government"],["govormental","governmental"],["govornment","government"],["grabage","garbage"],["grabed","grabbed"],["grabing","grabbing"],["gracefull","graceful"],["gracefuly","gracefully"],["gradiants","gradients"],["gradualy","gradually"],["graet","great"],["grafics","graphics"],["grafitti","graffiti"],["grahic","graphic"],["grahical","graphical"],["grahics","graphics"],["grahpic","graphic"],["grahpical","graphical"],["grahpics","graphics"],["gramar","grammar"],["gramatically","grammatically"],["grammartical","grammatical"],["grammaticaly","grammatically"],["grammer","grammar"],["grammers","grammars"],["granchildren","grandchildren"],["granilarity","granularity"],["granuality","granularity"],["granualtiry","granularity"],["granulatiry","granularity"],["grapgics","graphics"],["graphcis","graphics"],["graphis","graphics"],["grapic","graphic"],["grapical","graphical"],["grapics","graphics"],["grat","great"],["gratefull","grateful"],["gratuitious","gratuitous"],["grbber","grabber"],["greatful","grateful"],["greatfully","gratefully"],["greather","greater"],["greif","grief"],["grephic","graphic"],["grestest","greatest"],["greysacles","greyscales"],["gridles","griddles"],["grigorian","Gregorian"],["grobal","global"],["grobally","globally"],["grometry","geometry"],["grooup","group"],["groouped","grouped"],["groouping","grouping"],["grooups","groups"],["gropu","group"],["groubpy","groupby"],["groupd","grouped"],["groupping","grouping"],["groupt","grouped"],["grranted","granted"],["gruop","group"],["gruopd","grouped"],["gruops","groups"],["grup","group"],["gruped","grouped"],["gruping","grouping"],["grups","groups"],["grwo","grow"],["guage","gauge"],["guarante","guarantee"],["guaranted","guaranteed"],["guaranteey","guaranty"],["guaranteing","guaranteeing"],["guarantes","guarantees"],["guarantie","guarantee"],["guarbage","garbage"],["guareded","guarded"],["guareente","guarantee"],["guareented","guaranteed"],["guareentee","guarantee"],["guareenteed","guaranteed"],["guareenteeing","guaranteeing"],["guareentees","guarantees"],["guareenteing","guaranteeing"],["guareentes","guarantees"],["guareenty","guaranty"],["guarente","guarantee"],["guarented","guaranteed"],["guarentee","guarantee"],["guarenteed","guaranteed"],["guarenteede","guarantee"],["guarenteeded","guaranteed"],["guarenteedeing","guaranteeing"],["guarenteedes","guarantees"],["guarenteedy","guaranty"],["guarenteeing","guaranteeing"],["guarenteer","guarantee"],["guarenteerd","guaranteed"],["guarenteering","guaranteeing"],["guarenteers","guarantees"],["guarentees","guarantees"],["guarenteing","guaranteeing"],["guarentes","guarantees"],["guarentie","guarantee"],["guarentied","guaranteed"],["guarentieing","guaranteeing"],["guarenties","guarantees"],["guarenty","guaranty"],["guarentyd","guaranteed"],["guarentying","guarantee"],["guarentyinging","guaranteeing"],["guarentys","guarantees"],["guarging","guarding"],["guarnante","guarantee"],["guarnanted","guaranteed"],["guarnantee","guarantee"],["guarnanteed","guaranteed"],["guarnanteeing","guaranteeing"],["guarnantees","guarantees"],["guarnanteing","guaranteeing"],["guarnantes","guarantees"],["guarnanty","guaranty"],["guarnate","guarantee"],["guarnated","guaranteed"],["guarnatee","guarantee"],["guarnateed","guaranteed"],["guarnateee","guarantee"],["guarnateeed","guaranteed"],["guarnateeeing","guaranteeing"],["guarnateees","guarantees"],["guarnateeing","guaranteeing"],["guarnatees","guarantees"],["guarnateing","guaranteeing"],["guarnates","guarantees"],["guarnatey","guaranty"],["guarnaty","guaranty"],["guarnete","guarantee"],["guarneted","guaranteed"],["guarnetee","guarantee"],["guarneteed","guaranteed"],["guarneteeing","guaranteeing"],["guarnetees","guarantees"],["guarneteing","guaranteeing"],["guarnetes","guarantees"],["guarnety","guaranty"],["guarnte","guarantee"],["guarnted","guaranteed"],["guarntee","guarantee"],["guarnteed","guaranteed"],["guarnteeing","guaranteeing"],["guarntees","guarantees"],["guarnteing","guaranteeing"],["guarntes","guarantees"],["guarnty","guaranty"],["guarrante","guarantee"],["guarranted","guaranteed"],["guarrantee","guarantee"],["guarranteed","guaranteed"],["guarranteeing","guaranteeing"],["guarrantees","guarantees"],["guarranteing","guaranteeing"],["guarrantes","guarantees"],["guarrantie","guarantee"],["guarrantied","guaranteed"],["guarrantieing","guaranteeing"],["guarranties","guarantees"],["guarranty","guaranty"],["guarrantyd","guaranteed"],["guarrantying","guaranteeing"],["guarrantys","guarantees"],["guarrente","guarantee"],["guarrented","guaranteed"],["guarrentee","guarantee"],["guarrenteed","guaranteed"],["guarrenteeing","guaranteeing"],["guarrentees","guarantees"],["guarrenteing","guaranteeing"],["guarrentes","guarantees"],["guarrenty","guaranty"],["guaruante","guarantee"],["guaruanted","guaranteed"],["guaruantee","guarantee"],["guaruanteed","guaranteed"],["guaruanteeing","guaranteeing"],["guaruantees","guarantees"],["guaruanteing","guaranteeing"],["guaruantes","guarantees"],["guaruanty","guaranty"],["guarunte","guarantee"],["guarunted","guaranteed"],["guaruntee","guarantee"],["guarunteed","guaranteed"],["guarunteeing","guaranteeing"],["guaruntees","guarantees"],["guarunteing","guaranteeing"],["guaruntes","guarantees"],["guarunty","guaranty"],["guas'","Gauss'"],["guas's","Gauss'"],["guas","Gauss"],["guass'","Gauss'"],["guass","Gauss"],["guassian","Gaussian"],["Guatamala","Guatemala"],["Guatamalan","Guatemalan"],["gud","good"],["guerrila","guerrilla"],["guerrilas","guerrillas"],["gueswork","guesswork"],["guideded","guided"],["guidence","guidance"],["guidline","guideline"],["guidlines","guidelines"],["Guilia","Giulia"],["Guilio","Giulio"],["Guiness","Guinness"],["Guiseppe","Giuseppe"],["gunanine","guanine"],["gurantee","guarantee"],["guranteed","guaranteed"],["guranteeing","guaranteeing"],["gurantees","guarantees"],["gurrantee","guarantee"],["guttaral","guttural"],["gutteral","guttural"],["gylph","glyph"],["gziniflate","gzinflate"],["gziped","gzipped"],["haa","has"],["haave","have"],["habaeus","habeas"],["habbit","habit"],["habeus","habeas"],["hability","ability"],["Habsbourg","Habsburg"],["hace","have"],["hachish","hackish"],["hadling","handling"],["hadnler","handler"],["haeder","header"],["haemorrage","haemorrhage"],["halarious","hilarious"],["hald","held"],["halfs","halves"],["halp","help"],["halpoints","halfpoints"],["hammmer","hammer"],["hampster","hamster"],["handel","handle"],["handeler","handler"],["handeles","handles"],["handeling","handling"],["handels","handles"],["hander","handler"],["handfull","handful"],["handhake","handshake"],["handker","handler"],["handleer","handler"],["handleing","handling"],["handlig","handling"],["handlling","handling"],["handsake","handshake"],["handshacke","handshake"],["handshackes","handshakes"],["handshacking","handshaking"],["handshage","handshake"],["handshages","handshakes"],["handshaging","handshaking"],["handshak","handshake"],["handshakng","handshaking"],["handshakre","handshake"],["handshakres","handshakes"],["handshakring","handshaking"],["handshaks","handshakes"],["handshale","handshake"],["handshales","handshakes"],["handshaling","handshaking"],["handshare","handshake"],["handshares","handshakes"],["handsharing","handshaking"],["handshk","handshake"],["handshke","handshake"],["handshkes","handshakes"],["handshking","handshaking"],["handshkng","handshaking"],["handshks","handshakes"],["handskake","handshake"],["handwirting","handwriting"],["hanel","handle"],["hangig","hanging"],["hanlde","handle"],["hanlded","handled"],["hanlder","handler"],["hanlders","handlers"],["hanldes","handles"],["hanlding","handling"],["hanldle","handle"],["hanle","handle"],["hanled","handled"],["hanles","handles"],["hanling","handling"],["hanshake","handshake"],["hanshakes","handshakes"],["hansome","handsome"],["hapen","happen"],["hapend","happened"],["hapends","happens"],["hapened","happened"],["hapening","happening"],["hapenn","happen"],["hapenned","happened"],["hapenning","happening"],["hapenns","happens"],["hapens","happens"],["happaned","happened"],["happended","happened"],["happenned","happened"],["happenning","happening"],["happennings","happenings"],["happenns","happens"],["happilly","happily"],["happne","happen"],["happpen","happen"],["happpened","happened"],["happpening","happening"],["happpenings","happenings"],["happpens","happens"],["harased","harassed"],["harases","harasses"],["harasment","harassment"],["harasments","harassments"],["harassement","harassment"],["harcoded","hardcoded"],["harcoding","hardcoding"],["hard-wirted","hard-wired"],["hardare","hardware"],["hardocde","hardcode"],["hardward","hardware"],["hardwdare","hardware"],["hardwirted","hardwired"],["harge","charge"],["harras","harass"],["harrased","harassed"],["harrases","harasses"],["harrasing","harassing"],["harrasment","harassment"],["harrasments","harassments"],["harrass","harass"],["harrassed","harassed"],["harrasses","harassed"],["harrassing","harassing"],["harrassment","harassment"],["harrassments","harassments"],["harth","hearth"],["harware","hardware"],["harwdare","hardware"],["has'nt","hasn't"],["hases","hashes"],["hashi","hash"],["hashreference","hash reference"],["hashs","hashes"],["hashses","hashes"],["hask","hash"],["hasn;t","hasn't"],["hasnt'","hasn't"],["hasnt","hasn't"],["hass","hash"],["hastable","hashtable"],["hastables","hashtables"],["Hatian","Haitian"],["hauty","haughty"],["have'nt","haven't"],["haveing","having"],["haven;t","haven't"],["havent'","haven't"],["havent't","haven't"],["havent","haven't"],["havew","have"],["haviest","heaviest"],["havn't","haven't"],["havnt","haven't"],["hax","hex"],["haynus","heinous"],["hazzle","hassle"],["hda","had"],["headder","header"],["headders","headers"],["headerr","header"],["headerrs","headers"],["headle","handle"],["headong","heading"],["headquarer","headquarter"],["headquater","headquarter"],["headquatered","headquartered"],["headquaters","headquarters"],["heaer","header"],["healthercare","healthcare"],["heathy","healthy"],["hefer","heifer"],["Heidelburg","Heidelberg"],["heigest","highest"],["heigher","higher"],["heighest","highest"],["heighit","height"],["heighteen","eighteen"],["heigt","height"],["heigth","height"],["heirachies","hierarchies"],["heirachy","hierarchy"],["heirarchic","hierarchic"],["heirarchical","hierarchical"],["heirarchically","hierarchically"],["heirarchies","hierarchies"],["heirarchy","hierarchy"],["heiroglyphics","hieroglyphics"],["helerps","helpers"],["hellow","hello"],["helment","helmet"],["heloer","helper"],["heloers","helpers"],["helpe","helper"],["helpfull","helpful"],["helpfuly","helpfully"],["helpped","helped"],["hemipshere","hemisphere"],["hemipsheres","hemispheres"],["hemishpere","hemisphere"],["hemishperes","hemispheres"],["hemmorhage","hemorrhage"],["hemorage","haemorrhage"],["henc","hence"],["henderence","hindrance"],["hendler","handler"],["hense","hence"],["hepler","helper"],["herarchy","hierarchy"],["herat","heart"],["heree","here"],["heridity","heredity"],["heroe","hero"],["heros","heroes"],["herselv","herself"],["hertiage","heritage"],["hertically","hectically"],["hertzs","hertz"],["hese","these"],["hesiate","hesitate"],["hesistant","hesitant"],["hesistate","hesitate"],["hesistated","hesitated"],["hesistates","hesitates"],["hesistating","hesitating"],["hesistation","hesitation"],["hesistations","hesitations"],["hestiate","hesitate"],["hetrogeneous","heterogeneous"],["heuristc","heuristic"],["heuristcs","heuristics"],["heursitics","heuristics"],["hevy","heavy"],["hexademical","hexadecimal"],["hexdecimal","hexadecimal"],["hexgaon","hexagon"],["hexgaonal","hexagonal"],["hexgaons","hexagons"],["hexidecimal","hexadecimal"],["hge","he"],["hiarchical","hierarchical"],["hiarchy","hierarchy"],["hiddden","hidden"],["hidded","hidden"],["hideen","hidden"],["hiden","hidden"],["hiearchies","hierarchies"],["hiearchy","hierarchy"],["hieght","height"],["hiena","hyena"],["hierachical","hierarchical"],["hierachies","hierarchies"],["hierachries","hierarchies"],["hierachry","hierarchy"],["hierachy","hierarchy"],["hierarachical","hierarchical"],["hierarachy","hierarchy"],["hierarchichal","hierarchical"],["hierarchichally","hierarchically"],["hierarchie","hierarchy"],["hierarcical","hierarchical"],["hierarcy","hierarchy"],["hierarhcical","hierarchical"],["hierarhcically","hierarchically"],["hierarhcies","hierarchies"],["hierarhcy","hierarchy"],["hierchy","hierarchy"],["hieroglph","hieroglyph"],["hieroglphs","hieroglyphs"],["hietus","hiatus"],["higeine","hygiene"],["higer","higher"],["higest","highest"],["high-affort","high-effort"],["highight","highlight"],["highighted","highlighted"],["highighter","highlighter"],["highighters","highlighters"],["highights","highlights"],["highjack","hijack"],["highligh","highlight"],["highlighed","highlighted"],["highligher","highlighter"],["highlighers","highlighters"],["highlighing","highlighting"],["highlighs","highlights"],["highlightin","highlighting"],["highlightning","highlighting"],["highligjt","highlight"],["highligjted","highlighted"],["highligjtes","highlights"],["highligjting","highlighting"],["highligjts","highlights"],["highligt","highlight"],["highligted","highlighted"],["highligth","highlight"],["highligting","highlighting"],["highligts","highlights"],["highter","higher"],["hightest","highest"],["hightlight","highlight"],["hightlighted","highlighted"],["hightlighting","highlighting"],["hightlights","highlights"],["hights","heights"],["higlight","highlight"],["higlighted","highlighted"],["higlighting","highlighting"],["higlights","highlights"],["higly","highly"],["higth","height"],["higway","highway"],["hijkack","hijack"],["hijkacked","hijacked"],["hijkacking","hijacking"],["hijkacks","hijacks"],["hilight","highlight"],["hilighted","highlighted"],["hilighting","highlighting"],["hilights","highlights"],["hillarious","hilarious"],["himselv","himself"],["hinderance","hindrance"],["hinderence","hindrance"],["hindrence","hindrance"],["hipopotamus","hippopotamus"],["hipotetical","hypothetical"],["hirachy","hierarchy"],["hirarchies","hierarchies"],["hirarchy","hierarchy"],["hirarcies","hierarchies"],["hirearchy","hierarchy"],["hirearcy","hierarchy"],["hismelf","himself"],["hisory","history"],["histgram","histogram"],["histocompatability","histocompatibility"],["historgram","histogram"],["historgrams","histograms"],["historicians","historians"],["historyan","historian"],["historyans","historians"],["historycal","historical"],["historycally","historically"],["historycaly","historically"],["histroian","historian"],["histroians","historians"],["histroic","historic"],["histroical","historical"],["histroically","historically"],["histroicaly","historically"],["histroies","histories"],["histroy","history"],["histry","history"],["hitogram","histogram"],["hitories","histories"],["hitory","history"],["hitsingles","hit singles"],["hiygeine","hygiene"],["hmdi","hdmi"],["hnalder","handler"],["hoeks","hoax"],["hoever","however"],["hokay","okay"],["holf","hold"],["holliday","holiday"],["hollowcost","holocaust"],["homapage","homepage"],["homegeneous","homogeneous"],["homestate","home state"],["homogeneize","homogenize"],["homogeneized","homogenized"],["homogenious","homogeneous"],["homogeniously","homogeneously"],["homogenity","homogeneity"],["homogenius","homogeneous"],["homogeniusly","homogeneously"],["homogenoues","homogeneous"],["homogenous","homogeneous"],["homogenously","homogeneously"],["homogenuous","homogeneous"],["honory","honorary"],["hoook","hook"],["hoooks","hooks"],["hootsba","chutzpah"],["hopefulle","hopefully"],["hopefullly","hopefully"],["hopefullt","hopefully"],["hopefullu","hopefully"],["hopefuly","hopefully"],["hopeing","hoping"],["hopful","hopeful"],["hopfully","hopefully"],["hopmepage","homepage"],["hopmepages","homepages"],["hoppefully","hopefully"],["hopyfully","hopefully"],["horicontal","horizontal"],["horicontally","horizontally"],["horinzontal","horizontal"],["horizntal","horizontal"],["horizonal","horizontal"],["horizonally","horizontally"],["horizontale","horizontal"],["horiztonal","horizontal"],["horiztonally","horizontally"],["horphan","orphan"],["horrable","horrible"],["horrifing","horrifying"],["horyzontally","horizontally"],["horziontal","horizontal"],["horziontally","horizontally"],["horzontal","horizontal"],["horzontally","horizontally"],["hosited","hoisted"],["hospitible","hospitable"],["hostanme","hostname"],["hostorical","historical"],["hostories","histories"],["hostory","history"],["hostspot","hotspot"],["hostspots","hotspots"],["hotizontal","horizontal"],["hotname","hostname"],["hounour","honour"],["houres","hours"],["housand","thousand"],["houskeeping","housekeeping"],["hovever","however"],["hovewer","however"],["howeever","however"],["howerver","however"],["howeverm","however"],["howewer","however"],["howver","however"],["hradware","hardware"],["hradwares","hardwares"],["hrlp","help"],["hrlped","helped"],["hrlper","helper"],["hrlpers","helpers"],["hrlping","helping"],["hrlps","helps"],["hrough","through"],["hsa","has"],["hsell","shell"],["hsi","his"],["hsitorians","historians"],["hsotname","hostname"],["hsould'nt","shouldn't"],["hsould","should"],["hsouldn't","shouldn't"],["hstory","history"],["htacccess","htaccess"],["hte","the"],["htey","they"],["htikn","think"],["hting","thing"],["htink","think"],["htis","this"],["htmp","html"],["htting","hitting"],["hueristic","heuristic"],["humber","number"],["huminoid","humanoid"],["humoural","humoral"],["humurous","humorous"],["hunderd","hundred"],["hundreths","hundredths"],["hundrets","hundreds"],["hunrgy","hungry"],["huricane","hurricane"],["huristic","heuristic"],["husban","husband"],["hvae","have"],["hvaing","having"],["hve","have"],["hwihc","which"],["hwile","while"],["hwole","whole"],["hybernate","hibernate"],["hydogen","hydrogen"],["hydrolic","hydraulic"],["hydrolics","hydraulics"],["hydropile","hydrophile"],["hydropilic","hydrophilic"],["hydropobe","hydrophobe"],["hydropobic","hydrophobic"],["hyerarchy","hierarchy"],["hyerlink","hyperlink"],["hygeine","hygiene"],["hygene","hygiene"],["hygenic","hygienic"],["hygine","hygiene"],["hyjack","hijack"],["hyjacking","hijacking"],["hypen","hyphen"],["hypenate","hyphenate"],["hypenated","hyphenated"],["hypenates","hyphenates"],["hypenating","hyphenating"],["hypenation","hyphenation"],["hypens","hyphens"],["hyperboly","hyperbole"],["Hyperldger","Hyperledger"],["hypervior","hypervisor"],["hypocracy","hypocrisy"],["hypocrasy","hypocrisy"],["hypocricy","hypocrisy"],["hypocrit","hypocrite"],["hypocrits","hypocrites"],["hyposeses","hypotheses"],["hyposesis","hypothesis"],["hypoteses","hypotheses"],["hypotesis","hypothesis"],["hypotethically","hypothetically"],["hypothenuse","hypotenuse"],["hypothenuses","hypotenuses"],["hypter","hyper"],["hyptothetical","hypothetical"],["hyptothetically","hypothetically"],["hypvervisor","hypervisor"],["hypvervisors","hypervisors"],["hypvisor","hypervisor"],["hypvisors","hypervisors"],["I'sd","I'd"],["i;ll","I'll"],["iamge","image"],["ibject","object"],["ibjects","objects"],["ibrary","library"],["icesickle","icicle"],["iclude","include"],["icluded","included"],["icludes","includes"],["icluding","including"],["iconclastic","iconoclastic"],["iconifie","iconify"],["icrease","increase"],["icreased","increased"],["icreases","increases"],["icreasing","increasing"],["icrement","increment"],["icrementally","incrementally"],["icremented","incremented"],["icrementing","incrementing"],["icrements","increments"],["idae","idea"],["idaeidae","idea"],["idaes","ideas"],["idealogies","ideologies"],["idealogy","ideology"],["idefinite","indefinite"],["idel","idle"],["idelogy","ideology"],["idemopotent","idempotent"],["idendified","identified"],["idendifier","identifier"],["idendifiers","identifiers"],["idenfied","identified"],["idenfifier","identifier"],["idenfifiers","identifiers"],["idenfitifer","identifier"],["idenfitifers","identifiers"],["idenfitify","identify"],["idenitfy","identify"],["idenitify","identify"],["identation","indentation"],["identcial","identical"],["identfied","identified"],["identfier","identifier"],["identfiers","identifiers"],["identiable","identifiable"],["idential","identical"],["identic","identical"],["identicial","identical"],["identidier","identifier"],["identies","identities"],["identifaction","identification"],["identifcation","identification"],["identifeir","identifier"],["identifeirs","identifiers"],["identifer","identifier"],["identifers","identifiers"],["identificable","identifiable"],["identifictaion","identification"],["identifieer","identifier"],["identifiler","identifier"],["identifilers","identifiers"],["identifing","identifying"],["identifiy","identify"],["identifyable","identifiable"],["identifyed","identified"],["identiviert","identifiers"],["identtation","indentation"],["identties","identities"],["identtifier","identifier"],["identty","identity"],["ideosyncracies","ideosyncrasies"],["ideosyncratic","idiosyncratic"],["idetifier","identifier"],["idetifiers","identifiers"],["idetifies","identifies"],["idicate","indicate"],["idicated","indicated"],["idicates","indicates"],["idicating","indicating"],["idices","indices"],["idiosyncracies","idiosyncrasies"],["idiosyncracy","idiosyncrasy"],["idividual","individual"],["idividually","individually"],["idividuals","individuals"],["idons","icons"],["iechart","piechart"],["ifself","itself"],["ifset","if set"],["ignest","ingest"],["ignested","ingested"],["ignesting","ingesting"],["ignests","ingests"],["ignnore","ignore"],["ignoded","ignored"],["ignonre","ignore"],["ignora","ignore"],["ignord","ignored"],["ignoreing","ignoring"],["ignorence","ignorance"],["ignorgable","ignorable"],["ignorgd","ignored"],["ignorge","ignore"],["ignorged","ignored"],["ignorgg","ignoring"],["ignorgig","ignoring"],["ignorging","ignoring"],["ignorgs","ignores"],["ignormable","ignorable"],["ignormd","ignored"],["ignorme","ignore"],["ignormed","ignored"],["ignormg","ignoring"],["ignormig","ignoring"],["ignorming","ignoring"],["ignorms","ignores"],["ignornable","ignorable"],["ignornd","ignored"],["ignorne","ignore"],["ignorned","ignored"],["ignorng","ignoring"],["ignornig","ignoring"],["ignorning","ignoring"],["ignorns","ignores"],["ignorrable","ignorable"],["ignorrd","ignored"],["ignorre","ignore"],["ignorred","ignored"],["ignorrg","ignoring"],["ignorrig","ignoring"],["ignorring","ignoring"],["ignorrs","ignores"],["ignors","ignores"],["ignortable","ignorable"],["ignortd","ignored"],["ignorte","ignore"],["ignorted","ignored"],["ignortg","ignoring"],["ignortig","ignoring"],["ignorting","ignoring"],["ignorts","ignores"],["ignory","ignore"],["ignroed","ignored"],["ignroing","ignoring"],["igoned","ignored"],["igonorando","ignorando"],["igonore","ignore"],["igore","ignore"],["igored","ignored"],["igores","ignores"],["igoring","ignoring"],["igrnore","ignore"],["Ihaca","Ithaca"],["ihs","his"],["iif","if"],["iimmune","immune"],["iinclude","include"],["iinterval","interval"],["iiterator","iterator"],["iland","island"],["ileagle","illegal"],["ilegal","illegal"],["ilegle","illegal"],["iligal","illegal"],["illegimacy","illegitimacy"],["illegitmate","illegitimate"],["illess","illness"],["illgal","illegal"],["illiegal","illegal"],["illigal","illegal"],["illigitament","illegitimate"],["illistrate","illustrate"],["illustrasion","illustration"],["illution","illusion"],["ilness","illness"],["ilogical","illogical"],["iluminate","illuminate"],["iluminated","illuminated"],["iluminates","illuminates"],["ilumination","illumination"],["iluminations","illuminations"],["ilustrate","illustrate"],["ilustrated","illustrated"],["ilustration","illustration"],["imagenary","imaginary"],["imaghe","image"],["imagin","imagine"],["imapct","impact"],["imapcted","impacted"],["imapcting","impacting"],["imapcts","impacts"],["imapge","image"],["imbaress","embarrass"],["imbed","embed"],["imbedded","embedded"],["imbedding","embedding"],["imblance","imbalance"],["imbrase","embrace"],["imcoming","incoming"],["imcomming","incoming"],["imcompatibility","incompatibility"],["imcompatible","incompatible"],["imcomplete","incomplete"],["imedatly","immediately"],["imedialy","immediately"],["imediate","immediate"],["imediately","immediately"],["imediatly","immediately"],["imense","immense"],["imfamus","infamous"],["imgage","image"],["imidiately","immediately"],["imilar","similar"],["imlement","implement"],["imlementation","implementation"],["imlemented","implemented"],["imlementing","implementing"],["imlements","implements"],["imlicit","implicit"],["imlicitly","implicitly"],["imliment","implement"],["imlimentation","implementation"],["imlimented","implemented"],["imlimenting","implementing"],["imliments","implements"],["immadiate","immediate"],["immadiately","immediately"],["immadiatly","immediately"],["immeadiate","immediate"],["immeadiately","immediately"],["immedaite","immediate"],["immedate","immediate"],["immedately","immediately"],["immedeate","immediate"],["immedeately","immediately"],["immedially","immediately"],["immedialty","immediately"],["immediantely","immediately"],["immediatelly","immediately"],["immediatelty","immediately"],["immediatley","immediately"],["immediatlly","immediately"],["immediatly","immediately"],["immediatlye","immediately"],["immeditaly","immediately"],["immeditately","immediately"],["immeidate","immediate"],["immeidately","immediately"],["immenantly","eminently"],["immidately","immediately"],["immidatly","immediately"],["immidiate","immediate"],["immidiatelly","immediately"],["immidiately","immediately"],["immidiatly","immediately"],["immitate","imitate"],["immitated","imitated"],["immitating","imitating"],["immitator","imitator"],["immmediate","immediate"],["immmediately","immediately"],["immsersive","immersive"],["immsersively","immersively"],["immuniy","immunity"],["immunosupressant","immunosuppressant"],["immutible","immutable"],["imolicit","implicit"],["imolicitly","implicitly"],["imort","import"],["imortable","importable"],["imorted","imported"],["imortes","imports"],["imorting","importing"],["imorts","imports"],["imovable","immovable"],["impcat","impact"],["impcated","impacted"],["impcating","impacting"],["impcats","impacts"],["impecabbly","impeccably"],["impedence","impedance"],["impeed","impede"],["impelement","implement"],["impelementation","implementation"],["impelemented","implemented"],["impelementing","implementing"],["impelements","implements"],["impelentation","implementation"],["impelment","implement"],["impelmentation","implementation"],["impelmentations","implementations"],["impement","implement"],["impementaion","implementation"],["impementaions","implementations"],["impementated","implemented"],["impementation","implementation"],["impementations","implementations"],["impemented","implemented"],["impementing","implementing"],["impementling","implementing"],["impementor","implementer"],["impements","implements"],["imperiaal","imperial"],["imperically","empirically"],["imperitive","imperative"],["impermable","impermeable"],["impiled","implied"],["implace","inplace"],["implament","implement"],["implamentation","implementation"],["implamented","implemented"],["implamenting","implementing"],["implaments","implements"],["implcit","implicit"],["implcitly","implicitly"],["implct","implicit"],["implemantation","implementation"],["implemataion","implementation"],["implemataions","implementations"],["implemememnt","implement"],["implemememntation","implementation"],["implemement","implement"],["implemementation","implementation"],["implemementations","implementations"],["implememented","implemented"],["implemementing","implementing"],["implemements","implements"],["implememetation","implementation"],["implememntation","implementation"],["implememt","implement"],["implememtation","implementation"],["implememtations","implementations"],["implememted","implemented"],["implememting","implementing"],["implememts","implements"],["implemen","implement"],["implemenatation","implementation"],["implemenation","implementation"],["implemenationa","implementation"],["implemenationd","implementation"],["implemenations","implementations"],["implemencted","implemented"],["implemend","implement"],["implemends","implements"],["implemened","implemented"],["implemenet","implement"],["implemenetaion","implementation"],["implemenetaions","implementations"],["implemenetation","implementation"],["implemenetations","implementations"],["implemenetd","implemented"],["implemeneted","implemented"],["implemeneter","implementer"],["implemeneting","implementing"],["implemenetions","implementations"],["implemenets","implements"],["implemenrt","implement"],["implementaed","implemented"],["implementaion","implementation"],["implementaions","implementations"],["implementaiton","implementation"],["implementaitons","implementations"],["implementantions","implementations"],["implementastion","implementation"],["implementataion","implementation"],["implementatation","implementation"],["implementated","implemented"],["implementates","implements"],["implementating","implementing"],["implementatins","implementations"],["implementation-spacific","implementation-specific"],["implementatition","implementation"],["implementatoin","implementation"],["implementatoins","implementations"],["implementatoion","implementation"],["implementaton","implementation"],["implementator","implementer"],["implementators","implementers"],["implementattion","implementation"],["implementd","implemented"],["implementes","implements"],["implementet","implemented"],["implemention","implementation"],["implementtaion","implementation"],["implemet","implement"],["implemetation","implementation"],["implemetations","implementations"],["implemeted","implemented"],["implemeting","implementing"],["implemetnation","implementation"],["implemets","implements"],["implemnt","implement"],["implemntation","implementation"],["implemntations","implementations"],["implemt","implement"],["implemtation","implementation"],["implemtations","implementations"],["implemted","implemented"],["implemtentation","implementation"],["implemtentations","implementations"],["implemting","implementing"],["implemts","implements"],["impleneted","implemented"],["implenment","implement"],["implenmentation","implementation"],["implent","implement"],["implentation","implementation"],["implentations","implementations"],["implented","implemented"],["implenting","implementing"],["implentors","implementers"],["implents","implements"],["implet","implement"],["impletation","implementation"],["impletations","implementations"],["impleted","implemented"],["impleter","implementer"],["impleting","implementing"],["impletment","implement"],["implets","implements"],["implicitely","implicitly"],["implicitley","implicitly"],["implict","implicit"],["implictly","implicitly"],["implimcit","implicit"],["implimcitly","implicitly"],["impliment","implement"],["implimentaion","implementation"],["implimentaions","implementations"],["implimentation","implementation"],["implimentation-spacific","implementation-specific"],["implimentations","implementations"],["implimented","implemented"],["implimenting","implementing"],["implimention","implementation"],["implimentions","implementations"],["implimentor","implementor"],["impliments","implements"],["implmenet","implement"],["implmenetaion","implementation"],["implmenetaions","implementations"],["implmenetation","implementation"],["implmenetations","implementations"],["implmenetd","implemented"],["implmeneted","implemented"],["implmeneter","implementer"],["implmeneting","implementing"],["implmenets","implements"],["implment","implement"],["implmentation","implementation"],["implmentations","implementations"],["implmented","implemented"],["implmenting","implementing"],["implments","implements"],["imploys","employs"],["imporing","importing"],["imporot","import"],["imporoted","imported"],["imporoting","importing"],["imporots","imports"],["imporove","improve"],["imporoved","improved"],["imporovement","improvement"],["imporovements","improvements"],["imporoves","improves"],["imporoving","improving"],["imporsts","imports"],["importamt","important"],["importat","important"],["importd","imported"],["importent","important"],["importnt","important"],["imporve","improve"],["imporved","improved"],["imporvement","improvement"],["imporvements","improvements"],["imporves","improves"],["imporving","improving"],["imporvment","improvement"],["imposible","impossible"],["impossiblble","impossible"],["impot","import"],["impove","improve"],["impoved","improved"],["impovement","improvement"],["impovements","improvements"],["impoves","improves"],["impoving","improving"],["impplement","implement"],["impplementating","implementing"],["impplementation","implementation"],["impplemented","implemented"],["impremented","implemented"],["impres","impress"],["impresive","impressive"],["impressario","impresario"],["imprioned","imprisoned"],["imprisonned","imprisoned"],["improbe","improve"],["improbement","improvement"],["improbements","improvements"],["improbes","improves"],["improbing","improving"],["improbment","improvement"],["improbments","improvements"],["improof","improve"],["improofement","improvement"],["improofing","improving"],["improofment","improvement"],["improofs","improves"],["improove","improve"],["improoved","improved"],["improovement","improvement"],["improovements","improvements"],["improoves","improves"],["improoving","improving"],["improovment","improvement"],["improovments","improvements"],["impropely","improperly"],["improssible","impossible"],["improt","import"],["improtance","importance"],["improtant","important"],["improtantly","importantly"],["improtation","importation"],["improtations","importations"],["improted","imported"],["improter","importer"],["improters","importers"],["improting","importing"],["improts","imports"],["improvemen","improvement"],["improvemenet","improvement"],["improvemenets","improvements"],["improvemens","improvements"],["improvision","improvisation"],["improvmenet","improvement"],["improvmenets","improvements"],["improvment","improvement"],["improvments","improvements"],["imput","input"],["imrovement","improvement"],["in-memeory","in-memory"],["inablility","inability"],["inacccessible","inaccessible"],["inaccesible","inaccessible"],["inaccessable","inaccessible"],["inaccuraccies","inaccuracies"],["inaccuraccy","inaccuracy"],["inacessible","inaccessible"],["inacurate","inaccurate"],["inacurracies","inaccuracies"],["inacurrate","inaccurate"],["inadiquate","inadequate"],["inadquate","inadequate"],["inadvertant","inadvertent"],["inadvertantly","inadvertently"],["inadvertedly","inadvertently"],["inagurated","inaugurated"],["inaguration","inauguration"],["inaktively","inactively"],["inalid","invalid"],["inappropiate","inappropriate"],["inappropreate","inappropriate"],["inapropriate","inappropriate"],["inapropriately","inappropriately"],["inate","innate"],["inaugures","inaugurates"],["inavlid","invalid"],["inbalance","imbalance"],["inbalanced","imbalanced"],["inbed","embed"],["inbedded","embedded"],["inbility","inability"],["incalid","invalid"],["incarcirated","incarcerated"],["incase","in case"],["incatation","incantation"],["incatations","incantations"],["incative","inactive"],["incement","increment"],["incemental","incremental"],["incementally","incrementally"],["incemented","incremented"],["incements","increments"],["incerase","increase"],["incerased","increased"],["incerasing","increasing"],["incidential","incidental"],["incidentially","incidentally"],["incidently","incidentally"],["inclding","including"],["incldue","include"],["incldued","included"],["incldues","includes"],["inclinaison","inclination"],["inclode","include"],["inclreased","increased"],["includ","include"],["includea","include"],["includee","include"],["includeing","including"],["includied","included"],["includig","including"],["includign","including"],["includng","including"],["inclue","include"],["inclued","included"],["inclues","includes"],["incluging","including"],["incluide","include"],["incluing","including"],["inclused","included"],["inclusing","including"],["inclusinve","inclusive"],["inclution","inclusion"],["inclutions","inclusions"],["incmrement","increment"],["incoherance","incoherence"],["incoherancy","incoherency"],["incoherant","incoherent"],["incoherantly","incoherently"],["incomapatibility","incompatibility"],["incomapatible","incompatible"],["incomaptibele","incompatible"],["incomaptibelities","incompatibilities"],["incomaptibelity","incompatibility"],["incomaptible","incompatible"],["incombatibilities","incompatibilities"],["incombatibility","incompatibility"],["incomfortable","uncomfortable"],["incomming","incoming"],["incommplete","incomplete"],["incompatabable","incompatible"],["incompatabiity","incompatibility"],["incompatabile","incompatible"],["incompatabilities","incompatibilities"],["incompatability","incompatibility"],["incompatabillity","incompatibility"],["incompatabilty","incompatibility"],["incompatabily","incompatibility"],["incompatable","incompatible"],["incompatablility","incompatibility"],["incompatablities","incompatibilities"],["incompatablitiy","incompatibility"],["incompatablity","incompatibility"],["incompatably","incompatibly"],["incompataibility","incompatibility"],["incompataible","incompatible"],["incompataility","incompatibility"],["incompatatbility","incompatibility"],["incompatatble","incompatible"],["incompatatible","incompatible"],["incompatbility","incompatibility"],["incompatble","incompatible"],["incompatiability","incompatibility"],["incompatiable","incompatible"],["incompatibile","incompatible"],["incompatibilies","incompatibilities"],["incompatiblities","incompatibilities"],["incompatiblity","incompatibility"],["incompetance","incompetence"],["incompetant","incompetent"],["incompete","incomplete"],["incomping","incoming"],["incompleate","incomplete"],["incompleete","incomplete"],["incompletd","incomplete"],["incomptable","incompatible"],["incomptetent","incompetent"],["incomptible","incompatible"],["inconcistencies","inconsistencies"],["inconcistency","inconsistency"],["inconcistent","inconsistent"],["inconditional","unconditional"],["inconditionally","unconditionally"],["inconfortable","uncomfortable"],["inconisistent","inconsistent"],["inconistencies","inconsistencies"],["inconlusive","inconclusive"],["inconsisent","inconsistent"],["inconsisently","inconsistently"],["inconsisntency","inconsistency"],["inconsistance","inconsistency"],["inconsistancies","inconsistencies"],["inconsistancy","inconsistency"],["inconsistant","inconsistent"],["inconsisten","inconsistent"],["inconsistend","inconsistent"],["inconsistendly","inconsistently"],["inconsistendt","inconsistent"],["inconsistendtly","inconsistently"],["inconsistenly","inconsistently"],["inconsistented","inconsistent"],["inconsitant","inconsistent"],["inconsitency","inconsistency"],["inconsitent","inconsistent"],["inconveniant","inconvenient"],["inconveniantly","inconveniently"],["inconvertable","inconvertible"],["inconvienience","inconvenience"],["inconvienient","inconvenient"],["inconvineance","inconvenience"],["inconvineances","inconveniences"],["inconvinence","inconvenience"],["inconvinences","inconveniences"],["inconviniance","inconvenience"],["inconviniances","inconveniences"],["inconvinience","inconvenience"],["inconviniences","inconveniences"],["inconviniency","inconvenience"],["inconviniencys","inconveniences"],["incooperates","incorporates"],["incoperate","incorporate"],["incoperated","incorporated"],["incoperates","incorporates"],["incoperating","incorporating"],["incoporate","incorporate"],["incoporated","incorporated"],["incoporates","incorporates"],["incoporating","incorporating"],["incoprorate","incorporate"],["incoprorated","incorporated"],["incoprorates","incorporates"],["incoprorating","incorporating"],["incorect","incorrect"],["incorectly","incorrectly"],["incoropate","incorporate"],["incoropates","incorporates"],["incoroporated","incorporated"],["incorparates","incorporates"],["incorperate","incorporate"],["incorperated","incorporated"],["incorperates","incorporates"],["incorperating","incorporating"],["incorperation","incorporation"],["incorportaed","incorporated"],["incorported","incorporated"],["incorprates","incorporates"],["incorreclty","incorrectly"],["incorrecly","incorrectly"],["incorrecty","incorrectly"],["incorreect","incorrect"],["incorreectly","incorrectly"],["incorrent","incorrect"],["incorret","incorrect"],["incorrrect","incorrect"],["incorrrectly","incorrectly"],["incorruptable","incorruptible"],["incosistencies","inconsistencies"],["incosistency","inconsistency"],["incosistent","inconsistent"],["incosistente","inconsistent"],["incramentally","incrementally"],["increadible","incredible"],["increading","increasing"],["increaing","increasing"],["increament","increment"],["increas","increase"],["incredable","incredible"],["incremantal","incremental"],["incremeantal","incremental"],["incremenet","increment"],["incremenetd","incremented"],["incremeneted","incremented"],["incrementaly","incrementally"],["incremet","increment"],["incremetal","incremental"],["incremeted","incremented"],["incremnet","increment"],["increse","increase"],["incresed","increased"],["increses","increases"],["incresing","increasing"],["incrfemental","incremental"],["incrmenet","increment"],["incrmenetd","incremented"],["incrmeneted","incremented"],["incrment","increment"],["incrmental","incremental"],["incrmentally","incrementally"],["incrmented","incremented"],["incrmenting","incrementing"],["incrments","increments"],["inctance","instance"],["inctroduce","introduce"],["inctroduced","introduced"],["incude","include"],["incuded","included"],["incudes","includes"],["incuding","including"],["inculde","include"],["inculded","included"],["inculdes","includes"],["inculding","including"],["incunabla","incunabula"],["incure","incur"],["incurruptable","incorruptible"],["incurruptible","incorruptible"],["incvalid","invalid"],["indcates","indicates"],["indciate","indicate"],["inddex","index"],["inddividual","individual"],["inddividually","individually"],["inddividuals","individuals"],["indecate","indicate"],["indeces","indices"],["indecies","indices"],["indefinate","indefinite"],["indefinately","indefinitely"],["indefineable","undefinable"],["indefinetly","indefinitely"],["indefinitiley","indefinitely"],["indefinitively","indefinitely"],["indefinitly","indefinitely"],["indefintly","indefinitely"],["indempotent","idempotent"],["indendation","indentation"],["indentaction","indentation"],["indentaion","indentation"],["indentended","indented"],["indentical","identical"],["indentically","identically"],["indentifer","identifier"],["indentification","identification"],["indentified","identified"],["indentifier","identifier"],["indentifies","identifies"],["indentifing","identifying"],["indentify","identify"],["indentifying","identifying"],["indentit","identity"],["indentity","identity"],["indentleveal","indentlevel"],["indenx","index"],["indepandance","independence"],["indepdence","independence"],["indepdencente","independence"],["indepdendance","independence"],["indepdendant","independent"],["indepdendantly","independently"],["indepdendence","independence"],["indepdendency","independency"],["indepdendent","independent"],["indepdendently","independently"],["indepdendet","independent"],["indepdendetly","independently"],["indepdenence","independence"],["indepdenent","independent"],["indepdenently","independently"],["indepdent","independent"],["indepdented","independent"],["indepdentedly","independently"],["indepdently","independently"],["indepedantly","independently"],["indepedence","independence"],["indepedent","independent"],["indepedently","independently"],["independ","independent"],["independance","independence"],["independant","independent"],["independantly","independently"],["independece","independence"],["independed","independent"],["independedly","independently"],["independend","independent"],["independendet","independent"],["independet","independent"],["independly","independently"],["independnent","independent"],["independnet","independent"],["independnt","independent"],["independntly","independently"],["independt","independent"],["independtly","independently"],["indepenedent","independent"],["indepenendence","independence"],["indepenent","independent"],["indepenently","independently"],["indepent","independent"],["indepentent","independent"],["indepently","independently"],["inderect","indirect"],["inderts","inserts"],["indes","index"],["indespensable","indispensable"],["indespensible","indispensable"],["indexig","indexing"],["indiactor","indicator"],["indiate","indicate"],["indiated","indicated"],["indiates","indicates"],["indiating","indicating"],["indicaite","indicate"],["indicat","indicate"],["indicees","indices"],["indiciate","indicate"],["indiciated","indicated"],["indiciates","indicates"],["indiciating","indicating"],["indicies","indices"],["indicte","indicate"],["indictement","indictment"],["indictes","indicates"],["indictor","indicator"],["indigineous","indigenous"],["indipendence","independence"],["indipendent","independent"],["indipendently","independently"],["indiquate","indicate"],["indiquates","indicates"],["indirecty","indirectly"],["indispensible","indispensable"],["indisputible","indisputable"],["indisputibly","indisputably"],["indistiguishable","indistinguishable"],["indivdual","individual"],["indivdually","individually"],["indivdualy","individually"],["individal","individual"],["individally","individually"],["individals","individuals"],["individaul","individual"],["individaully","individually"],["individauls","individuals"],["individauly","individually"],["individial","individual"],["individualy","individually"],["individuel","individual"],["individuelly","individually"],["individuely","individually"],["indivisual","individual"],["indivisuality","individuality"],["indivisually","individually"],["indivisuals","individuals"],["indiviual","individual"],["indiviually","individually"],["indiviuals","individuals"],["indivual","individual"],["indivudual","individual"],["indivudually","individually"],["indizies","indices"],["indpendent","independent"],["indpendently","independently"],["indrect","indirect"],["indulgue","indulge"],["indure","endure"],["indutrial","industrial"],["indvidual","individual"],["indviduals","individuals"],["indxes","indexes"],["inearisation","linearisation"],["ineffciency","inefficiency"],["ineffcient","inefficient"],["ineffciently","inefficiently"],["inefficency","inefficiency"],["inefficent","inefficient"],["inefficently","inefficiently"],["inefficenty","inefficiently"],["inefficienty","inefficiently"],["ineffiecent","inefficient"],["ineffient","inefficient"],["ineffiently","inefficiently"],["ineficient","inefficient"],["inegrate","integrate"],["inegrated","integrated"],["ineqality","inequality"],["inequalitiy","inequality"],["inerface","interface"],["inerit","inherit"],["ineritance","inheritance"],["inerited","inherited"],["ineriting","inheriting"],["ineritor","inheritor"],["ineritors","inheritors"],["inerits","inherits"],["inernal","internal"],["inerrupt","interrupt"],["inershia","inertia"],["inershial","inertial"],["inersia","inertia"],["inersial","inertial"],["inertion","insertion"],["ines","lines"],["inestart","linestart"],["inetrrupts","interrupts"],["inevatible","inevitable"],["inevitible","inevitable"],["inevititably","inevitably"],["inexistant","inexistent"],["inexperiance","inexperience"],["inexperianced","inexperienced"],["inexpierence","inexperience"],["inexpierenced","inexperienced"],["inexpirience","inexperience"],["inexpirienced","inexperienced"],["infact","in fact"],["infalability","infallibility"],["infallable","infallible"],["infalte","inflate"],["infalted","inflated"],["infaltes","inflates"],["infalting","inflating"],["infectuous","infectious"],["infered","inferred"],["inferface","interface"],["infering","inferring"],["inferrable","inferable"],["inferrence","inference"],["infex","index"],["infilitrate","infiltrate"],["infilitrated","infiltrated"],["infilitration","infiltration"],["infinate","infinite"],["infinately","infinitely"],["infininte","infinite"],["infinit","infinite"],["infinitie","infinity"],["infinitly","infinitely"],["infinte","infinite"],["infintesimal","infinitesimal"],["infinty","infinity"],["infite","infinite"],["inflamation","inflammation"],["inflatoin","inflation"],["inflexable","inflexible"],["inflight","in-flight"],["influece","influence"],["influeced","influenced"],["influeces","influences"],["influecing","influencing"],["influencial","influential"],["influencin","influencing"],["influented","influenced"],["infoemation","information"],["infomation","information"],["infomational","informational"],["infomed","informed"],["infomer","informer"],["infomration","information"],["infoms","informs"],["infor","info"],["inforamtion","information"],["inforation","information"],["inforational","informational"],["inforce","enforce"],["inforced","enforced"],["informacion","information"],["informaion","information"],["informaiton","information"],["informatation","information"],["informatations","information"],["informatikon","information"],["informatins","information"],["informatio","information"],["informatiom","information"],["informations","information"],["informatoin","information"],["informatoins","information"],["informaton","information"],["informfation","information"],["informtion","information"],["inforrmation","information"],["infrantryman","infantryman"],["infrasctructure","infrastructure"],["infrastrcuture","infrastructure"],["infrastruture","infrastructure"],["infrastucture","infrastructure"],["infrastuctures","infrastructures"],["infreqency","infrequency"],["infreqentcy","infrequency"],["infreqeuncy","infrequency"],["infreqeuntcy","infrequency"],["infrequancies","infrequencies"],["infrequancy","infrequency"],["infrequantcies","infrequencies"],["infrequantcy","infrequency"],["infrequentcies","infrequencies"],["infrigement","infringement"],["infromation","information"],["infromatoin","information"],["infrormation","information"],["infrustructure","infrastructure"],["ingegral","integral"],["ingenius","ingenious"],["ingnore","ignore"],["ingnored","ignored"],["ingnores","ignores"],["ingnoring","ignoring"],["ingore","ignore"],["ingored","ignored"],["ingores","ignores"],["ingoring","ignoring"],["ingration","integration"],["ingreediants","ingredients"],["inh","in"],["inhabitans","inhabitants"],["inherantly","inherently"],["inheratance","inheritance"],["inheret","inherit"],["inherets","inherits"],["inheritablility","inheritability"],["inheritence","inheritance"],["inherith","inherit"],["inherithed","inherited"],["inherithing","inheriting"],["inheriths","inherits"],["inheritted","inherited"],["inherrit","inherit"],["inherritance","inheritance"],["inherrited","inherited"],["inherriting","inheriting"],["inherrits","inherits"],["inhert","inherit"],["inhertance","inheritance"],["inhertances","inheritances"],["inherted","inherited"],["inhertiance","inheritance"],["inherting","inheriting"],["inherts","inherits"],["inhomogenous","inhomogeneous"],["inialized","initialized"],["iniate","initiate"],["inidicate","indicate"],["inidicated","indicated"],["inidicates","indicates"],["inidicating","indicating"],["inidication","indication"],["inidications","indications"],["inidividual","individual"],["inidvidual","individual"],["inifinite","infinite"],["inifinity","infinity"],["inifinte","infinite"],["inifite","infinite"],["iniitial","initial"],["iniitialization","initialization"],["iniitializations","initializations"],["iniitialize","initialize"],["iniitialized","initialized"],["iniitializes","initializes"],["iniitializing","initializing"],["inintialisation","initialisation"],["inintialization","initialization"],["inisialise","initialise"],["inisialised","initialised"],["inisialises","initialises"],["iniside","inside"],["inisides","insides"],["initail","initial"],["initailisation","initialisation"],["initailise","initialise"],["initailised","initialised"],["initailiser","initialiser"],["initailisers","initialisers"],["initailises","initialises"],["initailising","initialising"],["initailization","initialization"],["initailize","initialize"],["initailized","initialized"],["initailizer","initializer"],["initailizers","initializers"],["initailizes","initializes"],["initailizing","initializing"],["initailly","initially"],["initails","initials"],["initailsation","initialisation"],["initailse","initialise"],["initailsed","initialised"],["initailsiation","initialisation"],["initaily","initially"],["initailzation","initialization"],["initailze","initialize"],["initailzed","initialized"],["initailziation","initialization"],["inital","initial"],["initalialisation","initialisation"],["initalialization","initialization"],["initalisation","initialisation"],["initalise","initialise"],["initalised","initialised"],["initaliser","initialiser"],["initalises","initialises"],["initalising","initialising"],["initalization","initialization"],["initalize","initialize"],["initalized","initialized"],["initalizer","initializer"],["initalizes","initializes"],["initalizing","initializing"],["initally","initially"],["initals","initials"],["initiailize","initialize"],["initiailized","initialized"],["initiailizes","initializes"],["initiailizing","initializing"],["initiaitive","initiative"],["initiaitives","initiatives"],["initialialise","initialise"],["initialialize","initialize"],["initialiasation","initialisation"],["initialiase","initialise"],["initialiased","initialised"],["initialiation","initialization"],["initialiazation","initialization"],["initialiaze","initialize"],["initialiazed","initialized"],["initialied","initialized"],["initialilsing","initialising"],["initialilzing","initializing"],["initialisaing","initialising"],["initialisaiton","initialisation"],["initialisated","initialised"],["initialisatin","initialisation"],["initialisationg","initialisation"],["initialisaton","initialisation"],["initialisatons","initialisations"],["initialiseing","initialising"],["initialisiation","initialisation"],["initialisong","initialising"],["initialiting","initializing"],["initialitse","initialise"],["initialitsing","initialising"],["initialitze","initialize"],["initialitzing","initializing"],["initializa","initialize"],["initializad","initialized"],["initializaed","initialized"],["initializaing","initializing"],["initializaiton","initialization"],["initializate","initialize"],["initializated","initialized"],["initializates","initializes"],["initializatin","initialization"],["initializating","initializing"],["initializationg","initialization"],["initializaton","initialization"],["initializatons","initializations"],["initializedd","initialized"],["initializeing","initializing"],["initializiation","initialization"],["initializong","initializing"],["initialsation","initialisation"],["initialse","initialise"],["initialsed","initialised"],["initialses","initialises"],["initialsing","initialising"],["initialy","initially"],["initialyl","initially"],["initialyse","initialise"],["initialysed","initialised"],["initialyses","initialises"],["initialysing","initialising"],["initialyze","initialize"],["initialyzed","initialized"],["initialyzes","initializes"],["initialyzing","initializing"],["initialzation","initialization"],["initialze","initialize"],["initialzed","initialized"],["initialzes","initializes"],["initialzing","initializing"],["initiatiate","initiate"],["initiatiated","initiated"],["initiatiater","initiator"],["initiatiating","initiating"],["initiatiator","initiator"],["initiatiats","initiates"],["initiatie","initiate"],["initiatied","initiated"],["initiaties","initiates"],["initiialise","initialise"],["initiialize","initialize"],["initilialised","initialised"],["initilialization","initialization"],["initilializations","initializations"],["initilialize","initialize"],["initilialized","initialized"],["initilializes","initializes"],["initilializing","initializing"],["initiliase","initialise"],["initiliased","initialised"],["initiliases","initialises"],["initiliasing","initialising"],["initiliaze","initialize"],["initiliazed","initialized"],["initiliazes","initializes"],["initiliazing","initializing"],["initilisation","initialisation"],["initilisations","initialisations"],["initilise","initialise"],["initilised","initialised"],["initilises","initialises"],["initilising","initialising"],["initilization","initialization"],["initilizations","initializations"],["initilize","initialize"],["initilized","initialized"],["initilizes","initializes"],["initilizing","initializing"],["inititalisation","initialisation"],["inititalisations","initialisations"],["inititalise","initialise"],["inititalised","initialised"],["inititaliser","initialiser"],["inititalising","initialising"],["inititalization","initialization"],["inititalizations","initializations"],["inititalize","initialize"],["inititate","initiate"],["inititator","initiator"],["inititialization","initialization"],["inititializations","initializations"],["initliasation","initialisation"],["initliase","initialise"],["initliased","initialised"],["initliaser","initialiser"],["initliazation","initialization"],["initliaze","initialize"],["initliazed","initialized"],["initliazer","initializer"],["inituialisation","initialisation"],["inituialization","initialization"],["inivisible","invisible"],["inizialize","initialize"],["inizialized","initialized"],["inizializes","initializes"],["inlalid","invalid"],["inlclude","include"],["inlcluded","included"],["inlcludes","includes"],["inlcluding","including"],["inlcludion","inclusion"],["inlclusive","inclusive"],["inlcude","include"],["inlcuded","included"],["inlcudes","includes"],["inlcuding","including"],["inlcusion","inclusion"],["inlcusive","inclusive"],["inlin","inline"],["inlude","include"],["inluded","included"],["inludes","includes"],["inluding","including"],["inludung","including"],["inluence","influence"],["inlusive","inclusive"],["inmediate","immediate"],["inmediatelly","immediately"],["inmediately","immediately"],["inmediatily","immediately"],["inmediatly","immediately"],["inmense","immense"],["inmigrant","immigrant"],["inmigrants","immigrants"],["inmmediately","immediately"],["inmplementation","implementation"],["innactive","inactive"],["innacurate","inaccurate"],["innacurately","inaccurately"],["innappropriate","inappropriate"],["innecesarily","unnecessarily"],["innecesary","unnecessary"],["innecessarily","unnecessarily"],["innecessary","unnecessary"],["inneffectual","ineffectual"],["innocous","innocuous"],["innoculate","inoculate"],["innoculated","inoculated"],["innosense","innocence"],["inocence","innocence"],["inofficial","unofficial"],["inofrmation","information"],["inoperant","inoperative"],["inoquous","innocuous"],["inot","into"],["inouts","inputs"],["inpact","impact"],["inpacted","impacted"],["inpacting","impacting"],["inpacts","impacts"],["inpeach","impeach"],["inpecting","inspecting"],["inpection","inspection"],["inpections","inspections"],["inpending","impending"],["inpenetrable","impenetrable"],["inplementation","implementation"],["inplementations","implementations"],["inplemented","implemented"],["inplicit","implicit"],["inplicitly","implicitly"],["inpolite","impolite"],["inport","import"],["inportant","important"],["inposible","impossible"],["inpossible","impossible"],["inpout","input"],["inpouts","inputs"],["inpractical","impractical"],["inpracticality","impracticality"],["inpractically","impractically"],["inprisonment","imprisonment"],["inproove","improve"],["inprooved","improved"],["inprooves","improves"],["inprooving","improving"],["inproovment","improvement"],["inproovments","improvements"],["inproper","improper"],["inproperly","improperly"],["inproving","improving"],["inpsection","inspection"],["inpterpreter","interpreter"],["inpu","input"],["inputed","inputted"],["inputsream","inputstream"],["inpuut","input"],["inrement","increment"],["inrements","increments"],["inreractive","interactive"],["inrerface","interface"],["inresponsive","unresponsive"],["inro","into"],["ins't","isn't"],["insallation","installation"],["insalled","installed"],["inscpeting","inspecting"],["insctuction","instruction"],["insctuctional","instructional"],["insctuctions","instructions"],["insde","inside"],["insead","instead"],["insectiverous","insectivorous"],["insensative","insensitive"],["insensetive","insensitive"],["insensistive","insensitive"],["insensistively","insensitively"],["insensitiv","insensitive"],["insensitivy","insensitivity"],["insensitve","insensitive"],["insenstive","insensitive"],["insenstively","insensitively"],["insentives","incentives"],["insentivite","insensitive"],["insepect","inspect"],["insepected","inspected"],["insepection","inspection"],["insepects","inspects"],["insependent","independent"],["inseperable","inseparable"],["insepsion","inception"],["inser","insert"],["insering","inserting"],["insersect","intersect"],["insersected","intersected"],["insersecting","intersecting"],["insersects","intersects"],["inserst","insert"],["insersted","inserted"],["inserster","inserter"],["insersting","inserting"],["inserstor","inserter"],["insersts","inserts"],["insertin","inserting"],["insertino","inserting"],["insesitive","insensitive"],["insesitively","insensitively"],["insesitiveness","insensitiveness"],["insesitivity","insensitivity"],["insetad","instead"],["insetead","instead"],["inseted","inserted"],["insid","inside"],["insidde","inside"],["insiddes","insides"],["insided","inside"],["insignificat","insignificant"],["insignificatly","insignificantly"],["insigt","insight"],["insigth","insight"],["insigths","insights"],["insigts","insights"],["insistance","insistence"],["insititute","institute"],["insitution","institution"],["insitutions","institutions"],["insonsistency","inconsistency"],["instaance","instance"],["instabce","instance"],["instace","instance"],["instaces","instances"],["instaciate","instantiate"],["instad","instead"],["instade","instead"],["instaead","instead"],["instaed","instead"],["instal","install"],["instalation","installation"],["instalations","installations"],["instaled","installed"],["instaler","installer"],["instaling","installing"],["installaion","installation"],["installaiton","installation"],["installaitons","installations"],["installataion","installation"],["installataions","installations"],["installatation","installation"],["installationa","installation"],["installes","installs"],["installtion","installation"],["instals","installs"],["instancd","instance"],["instanciate","instantiate"],["instanciated","instantiated"],["instanciates","instantiates"],["instanciating","instantiating"],["instanciation","instantiation"],["instanciations","instantiations"],["instane","instance"],["instanes","instances"],["instanseation","instantiation"],["instansiate","instantiate"],["instansiated","instantiated"],["instansiates","instantiates"],["instansiation","instantiation"],["instantate","instantiate"],["instantating","instantiating"],["instantation","instantiation"],["instantations","instantiations"],["instantiaties","instantiates"],["instanze","instance"],["instatance","instance"],["instatiate","instantiate"],["instatiation","instantiation"],["instatiations","instantiations"],["insteance","instance"],["insted","instead"],["insteead","instead"],["inster","insert"],["insterad","instead"],["insterrupts","interrupts"],["instersction","intersection"],["instersctions","intersections"],["instersectioned","intersection"],["instert","insert"],["insterted","inserted"],["instertion","insertion"],["institue","institute"],["instlal","install"],["instlalation","installation"],["instlalations","installations"],["instlaled","installed"],["instlaler","installer"],["instlaling","installing"],["instlals","installs"],["instller","installer"],["instnace","instance"],["instnaces","instances"],["instnance","instance"],["instnances","instances"],["instnat","instant"],["instnatiated","instantiated"],["instnatiation","instantiation"],["instnatiations","instantiations"],["instnce","instance"],["instnces","instances"],["instnsiated","instantiated"],["instnsiation","instantiation"],["instnsiations","instantiations"],["instnt","instant"],["instntly","instantly"],["instrace","instance"],["instralled","installed"],["instrction","instruction"],["instrctional","instructional"],["instrctions","instructions"],["instrcut","instruct"],["instrcutino","instruction"],["instrcutinoal","instructional"],["instrcutinos","instructions"],["instrcution","instruction"],["instrcutional","instructional"],["instrcutions","instructions"],["instrcuts","instructs"],["instread","instead"],["instrinsic","intrinsic"],["instruccion","instruction"],["instruccional","instructional"],["instruccions","instructions"],["instrucion","instruction"],["instrucional","instructional"],["instrucions","instructions"],["instruciton","instruction"],["instrucitonal","instructional"],["instrucitons","instructions"],["instrumenet","instrument"],["instrumenetation","instrumentation"],["instrumenetd","instrumented"],["instrumeneted","instrumented"],["instrumentaion","instrumentation"],["instrumnet","instrument"],["instrumnets","instruments"],["instsall","install"],["instsallation","installation"],["instsallations","installations"],["instsalled","installed"],["instsalls","installs"],["instuction","instruction"],["instuctional","instructional"],["instuctions","instructions"],["instuments","instruments"],["insturment","instrument"],["insturments","instruments"],["instutionalized","institutionalized"],["instutions","intuitions"],["insuffciency","insufficiency"],["insuffcient","insufficient"],["insuffciently","insufficiently"],["insufficency","insufficiency"],["insufficent","insufficient"],["insufficently","insufficiently"],["insuffiency","insufficiency"],["insuffient","insufficient"],["insuffiently","insufficiently"],["insurasnce","insurance"],["insurence","insurance"],["intaces","instance"],["intack","intact"],["intall","install"],["intallation","installation"],["intallationpath","installationpath"],["intallations","installations"],["intalled","installed"],["intalleing","installing"],["intaller","installer"],["intalles","installs"],["intalling","installing"],["intalls","installs"],["intances","instances"],["intantiate","instantiate"],["intantiating","instantiating"],["inteaction","interaction"],["intead","instead"],["inteded","intended"],["intedned","intended"],["inteface","interface"],["intefere","interfere"],["intefered","interfered"],["inteference","interference"],["integarte","integrate"],["integarted","integrated"],["integartes","integrates"],["integated","integrated"],["integates","integrates"],["integating","integrating"],["integation","integration"],["integations","integrations"],["integeral","integral"],["integere","integer"],["integreated","integrated"],["integrety","integrity"],["integrey","integrity"],["intelectual","intellectual"],["intelegence","intelligence"],["intelegent","intelligent"],["intelegently","intelligently"],["inteligability","intelligibility"],["inteligable","intelligible"],["inteligance","intelligence"],["inteligantly","intelligently"],["inteligence","intelligence"],["inteligent","intelligent"],["intelisense","intellisense"],["intelligable","intelligible"],["intemediary","intermediary"],["intenal","internal"],["intenational","international"],["intendet","intended"],["inteneded","intended"],["intenisty","intensity"],["intension","intention"],["intensional","intentional"],["intensionally","intentionally"],["intensionaly","intentionally"],["intentation","indentation"],["intentended","intended"],["intentially","intentionally"],["intentialy","intentionally"],["intentionaly","intentionally"],["intentionly","intentionally"],["intepolate","interpolate"],["intepolated","interpolated"],["intepolates","interpolates"],["intepret","interpret"],["intepretable","interpretable"],["intepretation","interpretation"],["intepretations","interpretations"],["intepretator","interpreter"],["intepretators","interpreters"],["intepreted","interpreted"],["intepreter","interpreter"],["intepreter-based","interpreter-based"],["intepreters","interpreters"],["intepretes","interprets"],["intepreting","interpreting"],["intepretor","interpreter"],["intepretors","interpreters"],["inteprets","interprets"],["inter-operability","interoperability"],["interace","interface"],["interaces","interfaces"],["interacive","interactive"],["interacively","interactively"],["interacsion","interaction"],["interacsions","interactions"],["interactionn","interaction"],["interactionns","interactions"],["interactiv","interactive"],["interactivly","interactively"],["interactuable","interactive"],["interafce","interface"],["interakt","interact"],["interaktion","interaction"],["interaktions","interactions"],["interaktive","interactively"],["interaktively","interactively"],["interaktivly","interactively"],["interaly","internally"],["interanl","internal"],["interanlly","internally"],["interate","iterate"],["interational","international"],["interative","interactive"],["interatively","interactively"],["interator","iterator"],["interators","iterators"],["interaxction","interaction"],["interaxctions","interactions"],["interaxtion","interaction"],["interaxtions","interactions"],["intercahnge","interchange"],["intercahnged","interchanged"],["intercation","interaction"],["interchage","interchange"],["interchangable","interchangeable"],["interchangably","interchangeably"],["interchangeble","interchangeable"],["intercollegate","intercollegiate"],["intercontinential","intercontinental"],["intercontinetal","intercontinental"],["interdependant","interdependent"],["interecptor","interceptor"],["intereested","interested"],["intereference","interference"],["intereferences","interferences"],["interelated","interrelated"],["interelaved","interleaved"],["interepolate","interpolate"],["interepolated","interpolated"],["interepolates","interpolates"],["interepolating","interpolating"],["interepolation","interpolation"],["interepret","interpret"],["interepretation","interpretation"],["interepretations","interpretations"],["interepreted","interpreted"],["interepreting","interpreting"],["intereprets","interprets"],["interept","intercept"],["interesct","intersect"],["interescted","intersected"],["interescting","intersecting"],["interesction","intersection"],["interesctions","intersections"],["interescts","intersects"],["interesect","intersect"],["interesected","intersected"],["interesecting","intersecting"],["interesection","intersection"],["interesections","intersections"],["interesects","intersects"],["intereset","interest"],["intereseted","interested"],["intereseting","interesting"],["interesing","interesting"],["interespersed","interspersed"],["interesseted","interested"],["interesst","interest"],["interessted","interested"],["interessting","interesting"],["intereview","interview"],["interfal","interval"],["interfals","intervals"],["interfave","interface"],["interfaves","interfaces"],["interfcae","interface"],["interfcaes","interfaces"],["interfear","interfere"],["interfearence","interference"],["interfearnce","interference"],["interfer","interfere"],["interferance","interference"],["interferd","interfered"],["interfereing","interfering"],["interfernce","interference"],["interferred","interfered"],["interferring","interfering"],["interfers","interferes"],["intergated","integrated"],["interger's","integer's"],["interger","integer"],["intergerated","integrated"],["intergers","integers"],["intergrate","integrate"],["intergrated","integrated"],["intergrates","integrates"],["intergrating","integrating"],["intergration","integration"],["intergrations","integrations"],["interit","inherit"],["interitance","inheritance"],["interited","inherited"],["interiting","inheriting"],["interits","inherits"],["interliveing","interleaving"],["interlly","internally"],["intermediat","intermediate"],["intermeidate","intermediate"],["intermidiate","intermediate"],["intermitent","intermittent"],["intermittant","intermittent"],["intermperance","intemperance"],["internaly","internally"],["internatinal","international"],["internatioanl","international"],["internation","international"],["internel","internal"],["internels","internals"],["internface","interface"],["interogators","interrogators"],["interopeable","interoperable"],["interoprability","interoperability"],["interperated","interpreted"],["interpert","interpret"],["interpertation","interpretation"],["interpertations","interpretations"],["interperted","interpreted"],["interperter","interpreter"],["interperters","interpreters"],["interperting","interpreting"],["interpertive","interpretive"],["interperts","interprets"],["interpet","interpret"],["interpetation","interpretation"],["interpeted","interpreted"],["interpeter","interpreter"],["interpeters","interpreters"],["interpeting","interpreting"],["interpets","interprets"],["interploate","interpolate"],["interploated","interpolated"],["interploates","interpolates"],["interploatin","interpolating"],["interploation","interpolation"],["interpolaed","interpolated"],["interpolaion","interpolation"],["interpolaiton","interpolation"],["interpolar","interpolator"],["interpolayed","interpolated"],["interporation","interpolation"],["interporations","interpolations"],["interprate","interpret"],["interprated","interpreted"],["interpreation","interpretation"],["interprerter","interpreter"],["interpretated","interpreted"],["interprete","interpret"],["interpretes","interprets"],["interpretet","interpreted"],["interpretion","interpretation"],["interpretions","interpretations"],["interpretor","interpreter"],["interprett","interpret"],["interpretted","interpreted"],["interpretter","interpreter"],["interpretting","interpreting"],["interract","interact"],["interracting","interacting"],["interractive","interactive"],["interracts","interacts"],["interrest","interest"],["interrested","interested"],["interresting","interesting"],["interrface","interface"],["interrim","interim"],["interript","interrupt"],["interrput","interrupt"],["interrputed","interrupted"],["interrrupt","interrupt"],["interrrupted","interrupted"],["interrrupting","interrupting"],["interrrupts","interrupts"],["interrtups","interrupts"],["interrugum","interregnum"],["interrum","interim"],["interrup","interrupt"],["interruped","interrupted"],["interruping","interrupting"],["interrups","interrupts"],["interruptable","interruptible"],["interruptors","interrupters"],["interruptted","interrupted"],["interrut","interrupt"],["interrutps","interrupts"],["interscetion","intersection"],["intersecct","intersect"],["interseccted","intersected"],["interseccting","intersecting"],["intersecction","intersection"],["interseccts","intersects"],["intersecrion","intersection"],["intersecton","intersection"],["intersectons","intersections"],["intersparsed","interspersed"],["interst","interest"],["intersted","interested"],["intersting","interesting"],["intersts","interests"],["intertaining","entertaining"],["intertia","inertia"],["intertial","inertial"],["interupt","interrupt"],["interupted","interrupted"],["interupting","interrupting"],["interupts","interrupts"],["interuupt","interrupt"],["intervall","interval"],["intervalls","intervals"],["interveening","intervening"],["intervines","intervenes"],["intesity","intensity"],["inteval","interval"],["intevals","intervals"],["intevene","intervene"],["intger","integer"],["intgers","integers"],["intgral","integral"],["inthe","in the"],["intiailise","initialise"],["intiailised","initialised"],["intiailiseing","initialising"],["intiailiser","initialiser"],["intiailises","initialises"],["intiailising","initialising"],["intiailize","initialize"],["intiailized","initialized"],["intiailizeing","initializing"],["intiailizer","initializer"],["intiailizes","initializes"],["intiailizing","initializing"],["intial","initial"],["intiale","initial"],["intialisation","initialisation"],["intialise","initialise"],["intialised","initialised"],["intialiser","initialiser"],["intialisers","initialisers"],["intialises","initialises"],["intialising","initialising"],["intialistion","initialisation"],["intializating","initializing"],["intialization","initialization"],["intializaze","initialize"],["intialize","initialize"],["intialized","initialized"],["intializer","initializer"],["intializers","initializers"],["intializes","initializes"],["intializing","initializing"],["intializtion","initialization"],["intialled","initialled"],["intiallisation","initialisation"],["intiallisations","initialisations"],["intiallised","initialised"],["intiallization","initialization"],["intiallizations","initializations"],["intiallized","initialized"],["intiallly","initially"],["intially","initially"],["intials","initials"],["intialse","initialise"],["intialsed","initialised"],["intialsing","initialising"],["intialte","initialise"],["intialy","initially"],["intialze","initialize"],["intialzed","initialized"],["intialzing","initializing"],["inticement","enticement"],["intiger","integer"],["intiial","initial"],["intiialise","initialise"],["intiialize","initialize"],["intilising","initialising"],["intilizing","initializing"],["intimite","intimate"],["intinite","infinite"],["intitial","initial"],["intitialization","initialization"],["intitialize","initialize"],["intitialized","initialized"],["intitials","initials"],["intity","entity"],["intot","into"],["intoto","into"],["intpreter","interpreter"],["intput","input"],["intputs","inputs"],["intraversion","introversion"],["intravert","introvert"],["intraverts","introverts"],["intrduced","introduced"],["intreeg","intrigue"],["intreeged","intrigued"],["intreeging","intriguing"],["intreegued","intrigued"],["intreeguing","intriguing"],["intreface","interface"],["intregral","integral"],["intrerrupt","interrupt"],["intresst","interest"],["intressted","interested"],["intressting","interesting"],["intrested","interested"],["intresting","interesting"],["intriduce","introduce"],["intriduced","introduced"],["intriduction","introduction"],["intrisinc","intrinsic"],["intrisincs","intrinsics"],["introducted","introduced"],["introductionary","introductory"],["introdued","introduced"],["introduse","introduce"],["introdused","introduced"],["introduses","introduces"],["introdusing","introducing"],["introsepectable","introspectable"],["introsepection","introspection"],["intrrupt","interrupt"],["intrrupted","interrupted"],["intrrupting","interrupting"],["intrrupts","interrupts"],["intruction","instruction"],["intructional","instructional"],["intructions","instructions"],["intruduced","introduced"],["intruducing","introducing"],["intrument","instrument"],["intrumental","instrumental"],["intrumented","instrumented"],["intrumenting","instrumenting"],["intruments","instruments"],["intrusted","entrusted"],["intstead","instead"],["intstructed","instructed"],["intstructer","instructor"],["intstructing","instructing"],["intstruction","instruction"],["intstructional","instructional"],["intstructions","instructions"],["intstructor","instructor"],["intstructs","instructs"],["intterrupt","interrupt"],["intterupt","interrupt"],["intterupted","interrupted"],["intterupting","interrupting"],["intterupts","interrupts"],["intuative","intuitive"],["inturpratasion","interpretation"],["inturpratation","interpretation"],["inturprett","interpret"],["intutive","intuitive"],["intutively","intuitively"],["inudstry","industry"],["inut","input"],["invaid","invalid"],["invaild","invalid"],["invaildate","invalidate"],["invailid","invalid"],["invalaid","invalid"],["invald","invalid"],["invaldates","invalidates"],["invalde","invalid"],["invalidatiopn","invalidation"],["invalide","invalid"],["invalidiate","invalidate"],["invalidte","invalidate"],["invalidted","invalidated"],["invalidtes","invalidates"],["invalidting","invalidating"],["invalidtion","invalidation"],["invalied","invalid"],["invalud","invalid"],["invarient","invariant"],["invarients","invariants"],["invarinat","invariant"],["invarinats","invariants"],["inventer","inventor"],["inverded","inverted"],["inverion","inversion"],["inverions","inversions"],["invertedd","inverted"],["invertibrates","invertebrates"],["invertion","inversion"],["invertions","inversions"],["inverval","interval"],["inveryed","inverted"],["invesitgated","investigated"],["invesitgating","investigating"],["invesitgation","investigation"],["invesitgations","investigations"],["investingate","investigate"],["inveting","inverting"],["invetory","inventory"],["inviation","invitation"],["invididual","individual"],["invidivual","individual"],["invidual","individual"],["invidually","individually"],["invisble","invisible"],["invisblity","invisibility"],["invisiable","invisible"],["invisibile","invisible"],["invisivble","invisible"],["invlaid","invalid"],["invlid","invalid"],["invlisible","invisible"],["invlove","involve"],["invloved","involved"],["invloves","involves"],["invocaition","invocation"],["invokable","invocable"],["invokation","invocation"],["invokations","invocations"],["invokve","invoke"],["invokved","invoked"],["invokves","invokes"],["invokving","invoking"],["involvment","involvement"],["invovle","involve"],["invovled","involved"],["invovles","involves"],["invovling","involving"],["ioclt","ioctl"],["iomaped","iomapped"],["ionde","inode"],["iplementation","implementation"],["ipmrovement","improvement"],["ipmrovements","improvements"],["iput","input"],["ireelevant","irrelevant"],["irelevent","irrelevant"],["iresistable","irresistible"],["iresistably","irresistibly"],["iresistible","irresistible"],["iresistibly","irresistibly"],["iritable","irritable"],["iritate","irritate"],["iritated","irritated"],["iritating","irritating"],["ironicly","ironically"],["irradate","irradiate"],["irradated","irradiated"],["irradates","irradiates"],["irradating","irradiating"],["irradation","irradiation"],["irraditate","irradiate"],["irraditated","irradiated"],["irraditates","irradiates"],["irraditating","irradiating"],["irregularties","irregularities"],["irregulier","irregular"],["irregulierties","irregularities"],["irrelavent","irrelevant"],["irrelevent","irrelevant"],["irrelvant","irrelevant"],["irreplacable","irreplaceable"],["irreplacalbe","irreplaceable"],["irreproducable","irreproducible"],["irresepective","irrespective"],["irresistable","irresistible"],["irresistably","irresistibly"],["irreversable","irreversible"],["is'nt","isn't"],["isalha","isalpha"],["isconnection","isconnected"],["iscrated","iscreated"],["iself","itself"],["iselfe","itself"],["iserting","inserting"],["isimilar","similar"],["isloation","isolation"],["ismas","isthmus"],["isn;t","isn't"],["isnpiron","inspiron"],["isnt'","isn't"],["isnt","isn't"],["isnt;","isn't"],["isntalation","installation"],["isntalations","installations"],["isntallation","installation"],["isntallations","installations"],["isntance","instance"],["isntances","instances"],["isotrophically","isotropically"],["ispatches","dispatches"],["isplay","display"],["Israelies","Israelis"],["isse","issue"],["isses","issues"],["isssue","issue"],["isssued","issued"],["isssues","issues"],["issueing","issuing"],["istalling","installing"],["istance","instance"],["istead","instead"],["istened","listened"],["istener","listener"],["isteners","listeners"],["istening","listening"],["isue","issue"],["iteartor","iterator"],["iteator","iterator"],["iteger","integer"],["itegral","integral"],["itegrals","integrals"],["iten","item"],["itens","items"],["itention","intention"],["itentional","intentional"],["itentionally","intentionally"],["itentionaly","intentionally"],["iteraion","iteration"],["iteraions","iterations"],["iteratable","iterable"],["iterater","iterator"],["iteraterate","iterate"],["iteratered","iterated"],["iteratior","iterator"],["iteratiors","iterators"],["iteratons","iterations"],["itereating","iterating"],["iterface","interface"],["iterfaces","interfaces"],["iternations","iterations"],["iterpreter","interpreter"],["iterration","iteration"],["iterrations","iterations"],["iterrupt","interrupt"],["iterstion","iteration"],["iterstions","iterations"],["itertation","iteration"],["iteself","itself"],["itesm","items"],["itheir","their"],["itheirs","theirs"],["itialise","initialise"],["itialised","initialised"],["itialises","initialises"],["itialising","initialising"],["itialize","initialize"],["itialized","initialized"],["itializes","initializes"],["itializing","initializing"],["itnerest","interest"],["itnerface","interface"],["itnerfaces","interfaces"],["itnernal","internal"],["itnerprelation","interpretation"],["itnerpret","interpret"],["itnerpretation","interpretation"],["itnerpretaton","interpretation"],["itnerpreted","interpreted"],["itnerpreter","interpreter"],["itnerpreting","interpreting"],["itnerprets","interprets"],["itnervals","intervals"],["itnroduced","introduced"],["itsef","itself"],["itsel","itself"],["itselfs","itself"],["itselt","itself"],["itselv","itself"],["itsems","items"],["itslef","itself"],["itslev","itself"],["itsself","itself"],["itterate","iterate"],["itterated","iterated"],["itterates","iterates"],["itterating","iterating"],["itteration","iteration"],["itterations","iterations"],["itterative","iterative"],["itterator","iterator"],["itterators","iterators"],["iunior","junior"],["ivalid","invalid"],["ivocation","invocation"],["ivoked","invoked"],["iwithout","without"],["iwll","will"],["iwth","with"],["jagid","jagged"],["jagwar","jaguar"],["januar","January"],["janurary","January"],["Januray","January"],["japanease","japanese"],["japaneese","Japanese"],["Japanes","Japanese"],["japanses","Japanese"],["jaques","jacques"],["javacript","javascript"],["javascipt","javascript"],["javasciript","javascript"],["javascritp","javascript"],["javascropt","javascript"],["javasript","javascript"],["javasrript","javascript"],["javescript","javascript"],["javsscript","javascript"],["jeapardy","jeopardy"],["jeffies","jiffies"],["jekins","Jenkins"],["jelous","jealous"],["jelousy","jealousy"],["jelusey","jealousy"],["jenkin","Jenkins"],["jenkkins","Jenkins"],["jenkns","Jenkins"],["jepordize","jeopardize"],["jewllery","jewellery"],["jhondoe","johndoe"],["jist","gist"],["jitterr","jitter"],["jitterring","jittering"],["jodpers","jodhpurs"],["Johanine","Johannine"],["joineable","joinable"],["joinning","joining"],["jont","joint"],["jonts","joints"],["jornal","journal"],["jorunal","journal"],["Jospeh","Joseph"],["jossle","jostle"],["jouney","journey"],["journied","journeyed"],["journies","journeys"],["joystik","joystick"],["jscipt","jscript"],["jstu","just"],["jsut","just"],["juadaism","Judaism"],["juadism","Judaism"],["judical","judicial"],["judisuary","judiciary"],["juducial","judicial"],["juge","judge"],["juipter","Jupiter"],["jumo","jump"],["jumoed","jumped"],["jumpimng","jumping"],["jupyther","Jupyter"],["juristiction","jurisdiction"],["juristictions","jurisdictions"],["jus","just"],["justfied","justified"],["justication","justification"],["justifed","justified"],["justs","just"],["juxt","just"],["juxtification","justification"],["juxtifications","justifications"],["juxtified","justified"],["juxtifies","justifies"],["juxtifying","justifying"],["kakfa","Kafka"],["kazakstan","Kazakhstan"],["keep-alives","keep-alive"],["keept","kept"],["kenerl","kernel"],["kenerls","kernels"],["kenrel","kernel"],["kenrels","kernels"],["kepping","keeping"],["kepps","keeps"],["kerenl","kernel"],["kerenls","kernels"],["kernal","kernel"],["kernals","kernels"],["kernerl","kernel"],["kernerls","kernels"],["keword","keyword"],["kewords","keywords"],["kewword","keyword"],["kewwords","keywords"],["keybaord","keyboard"],["keybaords","keyboards"],["keyboaard","keyboard"],["keyboaards","keyboards"],["keyboad","keyboard"],["keyboads","keyboards"],["keybooard","keyboard"],["keybooards","keyboards"],["keyborad","keyboard"],["keyborads","keyboards"],["keybord","keyboard"],["keybords","keyboards"],["keybroad","keyboard"],["keybroads","keyboards"],["keyevente","keyevent"],["keyords","keywords"],["keyoutch","keytouch"],["keyowrd","keyword"],["keypair","key pair"],["keypairs","key pairs"],["keyservers","key servers"],["keystokes","keystrokes"],["keyward","keyword"],["keywoards","keywords"],["keywork","keyword"],["keyworkd","keyword"],["keyworkds","keywords"],["keywors","keywords"],["keywprd","keyword"],["kindergarden","kindergarten"],["kindgergarden","kindergarten"],["kindgergarten","kindergarten"],["kinf","kind"],["kinfs","kinds"],["kinnect","Kinect"],["klenex","kleenex"],["klick","click"],["klicked","clicked"],["klicks","clicks"],["klunky","clunky"],["knive","knife"],["kno","know"],["knowladge","knowledge"],["knowlage","knowledge"],["knowlageable","knowledgeable"],["knowlegde","knowledge"],["knowlege","knowledge"],["knowlegeabel","knowledgeable"],["knowlegeable","knowledgeable"],["knwo","know"],["knwoing","knowing"],["knwoingly","knowingly"],["knwon","known"],["knwos","knows"],["kocalized","localized"],["konstant","constant"],["konstants","constants"],["konw","know"],["konwn","known"],["konws","knows"],["koordinate","coordinate"],["koordinates","coordinates"],["kown","known"],["kubenates","Kubernetes"],["kubenernetes","Kubernetes"],["kubenertes","Kubernetes"],["kubenetes","Kubernetes"],["kubenretes","Kubernetes"],["kuberenetes","Kubernetes"],["kuberentes","Kubernetes"],["kuberetes","Kubernetes"],["kubermetes","Kubernetes"],["kubernates","Kubernetes"],["kubernests","Kubernetes"],["kubernete","Kubernetes"],["kuberntes","Kubernetes"],["kwno","know"],["kwoledgebase","knowledge base"],["kyrillic","cyrillic"],["labbel","label"],["labbeled","labeled"],["labbels","labels"],["labed","labeled"],["labeld","labelled"],["labirinth","labyrinth"],["lable","label"],["lablel","label"],["lablels","labels"],["lables","labels"],["labouriously","laboriously"],["labratory","laboratory"],["lagacies","legacies"],["lagacy","legacy"],["laguage","language"],["laguages","languages"],["laguague","language"],["laguagues","languages"],["laiter","later"],["lamda","lambda"],["lamdas","lambdas"],["lanaguage","language"],["lanaguge","language"],["lanaguges","languages"],["lanagugs","languages"],["lanauge","language"],["langage","language"],["langauage","language"],["langauge","language"],["langauges","languages"],["langeuage","language"],["langeuagesection","languagesection"],["langht","length"],["langhts","lengths"],["langth","length"],["langths","lengths"],["languace","language"],["languaces","languages"],["languae","language"],["languaes","languages"],["language-spacific","language-specific"],["languahe","language"],["languahes","languages"],["languaje","language"],["languajes","languages"],["langual","lingual"],["languale","language"],["languales","languages"],["langualge","language"],["langualges","languages"],["languange","language"],["languanges","languages"],["languaqe","language"],["languaqes","languages"],["languate","language"],["languates","languages"],["languauge","language"],["languauges","languages"],["languege","language"],["langueges","languages"],["langugae","language"],["langugaes","languages"],["langugage","language"],["langugages","languages"],["languge","language"],["languges","languages"],["langugue","language"],["langugues","languages"],["lanich","launch"],["lanuage","language"],["lanuch","launch"],["lanuched","launched"],["lanuches","launches"],["lanuching","launching"],["lanugage","language"],["lanugages","languages"],["laod","load"],["laoded","loaded"],["laoding","loading"],["laods","loads"],["laout","layout"],["larg","large"],["largst","largest"],["larrry","larry"],["lastes","latest"],["lastr","last"],["latets","latest"],["lating","latin"],["latitide","latitude"],["latitue","latitude"],["latitute","latitude"],["latops","laptops"],["latset","latest"],["lattitude","latitude"],["lauch","launch"],["lauched","launched"],["laucher","launcher"],["lauches","launches"],["lauching","launching"],["lauguage","language"],["launck","launch"],["launhed","launched"],["lavae","larvae"],["layed","laid"],["layou","layout"],["lazer","laser"],["laziliy","lazily"],["lazyness","laziness"],["lcoally","locally"],["lcoation","location"],["lcuase","clause"],["leaast","least"],["leace","leave"],["leack","leak"],["leagacy","legacy"],["leagal","legal"],["leagalise","legalise"],["leagality","legality"],["leagalize","legalize"],["leagcy","legacy"],["leage","league"],["leagel","legal"],["leagelise","legalise"],["leagelity","legality"],["leagelize","legalize"],["leageue","league"],["leagl","legal"],["leaglise","legalise"],["leaglity","legality"],["leaglize","legalize"],["leapyear","leap year"],["leapyears","leap years"],["leary","leery"],["leaset","least"],["leasy","least"],["leathal","lethal"],["leats","least"],["leaveing","leaving"],["leavong","leaving"],["lefted","left"],["legac","legacy"],["legact","legacy"],["legalimate","legitimate"],["legasy","legacy"],["legel","legal"],["leggacies","legacies"],["leggacy","legacy"],["leght","length"],["leghts","lengths"],["legitamate","legitimate"],["legitimiately","legitimately"],["legitmate","legitimate"],["legnth","length"],["legth","length"],["legths","lengths"],["leibnitz","leibniz"],["leightweight","lightweight"],["lene","lens"],["lenggth","length"],["lengh","length"],["lenghs","lengths"],["lenght","length"],["lenghten","lengthen"],["lenghtend","lengthened"],["lenghtened","lengthened"],["lenghtening","lengthening"],["lenghth","length"],["lenghthen","lengthen"],["lenghths","lengths"],["lenghthy","lengthy"],["lenghtly","lengthy"],["lenghts","lengths"],["lenghty","lengthy"],["lengt","length"],["lengten","lengthen"],["lengtext","longtext"],["lengthes","lengths"],["lengthh","length"],["lengts","lengths"],["leniant","lenient"],["leninent","lenient"],["lentgh","length"],["lentghs","lengths"],["lenth","length"],["lenths","lengths"],["leran","learn"],["leraned","learned"],["lerans","learns"],["lessson","lesson"],["lesssons","lessons"],["lesstiff","LessTif"],["letgitimate","legitimate"],["letmost","leftmost"],["leutenant","lieutenant"],["levaridge","leverage"],["levetate","levitate"],["levetated","levitated"],["levetates","levitates"],["levetating","levitating"],["levl","level"],["levle","level"],["lexial","lexical"],["lexigraphic","lexicographic"],["lexigraphical","lexicographical"],["lexigraphically","lexicographically"],["leyer","layer"],["leyered","layered"],["leyering","layering"],["leyers","layers"],["liares","liars"],["liasion","liaison"],["liason","liaison"],["liasons","liaisons"],["libarary","library"],["libaries","libraries"],["libary","library"],["libell","libel"],["liberaries","libraries"],["liberary","library"],["liberoffice","libreoffice"],["liberry","library"],["libgng","libpng"],["libguistic","linguistic"],["libguistics","linguistics"],["libitarianisn","libertarianism"],["libraarie","library"],["libraaries","libraries"],["libraary","library"],["librabarie","library"],["librabaries","libraries"],["librabary","library"],["librabie","library"],["librabies","libraries"],["librabrie","library"],["librabries","libraries"],["librabry","library"],["libraby","library"],["libraie","library"],["libraier","library"],["libraies","libraries"],["libraiesr","libraries"],["libraire","library"],["libraires","libraries"],["librairies","libraries"],["librairy","library"],["libralie","library"],["libralies","libraries"],["libraly","library"],["libraray","library"],["libraris","libraries"],["librarries","libraries"],["librarry","library"],["libraryes","libraries"],["libratie","library"],["libraties","libraries"],["libraty","library"],["libray","library"],["librayr","library"],["libreoffie","libreoffice"],["libreoficekit","libreofficekit"],["libreries","libraries"],["librery","library"],["libries","libraries"],["librraies","libraries"],["librraries","libraries"],["librrary","library"],["librray","library"],["libstc++","libstdc++"],["licate","locate"],["licated","located"],["lication","location"],["lications","locations"],["licenceing","licencing"],["licese","license"],["licesne","license"],["licesnes","licenses"],["licesning","licensing"],["licesnse","license"],["licesnses","licenses"],["licesnsing","licensing"],["licsense","license"],["licsenses","licenses"],["licsensing","licensing"],["lieing","lying"],["liek","like"],["liekd","liked"],["lient","client"],["lients","clients"],["liesure","leisure"],["lieuenant","lieutenant"],["liev","live"],["lieved","lived"],["lifceycle","lifecycle"],["lifecyle","lifecycle"],["lifes","lives"],["lifeycle","lifecycle"],["liftime","lifetime"],["lighing","lighting"],["lightbulp","lightbulb"],["lightweigh","lightweight"],["lightwieght","lightweight"],["lightwight","lightweight"],["lightyear","light year"],["lightyears","light years"],["ligth","light"],["ligthing","lighting"],["ligths","lights"],["ligthweight","lightweight"],["ligthweights","lightweights"],["liitle","little"],["likeley","likely"],["likelly","likely"],["likelyhood","likelihood"],["likewis","likewise"],["likey","likely"],["liklelihood","likelihood"],["likley","likely"],["likly","likely"],["lileral","literal"],["limiation","limitation"],["limiations","limitations"],["liminted","limited"],["limitaion","limitation"],["limite","limit"],["limitiaion","limitation"],["limitiaions","limitations"],["limitiation","limitation"],["limitiations","limitations"],["limitied","limited"],["limitier","limiter"],["limitiers","limiters"],["limitiing","limiting"],["limitimg","limiting"],["limition","limitation"],["limitions","limitations"],["limitis","limits"],["limititation","limitation"],["limititations","limitations"],["limitited","limited"],["limititer","limiter"],["limititers","limiters"],["limititing","limiting"],["limitted","limited"],["limitter","limiter"],["limitting","limiting"],["limitts","limits"],["limk","link"],["limted","limited"],["limti","limit"],["limts","limits"],["linaer","linear"],["linar","linear"],["linarly","linearly"],["lincese","license"],["lincesed","licensed"],["linceses","licenses"],["lineary","linearly"],["linerisation","linearisation"],["linerisations","linearisations"],["lineseach","linesearch"],["lineseaches","linesearches"],["liness","lines"],["linewdith","linewidth"],["linez","lines"],["lingth","length"],["linheight","lineheight"],["linkfy","linkify"],["linnaena","linnaean"],["lintain","lintian"],["linz","lines"],["lippizaner","lipizzaner"],["liquify","liquefy"],["lisetning","listening"],["lising","listing"],["listapck","listpack"],["listbbox","listbox"],["listeing","listening"],["listeneing","listening"],["listeneres","listeners"],["listenes","listens"],["listensers","listeners"],["listenter","listener"],["listenters","listeners"],["listernes","listeners"],["listner","listener"],["listners","listeners"],["litaral","literal"],["litarally","literally"],["litarals","literals"],["litature","literature"],["liteautrue","literature"],["literaly","literally"],["literture","literature"],["litle","little"],["litquid","liquid"],["litquids","liquids"],["lits","list"],["litte","little"],["littel","little"],["littel-endian","little-endian"],["littele","little"],["littelry","literally"],["litteral","literal"],["litterally","literally"],["litterals","literals"],["litterate","literate"],["litterature","literature"],["liuke","like"],["liveing","living"],["livel","level"],["livetime","lifetime"],["livley","lively"],["lizens","license"],["lizense","license"],["lizensing","licensing"],["lke","like"],["llinear","linear"],["lmits","limits"],["loaader","loader"],["loacal","local"],["loacality","locality"],["loacally","locally"],["loacation","location"],["loaction","location"],["loactions","locations"],["loadig","loading"],["loadin","loading"],["loadning","loading"],["locae","locate"],["locaes","locates"],["locahost","localhost"],["locaiing","locating"],["locailty","locality"],["locaing","locating"],["locaion","location"],["locaions","locations"],["locaise","localise"],["locaised","localised"],["locaiser","localiser"],["locaises","localises"],["locaite","locate"],["locaites","locates"],["locaiting","locating"],["locaition","location"],["locaitions","locations"],["locaiton","location"],["locaitons","locations"],["locaize","localize"],["locaized","localized"],["locaizer","localizer"],["locaizes","localizes"],["localation","location"],["localed","located"],["localtion","location"],["localtions","locations"],["localy","locally"],["localzation","localization"],["locatins","locations"],["loccked","locked"],["locgical","logical"],["lockingf","locking"],["lodable","loadable"],["loded","loaded"],["loder","loader"],["loders","loaders"],["loding","loading"],["loev","love"],["logarithimic","logarithmic"],["logarithmical","logarithmically"],["logaritmic","logarithmic"],["logcal","logical"],["loggging","logging"],["logial","logical"],["logially","logically"],["logicaly","logically"],["logictech","logitech"],["logile","logfile"],["logitude","longitude"],["logitudes","longitudes"],["logoic","logic"],["logorithm","logarithm"],["logorithmic","logarithmic"],["logorithms","logarithms"],["logrithm","logarithm"],["logrithms","logarithms"],["logwritter","logwriter"],["loign","login"],["loigns","logins"],["lokal","local"],["lokale","locale"],["lokales","locales"],["lokaly","locally"],["lolal","total"],["lolerant","tolerant"],["lond","long"],["lonelyness","loneliness"],["long-runnign","long-running"],["longers","longer"],["longitudonal","longitudinal"],["longitue","longitude"],["longitutde","longitude"],["longitute","longitude"],["longst","longest"],["longuer","longer"],["longuest","longest"],["lonley","lonely"],["looback","loopback"],["loobacks","loopbacks"],["loobpack","loopback"],["loockdown","lockdown"],["lookes","looks"],["looknig","looking"],["looop","loop"],["loopup","lookup"],["loosley","loosely"],["loosly","loosely"],["losely","loosely"],["losen","loosen"],["losened","loosened"],["lotharingen","Lothringen"],["lpatform","platform"],["luckly","luckily"],["luminose","luminous"],["luminousity","luminosity"],["lveo","love"],["lvoe","love"],["Lybia","Libya"],["maake","make"],["mabe","maybe"],["mabye","maybe"],["macack","macaque"],["macason","moccasin"],["macasons","moccasins"],["maccro","macro"],["maccros","macros"],["machanism","mechanism"],["machanisms","mechanisms"],["mached","matched"],["maches","matches"],["machettie","machete"],["machinary","machinery"],["machine-dependend","machine-dependent"],["machiness","machines"],["mackeral","mackerel"],["maco","macro"],["macor","macro"],["macors","macros"],["macpakge","package"],["macroses","macros"],["macrow","macro"],["macthing","matching"],["madantory","mandatory"],["madatory","mandatory"],["maddness","madness"],["maesure","measure"],["maesured","measured"],["maesurement","measurement"],["maesurements","measurements"],["maesures","measures"],["maesuring","measuring"],["magasine","magazine"],["magincian","magician"],["magisine","magazine"],["magizine","magazine"],["magnatiude","magnitude"],["magnatude","magnitude"],["magnificient","magnificent"],["magolia","magnolia"],["mahcine","machine"],["maibe","maybe"],["maibox","mailbox"],["mailformed","malformed"],["mailling","mailing"],["maillinglist","mailing list"],["maillinglists","mailing lists"],["mailny","mainly"],["mailstrum","maelstrom"],["mainenance","maintenance"],["maininly","mainly"],["mainling","mailing"],["maintainance","maintenance"],["maintaince","maintenance"],["maintainces","maintenances"],["maintainence","maintenance"],["maintaing","maintaining"],["maintan","maintain"],["maintanance","maintenance"],["maintance","maintenance"],["maintane","maintain"],["maintanence","maintenance"],["maintaner","maintainer"],["maintaners","maintainers"],["maintans","maintains"],["maintenace","maintenance"],["maintenence","maintenance"],["maintiain","maintain"],["maintians","maintains"],["maintinaing","maintaining"],["maintioned","mentioned"],["mairabd","MariaDB"],["mairadb","MariaDB"],["maitain","maintain"],["maitainance","maintenance"],["maitained","maintained"],["maitainers","maintainers"],["majoroty","majority"],["maka","make"],["makefle","makefile"],["makeing","making"],["makign","making"],["makretplace","marketplace"],["makro","macro"],["makros","macros"],["Malcom","Malcolm"],["maliciousally","maliciously"],["malicius","malicious"],["maliciusally","maliciously"],["maliciusly","maliciously"],["malicous","malicious"],["malicousally","maliciously"],["malicously","maliciously"],["maline","malign"],["malined","maligned"],["malining","maligning"],["malins","maligns"],["malless","malice"],["malplace","misplace"],["malplaced","misplaced"],["maltesian","Maltese"],["mamagement","management"],["mamal","mammal"],["mamalian","mammalian"],["mamento","memento"],["mamentos","mementos"],["mamory","memory"],["mamuth","mammoth"],["manafacturer","manufacturer"],["manafacturers","manufacturers"],["managament","management"],["manageed","managed"],["managemenet","management"],["managenment","management"],["managet","manager"],["managets","managers"],["managmenet","management"],["managment","management"],["manaise","mayonnaise"],["manal","manual"],["manange","manage"],["manangement","management"],["mananger","manager"],["manangers","managers"],["manaul","manual"],["manaully","manually"],["manauls","manuals"],["manaze","mayonnaise"],["mandatatory","mandatory"],["mandetory","mandatory"],["manement","management"],["maneouvre","manoeuvre"],["maneouvred","manoeuvred"],["maneouvres","manoeuvres"],["maneouvring","manoeuvring"],["manetain","maintain"],["manetained","maintained"],["manetainer","maintainer"],["manetainers","maintainers"],["manetaining","maintaining"],["manetains","maintains"],["mangaed","managed"],["mangaement","management"],["mangager","manager"],["mangagers","managers"],["mangement","management"],["mangementt","management"],["manifacture","manufacture"],["manifactured","manufactured"],["manifacturer","manufacturer"],["manifacturers","manufacturers"],["manifactures","manufactures"],["manifect","manifest"],["manipluate","manipulate"],["manipluated","manipulated"],["manipulatin","manipulating"],["manipulaton","manipulation"],["manipute","manipulate"],["maniputed","manipulated"],["maniputing","manipulating"],["manipution","manipulation"],["maniputions","manipulations"],["maniputor","manipulator"],["manisfestations","manifestations"],["maniuplate","manipulate"],["maniuplated","manipulated"],["maniuplates","manipulates"],["maniuplating","manipulating"],["maniuplation","manipulation"],["maniuplations","manipulations"],["maniuplator","manipulator"],["maniuplators","manipulators"],["mannor","manner"],["mannual","manual"],["mannually","manually"],["mannualy","manually"],["manoeuverability","maneuverability"],["manoeuvering","maneuvering"],["manouevring","manoeuvring"],["mantain","maintain"],["mantainable","maintainable"],["mantained","maintained"],["mantainer","maintainer"],["mantainers","maintainers"],["mantaining","maintaining"],["mantains","maintains"],["mantanine","maintain"],["mantanined","maintained"],["mantatory","mandatory"],["mantenance","maintenance"],["manualy","manually"],["manualyl","manually"],["manualyy","manually"],["manuell","manual"],["manuelly","manually"],["manufactuerd","manufactured"],["manufacturedd","manufactured"],["manufature","manufacture"],["manufatured","manufactured"],["manufaturing","manufacturing"],["manufaucturing","manufacturing"],["manulally","manually"],["manule","manual"],["manuley","manually"],["manully","manually"],["manuly","manually"],["manupilations","manipulations"],["manupulate","manipulate"],["manupulated","manipulated"],["manupulates","manipulates"],["manupulating","manipulating"],["manupulation","manipulation"],["manupulations","manipulations"],["manuver","maneuver"],["manyal","manual"],["manyally","manually"],["manyals","manuals"],["mapable","mappable"],["mape","map"],["maped","mapped"],["maping","mapping"],["mapings","mappings"],["mapp","map"],["mappeds","mapped"],["mappeed","mapped"],["mappping","mapping"],["mapppings","mappings"],["margings","margins"],["mariabd","MariaDB"],["mariage","marriage"],["marjority","majority"],["marketting","marketing"],["markey","marquee"],["markeys","marquees"],["marmelade","marmalade"],["marrage","marriage"],["marraige","marriage"],["marrtyred","martyred"],["marryied","married"],["marshmellow","marshmallow"],["marshmellows","marshmallows"],["marter","martyr"],["masakist","masochist"],["mashetty","machete"],["mashine","machine"],["mashined","machined"],["mashines","machines"],["masia","messiah"],["masicer","massacre"],["masiff","massif"],["maskerading","masquerading"],["maskeraid","masquerade"],["masos","macos"],["masquarade","masquerade"],["masqurade","masquerade"],["Massachusettes","Massachusetts"],["Massachussets","Massachusetts"],["Massachussetts","Massachusetts"],["massagebox","messagebox"],["massectomy","mastectomy"],["massewer","masseur"],["massmedia","mass media"],["massoose","masseuse"],["masster","master"],["masteer","master"],["masterbation","masturbation"],["mastquerade","masquerade"],["mata-data","meta-data"],["matadata","metadata"],["matainer","maintainer"],["matainers","maintainers"],["mataphysical","metaphysical"],["matatable","metatable"],["matc","match"],["matchies","matches"],["matchign","matching"],["matchin","matching"],["matchs","matches"],["matchter","matcher"],["matcing","matching"],["mateiral","material"],["mateirals","materials"],["matemathical","mathematical"],["materaial","material"],["materaials","materials"],["materail","material"],["materails","materials"],["materalists","materialist"],["materil","material"],["materilism","materialism"],["materilize","materialize"],["materils","materials"],["materla","material"],["materlas","materials"],["mathamatics","mathematics"],["mathces","matches"],["mathch","match"],["mathched","matched"],["mathches","matches"],["mathching","matching"],["mathcing","matching"],["mathed","matched"],["mathematicaly","mathematically"],["mathematican","mathematician"],["mathematicas","mathematics"],["mathes","matches"],["mathetician","mathematician"],["matheticians","mathematicians"],["mathimatic","mathematic"],["mathimatical","mathematical"],["mathimatically","mathematically"],["mathimatician","mathematician"],["mathimaticians","mathematicians"],["mathimatics","mathematics"],["mathing","matching"],["mathmatical","mathematical"],["mathmatically","mathematically"],["mathmatician","mathematician"],["mathmaticians","mathematicians"],["mathod","method"],["matinay","matinee"],["matix","matrix"],["matreial","material"],["matreials","materials"],["matresses","mattresses"],["matrial","material"],["matrials","materials"],["matser","master"],["matzch","match"],["mavrick","maverick"],["mawsoleum","mausoleum"],["maximice","maximize"],["maximim","maximum"],["maximimum","maximum"],["maximium","maximum"],["maximnum","maximum"],["maximnums","maximums"],["maximun","maximum"],["maxinum","maximum"],["maxium","maximum"],["maxiumum","maximum"],["maxmimum","maximum"],["maxmium","maximum"],["maxmiums","maximums"],["maxosx","macosx"],["maxumum","maximum"],["maybee","maybe"],["mayonase","mayonnaise"],["mayority","majority"],["mayu","may"],["mayybe","maybe"],["mazilla","Mozilla"],["mccarthyst","mccarthyist"],["mchanic","mechanic"],["mchanical","mechanical"],["mchanically","mechanically"],["mchanicals","mechanicals"],["mchanics","mechanics"],["mchanism","mechanism"],["mchanisms","mechanisms"],["mcroscope","microscope"],["mcroscopes","microscopes"],["mcroscopic","microscopic"],["mcroscopies","microscopies"],["mcroscopy","microscopy"],["mdification","modification"],["mdifications","modifications"],["mdified","modified"],["mdifier","modifier"],["mdifiers","modifiers"],["mdifies","modifies"],["mdify","modify"],["mdifying","modifying"],["mdoel","model"],["mdoeled","modeled"],["mdoeling","modeling"],["mdoelled","modelled"],["mdoelling","modelling"],["mdoels","models"],["meaasure","measure"],["meaasured","measured"],["meaasures","measures"],["meachanism","mechanism"],["meachanisms","mechanisms"],["meachinism","mechanism"],["meachinisms","mechanisms"],["meachnism","mechanism"],["meachnisms","mechanisms"],["meading","meaning"],["meaing","meaning"],["mealflur","millefleur"],["meanigfull","meaningful"],["meanign","meaning"],["meanin","meaning"],["meaninful","meaningful"],["meaningfull","meaningful"],["meanining","meaning"],["meaninless","meaningless"],["meaninng","meaning"],["meassurable","measurable"],["meassurably","measurably"],["meassure","measure"],["meassured","measured"],["meassurement","measurement"],["meassurements","measurements"],["meassures","measures"],["meassuring","measuring"],["measue","measure"],["measued","measured"],["measuement","measurement"],["measuements","measurements"],["measuer","measurer"],["measues","measures"],["measuing","measuring"],["measuremenet","measurement"],["measuremenets","measurements"],["measurmenet","measurement"],["measurmenets","measurements"],["measurment","measurement"],["measurments","measurements"],["meatadata","metadata"],["meatfile","metafile"],["meathod","method"],["meaure","measure"],["meaured","measured"],["meaurement","measurement"],["meaurements","measurements"],["meaurer","measurer"],["meaurers","measurers"],["meaures","measures"],["meauring","measuring"],["meausure","measure"],["meausures","measures"],["meber","member"],["mebmer","member"],["mebrain","membrane"],["mebrains","membranes"],["mebran","membrane"],["mebrans","membranes"],["mecahinsm","mechanism"],["mecahinsms","mechanisms"],["mecahnic","mechanic"],["mecahnics","mechanics"],["mecahnism","mechanism"],["mecanical","mechanical"],["mecanism","mechanism"],["mecanisms","mechanisms"],["meccob","macabre"],["mechamism","mechanism"],["mechamisms","mechanisms"],["mechananism","mechanism"],["mechancial","mechanical"],["mechandise","merchandise"],["mechanim","mechanism"],["mechanims","mechanisms"],["mechanis","mechanism"],["mechansim","mechanism"],["mechansims","mechanisms"],["mechine","machine"],["mechines","machines"],["mechinism","mechanism"],["mechnanism","mechanism"],["mechnism","mechanism"],["mechnisms","mechanisms"],["medacine","medicine"],["medai","media"],["meddo","meadow"],["meddos","meadows"],["medeival","medieval"],["medevial","medieval"],["medhod","method"],["medhods","methods"],["medievel","medieval"],["medifor","metaphor"],["medifors","metaphors"],["medioker","mediocre"],["mediphor","metaphor"],["mediphors","metaphors"],["medisinal","medicinal"],["mediterainnean","mediterranean"],["Mediteranean","Mediterranean"],["medow","meadow"],["medows","meadows"],["meeds","needs"],["meens","means"],["meerkrat","meerkat"],["meerly","merely"],["meetign","meeting"],["meganism","mechanism"],["mege","merge"],["mehcanic","mechanic"],["mehcanical","mechanical"],["mehcanically","mechanically"],["mehcanics","mechanics"],["mehod","method"],["mehodical","methodical"],["mehodically","methodically"],["mehods","methods"],["mehtod","method"],["mehtodical","methodical"],["mehtodically","methodically"],["mehtods","methods"],["meida","media"],["melancoly","melancholy"],["melieux","milieux"],["melineum","millennium"],["melineumms","millennia"],["melineums","millennia"],["melinneum","millennium"],["melinneums","millennia"],["mellineum","millennium"],["mellineums","millennia"],["mellinneum","millennium"],["mellinneums","millennia"],["membran","membrane"],["membranaphone","membranophone"],["membrans","membranes"],["memcahe","memcache"],["memcahed","memcached"],["memeasurement","measurement"],["memeber","member"],["memebered","remembered"],["memebers","members"],["memebership","membership"],["memeberships","memberships"],["memebr","member"],["memebrof","memberof"],["memebrs","members"],["mememory","memory"],["mememto","memento"],["memeory","memory"],["memer","member"],["memership","membership"],["memerships","memberships"],["memery","memory"],["memick","mimic"],["memicked","mimicked"],["memicking","mimicking"],["memics","mimics"],["memmber","member"],["memmick","mimic"],["memmicked","mimicked"],["memmicking","mimicking"],["memmics","mimics"],["memmory","memory"],["memoery","memory"],["memomry","memory"],["memor","memory"],["memoty","memory"],["memove","memmove"],["mempry","memory"],["memroy","memory"],["memwar","memoir"],["memwars","memoirs"],["memwoir","memoir"],["memwoirs","memoirs"],["menally","mentally"],["menas","means"],["menetion","mention"],["menetioned","mentioned"],["menetioning","mentioning"],["menetions","mentions"],["meni","menu"],["menioned","mentioned"],["mensioned","mentioned"],["mensioning","mentioning"],["ment","meant"],["menthods","methods"],["mentiond","mentioned"],["mentione","mentioned"],["mentionned","mentioned"],["mentionning","mentioning"],["mentionnned","mentioned"],["menual","manual"],["menue","menu"],["menues","menus"],["menutitems","menuitems"],["meraj","mirage"],["merajes","mirages"],["merang","meringue"],["mercahnt","merchant"],["mercentile","mercantile"],["merchantibility","merchantability"],["merecat","meerkat"],["merecats","meerkats"],["mergable","mergeable"],["merget","merge"],["mergge","merge"],["mergged","merged"],["mergging","merging"],["mermory","memory"],["merory","memory"],["merrors","mirrors"],["mesage","message"],["mesages","messages"],["mesaureed","measured"],["meskeeto","mosquito"],["meskeetos","mosquitoes"],["mesoneen","mezzanine"],["mesoneens","mezzanines"],["messaes","messages"],["messag","message"],["messagetqueue","messagequeue"],["messagin","messaging"],["messagoe","message"],["messags","messages"],["messagses","messages"],["messanger","messenger"],["messangers","messengers"],["messave","message"],["messeges","messages"],["messenging","messaging"],["messgae","message"],["messgaed","messaged"],["messgaes","messages"],["messge","message"],["messges","messages"],["messsage","message"],["messsages","messages"],["messure","measure"],["messured","measured"],["messurement","measurement"],["messures","measures"],["messuring","measuring"],["messurment","measurement"],["mesure","measure"],["mesured","measured"],["mesurement","measurement"],["mesurements","measurements"],["mesures","measures"],["mesuring","measuring"],["mesurment","measurement"],["meta-attrubute","meta-attribute"],["meta-attrubutes","meta-attributes"],["meta-progamming","meta-programming"],["metacharater","metacharacter"],["metacharaters","metacharacters"],["metalic","metallic"],["metalurgic","metallurgic"],["metalurgical","metallurgical"],["metalurgy","metallurgy"],["metamorphysis","metamorphosis"],["metapackge","metapackage"],["metapackges","metapackages"],["metaphore","metaphor"],["metaphoricial","metaphorical"],["metaprogamming","metaprogramming"],["metatdata","metadata"],["metdata","metadata"],["meterial","material"],["meterials","materials"],["meterologist","meteorologist"],["meterology","meteorology"],["methaphor","metaphor"],["methaphors","metaphors"],["methd","method"],["methdos","methods"],["methds","methods"],["methid","method"],["methids","methods"],["methjod","method"],["methodd","method"],["methode","method"],["methoden","methods"],["methodss","methods"],["methon","method"],["methons","methods"],["methot","method"],["methots","methods"],["metifor","metaphor"],["metifors","metaphors"],["metion","mention"],["metioned","mentioned"],["metiphor","metaphor"],["metiphors","metaphors"],["metod","method"],["metodologies","methodologies"],["metodology","methodology"],["metods","methods"],["metrig","metric"],["metrigal","metrical"],["metrigs","metrics"],["mey","may"],["meybe","maybe"],["mezmorise","mesmerise"],["mezmorised","mesmerised"],["mezmoriser","mesmeriser"],["mezmorises","mesmerises"],["mezmorising","mesmerising"],["mezmorize","mesmerize"],["mezmorized","mesmerized"],["mezmorizer","mesmerizer"],["mezmorizes","mesmerizes"],["mezmorizing","mesmerizing"],["miagic","magic"],["miagical","magical"],["mial","mail"],["mices","mice"],["Michagan","Michigan"],["micorcode","microcode"],["micorcodes","microcodes"],["Micorsoft","Microsoft"],["micoscope","microscope"],["micoscopes","microscopes"],["micoscopic","microscopic"],["micoscopies","microscopies"],["micoscopy","microscopy"],["Micosoft","Microsoft"],["micrcontroller","microcontroller"],["micrcontrollers","microcontrollers"],["microcontroler","microcontroller"],["microcontrolers","microcontrollers"],["Microfost","Microsoft"],["microntroller","microcontroller"],["microntrollers","microcontrollers"],["microoseconds","microseconds"],["micropone","microphone"],["micropones","microphones"],["microprocesspr","microprocessor"],["microprocessprs","microprocessors"],["microseond","microsecond"],["microseonds","microseconds"],["Microsft","Microsoft"],["microship","microchip"],["microships","microchips"],["Microsof","Microsoft"],["Microsofot","Microsoft"],["Micrsft","Microsoft"],["Micrsoft","Microsoft"],["middlware","middleware"],["midevil","medieval"],["midified","modified"],["midpints","midpoints"],["midpiont","midpoint"],["midpionts","midpoints"],["midpont","midpoint"],["midponts","midpoints"],["mige","midge"],["miges","midges"],["migh","might"],["migrateable","migratable"],["migth","might"],["miht","might"],["miinimisation","minimisation"],["miinimise","minimise"],["miinimised","minimised"],["miinimises","minimises"],["miinimising","minimising"],["miinimization","minimization"],["miinimize","minimize"],["miinimized","minimized"],["miinimizes","minimizes"],["miinimizing","minimizing"],["miinimum","minimum"],["mikrosecond","microsecond"],["mikroseconds","microseconds"],["milage","mileage"],["milages","mileages"],["mileau","milieu"],["milennia","millennia"],["milennium","millennium"],["mileu","milieu"],["miliary","military"],["milicious","malicious"],["miliciousally","maliciously"],["miliciously","maliciously"],["milicous","malicious"],["milicousally","maliciously"],["milicously","maliciously"],["miligram","milligram"],["milimeter","millimeter"],["milimeters","millimeters"],["milimetre","millimetre"],["milimetres","millimetres"],["milimiters","millimeters"],["milion","million"],["miliraty","military"],["milisecond","millisecond"],["miliseconds","milliseconds"],["milisecons","milliseconds"],["milivolts","millivolts"],["milktoast","milquetoast"],["milktoasts","milquetoasts"],["milleneum","millennium"],["millenia","millennia"],["millenial","millennial"],["millenialism","millennialism"],["millenials","millennials"],["millenium","millennium"],["millepede","millipede"],["milliescond","millisecond"],["milliesconds","milliseconds"],["millimiter","millimeter"],["millimiters","millimeters"],["millimitre","millimetre"],["millimitres","millimetres"],["millioniare","millionaire"],["millioniares","millionaires"],["millisencond","millisecond"],["millisenconds","milliseconds"],["milliseond","millisecond"],["milliseonds","milliseconds"],["millitant","militant"],["millitary","military"],["millon","million"],["millsecond","millisecond"],["millseconds","milliseconds"],["millsencond","millisecond"],["millsenconds","milliseconds"],["miltary","military"],["miltisite","multisite"],["milyew","milieu"],["mimach","mismatch"],["mimachd","mismatched"],["mimached","mismatched"],["mimaches","mismatches"],["mimaching","mismatching"],["mimatch","mismatch"],["mimatchd","mismatched"],["mimatched","mismatched"],["mimatches","mismatches"],["mimatching","mismatching"],["mimicing","mimicking"],["mimick","mimic"],["mimicks","mimics"],["mimimal","minimal"],["mimimum","minimum"],["mimimun","minimum"],["miminal","minimal"],["miminally","minimally"],["miminaly","minimally"],["miminise","minimise"],["miminised","minimised"],["miminises","minimises"],["miminising","minimising"],["miminize","minimize"],["miminized","minimized"],["miminizes","minimizes"],["miminizing","minimizing"],["mimmick","mimic"],["mimmicked","mimicked"],["mimmicking","mimicking"],["mimmics","mimics"],["minature","miniature"],["minerial","mineral"],["MingGW","MinGW"],["minimam","minimum"],["minimial","minimal"],["minimium","minimum"],["minimsation","minimisation"],["minimse","minimise"],["minimsed","minimised"],["minimses","minimises"],["minimsing","minimising"],["minimumm","minimum"],["minimumn","minimum"],["minimun","minimum"],["minimzation","minimization"],["minimze","minimize"],["minimzed","minimized"],["minimzes","minimizes"],["minimzing","minimizing"],["mininal","minimal"],["mininise","minimise"],["mininised","minimised"],["mininises","minimises"],["mininising","minimising"],["mininize","minimize"],["mininized","minimized"],["mininizes","minimizes"],["mininizing","minimizing"],["mininum","minimum"],["miniscule","minuscule"],["miniscully","minusculely"],["miniture","miniature"],["minium","minimum"],["miniums","minimums"],["miniumum","minimum"],["minmal","minimal"],["minmum","minimum"],["minnimum","minimum"],["minnimums","minimums"],["minsitry","ministry"],["minstries","ministries"],["minstry","ministry"],["minum","minimum"],["minumum","minimum"],["minuscle","minuscule"],["minuts","minutes"],["miplementation","implementation"],["mirconesia","micronesia"],["mircophone","microphone"],["mircophones","microphones"],["mircoscope","microscope"],["mircoscopes","microscopes"],["mircoservice","microservice"],["mircoservices","microservices"],["mircosoft","Microsoft"],["mirgate","migrate"],["mirgated","migrated"],["mirgates","migrates"],["mirometer","micrometer"],["mirometers","micrometers"],["mirored","mirrored"],["miroring","mirroring"],["mirorr","mirror"],["mirorred","mirrored"],["mirorring","mirroring"],["mirorrs","mirrors"],["mirro","mirror"],["mirroed","mirrored"],["mirrorn","mirror"],["mirrorred","mirrored"],["mis-alignement","misalignment"],["mis-alignment","misalignment"],["mis-intepret","mis-interpret"],["mis-intepreted","mis-interpreted"],["mis-match","mismatch"],["misalignement","misalignment"],["misalinged","misaligned"],["misbehaive","misbehave"],["miscallenous","miscellaneous"],["misceancellous","miscellaneous"],["miscelaneous","miscellaneous"],["miscellanious","miscellaneous"],["miscellanous","miscellaneous"],["miscelleneous","miscellaneous"],["mischeivous","mischievous"],["mischevious","mischievous"],["mischevus","mischievous"],["mischevusly","mischievously"],["mischieveous","mischievous"],["mischieveously","mischievously"],["mischievious","mischievous"],["misconfiged","misconfigured"],["Miscrosoft","Microsoft"],["misdameanor","misdemeanor"],["misdameanors","misdemeanors"],["misdemenor","misdemeanor"],["misdemenors","misdemeanors"],["miselaneous","miscellaneous"],["miselaneously","miscellaneously"],["misellaneous","miscellaneous"],["misellaneously","miscellaneously"],["misformed","malformed"],["misfourtunes","misfortunes"],["misile","missile"],["mising","missing"],["misintepret","misinterpret"],["misintepreted","misinterpreted"],["misinterpert","misinterpret"],["misinterperted","misinterpreted"],["misinterperting","misinterpreting"],["misinterperts","misinterprets"],["misinterprett","misinterpret"],["misinterpretted","misinterpreted"],["misisng","missing"],["mismach","mismatch"],["mismached","mismatched"],["mismaches","mismatches"],["mismaching","mismatching"],["mismactch","mismatch"],["mismatchd","mismatched"],["mismatich","mismatch"],["Misouri","Missouri"],["mispell","misspell"],["mispelled","misspelled"],["mispelling","misspelling"],["mispellings","misspellings"],["mispelt","misspelt"],["mispronounciation","mispronunciation"],["misquito","mosquito"],["misquitos","mosquitos"],["missable","miscible"],["missconfiguration","misconfiguration"],["missconfigure","misconfigure"],["missconfigured","misconfigured"],["missconfigures","misconfigures"],["missconfiguring","misconfiguring"],["misscounted","miscounted"],["missen","mizzen"],["missign","missing"],["missingassignement","missingassignment"],["missings","missing"],["Missisipi","Mississippi"],["Missisippi","Mississippi"],["missle","missile"],["missleading","misleading"],["missletow","mistletoe"],["missmanaged","mismanaged"],["missmatch","mismatch"],["missmatchd","mismatched"],["missmatched","mismatched"],["missmatches","mismatches"],["missmatching","mismatching"],["missonary","missionary"],["misspel","misspell"],["misssing","missing"],["misstake","mistake"],["misstaken","mistaken"],["misstakes","mistakes"],["misstype","mistype"],["misstypes","mistypes"],["missunderstood","misunderstood"],["missuse","misuse"],["missused","misused"],["missusing","misusing"],["mistatch","mismatch"],["mistatchd","mismatched"],["mistatched","mismatched"],["mistatches","mismatches"],["mistatching","mismatching"],["misteek","mystique"],["misteeks","mystiques"],["misterious","mysterious"],["mistery","mystery"],["misteryous","mysterious"],["mistic","mystic"],["mistical","mystical"],["mistics","mystics"],["mistmatch","mismatch"],["mistmatched","mismatched"],["mistmatches","mismatches"],["mistmatching","mismatching"],["mistro","maestro"],["mistros","maestros"],["mistrow","maestro"],["mistrows","maestros"],["misue","misuse"],["misued","misused"],["misuing","misusing"],["miticate","mitigate"],["miticated","mitigated"],["miticateing","mitigating"],["miticates","mitigates"],["miticating","mitigating"],["miticator","mitigator"],["mittigate","mitigate"],["miximum","maximum"],["mixted","mixed"],["mixure","mixture"],["mjor","major"],["mkae","make"],["mkaes","makes"],["mkaing","making"],["mke","make"],["mkea","make"],["mmaped","mapped"],["mmatching","matching"],["mmbers","members"],["mmnemonic","mnemonic"],["mnay","many"],["mobify","modify"],["mocrochip","microchip"],["mocrochips","microchips"],["mocrocode","microcode"],["mocrocodes","microcodes"],["mocrocontroller","microcontroller"],["mocrocontrollers","microcontrollers"],["mocrophone","microphone"],["mocrophones","microphones"],["mocroprocessor","microprocessor"],["mocroprocessors","microprocessors"],["mocrosecond","microsecond"],["mocroseconds","microseconds"],["Mocrosoft","Microsoft"],["mocule","module"],["mocules","modules"],["moddel","model"],["moddeled","modeled"],["moddelled","modelled"],["moddels","models"],["modee","mode"],["modelinng","modeling"],["modell","model"],["modellinng","modelling"],["modernination","modernization"],["moderninations","modernizations"],["moderninationz","modernizations"],["modernizationz","modernizations"],["modesettting","modesetting"],["modeul","module"],["modeuls","modules"],["modfel","model"],["modfiable","modifiable"],["modfication","modification"],["modfications","modifications"],["modfide","modified"],["modfided","modified"],["modfider","modifier"],["modfiders","modifiers"],["modfides","modifies"],["modfied","modified"],["modfieid","modified"],["modfieir","modifier"],["modfieirs","modifiers"],["modfieis","modifies"],["modfier","modifier"],["modfiers","modifiers"],["modfies","modifies"],["modfifiable","modifiable"],["modfification","modification"],["modfifications","modifications"],["modfified","modified"],["modfifier","modifier"],["modfifiers","modifiers"],["modfifies","modifies"],["modfify","modify"],["modfifying","modifying"],["modfiiable","modifiable"],["modfiication","modification"],["modfiications","modifications"],["modfitied","modified"],["modfitier","modifier"],["modfitiers","modifiers"],["modfities","modifies"],["modfity","modify"],["modfitying","modifying"],["modfiy","modify"],["modfiying","modifying"],["modfy","modify"],["modfying","modifying"],["modications","modifications"],["modidfication","modification"],["modidfications","modifications"],["modidfied","modified"],["modidfier","modifier"],["modidfiers","modifiers"],["modidfies","modifies"],["modidfy","modify"],["modidfying","modifying"],["modifable","modifiable"],["modifaction","modification"],["modifactions","modifications"],["modifation","modification"],["modifations","modifications"],["modifcation","modification"],["modifcations","modifications"],["modifciation","modification"],["modifciations","modifications"],["modifcication","modification"],["modifcications","modifications"],["modifdied","modified"],["modifdy","modify"],["modifed","modified"],["modifer","modifier"],["modifers","modifiers"],["modifes","modifies"],["modiffer","modifier"],["modiffers","modifiers"],["modifiation","modification"],["modifiations","modifications"],["modificatioon","modification"],["modificatioons","modifications"],["modificaton","modification"],["modificatons","modifications"],["modifid","modified"],["modifified","modified"],["modifify","modify"],["modifing","modifying"],["modifires","modifiers"],["modifiy","modify"],["modifiying","modifying"],["modifiyng","modifying"],["modifled","modified"],["modifler","modifier"],["modiflers","modifiers"],["modift","modify"],["modifty","modify"],["modifu","modify"],["modifuable","modifiable"],["modifued","modified"],["modifx","modify"],["modifyable","modifiable"],["modiration","moderation"],["modle","model"],["modlue","module"],["modprobbing","modprobing"],["modprobeing","modprobing"],["modtified","modified"],["modue","module"],["moduel","module"],["moduels","modules"],["moduile","module"],["modukles","modules"],["modul","module"],["modules's","modules'"],["moduless","modules"],["modulie","module"],["modulu","modulo"],["modulues","modules"],["modyfy","modify"],["moent","moment"],["moeny","money"],["mofdified","modified"],["mofification","modification"],["mofified","modified"],["mofifies","modifies"],["mofify","modify"],["mohammedan","muslim"],["mohammedans","muslims"],["moint","mount"],["mointor","monitor"],["mointored","monitored"],["mointoring","monitoring"],["mointors","monitors"],["moleclues","molecules"],["momement","moment"],["momementarily","momentarily"],["momements","moments"],["momemtarily","momentarily"],["momemtary","momentary"],["momemtn","moment"],["momentarely","momentarily"],["momento","memento"],["momery","memory"],["momoent","moment"],["momoment","moment"],["momomentarily","momentarily"],["momoments","moments"],["momory","memory"],["monarkey","monarchy"],["monarkeys","monarchies"],["monarkies","monarchies"],["monestaries","monasteries"],["monestic","monastic"],["monickers","monikers"],["monitary","monetary"],["moniter","monitor"],["monitoing","monitoring"],["monkies","monkeys"],["monochorome","monochrome"],["monochromo","monochrome"],["monocrome","monochrome"],["monolite","monolithic"],["monontonicity","monotonicity"],["monopace","monospace"],["monotir","monitor"],["monotired","monitored"],["monotiring","monitoring"],["monotirs","monitors"],["monsday","Monday"],["Monserrat","Montserrat"],["monstrum","monster"],["montains","mountains"],["montaj","montage"],["montajes","montages"],["montanous","mountainous"],["monthe","month"],["monthes","months"],["montly","monthly"],["Montnana","Montana"],["monts","months"],["montypic","monotypic"],["moodify","modify"],["moounting","mounting"],["mopdule","module"],["mopre","more"],["mor","more"],["mordern","modern"],["morever","moreover"],["morg","morgue"],["morgage","mortgage"],["morges","morgues"],["morgs","morgues"],["morisette","morissette"],["mormalise","normalise"],["mormalised","normalised"],["mormalises","normalises"],["mormalize","normalize"],["mormalized","normalized"],["mormalizes","normalizes"],["morrisette","morissette"],["morroccan","moroccan"],["morrocco","morocco"],["morroco","morocco"],["mortage","mortgage"],["morter","mortar"],["moslty","mostly"],["mostlky","mostly"],["mosture","moisture"],["mosty","mostly"],["moteef","motif"],["moteefs","motifs"],["moteur","motor"],["moteured","motored"],["moteuring","motoring"],["moteurs","motors"],["mothing","nothing"],["motiviated","motivated"],["motiviation","motivation"],["motononic","monotonic"],["motoroloa","motorola"],["moudle","module"],["moudule","module"],["mountian","mountain"],["mountpiont","mountpoint"],["mountpionts","mountpoints"],["mouspointer","mousepointer"],["moutn","mount"],["moutned","mounted"],["moutning","mounting"],["moutnpoint","mountpoint"],["moutnpoints","mountpoints"],["moutns","mounts"],["mouvement","movement"],["mouvements","movements"],["movebackwrd","movebackward"],["moveble","movable"],["movemement","movement"],["movemements","movements"],["movememnt","movement"],["movememnts","movements"],["movememt","movement"],["movememts","movements"],["movemet","movement"],["movemets","movements"],["movemment","movement"],["movemments","movements"],["movemnet","movement"],["movemnets","movements"],["movemnt","movement"],["movemnts","movements"],["movment","movement"],["moziila","Mozilla"],["mozila","Mozilla"],["mozzilla","mozilla"],["mroe","more"],["msbild","MSBuild"],["msbilds","MSBuild's"],["msbuid","MSBuild"],["msbuids","MSBuild's"],["msbuld","MSBuild"],["msbulds","MSBuild's"],["msbulid","MSBuild"],["msbulids","MSBuild's"],["mssing","missing"],["msssge","message"],["mthod","method"],["mtuually","mutually"],["mucuous","mucous"],["muder","murder"],["mudering","murdering"],["mudule","module"],["mudules","modules"],["muext","mutex"],["muiltiple","multiple"],["muiltiples","multiples"],["muliple","multiple"],["muliples","multiples"],["mulithread","multithread"],["mulitiplier","multiplier"],["mulitipliers","multipliers"],["mulitpart","multipart"],["mulitpath","multipath"],["mulitple","multiple"],["mulitplication","multiplication"],["mulitplicative","multiplicative"],["mulitplied","multiplied"],["mulitplier","multiplier"],["mulitpliers","multipliers"],["mulitply","multiply"],["multi-dimenional","multi-dimensional"],["multi-dimenionsal","multi-dimensional"],["multi-langual","multi-lingual"],["multi-presistion","multi-precision"],["multi-threded","multi-threaded"],["multible","multiple"],["multibye","multibyte"],["multicat","multicast"],["multicultralism","multiculturalism"],["multidimenional","multi-dimensional"],["multidimenionsal","multi-dimensional"],["multidimensinal","multidimensional"],["multidimension","multidimensional"],["multidimensionnal","multidimensional"],["multidimentionnal","multidimensional"],["multiecast","multicast"],["multifuction","multifunction"],["multilangual","multilingual"],["multile","multiple"],["multilpe","multiple"],["multipe","multiple"],["multipes","multiples"],["multipiler","multiplier"],["multipilers","multipliers"],["multipled","multiplied"],["multiplers","multipliers"],["multipliciaton","multiplication"],["multiplicites","multiplicities"],["multiplicty","multiplicity"],["multiplikation","multiplication"],["multipling","multiplying"],["multipllication","multiplication"],["multiplyed","multiplied"],["multipresistion","multiprecision"],["multipul","multiple"],["multipy","multiply"],["multipyling","multiplying"],["multithreded","multithreaded"],["multitute","multitude"],["multivriate","multivariate"],["multixsite","multisite"],["multline","multiline"],["multliple","multiple"],["multliples","multiples"],["multliplied","multiplied"],["multliplier","multiplier"],["multlipliers","multipliers"],["multliplies","multiplies"],["multliply","multiply"],["multliplying","multiplying"],["multple","multiple"],["multples","multiples"],["multplied","multiplied"],["multplier","multiplier"],["multpliers","multipliers"],["multplies","multiplies"],["multply","multiply"],["multplying","multiplying"],["multy","multi"],["multy-thread","multithread"],["mumber","number"],["mumbers","numbers"],["munbers","numbers"],["muncipalities","municipalities"],["muncipality","municipality"],["municiple","municipal"],["munnicipality","municipality"],["munute","minute"],["murr","myrrh"],["muscial","musical"],["muscician","musician"],["muscicians","musicians"],["musn't","mustn't"],["must't","mustn't"],["mustator","mutator"],["muste","must"],["mutablity","mutability"],["mutbale","mutable"],["mutch","much"],["mutches","matches"],["mutecies","mutexes"],["mutexs","mutexes"],["muti","multi"],["muticast","multicast"],["mutices","mutexes"],["mutilcast","multicast"],["mutiliated","mutilated"],["mutimarked","multimarked"],["mutipath","multipath"],["mutiple","multiple"],["mutiply","multiply"],["mutli","multi"],["mutli-threaded","multi-threaded"],["mutlipart","multipart"],["mutliple","multiple"],["mutliples","multiples"],["mutliplication","multiplication"],["mutliplicites","multiplicities"],["mutliplier","multiplier"],["mutlipliers","multipliers"],["mutliply","multiply"],["mutully","mutually"],["mutux","mutex"],["mutuxes","mutexes"],["mutuxs","mutexes"],["muyst","must"],["myabe","maybe"],["mybe","maybe"],["myitereator","myiterator"],["myraid","myriad"],["mysef","myself"],["mysefl","myself"],["mysekf","myself"],["myselfe","myself"],["myselfes","myself"],["myselv","myself"],["myselve","myself"],["myselves","myself"],["myslef","myself"],["mysogynist","misogynist"],["mysogyny","misogyny"],["mysterous","mysterious"],["mystql","mysql"],["mystrow","maestro"],["mystrows","maestros"],["Mythraic","Mithraic"],["myu","my"],["nadly","badly"],["nagative","negative"],["nagatively","negatively"],["nagatives","negatives"],["nagivation","navigation"],["naieve","naive"],["nam","name"],["namaed","named"],["namaes","names"],["nameing","naming"],["namemespace","namespace"],["namepace","namespace"],["namepsace","namespace"],["namepsaces","namespaces"],["namesapce","namespace"],["namesapced","namespaced"],["namesapces","namespaces"],["namess","names"],["namesspaces","namespaces"],["namme","name"],["namne","name"],["namned","named"],["namnes","names"],["namnespace","namespace"],["namnespaces","namespaces"],["nams","names"],["nane","name"],["nanosencond","nanosecond"],["nanosenconds","nanoseconds"],["nanoseond","nanosecond"],["nanoseonds","nanoseconds"],["Naploeon","Napoleon"],["Napolean","Napoleon"],["Napoleonian","Napoleonic"],["nasted","nested"],["nasting","nesting"],["nastly","nasty"],["nastyness","nastiness"],["natched","matched"],["natches","matches"],["nativelyx","natively"],["natrual","natural"],["naturaly","naturally"],["naturely","naturally"],["naturual","natural"],["naturually","naturally"],["natvigation","navigation"],["navagate","navigate"],["navagating","navigating"],["navagation","navigation"],["navagitation","navigation"],["naviagte","navigate"],["naviagted","navigated"],["naviagtes","navigates"],["naviagting","navigating"],["naviagtion","navigation"],["navitvely","natively"],["navtive","native"],["navtives","natives"],["naxima","maxima"],["naximal","maximal"],["naximum","maximum"],["Nazereth","Nazareth"],["nclude","include"],["ndoe","node"],["ndoes","nodes"],["neady","needy"],["neagtive","negative"],["neares","nearest"],["nearset","nearest"],["necassery","necessary"],["necassry","necessary"],["necause","because"],["neccecarily","necessarily"],["neccecary","necessary"],["neccesarily","necessarily"],["neccesary","necessary"],["neccessarily","necessarily"],["neccessarry","necessary"],["neccessary","necessary"],["neccessities","necessities"],["neccessity","necessity"],["neccisary","necessary"],["neccsessary","necessary"],["necesarily","necessarily"],["necesarrily","necessarily"],["necesarry","necessary"],["necesary","necessary"],["necessaery","necessary"],["necessairly","necessarily"],["necessar","necessary"],["necessarilly","necessarily"],["necessarly","necessarily"],["necessarry","necessary"],["necessaryly","necessarily"],["necessay","necessary"],["necesserily","necessarily"],["necessery","necessary"],["necessesary","necessary"],["necessiate","necessitate"],["nechanism","mechanism"],["necssary","necessary"],["nedd","need"],["nedded","needed"],["neded","needed"],["nedia","media"],["nedium","medium"],["nediums","mediums"],["nedle","needle"],["neds","needs"],["needeed","needed"],["neeed","need"],["neeeded","needed"],["neeeding","needing"],["neeedle","needle"],["neeedn't","needn't"],["neeeds","needs"],["nees","needs"],["neesd","needs"],["neesds","needs"],["neested","nested"],["neesting","nesting"],["negaive","negative"],["negarive","negative"],["negatiotiable","negotiable"],["negatiotiate","negotiate"],["negatiotiated","negotiated"],["negatiotiates","negotiates"],["negatiotiating","negotiating"],["negatiotiation","negotiation"],["negatiotiations","negotiations"],["negatiotiator","negotiator"],["negatiotiators","negotiators"],["negativ","negative"],["negatve","negative"],["negible","negligible"],["negitiable","negotiable"],["negitiate","negotiate"],["negitiated","negotiated"],["negitiates","negotiates"],["negitiating","negotiating"],["negitiation","negotiation"],["negitiations","negotiations"],["negitiator","negotiator"],["negitiators","negotiators"],["negitive","negative"],["neglible","negligible"],["negligable","negligible"],["negligble","negligible"],["negoable","negotiable"],["negoate","negotiate"],["negoated","negotiated"],["negoates","negotiates"],["negoatiable","negotiable"],["negoatiate","negotiate"],["negoatiated","negotiated"],["negoatiates","negotiates"],["negoatiating","negotiating"],["negoatiation","negotiation"],["negoatiations","negotiations"],["negoatiator","negotiator"],["negoatiators","negotiators"],["negoating","negotiating"],["negoation","negotiation"],["negoations","negotiations"],["negoator","negotiator"],["negoators","negotiators"],["negociable","negotiable"],["negociate","negotiate"],["negociated","negotiated"],["negociates","negotiates"],["negociating","negotiating"],["negociation","negotiation"],["negociations","negotiations"],["negociator","negotiator"],["negociators","negotiators"],["negogtiable","negotiable"],["negogtiate","negotiate"],["negogtiated","negotiated"],["negogtiates","negotiates"],["negogtiating","negotiating"],["negogtiation","negotiation"],["negogtiations","negotiations"],["negogtiator","negotiator"],["negogtiators","negotiators"],["negoitable","negotiable"],["negoitate","negotiate"],["negoitated","negotiated"],["negoitates","negotiates"],["negoitating","negotiating"],["negoitation","negotiation"],["negoitations","negotiations"],["negoitator","negotiator"],["negoitators","negotiators"],["negoptionsotiable","negotiable"],["negoptionsotiate","negotiate"],["negoptionsotiated","negotiated"],["negoptionsotiates","negotiates"],["negoptionsotiating","negotiating"],["negoptionsotiation","negotiation"],["negoptionsotiations","negotiations"],["negoptionsotiator","negotiator"],["negoptionsotiators","negotiators"],["negosiable","negotiable"],["negosiate","negotiate"],["negosiated","negotiated"],["negosiates","negotiates"],["negosiating","negotiating"],["negosiation","negotiation"],["negosiations","negotiations"],["negosiator","negotiator"],["negosiators","negotiators"],["negotable","negotiable"],["negotaiable","negotiable"],["negotaiate","negotiate"],["negotaiated","negotiated"],["negotaiates","negotiates"],["negotaiating","negotiating"],["negotaiation","negotiation"],["negotaiations","negotiations"],["negotaiator","negotiator"],["negotaiators","negotiators"],["negotaible","negotiable"],["negotaite","negotiate"],["negotaited","negotiated"],["negotaites","negotiates"],["negotaiting","negotiating"],["negotaition","negotiation"],["negotaitions","negotiations"],["negotaitor","negotiator"],["negotaitors","negotiators"],["negotate","negotiate"],["negotated","negotiated"],["negotates","negotiates"],["negotatiable","negotiable"],["negotatiate","negotiate"],["negotatiated","negotiated"],["negotatiates","negotiates"],["negotatiating","negotiating"],["negotatiation","negotiation"],["negotatiations","negotiations"],["negotatiator","negotiator"],["negotatiators","negotiators"],["negotatible","negotiable"],["negotatie","negotiate"],["negotatied","negotiated"],["negotaties","negotiates"],["negotating","negotiating"],["negotation","negotiation"],["negotations","negotiations"],["negotatior","negotiator"],["negotatiors","negotiators"],["negotator","negotiator"],["negotators","negotiators"],["negothiable","negotiable"],["negothiate","negotiate"],["negothiated","negotiated"],["negothiates","negotiates"],["negothiating","negotiating"],["negothiation","negotiation"],["negothiations","negotiations"],["negothiator","negotiator"],["negothiators","negotiators"],["negotible","negotiable"],["negoticable","negotiable"],["negoticate","negotiate"],["negoticated","negotiated"],["negoticates","negotiates"],["negoticating","negotiating"],["negotication","negotiation"],["negotications","negotiations"],["negoticator","negotiator"],["negoticators","negotiators"],["negotinate","negotiate"],["negotioable","negotiable"],["negotioate","negotiate"],["negotioated","negotiated"],["negotioates","negotiates"],["negotioating","negotiating"],["negotioation","negotiation"],["negotioations","negotiations"],["negotioator","negotiator"],["negotioators","negotiators"],["negotioble","negotiable"],["negotion","negotiation"],["negotionable","negotiable"],["negotionate","negotiate"],["negotionated","negotiated"],["negotionates","negotiates"],["negotionating","negotiating"],["negotionation","negotiation"],["negotionations","negotiations"],["negotionator","negotiator"],["negotionators","negotiators"],["negotions","negotiations"],["negotiotable","negotiable"],["negotiotate","negotiate"],["negotiotated","negotiated"],["negotiotates","negotiates"],["negotiotating","negotiating"],["negotiotation","negotiation"],["negotiotations","negotiations"],["negotiotator","negotiator"],["negotiotators","negotiators"],["negotiote","negotiate"],["negotioted","negotiated"],["negotiotes","negotiates"],["negotioting","negotiating"],["negotiotion","negotiation"],["negotiotions","negotiations"],["negotiotor","negotiator"],["negotiotors","negotiators"],["negotitable","negotiable"],["negotitae","negotiate"],["negotitaed","negotiated"],["negotitaes","negotiates"],["negotitaing","negotiating"],["negotitaion","negotiation"],["negotitaions","negotiations"],["negotitaor","negotiator"],["negotitaors","negotiators"],["negotitate","negotiate"],["negotitated","negotiated"],["negotitates","negotiates"],["negotitating","negotiating"],["negotitation","negotiation"],["negotitations","negotiations"],["negotitator","negotiator"],["negotitators","negotiators"],["negotite","negotiate"],["negotited","negotiated"],["negotites","negotiates"],["negotiting","negotiating"],["negotition","negotiation"],["negotitions","negotiations"],["negotitor","negotiator"],["negotitors","negotiators"],["negoziable","negotiable"],["negoziate","negotiate"],["negoziated","negotiated"],["negoziates","negotiates"],["negoziating","negotiating"],["negoziation","negotiation"],["negoziations","negotiations"],["negoziator","negotiator"],["negoziators","negotiators"],["negtive","negative"],["neibhbors","neighbors"],["neibhbours","neighbours"],["neibor","neighbor"],["neiborhood","neighborhood"],["neiborhoods","neighborhoods"],["neibors","neighbors"],["neigbhor","neighbor"],["neigbhorhood","neighborhood"],["neigbhorhoods","neighborhoods"],["neigbhors","neighbors"],["neigbhour","neighbour"],["neigbhours","neighbours"],["neigbor","neighbor"],["neigborhood","neighborhood"],["neigboring","neighboring"],["neigbors","neighbors"],["neigbourhood","neighbourhood"],["neighbar","neighbor"],["neighbarhood","neighborhood"],["neighbarhoods","neighborhoods"],["neighbaring","neighboring"],["neighbars","neighbors"],["neighbbor","neighbor"],["neighbborhood","neighborhood"],["neighbborhoods","neighborhoods"],["neighbboring","neighboring"],["neighbbors","neighbors"],["neighbeard","neighborhood"],["neighbeards","neighborhoods"],["neighbehood","neighborhood"],["neighbehoods","neighborhoods"],["neighbeing","neighboring"],["neighbeod","neighborhood"],["neighbeods","neighborhoods"],["neighbeor","neighbor"],["neighbeordhood","neighborhood"],["neighbeordhoods","neighborhoods"],["neighbeorhod","neighborhood"],["neighbeorhods","neighborhoods"],["neighbeorhood","neighborhood"],["neighbeorhoods","neighborhoods"],["neighbeors","neighbors"],["neighber","neighbor"],["neighbergh","neighbor"],["neighberghs","neighbors"],["neighberhhod","neighborhood"],["neighberhhods","neighborhoods"],["neighberhhood","neighborhood"],["neighberhhoods","neighborhoods"],["neighberhing","neighboring"],["neighberhod","neighborhood"],["neighberhodd","neighborhood"],["neighberhodds","neighborhoods"],["neighberhods","neighborhoods"],["neighberhood","neighborhood"],["neighberhooding","neighboring"],["neighberhoods","neighborhoods"],["neighberhoof","neighborhood"],["neighberhoofs","neighborhoods"],["neighberhoood","neighborhood"],["neighberhooods","neighborhoods"],["neighberhoor","neighbor"],["neighberhoors","neighbors"],["neighberhoud","neighborhood"],["neighberhouds","neighborhoods"],["neighbering","neighboring"],["neighbers","neighbors"],["neighbes","neighbors"],["neighbet","neighbor"],["neighbethood","neighborhood"],["neighbethoods","neighborhoods"],["neighbets","neighbors"],["neighbeuing","neighbouring"],["neighbeurgh","neighbour"],["neighbeurghs","neighbours"],["neighbeurhing","neighbouring"],["neighbeurhooding","neighbouring"],["neighbeurhoor","neighbour"],["neighbeurhoors","neighbours"],["neighbeus","neighbours"],["neighbeut","neighbour"],["neighbeuthood","neighbourhood"],["neighbeuthoods","neighbourhoods"],["neighbeuts","neighbours"],["neighbhor","neighbor"],["neighbhorhood","neighborhood"],["neighbhorhoods","neighborhoods"],["neighbhoring","neighboring"],["neighbhors","neighbors"],["neighboard","neighborhood"],["neighboards","neighborhoods"],["neighbohood","neighborhood"],["neighbohoods","neighborhoods"],["neighboing","neighboring"],["neighbood","neighborhood"],["neighboods","neighborhoods"],["neighboordhood","neighborhood"],["neighboordhoods","neighborhoods"],["neighboorhod","neighborhood"],["neighboorhods","neighborhoods"],["neighboorhood","neighborhood"],["neighboorhoods","neighborhoods"],["neighbooring","neighboring"],["neighborgh","neighbor"],["neighborghs","neighbors"],["neighborhhod","neighborhood"],["neighborhhods","neighborhoods"],["neighborhhood","neighborhood"],["neighborhhoods","neighborhoods"],["neighborhing","neighboring"],["neighborhod","neighborhood"],["neighborhodd","neighborhood"],["neighborhodds","neighborhoods"],["neighborhods","neighborhoods"],["neighborhooding","neighboring"],["neighborhoof","neighborhood"],["neighborhoofs","neighborhoods"],["neighborhoood","neighborhood"],["neighborhooods","neighborhoods"],["neighborhoor","neighbor"],["neighborhoors","neighbors"],["neighborhoud","neighborhood"],["neighborhouds","neighborhoods"],["neighbos","neighbors"],["neighbot","neighbor"],["neighbothood","neighborhood"],["neighbothoods","neighborhoods"],["neighbots","neighbors"],["neighbouing","neighbouring"],["neighbourgh","neighbour"],["neighbourghs","neighbours"],["neighbourhhod","neighbourhood"],["neighbourhhods","neighbourhoods"],["neighbourhhood","neighbourhood"],["neighbourhhoods","neighbourhoods"],["neighbourhing","neighbouring"],["neighbourhod","neighbourhood"],["neighbourhodd","neighbourhood"],["neighbourhodds","neighbourhoods"],["neighbourhods","neighbourhoods"],["neighbourhooding","neighbouring"],["neighbourhoof","neighbourhood"],["neighbourhoofs","neighbourhoods"],["neighbourhoood","neighbourhood"],["neighbourhooods","neighbourhoods"],["neighbourhoor","neighbour"],["neighbourhoors","neighbours"],["neighbourhoud","neighbourhood"],["neighbourhouds","neighbourhoods"],["neighbous","neighbours"],["neighbout","neighbour"],["neighbouthood","neighbourhood"],["neighbouthoods","neighbourhoods"],["neighbouts","neighbours"],["neighbr","neighbor"],["neighbrs","neighbors"],["neighbur","neighbor"],["neighburhood","neighborhood"],["neighburhoods","neighborhoods"],["neighburing","neighboring"],["neighburs","neighbors"],["neigher","neither"],["neighobr","neighbor"],["neighobrhood","neighborhood"],["neighobrhoods","neighborhoods"],["neighobring","neighboring"],["neighobrs","neighbors"],["neighor","neighbor"],["neighorhood","neighborhood"],["neighorhoods","neighborhoods"],["neighoring","neighboring"],["neighors","neighbors"],["neighour","neighbour"],["neighourhood","neighbourhood"],["neighourhoods","neighbourhoods"],["neighouring","neighbouring"],["neighours","neighbours"],["neighror","neighbour"],["neighrorhood","neighbourhood"],["neighrorhoods","neighbourhoods"],["neighroring","neighbouring"],["neighrors","neighbours"],["neighrour","neighbour"],["neighrourhood","neighbourhood"],["neighrourhoods","neighbourhoods"],["neighrouring","neighbouring"],["neighrours","neighbours"],["neight","neither"],["neightbor","neighbor"],["neightborhood","neighborhood"],["neightborhoods","neighborhoods"],["neightboring","neighboring"],["neightbors","neighbors"],["neightbour","neighbour"],["neightbourhood","neighbourhood"],["neightbourhoods","neighbourhoods"],["neightbouring","neighbouring"],["neightbours","neighbours"],["neighter","neither"],["neightobr","neighbor"],["neightobrhood","neighborhood"],["neightobrhoods","neighborhoods"],["neightobring","neighboring"],["neightobrs","neighbors"],["neiter","neither"],["nelink","netlink"],["nenviroment","environment"],["neolitic","neolithic"],["nerver","never"],["nescesaries","necessaries"],["nescesarily","necessarily"],["nescesarrily","necessarily"],["nescesarry","necessary"],["nescessarily","necessarily"],["nescessary","necessary"],["nesesarily","necessarily"],["nessary","necessary"],["nessasarily","necessarily"],["nessasary","necessary"],["nessecarilt","necessarily"],["nessecarily","necessarily"],["nessecarry","necessary"],["nessecary","necessary"],["nesseccarily","necessarily"],["nesseccary","necessary"],["nessesarily","necessarily"],["nessesary","necessary"],["nessessarily","necessarily"],["nessessary","necessary"],["nestin","nesting"],["nestwork","network"],["netacpe","netscape"],["netcape","netscape"],["nethods","methods"],["netiher","neither"],["netowrk","network"],["netowrks","networks"],["netscpe","netscape"],["netwplit","netsplit"],["netwrok","network"],["netwroked","networked"],["netwroks","networks"],["netwrork","network"],["neumeric","numeric"],["nevelope","envelope"],["nevelopes","envelopes"],["nevere","never"],["neveretheless","nevertheless"],["nevers","never"],["neverthless","nevertheless"],["newine","newline"],["newines","newlines"],["newletters","newsletters"],["nework","network"],["neworks","networks"],["newslines","newlines"],["newthon","newton"],["newtork","network"],["Newyorker","New Yorker"],["niear","near"],["niearest","nearest"],["niether","neither"],["nighbor","neighbor"],["nighborhood","neighborhood"],["nighboring","neighboring"],["nighlties","nightlies"],["nighlty","nightly"],["nightfa;;","nightfall"],["nightime","nighttime"],["nimutes","minutes"],["nineth","ninth"],["ninima","minima"],["ninimal","minimal"],["ninimum","minimum"],["ninjs","ninja"],["ninteenth","nineteenth"],["nither","neither"],["nknown","unknown"],["nkow","know"],["nkwo","know"],["nmae","name"],["nned","need"],["nneeded","needed"],["nnumber","number"],["no-overide","no-override"],["nodels","models"],["nodess","nodes"],["nodulated","modulated"],["nofified","notified"],["nofity","notify"],["nohypen","nohyphen"],["nomber","number"],["nombered","numbered"],["nombering","numbering"],["nombers","numbers"],["nomimal","nominal"],["non-alphanumunder","non-alphanumeric"],["non-asii","non-ascii"],["non-assiged","non-assigned"],["non-bloking","non-blocking"],["non-compleeted","non-completed"],["non-complient","non-compliant"],["non-corelated","non-correlated"],["non-existant","non-existent"],["non-exluded","non-excluded"],["non-indentended","non-indented"],["non-inmediate","non-immediate"],["non-inreractive","non-interactive"],["non-instnat","non-instant"],["non-meausure","non-measure"],["non-negatiotiable","non-negotiable"],["non-negatiotiated","non-negotiated"],["non-negativ","non-negative"],["non-negoable","non-negotiable"],["non-negoated","non-negotiated"],["non-negoatiable","non-negotiable"],["non-negoatiated","non-negotiated"],["non-negociable","non-negotiable"],["non-negociated","non-negotiated"],["non-negogtiable","non-negotiable"],["non-negogtiated","non-negotiated"],["non-negoitable","non-negotiable"],["non-negoitated","non-negotiated"],["non-negoptionsotiable","non-negotiable"],["non-negoptionsotiated","non-negotiated"],["non-negosiable","non-negotiable"],["non-negosiated","non-negotiated"],["non-negotable","non-negotiable"],["non-negotaiable","non-negotiable"],["non-negotaiated","non-negotiated"],["non-negotaible","non-negotiable"],["non-negotaited","non-negotiated"],["non-negotated","non-negotiated"],["non-negotatiable","non-negotiable"],["non-negotatiated","non-negotiated"],["non-negotatible","non-negotiable"],["non-negotatied","non-negotiated"],["non-negothiable","non-negotiable"],["non-negothiated","non-negotiated"],["non-negotible","non-negotiable"],["non-negoticable","non-negotiable"],["non-negoticated","non-negotiated"],["non-negotioable","non-negotiable"],["non-negotioated","non-negotiated"],["non-negotioble","non-negotiable"],["non-negotionable","non-negotiable"],["non-negotionated","non-negotiated"],["non-negotiotable","non-negotiable"],["non-negotiotated","non-negotiated"],["non-negotiote","non-negotiated"],["non-negotitable","non-negotiable"],["non-negotitaed","non-negotiated"],["non-negotitated","non-negotiated"],["non-negotited","non-negotiated"],["non-negoziable","non-negotiable"],["non-negoziated","non-negotiated"],["non-priviliged","non-privileged"],["non-referenced-counted","non-reference-counted"],["non-replacable","non-replaceable"],["non-replacalbe","non-replaceable"],["non-reproducable","non-reproducible"],["non-seperable","non-separable"],["non-trasparent","non-transparent"],["non-useful","useless"],["non-usefull","useless"],["non-virutal","non-virtual"],["nonbloking","non-blocking"],["noncombatents","noncombatants"],["noncontigous","non-contiguous"],["nonesense","nonsense"],["nonesensical","nonsensical"],["nonexistance","nonexistence"],["nonexistant","nonexistent"],["nonnegarive","nonnegative"],["nonneighboring","non-neighboring"],["nonsence","nonsense"],["nonsens","nonsense"],["nonseperable","non-separable"],["nonte","note"],["nontheless","nonetheless"],["noo","no"],["noone","no one"],["noralize","normalize"],["noralized","normalized"],["noramal","normal"],["noramalise","normalise"],["noramalised","normalised"],["noramalises","normalises"],["noramalising","normalising"],["noramalize","normalize"],["noramalized","normalized"],["noramalizes","normalizes"],["noramalizing","normalizing"],["noramals","normals"],["noraml","normal"],["norhern","northern"],["norifications","notifications"],["normailzation","normalization"],["normaized","normalized"],["normale","normal"],["normales","normals"],["normaly","normally"],["normalyl","normally"],["normalyly","normally"],["normalysed","normalised"],["normalyy","normally"],["normalyzation","normalization"],["normalyze","normalize"],["normalyzed","normalized"],["normlly","normally"],["normnal","normal"],["normol","normal"],["normolise","normalise"],["normolize","normalize"],["northen","northern"],["northereastern","northeastern"],["nortmally","normally"],["notabley","notably"],["notaion","notation"],["notaly","notably"],["notasion","notation"],["notatin","notation"],["noteable","notable"],["noteably","notably"],["noteboook","notebook"],["noteboooks","notebooks"],["noteriety","notoriety"],["notfication","notification"],["notfications","notifications"],["notfy","notify"],["noth","north"],["nothern","northern"],["nothign","nothing"],["nothigng","nothing"],["nothihg","nothing"],["nothin","nothing"],["nothind","nothing"],["nothink","nothing"],["noticable","noticeable"],["noticably","noticeably"],["notication","notification"],["notications","notifications"],["noticeing","noticing"],["noticiable","noticeable"],["noticible","noticeable"],["notifaction","notification"],["notifactions","notifications"],["notifcation","notification"],["notifcations","notifications"],["notifed","notified"],["notifer","notifier"],["notifes","notifies"],["notifiation","notification"],["notificaction","notification"],["notificaiton","notification"],["notificaitons","notifications"],["notificaton","notification"],["notificatons","notifications"],["notificiation","notification"],["notificiations","notifications"],["notifiy","notify"],["notifiying","notifying"],["notifycation","notification"],["notity","notify"],["notmalize","normalize"],["notmalized","normalized"],["notmutch","notmuch"],["notning","nothing"],["nott","not"],["nottaion","notation"],["nottaions","notations"],["notwhithstanding","notwithstanding"],["noveau","nouveau"],["novemeber","November"],["Novemer","November"],["Novermber","November"],["nowadys","nowadays"],["nowdays","nowadays"],["nowe","now"],["ntification","notification"],["nuber","number"],["nubering","numbering"],["nubmer","number"],["nubmers","numbers"],["nucular","nuclear"],["nuculear","nuclear"],["nuisanse","nuisance"],["nuissance","nuisance"],["nulk","null"],["Nullabour","Nullarbor"],["nulll","null"],["numbber","number"],["numbbered","numbered"],["numbbering","numbering"],["numbbers","numbers"],["numberal","numeral"],["numberals","numerals"],["numberic","numeric"],["numberous","numerous"],["numberr","number"],["numberred","numbered"],["numberring","numbering"],["numberrs","numbers"],["numberss","numbers"],["numbert","number"],["numbet","number"],["numbets","numbers"],["numbres","numbers"],["numearate","numerate"],["numearation","numeration"],["numeber","number"],["numebering","numbering"],["numebers","numbers"],["numebr","number"],["numebrs","numbers"],["numer","number"],["numeraotr","numerator"],["numerbering","numbering"],["numercial","numerical"],["numercially","numerically"],["numering","numbering"],["numers","numbers"],["nummber","number"],["nummbers","numbers"],["nummeric","numeric"],["numnber","number"],["numnbered","numbered"],["numnbering","numbering"],["numnbers","numbers"],["numner","number"],["numners","numbers"],["numver","number"],["numvers","numbers"],["nunber","number"],["nunbers","numbers"],["Nuremburg","Nuremberg"],["nusance","nuisance"],["nutritent","nutrient"],["nutritents","nutrients"],["nuturing","nurturing"],["nwe","new"],["nwo","now"],["o'caml","OCaml"],["oaram","param"],["obay","obey"],["obect","object"],["obediance","obedience"],["obediant","obedient"],["obejct","object"],["obejcted","objected"],["obejction","objection"],["obejctions","objections"],["obejctive","objective"],["obejctively","objectively"],["obejctives","objectives"],["obejcts","objects"],["obeject","object"],["obejection","objection"],["obejects","objects"],["oberflow","overflow"],["oberflowed","overflowed"],["oberflowing","overflowing"],["oberflows","overflows"],["oberv","observe"],["obervant","observant"],["obervation","observation"],["obervations","observations"],["oberve","observe"],["oberved","observed"],["oberver","observer"],["obervers","observers"],["oberves","observes"],["oberving","observing"],["obervs","observes"],["obeservation","observation"],["obeservations","observations"],["obeserve","observe"],["obeserved","observed"],["obeserver","observer"],["obeservers","observers"],["obeserves","observes"],["obeserving","observing"],["obession","obsession"],["obessions","obsessions"],["obgect","object"],["obgects","objects"],["obhect","object"],["obhectification","objectification"],["obhectifies","objectifies"],["obhectify","objectify"],["obhectifying","objectifying"],["obhecting","objecting"],["obhection","objection"],["obhects","objects"],["obious","obvious"],["obiously","obviously"],["obivous","obvious"],["obivously","obviously"],["objec","object"],["objecs","objects"],["objectss","objects"],["objejct","object"],["objekt","object"],["objet","object"],["objetc","object"],["objetcs","objects"],["objets","objects"],["objtain","obtain"],["objtained","obtained"],["objtains","obtains"],["objump","objdump"],["oblitque","oblique"],["obnject","object"],["obscur","obscure"],["obselete","obsolete"],["obseravtion","observation"],["obseravtions","observations"],["observ","observe"],["observered","observed"],["obsevrer","observer"],["obsevrers","observers"],["obsolate","obsolete"],["obsolesence","obsolescence"],["obsolite","obsolete"],["obsolited","obsoleted"],["obsolte","obsolete"],["obsolted","obsoleted"],["obssessed","obsessed"],["obstacal","obstacle"],["obstancles","obstacles"],["obstruced","obstructed"],["obsure","obscure"],["obtaiend","obtained"],["obtaiens","obtains"],["obtainig","obtaining"],["obtaion","obtain"],["obtaioned","obtained"],["obtaions","obtains"],["obtrain","obtain"],["obtrained","obtained"],["obtrains","obtains"],["obusing","abusing"],["obvioulsy","obviously"],["obvisious","obvious"],["obvisous","obvious"],["obvisously","obviously"],["obyect","object"],["obyekt","object"],["ocasion","occasion"],["ocasional","occasional"],["ocasionally","occasionally"],["ocasionaly","occasionally"],["ocasioned","occasioned"],["ocasions","occasions"],["ocassion","occasion"],["ocassional","occasional"],["ocassionally","occasionally"],["ocassionaly","occasionally"],["ocassioned","occasioned"],["ocassions","occasions"],["occaisionally","occasionally"],["occaison","occasion"],["occasinal","occasional"],["occasinally","occasionally"],["occasioanlly","occasionally"],["occasionaly","occasionally"],["occassion","occasion"],["occassional","occasional"],["occassionally","occasionally"],["occassionaly","occasionally"],["occassioned","occasioned"],["occassions","occasions"],["occational","occasional"],["occationally","occasionally"],["occcur","occur"],["occcured","occurred"],["occcurs","occurs"],["occour","occur"],["occoured","occurred"],["occouring","occurring"],["occourring","occurring"],["occours","occurs"],["occrrance","occurrence"],["occrrances","occurrences"],["occrred","occurred"],["occrring","occurring"],["occsionally","occasionally"],["occucence","occurrence"],["occucences","occurrences"],["occulusion","occlusion"],["occuped","occupied"],["occupided","occupied"],["occuracy","accuracy"],["occurance","occurrence"],["occurances","occurrences"],["occurately","accurately"],["occurded","occurred"],["occured","occurred"],["occurence","occurrence"],["occurences","occurrences"],["occures","occurs"],["occuring","occurring"],["occurr","occur"],["occurrance","occurrence"],["occurrances","occurrences"],["occurrencs","occurrences"],["occurrs","occurs"],["oclock","o'clock"],["ocntext","context"],["ocorrence","occurrence"],["ocorrences","occurrences"],["octect","octet"],["octects","octets"],["octohedra","octahedra"],["octohedral","octahedral"],["octohedron","octahedron"],["ocuntries","countries"],["ocuntry","country"],["ocupied","occupied"],["ocupies","occupies"],["ocupy","occupy"],["ocupying","occupying"],["ocur","occur"],["ocurr","occur"],["ocurrance","occurrence"],["ocurred","occurred"],["ocurrence","occurrence"],["ocurrences","occurrences"],["ocurring","occurring"],["ocurrred","occurred"],["ocurrs","occurs"],["odly","oddly"],["ody","body"],["oen","one"],["ofcource","of course"],["offcers","officers"],["offcial","official"],["offcially","officially"],["offcials","officials"],["offerd","offered"],["offereings","offerings"],["offest","offset"],["offests","offsets"],["offfence","offence"],["offfences","offences"],["offfense","offense"],["offfenses","offenses"],["offfset","offset"],["offfsets","offsets"],["offic","office"],["offical","official"],["offically","officially"],["officals","officials"],["officaly","officially"],["officeal","official"],["officeally","officially"],["officeals","officials"],["officealy","officially"],["officialy","officially"],["offloded","offloaded"],["offred","offered"],["offsence","offence"],["offsense","offense"],["offsenses","offenses"],["offser","offset"],["offseted","offsetted"],["offseting","offsetting"],["offsetp","offset"],["offsett","offset"],["offstets","offsets"],["offten","often"],["oficial","official"],["oficially","officially"],["ofmodule","of module"],["ofo","of"],["ofrom","from"],["ofsetted","offsetted"],["ofsset","offset"],["oftenly","often"],["ofthe","of the"],["oherwise","otherwise"],["ohter","other"],["ohters","others"],["ohterwise","otherwise"],["oigin","origin"],["oiginal","original"],["oiginally","originally"],["oiginals","originals"],["oiginating","originating"],["oigins","origins"],["ois","is"],["ojbect","object"],["oje","one"],["oject","object"],["ojection","objection"],["ojective","objective"],["ojects","objects"],["ojekts","objects"],["okat","okay"],["oldes","oldest"],["olny","only"],["olt","old"],["olther","other"],["oly","only"],["omision","omission"],["omited","omitted"],["omiting","omitting"],["omitt","omit"],["omlette","omelette"],["ommision","omission"],["ommission","omission"],["ommit","omit"],["ommited","omitted"],["ommiting","omitting"],["ommits","omits"],["ommitted","omitted"],["ommitting","omitting"],["omniverous","omnivorous"],["omniverously","omnivorously"],["omplementaion","implementation"],["omplementation","implementation"],["omre","more"],["onchage","onchange"],["ond","one"],["one-dimenional","one-dimensional"],["one-dimenionsal","one-dimensional"],["onece","once"],["onedimenional","one-dimensional"],["onedimenionsal","one-dimensional"],["oneliners","one-liners"],["oneyway","oneway"],["ongly","only"],["onl","only"],["onliene","online"],["onlly","only"],["onlye","only"],["onlyonce","only once"],["onoly","only"],["onother","another"],["ons","owns"],["onself","oneself"],["ontain","contain"],["ontained","contained"],["ontainer","container"],["ontainers","containers"],["ontainging","containing"],["ontaining","containing"],["ontainor","container"],["ontainors","containers"],["ontains","contains"],["ontext","context"],["onthe","on the"],["ontop","on top"],["ontrolled","controlled"],["onw","own"],["onwed","owned"],["onwer","owner"],["onwership","ownership"],["onwing","owning"],["onws","owns"],["onyl","only"],["oommits","commits"],["ooutput","output"],["ooutputs","outputs"],["opactity","opacity"],["opactiy","opacity"],["opacy","opacity"],["opague","opaque"],["opatque","opaque"],["opbject","object"],["opbjective","objective"],["opbjects","objects"],["opeaaration","operation"],["opeaarations","operations"],["opeabcration","operation"],["opeabcrations","operations"],["opearand","operand"],["opearands","operands"],["opearate","operate"],["opearates","operates"],["opearating","operating"],["opearation","operation"],["opearations","operations"],["opearatios","operations"],["opearator","operator"],["opearators","operators"],["opearion","operation"],["opearions","operations"],["opearios","operations"],["opeariton","operation"],["opearitons","operations"],["opearitos","operations"],["opearnd","operand"],["opearnds","operands"],["opearor","operator"],["opearors","operators"],["opearte","operate"],["opearted","operated"],["opeartes","operates"],["opearting","operating"],["opeartion","operation"],["opeartions","operations"],["opeartios","operations"],["opeartor","operator"],["opeartors","operators"],["opeate","operate"],["opeates","operates"],["opeation","operation"],["opeational","operational"],["opeations","operations"],["opeatios","operations"],["opeator","operator"],["opeators","operators"],["opeatror","operator"],["opeatrors","operators"],["opeg","open"],["opeging","opening"],["opeing","opening"],["opeinging","opening"],["opeings","openings"],["opem","open"],["opemed","opened"],["opemess","openness"],["opeming","opening"],["opems","opens"],["openbrower","openbrowser"],["opended","opened"],["openeing","opening"],["openend","opened"],["openened","opened"],["openening","opening"],["openess","openness"],["openin","opening"],["openned","opened"],["openning","opening"],["operaand","operand"],["operaands","operands"],["operaion","operation"],["operaions","operations"],["operaiton","operation"],["operandes","operands"],["operaror","operator"],["operatation","operation"],["operatations","operations"],["operater","operator"],["operatings","operating"],["operatio","operation"],["operatione","operation"],["operatior","operator"],["operatng","operating"],["operato","operator"],["operaton","operation"],["operatons","operations"],["operattion","operation"],["operattions","operations"],["opereation","operation"],["opertaion","operation"],["opertaions","operations"],["opertion","operation"],["opertional","operational"],["opertions","operations"],["opertor","operator"],["opertors","operators"],["opetional","optional"],["ophan","orphan"],["ophtalmology","ophthalmology"],["opion","option"],["opionally","optionally"],["opions","options"],["opitionally","optionally"],["opiton","option"],["opitons","options"],["opject","object"],["opjected","objected"],["opjecteing","objecting"],["opjectification","objectification"],["opjectifications","objectifications"],["opjectified","objectified"],["opjecting","objecting"],["opjection","objection"],["opjections","objections"],["opjective","objective"],["opjectively","objectively"],["opjects","objects"],["opne","open"],["opned","opened"],["opnegroup","opengroup"],["opnssl","openssl"],["oponent","opponent"],["oportunity","opportunity"],["opose","oppose"],["oposed","opposed"],["oposite","opposite"],["oposition","opposition"],["oppenly","openly"],["opperate","operate"],["opperated","operated"],["opperates","operates"],["opperation","operation"],["opperational","operational"],["opperations","operations"],["oppertunist","opportunist"],["oppertunities","opportunities"],["oppertunity","opportunity"],["oppinion","opinion"],["oppinions","opinions"],["opponant","opponent"],["oppononent","opponent"],["opportunisticly","opportunistically"],["opportunistly","opportunistically"],["opportunties","opportunities"],["oppositition","opposition"],["oppossed","opposed"],["opprotunity","opportunity"],["opproximate","approximate"],["opps","oops"],["oppsofite","opposite"],["oppurtunity","opportunity"],["opration","operation"],["oprations","operations"],["opreating","operating"],["opreation","operation"],["opreations","operations"],["opression","oppression"],["opressive","oppressive"],["oprimization","optimization"],["oprimizations","optimizations"],["oprimize","optimize"],["oprimized","optimized"],["oprimizes","optimizes"],["optain","obtain"],["optained","obtained"],["optains","obtains"],["optaionl","optional"],["optening","opening"],["optet","opted"],["opthalmic","ophthalmic"],["opthalmologist","ophthalmologist"],["opthalmology","ophthalmology"],["opthamologist","ophthalmologist"],["optiional","optional"],["optimasation","optimization"],["optimazation","optimization"],["optimial","optimal"],["optimiality","optimality"],["optimisim","optimism"],["optimisitc","optimistic"],["optimisitic","optimistic"],["optimissm","optimism"],["optimitation","optimization"],["optimizaing","optimizing"],["optimizaton","optimization"],["optimizier","optimizer"],["optimiztion","optimization"],["optimiztions","optimizations"],["optimsitic","optimistic"],["optimyze","optimize"],["optimze","optimize"],["optimzie","optimize"],["optin","option"],["optinal","optional"],["optinally","optionally"],["optins","options"],["optio","option"],["optioanl","optional"],["optioin","option"],["optioinal","optional"],["optioins","options"],["optionalliy","optionally"],["optionallly","optionally"],["optionaly","optionally"],["optionel","optional"],["optiones","options"],["optionial","optional"],["optionn","option"],["optionnal","optional"],["optionnally","optionally"],["optionnaly","optionally"],["optionss","options"],["optios","options"],["optismied","optimised"],["optizmied","optimized"],["optmisation","optimisation"],["optmisations","optimisations"],["optmization","optimization"],["optmizations","optimizations"],["optmize","optimize"],["optmized","optimized"],["optoin","option"],["optoins","options"],["optomism","optimism"],["opton","option"],["optonal","optional"],["optonally","optionally"],["optons","options"],["opyion","option"],["opyions","options"],["orcale","oracle"],["orded","ordered"],["orderd","ordered"],["ordert","ordered"],["ording","ordering"],["ordner","order"],["orede","order"],["oredes","orders"],["oreding","ordering"],["oredred","ordered"],["orgamise","organise"],["organim","organism"],["organisaion","organisation"],["organisaions","organisations"],["organistion","organisation"],["organistions","organisations"],["organizaion","organization"],["organizaions","organizations"],["organiztion","organization"],["organiztions","organizations"],["organsiation","organisation"],["organsiations","organisations"],["organsied","organised"],["organsier","organiser"],["organsiers","organisers"],["organsies","organises"],["organsiing","organising"],["organziation","organization"],["organziations","organizations"],["organzied","organized"],["organzier","organizer"],["organziers","organizers"],["organzies","organizes"],["organziing","organizing"],["orgiginal","original"],["orgiginally","originally"],["orgiginals","originals"],["orginal","original"],["orginally","originally"],["orginals","originals"],["orginate","originate"],["orginated","originated"],["orginates","originates"],["orginating","originating"],["orginial","original"],["orginially","originally"],["orginials","originals"],["orginiate","originate"],["orginiated","originated"],["orginiates","originates"],["orgininal","original"],["orgininals","originals"],["orginisation","organisation"],["orginisations","organisations"],["orginised","organised"],["orginization","organization"],["orginizations","organizations"],["orginized","organized"],["orginx","originx"],["orginy","originy"],["orhpan","orphan"],["oriant","orient"],["oriantate","orientate"],["oriantated","orientated"],["oriantation","orientation"],["oridinarily","ordinarily"],["orieation","orientation"],["orieations","orientations"],["orienatate","orientate"],["orienatated","orientated"],["orienatation","orientation"],["orienation","orientation"],["orientaion","orientation"],["orientatied","orientated"],["oriente","oriented"],["orientiation","orientation"],["orientied","oriented"],["orientned","oriented"],["orietation","orientation"],["orietations","orientations"],["origanaly","originally"],["origial","original"],["origially","originally"],["origianal","original"],["origianally","originally"],["origianaly","originally"],["origianl","original"],["origianls","originals"],["origigin","origin"],["origiginal","original"],["origiginally","originally"],["origiginals","originals"],["originaly","originally"],["originial","original"],["originially","originally"],["originiated","originated"],["originiating","originating"],["origininal","original"],["origininate","originate"],["origininated","originated"],["origininates","originates"],["origininating","originating"],["origining","originating"],["originnally","originally"],["origion","origin"],["origional","original"],["origionally","originally"],["orign","origin"],["orignal","original"],["orignally","originally"],["orignate","originate"],["orignated","originated"],["orignates","originates"],["orignial","original"],["orignially","originally"],["origninal","original"],["oringal","original"],["oringally","originally"],["orpan","orphan"],["orpanage","orphanage"],["orpaned","orphaned"],["orpans","orphans"],["orriginal","original"],["orthagnal","orthogonal"],["orthagonal","orthogonal"],["orthagonalize","orthogonalize"],["orthoganal","orthogonal"],["orthoganalize","orthogonalize"],["orthognal","orthogonal"],["orthonormalizatin","orthonormalization"],["ortogonal","orthogonal"],["ortogonality","orthogonality"],["osbscure","obscure"],["osciallator","oscillator"],["oscilate","oscillate"],["oscilated","oscillated"],["oscilating","oscillating"],["oscilator","oscillator"],["oscilliscope","oscilloscope"],["oscilliscopes","oscilloscopes"],["osffset","offset"],["osffsets","offsets"],["osffsetting","offsetting"],["osicllations","oscillations"],["otain","obtain"],["otained","obtained"],["otains","obtains"],["otehr","other"],["otehrwice","otherwise"],["otehrwise","otherwise"],["otehrwize","otherwise"],["oterwice","otherwise"],["oterwise","otherwise"],["oterwize","otherwise"],["othe","other"],["othere","other"],["otherewise","otherwise"],["otherise","otherwise"],["otheriwse","otherwise"],["otherwaise","otherwise"],["otherways","otherwise"],["otherweis","otherwise"],["otherweise","otherwise"],["otherwhere","elsewhere"],["otherwhile","otherwise"],["otherwhise","otherwise"],["otherwice","otherwise"],["otherwide","otherwise"],["otherwis","otherwise"],["otherwize","otherwise"],["otherwordly","otherworldly"],["otherwose","otherwise"],["otherwrite","overwrite"],["otherws","otherwise"],["otherwse","otherwise"],["otherwsie","otherwise"],["otherwsise","otherwise"],["otherwuise","otherwise"],["otherwwise","otherwise"],["otherwyse","otherwise"],["othewice","otherwise"],["othewise","otherwise"],["othewize","otherwise"],["otho","otoh"],["othographic","orthographic"],["othwerise","otherwise"],["othwerwise","otherwise"],["othwhise","otherwise"],["otification","notification"],["otiginal","original"],["otion","option"],["otionally","optionally"],["otions","options"],["otpion","option"],["otpions","options"],["otput","output"],["otu","out"],["oublisher","publisher"],["ouer","outer"],["ouevre","oeuvre"],["oultinenodes","outlinenodes"],["oultiner","outliner"],["oultline","outline"],["oultlines","outlines"],["ountline","outline"],["ouptut","output"],["ouptuted","outputted"],["ouptuting","outputting"],["ouptuts","outputs"],["ouput","output"],["ouputarea","outputarea"],["ouputs","outputs"],["ouputted","outputted"],["ouputting","outputting"],["ourselfes","ourselves"],["ourselfs","ourselves"],["ourselvs","ourselves"],["ouside","outside"],["oustanding","outstanding"],["oustide","outside"],["outbut","output"],["outbuts","outputs"],["outgoign","outgoing"],["outisde","outside"],["outllook","outlook"],["outoign","outgoing"],["outout","output"],["outperfoem","outperform"],["outperfoeming","outperforming"],["outperfom","outperform"],["outperfome","outperform"],["outperfomeing","outperforming"],["outperfoming","outperforming"],["outperfomr","outperform"],["outperfomring","outperforming"],["outpout","output"],["outpouts","outputs"],["outpupt","output"],["outpusts","outputs"],["outputed","outputted"],["outputing","outputting"],["outselves","ourselves"],["outsid","outside"],["outter","outer"],["outtermost","outermost"],["outupt","output"],["outupts","outputs"],["outuput","output"],["outut","output"],["oututs","outputs"],["outweight","outweigh"],["outweights","outweighs"],["ouur","our"],["ouurs","ours"],["oveerun","overrun"],["oveflow","overflow"],["oveflowed","overflowed"],["oveflowing","overflowing"],["oveflows","overflows"],["ovelap","overlap"],["ovelapping","overlapping"],["over-engeneer","over-engineer"],["over-engeneering","over-engineering"],["overaall","overall"],["overal","overall"],["overcompansate","overcompensate"],["overcompansated","overcompensated"],["overcompansates","overcompensates"],["overcompansating","overcompensating"],["overcompansation","overcompensation"],["overcompansations","overcompensations"],["overengeneer","overengineer"],["overengeneering","overengineering"],["overfl","overflow"],["overfow","overflow"],["overfowed","overflowed"],["overfowing","overflowing"],["overfows","overflows"],["overhread","overhead"],["overiddden","overridden"],["overidden","overridden"],["overide","override"],["overiden","overridden"],["overides","overrides"],["overiding","overriding"],["overlaped","overlapped"],["overlaping","overlapping"],["overlapp","overlap"],["overlayed","overlaid"],["overlflow","overflow"],["overlflowed","overflowed"],["overlflowing","overflowing"],["overlflows","overflows"],["overlfow","overflow"],["overlfowed","overflowed"],["overlfowing","overflowing"],["overlfows","overflows"],["overlodaded","overloaded"],["overloded","overloaded"],["overlodes","overloads"],["overlow","overflow"],["overlowing","overflowing"],["overlows","overflows"],["overreidden","overridden"],["overreide","override"],["overreides","overrides"],["overriabled","overridable"],["overriddable","overridable"],["overriddden","overridden"],["overriddes","overrides"],["overridding","overriding"],["overrideable","overridable"],["overriden","overridden"],["overrident","overridden"],["overridiing","overriding"],["overrids","overrides"],["overrriddden","overridden"],["overrridden","overridden"],["overrride","override"],["overrriden","overridden"],["overrrides","overrides"],["overrriding","overriding"],["overrrun","overrun"],["overshaddowed","overshadowed"],["oversubcribe","oversubscribe"],["oversubcribed","oversubscribed"],["oversubcribes","oversubscribes"],["oversubcribing","oversubscribing"],["oversubscibe","oversubscribe"],["oversubscibed","oversubscribed"],["oversubscirbe","oversubscribe"],["oversubscirbed","oversubscribed"],["overthere","over there"],["overun","overrun"],["overvise","otherwise"],["overvize","otherwise"],["overvride","override"],["overvrides","overrides"],["overvrite","overwrite"],["overvrites","overwrites"],["overwelm","overwhelm"],["overwelming","overwhelming"],["overwheliming","overwhelming"],["overwiew","overview"],["overwirte","overwrite"],["overwirting","overwriting"],["overwirtten","overwritten"],["overwise","otherwise"],["overwite","overwrite"],["overwites","overwrites"],["overwitten","overwritten"],["overwize","otherwise"],["overwride","overwrite"],["overwriteable","overwritable"],["overwriten","overwritten"],["overwritren","overwritten"],["overwrittes","overwrites"],["overwrittin","overwriting"],["overwritting","overwriting"],["ovewrite","overwrite"],["ovewrites","overwrites"],["ovewriting","overwriting"],["ovewritten","overwritten"],["ovewrote","overwrote"],["ovride","override"],["ovrides","overrides"],["ovrlapped","overlapped"],["ovrridable","overridable"],["ovrridables","overridables"],["ovrwrt","overwrite"],["ovservable","observable"],["ovservation","observation"],["ovserve","observe"],["ovveride","override"],["ovverridden","overridden"],["ovverride","override"],["ovverrides","overrides"],["ovverriding","overriding"],["owener","owner"],["owerflow","overflow"],["owerflowed","overflowed"],["owerflowing","overflowing"],["owerflows","overflows"],["owership","ownership"],["owervrite","overwrite"],["owervrites","overwrites"],["owerwrite","overwrite"],["owerwrites","overwrites"],["owful","awful"],["ownder","owner"],["ownerhsip","ownership"],["ownner","owner"],["ownward","onward"],["ownwer","owner"],["ownwership","ownership"],["owrk","work"],["owudl","would"],["oxigen","oxygen"],["oximoron","oxymoron"],["oxzillary","auxiliary"],["oyu","you"],["p0enis","penis"],["paackage","package"],["pacakge","package"],["pacakges","packages"],["pacakging","packaging"],["paceholder","placeholder"],["pachage","package"],["paches","patches"],["pacht","patch"],["pachtches","patches"],["pachtes","patches"],["pacjage","package"],["pacjages","packages"],["packacge","package"],["packaeg","package"],["packaege","package"],["packaeges","packages"],["packaegs","packages"],["packag","package"],["packags","packages"],["packaing","packaging"],["packats","packets"],["packege","package"],["packge","package"],["packged","packaged"],["packgement","packaging"],["packges'","packages'"],["packges","packages"],["packgs","packages"],["packhage","package"],["packhages","packages"],["packtes","packets"],["pactch","patch"],["pactched","patched"],["pactches","patches"],["padam","param"],["padds","pads"],["pading","padding"],["paermission","permission"],["paermissions","permissions"],["paeth","path"],["pagagraph","paragraph"],["pahses","phases"],["paide","paid"],["painiting","painting"],["paintile","painttile"],["paintin","painting"],["paitience","patience"],["paiting","painting"],["pakage","package"],["pakageimpl","packageimpl"],["pakages","packages"],["pakcage","package"],["paket","packet"],["pakge","package"],["pakvage","package"],["palatte","palette"],["paleolitic","paleolithic"],["palete","palette"],["paliamentarian","parliamentarian"],["Palistian","Palestinian"],["Palistinian","Palestinian"],["Palistinians","Palestinians"],["pallete","palette"],["pallette","palette"],["palletted","paletted"],["paltette","palette"],["paltform","platform"],["pamflet","pamphlet"],["pamplet","pamphlet"],["paniced","panicked"],["panicing","panicking"],["pannel","panel"],["pannels","panels"],["pantomine","pantomime"],["paoition","position"],["paor","pair"],["Papanicalou","Papanicolaou"],["paradime","paradigm"],["paradym","paradigm"],["paraemeter","parameter"],["paraemeters","parameters"],["paraeters","parameters"],["parafanalia","paraphernalia"],["paragaph","paragraph"],["paragaraph","paragraph"],["paragarapha","paragraph"],["paragarph","paragraph"],["paragarphs","paragraphs"],["paragph","paragraph"],["paragpraph","paragraph"],["paragraphy","paragraph"],["paragrphs","paragraphs"],["parahaps","perhaps"],["paralel","parallel"],["paralelising","parallelising"],["paralelism","parallelism"],["paralelizing","parallelizing"],["paralell","parallel"],["paralelle","parallel"],["paralellism","parallelism"],["paralellization","parallelization"],["paralelly","parallelly"],["paralely","parallelly"],["paralle","parallel"],["parallell","parallel"],["parallely","parallelly"],["paralles","parallels"],["parallization","parallelization"],["parallize","parallelize"],["parallized","parallelized"],["parallizes","parallelizes"],["parallizing","parallelizing"],["paralllel","parallel"],["paralllels","parallels"],["paramameter","parameter"],["paramameters","parameters"],["paramater","parameter"],["paramaters","parameters"],["paramemeter","parameter"],["paramemeters","parameters"],["paramemter","parameter"],["paramemters","parameters"],["paramenet","parameter"],["paramenets","parameters"],["paramenter","parameter"],["paramenters","parameters"],["paramer","parameter"],["paramert","parameter"],["paramerters","parameters"],["paramerts","parameters"],["paramete","parameter"],["parameteras","parameters"],["parameteres","parameters"],["parameterical","parametrical"],["parameterts","parameters"],["parametes","parameters"],["parametised","parametrised"],["parametr","parameter"],["parametre","parameter"],["parametreless","parameterless"],["parametres","parameters"],["parametrs","parameters"],["parametter","parameter"],["parametters","parameters"],["paramss","params"],["paramter","parameter"],["paramterer","parameter"],["paramterers","parameters"],["paramteres","parameters"],["paramterize","parameterize"],["paramterless","parameterless"],["paramters","parameters"],["paramtrical","parametrical"],["parana","piranha"],["paraniac","paranoiac"],["paranoya","paranoia"],["parant","parent"],["parantheses","parentheses"],["paranthesis","parenthesis"],["parants","parents"],["paraphanalia","paraphernalia"],["paraphenalia","paraphernalia"],["pararagraph","paragraph"],["pararaph","paragraph"],["parareter","parameter"],["parargaph","paragraph"],["parargaphs","paragraphs"],["pararmeter","parameter"],["pararmeters","parameters"],["parastic","parasitic"],["parastics","parasitics"],["paratheses","parentheses"],["paratmers","parameters"],["paravirutalisation","paravirtualisation"],["paravirutalise","paravirtualise"],["paravirutalised","paravirtualised"],["paravirutalization","paravirtualization"],["paravirutalize","paravirtualize"],["paravirutalized","paravirtualized"],["parctical","practical"],["parctically","practically"],["pard","part"],["parellelogram","parallelogram"],["parellels","parallels"],["parem","param"],["paremeter","parameter"],["paremeters","parameters"],["paremter","parameter"],["paremters","parameters"],["parenthese","parentheses"],["parenthesed","parenthesized"],["parenthesies","parentheses"],["parenthises","parentheses"],["parenthsis","parenthesis"],["parge","large"],["parial","partial"],["parially","partially"],["paricular","particular"],["paricularly","particularly"],["parisitic","parasitic"],["paritally","partially"],["paritals","partials"],["paritial","partial"],["parition","partition"],["paritioning","partitioning"],["paritions","partitions"],["paritition","partition"],["parititioned","partitioned"],["parititioner","partitioner"],["parititiones","partitions"],["parititioning","partitioning"],["parititions","partitions"],["paritiy","parity"],["parituclar","particular"],["parliment","parliament"],["parmaeter","parameter"],["parmaeters","parameters"],["parmameter","parameter"],["parmameters","parameters"],["parmaters","parameters"],["parmeter","parameter"],["parmeters","parameters"],["parmter","parameter"],["parmters","parameters"],["parnoia","paranoia"],["parnter","partner"],["parntered","partnered"],["parntering","partnering"],["parnters","partners"],["parntership","partnership"],["parnterships","partnerships"],["parrakeets","parakeets"],["parralel","parallel"],["parrallel","parallel"],["parrallell","parallel"],["parrallelly","parallelly"],["parrallely","parallelly"],["parrent","parent"],["parseing","parsing"],["parsering","parsing"],["parsin","parsing"],["parstree","parse tree"],["partaining","pertaining"],["partcular","particular"],["partcularity","particularity"],["partcularly","particularly"],["parth","path"],["partialy","partially"],["particalar","particular"],["particalarly","particularly"],["particale","particle"],["particales","particles"],["partically","partially"],["particals","particles"],["particaluar","particular"],["particaluarly","particularly"],["particalur","particular"],["particalurly","particularly"],["particant","participant"],["particaular","particular"],["particaularly","particularly"],["particaulr","particular"],["particaulrly","particularly"],["particlar","particular"],["particlars","particulars"],["particually","particularly"],["particualr","particular"],["particuar","particular"],["particuarly","particularly"],["particulaly","particularly"],["particularily","particularly"],["particulary","particularly"],["particuliar","particular"],["partifular","particular"],["partiiton","partition"],["partiitoned","partitioned"],["partiitoning","partitioning"],["partiitons","partitions"],["partioned","partitioned"],["partirion","partition"],["partirioned","partitioned"],["partirioning","partitioning"],["partirions","partitions"],["partision","partition"],["partisioned","partitioned"],["partisioning","partitioning"],["partisions","partitions"],["partitial","partial"],["partiticipant","participant"],["partiticipants","participants"],["partiticular","particular"],["partitinioning","partitioning"],["partitioing","partitioning"],["partitiones","partitions"],["partitionned","partitioned"],["partitionning","partitioning"],["partitionns","partitions"],["partitionss","partitions"],["partiton","partition"],["partitoned","partitioned"],["partitoning","partitioning"],["partitons","partitions"],["partiula","particular"],["partiular","particular"],["partiularly","particularly"],["partiulars","particulars"],["pasengers","passengers"],["paser","parser"],["pasesd","passed"],["pash","hash"],["pasitioning","positioning"],["pasive","passive"],["pasre","parse"],["pasred","parsed"],["pasres","parses"],["passerbys","passersby"],["passin","passing"],["passiv","passive"],["passowrd","password"],["passs","pass"],["passsed","passed"],["passsing","passing"],["passthrought","passthrough"],["passthruogh","passthrough"],["passtime","pastime"],["passtrough","passthrough"],["passwird","password"],["passwirds","passwords"],["passwrod","password"],["passwrods","passwords"],["pasteing","pasting"],["pasttime","pastime"],["pastural","pastoral"],["pasword","password"],["paswords","passwords"],["patameter","parameter"],["patameters","parameters"],["patcket","packet"],["patckets","packets"],["patern","pattern"],["paterns","patterns"],["pathalogical","pathological"],["pathame","pathname"],["pathames","pathnames"],["pathane","pathname"],["pathced","patched"],["pathes","paths"],["pathign","pathing"],["pathnme","pathname"],["patholgoical","pathological"],["patial","spatial"],["paticular","particular"],["paticularly","particularly"],["patition","partition"],["pattented","patented"],["pattersn","patterns"],["pavillion","pavilion"],["pavillions","pavilions"],["pa\xEDnt","paint"],["pblisher","publisher"],["pbulisher","publisher"],["peacd","peace"],["peacefuland","peaceful and"],["peacify","pacify"],["peageant","pageant"],["peaple","people"],["peaples","peoples"],["pecentage","percentage"],["pecularities","peculiarities"],["pecularity","peculiarity"],["peculure","peculiar"],["pedestrain","pedestrian"],["peding","pending"],["pedning","pending"],["pefer","prefer"],["peferable","preferable"],["peferably","preferably"],["pefered","preferred"],["peference","preference"],["peferences","preferences"],["peferential","preferential"],["peferentially","preferentially"],["peferred","preferred"],["peferring","preferring"],["pefers","prefers"],["peform","perform"],["peformance","performance"],["peformed","performed"],["peforming","performing"],["pege","page"],["pehaps","perhaps"],["peice","piece"],["peicemeal","piecemeal"],["peices","pieces"],["peirod","period"],["peirodical","periodical"],["peirodicals","periodicals"],["peirods","periods"],["penalities","penalties"],["penality","penalty"],["penatly","penalty"],["pendantic","pedantic"],["pendig","pending"],["pendning","pending"],["penerator","penetrator"],["penisula","peninsula"],["penisular","peninsular"],["pennal","panel"],["pennals","panels"],["penninsula","peninsula"],["penninsular","peninsular"],["pennisula","peninsula"],["Pennyslvania","Pennsylvania"],["pensinula","peninsula"],["pensle","pencil"],["penultimante","penultimate"],["peom","poem"],["peoms","poems"],["peopel","people"],["peopels","peoples"],["peopl","people"],["peotry","poetry"],["pepare","prepare"],["peprocessor","preprocessor"],["per-interpeter","per-interpreter"],["perade","parade"],["peraphs","perhaps"],["percentange","percentage"],["percentanges","percentages"],["percentil","percentile"],["percepted","perceived"],["percetage","percentage"],["percetages","percentages"],["percievable","perceivable"],["percievabley","perceivably"],["percievably","perceivably"],["percieve","perceive"],["percieved","perceived"],["percise","precise"],["percisely","precisely"],["percision","precision"],["perenially","perennially"],["peretrator","perpetrator"],["perfec","perfect"],["perfecct","perfect"],["perfecctly","perfectly"],["perfeclty","perfectly"],["perfecly","perfectly"],["perfectably","perfectly"],["perfer","prefer"],["perferable","preferable"],["perferably","preferably"],["perferance","preference"],["perferances","preferences"],["perferct","perfect"],["perferctly","perfectly"],["perferect","perfect"],["perferectly","perfectly"],["perfered","preferred"],["perference","preference"],["perferences","preferences"],["perferm","perform"],["perfermance","performance"],["perfermances","performances"],["perfermence","performance"],["perfermences","performances"],["perferr","prefer"],["perferrable","preferable"],["perferrably","preferably"],["perferrance","preference"],["perferrances","preferences"],["perferred","preferred"],["perferrence","preference"],["perferrences","preferences"],["perferrm","perform"],["perferrmance","performance"],["perferrmances","performances"],["perferrmence","performance"],["perferrmences","performances"],["perferrs","prefers"],["perfers","prefers"],["perfix","prefix"],["perfmormance","performance"],["perfoem","perform"],["perfoemamce","performance"],["perfoemamces","performances"],["perfoemance","performance"],["perfoemanse","performance"],["perfoemanses","performances"],["perfoemant","performant"],["perfoemative","performative"],["perfoemed","performed"],["perfoemer","performer"],["perfoemers","performers"],["perfoeming","performing"],["perfoemnace","performance"],["perfoemnaces","performances"],["perfoems","performs"],["perfom","perform"],["perfomamce","performance"],["perfomamces","performances"],["perfomance","performance"],["perfomanse","performance"],["perfomanses","performances"],["perfomant","performant"],["perfomative","performative"],["perfome","perform"],["perfomeamce","performance"],["perfomeamces","performances"],["perfomeance","performance"],["perfomeanse","performance"],["perfomeanses","performances"],["perfomeant","performant"],["perfomeative","performative"],["perfomed","performed"],["perfomeed","performed"],["perfomeer","performer"],["perfomeers","performers"],["perfomeing","performing"],["perfomenace","performance"],["perfomenaces","performances"],["perfomer","performer"],["perfomers","performers"],["perfomes","performs"],["perfoming","performing"],["perfomnace","performance"],["perfomnaces","performances"],["perfomr","perform"],["perfomramce","performance"],["perfomramces","performances"],["perfomrance","performance"],["perfomranse","performance"],["perfomranses","performances"],["perfomrant","performant"],["perfomrative","performative"],["perfomred","performed"],["perfomrer","performer"],["perfomrers","performers"],["perfomring","performing"],["perfomrnace","performance"],["perfomrnaces","performances"],["perfomrs","performs"],["perfoms","performs"],["perfor","perform"],["perforam","perform"],["perforamed","performed"],["perforaming","performing"],["perforamnce","performance"],["perforamnces","performances"],["perforams","performs"],["perford","performed"],["perforemd","performed"],["performace","performance"],["performaed","performed"],["performamce","performance"],["performane","performance"],["performence","performance"],["performnace","performance"],["perfors","performs"],["perfro","perform"],["perfrom","perform"],["perfromance","performance"],["perfromed","performed"],["perfroming","performing"],["perfroms","performs"],["perhabs","perhaps"],["perhas","perhaps"],["perhasp","perhaps"],["perheaps","perhaps"],["perhpas","perhaps"],["peridic","periodic"],["perihperal","peripheral"],["perihperals","peripherals"],["perimetre","perimeter"],["perimetres","perimeters"],["periode","period"],["periodicaly","periodically"],["periodioc","periodic"],["peripathetic","peripatetic"],["peripherial","peripheral"],["peripherials","peripherals"],["perisist","persist"],["perisisted","persisted"],["perisistent","persistent"],["peristent","persistent"],["perjery","perjury"],["perjorative","pejorative"],["perlciritc","perlcritic"],["permable","permeable"],["permament","permanent"],["permamently","permanently"],["permanant","permanent"],["permanantly","permanently"],["permanentely","permanently"],["permanenty","permanently"],["permantly","permanently"],["permenant","permanent"],["permenantly","permanently"],["permessioned","permissioned"],["permision","permission"],["permisions","permissions"],["permisison","permission"],["permisisons","permissions"],["permissable","permissible"],["permissiosn","permissions"],["permisson","permission"],["permissons","permissions"],["permisssion","permission"],["permisssions","permissions"],["permited","permitted"],["permition","permission"],["permitions","permissions"],["permmission","permission"],["permmissions","permissions"],["permormance","performance"],["permssion","permission"],["permssions","permissions"],["permuatate","permutate"],["permuatated","permutated"],["permuatates","permutates"],["permuatating","permutating"],["permuatation","permutation"],["permuatations","permutations"],["permuation","permutation"],["permuations","permutations"],["permutaion","permutation"],["permutaions","permutations"],["permution","permutation"],["permutions","permutations"],["peroendicular","perpendicular"],["perogative","prerogative"],["peroid","period"],["peroidic","periodic"],["peroidical","periodical"],["peroidically","periodically"],["peroidicals","periodicals"],["peroidicity","periodicity"],["peroids","periods"],["peronal","personal"],["peroperly","properly"],["perosnality","personality"],["perpandicular","perpendicular"],["perpandicularly","perpendicularly"],["perperties","properties"],["perpertrated","perpetrated"],["perperty","property"],["perphas","perhaps"],["perpindicular","perpendicular"],["perpsective","perspective"],["perpsectives","perspectives"],["perrror","perror"],["persan","person"],["persepctive","perspective"],["persepective","perspective"],["persepectives","perspectives"],["perserve","preserve"],["perserved","preserved"],["perserverance","perseverance"],["perservere","persevere"],["perservered","persevered"],["perserveres","perseveres"],["perservering","persevering"],["perserves","preserves"],["perserving","preserving"],["perseverence","perseverance"],["persisit","persist"],["persisited","persisted"],["persistance","persistence"],["persistant","persistent"],["persistantly","persistently"],["persisten","persistent"],["persistented","persisted"],["persited","persisted"],["persitent","persistent"],["personalitie","personality"],["personalitites","personalities"],["personalitity","personality"],["personalitys","personalities"],["personaly","personally"],["personell","personnel"],["personnal","personal"],["personnaly","personally"],["personnell","personnel"],["perspecitve","perspective"],["persuded","persuaded"],["persue","pursue"],["persued","pursued"],["persuing","pursuing"],["persuit","pursuit"],["persuits","pursuits"],["persumably","presumably"],["perticular","particular"],["perticularly","particularly"],["perticulars","particulars"],["pertrub","perturb"],["pertrubation","perturbation"],["pertrubations","perturbations"],["pertrubing","perturbing"],["pertub","perturb"],["pertubate","perturb"],["pertubated","perturbed"],["pertubates","perturbs"],["pertubation","perturbation"],["pertubations","perturbations"],["pertubing","perturbing"],["perturbate","perturb"],["perturbates","perturbs"],["pervious","previous"],["perviously","previously"],["pessiary","pessary"],["petetion","petition"],["pevent","prevent"],["pevents","prevents"],["pezier","bezier"],["phanthom","phantom"],["Pharoah","Pharaoh"],["phasepsace","phasespace"],["phasis","phases"],["phenomenom","phenomenon"],["phenomenonal","phenomenal"],["phenomenonly","phenomenally"],["phenomonenon","phenomenon"],["phenomonon","phenomenon"],["phenonmena","phenomena"],["pheriparials","peripherals"],["Philipines","Philippines"],["philisopher","philosopher"],["philisophical","philosophical"],["philisophy","philosophy"],["Phillipine","Philippine"],["phillipines","philippines"],["Phillippines","Philippines"],["phillosophically","philosophically"],["philospher","philosopher"],["philosphies","philosophies"],["philosphy","philosophy"],["phisical","physical"],["phisically","physically"],["phisicaly","physically"],["phisics","physics"],["phisosophy","philosophy"],["Phonecian","Phoenecian"],["phoneticly","phonetically"],["phongraph","phonograph"],["phote","photo"],["photografic","photographic"],["photografical","photographical"],["photografy","photography"],["photograpic","photographic"],["photograpical","photographical"],["phsical","physical"],["phsyically","physically"],["phtread","pthread"],["phtreads","pthreads"],["phyiscal","physical"],["phyiscally","physically"],["phyiscs","physics"],["phylosophical","philosophical"],["physcial","physical"],["physial","physical"],["physicaly","physically"],["physisist","physicist"],["phython","python"],["phyton","python"],["phy_interace","phy_interface"],["piblisher","publisher"],["pice","piece"],["picoseond","picosecond"],["picoseonds","picoseconds"],["piggypack","piggyback"],["piggypacked","piggybacked"],["pilgrimmage","pilgrimage"],["pilgrimmages","pilgrimages"],["pimxap","pixmap"],["pimxaps","pixmaps"],["pinapple","pineapple"],["pinnaple","pineapple"],["pinoneered","pioneered"],["piont","point"],["pionter","pointer"],["pionts","points"],["piority","priority"],["pipeine","pipeline"],["pipeines","pipelines"],["pipelien","pipeline"],["pipeliens","pipelines"],["pipelin","pipeline"],["pipelinining","pipelining"],["pipelins","pipelines"],["pipepline","pipeline"],["pipeplines","pipelines"],["pipiline","pipeline"],["pipilines","pipelines"],["pipleine","pipeline"],["pipleines","pipelines"],["pipleline","pipeline"],["piplelines","pipelines"],["pitty","pity"],["pivott","pivot"],["pivotting","pivoting"],["pixes","pixels"],["placeemnt","placement"],["placeemnts","placements"],["placehoder","placeholder"],["placeholde","placeholder"],["placeholdes","placeholders"],["placeholer","placeholder"],["placeholers","placeholders"],["placemenet","placement"],["placemenets","placements"],["placholder","placeholder"],["placholders","placeholders"],["placmenet","placement"],["placmenets","placements"],["plaform","platform"],["plaforms","platforms"],["plaftorm","platform"],["plaftorms","platforms"],["plagarism","plagiarism"],["plalform","platform"],["plalforms","platforms"],["planation","plantation"],["plantext","plaintext"],["plantiff","plaintiff"],["plasement","placement"],["plasements","placements"],["plateu","plateau"],["platfarm","platform"],["platfarms","platforms"],["platfform","platform"],["platfforms","platforms"],["platflorm","platform"],["platflorms","platforms"],["platfoem","platform"],["platfom","platform"],["platfomr","platform"],["platfomrs","platforms"],["platfoms","platforms"],["platform-spacific","platform-specific"],["platforma","platforms"],["platformt","platforms"],["platfrom","platform"],["platfroms","platforms"],["plathome","platform"],["platofmr","platform"],["platofmrs","platforms"],["platofms","platforms"],["platofmss","platforms"],["platoform","platform"],["platoforms","platforms"],["platofrm","platform"],["platofrms","platforms"],["plattform","platform"],["plattforms","platforms"],["plausability","plausibility"],["plausable","plausible"],["playble","playable"],["playge","plague"],["playgerise","plagiarise"],["playgerize","plagiarize"],["playgropund","playground"],["playist","playlist"],["playists","playlists"],["playright","playwright"],["playwrite","playwright"],["playwrites","playwrights"],["plcae","place"],["plcaebo","placebo"],["plcaed","placed"],["plcaeholder","placeholder"],["plcaeholders","placeholders"],["plcaement","placement"],["plcaements","placements"],["plcaes","places"],["pleaase","please"],["pleacing","placing"],["pleae","please"],["pleaee","please"],["pleaes","please"],["pleasd","pleased"],["pleasent","pleasant"],["pleasently","pleasantly"],["plebicite","plebiscite"],["plecing","placing"],["plent","plenty"],["plesae","please"],["plesant","pleasant"],["plese","please"],["plesently","pleasantly"],["pliars","pliers"],["pllatforms","platforms"],["ploted","plotted"],["ploting","plotting"],["ploynomial","polynomial"],["ploynomials","polynomials"],["pltform","platform"],["pltforms","platforms"],["plugable","pluggable"],["pluged","plugged"],["pluign","plugin"],["pluigns","plugins"],["pluse","pulse"],["plyotropy","pleiotropy"],["pobular","popular"],["pobularity","popularity"],["podule","module"],["poenis","penis"],["poential","potential"],["poentially","potentially"],["poentials","potentials"],["poeoples","peoples"],["poeple","people"],["poety","poetry"],["pogress","progress"],["poicies","policies"],["poicy","policy"],["poiint","point"],["poiints","points"],["poind","point"],["poindcloud","pointcloud"],["poiner","pointer"],["poing","point"],["poinits","points"],["poinnter","pointer"],["poins","points"],["pointeres","pointers"],["pointes","points"],["pointetr","pointer"],["pointetrs","pointers"],["pointeur","pointer"],["pointseta","poinsettia"],["pointss","points"],["pointzer","pointer"],["poinyent","poignant"],["poisin","poison"],["poisition","position"],["poisitioned","positioned"],["poisitioning","positioning"],["poisitionning","positioning"],["poisitions","positions"],["poistion","position"],["poistioned","positioned"],["poistioning","positioning"],["poistions","positions"],["poistive","positive"],["poistively","positively"],["poistives","positives"],["poistivly","positively"],["poit","point"],["poitd","pointed"],["poited","pointed"],["poiter","pointer"],["poiters","pointers"],["poiting","pointing"],["poitless","pointless"],["poitlessly","pointlessly"],["poitn","point"],["poitnd","pointed"],["poitned","pointed"],["poitner","pointer"],["poitnes","points"],["poitning","pointing"],["poitns","points"],["poits","points"],["poiunter","pointer"],["poject","project"],["pojecting","projecting"],["pojnt","point"],["pojrect","project"],["pojrected","projected"],["pojrecting","projecting"],["pojrection","projection"],["pojrections","projections"],["pojrector","projector"],["pojrectors","projectors"],["pojrects","projects"],["poket","pocket"],["polariy","polarity"],["polgon","polygon"],["polgons","polygons"],["polical","political"],["policiy","policy"],["poligon","polygon"],["poligons","polygons"],["polinator","pollinator"],["polinators","pollinators"],["politican","politician"],["politicans","politicians"],["politicing","politicking"],["pollenate","pollinate"],["polltry","poultry"],["polocies","policies"],["polocy","policy"],["polocys","policies"],["pologon","polygon"],["pologons","polygons"],["polotic","politic"],["polotical","political"],["polotics","politics"],["poltical","political"],["poltry","poultry"],["polute","pollute"],["poluted","polluted"],["polutes","pollutes"],["poluting","polluting"],["polution","pollution"],["polyar","polar"],["polyedral","polyhedral"],["polygond","polygons"],["polygone","polygon"],["polymorpic","polymorphic"],["polynomal","polynomial"],["polynomals","polynomials"],["polyphonyic","polyphonic"],["polypoygon","polypolygon"],["polypoylgons","polypolygons"],["polysaccaride","polysaccharide"],["polysaccharid","polysaccharide"],["pomegranite","pomegranate"],["pomotion","promotion"],["pompay","Pompeii"],["ponint","point"],["poninted","pointed"],["poninter","pointer"],["poninting","pointing"],["ponints","points"],["ponit","point"],["ponitd","pointed"],["ponited","pointed"],["poniter","pointer"],["poniters","pointers"],["ponits","points"],["pont","point"],["pontential","potential"],["ponter","pointer"],["ponting","pointing"],["ponts","points"],["pontuation","punctuation"],["pooint","point"],["poointed","pointed"],["poointer","pointer"],["pooints","points"],["poost","post"],["poperee","potpourri"],["poperties","properties"],["popoen","popen"],["popolate","populate"],["popolated","populated"],["popolates","populates"],["popolating","populating"],["poportional","proportional"],["popoulation","population"],["popoup","popup"],["poppup","popup"],["popularaty","popularity"],["populare","popular"],["populer","popular"],["popullate","populate"],["popullated","populated"],["popuplar","popular"],["popuplarity","popularity"],["popuplate","populate"],["popuplated","populated"],["popuplates","populates"],["popuplating","populating"],["popuplation","population"],["porbably","probably"],["porblem","problem"],["porblems","problems"],["porcess","process"],["porcessed","processed"],["porcesses","processes"],["porcessing","processing"],["porcessor","processor"],["porcessors","processors"],["porgram","program"],["porgrammeer","programmer"],["porgrammeers","programmers"],["porgramming","programming"],["porgrams","programs"],["poriferal","peripheral"],["porject","project"],["porjection","projection"],["porjects","projects"],["porotocol","protocol"],["porotocols","protocols"],["porperties","properties"],["porperty","property"],["porportion","proportion"],["porportional","proportional"],["porportionally","proportionally"],["porportioning","proportioning"],["porportions","proportions"],["porsalin","porcelain"],["porshan","portion"],["porshon","portion"],["portait","portrait"],["portaits","portraits"],["portayed","portrayed"],["portected","protected"],["portguese","Portuguese"],["portioon","portion"],["portraing","portraying"],["portugese","Portuguese"],["portuguease","Portuguese"],["portugues","Portuguese"],["porve","prove"],["porved","proved"],["porven","proven"],["porves","proves"],["porvide","provide"],["porvided","provided"],["porvider","provider"],["porvides","provides"],["porviding","providing"],["porvids","provides"],["porving","proving"],["posative","positive"],["posatives","positives"],["posativity","positivity"],["poseesions","possessions"],["posess","possess"],["posessed","possessed"],["posesses","possesses"],["posessing","possessing"],["posession","possession"],["posessions","possessions"],["posibilities","possibilities"],["posibility","possibility"],["posibilties","possibilities"],["posible","possible"],["posiblity","possibility"],["posibly","possibly"],["posiitive","positive"],["posiitives","positives"],["posiitivity","positivity"],["posisition","position"],["posisitioned","positioned"],["posistion","position"],["positionn","position"],["positionned","positioned"],["positionnes","positions"],["positionning","positioning"],["positionns","positions"],["positiv","positive"],["positivie","positive"],["positivies","positives"],["positivly","positively"],["positoin","position"],["positoined","positioned"],["positoins","positions"],["positonal","positional"],["positoned","positioned"],["positoning","positioning"],["positve","positive"],["positves","positives"],["POSIX-complient","POSIX-compliant"],["pospone","postpone"],["posponed","postponed"],["posption","position"],["possabilites","possibilities"],["possabilities","possibilities"],["possability","possibility"],["possabilties","possibilities"],["possabily","possibly"],["possable","possible"],["possably","possibly"],["possbily","possibly"],["possble","possible"],["possbly","possibly"],["posseses","possesses"],["possesing","possessing"],["possesion","possession"],["possesive","possessive"],["possessess","possesses"],["possiable","possible"],["possibbe","possible"],["possibe","possible"],["possibile","possible"],["possibilies","possibilities"],["possibilites","possibilities"],["possibilitities","possibilities"],["possibiliy","possibility"],["possibillity","possibility"],["possibilties","possibilities"],["possibilty","possibility"],["possibily","possibly"],["possibities","possibilities"],["possibity","possibility"],["possiblble","possible"],["possiblec","possible"],["possiblely","possibly"],["possiblility","possibility"],["possiblilty","possibility"],["possiblities","possibilities"],["possiblity","possibility"],["possiblly","possibly"],["possilbe","possible"],["possily","possibly"],["possition","position"],["possitive","positive"],["possitives","positives"],["possobily","possibly"],["possoble","possible"],["possobly","possibly"],["posssible","possible"],["post-morten","post-mortem"],["post-proces","post-process"],["post-procesing","post-processing"],["postcondtion","postcondition"],["postcondtions","postconditions"],["Postdam","Potsdam"],["postgress","PostgreSQL"],["postgressql","PostgreSQL"],["postgrsql","PostgreSQL"],["posthomous","posthumous"],["postiional","positional"],["postiive","positive"],["postincremend","postincrement"],["postion","position"],["postioned","positioned"],["postions","positions"],["postition","position"],["postitive","positive"],["postitives","positives"],["postive","positive"],["postives","positives"],["postmage","postimage"],["postphoned","postponed"],["postpocessing","postprocessing"],["postponinig","postponing"],["postprocesing","postprocessing"],["postscritp","postscript"],["postulat","postulate"],["postuminus","posthumous"],["postumus","posthumous"],["potatoe","potato"],["potatos","potatoes"],["potencial","potential"],["potencially","potentially"],["potencials","potentials"],["potenial","potential"],["potenially","potentially"],["potentail","potential"],["potentailly","potentially"],["potentails","potentials"],["potental","potential"],["potentally","potentially"],["potentatially","potentially"],["potententially","potentially"],["potentiallly","potentially"],["potentialy","potentially"],["potentiel","potential"],["potentiomenter","potentiometer"],["potition","position"],["potocol","protocol"],["potrait","portrait"],["potrayed","portrayed"],["poulations","populations"],["pount","point"],["pounts","points"],["poupular","popular"],["poverful","powerful"],["poweful","powerful"],["powerfull","powerful"],["powerppc","powerpc"],["pozitive","positive"],["pozitively","positively"],["pozitives","positives"],["ppcheck","cppcheck"],["ppeline","pipeline"],["ppelines","pipelines"],["ppolygons","polygons"],["ppublisher","publisher"],["ppyint","pyint"],["praameter","parameter"],["praameters","parameters"],["prabability","probability"],["prabable","probable"],["prabably","probably"],["pracitcal","practical"],["pracitcally","practically"],["practial","practical"],["practially","practically"],["practicaly","practically"],["practicioner","practitioner"],["practicioners","practitioners"],["practicly","practically"],["practictitioner","practitioner"],["practictitioners","practitioners"],["practicval","practical"],["practioner","practitioner"],["practioners","practitioners"],["praefix","prefix"],["pragam","pragma"],["pragmato","pragma to"],["prairy","prairie"],["pramater","parameter"],["prameter","parameter"],["prameters","parameters"],["prarameter","parameter"],["prarameters","parameters"],["prarie","prairie"],["praries","prairies"],["pratical","practical"],["pratically","practically"],["pratice","practice"],["prcess","process"],["prcesses","processes"],["prcessing","processing"],["prcoess","process"],["prcoessed","processed"],["prcoesses","processes"],["prcoessing","processing"],["prctiles","percentiles"],["prdpagate","propagate"],["prdpagated","propagated"],["prdpagates","propagates"],["prdpagating","propagating"],["prdpagation","propagation"],["prdpagations","propagations"],["prdpagator","propagator"],["prdpagators","propagators"],["pre-condifure","pre-configure"],["pre-condifured","pre-configured"],["pre-confifure","pre-configure"],["pre-confifured","pre-configured"],["pre-confure","pre-configure"],["pre-confured","pre-configured"],["pre-congifure","pre-configure"],["pre-congifured","pre-configured"],["pre-defiend","pre-defined"],["pre-defiened","pre-defined"],["pre-empt","preempt"],["pre-pended","prepended"],["pre-pre-realease","pre-pre-release"],["pre-proces","pre-process"],["pre-procesing","pre-processing"],["pre-realease","pre-release"],["pre-registeres","pre-registers"],["prealocate","preallocate"],["prealocated","preallocated"],["prealocates","preallocates"],["prealocating","preallocating"],["preambule","preamble"],["preamle","preamble"],["preample","preamble"],["preaorocessing","preprocessing"],["preapared","prepared"],["preapre","prepare"],["preaprooved","preapproved"],["prebious","previous"],["precacheed","precached"],["precceding","preceding"],["precding","preceding"],["preced","precede"],["precedencs","precedence"],["precedessor","predecessor"],["preceds","precedes"],["preceision","precision"],["precence","presence"],["precendance","precedence"],["precendances","precedences"],["precende","precedence"],["precendece","precedence"],["precendeces","precedences"],["precendence","precedence"],["precendences","precedences"],["precendencies","precedences"],["precendent","precedent"],["precendes","precedences"],["precending","preceding"],["precends","precedence"],["precenences","preferences"],["precense","presence"],["precentage","percentage"],["precentile","percentile"],["precentiles","percentiles"],["precessing","processing"],["precice","precise"],["precicion","precision"],["precidence","precedence"],["precisily","precisely"],["precisionn","precision"],["precisision","precision"],["precisly","precisely"],["precison","precision"],["precize","precise"],["precomuted","precomputed"],["preconditoner","preconditioner"],["preconditoners","preconditioners"],["precondtion","precondition"],["precondtioner","preconditioner"],["precondtioners","preconditioners"],["precondtionner","preconditioner"],["precondtionners","preconditioners"],["precondtions","preconditions"],["preconfiged","preconfigured"],["precsions","precisions"],["precuation","precaution"],["preculde","preclude"],["preculded","precluded"],["preculdes","precludes"],["precumputed","precomputed"],["precurser","precursor"],["precussion","percussion"],["precussions","percussions"],["predecesor","predecessor"],["predecesors","predecessors"],["predeclarnig","predeclaring"],["predefiend","predefined"],["predefiened","predefined"],["predefiined","predefined"],["predefineds","predefined"],["predessor","predecessor"],["predfined","predefined"],["predicat","predicate"],["predicatble","predictable"],["predicitons","predictions"],["predictible","predictable"],["predifined","predefined"],["predomiantly","predominately"],["preeceding","preceding"],["preemptable","preemptible"],["preesnt","present"],["prefectches","prefetches"],["prefecth","prefetch"],["prefectly","perfectly"],["prefence","preference"],["prefences","preferences"],["preferance","preference"],["preferances","preferences"],["preferecne","preference"],["preferecnes","preferences"],["prefered","preferred"],["preferencfe","preference"],["preferencfes","preferences"],["preferes","prefers"],["prefering","preferring"],["prefernce","preference"],["prefernces","preferences"],["prefernec","preference"],["preferr","prefer"],["preferrable","preferable"],["preferrably","preferably"],["preferrence","preference"],["preferrences","preferences"],["preferrred","preferred"],["prefetchs","prefetches"],["prefex","prefix"],["preffer","prefer"],["prefferable","preferable"],["prefferably","preferably"],["preffered","preferred"],["preffix","prefix"],["preffixed","prefixed"],["preffixes","prefixes"],["preffixing","prefixing"],["prefices","prefixes"],["preformance","performance"],["preformances","performances"],["pregancies","pregnancies"],["prehaps","perhaps"],["preiod","period"],["preivew","preview"],["preivous","previous"],["prejected","projected"],["prejection","projection"],["prejections","projections"],["preliferation","proliferation"],["prelimitary","preliminary"],["premeire","premiere"],["premeired","premiered"],["premillenial","premillennial"],["preminence","preeminence"],["premission","permission"],["premit","permit"],["premits","permits"],["Premonasterians","Premonstratensians"],["premption","preemption"],["premptive","preemptive"],["premptively","preemptively"],["preocess","process"],["preocupation","preoccupation"],["preoperty","property"],["prepair","prepare"],["prepaired","prepared"],["prepand","prepend"],["preparetion","preparation"],["preparetions","preparations"],["prepartion","preparation"],["prepartions","preparations"],["prepate","prepare"],["prepated","prepared"],["prepates","prepares"],["prepatory","preparatory"],["prependet","prepended"],["prepented","prepended"],["preperation","preparation"],["preperations","preparations"],["preponderence","preponderance"],["preppend","prepend"],["preppended","prepended"],["preppendet","prepended"],["preppented","prepended"],["preprend","prepend"],["preprended","prepended"],["prepresent","represent"],["prepresented","represented"],["prepresents","represents"],["preproces","preprocess"],["preprocesing","preprocessing"],["preprocesor","preprocessor"],["preprocesser","preprocessor"],["preprocessers","preprocessors"],["preprocesssing","preprocessing"],["prequisite","prerequisite"],["prequisites","prerequisites"],["prerequesite","prerequisite"],["prerequesites","prerequisites"],["prerequisit","prerequisite"],["prerequisities","prerequisites"],["prerequisits","prerequisites"],["prerequiste","prerequisite"],["prerequsite","prerequisite"],["prerequsites","prerequisites"],["preriod","period"],["preriodic","periodic"],["prersistent","persistent"],["presance","presence"],["prescripe","prescribe"],["prescriped","prescribed"],["prescrition","prescription"],["prescritions","prescriptions"],["presearvation","preservation"],["presearvations","preservations"],["presearve","preserve"],["presearved","preserved"],["presearver","preserver"],["presearves","preserves"],["presearving","preserving"],["presedential","presidential"],["presenece","presence"],["presener","presenter"],["presense","presence"],["presentaion","presentation"],["presentaional","presentational"],["presentaions","presentations"],["presernt","present"],["preserrved","preserved"],["preserv","preserve"],["presetation","presentation"],["preseve","preserve"],["preseved","preserved"],["preseverance","perseverance"],["preseverence","perseverance"],["preseves","preserves"],["preseving","preserving"],["presicion","precision"],["presidenital","presidential"],["presidental","presidential"],["presist","persist"],["presistable","persistable"],["presistance","persistence"],["presistant","persistent"],["presistantly","persistently"],["presisted","persisted"],["presistence","persistence"],["presistency","persistency"],["presistent","persistent"],["presistently","persistently"],["presisting","persisting"],["presistion","precision"],["presists","persists"],["presitgious","prestigious"],["presmissions","permissions"],["presntation","presentation"],["presntations","presentations"],["prespective","perspective"],["presreved","preserved"],["pressent","present"],["pressentation","presentation"],["pressented","presented"],["pressre","pressure"],["pressue","pressure"],["pressues","pressures"],["prestigeous","prestigious"],["prestigous","prestigious"],["presuambly","presumably"],["presumabely","presumably"],["presumaby","presumably"],["presumebly","presumably"],["presumely","presumably"],["presumibly","presumably"],["pretaining","pertaining"],["pretect","protect"],["pretected","protected"],["pretecting","protecting"],["pretection","protection"],["pretects","protects"],["pretendend","pretended"],["pretty-printter","pretty-printer"],["preveiw","preview"],["preveiwed","previewed"],["preveiwer","previewer"],["preveiwers","previewers"],["preveiws","previews"],["prevelance","prevalence"],["prevelant","prevalent"],["preven","prevent"],["prevend","prevent"],["preverse","perverse"],["preverses","preserves"],["preverve","preserve"],["prevew","preview"],["prevews","previews"],["previewd","previewed"],["previious","previous"],["previlege","privilege"],["previoous","previous"],["previos","previous"],["previosly","previously"],["previosu","previous"],["previosuly","previously"],["previou","previous"],["previouls","previous"],["previoulsy","previously"],["previouly","previously"],["previouse","previous"],["previousl","previously"],["previousy","previously"],["previsou","previous"],["previsouly","previously"],["previuous","previous"],["previus","previous"],["previvous","previous"],["prevoius","previous"],["prevous","previous"],["prevously","previously"],["prewview","preview"],["prexisting","preexisting"],["prexixed","prefixed"],["prfer","prefer"],["prferable","preferable"],["prferables","preferable"],["prference","preference"],["prferred","preferred"],["prgram","program"],["priave","private"],["pricipal","principal"],["priciple","principle"],["priciples","principles"],["pricision","precision"],["priestood","priesthood"],["primaray","primary"],["primarely","primarily"],["primarly","primarily"],["primative","primitive"],["primatively","primitively"],["primatives","primitives"],["primay","primary"],["primeter","perimeter"],["primitave","primitive"],["primitiv","primitive"],["primitve","primitive"],["primitves","primitives"],["primive","primitive"],["primordal","primordial"],["princeple","principle"],["princeples","principles"],["princible","principle"],["principaly","principality"],["principial","principal"],["principlaity","principality"],["principly","principally"],["princliple","principle"],["prind","print"],["prinicipal","principal"],["prining","printing"],["printting","printing"],["prioirties","priorities"],["prioirty","priority"],["prioritiy","priority"],["priorization","prioritization"],["priorizations","prioritizations"],["priorty","priority"],["priot","prior"],["priotise","prioritise"],["priotised","prioritised"],["priotising","prioritising"],["priotities","priorities"],["priotitize","prioritize"],["priotity","priority"],["priotized","prioritized"],["priotizing","prioritizing"],["priots","priors"],["prirority","priority"],["pris","prise"],["priting","printing"],["privalege","privilege"],["privaleges","privileges"],["privaye","private"],["privcy","privacy"],["privde","provide"],["priveledge","privilege"],["priveledged","privileged"],["priveledges","privileges"],["privelege","privilege"],["priveleged","privileged"],["priveleges","privileges"],["privelige","privilege"],["priveliged","privileged"],["priveliges","privileges"],["privelleges","privileges"],["priviate","private"],["privide","provide"],["privided","provided"],["privides","provides"],["prividing","providing"],["priview","preview"],["privilage","privilege"],["privilaged","privileged"],["privilages","privileges"],["priviledge","privilege"],["priviledged","privileged"],["priviledges","privileges"],["privilidge","privilege"],["privilidged","privileged"],["privilidges","privileges"],["privilige","privilege"],["priviliged","privileged"],["priviliges","privileges"],["privious","previous"],["priviously","previously"],["privision","provision"],["privisional","provisional"],["privisions","provisions"],["privledge","privilege"],["privleges","privileges"],["privte","private"],["prject","project"],["prjecting","projecting"],["prjection","projection"],["prjections","projections"],["prjects","projects"],["prmitive","primitive"],["prmitives","primitives"],["prmopting","prompting"],["proable","probable"],["proably","probably"],["probabalistic","probabilistic"],["probabaly","probably"],["probabilaty","probability"],["probabilisitic","probabilistic"],["probabilites","probabilities"],["probabilty","probability"],["probablay","probably"],["probablistic","probabilistic"],["probablities","probabilities"],["probablity","probability"],["probablly","probably"],["probaby","probably"],["probalby","probably"],["probalibity","probability"],["probaly","probably"],["probbably","probably"],["probbailities","probabilities"],["probbaility","probability"],["probbaly","probably"],["probbed","probed"],["probblem","problem"],["probblems","problems"],["probblez","problem"],["probblezs","problems"],["probbly","probably"],["probelm","problem"],["probelmatic","problematic"],["probelms","problems"],["probem","problem"],["proberly","properly"],["problably","probably"],["problaem","problem"],["problaems","problems"],["problamatic","problematic"],["probleme","problem"],["problemes","problems"],["problimatic","problematic"],["problme","problem"],["problmes","problems"],["probly","probably"],["procceed","proceed"],["proccesor","processor"],["proccesors","processors"],["proccess","process"],["proccessed","processed"],["proccesses","processes"],["proccessing","processing"],["proccessor","processor"],["proccessors","processors"],["procecure","procedure"],["procecures","procedures"],["procedger","procedure"],["procedings","proceedings"],["procedre","procedure"],["procedres","procedures"],["proceedes","proceeds"],["proceedure","procedure"],["proceedures","procedures"],["proceeed","proceed"],["proceeeded","proceeded"],["proceeeding","proceeding"],["proceeeds","proceeds"],["proceeedures","procedures"],["procees","process"],["proceesed","processed"],["proceesor","processor"],["procelain","porcelain"],["procelains","porcelains"],["procentual","percentual"],["proces","process"],["procesed","processed"],["proceses","processes"],["proceshandler","processhandler"],["procesing","processing"],["procesor","processor"],["processeed","processed"],["processees","processes"],["processer","processor"],["processess","processes"],["processessing","processing"],["processig","processing"],["processinf","processing"],["processore","processor"],["processpr","processor"],["processsed","processed"],["processses","processes"],["processsing","processing"],["processsors","processors"],["procesure","procedure"],["procesures","procedures"],["procide","provide"],["procided","provided"],["procides","provides"],["proclaimation","proclamation"],["proclamed","proclaimed"],["proclaming","proclaiming"],["proclomation","proclamation"],["procoess","process"],["procoessed","processed"],["procoessing","processing"],["proctect","protect"],["proctected","protected"],["proctecting","protecting"],["proctects","protects"],["procteted","protected"],["procude","produce"],["procuded","produced"],["prodceding","proceeding"],["prodecure","procedure"],["producable","producible"],["producables","producible"],["produciton","production"],["producitons","productions"],["producted","produced"],["productiviy","productivity"],["produkt","product"],["produse","produce"],["prodused","produced"],["produses","produces"],["proedural","procedural"],["proedure","procedure"],["proedures","procedures"],["proejct","project"],["proejcted","projected"],["proejcting","projecting"],["proejction","projection"],["proepr","proper"],["proeprly","properly"],["proeprties","properties"],["proeprty","property"],["proerties","properties"],["proessing","processing"],["profesional","professional"],["profesionally","professionally"],["profesionals","professionals"],["profesor","professor"],["professer","professor"],["proffesed","professed"],["proffesion","profession"],["proffesional","professional"],["proffesor","professor"],["proffessor","professor"],["profie","profile"],["profied","profiled"],["profier","profiler"],["profies","profiles"],["profilic","prolific"],["profirle","profile"],["profirled","profiled"],["profirler","profiler"],["profirles","profiles"],["profissional","professional"],["proflie","profile"],["proflier","profiler"],["proflies","profiles"],["profling","profiling"],["profund","profound"],["profundly","profoundly"],["progagate","propagate"],["progagated","propagated"],["progagates","propagates"],["progagating","propagating"],["progagation","propagation"],["progagations","propagations"],["progagator","propagator"],["progagators","propagators"],["progam","program"],["progamability","programmability"],["progamable","programmable"],["progamatic","programmatic"],["progamatically","programmatically"],["progamed","programmed"],["progamer","programmer"],["progamers","programmers"],["progaming","programming"],["progamm","program"],["progammability","programmability"],["progammable","programmable"],["progammatic","programmatic"],["progammatically","programmatically"],["progammed","programmed"],["progammer","programmer"],["progammers","programmers"],["progamming","programming"],["progamms","programs"],["progams","programs"],["progapate","propagate"],["progapated","propagated"],["progapates","propagates"],["progapating","propagating"],["progapation","propagation"],["progapations","propagations"],["progapator","propagator"],["progapators","propagators"],["progaramm","program"],["progarammability","programmability"],["progarammable","programmable"],["progarammatic","programmatic"],["progarammatically","programmatically"],["progarammed","programmed"],["progarammer","programmer"],["progarammers","programmers"],["progaramming","programming"],["progaramms","programs"],["progarm","program"],["progarmability","programmability"],["progarmable","programmable"],["progarmatic","programmatic"],["progarmatically","programmatically"],["progarmed","programmed"],["progarmer","programmer"],["progarmers","programmers"],["progarming","programming"],["progarms","programs"],["progate","propagate"],["progated","propagated"],["progates","propagates"],["progating","propagating"],["progation","propagation"],["progations","propagations"],["progess","progress"],["progessbar","progressbar"],["progessed","progressed"],["progesses","progresses"],["progessive","progressive"],["progessor","progressor"],["progesss","progress"],["progesssive","progressive"],["progidy","prodigy"],["programable","programmable"],["programatic","programmatic"],["programatically","programmatically"],["programattically","programmatically"],["programd","programmed"],["programemer","programmer"],["programemers","programmers"],["programers","programmers"],["programmaticaly","programmatically"],["programmend","programmed"],["programmetically","programmatically"],["programmical","programmatical"],["programmign","programming"],["programmming","programming"],["programms","programs"],["progreess","progress"],["progres","progress"],["progresively","progressively"],["progresss","progress"],["progrewss","progress"],["progrmae","program"],["progrss","progress"],["prohabition","prohibition"],["prohibitted","prohibited"],["prohibitting","prohibiting"],["prohibt","prohibit"],["prohibted","prohibited"],["prohibting","prohibiting"],["prohibts","prohibits"],["proirity","priority"],["projct's","project's"],["projct","project"],["projction","projection"],["projctions","projections"],["projctor","projector"],["projctors","projectors"],["projcts","projects"],["projectd","projected"],["projectio","projection"],["projecttion","projection"],["projet","project"],["projetction","projection"],["projeted","projected"],["projeting","projecting"],["projets","projects"],["prolbems","problems"],["prolem","problem"],["prolematic","problematic"],["prolems","problems"],["prologomena","prolegomena"],["prominance","prominence"],["prominant","prominent"],["prominantly","prominently"],["promis","promise"],["promiscous","promiscuous"],["promiss","promise"],["promissed","promised"],["promisses","promises"],["promissing","promising"],["promixity","proximity"],["prommpt","prompt"],["prommpts","prompts"],["promotted","promoted"],["promprted","prompted"],["promps","prompts"],["promt","prompt"],["promts","prompts"],["pronnounced","pronounced"],["pronomial","pronominal"],["prononciation","pronunciation"],["pronouce","pronounce"],["pronouced","pronounced"],["pronounched","pronounced"],["pronounciation","pronunciation"],["pronunce","pronounce"],["proocecure","procedure"],["proocecures","procedures"],["proocedure","procedure"],["proocedures","procedures"],["proocess","process"],["proocessed","processed"],["proocesses","processes"],["proocessing","processing"],["proocol","protocol"],["proocols","protocols"],["prooduce","produce"],["prooduced","produced"],["prooduces","produces"],["prooduct","product"],["prooerties","properties"],["prooerty","property"],["prool","pool"],["prooof","proof"],["prooper","proper"],["prooperly","properly"],["prooperties","properties"],["prooperty","property"],["proose","propose"],["proosed","proposed"],["prooses","proposes"],["proove","prove"],["prooved","proved"],["prooven","proven"],["prooves","proves"],["prooving","proving"],["proovread","proofread"],["prooxies","proxies"],["prooxy","proxy"],["propably","probably"],["propage","propagate"],["propatagion","propagation"],["propator","propagator"],["propators","propagators"],["propbably","probably"],["propely","properly"],["propeoperties","properties"],["propereties","properties"],["properety","property"],["properies","properties"],["properites","properties"],["properities","properties"],["properries","properties"],["properrt","property"],["properrys","properties"],["propert","property"],["properteis","properties"],["propertery","property"],["propertion","proportion"],["propertional","proportional"],["propertions","proportions"],["propertise","properties"],["propertu","property"],["propertus","properties"],["propertys","properties"],["propertyst","properties"],["propeties","properties"],["propetry","property"],["propetrys","properties"],["propety","property"],["propetys","properties"],["propgated","propagated"],["prophacy","prophecy"],["propietary","proprietary"],["propietries","proprietaries"],["propietry","proprietary"],["propigate","propagate"],["propigation","propagation"],["proplem","problem"],["propmt","prompt"],["propmted","prompted"],["propmter","prompter"],["propmts","prompts"],["propoagate","propagate"],["propoerties","properties"],["propoerty","property"],["propoganda","propaganda"],["propogate","propagate"],["propogated","propagated"],["propogates","propagates"],["propogating","propagating"],["propogation","propagation"],["proporpotion","proportion"],["proporpotional","proportional"],["proportianal","proportional"],["proporties","properties"],["proportinal","proportional"],["proporty","property"],["propostion","proposition"],["proppely","properly"],["propper","proper"],["propperly","properly"],["propperties","properties"],["propperty","property"],["proprely","properly"],["propreties","properties"],["proprety","property"],["proprietory","proprietary"],["proproable","probable"],["proproably","probably"],["proprocessed","preprocessed"],["proprogate","propagate"],["proprogated","propagated"],["proprogates","propagates"],["proprogating","propagating"],["proprogation","propagation"],["proprogations","propagations"],["proprogator","propagator"],["proprogators","propagators"],["proproties","properties"],["proprotion","proportion"],["proprotional","proportional"],["proprotionally","proportionally"],["proprotions","proportions"],["proprty","property"],["propt","prompt"],["propteries","properties"],["propterties","properties"],["propterty","property"],["propvider","provider"],["prority","priority"],["prorotype","prototype"],["proseletyzing","proselytizing"],["prosess","process"],["prosessor","processor"],["protable","portable"],["protaganist","protagonist"],["protaganists","protagonists"],["protcol","protocol"],["protcols","protocols"],["protcool","protocol"],["protcools","protocols"],["protcted","protected"],["protecion","protection"],["protectiv","protective"],["protedcted","protected"],["protential","potential"],["protext","protect"],["protocal","protocol"],["protocals","protocols"],["protocl","protocol"],["protocls","protocols"],["protoco","protocol"],["protocoll","protocol"],["protocolls","protocols"],["protocos","protocols"],["protoganist","protagonist"],["protoge","protege"],["protol","protocol"],["protols","protocols"],["prototyes","prototypes"],["protoype","prototype"],["protoyped","prototyped"],["protoypes","prototypes"],["protoyping","prototyping"],["protoytpe","prototype"],["protoytpes","prototypes"],["protrait","portrait"],["protraits","portraits"],["protrayed","portrayed"],["protruberance","protuberance"],["protruberances","protuberances"],["prouncements","pronouncements"],["provacative","provocative"],["provded","provided"],["provder","provider"],["provdided","provided"],["provdie","provide"],["provdied","provided"],["provdies","provides"],["provding","providing"],["provences","provinces"],["provicde","provide"],["provicded","provided"],["provicdes","provides"],["provicial","provincial"],["provideres","providers"],["providewd","provided"],["providfers","providers"],["provieded","provided"],["proviedes","provides"],["provinicial","provincial"],["provisioing","provisioning"],["provisiong","provisioning"],["provisionging","provisioning"],["provisiosn","provision"],["provisonal","provisional"],["provive","provide"],["provived","provided"],["provives","provides"],["proviving","providing"],["provode","provide"],["provoded","provided"],["provoder","provider"],["provodes","provides"],["provoding","providing"],["provods","provides"],["provsioning","provisioning"],["proximty","proximity"],["prozess","process"],["prpeparations","preparations"],["prpose","propose"],["prposed","proposed"],["prposer","proposer"],["prposers","proposers"],["prposes","proposes"],["prposiing","proposing"],["prrcision","precision"],["prrottypes","prototypes"],["prset","preset"],["prsets","presets"],["prtinf","printf"],["prufe","proof"],["prviate","private"],["psaswd","passwd"],["pseude","pseudo"],["pseudononymous","pseudonymous"],["pseudonyn","pseudonym"],["pseudopoential","pseudopotential"],["pseudopoentials","pseudopotentials"],["pseudorinverse","pseudoinverse"],["pseuo-palette","pseudo-palette"],["psitoin","position"],["psitoined","positioned"],["psitoins","positions"],["psot","post"],["psots","posts"],["psrameter","parameter"],["pssed","passed"],["pssibility","possibility"],["psudo","pseudo"],["psudoinverse","pseudoinverse"],["psuedo","pseudo"],["psuedo-fork","pseudo-fork"],["psuedoinverse","pseudoinverse"],["psuedolayer","pseudolayer"],["psuh","push"],["psychadelic","psychedelic"],["psycology","psychology"],["psyhic","psychic"],["ptd","pdf"],["ptherad","pthread"],["ptherads","pthreads"],["pthon","python"],["pthred","pthread"],["pthreds","pthreads"],["ptorions","portions"],["ptrss","press"],["pubilsh","publish"],["pubilshed","published"],["pubilsher","publisher"],["pubilshers","publishers"],["pubilshing","publishing"],["pubish","publish"],["pubished","published"],["pubisher","publisher"],["pubishers","publishers"],["pubishing","publishing"],["publcation","publication"],["publcise","publicise"],["publcize","publicize"],["publiaher","publisher"],["publically","publicly"],["publicaly","publicly"],["publiched","published"],["publicher","publisher"],["publichers","publishers"],["publiches","publishes"],["publiching","publishing"],["publihsed","published"],["publihser","publisher"],["publised","published"],["publisehd","published"],["publisehr","publisher"],["publisehrs","publishers"],["publiser","publisher"],["publisers","publishers"],["publisged","published"],["publisger","publisher"],["publisgers","publishers"],["publishd","published"],["publisheed","published"],["publisherr","publisher"],["publishher","publisher"],["publishor","publisher"],["publishr","publisher"],["publishre","publisher"],["publishrs","publishers"],["publissher","publisher"],["publlisher","publisher"],["publsh","publish"],["publshed","published"],["publsher","publisher"],["publshers","publishers"],["publshing","publishing"],["publsih","publish"],["publsihed","published"],["publsiher","publisher"],["publsihers","publishers"],["publsihes","publishes"],["publsihing","publishing"],["publuc","public"],["publucation","publication"],["publush","publish"],["publusher","publisher"],["publushers","publishers"],["publushes","publishes"],["publushing","publishing"],["puchasing","purchasing"],["Pucini","Puccini"],["Puertorrican","Puerto Rican"],["Puertorricans","Puerto Ricans"],["pulisher","publisher"],["pullrequest","pull request"],["pullrequests","pull requests"],["pumkin","pumpkin"],["punctation","punctuation"],["puplar","popular"],["puplarity","popularity"],["puplate","populate"],["puplated","populated"],["puplates","populates"],["puplating","populating"],["puplation","population"],["puplisher","publisher"],["pupose","purpose"],["puposes","purposes"],["pupulated","populated"],["purcahed","purchased"],["purcahse","purchase"],["purgest","purges"],["puritannical","puritanical"],["purposedly","purposely"],["purpotedly","purportedly"],["purpse","purpose"],["pursuade","persuade"],["pursuaded","persuaded"],["pursuades","persuades"],["pusehd","pushed"],["pususading","persuading"],["puting","putting"],["putpose","purpose"],["putposed","purposed"],["putposes","purposes"],["pwoer","power"],["pxoxied","proxied"],["pxoxies","proxies"],["pxoxy","proxy"],["pyhon","python"],["pyhsical","physical"],["pyhsically","physically"],["pyhsicals","physicals"],["pyhsicaly","physically"],["pyhthon","python"],["pyhton","python"],["pyramide","pyramid"],["pyramides","pyramids"],["pyrhon","python"],["pyscic","psychic"],["pythin","python"],["pythjon","python"],["pytnon","python"],["pytohn","python"],["pyton","python"],["pytyon","python"],["qest","quest"],["qests","quests"],["qeuest","quest"],["qeuests","quests"],["qeueue","queue"],["qeust","quest"],["qeusts","quests"],["qiest","quest"],["qiests","quests"],["qith","with"],["qoute","quote"],["qouted","quoted"],["qoutes","quotes"],["qouting","quoting"],["quadddec","quaddec"],["quadranle","quadrangle"],["quailified","qualified"],["qualfied","qualified"],["qualfy","qualify"],["qualifer","qualifier"],["qualitification","qualification"],["qualitifications","qualifications"],["quanitified","quantified"],["quantaties","quantities"],["quantaty","quantity"],["quantitites","quantities"],["quantititive","quantitative"],["quantitity","quantity"],["quantitiy","quantity"],["quarantaine","quarantine"],["quarentine","quarantine"],["quartenion","quaternion"],["quartenions","quaternions"],["quartically","quadratically"],["quatation","quotation"],["quater","quarter"],["quation","equation"],["quations","equations"],["quckstarter","quickstarter"],["qudrangles","quadrangles"],["quee","queue"],["Queenland","Queensland"],["queing","queueing"],["queiried","queried"],["queisce","quiesce"],["queriable","queryable"],["quering","querying"],["querries","queries"],["queryies","queries"],["queryinterace","queryinterface"],["querys","queries"],["queset","quest"],["quesets","quests"],["quesiton","question"],["quesitonable","questionable"],["quesitons","questions"],["quesr","quest"],["quesrs","quests"],["questionaire","questionnaire"],["questionnair","questionnaire"],["questoin","question"],["questoins","questions"],["questonable","questionable"],["queu","queue"],["queueud","queued"],["queus","queues"],["quew","queue"],["quickier","quicker"],["quicklyu","quickly"],["quickyl","quickly"],["quicly","quickly"],["quiessent","quiescent"],["quiests","quests"],["quikc","quick"],["quinessential","quintessential"],["quiting","quitting"],["quitt","quit"],["quitted","quit"],["quizes","quizzes"],["quotaion","quotation"],["quoteed","quoted"],["quottes","quotes"],["quried","queried"],["quroum","quorum"],["qust","quest"],["qusts","quests"],["rabinnical","rabbinical"],["racaus","raucous"],["ractise","practise"],["radation","radiation"],["radiactive","radioactive"],["radiaton","radiation"],["radify","ratify"],["radiobuttion","radiobutton"],["radis","radix"],["rady","ready"],["raed","read"],["raeding","reading"],["raeds","reads"],["raedy","ready"],["raelly","really"],["raisedd","raised"],["ralation","relation"],["randmom","random"],["randomally","randomly"],["raoming","roaming"],["raotat","rotate"],["raotate","rotate"],["raotated","rotated"],["raotates","rotates"],["raotating","rotating"],["raotation","rotation"],["raotations","rotations"],["raotats","rotates"],["raplace","replace"],["raplacing","replacing"],["rapresent","represent"],["rapresentation","representation"],["rapresented","represented"],["rapresenting","representing"],["rapresents","represents"],["rapsberry","raspberry"],["rarelly","rarely"],["rarified","rarefied"],["rasberry","raspberry"],["rasie","raise"],["rasied","raised"],["rasies","raises"],["rasiing","raising"],["rasing","raising"],["rasons","reasons"],["raspbery","raspberry"],["raspoberry","raspberry"],["rathar","rather"],["rathern","rather"],["rcall","recall"],["rceate","create"],["rceating","creating"],["rduce","reduce"],["re-attachement","re-attachment"],["re-defiend","re-defined"],["re-engeneer","re-engineer"],["re-engeneering","re-engineering"],["re-evaulated","re-evaluated"],["re-impliment","re-implement"],["re-implimenting","re-implementing"],["re-negatiotiable","re-negotiable"],["re-negatiotiate","re-negotiate"],["re-negatiotiated","re-negotiated"],["re-negatiotiates","re-negotiates"],["re-negatiotiating","re-negotiating"],["re-negatiotiation","re-negotiation"],["re-negatiotiations","re-negotiations"],["re-negatiotiator","re-negotiator"],["re-negatiotiators","re-negotiators"],["re-negoable","re-negotiable"],["re-negoate","re-negotiate"],["re-negoated","re-negotiated"],["re-negoates","re-negotiates"],["re-negoatiable","re-negotiable"],["re-negoatiate","re-negotiate"],["re-negoatiated","re-negotiated"],["re-negoatiates","re-negotiates"],["re-negoatiating","re-negotiating"],["re-negoatiation","re-negotiation"],["re-negoatiations","re-negotiations"],["re-negoatiator","re-negotiator"],["re-negoatiators","re-negotiators"],["re-negoating","re-negotiating"],["re-negoation","re-negotiation"],["re-negoations","re-negotiations"],["re-negoator","re-negotiator"],["re-negoators","re-negotiators"],["re-negociable","re-negotiable"],["re-negociate","re-negotiate"],["re-negociated","re-negotiated"],["re-negociates","re-negotiates"],["re-negociating","re-negotiating"],["re-negociation","re-negotiation"],["re-negociations","re-negotiations"],["re-negociator","re-negotiator"],["re-negociators","re-negotiators"],["re-negogtiable","re-negotiable"],["re-negogtiate","re-negotiate"],["re-negogtiated","re-negotiated"],["re-negogtiates","re-negotiates"],["re-negogtiating","re-negotiating"],["re-negogtiation","re-negotiation"],["re-negogtiations","re-negotiations"],["re-negogtiator","re-negotiator"],["re-negogtiators","re-negotiators"],["re-negoitable","re-negotiable"],["re-negoitate","re-negotiate"],["re-negoitated","re-negotiated"],["re-negoitates","re-negotiates"],["re-negoitating","re-negotiating"],["re-negoitation","re-negotiation"],["re-negoitations","re-negotiations"],["re-negoitator","re-negotiator"],["re-negoitators","re-negotiators"],["re-negoptionsotiable","re-negotiable"],["re-negoptionsotiate","re-negotiate"],["re-negoptionsotiated","re-negotiated"],["re-negoptionsotiates","re-negotiates"],["re-negoptionsotiating","re-negotiating"],["re-negoptionsotiation","re-negotiation"],["re-negoptionsotiations","re-negotiations"],["re-negoptionsotiator","re-negotiator"],["re-negoptionsotiators","re-negotiators"],["re-negosiable","re-negotiable"],["re-negosiate","re-negotiate"],["re-negosiated","re-negotiated"],["re-negosiates","re-negotiates"],["re-negosiating","re-negotiating"],["re-negosiation","re-negotiation"],["re-negosiations","re-negotiations"],["re-negosiator","re-negotiator"],["re-negosiators","re-negotiators"],["re-negotable","re-negotiable"],["re-negotaiable","re-negotiable"],["re-negotaiate","re-negotiate"],["re-negotaiated","re-negotiated"],["re-negotaiates","re-negotiates"],["re-negotaiating","re-negotiating"],["re-negotaiation","re-negotiation"],["re-negotaiations","re-negotiations"],["re-negotaiator","re-negotiator"],["re-negotaiators","re-negotiators"],["re-negotaible","re-negotiable"],["re-negotaite","re-negotiate"],["re-negotaited","re-negotiated"],["re-negotaites","re-negotiates"],["re-negotaiting","re-negotiating"],["re-negotaition","re-negotiation"],["re-negotaitions","re-negotiations"],["re-negotaitor","re-negotiator"],["re-negotaitors","re-negotiators"],["re-negotate","re-negotiate"],["re-negotated","re-negotiated"],["re-negotates","re-negotiates"],["re-negotatiable","re-negotiable"],["re-negotatiate","re-negotiate"],["re-negotatiated","re-negotiated"],["re-negotatiates","re-negotiates"],["re-negotatiating","re-negotiating"],["re-negotatiation","re-negotiation"],["re-negotatiations","re-negotiations"],["re-negotatiator","re-negotiator"],["re-negotatiators","re-negotiators"],["re-negotatible","re-negotiable"],["re-negotatie","re-negotiate"],["re-negotatied","re-negotiated"],["re-negotaties","re-negotiates"],["re-negotating","re-negotiating"],["re-negotation","re-negotiation"],["re-negotations","re-negotiations"],["re-negotatior","re-negotiator"],["re-negotatiors","re-negotiators"],["re-negotator","re-negotiator"],["re-negotators","re-negotiators"],["re-negothiable","re-negotiable"],["re-negothiate","re-negotiate"],["re-negothiated","re-negotiated"],["re-negothiates","re-negotiates"],["re-negothiating","re-negotiating"],["re-negothiation","re-negotiation"],["re-negothiations","re-negotiations"],["re-negothiator","re-negotiator"],["re-negothiators","re-negotiators"],["re-negotible","re-negotiable"],["re-negoticable","re-negotiable"],["re-negoticate","re-negotiate"],["re-negoticated","re-negotiated"],["re-negoticates","re-negotiates"],["re-negoticating","re-negotiating"],["re-negotication","re-negotiation"],["re-negotications","re-negotiations"],["re-negoticator","re-negotiator"],["re-negoticators","re-negotiators"],["re-negotioable","re-negotiable"],["re-negotioate","re-negotiate"],["re-negotioated","re-negotiated"],["re-negotioates","re-negotiates"],["re-negotioating","re-negotiating"],["re-negotioation","re-negotiation"],["re-negotioations","re-negotiations"],["re-negotioator","re-negotiator"],["re-negotioators","re-negotiators"],["re-negotioble","re-negotiable"],["re-negotion","re-negotiation"],["re-negotionable","re-negotiable"],["re-negotionate","re-negotiate"],["re-negotionated","re-negotiated"],["re-negotionates","re-negotiates"],["re-negotionating","re-negotiating"],["re-negotionation","re-negotiation"],["re-negotionations","re-negotiations"],["re-negotionator","re-negotiator"],["re-negotionators","re-negotiators"],["re-negotions","re-negotiations"],["re-negotiotable","re-negotiable"],["re-negotiotate","re-negotiate"],["re-negotiotated","re-negotiated"],["re-negotiotates","re-negotiates"],["re-negotiotating","re-negotiating"],["re-negotiotation","re-negotiation"],["re-negotiotations","re-negotiations"],["re-negotiotator","re-negotiator"],["re-negotiotators","re-negotiators"],["re-negotiote","re-negotiate"],["re-negotioted","re-negotiated"],["re-negotiotes","re-negotiates"],["re-negotioting","re-negotiating"],["re-negotiotion","re-negotiation"],["re-negotiotions","re-negotiations"],["re-negotiotor","re-negotiator"],["re-negotiotors","re-negotiators"],["re-negotitable","re-negotiable"],["re-negotitae","re-negotiate"],["re-negotitaed","re-negotiated"],["re-negotitaes","re-negotiates"],["re-negotitaing","re-negotiating"],["re-negotitaion","re-negotiation"],["re-negotitaions","re-negotiations"],["re-negotitaor","re-negotiator"],["re-negotitaors","re-negotiators"],["re-negotitate","re-negotiate"],["re-negotitated","re-negotiated"],["re-negotitates","re-negotiates"],["re-negotitating","re-negotiating"],["re-negotitation","re-negotiation"],["re-negotitations","re-negotiations"],["re-negotitator","re-negotiator"],["re-negotitators","re-negotiators"],["re-negotite","re-negotiate"],["re-negotited","re-negotiated"],["re-negotites","re-negotiates"],["re-negotiting","re-negotiating"],["re-negotition","re-negotiation"],["re-negotitions","re-negotiations"],["re-negotitor","re-negotiator"],["re-negotitors","re-negotiators"],["re-negoziable","re-negotiable"],["re-negoziate","re-negotiate"],["re-negoziated","re-negotiated"],["re-negoziates","re-negotiates"],["re-negoziating","re-negotiating"],["re-negoziation","re-negotiation"],["re-negoziations","re-negotiations"],["re-negoziator","re-negotiator"],["re-negoziators","re-negotiators"],["re-realease","re-release"],["re-uplad","re-upload"],["re-upladed","re-uploaded"],["re-uplader","re-uploader"],["re-upladers","re-uploaders"],["re-uplading","re-uploading"],["re-uplads","re-uploads"],["re-uplaod","re-upload"],["re-uplaoded","re-uploaded"],["re-uplaoder","re-uploader"],["re-uplaoders","re-uploaders"],["re-uplaoding","re-uploading"],["re-uplaods","re-uploads"],["re-uplod","re-upload"],["re-uploded","re-uploaded"],["re-uploder","re-uploader"],["re-uploders","re-uploaders"],["re-uploding","re-uploading"],["re-uplods","re-uploads"],["reaaly","really"],["reaarange","rearrange"],["reaaranges","rearranges"],["reaasigned","reassigned"],["reacahable","reachable"],["reacahble","reachable"],["reaccurring","recurring"],["reaceive","receive"],["reacheable","reachable"],["reachers","readers"],["reachs","reaches"],["reacing","reaching"],["reacll","recall"],["reactquire","reacquire"],["readabilty","readability"],["readanle","readable"],["readapted","re-adapted"],["readble","readable"],["readdrss","readdress"],["readdrssed","readdressed"],["readdrsses","readdresses"],["readdrssing","readdressing"],["readeable","readable"],["reademe","README"],["readiable","readable"],["readibility","readability"],["readible","readable"],["readig","reading"],["readigs","readings"],["readius","radius"],["readl-only","read-only"],["readmition","readmission"],["readnig","reading"],["readning","reading"],["readyness","readiness"],["reaeched","reached"],["reagrding","regarding"],["reaktivate","reactivate"],["reaktivated","reactivated"],["realease","release"],["realeased","released"],["realeases","releases"],["realiable","reliable"],["realitime","realtime"],["realitvely","relatively"],["realiy","really"],["realiztion","realization"],["realiztions","realizations"],["realling","really"],["reallize","realize"],["reallllly","really"],["reallocae","reallocate"],["reallocaes","reallocates"],["reallocaiing","reallocating"],["reallocaing","reallocating"],["reallocaion","reallocation"],["reallocaions","reallocations"],["reallocaite","reallocate"],["reallocaites","reallocates"],["reallocaiting","reallocating"],["reallocaition","reallocation"],["reallocaitions","reallocations"],["reallocaiton","reallocation"],["reallocaitons","reallocations"],["realsitic","realistic"],["realted","related"],["realyl","really"],["reamde","README"],["reamins","remains"],["reander","render"],["reanme","rename"],["reanmed","renamed"],["reanmes","renames"],["reanming","renaming"],["reaon","reason"],["reaons","reasons"],["reapeat","repeat"],["reapeated","repeated"],["reapeater","repeater"],["reapeating","repeating"],["reapeats","repeats"],["reappeares","reappears"],["reapper","reappear"],["reappered","reappeared"],["reappering","reappearing"],["rearely","rarely"],["rearranable","rearrangeable"],["rearrane","rearrange"],["rearraned","rearranged"],["rearranement","rearrangement"],["rearranements","rearrangements"],["rearranent","rearrangement"],["rearranents","rearrangements"],["rearranes","rearranges"],["rearrang","rearrange"],["rearrangable","rearrangeable"],["rearrangaeble","rearrangeable"],["rearrangaelbe","rearrangeable"],["rearrangd","rearranged"],["rearrangde","rearranged"],["rearrangent","rearrangement"],["rearrangents","rearrangements"],["rearrangmeent","rearrangement"],["rearrangmeents","rearrangements"],["rearrangmenet","rearrangement"],["rearrangmenets","rearrangements"],["rearrangment","rearrangement"],["rearrangments","rearrangements"],["rearrangnig","rearranging"],["rearrangning","rearranging"],["rearrangs","rearranges"],["rearrangse","rearranges"],["rearrangt","rearrangement"],["rearrangte","rearrange"],["rearrangteable","rearrangeable"],["rearrangteables","rearrangeables"],["rearrangted","rearranged"],["rearrangtement","rearrangement"],["rearrangtements","rearrangements"],["rearrangtes","rearranges"],["rearrangting","rearranging"],["rearrangts","rearrangements"],["rearraning","rearranging"],["rearranment","rearrangement"],["rearranments","rearrangements"],["rearrant","rearrangement"],["rearrants","rearrangements"],["reasearch","research"],["reasearcher","researcher"],["reasearchers","researchers"],["reasnable","reasonable"],["reasoable","reasonable"],["reasonabily","reasonably"],["reasonble","reasonable"],["reasonbly","reasonably"],["reasonnable","reasonable"],["reasonnably","reasonably"],["reassinging","reassigning"],["reassocition","reassociation"],["reasssign","reassign"],["reatime","realtime"],["reattachement","reattachment"],["rebiulding","rebuilding"],["rebllions","rebellions"],["reboto","reboot"],["rebounce","rebound"],["rebuilded","rebuilt"],["rebuillt","rebuilt"],["rebuils","rebuilds"],["rebuit","rebuilt"],["rebuld","rebuild"],["rebulding","rebuilding"],["rebulds","rebuilds"],["rebulid","rebuild"],["rebuliding","rebuilding"],["rebulids","rebuilds"],["rebulit","rebuilt"],["recahed","reached"],["recal","recall"],["recalcualte","recalculate"],["recalcualted","recalculated"],["recalcualter","re-calculator"],["recalcualtes","recalculates"],["recalcualting","recalculating"],["recalcualtion","recalculation"],["recalcualtions","recalculations"],["recalcuate","recalculate"],["recalcuated","recalculated"],["recalcuates","recalculates"],["recalcuations","recalculations"],["recalculaion","recalculation"],["recalculatble","re-calculable"],["recalcution","recalculation"],["recalulate","recalculate"],["recalulation","recalculation"],["recangle","rectangle"],["recangles","rectangles"],["reccomend","recommend"],["reccomendations","recommendations"],["reccomended","recommended"],["reccomending","recommending"],["reccommend","recommend"],["reccommendation","recommendation"],["reccommendations","recommendations"],["reccommended","recommended"],["reccommending","recommending"],["reccommends","recommends"],["recconecct","reconnect"],["recconeccted","reconnected"],["recconeccting","reconnecting"],["recconecction","reconnection"],["recconecctions","reconnections"],["recconeccts","reconnects"],["recconect","reconnect"],["recconected","reconnected"],["recconecting","reconnecting"],["recconection","reconnection"],["recconections","reconnections"],["recconects","reconnects"],["recconeect","reconnect"],["recconeected","reconnected"],["recconeecting","reconnecting"],["recconeection","reconnection"],["recconeections","reconnections"],["recconeects","reconnects"],["recconenct","reconnect"],["recconencted","reconnected"],["recconencting","reconnecting"],["recconenction","reconnection"],["recconenctions","reconnections"],["recconencts","reconnects"],["recconet","reconnect"],["recconeted","reconnected"],["recconeting","reconnecting"],["recconetion","reconnection"],["recconetions","reconnections"],["recconets","reconnects"],["reccord","record"],["reccorded","recorded"],["reccording","recording"],["reccords","records"],["reccuring","recurring"],["reccursive","recursive"],["reccursively","recursively"],["receeded","receded"],["receeding","receding"],["receied","received"],["receieve","receive"],["receieved","received"],["receieves","receives"],["receieving","receiving"],["receipient","recipient"],["receipients","recipients"],["receiption","reception"],["receiv","receive"],["receivd","received"],["receivedfrom","received from"],["receiveing","receiving"],["receiviing","receiving"],["receivs","receives"],["recenet","recent"],["recenlty","recently"],["recenly","recently"],["recenty","recently"],["recepient","recipient"],["recepients","recipients"],["recepion","reception"],["receve","receive"],["receved","received"],["receves","receives"],["recevie","receive"],["recevied","received"],["recevier","receiver"],["recevies","receives"],["receving","receiving"],["rechable","reachable"],["rechargable","rechargeable"],["recheability","reachability"],["reched","reached"],["rechek","recheck"],["recide","reside"],["recided","resided"],["recident","resident"],["recidents","residents"],["reciding","residing"],["reciepents","recipients"],["reciept","receipt"],["recieve","receive"],["recieved","received"],["reciever","receiver"],["recievers","receivers"],["recieves","receives"],["recieving","receiving"],["recievs","receives"],["recipiant","recipient"],["recipiants","recipients"],["recipie","recipe"],["recipies","recipes"],["reciprocoal","reciprocal"],["reciprocoals","reciprocals"],["recive","receive"],["recived","received"],["reciver","receiver"],["recivers","receivers"],["recivership","receivership"],["recives","receives"],["reciving","receiving"],["reclaimation","reclamation"],["recntly","recently"],["recod","record"],["recofig","reconfig"],["recoginizing-","recognizing"],["recogise","recognise"],["recogize","recognize"],["recogized","recognized"],["recogizes","recognizes"],["recogizing","recognizing"],["recogniced","recognised"],["recogninse","recognise"],["recognizeable","recognizable"],["recognzied","recognized"],["recomend","recommend"],["recomendation","recommendation"],["recomendations","recommendations"],["recomendatoin","recommendation"],["recomendatoins","recommendations"],["recomended","recommended"],["recomending","recommending"],["recomends","recommends"],["recommad","recommend"],["recommaded","recommended"],["recommand","recommend"],["recommandation","recommendation"],["recommanded","recommended"],["recommanding","recommending"],["recommands","recommends"],["recommd","recommend"],["recommdation","recommendation"],["recommded","recommended"],["recommdend","recommend"],["recommdended","recommended"],["recommdends","recommends"],["recommds","recommends"],["recommed","recommend"],["recommedation","recommendation"],["recommedations","recommendations"],["recommeded","recommended"],["recommeding","recommending"],["recommeds","recommends"],["recommened","recommended"],["recommeneded","recommended"],["recommented","recommended"],["recommmend","recommend"],["recommmended","recommended"],["recommmends","recommends"],["recommnd","recommend"],["recommnded","recommended"],["recommnds","recommends"],["recommned","recommend"],["recommneded","recommended"],["recommneds","recommends"],["recommpile","recompile"],["recommpiled","recompiled"],["recompence","recompense"],["recomput","recompute"],["recomputaion","recomputation"],["recompuute","recompute"],["recompuuted","recomputed"],["recompuutes","recomputes"],["recompuuting","recomputing"],["reconaissance","reconnaissance"],["reconcilation","reconciliation"],["recondifure","reconfigure"],["reconecct","reconnect"],["reconeccted","reconnected"],["reconeccting","reconnecting"],["reconecction","reconnection"],["reconecctions","reconnections"],["reconeccts","reconnects"],["reconect","reconnect"],["reconected","reconnected"],["reconecting","reconnecting"],["reconection","reconnection"],["reconections","reconnections"],["reconects","reconnects"],["reconeect","reconnect"],["reconeected","reconnected"],["reconeecting","reconnecting"],["reconeection","reconnection"],["reconeections","reconnections"],["reconeects","reconnects"],["reconenct","reconnect"],["reconencted","reconnected"],["reconencting","reconnecting"],["reconenction","reconnection"],["reconenctions","reconnections"],["reconencts","reconnects"],["reconet","reconnect"],["reconeted","reconnected"],["reconeting","reconnecting"],["reconetion","reconnection"],["reconetions","reconnections"],["reconets","reconnects"],["reconfifure","reconfigure"],["reconfiged","reconfigured"],["reconfugire","reconfigure"],["reconfugre","reconfigure"],["reconfugure","reconfigure"],["reconfure","reconfigure"],["recongifure","reconfigure"],["recongize","recognize"],["recongized","recognized"],["recongnises","recognises"],["recongnizes","recognizes"],["reconize","recognize"],["reconized","recognized"],["reconnaisance","reconnaissance"],["reconnaissence","reconnaissance"],["reconnct","reconnect"],["reconncted","reconnected"],["reconncting","reconnecting"],["reconncts","reconnects"],["reconsidder","reconsider"],["reconstrcut","reconstruct"],["reconstrcuted","reconstructed"],["reconstrcution","reconstruction"],["reconstuct","reconstruct"],["reconstucted","reconstructed"],["reconstucting","reconstructing"],["reconstucts","reconstructs"],["reconsturction","reconstruction"],["recontruct","reconstruct"],["recontructed","reconstructed"],["recontructing","reconstructing"],["recontruction","reconstruction"],["recontructions","reconstructions"],["recontructor","reconstructor"],["recontructors","reconstructors"],["recontructs","reconstructs"],["recordproducer","record producer"],["recordss","records"],["recored","recorded"],["recoriding","recording"],["recourced","resourced"],["recources","resources"],["recourcing","resourcing"],["recpie","recipe"],["recpies","recipes"],["recquired","required"],["recrational","recreational"],["recreateation","recreation"],["recrod","record"],["recrods","records"],["recrusevly","recursively"],["recrusion","recursion"],["recrusive","recursive"],["recrusivelly","recursively"],["recrusively","recursively"],["rectange","rectangle"],["rectanges","rectangles"],["rectanglar","rectangular"],["rectangluar","rectangular"],["rectiinear","rectilinear"],["recude","reduce"],["recuiting","recruiting"],["reculrively","recursively"],["recuring","recurring"],["recurisvely","recursively"],["recurively","recursively"],["recurrance","recurrence"],["recursily","recursively"],["recursivelly","recursively"],["recursivion","recursion"],["recursivley","recursively"],["recursivly","recursively"],["recurssed","recursed"],["recursses","recurses"],["recurssing","recursing"],["recurssion","recursion"],["recurssive","recursive"],["recusrive","recursive"],["recusrively","recursively"],["recusrsive","recursive"],["recustion","recursion"],["recyclying","recycling"],["recylcing","recycling"],["recyle","recycle"],["recyled","recycled"],["recyles","recycles"],["recyling","recycling"],["redability","readability"],["redandant","redundant"],["redeable","readable"],["redeclaation","redeclaration"],["redefiend","redefined"],["redefiende","redefined"],["redefintion","redefinition"],["redefintions","redefinitions"],["redenderer","renderer"],["redered","rendered"],["redict","redirect"],["rediculous","ridiculous"],["redidual","residual"],["redifine","redefine"],["redifinition","redefinition"],["redifinitions","redefinitions"],["redifintion","redefinition"],["redifintions","redefinitions"],["reding","reading"],["redings","readings"],["redircet","redirect"],["redirectd","redirected"],["redirectrion","redirection"],["redisign","redesign"],["redistirbute","redistribute"],["redistirbuted","redistributed"],["redistirbutes","redistributes"],["redistirbuting","redistributing"],["redistirbution","redistribution"],["redistributeable","redistributable"],["redistrubute","redistribute"],["redistrubuted","redistributed"],["redistrubution","redistribution"],["redistrubutions","redistributions"],["redliens","redlines"],["rednerer","renderer"],["redonly","readonly"],["redudancy","redundancy"],["redudant","redundant"],["redunancy","redundancy"],["redunant","redundant"],["redundacy","redundancy"],["redundand","redundant"],["redundat","redundant"],["redundency","redundancy"],["redundent","redundant"],["reduntancy","redundancy"],["reduntant","redundant"],["reease","release"],["reeased","released"],["reeaser","releaser"],["reeasers","releasers"],["reeases","releases"],["reeasing","releasing"],["reedeming","redeeming"],["reegion","region"],["reegions","regions"],["reelation","relation"],["reelease","release"],["reenable","re-enable"],["reenabled","re-enabled"],["reename","rename"],["reencode","re-encode"],["reenfoce","reinforce"],["reenfoced","reinforced"],["reenforced","reinforced"],["reesrved","reserved"],["reesult","result"],["reeturn","return"],["reeturned","returned"],["reeturning","returning"],["reeturns","returns"],["reevalute","reevaluate"],["reevaulating","reevaluating"],["refcound","refcount"],["refcounf","refcount"],["refect","reflect"],["refected","reflected"],["refecting","reflecting"],["refectiv","reflective"],["refector","refactor"],["refectoring","refactoring"],["refects","reflects"],["refedendum","referendum"],["refeinement","refinement"],["refeinements","refinements"],["refelects","reflects"],["refence","reference"],["refences","references"],["refenence","reference"],["refenrenced","referenced"],["referal","referral"],["referance","reference"],["referanced","referenced"],["referances","references"],["referant","referent"],["referebces","references"],["referece","reference"],["referecence","reference"],["referecences","references"],["refereces","references"],["referecne","reference"],["refered","referred"],["referefences","references"],["referemce","reference"],["referemces","references"],["referenace","reference"],["referenc","reference"],["referencable","referenceable"],["referencial","referential"],["referencially","referentially"],["referencs","references"],["referenct","referenced"],["referene","reference"],["referenece","reference"],["refereneced","referenced"],["refereneces","references"],["referened","referenced"],["referenence","reference"],["referenenced","referenced"],["referenences","references"],["referenes","references"],["referennces","references"],["referense","reference"],["referensed","referenced"],["referenses","references"],["referenz","reference"],["referenzes","references"],["refererd","referred"],["refererence","reference"],["referiang","referring"],["refering","referring"],["refernce","reference"],["refernced","referenced"],["referncence","reference"],["referncences","references"],["refernces","references"],["referncial","referential"],["referncing","referencing"],["refernece","reference"],["referneced","referenced"],["referneces","references"],["refernnce","reference"],["referr","refer"],["referrence","reference"],["referrenced","referenced"],["referrences","references"],["referrencing","referencing"],["referreres","referrers"],["referres","refers"],["referrs","refers"],["refertence","reference"],["refertenced","referenced"],["refertences","references"],["refesh","refresh"],["refeshed","refreshed"],["refeshes","refreshes"],["refeshing","refreshing"],["reffered","referred"],["refference","reference"],["reffering","referring"],["refferr","refer"],["reffers","refers"],["refinemenet","refinement"],["refinmenet","refinement"],["refinment","refinement"],["reflet","reflect"],["refleted","reflected"],["refleting","reflecting"],["refletion","reflection"],["refletions","reflections"],["reflets","reflects"],["refocuss","refocus"],["refocussed","refocused"],["reformating","reformatting"],["reformattd","reformatted"],["refreh","refresh"],["refrence","reference"],["refrenced","referenced"],["refrences","references"],["refrencing","referencing"],["refrerence","reference"],["refrerenced","referenced"],["refrerenceing","referencing"],["refrerences","references"],["refrerencial","referential"],["refrers","refers"],["refreshs","refreshes"],["refreshses","refreshes"],["refridgeration","refrigeration"],["refridgerator","refrigerator"],["refromatting","refomatting"],["refromist","reformist"],["refrormatting","reformatting"],["refure","refuse"],["refures","refuses"],["refusla","refusal"],["regalar","regular"],["regalars","regulars"],["regardes","regards"],["regardles","regardless"],["regardlesss","regardless"],["regaring","regarding"],["regarldess","regardless"],["regarless","regardless"],["regart","regard"],["regarted","regarded"],["regarting","regarding"],["regartless","regardless"],["regconized","recognized"],["regeister","register"],["regeistered","registered"],["regeistration","registration"],["regenarated","regenerated"],["regenrated","regenerated"],["regenratet","regenerated"],["regenrating","regenerating"],["regenration","regeneration"],["regenrative","regenerative"],["regession","regression"],["regestered","registered"],["regidstered","registered"],["regio","region"],["regiser","register"],["regisration","registration"],["regist","register"],["registartion","registration"],["registe","register"],["registed","registered"],["registeing","registering"],["registeration","registration"],["registerered","registered"],["registeres","registers"],["registeresd","registered"],["registerred","registered"],["registert","registered"],["registery","registry"],["registes","registers"],["registing","registering"],["registors","registers"],["registrain","registration"],["registraion","registration"],["registraions","registrations"],["registraration","registration"],["registrated","registered"],["registred","registered"],["registrer","register"],["registring","registering"],["registrs","registers"],["registy","registry"],["regiter","register"],["regitered","registered"],["regitering","registering"],["regiters","registers"],["regluar","regular"],["regon","region"],["regons","regions"],["regorded","recorded"],["regresion","regression"],["regresison","regression"],["regresssion","regression"],["regrigerator","refrigerator"],["regsion","region"],["regsions","regions"],["regsiter","register"],["regsitered","registered"],["regsitering","registering"],["regsiters","registers"],["regsitry","registry"],["regster","register"],["regstered","registered"],["regstering","registering"],["regsters","registers"],["regstry","registry"],["regualar","regular"],["regualarly","regularly"],["regualator","regulator"],["regualr","regular"],["regualtor","regulator"],["reguardless","regardless"],["reguarldess","regardless"],["reguarlise","regularise"],["reguarliser","regulariser"],["reguarlize","regularize"],["reguarlizer","regularizer"],["reguarly","regularly"],["reguator","regulator"],["reguire","require"],["reguired","required"],["reguirement","requirement"],["reguirements","requirements"],["reguires","requires"],["reguiring","requiring"],["regulaer","regular"],["regulaion","regulation"],["regulamentation","regulation"],["regulamentations","regulations"],["regulaotrs","regulators"],["regulaotry","regulatory"],["regularily","regularly"],["regulariry","regularly"],["regularlisation","regularisation"],["regularlise","regularise"],["regularlised","regularised"],["regularliser","regulariser"],["regularlises","regularises"],["regularlising","regularising"],["regularlization","regularization"],["regularlize","regularize"],["regularlized","regularized"],["regularlizer","regularizer"],["regularlizes","regularizes"],["regularlizing","regularizing"],["regularlly","regularly"],["regulax","regular"],["reguler","regular"],["regulr","regular"],["regultor","regulator"],["regultors","regulators"],["regultory","regulatory"],["regurlarly","regularly"],["reguster","register"],["rehersal","rehearsal"],["rehersing","rehearsing"],["reicarnation","reincarnation"],["reigining","reigning"],["reigonal","regional"],["reigster","register"],["reigstered","registered"],["reigstering","registering"],["reigsters","registers"],["reigstration","registration"],["reimplemenet","reimplement"],["reimplementaion","reimplementation"],["reimplementaions","reimplementations"],["reimplemention","reimplementation"],["reimplementions","reimplementations"],["reimplented","reimplemented"],["reimplents","reimplements"],["reimpliment","reimplement"],["reimplimenting","reimplementing"],["reimplmenet","reimplement"],["reimplment","reimplement"],["reimplmentation","reimplementation"],["reimplmented","reimplemented"],["reimplmenting","reimplementing"],["reimplments","reimplements"],["reimpplement","reimplement"],["reimpplementating","reimplementing"],["reimpplementation","reimplementation"],["reimpplemented","reimplemented"],["reimpremented","reimplemented"],["reinfoce","reinforce"],["reinfoced","reinforced"],["reinfocement","reinforcement"],["reinfocements","reinforcements"],["reinfoces","reinforces"],["reinfocing","reinforcing"],["reinitailise","reinitialise"],["reinitailised","reinitialised"],["reinitailize","reinitialize"],["reinitalize","reinitialize"],["reinitilize","reinitialize"],["reinitilized","reinitialized"],["reinstatiate","reinstantiate"],["reinstatiated","reinstantiated"],["reinstatiates","reinstantiates"],["reinstatiation","reinstantiation"],["reintantiate","reinstantiate"],["reintantiating","reinstantiating"],["reintepret","reinterpret"],["reintepreted","reinterpreted"],["reister","register"],["reitterate","reiterate"],["reitterated","reiterated"],["reitterates","reiterates"],["reivison","revision"],["rejplace","replace"],["reknown","renown"],["reknowned","renowned"],["rekursed","recursed"],["rekursion","recursion"],["rekursive","recursive"],["relaative","relative"],["relady","ready"],["relaease","release"],["relaese","release"],["relaesed","released"],["relaeses","releases"],["relaesing","releasing"],["relaged","related"],["relaimed","reclaimed"],["relaion","relation"],["relaive","relative"],["relaly","really"],["relase","release"],["relased","released"],["relaser","releaser"],["relases","releases"],["relashionship","relationship"],["relashionships","relationships"],["relasing","releasing"],["relataive","relative"],["relatated","related"],["relatd","related"],["relatdness","relatedness"],["relatibe","relative"],["relatibely","relatively"],["relatievly","relatively"],["relatiopnship","relationship"],["relativ","relative"],["relativly","relatively"],["relavant","relevant"],["relavent","relevant"],["releaase","release"],["releaased","released"],["relead","reload"],["releae","release"],["releaed","released"],["releaeing","releasing"],["releaing","releasing"],["releas","release"],["releasead","released"],["releasse","release"],["releated","related"],["releating","relating"],["releation","relation"],["releations","relations"],["releationship","relationship"],["releationships","relationships"],["releative","relative"],["releavant","relevant"],["relecant","relevant"],["releive","relieve"],["releived","relieved"],["releiver","reliever"],["releoad","reload"],["relese","release"],["relesed","released"],["releses","releases"],["reletive","relative"],["reletively","relatively"],["relevabt","relevant"],["relevane","relevant"],["releveant","relevant"],["relevence","relevance"],["relevent","relevant"],["relfected","reflected"],["relfecting","reflecting"],["relfection","reflection"],["relfections","reflections"],["reliablity","reliability"],["relient","reliant"],["religeous","religious"],["religous","religious"],["religously","religiously"],["relinguish","relinquish"],["relinguishing","relinquishing"],["relinqushment","relinquishment"],["relintquish","relinquish"],["relitavely","relatively"],["relly","really"],["reloade","reload"],["relocae","relocate"],["relocaes","relocates"],["relocaiing","relocating"],["relocaing","relocating"],["relocaion","relocation"],["relocaions","relocations"],["relocaite","relocate"],["relocaites","relocates"],["relocaiting","relocating"],["relocaition","relocation"],["relocaitions","relocations"],["relocaiton","relocation"],["relocaitons","relocations"],["relocateable","relocatable"],["reloccate","relocate"],["reloccated","relocated"],["reloccates","relocates"],["relpacement","replacement"],["relpy","reply"],["reltive","relative"],["relyable","reliable"],["relyably","reliably"],["relyed","relied"],["relys","relies"],["remaing","remaining"],["remainging","remaining"],["remainig","remaining"],["remainst","remains"],["remaning","remaining"],["remaped","remapped"],["remaping","remapping"],["rembember","remember"],["rembembered","remembered"],["rembembering","remembering"],["rembembers","remembers"],["rember","remember"],["remeber","remember"],["remebered","remembered"],["remebering","remembering"],["remebers","remembers"],["rememberable","memorable"],["rememberance","remembrance"],["rememberd","remembered"],["remembrence","remembrance"],["rememeber","remember"],["rememebered","remembered"],["rememebering","remembering"],["rememebers","remembers"],["rememebr","remember"],["rememebred","remembered"],["rememebrs","remembers"],["rememember","remember"],["rememembered","remembered"],["rememembers","remembers"],["rememer","remember"],["rememered","remembered"],["rememers","remembers"],["rememor","remember"],["rememored","remembered"],["rememoring","remembering"],["rememors","remembers"],["rememver","remember"],["remenant","remnant"],["remenber","remember"],["remenicent","reminiscent"],["remian","remain"],["remianed","remained"],["remianing","remaining"],["remians","remains"],["reminent","remnant"],["reminescent","reminiscent"],["remining","remaining"],["reminiscense","reminiscence"],["reminscent","reminiscent"],["reminsicent","reminiscent"],["remmeber","remember"],["remmebered","remembered"],["remmebering","remembering"],["remmebers","remembers"],["remmove","remove"],["remoce","remove"],["remoive","remove"],["remoived","removed"],["remoives","removes"],["remoiving","removing"],["remontly","remotely"],["remoote","remote"],["remore","remote"],["remorted","reported"],["remot","remote"],["removce","remove"],["removeable","removable"],["removefromat","removeformat"],["removeing","removing"],["removerd","removed"],["remve","remove"],["remved","removed"],["remves","removes"],["remvoe","remove"],["remvoed","removed"],["remvoes","removes"],["remvove","remove"],["remvoved","removed"],["remvoves","removes"],["remvs","removes"],["renabled","re-enabled"],["renderadble","renderable"],["renderd","rendered"],["rendereing","rendering"],["rendererd","rendered"],["renderered","rendered"],["renderering","rendering"],["renderning","rendering"],["renderr","render"],["renderring","rendering"],["rendevous","rendezvous"],["rendezous","rendezvous"],["rendired","rendered"],["rendirer","renderer"],["rendirers","renderers"],["rendiring","rendering"],["rendring","rendering"],["renedered","rendered"],["renegatiotiable","renegotiable"],["renegatiotiate","renegotiate"],["renegatiotiated","renegotiated"],["renegatiotiates","renegotiates"],["renegatiotiating","renegotiating"],["renegatiotiation","renegotiation"],["renegatiotiations","renegotiations"],["renegatiotiator","renegotiator"],["renegatiotiators","renegotiators"],["renegoable","renegotiable"],["renegoate","renegotiate"],["renegoated","renegotiated"],["renegoates","renegotiates"],["renegoatiable","renegotiable"],["renegoatiate","renegotiate"],["renegoatiated","renegotiated"],["renegoatiates","renegotiates"],["renegoatiating","renegotiating"],["renegoatiation","renegotiation"],["renegoatiations","renegotiations"],["renegoatiator","renegotiator"],["renegoatiators","renegotiators"],["renegoating","renegotiating"],["renegoation","renegotiation"],["renegoations","renegotiations"],["renegoator","renegotiator"],["renegoators","renegotiators"],["renegociable","renegotiable"],["renegociate","renegotiate"],["renegociated","renegotiated"],["renegociates","renegotiates"],["renegociating","renegotiating"],["renegociation","renegotiation"],["renegociations","renegotiations"],["renegociator","renegotiator"],["renegociators","renegotiators"],["renegogtiable","renegotiable"],["renegogtiate","renegotiate"],["renegogtiated","renegotiated"],["renegogtiates","renegotiates"],["renegogtiating","renegotiating"],["renegogtiation","renegotiation"],["renegogtiations","renegotiations"],["renegogtiator","renegotiator"],["renegogtiators","renegotiators"],["renegoitable","renegotiable"],["renegoitate","renegotiate"],["renegoitated","renegotiated"],["renegoitates","renegotiates"],["renegoitating","renegotiating"],["renegoitation","renegotiation"],["renegoitations","renegotiations"],["renegoitator","renegotiator"],["renegoitators","renegotiators"],["renegoptionsotiable","renegotiable"],["renegoptionsotiate","renegotiate"],["renegoptionsotiated","renegotiated"],["renegoptionsotiates","renegotiates"],["renegoptionsotiating","renegotiating"],["renegoptionsotiation","renegotiation"],["renegoptionsotiations","renegotiations"],["renegoptionsotiator","renegotiator"],["renegoptionsotiators","renegotiators"],["renegosiable","renegotiable"],["renegosiate","renegotiate"],["renegosiated","renegotiated"],["renegosiates","renegotiates"],["renegosiating","renegotiating"],["renegosiation","renegotiation"],["renegosiations","renegotiations"],["renegosiator","renegotiator"],["renegosiators","renegotiators"],["renegotable","renegotiable"],["renegotaiable","renegotiable"],["renegotaiate","renegotiate"],["renegotaiated","renegotiated"],["renegotaiates","renegotiates"],["renegotaiating","renegotiating"],["renegotaiation","renegotiation"],["renegotaiations","renegotiations"],["renegotaiator","renegotiator"],["renegotaiators","renegotiators"],["renegotaible","renegotiable"],["renegotaite","renegotiate"],["renegotaited","renegotiated"],["renegotaites","renegotiates"],["renegotaiting","renegotiating"],["renegotaition","renegotiation"],["renegotaitions","renegotiations"],["renegotaitor","renegotiator"],["renegotaitors","renegotiators"],["renegotate","renegotiate"],["renegotated","renegotiated"],["renegotates","renegotiates"],["renegotatiable","renegotiable"],["renegotatiate","renegotiate"],["renegotatiated","renegotiated"],["renegotatiates","renegotiates"],["renegotatiating","renegotiating"],["renegotatiation","renegotiation"],["renegotatiations","renegotiations"],["renegotatiator","renegotiator"],["renegotatiators","renegotiators"],["renegotatible","renegotiable"],["renegotatie","renegotiate"],["renegotatied","renegotiated"],["renegotaties","renegotiates"],["renegotating","renegotiating"],["renegotation","renegotiation"],["renegotations","renegotiations"],["renegotatior","renegotiator"],["renegotatiors","renegotiators"],["renegotator","renegotiator"],["renegotators","renegotiators"],["renegothiable","renegotiable"],["renegothiate","renegotiate"],["renegothiated","renegotiated"],["renegothiates","renegotiates"],["renegothiating","renegotiating"],["renegothiation","renegotiation"],["renegothiations","renegotiations"],["renegothiator","renegotiator"],["renegothiators","renegotiators"],["renegotible","renegotiable"],["renegoticable","renegotiable"],["renegoticate","renegotiate"],["renegoticated","renegotiated"],["renegoticates","renegotiates"],["renegoticating","renegotiating"],["renegotication","renegotiation"],["renegotications","renegotiations"],["renegoticator","renegotiator"],["renegoticators","renegotiators"],["renegotioable","renegotiable"],["renegotioate","renegotiate"],["renegotioated","renegotiated"],["renegotioates","renegotiates"],["renegotioating","renegotiating"],["renegotioation","renegotiation"],["renegotioations","renegotiations"],["renegotioator","renegotiator"],["renegotioators","renegotiators"],["renegotioble","renegotiable"],["renegotion","renegotiation"],["renegotionable","renegotiable"],["renegotionate","renegotiate"],["renegotionated","renegotiated"],["renegotionates","renegotiates"],["renegotionating","renegotiating"],["renegotionation","renegotiation"],["renegotionations","renegotiations"],["renegotionator","renegotiator"],["renegotionators","renegotiators"],["renegotions","renegotiations"],["renegotiotable","renegotiable"],["renegotiotate","renegotiate"],["renegotiotated","renegotiated"],["renegotiotates","renegotiates"],["renegotiotating","renegotiating"],["renegotiotation","renegotiation"],["renegotiotations","renegotiations"],["renegotiotator","renegotiator"],["renegotiotators","renegotiators"],["renegotiote","renegotiate"],["renegotioted","renegotiated"],["renegotiotes","renegotiates"],["renegotioting","renegotiating"],["renegotiotion","renegotiation"],["renegotiotions","renegotiations"],["renegotiotor","renegotiator"],["renegotiotors","renegotiators"],["renegotitable","renegotiable"],["renegotitae","renegotiate"],["renegotitaed","renegotiated"],["renegotitaes","renegotiates"],["renegotitaing","renegotiating"],["renegotitaion","renegotiation"],["renegotitaions","renegotiations"],["renegotitaor","renegotiator"],["renegotitaors","renegotiators"],["renegotitate","renegotiate"],["renegotitated","renegotiated"],["renegotitates","renegotiates"],["renegotitating","renegotiating"],["renegotitation","renegotiation"],["renegotitations","renegotiations"],["renegotitator","renegotiator"],["renegotitators","renegotiators"],["renegotite","renegotiate"],["renegotited","renegotiated"],["renegotites","renegotiates"],["renegotiting","renegotiating"],["renegotition","renegotiation"],["renegotitions","renegotiations"],["renegotitor","renegotiator"],["renegotitors","renegotiators"],["renegoziable","renegotiable"],["renegoziate","renegotiate"],["renegoziated","renegotiated"],["renegoziates","renegotiates"],["renegoziating","renegotiating"],["renegoziation","renegotiation"],["renegoziations","renegotiations"],["renegoziator","renegotiator"],["renegoziators","renegotiators"],["reneweal","renewal"],["renewl","renewal"],["renforce","reinforce"],["renforced","reinforced"],["renforcement","reinforcement"],["renforcements","reinforcements"],["renforces","reinforces"],["rennovate","renovate"],["rennovated","renovated"],["rennovating","renovating"],["rennovation","renovation"],["rentime","runtime"],["rentors","renters"],["reoadmap","roadmap"],["reoccurrence","recurrence"],["reoder","reorder"],["reomvable","removable"],["reomve","remove"],["reomved","removed"],["reomves","removes"],["reomving","removing"],["reonly","read-only"],["reopended","reopened"],["reoport","report"],["reopsitory","repository"],["reord","record"],["reorded","reorder"],["reorer","reorder"],["reorganision","reorganisation"],["reorginised","reorganised"],["reorginized","reorganized"],["reosnable","reasonable"],["reosne","reason"],["reosurce","resource"],["reosurced","resourced"],["reosurces","resources"],["reosurcing","resourcing"],["reounded","rounded"],["repace","replace"],["repaced","replaced"],["repacement","replacement"],["repacements","replacements"],["repaces","replaces"],["repacing","replacing"],["repackge","repackage"],["repackged","repackaged"],["repaitnt","repaint"],["reparamterization","reparameterization"],["repblic","republic"],["repblican","republican"],["repblicans","republicans"],["repblics","republics"],["repeates","repeats"],["repeatly","repeatedly"],["repect","respect"],["repectable","respectable"],["repected","respected"],["repecting","respecting"],["repective","respective"],["repectively","respectively"],["repects","respects"],["repedability","repeatability"],["repedable","repeatable"],["repeition","repetition"],["repentence","repentance"],["repentent","repentant"],["reperesent","represent"],["reperesentation","representation"],["reperesentational","representational"],["reperesentations","representations"],["reperesented","represented"],["reperesenting","representing"],["reperesents","represents"],["repersentation","representation"],["repertoir","repertoire"],["repesent","represent"],["repesentation","representation"],["repesentational","representational"],["repesented","represented"],["repesenting","representing"],["repesents","represents"],["repet","repeat"],["repetative","repetitive"],["repete","repeat"],["repeteadly","repeatedly"],["repetetion","repetition"],["repetetions","repetitions"],["repetetive","repetitive"],["repeting","repeating"],["repetion","repetition"],["repetions","repetitions"],["repetive","repetitive"],["repid","rapid"],["repition","repetition"],["repitions","repetitions"],["repitition","repetition"],["repititions","repetitions"],["replacability","replaceability"],["replacables","replaceables"],["replacacing","replacing"],["replacalbe","replaceable"],["replacalbes","replaceables"],["replacament","replacement"],["replacaments","replacements"],["replacate","replicate"],["replacated","replicated"],["replacates","replicates"],["replacating","replicating"],["replacation","replication"],["replacd","replaced"],["replaceemnt","replacement"],["replaceemnts","replacements"],["replacemenet","replacement"],["replacmenet","replacement"],["replacment","replacement"],["replacments","replacements"],["replacong","replacing"],["replaint","repaint"],["replasement","replacement"],["replasements","replacements"],["replcace","replace"],["replcaced","replaced"],["replcaof","replicaof"],["replicae","replicate"],["replicaes","replicates"],["replicaiing","replicating"],["replicaion","replication"],["replicaions","replications"],["replicaite","replicate"],["replicaites","replicates"],["replicaiting","replicating"],["replicaition","replication"],["replicaitions","replications"],["replicaiton","replication"],["replicaitons","replications"],["repling","replying"],["replys","replies"],["reponding","responding"],["reponse","response"],["reponses","responses"],["reponsibilities","responsibilities"],["reponsibility","responsibility"],["reponsible","responsible"],["reporing","reporting"],["reporitory","repository"],["reportadly","reportedly"],["reportign","reporting"],["reportresouces","reportresources"],["reposiotory","repository"],["reposiry","repository"],["repositiories","repositories"],["repositiory","repository"],["repositiroes","repositories"],["reposititioning","repositioning"],["repositorry","repository"],["repositotries","repositories"],["repositotry","repository"],["repositry","repository"],["reposoitory","repository"],["reposond","respond"],["reposonder","responder"],["reposonders","responders"],["reposonding","responding"],["reposonse","response"],["reposonses","responses"],["repostiories","repositories"],["repostiory","repository"],["repostories","repositories"],["repostory","repository"],["repport","report"],["reppository","repository"],["repraesentation","representation"],["repraesentational","representational"],["repraesentations","representations"],["reprecussion","repercussion"],["reprecussions","repercussions"],["repreesnt","represent"],["repreesnted","represented"],["repreesnts","represents"],["reprensent","represent"],["reprensentation","representation"],["reprensentational","representational"],["reprensentations","representations"],["reprepresents","represents"],["represantation","representation"],["represantational","representational"],["represantations","representations"],["represantative","representative"],["represenatation","representation"],["represenatational","representational"],["represenatations","representations"],["represenation","representation"],["represenational","representational"],["represenations","representations"],["represend","represent"],["representaion","representation"],["representaional","representational"],["representaions","representations"],["representaiton","representation"],["representated","represented"],["representating","representing"],["representd","represented"],["representiative","representative"],["represention","representation"],["representions","representations"],["representive","representative"],["representives","representatives"],["represet","represent"],["represetation","representation"],["represeted","represented"],["represeting","representing"],["represets","represents"],["represnet","represent"],["represnetated","represented"],["represnetation","representation"],["represnetations","representations"],["represneted","represented"],["represneting","representing"],["represnets","represents"],["represnt","represent"],["represntation","representation"],["represntative","representative"],["represnted","represented"],["represnts","represents"],["repressent","represent"],["repressentation","representation"],["repressenting","representing"],["repressents","represents"],["reprociblbe","reproducible"],["reprocible","reproducible"],["reprodice","reproduce"],["reprodiced","reproduced"],["reprodicibility","reproducibility"],["reprodicible","reproducible"],["reprodicibly","reproducibly"],["reprodicing","reproducing"],["reprodiction","reproduction"],["reproducabely","reproducibly"],["reproducability","reproducibility"],["reproducable","reproducible"],["reproducablitity","reproducibility"],["reproducably","reproducibly"],["reproduciability","reproduceability"],["reproduciable","reproduceable"],["reproduciblity","reproducibility"],["reprot","report"],["reprots","reports"],["reprsent","represent"],["reprsentation","representation"],["reprsentations","representations"],["reprsented","represented"],["reprsenting","representing"],["reprsents","represents"],["reprtoire","repertoire"],["reprucible","reproducible"],["repsectively","respectively"],["repsonse","response"],["repsonses","responses"],["repsonsible","responsible"],["repspectively","respectively"],["repsresents","represents"],["reptition","repetition"],["repubic","republic"],["repubican","republican"],["repubicans","republicans"],["repubics","republics"],["republi","republic"],["republian","republican"],["republians","republicans"],["republis","republics"],["repulic","republic"],["repulican","republican"],["repulicans","republicans"],["repulics","republics"],["reputpose","repurpose"],["reputposed","repurposed"],["reputposes","repurposes"],["reputposing","repurposing"],["reqest","request"],["reqested","requested"],["reqests","requests"],["reqeuest","request"],["reqeust","request"],["reqeusted","requested"],["reqeusting","requesting"],["reqeusts","requests"],["reqiest","request"],["reqire","require"],["reqired","required"],["reqirement","requirement"],["reqirements","requirements"],["reqires","requires"],["reqiring","requiring"],["reqiure","require"],["reqrite","rewrite"],["reqrites","rewrites"],["requencies","frequencies"],["requency","frequency"],["requeried","required"],["requeriment","requirement"],["requeriments","requirements"],["reques","request"],["requesr","request"],["requestd","requested"],["requestesd","requested"],["requestested","requested"],["requestied","requested"],["requestying","requesting"],["requet","request"],["requeted","requested"],["requeting","requesting"],["requets","requests"],["requeum","requiem"],["requied","required"],["requierd","required"],["requiere","require"],["requiered","required"],["requierement","requirement"],["requierements","requirements"],["requieres","requires"],["requiering","requiring"],["requies","requires"],["requiest","request"],["requiested","requested"],["requiesting","requesting"],["requiests","requests"],["requird","required"],["requireing","requiring"],["requiremenet","requirement"],["requiremenets","requirements"],["requiremnt","requirement"],["requirment","requirement"],["requirments","requirements"],["requisit","requisite"],["requisits","requisites"],["requre","require"],["requred","required"],["requrement","requirement"],["requrements","requirements"],["requres","requires"],["requrest","request"],["requrested","requested"],["requresting","requesting"],["requrests","requests"],["requried","required"],["requriement","requirement"],["requriements","requirements"],["requries","requires"],["requriment","requirement"],["requring","requiring"],["requrired","required"],["requrirement","requirement"],["requrirements","requirements"],["requris","require"],["requsite","requisite"],["requsites","requisites"],["requst","request"],["requsted","requested"],["requsting","requesting"],["requsts","requests"],["reregisteration","reregistration"],["rererences","references"],["rerference","reference"],["rerferences","references"],["rerpesentation","representation"],["rertieve","retrieve"],["rertieved","retrieved"],["rertiever","retriever"],["rertievers","retrievers"],["rertieves","retrieves"],["reruirement","requirement"],["reruirements","requirements"],["reruning","rerunning"],["rerwite","rewrite"],["resarch","research"],["resart","restart"],["resarts","restarts"],["resaurant","restaurant"],["resaurants","restaurants"],["rescaned","rescanned"],["rescource","resource"],["rescourced","resourced"],["rescources","resources"],["rescourcing","resourcing"],["rescrition","restriction"],["rescritions","restrictions"],["rescueing","rescuing"],["reseach","research"],["reseached","researched"],["researvation","reservation"],["researvations","reservations"],["researve","reserve"],["researved","reserved"],["researves","reserves"],["researving","reserving"],["reselction","reselection"],["resembelance","resemblance"],["resembes","resembles"],["resemblence","resemblance"],["resently","recently"],["resepect","respect"],["resepected","respected"],["resepecting","respecting"],["resepective","respective"],["resepectively","respectively"],["resepects","respects"],["reseration","reservation"],["reserv","reserve"],["reserverd","reserved"],["reservered","reserved"],["resestatus","resetstatus"],["resetable","resettable"],["reseted","reset"],["reseting","resetting"],["resetted","reset"],["reseved","reserved"],["reseverd","reserved"],["resevered","reserved"],["resevering","reserving"],["resevoir","reservoir"],["resgister","register"],["resgisters","registers"],["residental","residential"],["resierfs","reiserfs"],["resignement","resignment"],["resilence","resilience"],["resistable","resistible"],["resistence","resistance"],["resistent","resistant"],["resitance","resistance"],["resitances","resistances"],["resitor","resistor"],["resitors","resistors"],["resivwar","reservoir"],["resizeable","resizable"],["resizeble","resizable"],["reslection","reselection"],["reslove","resolve"],["resloved","resolved"],["resloves","resolves"],["resloving","resolving"],["reslut","result"],["resluts","results"],["resoect","respect"],["resoective","respective"],["resoiurce","resource"],["resoiurced","resourced"],["resoiurces","resources"],["resoiurcing","resourcing"],["resoltion","resolution"],["resoltuion","resolution"],["resoltuions","resolutions"],["resoluitons","resolutions"],["resolutin","resolution"],["resolutino","resolution"],["resolutinos","resolutions"],["resolutins","resolutions"],["resoluton","resolution"],["resolvinf","resolving"],["reson","reason"],["resonable","reasonable"],["resons","reasons"],["resonse","response"],["resonses","responses"],["resoource","resource"],["resoourced","resourced"],["resoources","resources"],["resoourcing","resourcing"],["resopnse","response"],["resopnses","responses"],["resorce","resource"],["resorced","resourced"],["resorces","resources"],["resorcing","resourcing"],["resore","restore"],["resorece","resource"],["resoreces","resources"],["resoruce","resource"],["resoruced","resourced"],["resoruces","resources"],["resorucing","resourcing"],["resotration","restoration"],["resotrations","restorations"],["resotrative","restorative"],["resotre","restore"],["resotrer","restorer"],["resotrers","restorers"],["resotres","restores"],["resotring","restoring"],["resouce","resource"],["resouced","resourced"],["resouces","resources"],["resoucing","resourcing"],["resoultion","resolution"],["resoultions","resolutions"],["resourcees","resources"],["resourceype","resourcetype"],["resoure","resource"],["resourecs","resources"],["resoured","resourced"],["resoures","resources"],["resourses","resources"],["resoution","resolution"],["resoves","resolves"],["resovle","resolve"],["resovled","resolved"],["resovles","resolves"],["resovling","resolving"],["respawining","respawning"],["respecitve","respective"],["respecitvely","respectively"],["respecive","respective"],["respecively","respectively"],["respectivelly","respectively"],["respectivley","respectively"],["respectivly","respectively"],["respnse","response"],["respnses","responses"],["respoduce","reproduce"],["responce","response"],["responces","responses"],["responibilities","responsibilities"],["responisble","responsible"],["responnsibilty","responsibility"],["responsabilities","responsibilities"],["responsability","responsibility"],["responsable","responsible"],["responsbile","responsible"],["responser's","responder's"],["responser","responder"],["responsers","responders"],["responsess","responses"],["responsibile","responsible"],["responsibilites","responsibilities"],["responsibilty","responsibility"],["responsiblities","responsibilities"],["responsiblity","responsibility"],["responsing","responding"],["respose","response"],["resposes","responses"],["resposibility","responsibility"],["resposible","responsible"],["resposiblity","responsibility"],["respositories","repositories"],["respository","repository"],["resposive","responsive"],["resposiveness","responsiveness"],["resposne","response"],["resposnes","responses"],["respresent","represent"],["respresentation","representation"],["respresentational","representational"],["respresentations","representations"],["respresented","represented"],["respresenting","representing"],["respresents","represents"],["resquest","request"],["resrouce","resource"],["resrouced","resourced"],["resrouces","resources"],["resroucing","resourcing"],["reSructuredText","reStructuredText"],["resrved","reserved"],["ressapee","recipe"],["ressemblance","resemblance"],["ressemble","resemble"],["ressembled","resembled"],["ressemblence","resemblance"],["ressembling","resembling"],["ressemle","resemble"],["resset","reset"],["resseted","reset"],["ressets","resets"],["ressetting","resetting"],["ressize","resize"],["ressizes","resizes"],["ressource","resource"],["ressourced","resourced"],["ressources","resources"],["ressourcing","resourcing"],["resssurecting","resurrecting"],["ressult","result"],["ressurect","resurrect"],["ressurected","resurrected"],["ressurecting","resurrecting"],["ressurection","resurrection"],["ressurects","resurrects"],["ressurrection","resurrection"],["restarant","restaurant"],["restarants","restaurants"],["restaraunt","restaurant"],["restaraunteur","restaurateur"],["restaraunteurs","restaurateurs"],["restaraunts","restaurants"],["restauranteurs","restaurateurs"],["restauration","restoration"],["restauraunt","restaurant"],["restaurnad","restaurant"],["restaurnat","restaurant"],["resteraunt","restaurant"],["resteraunts","restaurants"],["restes","reset"],["restesting","retesting"],["resticted","restricted"],["restoding","restoring"],["restoiring","restoring"],["restor","restore"],["restorated","restored"],["restoreable","restorable"],["restoreble","restorable"],["restoreing","restoring"],["restors","restores"],["restouration","restoration"],["restrcted","restricted"],["restrcuture","restructure"],["restriced","restricted"],["restroing","restoring"],["reStructuredTetx","reStructuredText"],["reStructuredTxet","reStructuredText"],["reStrucuredText","reStructuredText"],["restuarant","restaurant"],["restuarants","restaurants"],["reStucturedText","reStructuredText"],["restucturing","restructuring"],["reStucuredText","reStructuredText"],["resturant","restaurant"],["resturants","restaurants"],["resturaunt","restaurant"],["resturaunts","restaurants"],["resturcturation","restructuration"],["resturcture","restructure"],["resturctured","restructured"],["resturctures","restructures"],["resturcturing","restructuring"],["resturns","returns"],["resuable","reusable"],["resuables","reusables"],["resubstituion","resubstitution"],["resuction","reduction"],["resuilt","result"],["resuilted","resulted"],["resuilting","resulting"],["resuilts","results"],["resul","result"],["resuling","resulting"],["resullt","result"],["resulotion","resolution"],["resulsets","resultsets"],["resulst","results"],["resultion","resolution"],["resultions","resolutions"],["resultung","resulting"],["resulution","resolution"],["resumbmitting","resubmitting"],["resumitted","resubmitted"],["resumt","resume"],["resuorce","resource"],["resuorced","resourced"],["resuorces","resources"],["resuorcing","resourcing"],["resurce","resource"],["resurced","resourced"],["resurces","resources"],["resurcing","resourcing"],["resurecting","resurrecting"],["resursively","recursively"],["resuse","reuse"],["resuts","results"],["resycn","resync"],["retalitated","retaliated"],["retalitation","retaliation"],["retangles","rectangles"],["retanslate","retranslate"],["rether","rather"],["retieve","retrieve"],["retieved","retrieved"],["retieves","retrieves"],["retieving","retrieving"],["retinew","retinue"],["retireve","retrieve"],["retireved","retrieved"],["retirever","retriever"],["retirevers","retrievers"],["retireves","retrieves"],["retireving","retrieving"],["retirned","returned"],["retore","restore"],["retored","restored"],["retores","restores"],["retoric","rhetoric"],["retorical","rhetorical"],["retoring","restoring"],["retourned","returned"],["retpresenting","representing"],["retquirement","requirement"],["retquirements","requirements"],["retquireseek","requireseek"],["retquiresgpos","requiresgpos"],["retquiresgsub","requiresgsub"],["retquiressl","requiressl"],["retranser","retransfer"],["retransferd","retransferred"],["retransfered","retransferred"],["retransfering","retransferring"],["retransferrd","retransferred"],["retransmited","retransmitted"],["retransmition","retransmission"],["retreevable","retrievable"],["retreeval","retrieval"],["retreeve","retrieve"],["retreeved","retrieved"],["retreeves","retrieves"],["retreeving","retrieving"],["retreivable","retrievable"],["retreival","retrieval"],["retreive","retrieve"],["retreived","retrieved"],["retreives","retrieves"],["retreiving","retrieving"],["retrevable","retrievable"],["retreval","retrieval"],["retreve","retrieve"],["retreved","retrieved"],["retreves","retrieves"],["retreving","retrieving"],["retrict","restrict"],["retricted","restricted"],["retriebe","retrieve"],["retriece","retrieve"],["retrieces","retrieves"],["retriev","retrieve"],["retrieveds","retrieved"],["retrive","retrieve"],["retrived","retrieved"],["retrives","retrieves"],["retriving","retrieving"],["retrn","return"],["retrned","returned"],["retrns","returns"],["retrun","return"],["retruned","returned"],["retruns","returns"],["retrvieve","retrieve"],["retrvieved","retrieved"],["retrviever","retriever"],["retrvievers","retrievers"],["retrvieves","retrieves"],["retsart","restart"],["retsarts","restarts"],["retun","return"],["retunrned","returned"],["retunrs","returns"],["retuns","returns"],["retur","return"],["reture","return"],["retured","returned"],["returend","returned"],["retures","returns"],["returing","returning"],["returm","return"],["returmed","returned"],["returming","returning"],["returms","returns"],["returnd","returned"],["returnes","returns"],["returnig","returning"],["returnn","return"],["returnned","returned"],["returnning","returning"],["returs","returns"],["retursn","returns"],["retutning","returning"],["retyring","retrying"],["reudce","reduce"],["reudced","reduced"],["reudces","reduces"],["reudction","reduction"],["reudctions","reductions"],["reuest","request"],["reuests","requests"],["reulator","regulator"],["reundant","redundant"],["reundantly","redundantly"],["reuplad","reupload"],["reupladed","reuploaded"],["reuplader","reuploader"],["reupladers","reuploaders"],["reuplading","reuploading"],["reuplads","reuploads"],["reuplaod","reupload"],["reuplaoded","reuploaded"],["reuplaoder","reuploader"],["reuplaoders","reuploaders"],["reuplaoding","reuploading"],["reuplaods","reuploads"],["reuplod","reupload"],["reuploded","reuploaded"],["reuploder","reuploader"],["reuploders","reuploaders"],["reuploding","reuploading"],["reuplods","reuploads"],["reuqest","request"],["reuqested","requested"],["reuqesting","requesting"],["reuqests","requests"],["reurn","return"],["reursively","recursively"],["reuslt","result"],["reussing","reusing"],["reutnred","returned"],["reutrn","return"],["reutrns","returns"],["revaildating","revalidating"],["revaluated","reevaluated"],["reveiw","review"],["reveiwed","reviewed"],["reveiwer","reviewer"],["reveiwers","reviewers"],["reveiwing","reviewing"],["reveiws","reviews"],["revelent","relevant"],["revelution","revolution"],["revelutions","revolutions"],["reveokes","revokes"],["reverce","reverse"],["reverced","reversed"],["revereces","references"],["reverese","reverse"],["reveresed","reversed"],["reveret","revert"],["revereted","reverted"],["reversable","reversible"],["reverse-engeneer","reverse-engineer"],["reverse-engeneering","reverse-engineering"],["reverse-engieer","reverse-engineer"],["reverseed","reversed"],["reversees","reverses"],["reverve","reserve"],["reverved","reserved"],["revewrse","reverse"],["reviewl","review"],["reviewsectio","reviewsection"],["revisisions","revisions"],["revison","revision"],["revisons","revisions"],["revist","revisit"],["revisted","revisited"],["revisting","revisiting"],["revists","revisits"],["reviwed","reviewed"],["reviwer","reviewer"],["reviwers","reviewers"],["reviwing","reviewing"],["revoluion","revolution"],["revolutionar","revolutionary"],["revrese","reverse"],["revrieve","retrieve"],["revrieved","retrieved"],["revriever","retriever"],["revrievers","retrievers"],["revrieves","retrieves"],["revsion","revision"],["rewiev","review"],["rewieved","reviewed"],["rewiever","reviewer"],["rewieving","reviewing"],["rewievs","reviews"],["rewirtable","rewritable"],["rewirte","rewrite"],["rewirtten","rewritten"],["rewitable","rewritable"],["rewite","rewrite"],["rewitten","rewritten"],["reworkd","reworked"],["rewriet","rewrite"],["rewriite","rewrite"],["rewriten","rewritten"],["rewritting","rewriting"],["rewuired","required"],["rference","reference"],["rferences","references"],["rfeturned","returned"],["rgister","register"],["rhymme","rhyme"],["rhythem","rhythm"],["rhythim","rhythm"],["rhythimcally","rhythmically"],["rhytmic","rhythmic"],["ridiculus","ridiculous"],["righ","right"],["righht","right"],["righmost","rightmost"],["rightt","right"],["rigourous","rigorous"],["rigt","right"],["rigth","right"],["rigths","rights"],["rigurous","rigorous"],["riminder","reminder"],["riminders","reminders"],["riminding","reminding"],["rimitives","primitives"],["rininging","ringing"],["rispective","respective"],["ristrict","restrict"],["ristricted","restricted"],["ristriction","restriction"],["ritable","writable"],["rivised","revised"],["rizes","rises"],["rlation","relation"],["rlse","else"],["rmeote","remote"],["rmeove","remove"],["rmeoved","removed"],["rmeoves","removes"],["rmove","remove"],["rmoved","removed"],["rmoving","removing"],["roataion","rotation"],["roatation","rotation"],["roated","rotated"],["roation","rotation"],["roboustness","robustness"],["robustnes","robustness"],["Rockerfeller","Rockefeller"],["rococco","rococo"],["rocord","record"],["rocorded","recorded"],["rocorder","recorder"],["rocording","recording"],["rocordings","recordings"],["rocords","records"],["roduceer","producer"],["roigin","origin"],["roiginal","original"],["roiginally","originally"],["roiginals","originals"],["roiginating","originating"],["roigins","origins"],["romote","remote"],["romoted","remoted"],["romoteing","remoting"],["romotely","remotely"],["romotes","remotes"],["romoting","remoting"],["romotly","remotely"],["roomate","roommate"],["ropeat","repeat"],["rorated","rotated"],["rosponse","response"],["rosponsive","responsive"],["rotaion","rotation"],["rotaions","rotations"],["rotaiton","rotation"],["rotaitons","rotations"],["rotat","rotate"],["rotataion","rotation"],["rotataions","rotations"],["rotateable","rotatable"],["rouding","rounding"],["roughtly","roughly"],["rougly","roughly"],["rouine","routine"],["rouines","routines"],["round-robbin","round-robin"],["roundign","rounding"],["roung","round"],["rountine","routine"],["rountines","routines"],["routiens","routines"],["routins","routines"],["rovide","provide"],["rovided","provided"],["rovider","provider"],["rovides","provides"],["roviding","providing"],["rqeuested","requested"],["rqeuesting","requesting"],["rquested","requested"],["rquesting","requesting"],["rquire","require"],["rquired","required"],["rquirement","requirement"],["rquires","requires"],["rquiring","requiring"],["rranslation","translation"],["rranslations","translations"],["rrase","erase"],["rrror","error"],["rrrored","errored"],["rrroring","erroring"],["rrrors","errors"],["rubarb","rhubarb"],["rucuperate","recuperate"],["rudimentally","rudimentary"],["rudimentatry","rudimentary"],["rudimentory","rudimentary"],["rudimentry","rudimentary"],["rulle","rule"],["rumatic","rheumatic"],["runn","run"],["runnig","running"],["runnign","running"],["runnigng","running"],["runnin","running"],["runnint","running"],["runnners","runners"],["runnning","running"],["runns","runs"],["runnung","running"],["runting","runtime"],["rurrent","current"],["russina","Russian"],["Russion","Russian"],["rwite","write"],["rysnc","rsync"],["rythem","rhythm"],["rythim","rhythm"],["rythm","rhythm"],["rythmic","rhythmic"],["rythyms","rhythms"],["saame","same"],["sabatage","sabotage"],["sabatour","saboteur"],["sacalar","scalar"],["sacalars","scalars"],["sacarin","saccharin"],["sacle","scale"],["sacrafice","sacrifice"],["sacreligious","sacrilegious"],["Sacremento","Sacramento"],["sacrifical","sacrificial"],["sacrifying","sacrificing"],["sacrilegeous","sacrilegious"],["sacrin","saccharin"],["sade","sad"],["saem","same"],["safe-pooint","safe-point"],["safe-pooints","safe-points"],["safeing","saving"],["safepooint","safepoint"],["safepooints","safepoints"],["safequard","safeguard"],["saferi","Safari"],["safetly","safely"],["safly","safely"],["saftey","safety"],["safty","safety"],["saggital","sagittal"],["sagital","sagittal"],["Sagitarius","Sagittarius"],["sais","says"],["saleries","salaries"],["salery","salary"],["salveof","slaveof"],["samle","sample"],["samled","sampled"],["samll","small"],["samller","smaller"],["sammon","salmon"],["samori","samurai"],["sampel","sample"],["sampeld","sampled"],["sampels","samples"],["samwich","sandwich"],["samwiches","sandwiches"],["sanaty","sanity"],["sanctionning","sanctioning"],["sandobx","sandbox"],["sandwhich","sandwich"],["Sanhedrim","Sanhedrin"],["sanitizisation","sanitization"],["sanizer","sanitizer"],["sanpshot","snapshot"],["sanpsnots","snapshots"],["sansitizer","sanitizer"],["sansitizers","sanitizers"],["santioned","sanctioned"],["santize","sanitize"],["santized","sanitized"],["santizes","sanitizes"],["santizing","sanitizing"],["sanwich","sandwich"],["sanwiches","sandwiches"],["sanytise","sanitise"],["sanytize","sanitize"],["saphire","sapphire"],["saphires","sapphires"],["sargant","sergeant"],["sargeant","sergeant"],["sarted","started"],["sarter","starter"],["sarters","starters"],["sastisfies","satisfies"],["satandard","standard"],["satandards","standards"],["satelite","satellite"],["satelites","satellites"],["satelitte","satellite"],["satellittes","satellites"],["satement","statement"],["satements","statements"],["saterday","Saturday"],["saterdays","Saturdays"],["satified","satisfied"],["satifies","satisfies"],["satifsy","satisfy"],["satify","satisfy"],["satifying","satisfying"],["satisfactority","satisfactorily"],["satisfiabilty","satisfiability"],["satisfing","satisfying"],["satisfyied","satisfied"],["satisifed","satisfied"],["satisified","satisfied"],["satisifies","satisfies"],["satisify","satisfy"],["satisifying","satisfying"],["satistying","satisfying"],["satric","satiric"],["satrical","satirical"],["satrically","satirically"],["sattelite","satellite"],["sattelites","satellites"],["sattellite","satellite"],["sattellites","satellites"],["satuaday","Saturday"],["satuadays","Saturdays"],["saturdey","Saturday"],["satursday","Saturday"],["satus","status"],["saught","sought"],["sav","save"],["savees","saves"],["saveing","saving"],["savely","safely"],["savere","severe"],["savety","safety"],["savgroup","savegroup"],["savy","savvy"],["saxaphone","saxophone"],["sbsampling","subsampling"],["scahr","schar"],["scalarr","scalar"],["scaleability","scalability"],["scaleable","scalable"],["scaleing","scaling"],["scalled","scaled"],["scandanavia","Scandinavia"],["scaned","scanned"],["scaning","scanning"],["scannning","scanning"],["scaricity","scarcity"],["scavange","scavenge"],["scavanged","scavenged"],["scavanger","scavenger"],["scavangers","scavengers"],["scavanges","scavenges"],["sccope","scope"],["sceanrio","scenario"],["sceanrios","scenarios"],["scecified","specified"],["scenarion","scenario"],["scenarions","scenarios"],["scenegraaph","scenegraph"],["scenegraaphs","scenegraphs"],["sceond","second"],["sceonds","seconds"],["scetch","sketch"],["scetched","sketched"],["scetches","sketches"],["scetching","sketching"],["schdule","schedule"],["schduled","scheduled"],["schduleing","scheduling"],["schduler","scheduler"],["schdules","schedules"],["schduling","scheduling"],["schedual","schedule"],["scheduald","scheduled"],["schedualed","scheduled"],["schedualing","scheduling"],["schedulier","scheduler"],["schedulling","scheduling"],["scheduluing","scheduling"],["schem","scheme"],["schemd","schemed"],["schems","schemes"],["schme","scheme"],["schmea","schema"],["schmeas","schemas"],["schmes","schemes"],["scholarhip","scholarship"],["scholarhips","scholarships"],["scholdn't","shouldn't"],["schould","should"],["scientfic","scientific"],["scientfically","scientifically"],["scientficaly","scientifically"],["scientficly","scientifically"],["scientifc","scientific"],["scientifcally","scientifically"],["scientifcaly","scientifically"],["scientifcly","scientifically"],["scientis","scientist"],["scientiss","scientist"],["scince","science"],["scinece","science"],["scintiallation","scintillation"],["scintillatqt","scintillaqt"],["scipted","scripted"],["scipting","scripting"],["sciript","script"],["sciripts","scripts"],["scirpt","script"],["scirpts","scripts"],["scketch","sketch"],["scketched","sketched"],["scketches","sketches"],["scketching","sketching"],["sclar","scalar"],["scneario","scenario"],["scnearios","scenarios"],["scoket","socket"],["scoll","scroll"],["scolling","scrolling"],["scondary","secondary"],["scopeing","scoping"],["scorebord","scoreboard"],["scources","sources"],["scrach","scratch"],["scrached","scratched"],["scraches","scratches"],["scraching","scratching"],["scrachs","scratches"],["scrao","scrap"],["screeb","screen"],["screebs","screens"],["screenchot","screenshot"],["screenchots","screenshots"],["screenwrighter","screenwriter"],["screnn","screen"],["scriopted","scripted"],["scriopting","scripting"],["scriopts","scripts"],["scriopttype","scripttype"],["scriping","scripting"],["scripst","scripts"],["scriptype","scripttype"],["scritp","script"],["scritped","scripted"],["scritping","scripting"],["scritps","scripts"],["scritpt","script"],["scritpts","scripts"],["scroipt","script"],["scroipted","scripted"],["scroipting","scripting"],["scroipts","scripts"],["scroipttype","scripttype"],["scrollablbe","scrollable"],["scrollin","scrolling"],["scroolbar","scrollbar"],["scrpt","script"],["scrpted","scripted"],["scrpting","scripting"],["scrpts","scripts"],["scrren","screen"],["scrutinity","scrutiny"],["scubscribe","subscribe"],["scubscribed","subscribed"],["scubscriber","subscriber"],["scubscribes","subscribes"],["scuccessully","successfully"],["scupt","sculpt"],["scupted","sculpted"],["scupting","sculpting"],["scupture","sculpture"],["scuptures","sculptures"],["seach","search"],["seached","searched"],["seaches","searches"],["seaching","searching"],["seachkey","searchkey"],["seacrchable","searchable"],["seamlessley","seamlessly"],["seamlessy","seamlessly"],["searcahble","searchable"],["searcheable","searchable"],["searchin","searching"],["searchs","searches"],["seatch","search"],["seccond","second"],["secconds","seconds"],["secction","section"],["secene","scene"],["secific","specific"],["secion","section"],["secions","sections"],["secirity","security"],["seciton","section"],["secitons","sections"],["secne","scene"],["secod","second"],["secods","seconds"],["seconadry","secondary"],["seconcary","secondary"],["secondaray","secondary"],["seconday","secondary"],["seconf","second"],["seconfs","seconds"],["seconly","secondly"],["secont","second"],["secontary","secondary"],["secontly","secondly"],["seconts","seconds"],["secord","second"],["secords","seconds"],["secotr","sector"],["secound","second"],["secoundary","secondary"],["secoundly","secondly"],["secounds","seconds"],["secquence","sequence"],["secratary","secretary"],["secretery","secretary"],["secrion","section"],["secruity","security"],["sectin","section"],["sectins","sections"],["sectionning","sectioning"],["secton","section"],["sectoned","sectioned"],["sectoning","sectioning"],["sectons","sections"],["sectopm","section"],["sectopmed","sectioned"],["sectopming","sectioning"],["sectopms","sections"],["sectopn","section"],["sectopned","sectioned"],["sectopning","sectioning"],["sectopns","sections"],["secue","secure"],["secuely","securely"],["secuence","sequence"],["secuenced","sequenced"],["secuences","sequences"],["secuencial","sequential"],["secuencing","sequencing"],["secuirty","security"],["secuity","security"],["secund","second"],["secunds","seconds"],["securiy","security"],["securiyt","security"],["securly","securely"],["securre","secure"],["securrely","securely"],["securrly","securely"],["securtity","security"],["securtiy","security"],["securty","security"],["securuity","security"],["sedereal","sidereal"],["seeem","seem"],["seeen","seen"],["seelect","select"],["seelected","selected"],["seemes","seems"],["seemless","seamless"],["seemlessly","seamlessly"],["seesion","session"],["seesions","sessions"],["seetings","settings"],["seeverities","severities"],["seeverity","severity"],["segault","segfault"],["segaults","segfaults"],["segement","segment"],["segementation","segmentation"],["segemented","segmented"],["segements","segments"],["segemnts","segments"],["segfualt","segfault"],["segfualts","segfaults"],["segmantation","segmentation"],["segmend","segment"],["segmendation","segmentation"],["segmended","segmented"],["segmends","segments"],["segmenet","segment"],["segmenetd","segmented"],["segmeneted","segmented"],["segmenets","segments"],["segmenst","segments"],["segmentaion","segmentation"],["segmente","segment"],["segmentes","segments"],["segmetn","segment"],["segmetned","segmented"],["segmetns","segments"],["segument","segment"],["seguoys","segues"],["seh","she"],["seige","siege"],["seing","seeing"],["seinor","senior"],["seires","series"],["sekect","select"],["sekected","selected"],["sekects","selects"],["selcetion","selection"],["selct","select"],["selctable","selectable"],["selctables","selectable"],["selcted","selected"],["selcting","selecting"],["selction","selection"],["selctions","selections"],["seldomly","seldom"],["selecction","selection"],["selecctions","selections"],["seleced","selected"],["selecetd","selected"],["seleceted","selected"],["selecgt","select"],["selecgted","selected"],["selecgting","selecting"],["selecing","selecting"],["selecrtion","selection"],["selectd","selected"],["selectes","selects"],["selectoin","selection"],["selecton","selection"],["selectons","selections"],["seledted","selected"],["selektions","selections"],["selektor","selector"],["selet","select"],["selets","selects"],["self-comparisson","self-comparison"],["self-contianed","self-contained"],["self-referencial","self-referential"],["self-refering","self-referring"],["selfs","self"],["sellect","select"],["sellected","selected"],["selv","self"],["semaintics","semantics"],["semaphone","semaphore"],["semaphones","semaphores"],["semaphor","semaphore"],["semaphors","semaphores"],["semapthore","semaphore"],["semapthores","semaphores"],["sematic","semantic"],["sematical","semantical"],["sematically","semantically"],["sematics","semantics"],["sematnics","semantics"],["semding","sending"],["sementation","segmentation"],["sementic","semantic"],["sementically","semantically"],["sementics","semantics"],["semgent","segment"],["semgentation","segmentation"],["semicolor","semicolon"],["semicolumn","semicolon"],["semicondutor","semiconductor"],["sempahore","semaphore"],["sempahores","semaphores"],["sempaphore","semaphore"],["sempaphores","semaphores"],["semphore","semaphore"],["semphores","semaphores"],["sempphore","semaphore"],["senaphore","semaphore"],["senaphores","semaphores"],["senario","scenario"],["senarios","scenarios"],["sencond","second"],["sencondary","secondary"],["senconds","seconds"],["sendign","sending"],["sendinging","sending"],["sendinng","sending"],["senfile","sendfile"],["senintels","sentinels"],["senitnel","sentinel"],["senitnels","sentinels"],["senquence","sequence"],["sensative","sensitive"],["sensetive","sensitive"],["sensisble","sensible"],["sensistive","sensitive"],["sensititive","sensitive"],["sensititivies","sensitivities"],["sensititivity","sensitivity"],["sensititivy","sensitivity"],["sensitiv","sensitive"],["sensitiveties","sensitivities"],["sensitivety","sensitivity"],["sensitivites","sensitivities"],["sensitivties","sensitivities"],["sensitivty","sensitivity"],["sensitve","sensitive"],["senstive","sensitive"],["sensure","censure"],["sentance","sentence"],["sentances","sentences"],["senteces","sentences"],["sentense","sentence"],["sentienl","sentinel"],["sentinal","sentinel"],["sentinals","sentinels"],["sention","section"],["sentions","sections"],["sentive","sensitive"],["sentivite","sensitive"],["sepaate","separate"],["separartor","separator"],["separat","separate"],["separatelly","separately"],["separater","separator"],["separatley","separately"],["separatly","separately"],["separato","separator"],["separatos","separators"],["separatring","separating"],["separed","separated"],["separete","separate"],["separeted","separated"],["separetedly","separately"],["separetely","separately"],["separeter","separator"],["separetes","separates"],["separeting","separating"],["separetly","separately"],["separetor","separator"],["separtates","separates"],["separte","separate"],["separted","separated"],["separtes","separates"],["separting","separating"],["sepatae","separate"],["sepatate","separate"],["sepcial","special"],["sepcific","specific"],["sepcifically","specifically"],["sepcification","specification"],["sepcifications","specifications"],["sepcified","specified"],["sepcifier","specifier"],["sepcifies","specifies"],["sepcify","specify"],["sepcifying","specifying"],["sepearable","separable"],["sepearate","separate"],["sepearated","separated"],["sepearately","separately"],["sepearates","separates"],["sepearation","separation"],["sepearator","separator"],["sepearators","separators"],["sepearet","separate"],["sepearetly","separately"],["sepearte","separate"],["sepearted","separated"],["sepeartely","separately"],["sepeartes","separates"],["sepeartor","separator"],["sepeartors","separators"],["sepeate","separate"],["sepeated","separated"],["sepeates","separates"],["sepeator","separator"],["sepeators","separators"],["sepecial","special"],["sepecifed","specified"],["sepecific","specific"],["sepecification","specification"],["sepecified","specified"],["sepecifier","specifier"],["sepecifiers","specifiers"],["sepecifies","specifies"],["sepecify","specify"],["sepectral","spectral"],["sepeicfy","specify"],["sependent","dependent"],["sepending","depending"],["seperable","separable"],["seperad","separate"],["seperadly","separately"],["seperaly","separately"],["seperaor","separator"],["seperaors","separators"],["seperare","separate"],["seperared","separated"],["seperares","separates"],["seperat","separate"],["seperataed","separated"],["seperatally","separately"],["seperataly","separately"],["seperatated","separated"],["seperatd","separated"],["seperate","separate"],["seperated","separated"],["seperatedly","separately"],["seperatedy","separated"],["seperateely","separately"],["seperateing","separating"],["seperatelly","separately"],["seperately","separately"],["seperater","separator"],["seperaters","separators"],["seperates","separates"],["seperating","separating"],["seperation","separation"],["seperations","separations"],["seperatism","separatism"],["seperatist","separatist"],["seperatley","separately"],["seperatly","separately"],["seperato","separator"],["seperator","separator"],["seperators","separators"],["seperatos","separators"],["sepereate","separate"],["sepereated","separated"],["sepereates","separates"],["sepererate","separate"],["sepererated","separated"],["sepererates","separates"],["seperete","separate"],["sepereted","separated"],["seperetes","separates"],["seperratly","separately"],["sepertator","separator"],["sepertators","separators"],["sepertor","separator"],["sepertors","separators"],["sepetaror","separator"],["sepetarors","separators"],["sepetate","separate"],["sepetated","separated"],["sepetately","separately"],["sepetates","separates"],["sepina","subpoena"],["seporate","separate"],["sepparation","separation"],["sepparations","separations"],["sepperate","separate"],["seprarate","separate"],["seprate","separate"],["seprated","separated"],["seprator","separator"],["seprators","separators"],["Septemer","September"],["seqence","sequence"],["seqenced","sequenced"],["seqences","sequences"],["seqencing","sequencing"],["seqense","sequence"],["seqensed","sequenced"],["seqenses","sequences"],["seqensing","sequencing"],["seqenstial","sequential"],["seqential","sequential"],["seqeuence","sequence"],["seqeuencer","sequencer"],["seqeuental","sequential"],["seqeunce","sequence"],["seqeuncer","sequencer"],["seqeuntials","sequentials"],["sequcne","sequence"],["sequece","sequence"],["sequecence","sequence"],["sequecences","sequences"],["sequeces","sequences"],["sequeence","sequence"],["sequelce","sequence"],["sequemce","sequence"],["sequemces","sequences"],["sequencial","sequential"],["sequencially","sequentially"],["sequencies","sequences"],["sequense","sequence"],["sequensed","sequenced"],["sequenses","sequences"],["sequensing","sequencing"],["sequenstial","sequential"],["sequentialy","sequentially"],["sequenzes","sequences"],["sequetial","sequential"],["sequnce","sequence"],["sequnced","sequenced"],["sequncer","sequencer"],["sequncers","sequencers"],["sequnces","sequences"],["sequnece","sequence"],["sequneces","sequences"],["ser","set"],["serach","search"],["serached","searched"],["seracher","searcher"],["seraches","searches"],["seraching","searching"],["serachs","searches"],["serailisation","serialisation"],["serailise","serialise"],["serailised","serialised"],["serailization","serialization"],["serailize","serialize"],["serailized","serialized"],["serailse","serialise"],["serailsed","serialised"],["serailze","serialize"],["serailzed","serialized"],["serch","search"],["serched","searched"],["serches","searches"],["serching","searching"],["sercive","service"],["sercived","serviced"],["sercives","services"],["serciving","servicing"],["sereverless","serverless"],["serevrless","serverless"],["sergent","sergeant"],["serialialisation","serialisation"],["serialialise","serialise"],["serialialised","serialised"],["serialialises","serialises"],["serialialising","serialising"],["serialialization","serialization"],["serialialize","serialize"],["serialialized","serialized"],["serialializes","serializes"],["serialializing","serializing"],["serialiasation","serialisation"],["serialiazation","serialization"],["serialsiation","serialisation"],["serialsie","serialise"],["serialsied","serialised"],["serialsies","serialises"],["serialsing","serialising"],["serialziation","serialization"],["serialzie","serialize"],["serialzied","serialized"],["serialzies","serializes"],["serialzing","serializing"],["serice","service"],["serie","series"],["seriel","serial"],["serieses","series"],["serios","serious"],["seriouly","seriously"],["seriuos","serious"],["serivce","service"],["serivces","services"],["sersies","series"],["sertificate","certificate"],["sertificated","certificated"],["sertificates","certificates"],["sertification","certification"],["servece","service"],["serveced","serviced"],["serveces","services"],["servecing","servicing"],["serveice","service"],["serveiced","serviced"],["serveices","services"],["serveicing","servicing"],["serveless","serverless"],["serveral","several"],["serverite","severity"],["serverites","severities"],["serverities","severities"],["serverity","severity"],["serverles","serverless"],["serverlesss","serverless"],["serverlsss","serverless"],["servicies","services"],["servie","service"],["servies","services"],["servive","service"],["servoce","service"],["servoced","serviced"],["servoces","services"],["servocing","servicing"],["sesion","session"],["sesions","sessions"],["sesitive","sensitive"],["sesitively","sensitively"],["sesitiveness","sensitiveness"],["sesitivity","sensitivity"],["sessio","session"],["sesssion","session"],["sesssions","sessions"],["sestatusbar","setstatusbar"],["sestatusmsg","setstatusmsg"],["setevn","setenv"],["setgit","setgid"],["seting","setting"],["setings","settings"],["setion","section"],["setions","sections"],["setitng","setting"],["setitngs","settings"],["setquential","sequential"],["setted","set"],["settelement","settlement"],["settign","setting"],["settigns","settings"],["settigs","settings"],["settiing","setting"],["settiings","settings"],["settinga","settings"],["settingss","settings"],["settins","settings"],["settlment","settlement"],["settng","setting"],["settter","setter"],["settters","setters"],["settting","setting"],["setttings","settings"],["settup","setup"],["setyp","setup"],["setyps","setups"],["seuence","sequence"],["seuences","sequences"],["sevaral","several"],["severat","several"],["severeal","several"],["severirirty","severity"],["severirities","severities"],["severite","severity"],["severites","severities"],["severiy","severity"],["severl","several"],["severley","severely"],["severly","severely"],["sevice","service"],["sevirity","severity"],["sevral","several"],["sevrally","severally"],["sevrity","severity"],["sewdonim","pseudonym"],["sewdonims","pseudonyms"],["sewrvice","service"],["sfety","safety"],["sgadow","shadow"],["sh1sum","sha1sum"],["shadasloo","shadaloo"],["shaddow","shadow"],["shadhow","shadow"],["shadoloo","shadaloo"],["shal","shall"],["shandeleer","chandelier"],["shandeleers","chandeliers"],["shandow","shadow"],["shaneal","chenille"],["shanghi","Shanghai"],["shapshot","snapshot"],["shapshots","snapshots"],["shapsnot","snapshot"],["shapsnots","snapshots"],["sharable","shareable"],["shareed","shared"],["shareing","sharing"],["sharloton","charlatan"],["sharraid","charade"],["sharraids","charades"],["shashes","slashes"],["shatow","ch\xE2teau"],["shbang","shebang"],["shedule","schedule"],["sheduled","scheduled"],["shedules","schedules"],["sheduling","scheduling"],["sheepherd","shepherd"],["sheepherds","shepherds"],["sheeps","sheep"],["sheild","shield"],["sheilded","shielded"],["sheilding","shielding"],["sheilds","shields"],["shepe","shape"],["shepered","shepherd"],["sheperedly","shepherdly"],["shepereds","shepherds"],["shepes","shapes"],["sheping","shaping"],["shepre","sphere"],["shepres","spheres"],["sherif","sheriff"],["shfit","shift"],["shfited","shifted"],["shfiting","shifting"],["shfits","shifts"],["shfted","shifted"],["shicane","chicane"],["shif","shift"],["shif-tab","shift-tab"],["shineing","shining"],["shiped","shipped"],["shiping","shipping"],["shoftware","software"],["shoild","should"],["shoing","showing"],["sholder","shoulder"],["sholdn't","shouldn't"],["sholuld","should"],["sholuldn't","shouldn't"],["shoould","should"],["shopkeeepers","shopkeepers"],["shorcut","shortcut"],["shorcuts","shortcuts"],["shorly","shortly"],["short-cicruit","short-circuit"],["short-cicruits","short-circuits"],["shortcat","shortcut"],["shortcats","shortcuts"],["shortcomming","shortcoming"],["shortcommings","shortcomings"],["shortcutt","shortcut"],["shortern","shorten"],["shorthly","shortly"],["shortkut","shortcut"],["shortkuts","shortcuts"],["shortwhile","short while"],["shotcut","shortcut"],["shotcuts","shortcuts"],["shotdown","shutdown"],["shoucl","should"],["shoud","should"],["shoudl","should"],["shoudld","should"],["shoudle","should"],["shoudln't","shouldn't"],["shoudlnt","shouldn't"],["shoudn't","shouldn't"],["shoudn","shouldn"],["should'nt","shouldn't"],["should't","shouldn't"],["shouldn;t","shouldn't"],["shouldnt'","shouldn't"],["shouldnt","shouldn't"],["shouldnt;","shouldn't"],["shoule","should"],["shoulld","should"],["shouln't","shouldn't"],["shouls","should"],["shoult","should"],["shouod","should"],["shouw","show"],["shouws","shows"],["showvinism","chauvinism"],["shpae","shape"],["shpaes","shapes"],["shpapes","shapes"],["shpere","sphere"],["shperes","spheres"],["shpped","shipped"],["shreak","shriek"],["shreshold","threshold"],["shriks","shrinks"],["shttp","https"],["shudown","shutdown"],["shufle","shuffle"],["shuld","should"],["shure","sure"],["shurely","surely"],["shutdownm","shutdown"],["shuting","shutting"],["shutodwn","shutdown"],["shwo","show"],["shwon","shown"],["shystem","system"],["shystems","systems"],["sibiling","sibling"],["sibilings","siblings"],["sibtitle","subtitle"],["sibtitles","subtitles"],["sicinct","succinct"],["sicinctly","succinctly"],["sicne","since"],["sidde","side"],["sideral","sidereal"],["siduction","seduction"],["siezure","seizure"],["siezures","seizures"],["siffix","suffix"],["siffixed","suffixed"],["siffixes","suffixes"],["siffixing","suffixing"],["sigaled","signaled"],["siganture","signature"],["sigantures","signatures"],["sigen","sign"],["sigificance","significance"],["siginificant","significant"],["siginificantly","significantly"],["siginify","signify"],["sigit","digit"],["sigits","digits"],["sigleton","singleton"],["signales","signals"],["signall","signal"],["signatue","signature"],["signatur","signature"],["signes","signs"],["signficant","significant"],["signficantly","significantly"],["signficiant","significant"],["signfies","signifies"],["signguature","signature"],["signifanct","significant"],["signifant","significant"],["signifantly","significantly"],["signifcant","significant"],["signifcantly","significantly"],["signifficant","significant"],["significanly","significantly"],["significat","significant"],["significatly","significantly"],["significently","significantly"],["signifigant","significant"],["signifigantly","significantly"],["signitories","signatories"],["signitory","signatory"],["signol","signal"],["signto","sign to"],["signul","signal"],["signular","singular"],["signularity","singularity"],["silentely","silently"],["silenty","silently"],["silouhette","silhouette"],["silouhetted","silhouetted"],["silouhettes","silhouettes"],["silouhetting","silhouetting"],["simeple","simple"],["simetrie","symmetry"],["simetries","symmetries"],["simgle","single"],["simialr","similar"],["simialrity","similarity"],["simialrly","similarly"],["simiar","similar"],["similarily","similarly"],["similary","similarly"],["similat","similar"],["similia","similar"],["similiar","similar"],["similiarity","similarity"],["similiarly","similarly"],["similiarty","similarity"],["similiary","similarity"],["simillar","similar"],["similtaneous","simultaneous"],["simlar","similar"],["simlarlity","similarity"],["simlarly","similarly"],["simliar","similar"],["simliarly","similarly"],["simlicity","simplicity"],["simlified","simplified"],["simmetric","symmetric"],["simmetrical","symmetrical"],["simmetry","symmetry"],["simmilar","similar"],["simpification","simplification"],["simpifications","simplifications"],["simpified","simplified"],["simplei","simply"],["simpley","simply"],["simplfy","simplify"],["simplicitly","simplicity"],["simplicty","simplicity"],["simplier","simpler"],["simpliest","simplest"],["simplifed","simplified"],["simplificaiton","simplification"],["simplificaitons","simplifications"],["simplifiy","simplify"],["simplifys","simplifies"],["simpliifcation","simplification"],["simpliifcations","simplifications"],["simplist","simplest"],["simpy","simply"],["simualte","simulate"],["simualted","simulated"],["simualtes","simulates"],["simualting","simulating"],["simualtion","simulation"],["simualtions","simulations"],["simualtor","simulator"],["simualtors","simulators"],["simulaiton","simulation"],["simulaitons","simulations"],["simulantaneous","simultaneous"],["simulantaneously","simultaneously"],["simulataeous","simultaneous"],["simulataeously","simultaneously"],["simulataneity","simultaneity"],["simulataneous","simultaneous"],["simulataneously","simultaneously"],["simulatanious","simultaneous"],["simulataniously","simultaneously"],["simulatanous","simultaneous"],["simulatanously","simultaneously"],["simulatation","simulation"],["simulatenous","simultaneous"],["simulatenously","simultaneously"],["simultanaeous","simultaneous"],["simultaneos","simultaneous"],["simultaneosly","simultaneously"],["simultanious","simultaneous"],["simultaniously","simultaneously"],["simultanous","simultaneous"],["simultanously","simultaneously"],["simutaneously","simultaneously"],["sinature","signature"],["sincerley","sincerely"],["sincerly","sincerely"],["singaled","signaled"],["singals","signals"],["singature","signature"],["singatures","signatures"],["singelar","singular"],["singelarity","singularity"],["singelarly","singularly"],["singelton","singleton"],["singl","single"],["singlar","singular"],["single-threded","single-threaded"],["singlton","singleton"],["singltons","singletons"],["singluar","singular"],["singlular","singular"],["singlularly","singularly"],["singnal","signal"],["singnalled","signalled"],["singnals","signals"],["singolar","singular"],["singoolar","singular"],["singoolarity","singularity"],["singoolarly","singularly"],["singsog","singsong"],["singuarity","singularity"],["singuarl","singular"],["singulat","singular"],["singulaties","singularities"],["sinlge","single"],["sinlges","singles"],["sinply","simply"],["sintac","syntax"],["sintacks","syntax"],["sintacs","syntax"],["sintact","syntax"],["sintacts","syntax"],["sintak","syntax"],["sintaks","syntax"],["sintakt","syntax"],["sintakts","syntax"],["sintax","syntax"],["Sionist","Zionist"],["Sionists","Zionists"],["siply","simply"],["sircle","circle"],["sircles","circles"],["sircular","circular"],["sirect","direct"],["sirected","directed"],["sirecting","directing"],["sirection","direction"],["sirectional","directional"],["sirectionalities","directionalities"],["sirectionality","directionality"],["sirectionals","directionals"],["sirectionless","directionless"],["sirections","directions"],["sirective","directive"],["sirectives","directives"],["sirectly","directly"],["sirectness","directness"],["sirector","director"],["sirectories","directories"],["sirectors","directors"],["sirectory","directory"],["sirects","directs"],["sisnce","since"],["sistem","system"],["sistematically","systematically"],["sistematics","systematics"],["sistematies","systematies"],["sistematising","systematising"],["sistematizing","systematizing"],["sistematy","systematy"],["sistemed","systemed"],["sistemic","systemic"],["sistemically","systemically"],["sistemics","systemics"],["sistemist","systemist"],["sistemists","systemists"],["sistemize","systemize"],["sistemized","systemized"],["sistemizes","systemizes"],["sistemizing","systemizing"],["sistems","systems"],["sitation","situation"],["sitations","situations"],["sitaution","situation"],["sitautions","situations"],["sitck","stick"],["siteu","site"],["sitill","still"],["sitirring","stirring"],["sitirs","stirs"],["sitl","still"],["sitll","still"],["sitmuli","stimuli"],["situationnal","situational"],["situatuion","situation"],["situatuions","situations"],["situatution","situation"],["situatutions","situations"],["situbbornness","stubbornness"],["situdio","studio"],["situdios","studios"],["situration","situation"],["siturations","situations"],["situtaion","situation"],["situtaions","situations"],["situtation","situation"],["situtations","situations"],["siutable","suitable"],["siute","suite"],["sivible","visible"],["siwtch","switch"],["siwtched","switched"],["siwtching","switching"],["sizre","size"],["Skagerak","Skagerrak"],["skalar","scalar"],["skateing","skating"],["skecth","sketch"],["skecthes","sketches"],["skeep","skip"],["skelton","skeleton"],["skept","skipped"],["sketchs","sketches"],["skipd","skipped"],["skipe","skip"],["skiping","skipping"],["skippd","skipped"],["skippped","skipped"],["skippps","skips"],["slach","slash"],["slaches","slashes"],["slase","slash"],["slases","slashes"],["slashs","slashes"],["slaugterhouses","slaughterhouses"],["slect","select"],["slected","selected"],["slecting","selecting"],["slection","selection"],["sleect","select"],["sleeped","slept"],["sleepp","sleep"],["slicable","sliceable"],["slient","silent"],["sliently","silently"],["slighlty","slightly"],["slighly","slightly"],["slightl","slightly"],["slighty","slightly"],["slignt","slight"],["sligntly","slightly"],["sligth","slight"],["sligthly","slightly"],["sligtly","slightly"],["sliped","slipped"],["sliseshow","slideshow"],["slowy","slowly"],["sluggify","slugify"],["smae","same"],["smal","small"],["smaler","smaller"],["smallar","smaller"],["smalles","smallest"],["smaple","sample"],["smaples","samples"],["smealting","smelting"],["smething","something"],["smller","smaller"],["smoe","some"],["smoot","smooth"],["smooter","smoother"],["smoothign","smoothing"],["smooting","smoothing"],["smouth","smooth"],["smouthness","smoothness"],["smove","move"],["snaped","snapped"],["snaphot","snapshot"],["snaphsot","snapshot"],["snaping","snapping"],["snappng","snapping"],["snapsnot","snapshot"],["snapsnots","snapshots"],["sneeks","sneaks"],["snese","sneeze"],["snipet","snippet"],["snipets","snippets"],["snpashot","snapshot"],["snpashots","snapshots"],["snyc","sync"],["snytax","syntax"],["Soalris","Solaris"],["socail","social"],["socalism","socialism"],["socekts","sockets"],["socities","societies"],["soecialize","specialized"],["soem","some"],["soemthing","something"],["soemwhere","somewhere"],["sofisticated","sophisticated"],["softend","softened"],["softwares","software"],["softwre","software"],["sofware","software"],["sofwtare","software"],["sohw","show"],["soilders","soldiers"],["soiurce","source"],["soket","socket"],["sokets","sockets"],["solarmutx","solarmutex"],["solatary","solitary"],["solate","isolate"],["solated","isolated"],["solates","isolates"],["solating","isolating"],["soley","solely"],["solfed","solved"],["solfes","solves"],["solfing","solving"],["solfs","solves"],["soliders","soldiers"],["solification","solidification"],["soliliquy","soliloquy"],["soltion","solution"],["soltuion","solution"],["soltuions","solutions"],["soluable","soluble"],["solum","solemn"],["soluton","solution"],["solutons","solutions"],["solveable","solvable"],["solveing","solving"],["solwed","solved"],["som","some"],["someboby","somebody"],["somehing","something"],["somehting","something"],["somehwat","somewhat"],["somehwere","somewhere"],["somehwo","somehow"],["somelse","someone else"],["somemore","some more"],["somene","someone"],["somenone","someone"],["someon","someone"],["somethig","something"],["somethign","something"],["somethimes","sometimes"],["somethimg","something"],["somethiong","something"],["sometiems","sometimes"],["sometihing","something"],["sometihng","something"],["sometims","sometimes"],["sometines","sometimes"],["someting","something"],["sometinhg","something"],["sometring","something"],["sometrings","somethings"],["somewere","somewhere"],["somewher","somewhere"],["somewho","somehow"],["somme","some"],["somthign","something"],["somthing","something"],["somthingelse","somethingelse"],["somtimes","sometimes"],["somwhat","somewhat"],["somwhere","somewhere"],["somwho","somehow"],["somwhow","somehow"],["sonething","something"],["songlar","singular"],["sooaside","suicide"],["soodonim","pseudonym"],["soource","source"],["sophicated","sophisticated"],["sophisicated","sophisticated"],["sophisitcated","sophisticated"],["sophisticted","sophisticated"],["sophmore","sophomore"],["sorceror","sorcerer"],["sorkflow","workflow"],["sorrounding","surrounding"],["sortig","sorting"],["sortings","sorting"],["sortlst","sortlist"],["sortner","sorter"],["sortnr","sorter"],["soscket","socket"],["sotfware","software"],["souce","source"],["souces","sources"],["soucre","source"],["soucres","sources"],["soudn","sound"],["soudns","sounds"],["sould'nt","shouldn't"],["souldn't","shouldn't"],["soundard","soundcard"],["sountrack","soundtrack"],["sourc","source"],["sourcedrectory","sourcedirectory"],["sourcee","source"],["sourcees","sources"],["sourct","source"],["sourrounding","surrounding"],["sourth","south"],["sourthern","southern"],["southbrige","southbridge"],["souvenier","souvenir"],["souveniers","souvenirs"],["soveits","soviets"],["sover","solver"],["sovereignity","sovereignty"],["soverign","sovereign"],["soverignity","sovereignty"],["soverignty","sovereignty"],["sovle","solve"],["sovled","solved"],["sovren","sovereign"],["spacific","specific"],["spacification","specification"],["spacifications","specifications"],["spacifics","specifics"],["spacified","specified"],["spacifies","specifies"],["spaece","space"],["spaeced","spaced"],["spaeces","spaces"],["spaecing","spacing"],["spageti","spaghetti"],["spagetti","spaghetti"],["spagheti","spaghetti"],["spagnum","sphagnum"],["spainish","Spanish"],["spaning","spanning"],["sparate","separate"],["sparately","separately"],["spash","splash"],["spashed","splashed"],["spashes","splashes"],["spaw","spawn"],["spawed","spawned"],["spawing","spawning"],["spawining","spawning"],["spaws","spawns"],["spcae","space"],["spcaed","spaced"],["spcaes","spaces"],["spcaing","spacing"],["spcecified","specified"],["spcial","special"],["spcific","specific"],["spcification","specification"],["spcifications","specifications"],["spcified","specified"],["spcifies","specifies"],["spcify","specify"],["speaced","spaced"],["speach","speech"],["speacing","spacing"],["spearator","separator"],["spearators","separators"],["spec-complient","spec-compliant"],["specail","special"],["specefic","specific"],["specefically","specifically"],["speceficly","specifically"],["specefied","specified"],["specfic","specific"],["specfically","specifically"],["specfication","specification"],["specfications","specifications"],["specficication","specification"],["specficications","specifications"],["specficied","specified"],["specficies","specifies"],["specficy","specify"],["specficying","specifying"],["specfied","specified"],["specfield","specified"],["specfies","specifies"],["specfifies","specifies"],["specfify","specify"],["specfifying","specifying"],["specfiied","specified"],["specfy","specify"],["specfying","specifying"],["speciafied","specified"],["specialisaiton","specialisation"],["specialisaitons","specialisations"],["specializaiton","specialization"],["specializaitons","specializations"],["specialy","specially"],["specic","specific"],["specical","special"],["specication","specification"],["specidic","specific"],["specied","specified"],["speciefied","specified"],["specifactions","specifications"],["specifc","specific"],["specifcally","specifically"],["specifcation","specification"],["specifcations","specifications"],["specifcied","specified"],["specifclly","specifically"],["specifed","specified"],["specifes","specifies"],["speciffic","specific"],["speciffically","specifically"],["specifially","specifically"],["specificaiton","specification"],["specificaitons","specifications"],["specificallly","specifically"],["specificaly","specifically"],["specificated","specified"],["specificateion","specification"],["specificatin","specification"],["specificaton","specification"],["specificed","specified"],["specifices","specifies"],["specificially","specifically"],["specificiation","specification"],["specificiations","specifications"],["specificically","specifically"],["specificied","specified"],["specificl","specific"],["specificly","specifically"],["specifiction","specification"],["specifictions","specifications"],["specifid","specified"],["specifiec","specific"],["specifiecally","specifically"],["specifiecation","specification"],["specifiecations","specifications"],["specifiecd","specified"],["specifieced","specified"],["specifiecs","specifics"],["specifieed","specified"],["specifiees","specifies"],["specifig","specific"],["specifigation","specification"],["specifigations","specifications"],["specifing","specifying"],["specifities","specifics"],["specifiy","specify"],["specifiying","specifying"],["specifric","specific"],["specift","specify"],["specifyed","specified"],["specifyied","specified"],["specifyig","specifying"],["specifyinhg","specifying"],["speciic","specific"],["speciied","specified"],["speciifc","specific"],["speciifed","specified"],["specilisation","specialisation"],["specilisations","specialisations"],["specilization","specialization"],["specilizations","specializations"],["specilized","specialized"],["speciman","specimen"],["speciries","specifies"],["speciry","specify"],["specivied","specified"],["speciy","specify"],["speciyfing","specifying"],["speciyfying","specifying"],["speciying","specifying"],["spectauclar","spectacular"],["spectaulars","spectaculars"],["spectification","specification"],["spectifications","specifications"],["spectified","specified"],["spectifies","specifies"],["spectify","specify"],["spectifying","specifying"],["spectular","spectacular"],["spectularly","spectacularly"],["spectum","spectrum"],["specturm","spectrum"],["specualtive","speculative"],["specufies","specifies"],["specufy","specify"],["spedific","specific"],["spedified","specified"],["spedify","specify"],["speeak","speak"],["speeaking","speaking"],["speeling","spelling"],["speelling","spelling"],["speep","sleep"],["speep-up","speed-up"],["speeped","sped"],["speeping","sleeping"],["spefcifiable","specifiable"],["spefcific","specific"],["spefcifically","specifically"],["spefcification","specification"],["spefcifications","specifications"],["spefcifics","specifics"],["spefcifieid","specified"],["spefcifieir","specifier"],["spefcifieirs","specifiers"],["spefcifieis","specifies"],["spefcifiy","specify"],["spefcifiying","specifying"],["spefeid","specified"],["spefeir","specifier"],["spefeirs","specifiers"],["spefeis","specifies"],["spefiable","specifiable"],["spefial","special"],["spefic","specific"],["speficable","specifiable"],["spefically","specifically"],["spefication","specification"],["spefications","specifications"],["speficed","specified"],["speficeid","specified"],["speficeir","specifier"],["speficeirs","specifiers"],["speficeis","specifies"],["speficer","specifier"],["speficers","specifiers"],["spefices","specifies"],["speficiable","specifiable"],["speficiallally","specifically"],["speficiallation","specification"],["speficiallations","specifications"],["speficialleid","specified"],["speficialleir","specifier"],["speficialleirs","specifiers"],["speficialleis","specifies"],["speficialliable","specifiable"],["speficiallic","specific"],["speficiallically","specifically"],["speficiallication","specification"],["speficiallications","specifications"],["speficiallics","specifics"],["speficiallied","specified"],["speficiallier","specifier"],["speficialliers","specifiers"],["speficiallies","specifies"],["speficiallifed","specified"],["speficiallifer","specifier"],["speficiallifers","specifiers"],["speficiallifes","specifies"],["speficially","specifically"],["speficiation","specification"],["speficiations","specifications"],["speficic","specific"],["speficically","specifically"],["speficication","specification"],["speficications","specifications"],["speficics","specifics"],["speficied","specified"],["speficieid","specified"],["speficieir","specifier"],["speficieirs","specifiers"],["speficieis","specifies"],["speficier","specifier"],["speficiers","specifiers"],["speficies","specifies"],["speficifally","specifically"],["speficifation","specification"],["speficifations","specifications"],["speficifc","specific"],["speficifcally","specifically"],["speficifcation","specification"],["speficifcations","specifications"],["speficifcs","specifics"],["speficifed","specified"],["speficifeid","specified"],["speficifeir","specifier"],["speficifeirs","specifiers"],["speficifeis","specifies"],["speficifer","specifier"],["speficifers","specifiers"],["speficifes","specifies"],["speficifiable","specifiable"],["speficific","specific"],["speficifically","specifically"],["speficification","specification"],["speficifications","specifications"],["speficifics","specifics"],["speficified","specified"],["speficifier","specifier"],["speficifiers","specifiers"],["speficifies","specifies"],["speficififed","specified"],["speficififer","specifier"],["speficififers","specifiers"],["speficififes","specifies"],["speficify","specify"],["speficifying","specifying"],["speficiiable","specifiable"],["speficiic","specific"],["speficiically","specifically"],["speficiication","specification"],["speficiications","specifications"],["speficiics","specifics"],["speficiied","specified"],["speficiier","specifier"],["speficiiers","specifiers"],["speficiies","specifies"],["speficiifed","specified"],["speficiifer","specifier"],["speficiifers","specifiers"],["speficiifes","specifies"],["speficillally","specifically"],["speficillation","specification"],["speficillations","specifications"],["speficilleid","specified"],["speficilleir","specifier"],["speficilleirs","specifiers"],["speficilleis","specifies"],["speficilliable","specifiable"],["speficillic","specific"],["speficillically","specifically"],["speficillication","specification"],["speficillications","specifications"],["speficillics","specifics"],["speficillied","specified"],["speficillier","specifier"],["speficilliers","specifiers"],["speficillies","specifies"],["speficillifed","specified"],["speficillifer","specifier"],["speficillifers","specifiers"],["speficillifes","specifies"],["speficilly","specifically"],["speficitally","specifically"],["speficitation","specification"],["speficitations","specifications"],["speficiteid","specified"],["speficiteir","specifier"],["speficiteirs","specifiers"],["speficiteis","specifies"],["speficitiable","specifiable"],["speficitic","specific"],["speficitically","specifically"],["speficitication","specification"],["speficitications","specifications"],["speficitics","specifics"],["speficitied","specified"],["speficitier","specifier"],["speficitiers","specifiers"],["speficities","specificities"],["speficitifed","specified"],["speficitifer","specifier"],["speficitifers","specifiers"],["speficitifes","specifies"],["speficity","specificity"],["speficiy","specify"],["speficiying","specifying"],["spefics","specifics"],["speficy","specify"],["speficying","specifying"],["spefied","specified"],["spefier","specifier"],["spefiers","specifiers"],["spefies","specifies"],["spefifally","specifically"],["spefifation","specification"],["spefifations","specifications"],["spefifed","specified"],["spefifeid","specified"],["spefifeir","specifier"],["spefifeirs","specifiers"],["spefifeis","specifies"],["spefifer","specifier"],["spefifers","specifiers"],["spefifes","specifies"],["spefifiable","specifiable"],["spefific","specific"],["spefifically","specifically"],["spefification","specification"],["spefifications","specifications"],["spefifics","specifics"],["spefified","specified"],["spefifier","specifier"],["spefifiers","specifiers"],["spefifies","specifies"],["spefififed","specified"],["spefififer","specifier"],["spefififers","specifiers"],["spefififes","specifies"],["spefify","specify"],["spefifying","specifying"],["spefiiable","specifiable"],["spefiic","specific"],["spefiically","specifically"],["spefiication","specification"],["spefiications","specifications"],["spefiics","specifics"],["spefiied","specified"],["spefiier","specifier"],["spefiiers","specifiers"],["spefiies","specifies"],["spefiifally","specifically"],["spefiifation","specification"],["spefiifations","specifications"],["spefiifeid","specified"],["spefiifeir","specifier"],["spefiifeirs","specifiers"],["spefiifeis","specifies"],["spefiifiable","specifiable"],["spefiific","specific"],["spefiifically","specifically"],["spefiification","specification"],["spefiifications","specifications"],["spefiifics","specifics"],["spefiified","specified"],["spefiifier","specifier"],["spefiifiers","specifiers"],["spefiifies","specifies"],["spefiififed","specified"],["spefiififer","specifier"],["spefiififers","specifiers"],["spefiififes","specifies"],["spefiify","specify"],["spefiifying","specifying"],["spefixally","specifically"],["spefixation","specification"],["spefixations","specifications"],["spefixeid","specified"],["spefixeir","specifier"],["spefixeirs","specifiers"],["spefixeis","specifies"],["spefixiable","specifiable"],["spefixic","specific"],["spefixically","specifically"],["spefixication","specification"],["spefixications","specifications"],["spefixics","specifics"],["spefixied","specified"],["spefixier","specifier"],["spefixiers","specifiers"],["spefixies","specifies"],["spefixifed","specified"],["spefixifer","specifier"],["spefixifers","specifiers"],["spefixifes","specifies"],["spefixy","specify"],["spefixying","specifying"],["spefiy","specify"],["spefiying","specifying"],["spefy","specify"],["spefying","specifying"],["speherical","spherical"],["speical","special"],["speices","species"],["speicfied","specified"],["speicific","specific"],["speicified","specified"],["speicify","specify"],["speling","spelling"],["spellshecking","spellchecking"],["spendour","splendour"],["speparate","separate"],["speparated","separated"],["speparating","separating"],["speparation","separation"],["speparator","separator"],["spepc","spec"],["speperatd","separated"],["speperate","separate"],["speperateing","separating"],["speperater","separator"],["speperates","separates"],["speperating","separating"],["speperator","separator"],["speperats","separates"],["sperate","separate"],["sperately","separately"],["sperhical","spherical"],["spermatozoan","spermatozoon"],["speshal","special"],["speshel","special"],["spesialisation","specialization"],["spesific","specific"],["spesifical","specific"],["spesifically","specifically"],["spesificaly","specifically"],["spesifics","specifics"],["spesified","specified"],["spesifities","specifics"],["spesify","specify"],["spezialisation","specialization"],["spezific","specific"],["spezified","specified"],["spezify","specify"],["spicific","specific"],["spicified","specified"],["spicify","specify"],["spiltting","splitting"],["spindel","spindle"],["spindels","spindles"],["spinlcok","spinlock"],["spinock","spinlock"],["spligs","splits"],["spliiter","splitter"],["spliitting","splitting"],["spliting","splitting"],["splitted","split"],["splittng","splitting"],["spllitting","splitting"],["spoace","space"],["spoaced","spaced"],["spoaces","spaces"],["spoacing","spacing"],["sponser","sponsor"],["sponsered","sponsored"],["sponsers","sponsors"],["sponsership","sponsorship"],["spontanous","spontaneous"],["sponzored","sponsored"],["spoonfulls","spoonfuls"],["sporatic","sporadic"],["sporious","spurious"],["sppeches","speeches"],["spport","support"],["spported","supported"],["spporting","supporting"],["spports","supports"],["spreaded","spread"],["spreadhseet","spreadsheet"],["spreadhseets","spreadsheets"],["spreadsheat","spreadsheet"],["spreadsheats","spreadsheets"],["spreasheet","spreadsheet"],["spreasheets","spreadsheets"],["sprech","speech"],["sprecial","special"],["sprecialized","specialized"],["sprecially","specially"],["spred","spread"],["spredsheet","spreadsheet"],["spreedsheet","spreadsheet"],["sprinf","sprintf"],["spririous","spurious"],["spriritual","spiritual"],["spritual","spiritual"],["sproon","spoon"],["spsace","space"],["spsaced","spaced"],["spsaces","spaces"],["spsacing","spacing"],["sptintf","sprintf"],["spurios","spurious"],["spurrious","spurious"],["sqare","square"],["sqared","squared"],["sqares","squares"],["sqash","squash"],["sqashed","squashed"],["sqashing","squashing"],["sqaure","square"],["sqaured","squared"],["sqaures","squares"],["sqeuence","sequence"],["squashgin","squashing"],["squence","sequence"],["squirel","squirrel"],["squirl","squirrel"],["squrared","squared"],["srcipt","script"],["srcipts","scripts"],["sreampropinfo","streampropinfo"],["sreenshot","screenshot"],["sreenshots","screenshots"],["sreturns","returns"],["srikeout","strikeout"],["sring","string"],["srings","strings"],["srink","shrink"],["srinkd","shrunk"],["srinked","shrunk"],["srinking","shrinking"],["sript","script"],["sripts","scripts"],["srollbar","scrollbar"],["srouce","source"],["srtifact","artifact"],["srtifacts","artifacts"],["srtings","strings"],["srtructure","structure"],["srttings","settings"],["sructure","structure"],["sructures","structures"],["srunk","shrunk"],["srunken","shrunken"],["srunkn","shrunken"],["ssame","same"],["ssee","see"],["ssoaiating","associating"],["ssome","some"],["stabalization","stabilization"],["stabilitation","stabilization"],["stabilite","stabilize"],["stabilited","stabilized"],["stabilites","stabilizes"],["stabiliting","stabilizing"],["stabillity","stability"],["stabilty","stability"],["stablility","stability"],["stablilization","stabilization"],["stablize","stabilize"],["stach","stack"],["stacionary","stationary"],["stackk","stack"],["stadnard","standard"],["stadnardisation","standardisation"],["stadnardised","standardised"],["stadnardising","standardising"],["stadnardization","standardization"],["stadnardized","standardized"],["stadnardizing","standardizing"],["stadnards","standards"],["stae","state"],["staement","statement"],["staically","statically"],["stainlees","stainless"],["staion","station"],["staions","stations"],["staition","station"],["staitions","stations"],["stalagtite","stalactite"],["standar","standard"],["standarad","standard"],["standard-complient","standard-compliant"],["standardss","standards"],["standarisation","standardisation"],["standarise","standardise"],["standarised","standardised"],["standarises","standardises"],["standarising","standardising"],["standarization","standardization"],["standarize","standardize"],["standarized","standardized"],["standarizes","standardizes"],["standarizing","standardizing"],["standart","standard"],["standartd","standard"],["standartds","standards"],["standartisation","standardisation"],["standartisator","standardiser"],["standartised","standardised"],["standartization","standardization"],["standartizator","standardizer"],["standartized","standardized"],["standarts","standards"],["standatd","standard"],["standrat","standard"],["standrats","standards"],["standtard","standard"],["stange","strange"],["stanp","stamp"],["staration","starvation"],["stard","start"],["stardard","standard"],["stardardize","standardize"],["stardardized","standardized"],["stardardizes","standardizes"],["stardardizing","standardizing"],["stardards","standards"],["staright","straight"],["startd","started"],["startegic","strategic"],["startegies","strategies"],["startegy","strategy"],["startet","started"],["startign","starting"],["startin","starting"],["startlisteneing","startlistening"],["startnig","starting"],["startparanthesis","startparentheses"],["startted","started"],["startting","starting"],["starup","startup"],["starups","startups"],["statamenet","statement"],["statamenets","statements"],["stategies","strategies"],["stategise","strategise"],["stategised","strategised"],["stategize","strategize"],["stategized","strategized"],["stategy","strategy"],["stateman","statesman"],["statemanet","statement"],["statememts","statements"],["statemen","statement"],["statemenet","statement"],["statemenets","statements"],["statemet","statement"],["statemnts","statements"],["stati","statuses"],["staticly","statically"],["statictic","statistic"],["statictics","statistics"],["statisfied","satisfied"],["statisfies","satisfies"],["statisfy","satisfy"],["statisfying","satisfying"],["statisitics","statistics"],["statistices","statistics"],["statitic","statistic"],["statitics","statistics"],["statmenet","statement"],["statmenmt","statement"],["statment","statement"],["statments","statements"],["statrt","start"],["stattistic","statistic"],["statubar","statusbar"],["statuline","statusline"],["statulines","statuslines"],["statup","startup"],["staturday","Saturday"],["statuss","status"],["statusses","statuses"],["statustics","statistics"],["staulk","stalk"],["stauration","saturation"],["staus","status"],["stawberries","strawberries"],["stawberry","strawberry"],["stawk","stalk"],["stcokbrush","stockbrush"],["stdanard","standard"],["stdanards","standards"],["stength","strength"],["steram","stream"],["steramed","streamed"],["steramer","streamer"],["steraming","streaming"],["sterams","streams"],["sterio","stereo"],["steriods","steroids"],["sterotype","stereotype"],["sterotypes","stereotypes"],["stickness","stickiness"],["stickyness","stickiness"],["stiffneing","stiffening"],["stiky","sticky"],["stil","still"],["stilus","stylus"],["stingent","stringent"],["stipped","stripped"],["stiring","stirring"],["stirng","string"],["stirngs","strings"],["stirr","stir"],["stirrs","stirs"],["stivk","stick"],["stivks","sticks"],["stle","style"],["stlye","style"],["stlyes","styles"],["stnad","stand"],["stndard","standard"],["stoage","storage"],["stoages","storages"],["stocahstic","stochastic"],["stocastic","stochastic"],["stoer","store"],["stoers","stores"],["stomache","stomach"],["stompted","stomped"],["stong","strong"],["stoped","stopped"],["stoping","stopping"],["stopp","stop"],["stoppped","stopped"],["stoppping","stopping"],["stopps","stops"],["stopry","story"],["storag","storage"],["storeable","storable"],["storeage","storage"],["stoream","stream"],["storeble","storable"],["storeing","storing"],["storge","storage"],["storise","stories"],["stornegst","strongest"],["stoyr","story"],["stpo","stop"],["stradegies","strategies"],["stradegy","strategy"],["stragegy","strategy"],["strageties","strategies"],["stragety","strategy"],["straigh-forward","straightforward"],["straighforward","straightforward"],["straightfoward","straightforward"],["straigt","straight"],["straigth","straight"],["straines","strains"],["strangness","strangeness"],["strart","start"],["strarted","started"],["strarting","starting"],["strarts","starts"],["stratagically","strategically"],["strcture","structure"],["strctures","structures"],["strcutre","structure"],["strcutural","structural"],["strcuture","structure"],["strcutures","structures"],["streamm","stream"],["streammed","streamed"],["streamming","streaming"],["streatched","stretched"],["strech","stretch"],["streched","stretched"],["streches","stretches"],["streching","stretching"],["strectch","stretch"],["strecth","stretch"],["strecthed","stretched"],["strecthes","stretches"],["strecthing","stretching"],["streem","stream"],["streemlining","streamlining"],["stregth","strength"],["streightish","straightish"],["streightly","straightly"],["streightness","straightness"],["streigtish","straightish"],["streigtly","straightly"],["streigtness","straightness"],["strem","stream"],["strema","stream"],["strengh","strength"],["strenghen","strengthen"],["strenghened","strengthened"],["strenghening","strengthening"],["strenght","strength"],["strenghten","strengthen"],["strenghtened","strengthened"],["strenghtening","strengthening"],["strenghts","strengths"],["strengtened","strengthened"],["strenous","strenuous"],["strentgh","strength"],["strenth","strength"],["strerrror","strerror"],["striaght","straight"],["striaghten","straighten"],["striaghtens","straightens"],["striaghtforward","straightforward"],["striaghts","straights"],["striclty","strictly"],["stricly","strictly"],["stricteir","stricter"],["strictier","stricter"],["strictiest","strictest"],["strictist","strictest"],["strig","string"],["strigification","stringification"],["strigifying","stringifying"],["striing","string"],["striings","strings"],["strikely","strikingly"],["stringifed","stringified"],["strinsg","strings"],["strippen","stripped"],["stript","stripped"],["strirngification","stringification"],["strnad","strand"],["strng","string"],["stroage","storage"],["stroe","store"],["stroing","storing"],["stronlgy","strongly"],["stronly","strongly"],["strore","store"],["strored","stored"],["strores","stores"],["stroring","storing"],["strotage","storage"],["stroyboard","storyboard"],["struc","struct"],["strucrure","structure"],["strucrured","structured"],["strucrures","structures"],["structed","structured"],["structer","structure"],["structere","structure"],["structered","structured"],["structeres","structures"],["structetr","structure"],["structire","structure"],["structre","structure"],["structred","structured"],["structres","structures"],["structrual","structural"],["structrue","structure"],["structrued","structured"],["structrues","structures"],["structual","structural"],["structue","structure"],["structued","structured"],["structues","structures"],["structur","structure"],["structurs","structures"],["strucur","structure"],["strucure","structure"],["strucured","structured"],["strucures","structures"],["strucuring","structuring"],["strucurs","structures"],["strucutre","structure"],["strucutred","structured"],["strucutres","structures"],["strucuture","structure"],["struggel","struggle"],["struggeled","struggled"],["struggeling","struggling"],["struggels","struggles"],["struttural","structural"],["strutture","structure"],["struture","structure"],["ststion","station"],["ststionary","stationary"],["ststioned","stationed"],["ststionery","stationery"],["ststions","stations"],["ststr","strstr"],["stteting","setting"],["sttetings","settings"],["stubborness","stubbornness"],["stucked","stuck"],["stuckt","stuck"],["stuct","struct"],["stucts","structs"],["stucture","structure"],["stuctured","structured"],["stuctures","structures"],["studdy","study"],["studetn","student"],["studetns","students"],["studing","studying"],["studoi","studio"],["studois","studios"],["stuggling","struggling"],["stuido","studio"],["stuidos","studios"],["stuill","still"],["stummac","stomach"],["sturctural","structural"],["sturcture","structure"],["sturctures","structures"],["sturture","structure"],["sturtured","structured"],["sturtures","structures"],["sturucture","structure"],["stutdown","shutdown"],["stutus","status"],["styhe","style"],["styilistic","stylistic"],["stylessheets","stylesheets"],["sub-lcuase","sub-clause"],["subbtle","subtle"],["subcatagories","subcategories"],["subcatagory","subcategory"],["subcirucit","subcircuit"],["subcommannd","subcommand"],["subcommnad","subcommand"],["subconchus","subconscious"],["subconsiously","subconsciously"],["subcribe","subscribe"],["subcribed","subscribed"],["subcribes","subscribes"],["subcribing","subscribing"],["subdirectoires","subdirectories"],["subdirectorys","subdirectories"],["subdirecty","subdirectory"],["subdivisio","subdivision"],["subdivisiond","subdivisioned"],["subdoamin","subdomain"],["subdoamins","subdomains"],["subelemet","subelement"],["subelemets","subelements"],["subexperesion","subexpression"],["subexperesions","subexpressions"],["subexperession","subexpression"],["subexperessions","subexpressions"],["subexpersion","subexpression"],["subexpersions","subexpressions"],["subexperssion","subexpression"],["subexperssions","subexpressions"],["subexpession","subexpression"],["subexpessions","subexpressions"],["subexpresssion","subexpression"],["subexpresssions","subexpressions"],["subfolfer","subfolder"],["subfolfers","subfolders"],["subfromat","subformat"],["subfromats","subformats"],["subfroms","subforms"],["subgregion","subregion"],["subirectory","subdirectory"],["subjec","subject"],["subjet","subject"],["subjudgation","subjugation"],["sublass","subclass"],["sublasse","subclasse"],["sublasses","subclasses"],["sublcasses","subclasses"],["sublcuase","subclause"],["suble","subtle"],["submachne","submachine"],["submision","submission"],["submisson","submission"],["submited","submitted"],["submition","submission"],["submitions","submissions"],["submittted","submitted"],["submoule","submodule"],["submti","submit"],["subnegatiotiation","subnegotiation"],["subnegatiotiations","subnegotiations"],["subnegoatiation","subnegotiation"],["subnegoatiations","subnegotiations"],["subnegoation","subnegotiation"],["subnegoations","subnegotiations"],["subnegociation","subnegotiation"],["subnegociations","subnegotiations"],["subnegogtiation","subnegotiation"],["subnegogtiations","subnegotiations"],["subnegoitation","subnegotiation"],["subnegoitations","subnegotiations"],["subnegoptionsotiation","subnegotiation"],["subnegoptionsotiations","subnegotiations"],["subnegosiation","subnegotiation"],["subnegosiations","subnegotiations"],["subnegotaiation","subnegotiation"],["subnegotaiations","subnegotiations"],["subnegotaition","subnegotiation"],["subnegotaitions","subnegotiations"],["subnegotatiation","subnegotiation"],["subnegotatiations","subnegotiations"],["subnegotation","subnegotiation"],["subnegotations","subnegotiations"],["subnegothiation","subnegotiation"],["subnegothiations","subnegotiations"],["subnegotication","subnegotiation"],["subnegotications","subnegotiations"],["subnegotioation","subnegotiation"],["subnegotioations","subnegotiations"],["subnegotion","subnegotiation"],["subnegotionation","subnegotiation"],["subnegotionations","subnegotiations"],["subnegotions","subnegotiations"],["subnegotiotation","subnegotiation"],["subnegotiotations","subnegotiations"],["subnegotiotion","subnegotiation"],["subnegotiotions","subnegotiations"],["subnegotitaion","subnegotiation"],["subnegotitaions","subnegotiations"],["subnegotitation","subnegotiation"],["subnegotitations","subnegotiations"],["subnegotition","subnegotiation"],["subnegotitions","subnegotiations"],["subnegoziation","subnegotiation"],["subnegoziations","subnegotiations"],["subobjecs","subobjects"],["suborutine","subroutine"],["suborutines","subroutines"],["suboutine","subroutine"],["subpackge","subpackage"],["subpackges","subpackages"],["subpecies","subspecies"],["subporgram","subprogram"],["subproccese","subprocess"],["subpsace","subspace"],["subquue","subqueue"],["subract","subtract"],["subracted","subtracted"],["subraction","subtraction"],["subree","subtree"],["subresoure","subresource"],["subresoures","subresources"],["subroutie","subroutine"],["subrouties","subroutines"],["subsceptible","susceptible"],["subscibe","subscribe"],["subscibed","subscribed"],["subsciber","subscriber"],["subscibers","subscribers"],["subscirbe","subscribe"],["subscirbed","subscribed"],["subscirber","subscriber"],["subscirbers","subscribers"],["subscirbes","subscribes"],["subscirbing","subscribing"],["subscirpt","subscript"],["subscirption","subscription"],["subscirptions","subscriptions"],["subscritpion","subscription"],["subscritpions","subscriptions"],["subscritpiton","subscription"],["subscritpitons","subscriptions"],["subscritpt","subscript"],["subscritption","subscription"],["subscritptions","subscriptions"],["subsctitution","substitution"],["subsecrion","subsection"],["subsedent","subsequent"],["subseqence","subsequence"],["subseqent","subsequent"],["subsequest","subsequent"],["subsequnce","subsequence"],["subsequnt","subsequent"],["subsequntly","subsequently"],["subseuqent","subsequent"],["subshystem","subsystem"],["subshystems","subsystems"],["subsidary","subsidiary"],["subsiduary","subsidiary"],["subsiquent","subsequent"],["subsiquently","subsequently"],["subsituent","substituent"],["subsituents","substituents"],["subsitutable","substitutable"],["subsitutatble","substitutable"],["subsitute","substitute"],["subsituted","substituted"],["subsitutes","substitutes"],["subsituting","substituting"],["subsitution","substitution"],["subsitutions","substitutions"],["subsitutuent","substituent"],["subsitutuents","substituents"],["subsitutute","substitute"],["subsitututed","substituted"],["subsitututes","substitutes"],["subsitututing","substituting"],["subsitutution","substitution"],["subsquent","subsequent"],["subsquently","subsequently"],["subsriber","subscriber"],["substace","substance"],["substact","subtract"],["substaintially","substantially"],["substancial","substantial"],["substantialy","substantially"],["substantivly","substantively"],["substask","subtask"],["substasks","subtasks"],["substatial","substantial"],["substential","substantial"],["substentially","substantially"],["substition","substitution"],["substitions","substitutions"],["substitition","substitution"],["substititions","substitutions"],["substituation","substitution"],["substituations","substitutions"],["substitude","substitute"],["substituded","substituted"],["substitudes","substitutes"],["substituding","substituting"],["substitue","substitute"],["substitues","substitutes"],["substituing","substituting"],["substituion","substitution"],["substituions","substitutions"],["substiution","substitution"],["substract","subtract"],["substracted","subtracted"],["substracting","subtracting"],["substraction","subtraction"],["substracts","subtracts"],["substucture","substructure"],["substuctures","substructures"],["substutite","substitute"],["subsysthem","subsystem"],["subsysthems","subsystems"],["subsystyem","subsystem"],["subsystyems","subsystems"],["subsysytem","subsystem"],["subsysytems","subsystems"],["subsytem","subsystem"],["subsytems","subsystems"],["subtabels","subtables"],["subtak","subtask"],["subtances","substances"],["subterranian","subterranean"],["subtitute","substitute"],["subtituted","substituted"],["subtitutes","substitutes"],["subtituting","substituting"],["subtitution","substitution"],["subtitutions","substitutions"],["subtrafuge","subterfuge"],["subtrate","substrate"],["subtrates","substrates"],["subtring","substring"],["subtrings","substrings"],["subtsitutable","substitutable"],["subtsitutatble","substitutable"],["suburburban","suburban"],["subystem","subsystem"],["subystems","subsystems"],["succceeded","succeeded"],["succcess","success"],["succcesses","successes"],["succcessful","successful"],["succcessfully","successfully"],["succcessor","successor"],["succcessors","successors"],["succcessul","successful"],["succcessully","successfully"],["succecful","successful"],["succed","succeed"],["succedd","succeed"],["succedded","succeeded"],["succedding","succeeding"],["succedds","succeeds"],["succede","succeed"],["succeded","succeeded"],["succedes","succeeds"],["succedfully","successfully"],["succeding","succeeding"],["succeds","succeeds"],["succee","succeed"],["succeedde","succeeded"],["succeedes","succeeds"],["succeess","success"],["succeesses","successes"],["succes","success"],["succesful","successful"],["succesfull","successful"],["succesfully","successfully"],["succesfuly","successfully"],["succesion","succession"],["succesive","successive"],["succesor","successor"],["succesors","successors"],["successfui","successful"],["successfule","successful"],["successfull","successful"],["successfullies","successfully"],["successfullly","successfully"],["successfulln","successful"],["successfullness","successfulness"],["successfullt","successfully"],["successfuly","successfully"],["successing","successive"],["successs","success"],["successsfully","successfully"],["successsion","succession"],["successul","successful"],["successully","successfully"],["succesully","successfully"],["succicently","sufficiently"],["succint","succinct"],["succseeded","succeeded"],["succsess","success"],["succsessfull","successful"],["succsessive","successive"],["succssful","successful"],["succussfully","successfully"],["suceed","succeed"],["suceeded","succeeded"],["suceeding","succeeding"],["suceeds","succeeds"],["suceessfully","successfully"],["suces","success"],["suceses","successes"],["sucesful","successful"],["sucesfull","successful"],["sucesfully","successfully"],["sucesfuly","successfully"],["sucesion","succession"],["sucesive","successive"],["sucess","success"],["sucesscient","sufficient"],["sucessed","succeeded"],["sucessefully","successfully"],["sucesses","successes"],["sucessess","success"],["sucessflly","successfully"],["sucessfually","successfully"],["sucessfukk","successful"],["sucessful","successful"],["sucessfull","successful"],["sucessfully","successfully"],["sucessfuly","successfully"],["sucession","succession"],["sucessiv","successive"],["sucessive","successive"],["sucessively","successively"],["sucessor","successor"],["sucessors","successors"],["sucessot","successor"],["sucesss","success"],["sucessses","successes"],["sucesssful","successful"],["sucesssfull","successful"],["sucesssfully","successfully"],["sucesssfuly","successfully"],["sucessufll","successful"],["sucessuflly","successfully"],["sucessully","successfully"],["sucide","suicide"],["sucidial","suicidal"],["sucome","succumb"],["sucsede","succeed"],["sucsess","success"],["sudent","student"],["sudents","students"],["sudmobule","submodule"],["sudmobules","submodules"],["sueful","useful"],["sueprset","superset"],["suface","surface"],["sufaces","surfaces"],["sufface","surface"],["suffaces","surfaces"],["suffciency","sufficiency"],["suffcient","sufficient"],["suffciently","sufficiently"],["sufferage","suffrage"],["sufferred","suffered"],["sufferring","suffering"],["sufficate","suffocate"],["sufficated","suffocated"],["sufficates","suffocates"],["sufficating","suffocating"],["suffication","suffocation"],["sufficency","sufficiency"],["sufficent","sufficient"],["sufficently","sufficiently"],["sufficiancy","sufficiency"],["sufficiant","sufficient"],["sufficiantly","sufficiently"],["sufficiennt","sufficient"],["sufficienntly","sufficiently"],["suffiency","sufficiency"],["suffient","sufficient"],["suffiently","sufficiently"],["suffisticated","sophisticated"],["suficate","suffocate"],["suficated","suffocated"],["suficates","suffocates"],["suficating","suffocating"],["sufication","suffocation"],["suficcient","sufficient"],["suficient","sufficient"],["suficiently","sufficiently"],["sufocate","suffocate"],["sufocated","suffocated"],["sufocates","suffocates"],["sufocating","suffocating"],["sufocation","suffocation"],["sugested","suggested"],["sugestion","suggestion"],["sugestions","suggestions"],["sugests","suggests"],["suggesst","suggest"],["suggessted","suggested"],["suggessting","suggesting"],["suggesstion","suggestion"],["suggesstions","suggestions"],["suggessts","suggests"],["suggestes","suggests"],["suggestin","suggestion"],["suggestins","suggestions"],["suggestsed","suggested"],["suggestted","suggested"],["suggesttion","suggestion"],["suggesttions","suggestions"],["sugget","suggest"],["suggeted","suggested"],["suggetsed","suggested"],["suggetsing","suggesting"],["suggetsion","suggestion"],["sugggest","suggest"],["sugggested","suggested"],["sugggesting","suggesting"],["sugggestion","suggestion"],["sugggestions","suggestions"],["sugguest","suggest"],["sugguested","suggested"],["sugguesting","suggesting"],["sugguestion","suggestion"],["sugguestions","suggestions"],["suh","such"],["suiete","suite"],["suiteable","suitable"],["sumamry","summary"],["sumarize","summarize"],["sumary","summary"],["sumbitted","submitted"],["sumed-up","summed-up"],["summarizen","summarize"],["summay","summary"],["summerised","summarised"],["summerized","summarized"],["summersalt","somersault"],["summmaries","summaries"],["summmarisation","summarisation"],["summmarised","summarised"],["summmarization","summarization"],["summmarized","summarized"],["summmary","summary"],["sumodules","submodules"],["sumulate","simulate"],["sumulated","simulated"],["sumulates","simulates"],["sumulation","simulation"],["sumulations","simulations"],["sundey","Sunday"],["sunglases","sunglasses"],["sunsday","Sunday"],["suntask","subtask"],["suop","soup"],["supeblock","superblock"],["supeena","subpoena"],["superbock","superblock"],["superbocks","superblocks"],["supercalifragilisticexpialidoceous","supercalifragilisticexpialidocious"],["supercede","supersede"],["superceded","superseded"],["supercedes","supersedes"],["superceding","superseding"],["superceed","supersede"],["superceeded","superseded"],["superflouous","superfluous"],["superflous","superfluous"],["superflouse","superfluous"],["superfluious","superfluous"],["superfluos","superfluous"],["superfulous","superfluous"],["superintendant","superintendent"],["superopeator","superoperator"],["supersed","superseded"],["superseedd","superseded"],["superseede","supersede"],["superseeded","superseded"],["suphisticated","sophisticated"],["suplant","supplant"],["suplanted","supplanted"],["suplanting","supplanting"],["suplants","supplants"],["suplementary","supplementary"],["suplied","supplied"],["suplimented","supplemented"],["supllies","supplies"],["suport","support"],["suported","supported"],["suporting","supporting"],["suports","supports"],["suportted","supported"],["suposable","supposable"],["supose","suppose"],["suposeable","supposable"],["suposed","supposed"],["suposedly","supposedly"],["suposes","supposes"],["suposing","supposing"],["suposse","suppose"],["suppied","supplied"],["suppier","supplier"],["suppies","supplies"],["supplamented","supplemented"],["suppliad","supplied"],["suppliementing","supplementing"],["suppliment","supplement"],["supplyed","supplied"],["suppoed","supposed"],["suppoert","support"],["suppoort","support"],["suppoorts","supports"],["suppopose","suppose"],["suppoprt","support"],["suppoprted","supported"],["suppor","support"],["suppored","supported"],["supporession","suppression"],["supporing","supporting"],["supportd","supported"],["supportes","supports"],["supportin","supporting"],["supportt","support"],["supportted","supported"],["supportting","supporting"],["supportts","supports"],["supposeable","supposable"],["supposeded","supposed"],["supposedely","supposedly"],["supposeds","supposed"],["supposedy","supposedly"],["supposingly","supposedly"],["suppossed","supposed"],["suppoted","supported"],["suppplied","supplied"],["suppport","support"],["suppported","supported"],["suppporting","supporting"],["suppports","supports"],["suppres","suppress"],["suppresed","suppressed"],["suppresion","suppression"],["suppresions","suppressions"],["suppressingd","suppressing"],["supprot","support"],["supproted","supported"],["supproter","supporter"],["supproters","supporters"],["supproting","supporting"],["supprots","supports"],["supprt","support"],["supprted","supported"],["suppurt","support"],["suppurted","supported"],["suppurter","supporter"],["suppurters","supporters"],["suppurting","supporting"],["suppurtive","supportive"],["suppurts","supports"],["suppy","supply"],["suppying","supplying"],["suprassing","surpassing"],["supres","suppress"],["supresed","suppressed"],["supreses","suppresses"],["supresing","suppressing"],["supresion","suppression"],["supress","suppress"],["supressed","suppressed"],["supresses","suppresses"],["supressible","suppressible"],["supressing","suppressing"],["supression","suppression"],["supressions","suppressions"],["supressor","suppressor"],["supressors","suppressors"],["supresssion","suppression"],["suprious","spurious"],["suprise","surprise"],["suprised","surprised"],["suprises","surprises"],["suprising","surprising"],["suprisingly","surprisingly"],["suprize","surprise"],["suprized","surprised"],["suprizing","surprising"],["suprizingly","surprisingly"],["supsend","suspend"],["supspect","suspect"],["supspected","suspected"],["supspecting","suspecting"],["supspects","suspects"],["surbert","sherbet"],["surfce","surface"],["surgest","suggest"],["surgested","suggested"],["surgestion","suggestion"],["surgestions","suggestions"],["surgests","suggests"],["suround","surround"],["surounded","surrounded"],["surounding","surrounding"],["suroundings","surroundings"],["surounds","surrounds"],["surpise","surprise"],["surpises","surprises"],["surplanted","supplanted"],["surport","support"],["surported","supported"],["surpress","suppress"],["surpressed","suppressed"],["surpresses","suppresses"],["surpressing","suppressing"],["surprisinlgy","surprisingly"],["surprize","surprise"],["surprized","surprised"],["surprizing","surprising"],["surprizingly","surprisingly"],["surregat","surrogate"],["surrepetitious","surreptitious"],["surrepetitiously","surreptitiously"],["surreptious","surreptitious"],["surreptiously","surreptitiously"],["surrogage","surrogate"],["surronded","surrounded"],["surrouded","surrounded"],["surrouding","surrounding"],["surrrounded","surrounded"],["surrundering","surrendering"],["survay","survey"],["survays","surveys"],["surveilence","surveillance"],["surveill","surveil"],["surveyer","surveyor"],["surviver","survivor"],["survivers","survivors"],["survivied","survived"],["susbcribed","subscribed"],["susbsystem","subsystem"],["susbsystems","subsystems"],["susbsytem","subsystem"],["susbsytems","subsystems"],["suscribe","subscribe"],["suscribed","subscribed"],["suscribes","subscribes"],["suscript","subscript"],["susepect","suspect"],["suseptable","susceptible"],["suseptible","susceptible"],["susinctly","succinctly"],["susinkt","succinct"],["suspedn","suspend"],["suspeneded","suspended"],["suspention","suspension"],["suspicios","suspicious"],["suspicioulsy","suspiciously"],["suspicous","suspicious"],["suspicously","suspiciously"],["suspision","suspicion"],["suspsend","suspend"],["sussinct","succinct"],["sustainaiblity","sustainability"],["sustem","system"],["sustems","systems"],["sustitution","substitution"],["sustitutions","substitutions"],["susupend","suspend"],["sutdown","shutdown"],["sutisfaction","satisfaction"],["sutisfied","satisfied"],["sutisfies","satisfies"],["sutisfy","satisfy"],["sutisfying","satisfying"],["suttled","shuttled"],["suttles","shuttles"],["suttlety","subtlety"],["suttling","shuttling"],["suuport","support"],["suuported","supported"],["suuporting","supporting"],["suuports","supports"],["suvenear","souvenir"],["suystem","system"],["suystemic","systemic"],["suystems","systems"],["svelt","svelte"],["swaer","swear"],["swaers","swears"],["swalloed","swallowed"],["swaped","swapped"],["swapiness","swappiness"],["swaping","swapping"],["swarmin","swarming"],["swcloumns","swcolumns"],["swepth","swept"],["swich","switch"],["swiched","switched"],["swiching","switching"],["swicth","switch"],["swicthed","switched"],["swicthing","switching"],["swiming","swimming"],["switchs","switches"],["switcht","switched"],["switchting","switching"],["swith","switch"],["swithable","switchable"],["swithc","switch"],["swithcboard","switchboard"],["swithced","switched"],["swithces","switches"],["swithch","switch"],["swithches","switches"],["swithching","switching"],["swithcing","switching"],["swithcover","switchover"],["swithed","switched"],["swither","switcher"],["swithes","switches"],["swithing","switching"],["switiches","switches"],["swown","shown"],["swtich","switch"],["swtichable","switchable"],["swtichback","switchback"],["swtichbacks","switchbacks"],["swtichboard","switchboard"],["swtichboards","switchboards"],["swtiched","switched"],["swticher","switcher"],["swtichers","switchers"],["swtiches","switches"],["swtiching","switching"],["swtichover","switchover"],["swtichs","switches"],["sxl","xsl"],["syantax","syntax"],["syas","says"],["syatem","system"],["syatems","systems"],["sybsystem","subsystem"],["sybsystems","subsystems"],["sychronisation","synchronisation"],["sychronise","synchronise"],["sychronised","synchronised"],["sychroniser","synchroniser"],["sychronises","synchronises"],["sychronisly","synchronously"],["sychronization","synchronization"],["sychronize","synchronize"],["sychronized","synchronized"],["sychronizer","synchronizer"],["sychronizes","synchronizes"],["sychronmode","synchronmode"],["sychronous","synchronous"],["sychronously","synchronously"],["sycle","cycle"],["sycled","cycled"],["sycles","cycles"],["sycling","cycling"],["sycn","sync"],["sycology","psychology"],["sycronise","synchronise"],["sycronised","synchronised"],["sycronises","synchronises"],["sycronising","synchronising"],["sycronization","synchronization"],["sycronizations","synchronizations"],["sycronize","synchronize"],["sycronized","synchronized"],["sycronizes","synchronizes"],["sycronizing","synchronizing"],["sycronous","synchronous"],["sycronously","synchronously"],["sycronus","synchronous"],["sylabus","syllabus"],["syle","style"],["syles","styles"],["sylibol","syllable"],["sylinder","cylinder"],["sylinders","cylinders"],["sylistic","stylistic"],["sylog","syslog"],["symantics","semantics"],["symblic","symbolic"],["symbo","symbol"],["symboles","symbols"],["symboll","symbol"],["symbonname","symbolname"],["symbsol","symbol"],["symbsols","symbols"],["symemetric","symmetric"],["symetri","symmetry"],["symetric","symmetric"],["symetrical","symmetrical"],["symetrically","symmetrically"],["symetry","symmetry"],["symettric","symmetric"],["symmetic","symmetric"],["symmetral","symmetric"],["symmetri","symmetry"],["symmetricaly","symmetrically"],["symnol","symbol"],["symnols","symbols"],["symobilic","symbolic"],["symobl","symbol"],["symoblic","symbolic"],["symoblically","symbolically"],["symobls","symbols"],["symobolic","symbolic"],["symobolical","symbolical"],["symol","symbol"],["symols","symbols"],["synagouge","synagogue"],["synamic","dynamic"],["synax","syntax"],["synching","syncing"],["synchonisation","synchronisation"],["synchonise","synchronise"],["synchonised","synchronised"],["synchonises","synchronises"],["synchonising","synchronising"],["synchonization","synchronization"],["synchonize","synchronize"],["synchonized","synchronized"],["synchonizes","synchronizes"],["synchonizing","synchronizing"],["synchonous","synchronous"],["synchonrous","synchronous"],["synchrnization","synchronization"],["synchrnonization","synchronization"],["synchroizing","synchronizing"],["synchromized","synchronized"],["synchroneous","synchronous"],["synchroneously","synchronously"],["synchronious","synchronous"],["synchroniously","synchronously"],["synchronizaton","synchronization"],["synchronsouly","synchronously"],["synchronuous","synchronous"],["synchronuously","synchronously"],["synchronus","synchronous"],["syncrhonise","synchronise"],["syncrhonised","synchronised"],["syncrhonize","synchronize"],["syncrhonized","synchronized"],["syncronise","synchronise"],["syncronised","synchronised"],["syncronises","synchronises"],["syncronising","synchronising"],["syncronization","synchronization"],["syncronizations","synchronizations"],["syncronize","synchronize"],["syncronized","synchronized"],["syncronizes","synchronizes"],["syncronizing","synchronizing"],["syncronous","synchronous"],["syncronously","synchronously"],["syncronus","synchronous"],["syncting","syncing"],["syndonic","syntonic"],["syndrom","syndrome"],["syndroms","syndromes"],["synomym","synonym"],["synonim","synonym"],["synonomous","synonymous"],["synonymns","synonyms"],["synopis","synopsis"],["synopsys","synopsis"],["synoym","synonym"],["synphony","symphony"],["synposis","synopsis"],["synronous","synchronous"],["syntac","syntax"],["syntacks","syntax"],["syntacs","syntax"],["syntact","syntax"],["syntactally","syntactically"],["syntacts","syntax"],["syntak","syntax"],["syntaks","syntax"],["syntakt","syntax"],["syntakts","syntax"],["syntatic","syntactic"],["syntatically","syntactically"],["syntaxe","syntax"],["syntaxg","syntax"],["syntaxt","syntax"],["syntehsise","synthesise"],["syntehsised","synthesised"],["syntehsize","synthesize"],["syntehsized","synthesized"],["syntesis","synthesis"],["syntethic","synthetic"],["syntethically","synthetically"],["syntethics","synthetics"],["syntetic","synthetic"],["syntetize","synthesize"],["syntetized","synthesized"],["synthethic","synthetic"],["synthetize","synthesize"],["synthetized","synthesized"],["synthetizes","synthesizes"],["synthtic","synthetic"],["syphyllis","syphilis"],["sypmtoms","symptoms"],["sypport","support"],["syrap","syrup"],["sysbols","symbols"],["syschronize","synchronize"],["sysem","system"],["sysematic","systematic"],["sysems","systems"],["sysmatically","systematically"],["sysmbol","symbol"],["sysmograph","seismograph"],["sysmte","system"],["sysmtes","systems"],["systax","syntax"],["syste","system"],["systen","system"],["systens","systems"],["systesm","systems"],["systhem","system"],["systhems","systems"],["systm","system"],["systme","system"],["systmes","systems"],["systms","systems"],["systyem","system"],["systyems","systems"],["sysyem","system"],["sysyems","systems"],["sytax","syntax"],["sytem","system"],["sytematic","systematic"],["sytemd","systemd"],["syteme","system"],["sytems","systems"],["sythesis","synthesis"],["sytle","style"],["sytled","styled"],["sytles","styles"],["sytlesheet","stylesheet"],["sytling","styling"],["sytnax","syntax"],["sytntax","syntax"],["sytsem","system"],["sytsemic","systemic"],["sytsems","systems"],["szenario","scenario"],["szenarios","scenarios"],["szes","sizes"],["szie","size"],["szied","sized"],["szies","sizes"],["tabacco","tobacco"],["tabbaray","taboret"],["tabblow","tableau"],["tabe","table"],["tabel","table"],["tabeles","tables"],["tabels","tables"],["tabeview","tabview"],["tabke","table"],["tabl","table"],["tablepsace","tablespace"],["tablepsaces","tablespaces"],["tablle","table"],["tabluar","tabular"],["tabluate","tabulate"],["tabluated","tabulated"],["tabluates","tabulates"],["tabluating","tabulating"],["tabualte","tabulate"],["tabualted","tabulated"],["tabualtes","tabulates"],["tabualting","tabulating"],["tabualtor","tabulator"],["tabualtors","tabulators"],["taged","tagged"],["taget","target"],["tageted","targeted"],["tageting","targeting"],["tagets","targets"],["tagggen","taggen"],["tagnet","tangent"],["tagnetial","tangential"],["tagnets","tangents"],["tagued","tagged"],["tahn","than"],["taht","that"],["takslet","tasklet"],["talbe","table"],["talekd","talked"],["tallerable","tolerable"],["tamplate","template"],["tamplated","templated"],["tamplates","templates"],["tamplating","templating"],["tangeant","tangent"],["tangeantial","tangential"],["tangeants","tangents"],["tangenet","tangent"],["tangensial","tangential"],["tangentailly","tangentially"],["tanget","tangent"],["tangetial","tangential"],["tangetially","tangentially"],["tangets","tangents"],["tansact","transact"],["tansaction","transaction"],["tansactional","transactional"],["tansactions","transactions"],["tanseint","transient"],["tansfomed","transformed"],["tansient","transient"],["tanslate","translate"],["tanslated","translated"],["tanslates","translates"],["tanslation","translation"],["tanslations","translations"],["tanslator","translator"],["tansmit","transmit"],["tansverse","transverse"],["tarbal","tarball"],["tarbals","tarballs"],["tarce","trace"],["tarced","traced"],["tarces","traces"],["tarcing","tracing"],["targed","target"],["targer","target"],["targest","targets"],["targetted","targeted"],["targetting","targeting"],["targettting","targeting"],["targt","target"],["targte","target"],["tarmigan","ptarmigan"],["tarnsparent","transparent"],["tarpolin","tarpaulin"],["tarvis","Travis"],["tarvisci","TravisCI"],["tasbar","taskbar"],["taskelt","tasklet"],["tast","taste"],["tatgert","target"],["tatgerted","targeted"],["tatgerting","targeting"],["tatgerts","targets"],["tath","that"],["tatoo","tattoo"],["tatoos","tattoos"],["tattooes","tattoos"],["tawk","talk"],["taxanomic","taxonomic"],["taxanomy","taxonomy"],["taxnomy","taxonomy"],["taxomonmy","taxonomy"],["taxonmy","taxonomy"],["taxonoy","taxonomy"],["taylored","tailored"],["tbe","the"],["tbey","they"],["tcahce","cache"],["tcahces","caches"],["tcheckout","checkout"],["tcpdumpp","tcpdump"],["tcppcheck","cppcheck"],["teacer","teacher"],["teacers","teachers"],["teached","taught"],["teachnig","teaching"],["teaher","teacher"],["teahers","teachers"],["teamplate","template"],["teamplates","templates"],["teated","treated"],["teched","taught"],["techer","teacher"],["techers","teachers"],["teches","teaches"],["techical","technical"],["techician","technician"],["techicians","technicians"],["techincal","technical"],["techincally","technically"],["teching","teaching"],["techinically","technically"],["techinique","technique"],["techiniques","techniques"],["techinque","technique"],["techinques","techniques"],["techique","technique"],["techiques","techniques"],["techneek","technique"],["technic","technique"],["technics","techniques"],["technik","technique"],["techniks","techniques"],["techniquest","techniques"],["techniquet","technique"],["technitian","technician"],["technition","technician"],["technlogy","technology"],["technnology","technology"],["technolgy","technology"],["technoloiges","technologies"],["tecnic","technique"],["tecnical","technical"],["tecnically","technically"],["tecnician","technician"],["tecnicians","technicians"],["tecnique","technique"],["tecniques","techniques"],["tedeous","tedious"],["tefine","define"],["teh","the"],["tehy","they"],["tekst","text"],["teksts","texts"],["telegramm","telegram"],["telelevision","television"],["televsion","television"],["telocom","telecom"],["telphony","telephony"],["temaplate","template"],["temaplates","templates"],["temeprature","temperature"],["temepratures","temperatures"],["temerature","temperature"],["teminal","terminal"],["teminals","terminals"],["teminate","terminate"],["teminated","terminated"],["teminating","terminating"],["temination","termination"],["temlate","template"],["temorarily","temporarily"],["temorary","temporary"],["tempalte","template"],["tempaltes","templates"],["temparal","temporal"],["tempararily","temporarily"],["temparary","temporary"],["temparate","temperate"],["temparature","temperature"],["temparily","temporarily"],["tempate","template"],["tempated","templated"],["tempates","templates"],["tempatied","templatized"],["tempation","temptation"],["tempatised","templatised"],["tempatized","templatized"],["tempature","temperature"],["tempdate","template"],["tempearture","temperature"],["tempeartures","temperatures"],["tempearure","temperature"],["tempelate","template"],["temperarily","temporarily"],["temperarure","temperature"],["temperary","temporary"],["temperatur","temperature"],["tempereature","temperature"],["temperment","temperament"],["tempertaure","temperature"],["temperture","temperature"],["templaced","templated"],["templaces","templates"],["templacing","templating"],["templaet","template"],["templat","template"],["templateas","templates"],["templete","template"],["templeted","templated"],["templetes","templates"],["templeting","templating"],["tempoaray","temporary"],["tempopary","temporary"],["temporaere","temporary"],["temporafy","temporary"],["temporalily","temporarily"],["temporarely","temporarily"],["temporarilly","temporarily"],["temporarilty","temporarily"],["temporarilu","temporary"],["temporarirly","temporarily"],["temporay","temporary"],["tempories","temporaries"],["temporily","temporarily"],["tempororaries","temporaries"],["tempororarily","temporarily"],["tempororary","temporary"],["temporories","temporaries"],["tempororily","temporarily"],["temporory","temporary"],["temporraies","temporaries"],["temporraily","temporarily"],["temporraries","temporaries"],["temporrarily","temporarily"],["temporrary","temporary"],["temporray","temporary"],["temporries","temporaries"],["temporrily","temporarily"],["temporry","temporary"],["temportal","temporal"],["temportaries","temporaries"],["temportarily","temporarily"],["temportary","temporary"],["tempory","temporary"],["temporyries","temporaries"],["temporyrily","temporarily"],["temporyry","temporary"],["tempraaily","temporarily"],["tempraal","temporal"],["tempraarily","temporarily"],["tempraarly","temporarily"],["tempraary","temporary"],["tempraay","temporary"],["tempraily","temporarily"],["tempral","temporal"],["temprament","temperament"],["tempramental","temperamental"],["tempraraily","temporarily"],["tempraral","temporal"],["temprararily","temporarily"],["temprararly","temporarily"],["temprarary","temporary"],["tempraray","temporary"],["temprarily","temporarily"],["temprature","temperature"],["tempratures","temperatures"],["tempray","temporary"],["tempreature","temperature"],["tempreatures","temperatures"],["temprement","temperament"],["tempremental","temperamental"],["temproaily","temporarily"],["temproal","temporal"],["temproarily","temporarily"],["temproarly","temporarily"],["temproary","temporary"],["temproay","temporary"],["temprol","temporal"],["temproment","temperament"],["tempromental","temperamental"],["temproraily","temporarily"],["temproral","temporal"],["temproraly","temporarily"],["temprorarily","temporarily"],["temprorarly","temporarily"],["temprorary","temporary"],["temproray","temporary"],["temprorily","temporarily"],["temprory","temporary"],["temproy","temporary"],["temptatation","temptation"],["tempurature","temperature"],["tempurture","temperature"],["temr","term"],["temrinal","terminal"],["temselves","themselves"],["temtation","temptation"],["tenacle","tentacle"],["tenacles","tentacles"],["tenanet","tenant"],["tenanets","tenants"],["tenatious","tenacious"],["tenatiously","tenaciously"],["tenative","tentative"],["tenatively","tentatively"],["tendacy","tendency"],["tendancies","tendencies"],["tendancy","tendency"],["tennisplayer","tennis player"],["tentaive","tentative"],["tentaively","tentatively"],["tention","tension"],["teplmate","template"],["teplmated","templated"],["teplmates","templates"],["tepmorarily","temporarily"],["teraform","terraform"],["teraformed","terraformed"],["teraforming","terraforming"],["teraforms","terraforms"],["terfform","terraform"],["terfformed","terraformed"],["terfforming","terraforming"],["terfforms","terraforms"],["teridactyl","pterodactyl"],["terific","terrific"],["terimnate","terminate"],["termial","terminal"],["termials","terminals"],["termianted","terminated"],["termimal","terminal"],["termimals","terminals"],["terminater","terminator"],["terminaters","terminators"],["terminats","terminates"],["termindate","terminate"],["termine","determine"],["termined","terminated"],["terminte","terminate"],["termintor","terminator"],["termniate","terminate"],["termniated","terminated"],["termniates","terminates"],["termniating","terminating"],["termniation","termination"],["termniations","terminations"],["termniator","terminator"],["termniators","terminators"],["termo","thermo"],["termostat","thermostat"],["termperatue","temperature"],["termperatues","temperatures"],["termperature","temperature"],["termperatures","temperatures"],["termplate","template"],["termplated","templated"],["termplates","templates"],["termporal","temporal"],["termporaries","temporaries"],["termporarily","temporarily"],["termporary","temporary"],["ternament","tournament"],["ternimate","terminate"],["terninal","terminal"],["terninals","terminals"],["terrable","terrible"],["terrestial","terrestrial"],["terrform","terraform"],["terrformed","terraformed"],["terrforming","terraforming"],["terrforms","terraforms"],["terriffic","terrific"],["terriories","territories"],["terriory","territory"],["territorist","terrorist"],["territoy","territory"],["terroist","terrorist"],["terurn","return"],["terurns","returns"],["tescase","testcase"],["tescases","testcases"],["tesellate","tessellate"],["tesellated","tessellated"],["tesellation","tessellation"],["tesellator","tessellator"],["tesited","tested"],["tessealte","tessellate"],["tessealted","tessellated"],["tesselatad","tessellated"],["tesselate","tessellate"],["tesselated","tessellated"],["tesselation","tessellation"],["tesselator","tessellator"],["tessleate","tessellate"],["tessleated","tessellated"],["tessleating","tessellating"],["tessleator","tessellator"],["testeing","testing"],["testiclular","testicular"],["testin","testing"],["testng","testing"],["testof","test of"],["testomony","testimony"],["testsing","testing"],["tetrahedran","tetrahedron"],["tetrahedrans","tetrahedrons"],["tetry","retry"],["tetss","tests"],["tetxture","texture"],["teusday","Tuesday"],["texchnically","technically"],["texline","textline"],["textfrme","textframe"],["texual","textual"],["texually","textually"],["texure","texture"],["texured","textured"],["texures","textures"],["texxt","text"],["tey","they"],["tghe","the"],["thansk","thanks"],["thansparent","transparent"],["thant","than"],["thare","there"],["that;s","that's"],["thats'","that's"],["thats","that's"],["thats;","that's"],["thck","thick"],["theard","thread"],["thearding","threading"],["theards","threads"],["theared","threaded"],["theather","theater"],["theef","thief"],["theer","there"],["theery","theory"],["theese","these"],["thefore","therefore"],["theif","thief"],["theifs","thieves"],["theive","thief"],["theives","thieves"],["themplate","template"],["themselces","themselves"],["themselfes","themselves"],["themselfs","themselves"],["themselvs","themselves"],["themslves","themselves"],["thenes","themes"],["thenn","then"],["theorectical","theoretical"],["theoreticall","theoretically"],["theoreticaly","theoretically"],["theorical","theoretical"],["theorically","theoretically"],["theoritical","theoretical"],["theoritically","theoretically"],["therafter","thereafter"],["therapudic","therapeutic"],["therby","thereby"],["thereads","threads"],["thereom","theorem"],["thererin","therein"],["theres","there's"],["thereshold","threshold"],["theresholds","thresholds"],["therfore","therefore"],["thermisor","thermistor"],["thermisors","thermistors"],["thermostast","thermostat"],["thermostasts","thermostats"],["therstat","thermostat"],["therwise","otherwise"],["theshold","threshold"],["thesholds","thresholds"],["thest","test"],["thetraedral","tetrahedral"],["thetrahedron","tetrahedron"],["thev","the"],["theves","thieves"],["thgat","that"],["thge","the"],["thhese","these"],["thhis","this"],["thid","this"],["thier","their"],["thign","thing"],["thigns","things"],["thigny","thingy"],["thigsn","things"],["thikn","think"],["thikness","thickness"],["thiknesses","thicknesses"],["thikns","thinks"],["thiks","thinks"],["thimngs","things"],["thinigs","things"],["thinkabel","thinkable"],["thinn","thin"],["thirtyth","thirtieth"],["this'd","this would"],["thisle","thistle"],["thist","this"],["thisy","this"],["thiunk","think"],["thjese","these"],["thme","them"],["thn","then"],["thna","than"],["thnak","thank"],["thnaks","thanks"],["thne","then"],["thnig","thing"],["thnigs","things"],["thonic","chthonic"],["thoroidal","toroidal"],["thoroughty","thoroughly"],["thoruoghly","thoroughly"],["thoses","those"],["thouch","touch"],["thoughout","throughout"],["thougth","thought"],["thounsands","thousands"],["thourghly","thoroughly"],["thourough","thorough"],["thouroughly","thoroughly"],["thq","the"],["thrad","thread"],["threadsave","threadsafe"],["threashold","threshold"],["threasholds","thresholds"],["threatend","threatened"],["threatment","treatment"],["threatments","treatments"],["threatning","threatening"],["thred","thread"],["threded","threaded"],["thredhold","threshold"],["threding","threading"],["threds","threads"],["three-dimenional","three-dimensional"],["three-dimenionsal","three-dimensional"],["threedimenional","three-dimensional"],["threedimenionsal","three-dimensional"],["threee","three"],["threhold","threshold"],["threrefore","therefore"],["threshhold","threshold"],["threshholds","thresholds"],["threshod","threshold"],["threshods","thresholds"],["threshol","threshold"],["thresold","threshold"],["thresshold","threshold"],["thrid","third"],["throen","thrown"],["throgh","through"],["throrough","thorough"],["throttoling","throttling"],["throug","through"],["througg","through"],["throughly","thoroughly"],["throughtout","throughout"],["througout","throughout"],["througt","through"],["througth","through"],["throuh","through"],["throuhg","through"],["throuhgout","throughout"],["throuhgput","throughput"],["throuth","through"],["throwgh","through"],["thrreshold","threshold"],["thrresholds","thresholds"],["thrue","through"],["thrugh","through"],["thruogh","through"],["thruoghout","throughout"],["thruoghput","throughput"],["thruout","throughout"],["thses","these"],["thsi","this"],["thsnk","thank"],["thsnked","thanked"],["thsnkful","thankful"],["thsnkfully","thankfully"],["thsnkfulness","thankfulness"],["thsnking","thanking"],["thsnks","thanks"],["thsnkyou","thank you"],["thsoe","those"],["thsose","those"],["thsould","should"],["thst","that"],["thta","that"],["thtat","that"],["thumbbnail","thumbnail"],["thumbnal","thumbnail"],["thumbnals","thumbnails"],["thundebird","thunderbird"],["thurday","Thursday"],["thurough","thorough"],["thurrow","thorough"],["thursdey","Thursday"],["thurver","further"],["thyat","that"],["tichened","thickened"],["tichness","thickness"],["tickness","thickness"],["tidibt","tidbit"],["tidibts","tidbits"],["tieing","tying"],["tiemout","timeout"],["tiemstamp","timestamp"],["tiemstamped","timestamped"],["tiemstamps","timestamps"],["tieth","tithe"],["tigger","trigger"],["tiggered","triggered"],["tiggering","triggering"],["tiggers","triggers"],["tighly","tightly"],["tightely","tightly"],["tigth","tight"],["tigthen","tighten"],["tigthened","tightened"],["tigthening","tightening"],["tigthens","tightens"],["tigthly","tightly"],["tihkn","think"],["tihs","this"],["tiitle","title"],["tillt","tilt"],["tillted","tilted"],["tillts","tilts"],["timdelta","timedelta"],["timedlta","timedelta"],["timeing","timing"],["timemout","timeout"],["timeot","timeout"],["timeoutted","timed out"],["timere","timer"],["timesamp","timestamp"],["timesamped","timestamped"],["timesamps","timestamps"],["timeschedule","time schedule"],["timespanp","timespan"],["timespanps","timespans"],["timestan","timespan"],["timestans","timespans"],["timestap","timestamp"],["timestaped","timestamped"],["timestaping","timestamping"],["timestaps","timestamps"],["timestemp","timestamp"],["timestemps","timestamps"],["timestmap","timestamp"],["timestmaps","timestamps"],["timetamp","timestamp"],["timetamps","timestamps"],["timmestamp","timestamp"],["timmestamps","timestamps"],["timne","time"],["timoeut","timeout"],["timout","timeout"],["timtout","timeout"],["timzeone","timezone"],["timzeones","timezones"],["timzezone","timezone"],["timzezones","timezones"],["tinterrupts","interrupts"],["tipically","typically"],["tirangle","triangle"],["tirangles","triangles"],["titel","title"],["titels","titles"],["titile","title"],["tittled","titled"],["tittling","titling"],["tje","the"],["tjhe","the"],["tjpanishad","upanishad"],["tkae","take"],["tkaes","takes"],["tkaing","taking"],["tlaking","talking"],["tmis","this"],["tne","the"],["toally","totally"],["tobbaco","tobacco"],["tobot","robot"],["toches","touches"],["tocksen","toxin"],["todya","today"],["toekn","token"],["togehter","together"],["togeter","together"],["togeterness","togetherness"],["toggel","toggle"],["toggeles","toggles"],["toggeling","toggling"],["toggels","toggles"],["toggleing","toggling"],["togheter","together"],["toghether","together"],["togle","toggle"],["togled","toggled"],["togling","toggling"],["toglle","toggle"],["toglled","toggled"],["togther","together"],["tolarable","tolerable"],["tolelerance","tolerance"],["tolen","token"],["tolens","tokens"],["toleranz","tolerance"],["tolerence","tolerance"],["tolerences","tolerances"],["tolerent","tolerant"],["tolernce","tolerance"],["Tolkein","Tolkien"],["tollerable","tolerable"],["tollerance","tolerance"],["tollerances","tolerances"],["tolorance","tolerance"],["tolorances","tolerances"],["tolorant","tolerant"],["tomatoe","tomato"],["tomatos","tomatoes"],["tommorow","tomorrow"],["tommorrow","tomorrow"],["tomorrrow","tomorrow"],["tongiht","tonight"],["tonihgt","tonight"],["tood","todo"],["toogle","toggle"],["toogling","toggling"],["tookits","toolkits"],["toolar","toolbar"],["toolsbox","toolbox"],["toom","tomb"],["toos","tools"],["tootonic","teutonic"],["topicaizer","topicalizer"],["topologie","topology"],["torerable","tolerable"],["toriodal","toroidal"],["tork","torque"],["tormenters","tormentors"],["tornadoe","tornado"],["torpeados","torpedoes"],["torpedos","torpedoes"],["tortilini","tortellini"],["tortise","tortoise"],["torward","toward"],["torwards","towards"],["totaly","totally"],["totat","total"],["totation","rotation"],["totats","totals"],["tothe","to the"],["tothiba","toshiba"],["totol","total"],["totorial","tutorial"],["totorials","tutorials"],["touble","trouble"],["toubles","troubles"],["toubling","troubling"],["toughtful","thoughtful"],["toughtly","tightly"],["toughts","thoughts"],["tounge","tongue"],["touple","tuple"],["towords","towards"],["towrad","toward"],["toxen","toxin"],["tpye","type"],["tpyed","typed"],["tpyes","types"],["tpyo","typo"],["trabsform","transform"],["traceablity","traceability"],["trackign","tracking"],["trackling","tracking"],["tracsode","transcode"],["tracsoded","transcoded"],["tracsoder","transcoder"],["tracsoders","transcoders"],["tracsodes","transcodes"],["tracsoding","transcoding"],["traddition","tradition"],["tradditional","traditional"],["tradditions","traditions"],["tradgic","tragic"],["tradionally","traditionally"],["traditilnal","traditional"],["traditiona","traditional"],["traditionaly","traditionally"],["traditionnal","traditional"],["traditionnally","traditionally"],["traditition","tradition"],["tradtional","traditional"],["tradtionally","traditionally"],["trafficed","trafficked"],["trafficing","trafficking"],["trafic","traffic"],["tragectory","trajectory"],["traget","target"],["trageted","targeted"],["trageting","targeting"],["tragets","targets"],["traige","triage"],["traiger","triager"],["traigers","triagers"],["traiges","triages"],["traiging","triaging"],["trailins","trailing"],["traingle","triangle"],["traingles","triangles"],["traingular","triangular"],["traingulate","triangulate"],["traingulated","triangulated"],["traingulates","triangulates"],["traingulating","triangulating"],["traingulation","triangulation"],["traingulations","triangulations"],["trainig","training"],["trainigs","training"],["trainng","training"],["trainngs","training"],["traked","tracked"],["traker","tracker"],["trakers","trackers"],["traking","tracking"],["tramsmit","transmit"],["tramsmits","transmits"],["tramsmitted","transmitted"],["tramsmitting","transmitting"],["tranaction","transaction"],["tranactional","transactional"],["tranactions","transactions"],["tranalating","translating"],["tranalation","translation"],["tranalations","translations"],["tranasction","transaction"],["tranasctions","transactions"],["tranceiver","transceiver"],["tranceivers","transceivers"],["trancendent","transcendent"],["trancending","transcending"],["tranclate","translate"],["trandional","traditional"],["tranfer","transfer"],["tranfered","transferred"],["tranfering","transferring"],["tranferred","transferred"],["tranfers","transfers"],["tranform","transform"],["tranformable","transformable"],["tranformation","transformation"],["tranformations","transformations"],["tranformative","transformative"],["tranformed","transformed"],["tranforming","transforming"],["tranforms","transforms"],["tranient","transient"],["tranients","transients"],["tranistion","transition"],["tranistioned","transitioned"],["tranistioning","transitioning"],["tranistions","transitions"],["tranition","transition"],["tranitioned","transitioned"],["tranitioning","transitioning"],["tranitions","transitions"],["tranlatable","translatable"],["tranlate","translate"],["tranlated","translated"],["tranlates","translates"],["tranlating","translating"],["tranlation","translation"],["tranlations","translations"],["tranlsation","translation"],["tranlsations","translations"],["tranmission","transmission"],["tranmist","transmit"],["tranmitted","transmitted"],["tranmitting","transmitting"],["tranparent","transparent"],["tranparently","transparently"],["tranport","transport"],["tranported","transported"],["tranporting","transporting"],["tranports","transports"],["transacion","transaction"],["transacions","transactions"],["transaciton","transaction"],["transacitons","transactions"],["transacrtion","transaction"],["transacrtions","transactions"],["transaction-spacific","transaction-specific"],["transactoin","transaction"],["transactoins","transactions"],["transalation","translation"],["transalations","translations"],["transalt","translate"],["transalte","translate"],["transalted","translated"],["transaltes","translates"],["transaltion","translation"],["transaltions","translations"],["transaltor","translator"],["transaltors","translators"],["transcendance","transcendence"],["transcendant","transcendent"],["transcendentational","transcendental"],["transcevier","transceiver"],["transciever","transceiver"],["transcievers","transceivers"],["transcocde","transcode"],["transcocded","transcoded"],["transcocder","transcoder"],["transcocders","transcoders"],["transcocdes","transcodes"],["transcocding","transcoding"],["transcocdings","transcodings"],["transconde","transcode"],["transconded","transcoded"],["transconder","transcoder"],["transconders","transcoders"],["transcondes","transcodes"],["transconding","transcoding"],["transcondings","transcodings"],["transcorde","transcode"],["transcorded","transcoded"],["transcorder","transcoder"],["transcorders","transcoders"],["transcordes","transcodes"],["transcording","transcoding"],["transcordings","transcodings"],["transcoser","transcoder"],["transcosers","transcoders"],["transction","transaction"],["transctions","transactions"],["transeint","transient"],["transending","transcending"],["transer","transfer"],["transesxuals","transsexuals"],["transferd","transferred"],["transfered","transferred"],["transfering","transferring"],["transferrd","transferred"],["transfom","transform"],["transfomation","transformation"],["transfomational","transformational"],["transfomations","transformations"],["transfomed","transformed"],["transfomer","transformer"],["transfomm","transform"],["transfoprmation","transformation"],["transforation","transformation"],["transforations","transformations"],["transformated","transformed"],["transformates","transforms"],["transformaton","transformation"],["transformatted","transformed"],["transfrom","transform"],["transfromation","transformation"],["transfromations","transformations"],["transfromed","transformed"],["transfromer","transformer"],["transfroming","transforming"],["transfroms","transforms"],["transiet","transient"],["transiets","transients"],["transision","transition"],["transisioning","transitioning"],["transisions","transitions"],["transisition","transition"],["transisitioned","transitioned"],["transisitioning","transitioning"],["transisitions","transitions"],["transistion","transition"],["transistioning","transitioning"],["transistions","transitions"],["transitionnal","transitional"],["transitionned","transitioned"],["transitionning","transitioning"],["transitionns","transitions"],["transiton","transition"],["transitoning","transitioning"],["transitons","transitions"],["transitor","transistor"],["transitors","transistors"],["translater","translator"],["translaters","translators"],["translatied","translated"],["translatoin","translation"],["translatoins","translations"],["translteration","transliteration"],["transmision","transmission"],["transmisive","transmissive"],["transmissable","transmissible"],["transmissione","transmission"],["transmist","transmit"],["transmited","transmitted"],["transmiter","transmitter"],["transmiters","transmitters"],["transmiting","transmitting"],["transmition","transmission"],["transmitsion","transmission"],["transmittd","transmitted"],["transmittion","transmission"],["transmitts","transmits"],["transmmit","transmit"],["transocde","transcode"],["transocded","transcoded"],["transocder","transcoder"],["transocders","transcoders"],["transocdes","transcodes"],["transocding","transcoding"],["transocdings","transcodings"],["transofrm","transform"],["transofrmation","transformation"],["transofrmations","transformations"],["transofrmed","transformed"],["transofrmer","transformer"],["transofrmers","transformers"],["transofrming","transforming"],["transofrms","transforms"],["transolate","translate"],["transolated","translated"],["transolates","translates"],["transolating","translating"],["transolation","translation"],["transolations","translations"],["transorm","transform"],["transormed","transformed"],["transorming","transforming"],["transorms","transforms"],["transpable","transposable"],["transpacencies","transparencies"],["transpacency","transparency"],["transpaernt","transparent"],["transpaerntly","transparently"],["transpancies","transparencies"],["transpancy","transparency"],["transpant","transplant"],["transparaent","transparent"],["transparaently","transparently"],["transparanceies","transparencies"],["transparancey","transparency"],["transparancies","transparencies"],["transparancy","transparency"],["transparanet","transparent"],["transparanetly","transparently"],["transparanies","transparencies"],["transparant","transparent"],["transparantly","transparently"],["transparany","transparency"],["transpararent","transparent"],["transpararently","transparently"],["transparcencies","transparencies"],["transparcency","transparency"],["transparcenies","transparencies"],["transparceny","transparency"],["transparecy","transparency"],["transpareny","transparency"],["transparities","transparencies"],["transparity","transparency"],["transparnecies","transparencies"],["transparnecy","transparency"],["transparnt","transparent"],["transparntly","transparently"],["transparren","transparent"],["transparrenly","transparently"],["transparrent","transparent"],["transparrently","transparently"],["transpart","transport"],["transparts","transports"],["transpatrent","transparent"],["transpatrently","transparently"],["transpencies","transparencies"],["transpency","transparency"],["transpeorted","transported"],["transperancies","transparencies"],["transperancy","transparency"],["transperant","transparent"],["transperantly","transparently"],["transperencies","transparencies"],["transperency","transparency"],["transperent","transparent"],["transperently","transparently"],["transporation","transportation"],["transportatin","transportation"],["transprencies","transparencies"],["transprency","transparency"],["transprent","transparent"],["transprently","transparently"],["transprot","transport"],["transproted","transported"],["transproting","transporting"],["transprots","transports"],["transprt","transport"],["transprted","transported"],["transprting","transporting"],["transprts","transports"],["transpsition","transposition"],["transsend","transcend"],["transtion","transition"],["transtioned","transitioned"],["transtioning","transitioning"],["transtions","transitions"],["transtition","transition"],["transtitioned","transitioned"],["transtitioning","transitioning"],["transtitions","transitions"],["transtorm","transform"],["transtormed","transformed"],["transvorm","transform"],["transvormation","transformation"],["transvormed","transformed"],["transvorming","transforming"],["transvorms","transforms"],["tranversing","traversing"],["trapeziod","trapezoid"],["trapeziodal","trapezoidal"],["trasaction","transaction"],["trascation","transaction"],["trasfer","transfer"],["trasferred","transferred"],["trasfers","transfers"],["trasform","transform"],["trasformable","transformable"],["trasformation","transformation"],["trasformations","transformations"],["trasformative","transformative"],["trasformed","transformed"],["trasformer","transformer"],["trasformers","transformers"],["trasforming","transforming"],["trasforms","transforms"],["traslalate","translate"],["traslalated","translated"],["traslalating","translating"],["traslalation","translation"],["traslalations","translations"],["traslate","translate"],["traslated","translated"],["traslates","translates"],["traslating","translating"],["traslation","translation"],["traslations","translations"],["traslucency","translucency"],["trasmission","transmission"],["trasmit","transmit"],["trasnaction","transaction"],["trasnfer","transfer"],["trasnfered","transferred"],["trasnferred","transferred"],["trasnfers","transfers"],["trasnform","transform"],["trasnformation","transformation"],["trasnformed","transformed"],["trasnformer","transformer"],["trasnformers","transformers"],["trasnforms","transforms"],["trasnlate","translate"],["trasnlated","translated"],["trasnlation","translation"],["trasnlations","translations"],["trasnparencies","transparencies"],["trasnparency","transparency"],["trasnparent","transparent"],["trasnport","transport"],["trasnports","transports"],["trasnsmit","transmit"],["trasparency","transparency"],["trasparent","transparent"],["trasparently","transparently"],["trasport","transport"],["trasportable","transportable"],["trasported","transported"],["trasporter","transporter"],["trasports","transports"],["traspose","transpose"],["trasposed","transposed"],["trasposing","transposing"],["trasposition","transposition"],["traspositions","transpositions"],["traved","traversed"],["traveersal","traversal"],["traveerse","traverse"],["traveersed","traversed"],["traveerses","traverses"],["traveersing","traversing"],["traveral","traversal"],["travercal","traversal"],["traverce","traverse"],["traverced","traversed"],["traverces","traverses"],["travercing","traversing"],["travere","traverse"],["travered","traversed"],["traveres","traverse"],["traveresal","traversal"],["traveresed","traversed"],["travereses","traverses"],["traveresing","traversing"],["travering","traversing"],["traverssal","traversal"],["travesal","traversal"],["travese","traverse"],["travesed","traversed"],["traveses","traverses"],["travesing","traversing"],["tre","tree"],["treate","treat"],["treatement","treatment"],["treatements","treatments"],["treates","treats"],["tremelo","tremolo"],["tremelos","tremolos"],["trempoline","trampoline"],["treshhold","threshold"],["treshold","threshold"],["tressle","trestle"],["treting","treating"],["trgistration","registration"],["trhe","the"],["triancle","triangle"],["triancles","triangles"],["trianed","trained"],["triange","triangle"],["triangel","triangle"],["triangels","triangles"],["trianglular","triangular"],["trianglutaion","triangulation"],["triangulataion","triangulation"],["triangultaion","triangulation"],["trianing","training"],["trianlge","triangle"],["trianlges","triangles"],["trians","trains"],["trigered","triggered"],["trigerred","triggered"],["trigerring","triggering"],["trigers","triggers"],["trigged","triggered"],["triggerd","triggered"],["triggeres","triggers"],["triggerred","triggered"],["triggerring","triggering"],["triggerrs","triggers"],["triggger","trigger"],["trignometric","trigonometric"],["trignometry","trigonometry"],["triguered","triggered"],["triked","tricked"],["trikery","trickery"],["triky","tricky"],["trilineal","trilinear"],["trimed","trimmed"],["trimmng","trimming"],["trinagle","triangle"],["trinagles","triangles"],["triniy","trinity"],["triology","trilogy"],["tripel","triple"],["tripeld","tripled"],["tripels","triples"],["tripple","triple"],["triuangulate","triangulate"],["trival","trivial"],["trivally","trivially"],["trivias","trivia"],["trivival","trivial"],["trnasfers","transfers"],["trnasmit","transmit"],["trnasmited","transmitted"],["trnasmits","transmits"],["trnsfer","transfer"],["trnsfered","transferred"],["trnsfers","transfers"],["troling","trolling"],["trottle","throttle"],["troubeshoot","troubleshoot"],["troubeshooted","troubleshooted"],["troubeshooter","troubleshooter"],["troubeshooting","troubleshooting"],["troubeshoots","troubleshoots"],["troublehshoot","troubleshoot"],["troublehshooting","troubleshooting"],["troublshoot","troubleshoot"],["troublshooting","troubleshooting"],["trought","through"],["troup","troupe"],["trriger","trigger"],["trrigered","triggered"],["trrigering","triggering"],["trrigers","triggers"],["trrigger","trigger"],["trriggered","triggered"],["trriggering","triggering"],["trriggers","triggers"],["trubble","trouble"],["trubbled","troubled"],["trubbles","troubles"],["truble","trouble"],["trubled","troubled"],["trubles","troubles"],["trubling","troubling"],["trucate","truncate"],["trucated","truncated"],["trucates","truncates"],["trucating","truncating"],["trucnate","truncate"],["trucnated","truncated"],["trucnating","truncating"],["truct","struct"],["truelly","truly"],["truely","truly"],["truied","tried"],["trully","truly"],["trun","turn"],["trunacted","truncated"],["truncat","truncate"],["trunctate","truncate"],["trunctated","truncated"],["trunctating","truncating"],["trunctation","truncation"],["truncted","truncated"],["truned","turned"],["truns","turns"],["trustworthly","trustworthy"],["trustworthyness","trustworthiness"],["trustworty","trustworthy"],["trustwortyness","trustworthiness"],["trustwothy","trustworthy"],["truw","true"],["tryed","tried"],["tryes","tries"],["tryig","trying"],["tryinng","trying"],["trys","tries"],["tryying","trying"],["ttests","tests"],["tthe","the"],["tuesdey","Tuesday"],["tuesdsy","Tuesday"],["tufure","future"],["tuhmbnail","thumbnail"],["tunelled","tunnelled"],["tunelling","tunneling"],["tunned","tuned"],["tunnell","tunnel"],["tuotiral","tutorial"],["tuotirals","tutorials"],["tupel","tuple"],["tupple","tuple"],["tupples","tuples"],["ture","true"],["turle","turtle"],["turly","truly"],["turorial","tutorial"],["turorials","tutorials"],["turtleh","turtle"],["turtlehs","turtles"],["turtorial","tutorial"],["turtorials","tutorials"],["Tuscon","Tucson"],["tusday","Tuesday"],["tuseday","Tuesday"],["tust","trust"],["tution","tuition"],["tutoriel","tutorial"],["tutoriels","tutorials"],["tweleve","twelve"],["twelth","twelfth"],["two-dimenional","two-dimensional"],["two-dimenionsal","two-dimensional"],["twodimenional","two-dimensional"],["twodimenionsal","two-dimensional"],["twon","town"],["twpo","two"],["tyep","type"],["tyhat","that"],["tyies","tries"],["tymecode","timecode"],["tyope","type"],["typcast","typecast"],["typcasting","typecasting"],["typcasts","typecasts"],["typcial","typical"],["typcially","typically"],["typechek","typecheck"],["typecheking","typechecking"],["typesrript","typescript"],["typicallly","typically"],["typicaly","typically"],["typicially","typically"],["typle","tuple"],["typles","tuples"],["typographc","typographic"],["typpe","type"],["typped","typed"],["typpes","types"],["typpical","typical"],["typpically","typically"],["tyranies","tyrannies"],["tyrany","tyranny"],["tyring","trying"],["tyrranies","tyrannies"],["tyrrany","tyranny"],["ubelieveble","unbelievable"],["ubelievebly","unbelievably"],["ubernetes","Kubernetes"],["ubiquitious","ubiquitous"],["ubiquituously","ubiquitously"],["ubitquitous","ubiquitous"],["ublisher","publisher"],["ubunut","Ubuntu"],["ubutu","Ubuntu"],["ubutunu","Ubuntu"],["udpatable","updatable"],["udpate","update"],["udpated","updated"],["udpater","updater"],["udpates","updates"],["udpating","updating"],["ueful","useful"],["uegister","unregister"],["uesd","used"],["ueses","uses"],["uesful","useful"],["uesfull","useful"],["uesfulness","usefulness"],["uesless","useless"],["ueslessness","uselessness"],["uest","quest"],["uests","quests"],["uffer","buffer"],["uffered","buffered"],["uffering","buffering"],["uffers","buffers"],["uggly","ugly"],["ugglyness","ugliness"],["uglyness","ugliness"],["uique","unique"],["uise","use"],["uisng","using"],["uites","suites"],["uknown","unknown"],["uknowns","unknowns"],["Ukranian","Ukrainian"],["uless","unless"],["ulimited","unlimited"],["ulter","alter"],["ulteration","alteration"],["ulterations","alterations"],["ultered","altered"],["ultering","altering"],["ulters","alters"],["ultimatly","ultimately"],["ultimely","ultimately"],["umambiguous","unambiguous"],["umark","unmark"],["umarked","unmarked"],["umbrealla","umbrella"],["uminportant","unimportant"],["umit","unit"],["umless","unless"],["ummark","unmark"],["umoutn","umount"],["un-complete","incomplete"],["unabailable","unavailable"],["unabale","unable"],["unabel","unable"],["unablet","unable"],["unacceptible","unacceptable"],["unaccesible","inaccessible"],["unaccessable","inaccessible"],["unacknowleged","unacknowledged"],["unacompanied","unaccompanied"],["unadvertantly","inadvertently"],["unadvertedly","inadvertently"],["unadvertent","inadvertent"],["unadvertently","inadvertently"],["unahppy","unhappy"],["unalllowed","unallowed"],["unambigious","unambiguous"],["unambigous","unambiguous"],["unambigously","unambiguously"],["unamed","unnamed"],["unanimuous","unanimous"],["unanymous","unanimous"],["unappretiated","unappreciated"],["unappretiative","unappreciative"],["unapprieciated","unappreciated"],["unapprieciative","unappreciative"],["unapretiated","unappreciated"],["unapretiative","unappreciative"],["unaquired","unacquired"],["unarchving","unarchiving"],["unassing","unassign"],["unassinged","unassigned"],["unassinging","unassigning"],["unassings","unassigns"],["unathenticated","unauthenticated"],["unathorised","unauthorised"],["unathorized","unauthorized"],["unatteded","unattended"],["unauthenicated","unauthenticated"],["unauthenticed","unauthenticated"],["unavaiable","unavailable"],["unavaialable","unavailable"],["unavaialbale","unavailable"],["unavaialbe","unavailable"],["unavaialbel","unavailable"],["unavaialbility","unavailability"],["unavaialble","unavailable"],["unavaible","unavailable"],["unavailabel","unavailable"],["unavailiability","unavailability"],["unavailible","unavailable"],["unavaliable","unavailable"],["unavaoidable","unavoidable"],["unavilable","unavailable"],["unballance","unbalance"],["unbeknowst","unbeknownst"],["unbeleifable","unbelievable"],["unbeleivable","unbelievable"],["unbeliefable","unbelievable"],["unbelivable","unbelievable"],["unbeliveable","unbelievable"],["unbeliveably","unbelievably"],["unbelivebly","unbelievably"],["unborned","unborn"],["unbouind","unbound"],["unbouinded","unbounded"],["unboun","unbound"],["unbounad","unbound"],["unbounaded","unbounded"],["unbouned","unbounded"],["unbounnd","unbound"],["unbounnded","unbounded"],["unbouund","unbound"],["unbouunded","unbounded"],["uncahnged","unchanged"],["uncalcualted","uncalculated"],["unce","once"],["uncehck","uncheck"],["uncehcked","unchecked"],["uncerain","uncertain"],["uncerainties","uncertainties"],["uncerainty","uncertainty"],["uncertaincy","uncertainty"],["uncertainities","uncertainties"],["uncertainity","uncertainty"],["uncessarily","unnecessarily"],["uncetain","uncertain"],["uncetainties","uncertainties"],["uncetainty","uncertainty"],["unchache","uncache"],["unchached","uncached"],["unchaged","unchanged"],["unchainged","unchanged"],["unchallengable","unchallengeable"],["unchaned","unchanged"],["unchaneged","unchanged"],["unchangable","unchangeable"],["uncheked","unchecked"],["unchenged","unchanged"],["uncognized","unrecognized"],["uncoment","uncomment"],["uncomented","uncommented"],["uncomenting","uncommenting"],["uncoments","uncomments"],["uncomitted","uncommitted"],["uncommited","uncommitted"],["uncommment","uncomment"],["uncommmented","uncommented"],["uncommmenting","uncommenting"],["uncommments","uncomments"],["uncommmitted","uncommitted"],["uncommmon","uncommon"],["uncommpresed","uncompressed"],["uncommpresion","uncompression"],["uncommpressd","uncompressed"],["uncommpressed","uncompressed"],["uncommpression","uncompression"],["uncommtited","uncommitted"],["uncomon","uncommon"],["uncompetetive","uncompetitive"],["uncompetive","uncompetitive"],["uncomplete","incomplete"],["uncompleteness","incompleteness"],["uncompletness","incompleteness"],["uncompres","uncompress"],["uncompresed","uncompressed"],["uncompreses","uncompresses"],["uncompresing","uncompressing"],["uncompresor","uncompressor"],["uncompresors","uncompressors"],["uncompressible","incompressible"],["uncomprss","uncompress"],["unconcious","unconscious"],["unconciousness","unconsciousness"],["unconcistencies","inconsistencies"],["unconcistency","inconsistency"],["unconcistent","inconsistent"],["uncondisional","unconditional"],["uncondisionaly","unconditionally"],["uncondisionnal","unconditional"],["uncondisionnaly","unconditionally"],["unconditial","unconditional"],["unconditially","unconditionally"],["unconditialy","unconditionally"],["unconditianal","unconditional"],["unconditianally","unconditionally"],["unconditianaly","unconditionally"],["unconditinally","unconditionally"],["unconditinaly","unconditionally"],["unconditionaly","unconditionally"],["unconditionnal","unconditional"],["unconditionnally","unconditionally"],["unconditionnaly","unconditionally"],["uncondtional","unconditional"],["uncondtionally","unconditionally"],["unconfiged","unconfigured"],["unconfortability","discomfort"],["unconsisntency","inconsistency"],["unconsistent","inconsistent"],["uncontitutional","unconstitutional"],["uncontrained","unconstrained"],["uncontrolable","uncontrollable"],["unconvential","unconventional"],["unconventionnal","unconventional"],["uncorectly","incorrectly"],["uncorelated","uncorrelated"],["uncorrect","incorrect"],["uncorrectly","incorrectly"],["uncorrolated","uncorrelated"],["uncoverted","unconverted"],["uncrypted","unencrypted"],["undecideable","undecidable"],["undefied","undefined"],["undefien","undefine"],["undefiend","undefined"],["undefinied","undefined"],["undeflow","underflow"],["undeflows","underflows"],["undefuned","undefined"],["undelying","underlying"],["underfiend","undefined"],["underfined","undefined"],["underfow","underflow"],["underfowed","underflowed"],["underfowing","underflowing"],["underfows","underflows"],["underlayed","underlaid"],["underlaying","underlying"],["underlflow","underflow"],["underlflowed","underflowed"],["underlflowing","underflowing"],["underlflows","underflows"],["underlfow","underflow"],["underlfowed","underflowed"],["underlfowing","underflowing"],["underlfows","underflows"],["underlow","underflow"],["underlowed","underflowed"],["underlowing","underflowing"],["underlows","underflows"],["underlyng","underlying"],["underneeth","underneath"],["underrrun","underrun"],["undersacn","underscan"],["understadn","understand"],["understadnable","understandable"],["understadning","understanding"],["understadns","understands"],["understoon","understood"],["understoud","understood"],["undertand","understand"],["undertandable","understandable"],["undertanded","understood"],["undertanding","understanding"],["undertands","understands"],["undertsand","understand"],["undertsanding","understanding"],["undertsands","understands"],["undertsood","understood"],["undertstand","understand"],["undertstands","understands"],["underun","underrun"],["underuns","underruns"],["underware","underwear"],["underying","underlying"],["underyling","underlying"],["undescore","underscore"],["undescored","underscored"],["undescores","underscores"],["undesireable","undesirable"],["undesitable","undesirable"],["undestand","understand"],["undestood","understood"],["undet","under"],["undetecable","undetectable"],["undetstand","understand"],["undetware","underwear"],["undetwater","underwater"],["undfine","undefine"],["undfined","undefined"],["undfines","undefines"],["undistinghable","indistinguishable"],["undocummented","undocumented"],["undorder","unorder"],["undordered","unordered"],["undoubtely","undoubtedly"],["undreground","underground"],["undupplicated","unduplicated"],["uneccesary","unnecessary"],["uneccessarily","unnecessarily"],["uneccessary","unnecessary"],["unecessarily","unnecessarily"],["unecessary","unnecessary"],["uneforceable","unenforceable"],["uneform","uniform"],["unencrpt","unencrypt"],["unencrpted","unencrypted"],["unenforcable","unenforceable"],["unepected","unexpected"],["unepectedly","unexpectedly"],["unequalities","inequalities"],["unequality","inequality"],["uner","under"],["unesacpe","unescape"],["unesacped","unescaped"],["unessecarry","unnecessary"],["unessecary","unnecessary"],["unevaluted","unevaluated"],["unexcected","unexpected"],["unexcectedly","unexpectedly"],["unexcpected","unexpected"],["unexcpectedly","unexpectedly"],["unexecpted","unexpected"],["unexecptedly","unexpectedly"],["unexected","unexpected"],["unexectedly","unexpectedly"],["unexepcted","unexpected"],["unexepctedly","unexpectedly"],["unexepected","unexpected"],["unexepectedly","unexpectedly"],["unexpacted","unexpected"],["unexpactedly","unexpectedly"],["unexpcted","unexpected"],["unexpctedly","unexpectedly"],["unexpecetd","unexpected"],["unexpecetdly","unexpectedly"],["unexpect","unexpected"],["unexpectd","unexpected"],["unexpectdly","unexpectedly"],["unexpecte","unexpected"],["unexpectely","unexpectedly"],["unexpectend","unexpected"],["unexpectendly","unexpectedly"],["unexpectly","unexpectedly"],["unexpeected","unexpected"],["unexpeectedly","unexpectedly"],["unexpepected","unexpected"],["unexpepectedly","unexpectedly"],["unexpepted","unexpected"],["unexpeptedly","unexpectedly"],["unexpercted","unexpected"],["unexperctedly","unexpectedly"],["unexpested","unexpected"],["unexpestedly","unexpectedly"],["unexpetced","unexpected"],["unexpetcedly","unexpectedly"],["unexpetct","unexpected"],["unexpetcted","unexpected"],["unexpetctedly","unexpectedly"],["unexpetctly","unexpectedly"],["unexpetect","unexpected"],["unexpetected","unexpected"],["unexpetectedly","unexpectedly"],["unexpetectly","unexpectedly"],["unexpeted","unexpected"],["unexpetedly","unexpectedly"],["unexpexcted","unexpected"],["unexpexctedly","unexpectedly"],["unexpexted","unexpected"],["unexpextedly","unexpectedly"],["unexspected","unexpected"],["unexspectedly","unexpectedly"],["unfilp","unflip"],["unfilpped","unflipped"],["unfilpping","unflipping"],["unfilps","unflips"],["unflaged","unflagged"],["unflexible","inflexible"],["unforetunately","unfortunately"],["unforgetable","unforgettable"],["unforgiveable","unforgivable"],["unformated","unformatted"],["unforseen","unforeseen"],["unforttunately","unfortunately"],["unfortuante","unfortunate"],["unfortuantely","unfortunately"],["unfortunaltely","unfortunately"],["unfortunaly","unfortunately"],["unfortunat","unfortunate"],["unfortunatelly","unfortunately"],["unfortunatetly","unfortunately"],["unfortunatley","unfortunately"],["unfortunatly","unfortunately"],["unfortunetly","unfortunately"],["unfortuntaly","unfortunately"],["unforunate","unfortunate"],["unforunately","unfortunately"],["unforutunate","unfortunate"],["unforutunately","unfortunately"],["unfotunately","unfortunately"],["unfourtunately","unfortunately"],["unfourtunetly","unfortunately"],["unfurtunately","unfortunately"],["ungeneralizeable","ungeneralizable"],["ungly","ugly"],["unhandeled","unhandled"],["unhilight","unhighlight"],["unhilighted","unhighlighted"],["unhilights","unhighlights"],["Unicde","Unicode"],["unich","unix"],["unidentifiedly","unidentified"],["unidimensionnal","unidimensional"],["unifform","uniform"],["unifforms","uniforms"],["unifiy","unify"],["uniformely","uniformly"],["unifrom","uniform"],["unifromed","uniformed"],["unifromity","uniformity"],["unifroms","uniforms"],["unigned","unsigned"],["unihabited","uninhabited"],["unilateraly","unilaterally"],["unilatreal","unilateral"],["unilatreally","unilaterally"],["unimpemented","unimplemented"],["unimplemeneted","unimplemented"],["unimplimented","unimplemented"],["uninitailised","uninitialised"],["uninitailized","uninitialized"],["uninitalise","uninitialise"],["uninitalised","uninitialised"],["uninitalises","uninitialises"],["uninitalize","uninitialize"],["uninitalized","uninitialized"],["uninitalizes","uninitializes"],["uniniteresting","uninteresting"],["uninitializaed","uninitialized"],["uninitialse","uninitialise"],["uninitialsed","uninitialised"],["uninitialses","uninitialises"],["uninitialze","uninitialize"],["uninitialzed","uninitialized"],["uninitialzes","uninitializes"],["uninstalable","uninstallable"],["uninstatiated","uninstantiated"],["uninstlal","uninstall"],["uninstlalation","uninstallation"],["uninstlalations","uninstallations"],["uninstlaled","uninstalled"],["uninstlaler","uninstaller"],["uninstlaling","uninstalling"],["uninstlals","uninstalls"],["unint8_t","uint8_t"],["unintelligable","unintelligible"],["unintentially","unintentionally"],["uninteressting","uninteresting"],["uninterpretted","uninterpreted"],["uninterruped","uninterrupted"],["uninterruptable","uninterruptible"],["unintersting","uninteresting"],["uninteruppted","uninterrupted"],["uninterupted","uninterrupted"],["unintesting","uninteresting"],["unintialised","uninitialised"],["unintialized","uninitialized"],["unintiallised","uninitialised"],["unintiallized","uninitialized"],["unintialsied","uninitialised"],["unintialzied","uninitialized"],["unio","union"],["unios","unions"],["uniqe","unique"],["uniqu","unique"],["uniquness","uniqueness"],["unistalled","uninstalled"],["uniterrupted","uninterrupted"],["UnitesStates","UnitedStates"],["unitialize","uninitialize"],["unitialized","uninitialized"],["unitilised","uninitialised"],["unitilising","uninitialising"],["unitilities","utilities"],["unitility","utility"],["unitilized","uninitialized"],["unitilizing","uninitializing"],["unitilties","utilities"],["unitilty","utility"],["unititialized","uninitialized"],["unitl","until"],["unitled","untitled"],["unitss","units"],["univeral","universal"],["univerally","universally"],["univeriality","universality"],["univeristies","universities"],["univeristy","university"],["univerities","universities"],["univerity","university"],["universial","universal"],["universiality","universality"],["universirty","university"],["universtal","universal"],["universtiy","university"],["univesities","universities"],["univesity","university"],["univiersal","universal"],["univrsal","universal"],["unkmown","unknown"],["unknon","unknown"],["unknonw","unknown"],["unknonwn","unknown"],["unknonws","unknowns"],["unknwn","unknown"],["unknwns","unknowns"],["unknwoing","unknowing"],["unknwoingly","unknowingly"],["unknwon","unknown"],["unknwons","unknowns"],["unknwown","unknown"],["unknwowns","unknowns"],["unkonwn","unknown"],["unkonwns","unknowns"],["unkown","unknown"],["unkowns","unknowns"],["unkwown","unknown"],["unlcear","unclear"],["unles","unless"],["unlikey","unlikely"],["unlikley","unlikely"],["unlimeted","unlimited"],["unlimitied","unlimited"],["unlimted","unlimited"],["unline","unlike"],["unloadins","unloading"],["unmached","unmatched"],["unmainted","unmaintained"],["unmaping","unmapping"],["unmappend","unmapped"],["unmarsalling","unmarshalling"],["unmaximice","unmaximize"],["unmistakeably","unmistakably"],["unmodfide","unmodified"],["unmodfided","unmodified"],["unmodfied","unmodified"],["unmodfieid","unmodified"],["unmodfified","unmodified"],["unmodfitied","unmodified"],["unmodifable","unmodifiable"],["unmodifed","unmodified"],["unmoutned","unmounted"],["unnacquired","unacquired"],["unncessary","unnecessary"],["unneccecarily","unnecessarily"],["unneccecary","unnecessary"],["unneccesarily","unnecessarily"],["unneccesary","unnecessary"],["unneccessarily","unnecessarily"],["unneccessary","unnecessary"],["unneceesarily","unnecessarily"],["unnecesarily","unnecessarily"],["unnecesarrily","unnecessarily"],["unnecesarry","unnecessary"],["unnecesary","unnecessary"],["unnecesasry","unnecessary"],["unnecessar","unnecessary"],["unnecessarilly","unnecessarily"],["unnecesserily","unnecessarily"],["unnecessery","unnecessary"],["unnecessiarlly","unnecessarily"],["unnecssary","unnecessary"],["unnedded","unneeded"],["unneded","unneeded"],["unneedingly","unnecessarily"],["unnescessarily","unnecessarily"],["unnescessary","unnecessary"],["unnesesarily","unnecessarily"],["unnessarily","unnecessarily"],["unnessasary","unnecessary"],["unnessecarily","unnecessarily"],["unnessecarry","unnecessary"],["unnessecary","unnecessary"],["unnessesarily","unnecessarily"],["unnessesary","unnecessary"],["unnessessarily","unnecessarily"],["unnessessary","unnecessary"],["unning","running"],["unnnecessary","unnecessary"],["unnown","unknown"],["unnowns","unknowns"],["unnsupported","unsupported"],["unnused","unused"],["unobstrusive","unobtrusive"],["unocde","Unicode"],["unoffical","unofficial"],["unoin","union"],["unompress","uncompress"],["unoperational","nonoperational"],["unorderd","unordered"],["unoredered","unordered"],["unorotated","unrotated"],["unoticeable","unnoticeable"],["unpacke","unpacked"],["unpacket","unpacked"],["unparseable","unparsable"],["unpertubated","unperturbed"],["unperturb","unperturbed"],["unperturbated","unperturbed"],["unperturbe","unperturbed"],["unplease","displease"],["unpleasent","unpleasant"],["unplesant","unpleasant"],["unplesent","unpleasant"],["unprecendented","unprecedented"],["unprecidented","unprecedented"],["unprecise","imprecise"],["unpredicatable","unpredictable"],["unpredicatble","unpredictable"],["unpredictablity","unpredictability"],["unpredictible","unpredictable"],["unpriviledged","unprivileged"],["unpriviliged","unprivileged"],["unprmopted","unprompted"],["unqiue","unique"],["unqoute","unquote"],["unqouted","unquoted"],["unqoutes","unquotes"],["unqouting","unquoting"],["unque","unique"],["unreacahable","unreachable"],["unreacahble","unreachable"],["unreacheable","unreachable"],["unrealeased","unreleased"],["unreasonabily","unreasonably"],["unrechable","unreachable"],["unrecocnized","unrecognized"],["unrecoginized","unrecognized"],["unrecogized","unrecognized"],["unrecognixed","unrecognized"],["unrecongized","unrecognized"],["unreconized","unrecognized"],["unrecovable","unrecoverable"],["unrecovarable","unrecoverable"],["unrecoverd","unrecovered"],["unregester","unregister"],["unregiste","unregister"],["unregisted","unregistered"],["unregisteing","registering"],["unregisterd","unregistered"],["unregistert","unregistered"],["unregistes","unregisters"],["unregisting","unregistering"],["unregistred","unregistered"],["unregistrs","unregisters"],["unregiter","unregister"],["unregiters","unregisters"],["unregnized","unrecognized"],["unregognised","unrecognised"],["unregsiter","unregister"],["unregsitered","unregistered"],["unregsitering","unregistering"],["unregsiters","unregisters"],["unregster","unregister"],["unregstered","unregistered"],["unregstering","unregistering"],["unregsters","unregisters"],["unreigister","unregister"],["unreigster","unregister"],["unreigstered","unregistered"],["unreigstering","unregistering"],["unreigsters","unregisters"],["unrelatd","unrelated"],["unreleated","unrelated"],["unrelted","unrelated"],["unrelyable","unreliable"],["unrelying","underlying"],["unrepentent","unrepentant"],["unrepetant","unrepentant"],["unrepetent","unrepentant"],["unreplacable","unreplaceable"],["unreplacalbe","unreplaceable"],["unreproducable","unreproducible"],["unresgister","unregister"],["unresgisterd","unregistered"],["unresgistered","unregistered"],["unresgisters","unregisters"],["unresolvabvle","unresolvable"],["unresonable","unreasonable"],["unresposive","unresponsive"],["unrestrcited","unrestricted"],["unrgesiter","unregister"],["unroated","unrotated"],["unrosponsive","unresponsive"],["unsanfe","unsafe"],["unsccessful","unsuccessful"],["unscubscribe","subscribe"],["unscubscribed","subscribed"],["unsearcahble","unsearchable"],["unselct","unselect"],["unselcted","unselected"],["unselctes","unselects"],["unselcting","unselecting"],["unselcts","unselects"],["unselecgt","unselect"],["unselecgted","unselected"],["unselecgtes","unselects"],["unselecgting","unselecting"],["unselecgts","unselects"],["unselectabe","unselectable"],["unsepcified","unspecified"],["unseting","unsetting"],["unsetset","unset"],["unsettin","unsetting"],["unsharable","unshareable"],["unshfit","unshift"],["unshfited","unshifted"],["unshfiting","unshifting"],["unshfits","unshifts"],["unsiged","unsigned"],["unsigend","unsigned"],["unsignd","unsigned"],["unsignificant","insignificant"],["unsinged","unsigned"],["unsoclicited","unsolicited"],["unsolicitied","unsolicited"],["unsolicted","unsolicited"],["unsollicited","unsolicited"],["unspecificed","unspecified"],["unspecifiec","unspecific"],["unspecifiecd","unspecified"],["unspecifieced","unspecified"],["unspefcifieid","unspecified"],["unspefeid","unspecified"],["unspeficed","unspecified"],["unspeficeid","unspecified"],["unspeficialleid","unspecified"],["unspeficiallied","unspecified"],["unspeficiallifed","unspecified"],["unspeficied","unspecified"],["unspeficieid","unspecified"],["unspeficifed","unspecified"],["unspeficifeid","unspecified"],["unspeficified","unspecified"],["unspeficififed","unspecified"],["unspeficiied","unspecified"],["unspeficiifed","unspecified"],["unspeficilleid","unspecified"],["unspeficillied","unspecified"],["unspeficillifed","unspecified"],["unspeficiteid","unspecified"],["unspeficitied","unspecified"],["unspeficitifed","unspecified"],["unspefied","unspecified"],["unspefifed","unspecified"],["unspefifeid","unspecified"],["unspefified","unspecified"],["unspefififed","unspecified"],["unspefiied","unspecified"],["unspefiifeid","unspecified"],["unspefiified","unspecified"],["unspefiififed","unspecified"],["unspefixeid","unspecified"],["unspefixied","unspecified"],["unspefixifed","unspecified"],["unspported","unsupported"],["unstabel","unstable"],["unstalbe","unstable"],["unsuable","unusable"],["unsual","unusual"],["unsubscibe","unsubscribe"],["unsubscibed","unsubscribed"],["unsubscibing","unsubscribing"],["unsubscirbe","unsubscribe"],["unsubscirbed","unsubscribed"],["unsubscirbing","unsubscribing"],["unsubscirption","unsubscription"],["unsubscirptions","unsubscriptions"],["unsubscritpion","unsubscription"],["unsubscritpions","unsubscriptions"],["unsubscritpiton","unsubscription"],["unsubscritpitons","unsubscriptions"],["unsubscritption","unsubscription"],["unsubscritptions","unsubscriptions"],["unsubstanciated","unsubstantiated"],["unsucccessful","unsuccessful"],["unsucccessfully","unsuccessfully"],["unsucccessul","unsuccessful"],["unsucccessully","unsuccessfully"],["unsuccee","unsuccessful"],["unsucceed","unsuccessful"],["unsucceedde","unsuccessful"],["unsucceeded","unsuccessful"],["unsucceeds","unsuccessful"],["unsucceeed","unsuccessful"],["unsuccees","unsuccessful"],["unsuccesful","unsuccessful"],["unsuccesfull","unsuccessful"],["unsuccesfully","unsuccessfully"],["unsuccess","unsuccessful"],["unsuccessfull","unsuccessful"],["unsuccessfullly","unsuccessfully"],["unsucesful","unsuccessful"],["unsucesfull","unsuccessful"],["unsucesfully","unsuccessfully"],["unsucesfuly","unsuccessfully"],["unsucessefully","unsuccessfully"],["unsucessflly","unsuccessfully"],["unsucessfually","unsuccessfully"],["unsucessful","unsuccessful"],["unsucessfull","unsuccessful"],["unsucessfully","unsuccessfully"],["unsucessfuly","unsuccessfully"],["unsucesssful","unsuccessful"],["unsucesssfull","unsuccessful"],["unsucesssfully","unsuccessfully"],["unsucesssfuly","unsuccessfully"],["unsucessufll","unsuccessful"],["unsucessuflly","unsuccessfully"],["unsucessully","unsuccessfully"],["unsued","unused"],["unsufficient","insufficient"],["unsuportable","unsupportable"],["unsuported","unsupported"],["unsupport","unsupported"],["unsupproted","unsupported"],["unsupress","unsuppress"],["unsupressed","unsuppressed"],["unsupresses","unsuppresses"],["unsuprised","unsurprised"],["unsuprising","unsurprising"],["unsuprisingly","unsurprisingly"],["unsuprized","unsurprised"],["unsuprizing","unsurprising"],["unsuprizingly","unsurprisingly"],["unsurprized","unsurprised"],["unsurprizing","unsurprising"],["unsurprizingly","unsurprisingly"],["unsused","unused"],["unswithced","unswitched"],["unsychronise","unsynchronise"],["unsychronised","unsynchronised"],["unsychronize","unsynchronize"],["unsychronized","unsynchronized"],["untargetted","untargeted"],["unter","under"],["untill","until"],["untintuitive","unintuitive"],["untoched","untouched"],["untqueue","unqueue"],["untrached","untracked"],["untranslateable","untranslatable"],["untrasformed","untransformed"],["untrasposed","untransposed"],["untrustworty","untrustworthy"],["unued","unused"],["ununsed","unused"],["ununsual","unusual"],["unusal","unusual"],["unusally","unusually"],["unuseable","unusable"],["unuseful","useless"],["unusre","unsure"],["unusuable","unusable"],["unusued","unused"],["unvailable","unavailable"],["unvalid","invalid"],["unvalidate","invalidate"],["unverfified","unverified"],["unversionned","unversioned"],["unversoned","unversioned"],["unviersity","university"],["unwarrented","unwarranted"],["unweildly","unwieldy"],["unwieldly","unwieldy"],["unwraped","unwrapped"],["unwrritten","unwritten"],["unx","unix"],["unxepected","unexpected"],["unxepectedly","unexpectedly"],["unxpected","unexpected"],["unziped","unzipped"],["upadate","update"],["upadated","updated"],["upadater","updater"],["upadates","updates"],["upadating","updating"],["upadte","update"],["upadted","updated"],["upadter","updater"],["upadters","updaters"],["upadtes","updates"],["upagrade","upgrade"],["upagraded","upgraded"],["upagrades","upgrades"],["upagrading","upgrading"],["upate","update"],["upated","updated"],["upater","updater"],["upates","updates"],["upating","updating"],["upcomming","upcoming"],["updaing","updating"],["updat","update"],["updateded","updated"],["updateed","updated"],["updatees","updates"],["updateing","updating"],["updatess","updates"],["updatig","updating"],["updats","updates"],["updgrade","upgrade"],["updgraded","upgraded"],["updgrades","upgrades"],["updgrading","upgrading"],["updrage","upgrade"],["updraged","upgraded"],["updrages","upgrades"],["updraging","upgrading"],["updte","update"],["upercase","uppercase"],["uperclass","upperclass"],["upgade","upgrade"],["upgaded","upgraded"],["upgades","upgrades"],["upgading","upgrading"],["upgarade","upgrade"],["upgaraded","upgraded"],["upgarades","upgrades"],["upgarading","upgrading"],["upgarde","upgrade"],["upgarded","upgraded"],["upgardes","upgrades"],["upgarding","upgrading"],["upgarte","upgrade"],["upgarted","upgraded"],["upgartes","upgrades"],["upgarting","upgrading"],["upgerade","upgrade"],["upgeraded","upgraded"],["upgerades","upgrades"],["upgerading","upgrading"],["upgradablilty","upgradability"],["upgradde","upgrade"],["upgradded","upgraded"],["upgraddes","upgrades"],["upgradding","upgrading"],["upgradei","upgrade"],["upgradingn","upgrading"],["upgrate","upgrade"],["upgrated","upgraded"],["upgrates","upgrades"],["upgrating","upgrading"],["upholstry","upholstery"],["uplad","upload"],["upladaded","uploaded"],["upladed","uploaded"],["uplader","uploader"],["upladers","uploaders"],["uplading","uploading"],["uplads","uploads"],["uplaod","upload"],["uplaodaded","uploaded"],["uplaoded","uploaded"],["uplaoder","uploader"],["uplaoders","uploaders"],["uplaodes","uploads"],["uplaoding","uploading"],["uplaods","uploads"],["upliad","upload"],["uplod","upload"],["uplodaded","uploaded"],["uploded","uploaded"],["uploder","uploader"],["uploders","uploaders"],["uploding","uploading"],["uplods","uploads"],["uppler","upper"],["uppon","upon"],["upported","supported"],["upporterd","supported"],["uppper","upper"],["uppstream","upstream"],["uppstreamed","upstreamed"],["uppstreamer","upstreamer"],["uppstreaming","upstreaming"],["uppstreams","upstreams"],["uppwards","upwards"],["uprade","upgrade"],["upraded","upgraded"],["uprades","upgrades"],["uprading","upgrading"],["uprgade","upgrade"],["uprgaded","upgraded"],["uprgades","upgrades"],["uprgading","upgrading"],["upsream","upstream"],["upsreamed","upstreamed"],["upsreamer","upstreamer"],["upsreaming","upstreaming"],["upsreams","upstreams"],["upsrteam","upstream"],["upsrteamed","upstreamed"],["upsrteamer","upstreamer"],["upsrteaming","upstreaming"],["upsrteams","upstreams"],["upsteam","upstream"],["upsteamed","upstreamed"],["upsteamer","upstreamer"],["upsteaming","upstreaming"],["upsteams","upstreams"],["upsteram","upstream"],["upsteramed","upstreamed"],["upsteramer","upstreamer"],["upsteraming","upstreaming"],["upsterams","upstreams"],["upstread","upstream"],["upstreamedd","upstreamed"],["upstreammed","upstreamed"],["upstreammer","upstreamer"],["upstreamming","upstreaming"],["upstreem","upstream"],["upstreemed","upstreamed"],["upstreemer","upstreamer"],["upstreeming","upstreaming"],["upstreems","upstreams"],["upstrema","upstream"],["upsupported","unsupported"],["uptadeable","updatable"],["uptdate","update"],["uptim","uptime"],["uptions","options"],["uptodate","up-to-date"],["uptodateness","up-to-dateness"],["uptream","upstream"],["uptreamed","upstreamed"],["uptreamer","upstreamer"],["uptreaming","upstreaming"],["uptreams","upstreams"],["uqest","quest"],["uqests","quests"],["urrlib","urllib"],["usag","usage"],["usal","usual"],["usally","usually"],["uscaled","unscaled"],["useability","usability"],["useable","usable"],["useage","usage"],["usebility","usability"],["useble","usable"],["useed","used"],["usees","uses"],["usefl","useful"],["usefule","useful"],["usefulfor","useful for"],["usefull","useful"],["usefullness","usefulness"],["usefult","useful"],["usefuly","usefully"],["usefutl","useful"],["usege","usage"],["useing","using"],["user-defiend","user-defined"],["user-defiened","user-defined"],["usera","users"],["userame","username"],["userames","usernames"],["userapace","userspace"],["userful","useful"],["userpace","userspace"],["userpsace","userspace"],["usersapce","userspace"],["userspase","userspace"],["usesfull","useful"],["usespace","userspace"],["usetnet","Usenet"],["usibility","usability"],["usible","usable"],["usig","using"],["usigned","unsigned"],["usiing","using"],["usin","using"],["usind","using"],["usinging","using"],["usinng","using"],["usng","using"],["usnig","using"],["usptart","upstart"],["usptarts","upstarts"],["usseful","useful"],["ussual","usual"],["ussuall","usual"],["ussually","usually"],["usuable","usable"],["usuage","usage"],["usuallly","usually"],["usualy","usually"],["usualyl","usually"],["usue","use"],["usued","used"],["usueful","useful"],["usuer","user"],["usuing","using"],["usupported","unsupported"],["ususal","usual"],["ususally","usually"],["UTF8ness","UTF-8-ness"],["utiilties","utilities"],["utilies","utilities"],["utililties","utilities"],["utilis","utilise"],["utilisa","utilise"],["utilisaton","utilisation"],["utilites","utilities"],["utilitisation","utilisation"],["utilitise","utilise"],["utilitises","utilises"],["utilitising","utilising"],["utilitiy","utility"],["utilitization","utilization"],["utilitize","utilize"],["utilitizes","utilizes"],["utilitizing","utilizing"],["utiliz","utilize"],["utiliza","utilize"],["utilizaton","utilization"],["utillities","utilities"],["utilties","utilities"],["utiltities","utilities"],["utiltity","utility"],["utilty","utility"],["utitity","utility"],["utitlities","utilities"],["utitlity","utility"],["utitlty","utility"],["utlities","utilities"],["utlity","utility"],["utput","output"],["utputs","outputs"],["uupload","upload"],["uupper","upper"],["vaalues","values"],["vaccum","vacuum"],["vaccume","vacuum"],["vaccuum","vacuum"],["vacinity","vicinity"],["vactor","vector"],["vactors","vectors"],["vacumme","vacuum"],["vacuosly","vacuously"],["vaelues","values"],["vaguaries","vagaries"],["vaiable","variable"],["vaiables","variables"],["vaiant","variant"],["vaiants","variants"],["vaidate","validate"],["vaieties","varieties"],["vailable","available"],["vaild","valid"],["vailidity","validity"],["vailidty","validity"],["vairable","variable"],["vairables","variables"],["vairous","various"],["vakue","value"],["vakued","valued"],["vakues","values"],["valailable","available"],["valdate","validate"],["valetta","valletta"],["valeu","value"],["valiator","validator"],["validade","validate"],["validata","validate"],["validataion","validation"],["validaterelase","validaterelease"],["valide","valid"],["valididty","validity"],["validing","validating"],["validte","validate"],["validted","validated"],["validtes","validates"],["validting","validating"],["validtion","validation"],["valied","valid"],["valies","values"],["valif","valid"],["valitdity","validity"],["valkues","values"],["vallgrind","valgrind"],["vallid","valid"],["vallidation","validation"],["vallidity","validity"],["vallue","value"],["vallues","values"],["valsues","values"],["valtage","voltage"],["valtages","voltages"],["valu","value"],["valuble","valuable"],["valudes","values"],["value-to-pack","value to pack"],["valueable","valuable"],["valuess","values"],["valuie","value"],["valulation","valuation"],["valulations","valuations"],["valule","value"],["valuled","valued"],["valules","values"],["valuling","valuing"],["vanishs","vanishes"],["varable","variable"],["varables","variables"],["varaiable","variable"],["varaiables","variables"],["varaiance","variance"],["varaiation","variation"],["varaible","variable"],["varaibles","variables"],["varaint","variant"],["varaints","variants"],["varation","variation"],["varations","variations"],["variabble","variable"],["variabbles","variables"],["variabe","variable"],["variabel","variable"],["variabele","variable"],["variabes","variables"],["variabla","variable"],["variablen","variable"],["varialbe","variable"],["varialbes","variables"],["varialbles","variables"],["varian","variant"],["variantions","variations"],["variatinos","variations"],["variationnal","variational"],["variatoin","variation"],["variatoins","variations"],["variavle","variable"],["variavles","variables"],["varibable","variable"],["varibables","variables"],["varibale","variable"],["varibales","variables"],["varibaless","variables"],["varibel","variable"],["varibels","variables"],["varibility","variability"],["variblae","variable"],["variblaes","variables"],["varible","variable"],["varibles","variables"],["varience","variance"],["varient","variant"],["varients","variants"],["varierty","variety"],["variey","variety"],["varify","verify"],["variing","varying"],["varing","varying"],["varities","varieties"],["varity","variety"],["variuos","various"],["variuous","various"],["varius","various"],["varn","warn"],["varned","warned"],["varning","warning"],["varnings","warnings"],["varns","warns"],["varoius","various"],["varous","various"],["varously","variously"],["varriance","variance"],["varriances","variances"],["vartical","vertical"],["vartically","vertically"],["vas","was"],["vasall","vassal"],["vasalls","vassals"],["vaue","value"],["vaule","value"],["vauled","valued"],["vaules","values"],["vauling","valuing"],["vavle","valve"],["vavlue","value"],["vavriable","variable"],["vavriables","variables"],["vbsrcript","vbscript"],["vebrose","verbose"],["vecotr","vector"],["vecotrs","vectors"],["vectices","vertices"],["vectore","vector"],["vectores","vectors"],["vectorss","vectors"],["vectror","vector"],["vectrors","vectors"],["vecvtor","vector"],["vecvtors","vectors"],["vedio","video"],["vefiry","verify"],["vegatarian","vegetarian"],["vegeterian","vegetarian"],["vegitable","vegetable"],["vegitables","vegetables"],["vegtable","vegetable"],["vehicule","vehicle"],["veify","verify"],["veiw","view"],["veiwed","viewed"],["veiwer","viewer"],["veiwers","viewers"],["veiwing","viewing"],["veiwings","viewings"],["veiws","views"],["vektor","vector"],["vektors","vectors"],["velidate","validate"],["vell","well"],["velociries","velocities"],["velociry","velocity"],["vender","vendor"],["venders","vendors"],["venemous","venomous"],["vengance","vengeance"],["vengence","vengeance"],["verbaitm","verbatim"],["verbatum","verbatim"],["verbous","verbose"],["verbouse","verbose"],["verbously","verbosely"],["verbse","verbose"],["verctor","vector"],["verctors","vectors"],["veresion","version"],["veresions","versions"],["verfication","verification"],["verficiation","verification"],["verfier","verifier"],["verfies","verifies"],["verfifiable","verifiable"],["verfification","verification"],["verfifications","verifications"],["verfified","verified"],["verfifier","verifier"],["verfifiers","verifiers"],["verfifies","verifies"],["verfify","verify"],["verfifying","verifying"],["verfires","verifies"],["verfiy","verify"],["verfiying","verifying"],["verfy","verify"],["verfying","verifying"],["verical","vertical"],["verifcation","verification"],["verifiaction","verification"],["verificaion","verification"],["verificaions","verifications"],["verificiation","verification"],["verificiations","verifications"],["verifieing","verifying"],["verifing","verifying"],["verifiy","verify"],["verifiying","verifying"],["verifty","verify"],["veriftying","verifying"],["verifyied","verified"],["verion","version"],["verions","versions"],["veriosn","version"],["veriosns","versions"],["verious","various"],["verison","version"],["verisoned","versioned"],["verisoner","versioner"],["verisoners","versioners"],["verisoning","versioning"],["verisons","versions"],["veritcal","vertical"],["veritcally","vertically"],["veritical","vertical"],["verly","very"],["vermillion","vermilion"],["verndor","vendor"],["verrical","vertical"],["verry","very"],["vershin","version"],["versin","version"],["versino","version"],["versinos","versions"],["versins","versions"],["versio","version"],["versiob","version"],["versioed","versioned"],["versioing","versioning"],["versiom","version"],["versionaddded","versionadded"],["versionm","version"],["versionms","versions"],["versionned","versioned"],["versionning","versioning"],["versios","versions"],["versitilaty","versatility"],["versitile","versatile"],["versitlity","versatility"],["versoin","version"],["versoion","version"],["versoions","versions"],["verson","version"],["versoned","versioned"],["versons","versions"],["vertextes","vertices"],["vertexts","vertices"],["vertial","vertical"],["verticall","vertical"],["verticaly","vertically"],["verticies","vertices"],["verticla","vertical"],["verticlealign","verticalalign"],["vertiece","vertex"],["vertieces","vertices"],["vertifiable","verifiable"],["vertification","verification"],["vertifications","verifications"],["vertify","verify"],["vertikal","vertical"],["vertix","vertex"],["vertixes","vertices"],["vertixs","vertices"],["vertx","vertex"],["veryfieng","verifying"],["veryfy","verify"],["veryified","verified"],["veryifies","verifies"],["veryify","verify"],["veryifying","verifying"],["vesion","version"],["vesions","versions"],["vetex","vertex"],["vetexes","vertices"],["vetod","vetoed"],["vetween","between"],["vew","view"],["veyr","very"],["vhild","child"],["viatnamese","Vietnamese"],["vice-fersa","vice-versa"],["vice-wersa","vice-versa"],["vicefersa","vice-versa"],["viceversa","vice-versa"],["vicewersa","vice-versa"],["videostreamming","videostreaming"],["viee","view"],["viees","views"],["vieport","viewport"],["vieports","viewports"],["vietnamesea","Vietnamese"],["viewtransfromation","viewtransformation"],["vigilence","vigilance"],["vigourous","vigorous"],["vill","will"],["villian","villain"],["villification","vilification"],["villify","vilify"],["vincinity","vicinity"],["vinrator","vibrator"],["vioalte","violate"],["vioaltion","violation"],["violentce","violence"],["violoated","violated"],["violoating","violating"],["violoation","violation"],["violoations","violations"],["virtal","virtual"],["virtaul","virtual"],["virtical","vertical"],["virtiual","virtual"],["virttual","virtual"],["virttually","virtually"],["virtualisaion","virtualisation"],["virtualisaiton","virtualisation"],["virtualizaion","virtualization"],["virtualizaiton","virtualization"],["virtualiziation","virtualization"],["virtualy","virtually"],["virtualzation","virtualization"],["virtuell","virtual"],["virtural","virtual"],["virture","virtue"],["virutal","virtual"],["virutalenv","virtualenv"],["virutalisation","virtualisation"],["virutalise","virtualise"],["virutalised","virtualised"],["virutalization","virtualization"],["virutalize","virtualize"],["virutalized","virtualized"],["virutally","virtually"],["virutals","virtuals"],["virutual","virtual"],["visability","visibility"],["visable","visible"],["visably","visibly"],["visbility","visibility"],["visble","visible"],["visblie","visible"],["visbly","visibly"],["visiable","visible"],["visiably","visibly"],["visibale","visible"],["visibibilty","visibility"],["visibile","visible"],["visibililty","visibility"],["visibilit","visibility"],["visibilty","visibility"],["visibl","visible"],["visibleable","visible"],["visibles","visible"],["visiblities","visibilities"],["visiblity","visibility"],["visiblle","visible"],["visinble","visible"],["visious","vicious"],["visisble","visible"],["visiter","visitor"],["visiters","visitors"],["visitng","visiting"],["visivble","visible"],["vissible","visible"],["visted","visited"],["visting","visiting"],["vistors","visitors"],["visuab","visual"],["visuabisation","visualisation"],["visuabise","visualise"],["visuabised","visualised"],["visuabises","visualises"],["visuabization","visualization"],["visuabize","visualize"],["visuabized","visualized"],["visuabizes","visualizes"],["visuables","visuals"],["visuably","visually"],["visuabs","visuals"],["visuaisation","visualisation"],["visuaise","visualise"],["visuaised","visualised"],["visuaises","visualises"],["visuaization","visualization"],["visuaize","visualize"],["visuaized","visualized"],["visuaizes","visualizes"],["visuale","visual"],["visuales","visuals"],["visualizaion","visualization"],["visualizaiton","visualization"],["visualizaitons","visualizations"],["visualizaton","visualization"],["visualizatons","visualizations"],["visuallisation","visualisation"],["visuallization","visualization"],["visualy","visually"],["visualzation","visualization"],["vitories","victories"],["vitrual","virtual"],["vitrually","virtually"],["vitual","virtual"],["viusally","visually"],["viusualisation","visualisation"],["viwe","view"],["viwed","viewed"],["viweed","viewed"],["viwer","viewer"],["viwers","viewers"],["viwes","views"],["vizualisation","visualisation"],["vizualise","visualise"],["vizualised","visualised"],["vizualize","visualize"],["vizualized","visualized"],["vlarge","large"],["vlaue","value"],["vlaues","values"],["vlone","clone"],["vloned","cloned"],["vlones","clones"],["vlues","values"],["voif","void"],["volatage","voltage"],["volatages","voltages"],["volatge","voltage"],["volatges","voltages"],["volcanoe","volcano"],["volenteer","volunteer"],["volenteered","volunteered"],["volenteers","volunteers"],["voleyball","volleyball"],["volontary","voluntary"],["volonteer","volunteer"],["volonteered","volunteered"],["volonteering","volunteering"],["volonteers","volunteers"],["volounteer","volunteer"],["volounteered","volunteered"],["volounteering","volunteering"],["volounteers","volunteers"],["volumn","volume"],["volumne","volume"],["volums","volume"],["volxel","voxel"],["volxels","voxels"],["vonfig","config"],["vould","would"],["vreity","variety"],["vresion","version"],["vrey","very"],["vriable","variable"],["vriables","variables"],["vriety","variety"],["vrifier","verifier"],["vrifies","verifies"],["vrify","verify"],["vrilog","Verilog"],["vritual","virtual"],["vritualenv","virtualenv"],["vritualisation","virtualisation"],["vritualise","virtualise"],["vritualization","virtualization"],["vritualize","virtualize"],["vrituoso","virtuoso"],["vrsion","version"],["vrsions","versions"],["Vulacn","Vulcan"],["Vulakn","Vulkan"],["vulbearable","vulnerable"],["vulbearabule","vulnerable"],["vulbearbilities","vulnerabilities"],["vulbearbility","vulnerability"],["vulbearbuilities","vulnerabilities"],["vulbearbuility","vulnerability"],["vulberabilility","vulnerability"],["vulberabilites","vulnerabilities"],["vulberabiliti","vulnerability"],["vulberabilitie","vulnerability"],["vulberabilitis","vulnerabilities"],["vulberabilitiy","vulnerability"],["vulberabillities","vulnerabilities"],["vulberabillity","vulnerability"],["vulberabilties","vulnerabilities"],["vulberabilty","vulnerability"],["vulberablility","vulnerability"],["vulberabuilility","vulnerability"],["vulberabuilites","vulnerabilities"],["vulberabuiliti","vulnerability"],["vulberabuilitie","vulnerability"],["vulberabuilities","vulnerabilities"],["vulberabuilitis","vulnerabilities"],["vulberabuilitiy","vulnerability"],["vulberabuility","vulnerability"],["vulberabuillities","vulnerabilities"],["vulberabuillity","vulnerability"],["vulberabuilties","vulnerabilities"],["vulberabuilty","vulnerability"],["vulberabule","vulnerable"],["vulberabulility","vulnerability"],["vulberbilities","vulnerabilities"],["vulberbility","vulnerability"],["vulberbuilities","vulnerabilities"],["vulberbuility","vulnerability"],["vulerabilities","vulnerabilities"],["vulerability","vulnerability"],["vulerable","vulnerable"],["vulerabuilities","vulnerabilities"],["vulerabuility","vulnerability"],["vulerabule","vulnerable"],["vulernabilities","vulnerabilities"],["vulernability","vulnerability"],["vulernable","vulnerable"],["vulnarabilities","vulnerabilities"],["vulnarability","vulnerability"],["vulneabilities","vulnerabilities"],["vulneability","vulnerability"],["vulneable","vulnerable"],["vulnearabilities","vulnerabilities"],["vulnearability","vulnerability"],["vulnearable","vulnerable"],["vulnearabule","vulnerable"],["vulnearbilities","vulnerabilities"],["vulnearbility","vulnerability"],["vulnearbuilities","vulnerabilities"],["vulnearbuility","vulnerability"],["vulnerabilies","vulnerabilities"],["vulnerabiliies","vulnerabilities"],["vulnerabilility","vulnerability"],["vulnerabilites","vulnerabilities"],["vulnerabiliti","vulnerability"],["vulnerabilitie","vulnerability"],["vulnerabilitis","vulnerabilities"],["vulnerabilitiy","vulnerability"],["vulnerabilitu","vulnerability"],["vulnerabiliy","vulnerability"],["vulnerabillities","vulnerabilities"],["vulnerabillity","vulnerability"],["vulnerabilties","vulnerabilities"],["vulnerabilty","vulnerability"],["vulnerablility","vulnerability"],["vulnerablities","vulnerabilities"],["vulnerablity","vulnerability"],["vulnerabuilility","vulnerability"],["vulnerabuilites","vulnerabilities"],["vulnerabuiliti","vulnerability"],["vulnerabuilitie","vulnerability"],["vulnerabuilities","vulnerabilities"],["vulnerabuilitis","vulnerabilities"],["vulnerabuilitiy","vulnerability"],["vulnerabuility","vulnerability"],["vulnerabuillities","vulnerabilities"],["vulnerabuillity","vulnerability"],["vulnerabuilties","vulnerabilities"],["vulnerabuilty","vulnerability"],["vulnerabule","vulnerable"],["vulnerabulility","vulnerability"],["vulnerarbilities","vulnerabilities"],["vulnerarbility","vulnerability"],["vulnerarble","vulnerable"],["vulnerbilities","vulnerabilities"],["vulnerbility","vulnerability"],["vulnerbuilities","vulnerabilities"],["vulnerbuility","vulnerability"],["vulnreabilities","vulnerabilities"],["vulnreability","vulnerability"],["vunerabilities","vulnerabilities"],["vunerability","vulnerability"],["vunerable","vulnerable"],["vyer","very"],["vyre","very"],["waht","what"],["wainting","waiting"],["waisline","waistline"],["waislines","waistlines"],["waitting","waiting"],["wakup","wakeup"],["wallthickness","wall thickness"],["want;s","wants"],["wantto","want to"],["wappers","wrappers"],["warantee","warranty"],["waranties","warranties"],["waranty","warranty"],["wardobe","wardrobe"],["waring","warning"],["warings","warnings"],["warinigs","warnings"],["warining","warning"],["warinings","warnings"],["warks","works"],["warlking","walking"],["warnibg","warning"],["warnibgs","warnings"],["warnig","warning"],["warnign","warning"],["warnigns","warnings"],["warnigs","warnings"],["warniing","warning"],["warniings","warnings"],["warnin","warning"],["warnind","warning"],["warninds","warnings"],["warninf","warning"],["warninfs","warnings"],["warningss","warnings"],["warninig","warning"],["warninigs","warnings"],["warnining","warning"],["warninings","warnings"],["warninng","warning"],["warninngs","warnings"],["warnins","warnings"],["warninsg","warnings"],["warninsgs","warnings"],["warniong","warning"],["warniongs","warnings"],["warnkng","warning"],["warnkngs","warnings"],["warrent","warrant"],["warrents","warrants"],["warrn","warn"],["warrned","warned"],["warrning","warning"],["warrnings","warnings"],["warrriors","warriors"],["was'nt","wasn't"],["was't","wasn't"],["was;t","wasn't"],["wasn;t","wasn't"],["wasnt'","wasn't"],["wasnt","wasn't"],["wasnt;","wasn't"],["wass","was"],["wastefullness","wastefulness"],["watchdong","watchdog"],["watchog","watchdog"],["watermask","watermark"],["wathc","watch"],["wathdog","watchdog"],["wathever","whatever"],["wating","waiting"],["watn","want"],["wavelengh","wavelength"],["wavelenghs","wavelengths"],["wavelenght","wavelength"],["wavelenghts","wavelengths"],["wavelnes","wavelines"],["wayoint","waypoint"],["wayoints","waypoints"],["wayword","wayward"],["weahter","weather"],["weahters","weathers"],["weaponary","weaponry"],["weas","was"],["webage","webpage"],["webbased","web-based"],["webiste","website"],["wedensday","Wednesday"],["wednesay","Wednesday"],["wednesdaay","Wednesday"],["wednesdey","Wednesday"],["wednessday","Wednesday"],["wednsday","Wednesday"],["wege","wedge"],["wehere","where"],["wehn","when"],["wehther","whether"],["weigth","weight"],["weigthed","weighted"],["weigths","weights"],["weilded","wielded"],["weill","will"],["weired","weird"],["weitght","weight"],["wel","well"],["wendesday","Wednesday"],["wendsay","Wednesday"],["wendsday","Wednesday"],["wensday","Wednesday"],["were'nt","weren't"],["wereabouts","whereabouts"],["wereas","whereas"],["weree","were"],["werent","weren't"],["werever","wherever"],["wew","we"],["whant","want"],["whants","wants"],["whataver","whatever"],["whatepsace","whitespace"],["whatepsaces","whitespaces"],["whathever","whatever"],["whch","which"],["whcich","which"],["whcih","which"],["wheh","when"],["whehter","whether"],["wheigh","weigh"],["whem","when"],["whenevery","whenever"],["whenn","when"],["whenver","whenever"],["wheras","whereas"],["wherease","whereas"],["whereever","wherever"],["wherether","whether"],["whery","where"],["wheteher","whether"],["whetehr","whether"],["wheter","whether"],["whethe","whether"],["whethter","whether"],["whever","wherever"],["whheel","wheel"],["whhen","when"],["whic","which"],["whicg","which"],["which;s","which's"],["whichs","which's"],["whicht","which"],["whih","which"],["whihc","which"],["whihch","which"],["whike","while"],["whilest","whilst"],["whiltelist","whitelist"],["whiltelisted","whitelisted"],["whiltelisting","whitelisting"],["whiltelists","whitelists"],["whilw","while"],["whioch","which"],["whishlist","wishlist"],["whitch","which"],["whitchever","whichever"],["whitepsace","whitespace"],["whitepsaces","whitespaces"],["whith","with"],["whithin","within"],["whithout","without"],["whitre","white"],["whitspace","whitespace"],["whitspaces","whitespace"],["whlch","which"],["whle","while"],["whlie","while"],["whn","when"],["whne","when"],["whoes","whose"],["whoknows","who knows"],["wholey","wholly"],["whoose","whose"],["whould","would"],["whre","where"],["whta","what"],["whther","whether"],["whtihin","within"],["whyth","with"],["whythout","without"],["wiat","wait"],["wice","vice"],["wice-versa","vice-versa"],["wice-wersa","vice-versa"],["wiceversa","vice-versa"],["wicewersa","vice-versa"],["wich","which"],["widder","wider"],["widesread","widespread"],["widgect","widget"],["widged","widget"],["widghet","widget"],["widghets","widgets"],["widgit","widget"],["widgtes","widgets"],["widht","width"],["widhtpoint","widthpoint"],["widhtpoints","widthpoints"],["widthn","width"],["widthout","without"],["wief","wife"],["wieghed","weighed"],["wieght","weight"],["wieghts","weights"],["wieh","view"],["wierd","weird"],["wierdly","weirdly"],["wierdness","weirdness"],["wieth","width"],["wiew","view"],["wigdet","widget"],["wigdets","widgets"],["wih","with"],["wihch","which"],["wihich","which"],["wihite","white"],["wihle","while"],["wihout","without"],["wiht","with"],["wihtin","within"],["wihtout","without"],["wiil","will"],["wikpedia","wikipedia"],["wilcard","wildcard"],["wilcards","wildcards"],["wilh","will"],["wille","will"],["willingless","willingness"],["willk","will"],["willl","will"],["windo","window"],["windoes","windows"],["windoow","window"],["windoows","windows"],["windos","windows"],["windowz","windows"],["windwo","window"],["windwos","windows"],["winn","win"],["winndow","window"],["winndows","windows"],["winodw","window"],["wipoing","wiping"],["wirh","with"],["wirte","write"],["wirter","writer"],["wirters","writers"],["wirtes","writes"],["wirting","writing"],["wirtten","written"],["wirtual","virtual"],["witable","writeable"],["witdh","width"],["witdhs","widths"],["witdth","width"],["witdths","widths"],["witheld","withheld"],["withh","with"],["withih","within"],["withinn","within"],["withion","within"],["witho","with"],["withoit","without"],["withold","withhold"],["witholding","withholding"],["withon","within"],["withoout","without"],["withot","without"],["withotu","without"],["withou","without"],["withoud","without"],["withoug","without"],["withough","without"],["withought","without"],["withouht","without"],["withount","without"],["withourt","without"],["withous","without"],["withouth","without"],["withouyt","without"],["withput","without"],["withrawal","withdrawal"],["witht","with"],["withthe","with the"],["withtin","within"],["withun","within"],["withuout","without"],["witin","within"],["witk","with"],["witn","with"],["witout","without"],["witrh","with"],["witth","with"],["wiull","will"],["wiyh","with"],["wiyhout","without"],["wiyth","with"],["wizzard","wizard"],["wjat","what"],["wll","will"],["wlll","will"],["wnated","wanted"],["wnating","wanting"],["wnats","wants"],["woh","who"],["wohle","whole"],["woill","will"],["woithout","without"],["wokr","work"],["wokring","working"],["wolrd","world"],["wolrdly","worldly"],["wolrdwide","worldwide"],["wolwide","worldwide"],["won;t","won't"],["wonderfull","wonderful"],["wonderig","wondering"],["wont't","won't"],["woraround","workaround"],["worarounds","workarounds"],["worbench","workbench"],["worbenches","workbenches"],["worchester","Worcester"],["wordlwide","worldwide"],["wordpres","wordpress"],["worfklow","workflow"],["worfklows","workflows"],["worflow","workflow"],["worflows","workflows"],["workaorund","workaround"],["workaorunds","workarounds"],["workaound","workaround"],["workaounds","workarounds"],["workaraound","workaround"],["workaraounds","workarounds"],["workarbound","workaround"],["workaroud","workaround"],["workaroudn","workaround"],["workaroudns","workarounds"],["workarouds","workarounds"],["workarould","workaround"],["workaroung","workaround"],["workaroungs","workarounds"],["workarround","workaround"],["workarrounds","workarounds"],["workarund","workaround"],["workarunds","workarounds"],["workbanch","workbench"],["workbanches","workbenches"],["workbanchs","workbenches"],["workbenchs","workbenches"],["workbennch","workbench"],["workbennches","workbenches"],["workbnech","workbench"],["workbneches","workbenches"],["workboos","workbooks"],["workes","works"],["workfow","workflow"],["workfows","workflows"],["workign","working"],["worklfow","workflow"],["worklfows","workflows"],["workpsace","workspace"],["workpsaces","workspaces"],["workround","workaround"],["workrounds","workarounds"],["workspce","workspace"],["workspsace","workspace"],["workspsaces","workspaces"],["workstaion","workstation"],["workstaions","workstations"],["workstaition","workstation"],["workstaitions","workstations"],["workstaiton","workstation"],["workstaitons","workstations"],["workststion","workstation"],["workststions","workstations"],["worl","world"],["world-reknown","world renown"],["world-reknowned","world renowned"],["worload","workload"],["worloads","workloads"],["worls","world"],["wornged","wronged"],["worngs","wrongs"],["worrry","worry"],["worser","worse"],["worstened","worsened"],["worthwile","worthwhile"],["woth","worth"],["wothout","without"],["wotk","work"],["wotked","worked"],["wotking","working"],["wotks","works"],["woud","would"],["woudl","would"],["woudn't","wouldn't"],["would'nt","wouldn't"],["would't","wouldn't"],["wouldent","wouldn't"],["woulden`t","wouldn't"],["wouldn;t","wouldn't"],["wouldnt'","wouldn't"],["wouldnt","wouldn't"],["wouldnt;","wouldn't"],["wounderful","wonderful"],["wouold","would"],["wouuld","would"],["wqs","was"],["wraapp","wrap"],["wraapped","wrapped"],["wraapper","wrapper"],["wraappers","wrappers"],["wraapping","wrapping"],["wraapps","wraps"],["wraning","warning"],["wranings","warnings"],["wrapepd","wrapped"],["wraper","wrapper"],["wrapp","wrap"],["wrappered","wrapped"],["wrappng","wrapping"],["wrapps","wraps"],["wresters","wrestlers"],["wriet","write"],["writebufer","writebuffer"],["writechetque","writecheque"],["writeing","writing"],["writen","written"],["writet","writes"],["writewr","writer"],["writingm","writing"],["writters","writers"],["writting","writing"],["writtten","written"],["wrkload","workload"],["wrkloads","workloads"],["wrod","word"],["wroet","wrote"],["wrog","wrong"],["wrok","work"],["wroked","worked"],["wrokflow","workflow"],["wrokflows","workflows"],["wroking","working"],["wrokload","workload"],["wrokloads","workloads"],["wroks","works"],["wron","wrong"],["wronf","wrong"],["wront","wrong"],["wrtie","write"],["wrting","writing"],["wsee","see"],["wser","user"],["wth","with"],["wtih","with"],["wtyle","style"],["wuold","would"],["wupport","support"],["wuth","with"],["wuthin","within"],["wya","way"],["wyth","with"],["wythout","without"],["xdescribe","describe"],["xdpf","xpdf"],["xenophoby","xenophobia"],["xepect","expect"],["xepected","expected"],["xepectedly","expectedly"],["xepecting","expecting"],["xepects","expects"],["xgetttext","xgettext"],["xinitiazlize","xinitialize"],["xmdoel","xmodel"],["xour","your"],["xwindows","X"],["xyou","you"],["yaching","yachting"],["yaer","year"],["yaerly","yearly"],["yaers","years"],["yatch","yacht"],["yearm","year"],["yeasr","years"],["yeild","yield"],["yeilded","yielded"],["yeilding","yielding"],["yeilds","yields"],["yeld","yield"],["yelded","yielded"],["yelding","yielding"],["yelds","yields"],["yello","yellow"],["yera","year"],["yeras","years"],["yersa","years"],["yhe","the"],["yieldin","yielding"],["ymbols","symbols"],["yoman","yeoman"],["yomen","yeomen"],["yot","yacht"],["yotube","youtube"],["youforic","euphoric"],["youforically","euphorically"],["youlogy","eulogy"],["yourselfes","yourselves"],["youself","yourself"],["youthinasia","euthanasia"],["ypes","types"],["yrea","year"],["ytou","you"],["yuforic","euphoric"],["yuforically","euphorically"],["yugoslac","yugoslav"],["yuo","you"],["yuor","your"],["yur","your"],["zar","czar"],["zars","czars"],["zeebra","zebra"],["zefer","zephyr"],["zefers","zephyrs"],["zellot","zealot"],["zellots","zealots"],["zemporary","temporary"],["zick-zack","zig-zag"],["zimmap","zipmap"],["zimpaps","zipmaps"],["zink","zinc"],["ziped","zipped"],["ziper","zipper"],["ziping","zipping"],["zlot","slot"],["zombe","zombie"],["zomebie","zombie"],["zoocheenei","zucchinis"],["zoocheeni","zucchini"],["zoocheinei","zucchinis"],["zoocheini","zucchini"],["zookeenee","zucchini"],["zookeenees","zucchinis"],["zookeenei","zucchinis"],["zookeeni","zucchini"],["zookeinee","zucchini"],["zookeinees","zucchinis"],["zookeinei","zucchinis"],["zookeini","zucchini"],["zucheenei","zucchinis"],["zucheeni","zucchini"],["zukeenee","zucchini"],["zukeenees","zucchinis"],["zukeenei","zucchinis"],["zukeeni","zucchini"],["zuser","user"],["zylophone","xylophone"],["zylophones","xylophone"],["__attribyte__","__attribute__"],["__cpluspus","__cplusplus"],["__cpusplus","__cplusplus"],["\xE9valuate","evaluate"],["\u0441ontain","contain"],["\u0441ontained","contained"],["\u0441ontainer","container"],["\u0441ontainers","containers"],["\u0441ontaining","containing"],["\u0441ontainor","container"],["\u0441ontainors","containers"],["\u0441ontains","contains"]]);var ds=class{constructor(){this.ignoreWords=[]}},Gn=class extends w{constructor(){super({nameKey:"rules.auto-correct-common-misspellings.name",descriptionKey:"rules.auto-correct-common-misspellings.description",type:"Content",ruleIgnoreTypes:[f.yaml,f.code,f.inlineCode,f.math,f.inlineMath,f.link,f.wikiLink,f.tag,f.image,f.url]})}get OptionsClass(){return ds}apply(t,i){return t.replaceAll(Ku,n=>this.replaceWordWithCorrectCasing(n,i))}replaceWordWithCorrectCasing(t,i){let n=t.toLowerCase();if(!sl.has(n)||i.ignoreWords.includes(n))return t;let r=sl.get(n);return t.charAt(0)==t.charAt(0).toUpperCase()&&(r=r.charAt(0).toUpperCase()+r.substring(1)),r}get exampleBuilders(){return[new y({description:"Auto-correct misspellings in regular text, but not code blocks, math blocks, YAML, or tags",before:p` + --- + key: absoltely + --- + ${""} + I absoltely hate when my codeblocks get formatted when they should not be. + ${""} + \`\`\` + # comments absoltely can be helpful, but they can also be misleading + \`\`\` + ${""} + Note that inline code also has the applicable spelling errors ignored: \`absoltely\` + ${""} + $$ + Math block absoltely does not get auto-corrected. + $$ + ${""} + The same $ defenately $ applies to inline math. + ${""} + #defenately stays the same + `,after:p` + --- + key: absoltely + --- + ${""} + I absolutely hate when my codeblocks get formatted when they should not be. + ${""} + \`\`\` + # comments absoltely can be helpful, but they can also be misleading + \`\`\` + ${""} + Note that inline code also has the applicable spelling errors ignored: \`absoltely\` + ${""} + $$ + Math block absoltely does not get auto-corrected. + $$ + ${""} + The same $ defenately $ applies to inline math. + ${""} + #defenately stays the same + `}),new y({description:"Auto-correct misspellings keeps first letter's case",before:p` + Accodringly we made sure to update logic to make sure it would handle case sensitivity. + `,after:p` + Accordingly we made sure to update logic to make sure it would handle case sensitivity. + `}),new y({description:"Links should not be auto-corrected",before:p` + http://www.Absoltely.com should not be corrected + `,after:p` + http://www.Absoltely.com should not be corrected + `})]}get optionBuilders(){return[new be({OptionsClass:ds,nameKey:"rules.auto-correct-common-misspellings.ignore-words.name",descriptionKey:"rules.auto-correct-common-misspellings.ignore-words.description",optionsKey:"ignoreWords",splitter:Kn,separator:", "})]}};Gn=A([w.register],Gn);var us=class{constructor(){this.style="space"}},gt=class extends w{constructor(){super({nameKey:"rules.blockquote-style.name",descriptionKey:"rules.blockquote-style.description",type:"Content",hasSpecialExecutionOrder:!0,ruleIgnoreTypes:[f.html]})}get OptionsClass(){return us}apply(t,i){return i.style==="space"?el(t,this.addSpaceToIndicator):el(t,this.removeSpaceFromIndicator)}removeSpaceFromIndicator(t){return t.replace(/>( |\t)+/g,">")}addSpaceToIndicator(t){return t.replace(/>([^ ])/g,"> $1").replace(/>>/g,"> >")}get exampleBuilders(){return[new y({description:"When style = `space`, a space is added to blockquotes missing a space after the indicator",before:p` + >Blockquotes will have a space added if one is not present + > Will be left as is. + ${""} + > Nested blockquotes are also updated + >>Nesting levels are handled correctly + >> Even when only partially needing updates + > >Updated as well + >>>>>>> Is handled too + > > >>> As well + ${""} + > Note that html is not affected in blockquotes + `,after:p` + > Blockquotes will have a space added if one is not present + > Will be left as is. + ${""} + > Nested blockquotes are also updated + > > Nesting levels are handled correctly + > > Even when only partially needing updates + > > Updated as well + > > > > > > > Is handled too + > > > > > As well + ${""} + > Note that html is not affected in blockquotes + `}),new y({description:"When style = `no space`, spaces are removed after a blockquote indicator",before:p` + > Multiple spaces are removed + > > Nesting is handled + > > > > > Especially when multiple levels are involved + > >>> > Even when partially correct already, it is handled + `,after:p` + >Multiple spaces are removed + >>Nesting is handled + >>>>>Especially when multiple levels are involved + >>>>>Even when partially correct already, it is handled + `,options:{style:"no space"}})]}get optionBuilders(){return[new ne({OptionsClass:us,nameKey:"rules.blockquote-style.style.name",descriptionKey:"rules.blockquote-style.style.description",optionsKey:"style",records:[{value:"space",description:"> indicator is followed by a space"},{value:"no space",description:">indicator is not followed by a space"}]})]}};gt=A([w.register],gt);var ps=class{};A([w.noSettingControl()],ps.prototype,"lineContent",2);var ht=class extends w{constructor(){super({nameKey:"rules.add-blockquote-indentation-on-paste.name",descriptionKey:"rules.add-blockquote-indentation-on-paste.description",type:"Paste"})}get OptionsClass(){return ps}apply(t,i){let n=/^(\s*)((> ?)+) .*/,r=i.lineContent.match(n);if(!r)return t;let a=r[1]??"",s=r[2]??"";return t.trim().replace(/\n/gm,` +${a}${s} `)}get exampleBuilders(){return[new y({description:"Line being pasted into regular text does not get blockquotified with current line being `Part 1 of the sentence`",before:p` + was much less likely to succeed, but they tried it anyway. + Part 2 was much more interesting. + `,after:p` + was much less likely to succeed, but they tried it anyway. + Part 2 was much more interesting. + `,options:{lineContent:"Part 1 of the sentence"}}),new y({description:"Line being pasted into a blockquote gets blockquotified with current line being `> > `",before:p` + ${""} + This content is being added to a blockquote + Note that the second line is indented and the surrounding blank lines were trimmed + ${""} + `,after:p` + This content is being added to a blockquote + > > Note that the second line is indented and the surrounding blank lines were trimmed + `,options:{lineContent:"> > "}})]}get optionBuilders(){return[]}};ht=A([w.register],ht);var ft=class{constructor(){this.style="Title Case";this.ignoreWords=["macOS","iOS","iPhone","iPad","JavaScript","TypeScript","AppleScript","I"];this.lowercaseWords=["a","an","the","aboard","about","abt.","above","abreast","absent","across","after","against","along","aloft","alongside","amid","amidst","mid","midst","among","amongst","anti","apropos","around","round","as","aslant","astride","at","atop","ontop","bar","barring","before","B4","behind","below","beneath","neath","beside","besides","between","'tween","beyond","but","by","chez","circa","c.","ca.","come","concerning","contra","counting","cum","despite","spite","down","during","effective","ere","except","excepting","excluding","failing","following","for","from","in","including","inside","into","less","like","minus","modulo","mod","near","nearer","nearest","next","notwithstanding","of","o'","off","offshore","on","onto","opposite","out","outside","over","o'er","pace","past","pending","per","plus","post","pre","pro","qua","re","regarding","respecting","sans","save","saving","short","since","sub","than","through","thru","throughout","thruout","till","times","to","t'","touching","toward","towards","under","underneath","unlike","until","unto","up","upon","versus","vs.","v.","via","vice","vis-\xE0-vis","wanting","with","w/","w.","c\u0304","within","w/i","without","'thout","w/o","abroad","adrift","aft","afterward","afterwards","ahead","apart","ashore","aside","away","back","backward","backwards","beforehand","downhill","downstage","downstairs","downstream","downward","downwards","downwind","east","eastward","eastwards","forth","forward","forwards","heavenward","heavenwards","hence","henceforth","here","hereby","herein","hereof","hereto","herewith","home","homeward","homewards","indoors","inward","inwards","leftward","leftwards","north","northeast","northward","northwards","northwest","now","onward","onwards","outdoors","outward","outwards","overboard","overhead","overland","overseas","rightward","rightwards","seaward","seawards","skywards","skyward","south","southeast","southwards","southward","southwest","then","thence","thenceforth","there","thereby","therein","thereof","thereto","therewith","together","underfoot","underground","uphill","upstage","upstairs","upstream","upward","upwards","upwind","west","westward","westwards","when","whence","where","whereby","wherein","whereto","wherewith","although","because","considering","given","granted","if","lest","once","provided","providing","seeing","so","supposing","though","unless","whenever","whereas","wherever","while","whilst","ago","according to","as regards","counter to","instead of","owing to","pertaining to","at the behest of","at the expense of","at the hands of","at risk of","at the risk of","at variance with","by dint of","by means of","by virtue of","by way of","for the sake of","for sake of","for lack of","for want of","from want of","in accordance with","in addition to","in case of","in charge of","in compliance with","in conformity with","in contact with","in exchange for","in favor of","in front of","in lieu of","in light of","in the light of","in line with","in place of","in point of","in quest of","in relation to","in regard to","with regard to","in respect to","with respect to","in return for","in search of","in step with","in touch with","in terms of","in the name of","in view of","on account of","on behalf of","on grounds of","on the grounds of","on the part of","on top of","with a view to","with the exception of","\xE0 la","a la","as soon as","as well as","close to","due to","far from","in case","other than","prior to","pursuant to","regardless of","subsequent to","as long as","as much as","as far as","by the time","in as much as","inasmuch","in order to","in order that","even","provide that","if only","whether","whose","whoever","why","how","or not","whatever","what","both","and","or","not only","but also","either","neither","nor","just","rather","no sooner","such","that","yet","is","it"];this.ignoreCasedWords=!0}},yt=class extends w{constructor(){super({nameKey:"rules.capitalize-headings.name",descriptionKey:"rules.capitalize-headings.description",type:"Heading",hasSpecialExecutionOrder:!0,ruleIgnoreTypes:[f.code,f.inlineCode,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return ft}apply(t,i){return t.replace(Pi,n=>{if(i.style==="ALL CAPS")return n.toUpperCase();let r=i.style==="First letter",a=n.match(/\S+/g),s=i.ignoreWords,o=i.lowercaseWords,l=!0;for(let d=1;d(n=n.replace(/^---\n+/,`--- +`),n=n.replace(/\n+---/,` +---`),i.innerNewLines&&(n=n.replaceAll(/\n{2,}/g,` +`)),n))}get exampleBuilders(){return[new y({description:"Remove blank lines at the start and end of the YAML",before:p` + --- + ${""} + date: today + ${""} + title: unchanged without inner new lines turned on + ${""} + --- + `,after:p` + --- + date: today + ${""} + title: unchanged without inner new lines turned on + --- + `}),new y({description:"Remove blank lines anywhere in YAML with inner new lines set to true",before:p` + --- + ${""} + date: today + ${""} + ${""} + title: remove inner new lines + ${""} + --- + ${""} + # Header 1 + ${""} + ${""} + Body content here. + `,after:p` + --- + date: today + title: remove inner new lines + --- + ${""} + # Header 1 + ${""} + ${""} + Body content here. + `,options:{innerNewLines:!0}})]}get optionBuilders(){return[new U({OptionsClass:ms,nameKey:"rules.compact-yaml.inner-new-lines.name",descriptionKey:"rules.compact-yaml.inner-new-lines.description",optionsKey:"innerNewLines"})]}};Qn=A([w.register],Qn);var ol=class{},Zn=class extends w{constructor(){super({nameKey:"rules.consecutive-blank-lines.name",descriptionKey:"rules.consecutive-blank-lines.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return ol}apply(t,i){return t.replace(/(\n([\t\v\f\r \u00a0\u2000-\u200b\u2028-\u2029\u3000]+)?){2,}\n/g,` + +`)}get exampleBuilders(){return[new y({description:"Consecutive blank lines are removed",before:p` + Some text + ${""} + ${""} + Some more text + `,after:p` + Some text + ${""} + Some more text + `})]}get optionBuilders(){return[]}};Zn=A([w.register],Zn);var ll=class{},Jn=class extends w{constructor(){super({nameKey:"rules.convert-bullet-list-markers.name",descriptionKey:"rules.convert-bullet-list-markers.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return ll}apply(t,i){return t.replace(/^([^\S\n]*)([•§])([^\S\n]*)/gm,"$1-$3")}get exampleBuilders(){return[new y({description:"Converts \u2022",before:p` + • item 1 + • item 2 + `,after:p` + - item 1 + - item 2 + `}),new y({description:"Converts \xA7",before:p` + • item 1 + § item 2 + § item 3 + `,after:p` + - item 1 + - item 2 + - item 3 + `})]}get optionBuilders(){return[]}};Jn=A([w.register],Jn);var gs=class{constructor(){this.tabsize=4}},Xn=class extends w{constructor(){super({nameKey:"rules.convert-spaces-to-tabs.name",descriptionKey:"rules.convert-spaces-to-tabs.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return gs}apply(t,i){let n=String(i.tabsize),r=new RegExp("^( *) {"+n+"}","gm");t=this.replaceAllRegexMatches(t,r);let a=new RegExp("^((>( | *))*(>( | )) *) {"+n+"}","gm");return t=this.replaceAllRegexMatches(t,a),t}replaceAllRegexMatches(t,i){for(;t.match(i)!=null;)t=t.replace(i,"$1 ");return t}get exampleBuilders(){return[new y({description:"Converting spaces to tabs with `tabsize = 3`",before:p` + - text with no indention + - text indented with 3 spaces + - text with no indention + - text indented with 6 spaces + `,after:p` + - text with no indention + \t- text indented with 3 spaces + - text with no indention + \t\t- text indented with 6 spaces + `,options:{tabsize:3}}),new y({description:"Converting spaces to tabs with `tabsize = 3` works in blockquotes",before:p` + > - text with no indention + > - text indented with 3 spaces + > - text with no indention + > - text indented with 6 spaces + `,after:p` + > - text with no indention + > \t- text indented with 3 spaces + > - text with no indention + > \t\t- text indented with 6 spaces + `,options:{tabsize:3}})]}get optionBuilders(){return[new ls({OptionsClass:gs,nameKey:"rules.convert-spaces-to-tabs.tabsize.name",descriptionKey:"rules.convert-spaces-to-tabs.tabsize.description",optionsKey:"tabsize"})]}};Xn=A([w.register],Xn);var hs=class{constructor(){this.style="consistent"}},er=class extends w{constructor(){super({nameKey:"rules.emphasis-style.name",descriptionKey:"rules.emphasis-style.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag,f.math,f.inlineMath]})}get OptionsClass(){return hs}apply(t,i){return Ya(t,i.style,"emphasis")}get exampleBuilders(){return[new y({description:"Emphasis indicators should use underscores when style is set to 'underscore'",before:p` + # Emphasis Cases + ${""} + *Test emphasis* + * Test not emphasized * + This is *emphasized* mid sentence + This is *emphasized* mid sentence with a second *emphasis* on the same line + This is ***bold and emphasized*** + This is ***nested bold** and ending emphasized* + This is ***nested emphasis* and ending bold** + ${""} + **Test bold** + ${""} + * List Item1 with *emphasized text* + * List Item2 + `,after:p` + # Emphasis Cases + ${""} + _Test emphasis_ + * Test not emphasized * + This is _emphasized_ mid sentence + This is _emphasized_ mid sentence with a second _emphasis_ on the same line + This is _**bold and emphasized**_ + This is _**nested bold** and ending emphasized_ + This is **_nested emphasis_ and ending bold** + ${""} + **Test bold** + ${""} + * List Item1 with _emphasized text_ + * List Item2 + `,options:{style:"underscore"}}),new y({description:"Emphasis indicators should use asterisks when style is set to 'asterisk'",before:p` + # Emphasis Cases + ${""} + _Test emphasis_ + _ Test not emphasized _ + This is _emphasized_ mid sentence + This is _emphasized_ mid sentence with a second _emphasis_ on the same line + This is ___bold and emphasized___ + This is ___nested bold__ and ending emphasized_ + This is ___nested emphasis_ and ending bold__ + ${""} + __Test bold__ + `,after:p` + # Emphasis Cases + ${""} + *Test emphasis* + _ Test not emphasized _ + This is *emphasized* mid sentence + This is *emphasized* mid sentence with a second *emphasis* on the same line + This is *__bold and emphasized__* + This is *__nested bold__ and ending emphasized* + This is __*nested emphasis* and ending bold__ + ${""} + __Test bold__ + `,options:{style:"asterisk"}}),new y({description:"Emphasis indicators should use consistent style based on first emphasis indicator in a file when style is set to 'consistent'",before:p` + # Emphasis First Emphasis Is an Asterisk + ${""} + *First emphasis* + This is _emphasized_ mid sentence + This is *emphasized* mid sentence with a second _emphasis_ on the same line + This is *__bold and emphasized__* + This is *__nested bold__ and ending emphasized* + This is **_nested emphasis_ and ending bold** + ${""} + __Test bold__ + `,after:p` + # Emphasis First Emphasis Is an Asterisk + ${""} + *First emphasis* + This is *emphasized* mid sentence + This is *emphasized* mid sentence with a second *emphasis* on the same line + This is *__bold and emphasized__* + This is *__nested bold__ and ending emphasized* + This is ***nested emphasis* and ending bold** + ${""} + __Test bold__ + `,options:{style:"consistent"}}),new y({description:"Emphasis indicators should use consistent style based on first emphasis indicator in a file when style is set to 'consistent'",before:p` + # Emphasis First Emphasis Is an Underscore + ${""} + **_First emphasis_** + This is _emphasized_ mid sentence + This is *emphasized* mid sentence with a second _emphasis_ on the same line + This is *__bold and emphasized__* + This is _**nested bold** and ending emphasized_ + This is __*nested emphasis* and ending bold__ + ${""} + __Test bold__ + `,after:p` + # Emphasis First Emphasis Is an Underscore + ${""} + **_First emphasis_** + This is _emphasized_ mid sentence + This is _emphasized_ mid sentence with a second _emphasis_ on the same line + This is ___bold and emphasized___ + This is _**nested bold** and ending emphasized_ + This is ___nested emphasis_ and ending bold__ + ${""} + __Test bold__ + `,options:{style:"consistent"}})]}get optionBuilders(){return[new ne({OptionsClass:hs,nameKey:"rules.emphasis-style.style.name",descriptionKey:"rules.emphasis-style.style.description",optionsKey:"style",records:[{value:"consistent",description:"Makes sure the first instance of emphasis is the style that will be used throughout the document"},{value:"asterisk",description:"Makes sure * is the emphasis indicator"},{value:"underscore",description:"Makes sure _ is the emphasis indicator"}]})]}};er=A([w.register],er);var cl=class{},ir=class extends w{constructor(){super({nameKey:"rules.empty-line-around-blockquotes.name",descriptionKey:"rules.empty-line-around-blockquotes.description",type:"Spacing"})}get OptionsClass(){return cl}apply(t,i){return Lu(t)}get exampleBuilders(){return[new y({description:"Blockquotes that start a document do not get an empty line before them.",before:p` + > Quote content here + > quote content continued + # Title here + `,after:p` + > Quote content here + > quote content continued + ${""} + # Title here + `}),new y({description:"Blockquotes that end a document do not get an empty line after them.",before:p` + # Heading 1 + > Quote content here + > quote content continued + `,after:p` + # Heading 1 + ${""} + > Quote content here + > quote content continued + `}),new y({description:"Blockquotes that are nested have the proper empty line added",before:p` + # Make sure that nested blockquotes are accounted for correctly + > Quote content here + > quote content continued + > > Nested Blockquote + > > content continued + ${""} + **Note that the empty line is either one less blockquote indicator if followed/proceeded by more blockquote content or it is an empty line** + ${""} + # Doubly nested code block + ${""} + > > Quote content here + > > quote content continued + `,after:p` + # Make sure that nested blockquotes are accounted for correctly + ${""} + > Quote content here + > quote content continued + > + > > Nested Blockquote + > > content continued + ${""} + **Note that the empty line is either one less blockquote indicator if followed/proceeded by more blockquote content or it is an empty line** + ${""} + # Doubly nested code block + ${""} + > > Quote content here + > > quote content continued + `})]}get optionBuilders(){return[]}};ir=A([w.register],ir);var dl=class{},tr=class extends w{constructor(){super({nameKey:"rules.empty-line-around-code-fences.name",descriptionKey:"rules.empty-line-around-code-fences.description",type:"Spacing"})}get OptionsClass(){return dl}apply(t,i){return Au(t)}get exampleBuilders(){return[new y({description:"Fenced code blocks that start a document do not get an empty line before them.",before:p` + \`\`\` js + var temp = 'text'; + // this is a code block + \`\`\` + Text after code block. + `,after:p` + \`\`\` js + var temp = 'text'; + // this is a code block + \`\`\` + ${""} + Text after code block. + `}),new y({description:"Fenced code blocks that end a document do not get an empty line after them.",before:p` + # Heading 1 + \`\`\` + Here is a code block + \`\`\` + `,after:p` + # Heading 1 + ${""} + \`\`\` + Here is a code block + \`\`\` + `}),new y({description:"Fenced code blocks that are in a blockquote have the proper empty line added",before:p` + # Make sure that code blocks in blockquotes are accounted for correctly + > \`\`\`js + > var text = 'this is some text'; + > \`\`\` + > + > \`\`\`js + > var other text = 'this is more text'; + > \`\`\` + ${""} + **Note that the blanks blockquote lines added do not have whitespace after them** + ${""} + # Doubly nested code block + ${""} + > > \`\`\`js + > > var other text = 'this is more text'; + > > \`\`\` + `,after:p` + # Make sure that code blocks in blockquotes are accounted for correctly + + > \`\`\`js + > var text = 'this is some text'; + > \`\`\` + > + > \`\`\`js + > var other text = 'this is more text'; + > \`\`\` + ${""} + **Note that the blanks blockquote lines added do not have whitespace after them** + ${""} + # Doubly nested code block + ${""} + > > \`\`\`js + > > var other text = 'this is more text'; + > > \`\`\` + `}),new y({description:"Nested fenced code blocks get empty lines added around them",before:p` + \`\`\`markdown + # Header + ${""} + \`\`\`\`JavaScript + var text = 'some string'; + \`\`\`\` + \`\`\` + `,after:p` + \`\`\`markdown + # Header + ${""} + \`\`\`\`JavaScript + var text = 'some string'; + \`\`\`\` + ${""} + \`\`\` + `})]}get optionBuilders(){return[]}};tr=A([w.register],tr);var fs=class{constructor(){this.minimumNumberOfDollarSignsToBeAMathBlock=2}};A([w.noSettingControl()],fs.prototype,"minimumNumberOfDollarSignsToBeAMathBlock",2);var nr=class extends w{constructor(){super({nameKey:"rules.empty-line-around-math-blocks.name",descriptionKey:"rules.empty-line-around-math-blocks.description",type:"Spacing",ruleIgnoreTypes:[f.yaml,f.code]})}get OptionsClass(){return fs}apply(t,i){return Tu(t,i.minimumNumberOfDollarSignsToBeAMathBlock)}get exampleBuilders(){return[new y({description:"Math blocks that start a document do not get an empty line before them.",before:p` + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + some more text + `,after:p` + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + ${""} + some more text + `}),new y({description:"Math blocks that are singe-line are updated based on the value of `Number of Dollar Signs to Indicate a Math Block` (in this case its value is 2)",before:p` + $$\\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix}$$ + some more text + `,after:p` + $$\\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix}$$ + ${""} + some more text + `}),new y({description:"Math blocks that end a document do not get an empty line after them.",before:p` + Some text + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + `,after:p` + Some text + ${""} + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + `}),new y({description:"Math blocks that are not at the start or the end of the document will have an empty line added before and after them",before:p` + Some text + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + some more text + `,after:p` + Some text + ${""} + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + ${""} + some more text + `}),new y({description:"Math blocks in callouts or blockquotes have the appropriately formatted blank lines added",before:p` + > Math block in blockquote + > $$ + > \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + > $$ + ${""} + More content here + ${""} + > Math block doubly nested in blockquote + > > $$ + > > \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + > > $$ + `,after:p` + > Math block in blockquote + > + > $$ + > \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + > $$ + ${""} + More content here + ${""} + > Math block doubly nested in blockquote + > + > > $$ + > > \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + > > $$ + `})]}get optionBuilders(){return[]}};nr=A([w.register],nr);var ul=class{},rr=class extends w{constructor(){super({nameKey:"rules.empty-line-around-tables.name",descriptionKey:"rules.empty-line-around-tables.description",type:"Spacing",ruleIgnoreTypes:[f.yaml,f.code,f.math,f.inlineMath,f.wikiLink,f.link]})}get OptionsClass(){return ul}apply(t,i){return Uu(t)}get exampleBuilders(){return[new y({description:"Tables that start a document do not get an empty line before them.",before:p` + | Column 1 | Column 2 | + |----------|----------| + | foo | bar | + | baz | qux | + | quux | quuz | + More text. + # Heading + ${""} + **Note that text directly following a table is considered part of a table according to github markdown** + `,after:p` + | Column 1 | Column 2 | + |----------|----------| + | foo | bar | + | baz | qux | + | quux | quuz | + ${""} + More text. + # Heading + ${""} + **Note that text directly following a table is considered part of a table according to github markdown** + `}),new y({description:"Tables that end a document do not get an empty line after them.",before:p` + # Heading 1 + | Column 1 | Column 2 | + |----------|----------| + | foo | bar | + | baz | qux | + | quux | quuz | + `,after:p` + # Heading 1 + ${""} + | Column 1 | Column 2 | + |----------|----------| + | foo | bar | + | baz | qux | + | quux | quuz | + `}),new y({description:"Tables that are not at the start or the end of the document will have an empty line added before and after them",before:p` + # Table 1 + | Column 1 | Column 2 | Column 3 | + |----------|----------|----------| + | foo | bar | blob | + | baz | qux | trust | + | quux | quuz | glob | + # Table 2 without Pipe at Start and End + | Column 1 | Column 2 | + :-: | -----------: + bar | baz + foo | bar + # Header for more content + New paragraph. + `,after:p` + # Table 1 + ${""} + | Column 1 | Column 2 | Column 3 | + |----------|----------|----------| + | foo | bar | blob | + | baz | qux | trust | + | quux | quuz | glob | + ${""} + # Table 2 without Pipe at Start and End + ${""} + | Column 1 | Column 2 | + :-: | -----------: + bar | baz + foo | bar + ${""} + # Header for more content + New paragraph. + `}),new y({description:"Tables in callouts or blockquotes have the appropriately formatted blank lines added",before:p` + > Table in blockquote + > | Column 1 | Column 2 | Column 3 | + > |----------|----------|----------| + > | foo | bar | blob | + > | baz | qux | trust | + > | quux | quuz | glob | + ${""} + More content here + ${""} + > Table doubly nested in blockquote + > > | Column 1 | Column 2 | Column 3 | + > > |----------|----------|----------| + > > | foo | bar | blob | + > > | baz | qux | trust | + > > | quux | quuz | glob | + `,after:p` + > Table in blockquote + > + > | Column 1 | Column 2 | Column 3 | + > |----------|----------|----------| + > | foo | bar | blob | + > | baz | qux | trust | + > | quux | quuz | glob | + ${""} + More content here + ${""} + > Table doubly nested in blockquote + > + > > | Column 1 | Column 2 | Column 3 | + > > |----------|----------|----------| + > > | foo | bar | blob | + > > | baz | qux | trust | + > > | quux | quuz | glob | + `})]}get optionBuilders(){return[]}};rr=A([w.register],rr);var ar=class{constructor(){this.defaultEscapeCharacter='"';this.tryToEscapeSingleLineArrays=!1}};A([w.noSettingControl()],ar.prototype,"defaultEscapeCharacter",2);var bt=class extends w{constructor(){super({nameKey:"rules.escape-yaml-special-characters.name",descriptionKey:"rules.escape-yaml-special-characters.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return ar}apply(t,i){return Ae(t,n=>{let r=n.split(` +`),a=r.length;if(a<1)return n;for(let s=0;s=o.length,c=o.startsWith("-"),u=c&&o.length<2;if(d&&u)continue;let m=1;if(!c)m+=l;else if(l!==-1&&s+1{for(let r of i.forceYamlEscape){let a=Ce(n,r);if(a!=null){if(a.includes(` +`)||a.startsWith(" [")||nn(a))continue;a=li(a,i.defaultEscapeCharacter,!0),n=Te(n,r," "+a)}}return n})}get exampleBuilders(){return[new y({description:"YAML without anything to escape",before:p` + --- + key: value + otherKey: [] + --- + `,after:p` + --- + key: value + otherKey: [] + --- + `}),new y({description:"Force YAML keys to be escaped with double quotes where not already escaped with `Force YAML Escape on Keys = 'key'\\n'title'\\n'bool'`",before:p` + --- + key: 'Already escaped value' + title: This is a title + bool: false + unaffected: value + --- + ${""} + _Note that the force YAML key option should not be used with arrays._ + `,after:p` + --- + key: 'Already escaped value' + title: "This is a title" + bool: "false" + unaffected: value + --- + ${""} + _Note that the force YAML key option should not be used with arrays._ + `,options:{forceYamlEscape:["key","title","bool"],defaultEscapeCharacter:'"'}})]}get optionBuilders(){return[new be({OptionsClass:lr,nameKey:"rules.force-yaml-escape.force-yaml-escape-keys.name",descriptionKey:"rules.force-yaml-escape.force-yaml-escape-keys.description",optionsKey:"forceYamlEscape"})]}};vt=A([w.register],vt);var ml=class{},xt=class extends w{constructor(){super({nameKey:"rules.format-tags-in-yaml.name",descriptionKey:"rules.format-tags-in-yaml.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return ml}apply(t,i){return Ae(t,n=>n.replace(new RegExp(`\\n(${Hn}|${tl}):(.*?)(?=\\n(?:[A-Za-z-]+?:|---))`,"s"),function(r){return r.replaceAll("#","")}))}get exampleBuilders(){return[new y({description:"Format Tags in YAML frontmatter",before:p` + --- + tags: #one #two #three #nested/four/five + --- + `,after:p` + --- + tags: one two three nested/four/five + --- + `}),new y({description:"Format tags in array",before:p` + --- + tags: [#one #two #three] + --- + `,after:p` + --- + tags: [one two three] + --- + `}),new y({description:"Format tags in array with `tag` as the tags key",before:p` + --- + tag: [#one #two #three] + --- + `,after:p` + --- + tag: [one two three] + --- + `}),new y({description:"Format tags in list",before:p` + --- + tags: + - #tag1 + - #tag2 + --- + `,after:p` + --- + tags: + - tag1 + - tag2 + --- + `})]}get optionBuilders(){return[]}};xt=A([w.register],xt);var Ze=class{constructor(){this.aliasArrayStyle="single-line";this.formatAliasKey=!0;this.tagArrayStyle="single-line";this.formatTagKey=!0;this.defaultArrayStyle="single-line";this.formatArrayKeys=!0;this.forceSingleLineArrayStyle=[];this.forceMultiLineArrayStyle=[];this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};A([w.noSettingControl()],Ze.prototype,"aliasArrayStyle",2),A([w.noSettingControl()],Ze.prototype,"tagArrayStyle",2),A([w.noSettingControl()],Ze.prototype,"defaultEscapeCharacter",2),A([w.noSettingControl()],Ze.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var cr=class extends w{constructor(){super({nameKey:"rules.format-yaml-array.name",descriptionKey:"rules.format-yaml-array.description",type:"YAML"})}get OptionsClass(){return Ze}apply(t,i){return Ae(t,n=>{let r=Mi(n.replace(`--- +`,"").replace(` +---`,""));if(!r)return n;for(let a of Wn)if(i.formatAliasKey&&Object.keys(r).includes(a)){n=Te(n,a,Qe(Xa(vi(Ce(n,a))),i.aliasArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays,!0));break}for(let a of $n)if(i.formatTagKey&&Object.keys(r).includes(a)){n=Te(n,a,Qe(Ja(vi(Ce(n,a))),i.tagArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays));break}if(i.formatArrayKeys){let a=[...Wn,...$n,...i.forceMultiLineArrayStyle,...i.forceSingleLineArrayStyle];for(let s of Object.keys(r))a.includes(s)||!Array.isArray(r[s])||r[s].length!==0&&typeof r[s][0]=="object"&&r[s][0]!==null||(n=Te(n,s,Qe(vi(Ce(n,s)),i.defaultArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays)))}for(let a of i.forceSingleLineArrayStyle)Object.keys(r).includes(a)&&(n=Te(n,a,Qe(vi(Ce(n,a)),"single-line",i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays)));for(let a of i.forceMultiLineArrayStyle)Object.keys(r).includes(a)&&(n=Te(n,a,Qe(vi(Ce(n,a)),"multi-line",i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays)));return n})}get exampleBuilders(){return[new y({description:"Format tags as a single-line array delimited by spaces and aliases as a multi-line array and format the key `test` to be a single-line array",before:p` + --- + tags: + - computer + - research + aliases: Title 1, Title2 + test: this is a value + --- + ${""} + # Notes: + ${""} + Nesting YAML arrays may result in unexpected results. + ${""} + Multi-line arrays will have empty values removed only leaving one if it is completely empty. The same is not true for single-line arrays as that is invalid YAML unless it comes as the last entry in the array. + `,after:p` + --- + tags: [computer, research] + aliases: + - Title 1 + - Title2 + test: [this is a value] + --- + ${""} + # Notes: + ${""} + Nesting YAML arrays may result in unexpected results. + ${""} + Multi-line arrays will have empty values removed only leaving one if it is completely empty. The same is not true for single-line arrays as that is invalid YAML unless it comes as the last entry in the array. + `,options:{aliasArrayStyle:"multi-line",forceSingleLineArrayStyle:["test"]}}),new y({description:"Format tags as a single string with space delimiters, ignore aliases, and format regular YAML arrays as single-line arrays",before:p` + --- + aliases: Typescript + types: + - thought provoking + - peer reviewed + tags: [computer, science, trajectory] + --- + `,after:p` + --- + aliases: Typescript + types: [thought provoking, peer reviewed] + tags: computer science trajectory + --- + `,options:{formatAliasKey:!1,tagArrayStyle:"single string space delimited"}}),new y({description:"Arrays with dictionaries in them are ignored",before:p` + --- + gists: + - id: test123 + url: 'some_url' + filename: file.md + isPublic: true + --- + `,after:p` + --- + gists: + - id: test123 + url: 'some_url' + filename: file.md + isPublic: true + --- + `,options:{formatArrayKeys:!0,defaultArrayStyle:"single-line"}})]}get optionBuilders(){return[new U({OptionsClass:Ze,nameKey:"rules.format-yaml-array.alias-key.name",descriptionKey:"rules.format-yaml-array.alias-key.description",optionsKey:"formatAliasKey"}),new U({OptionsClass:Ze,nameKey:"rules.format-yaml-array.tag-key.name",descriptionKey:"rules.format-yaml-array.tag-key.description",optionsKey:"formatTagKey"}),new ne({OptionsClass:Ze,nameKey:"rules.format-yaml-array.default-array-style.name",descriptionKey:"rules.format-yaml-array.default-array-style.description",optionsKey:"defaultArrayStyle",records:[{value:"multi-line",description:"```key:\\n - value```"},{value:"single-line",description:"```key: [value]```"}]}),new U({OptionsClass:Ze,nameKey:"rules.format-yaml-array.default-array-keys.name",descriptionKey:"rules.format-yaml-array.default-array-keys.description",optionsKey:"formatArrayKeys"}),new be({OptionsClass:Ze,nameKey:"rules.format-yaml-array.force-single-line-array-style.name",descriptionKey:"rules.format-yaml-array.force-single-line-array-style.description",optionsKey:"forceSingleLineArrayStyle"}),new be({OptionsClass:Ze,nameKey:"rules.format-yaml-array.force-multi-line-array-style.name",descriptionKey:"rules.format-yaml-array.force-multi-line-array-style.description",optionsKey:"forceMultiLineArrayStyle"})]}};cr=A([w.register],cr);var vs=class{constructor(){this.startAtH2=!1}},dr=class extends w{constructor(){super({nameKey:"rules.header-increment.name",descriptionKey:"rules.header-increment.description",type:"Heading",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return vs}apply(t,i){let n=0,r=i.startAtH2?2:1,a=[],s=[0,0,0,0,0,0],o=s.length;return t.replace(Pi,(l,d="",c="",u="",m="",g="")=>{let h=c.length;if(h=h<=o?h:o,s[h-1]>=0&&h=x;b--)s[b]=0}if(s[h-1]<=0){let x=n,b=a.length+r;b=b<=o?b:o;for(let v=x;vn.trimStart())}get exampleBuilders(){return[new y({description:"Removes spaces prior to a heading",before:p` + ${""} ## Other heading preceded by 2 spaces ## + _Note that if the spacing is enough for the header to be considered to be part of a codeblock it will not be affected by this rule._ + `,after:p` + ## Other heading preceded by 2 spaces ## + _Note that if the spacing is enough for the header to be considered to be part of a codeblock it will not be affected by this rule._ + `}),new y({description:"Tags are not affected by this",before:p` + ${""} #test + ${""} # Heading & + `,after:p` + ${""} #test + # Heading & + `})]}get optionBuilders(){return[]}};mr=A([w.register],mr);var xs=class{constructor(){this.textToInsert=["aliases: ","tags: "]}},gr=class extends w{constructor(){super({nameKey:"rules.insert-yaml-attributes.name",descriptionKey:"rules.insert-yaml-attributes.description",type:"YAML"})}get OptionsClass(){return xs}apply(t,i){return t=bi(t),Ae(t,n=>{let r=i.textToInsert.reverse(),a=Mi(n.match(Ge)[1]);for(let s of r){let o=s.split(":")[0];Object.prototype.hasOwnProperty.call(a,o)||(n=n.replace(/^---\n/,Ke(`--- +${s} +`)))}return n})}get exampleBuilders(){return[new y({description:"Insert static lines into YAML frontmatter. Text to insert: `aliases:\ntags: doc\nanimal: dog`",before:p` + --- + animal: cat + --- + `,after:p` + --- + aliases: + tags: doc + animal: cat + --- + `,options:{textToInsert:["aliases:","tags: doc","animal: dog"]}})]}get optionBuilders(){return[new be({OptionsClass:xs,nameKey:"rules.insert-yaml-attributes.text-to-insert.name",descriptionKey:"rules.insert-yaml-attributes.text-to-insert.description",optionsKey:"textToInsert"})]}};gr=A([w.register],gr);var hl=class{},hr=class extends w{constructor(){super({nameKey:"rules.line-break-at-document-end.name",descriptionKey:"rules.line-break-at-document-end.description",type:"Spacing"})}get OptionsClass(){return hl}apply(t,i){return t=t.replace(/\n+$/g,""),t+=` +`,t}get exampleBuilders(){return[new y({description:"Appending a line break to the end of the document.",before:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + `,after:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + ${""} + `}),new y({description:"Removing trailing line breaks to the end of the document, except one.",before:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + ${""} + ${""} + ${""} + `,after:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + ${""} + `})]}get optionBuilders(){return[]}};hr=A([w.register],hr);var fl=class{},fr=class extends w{constructor(){super({nameKey:"rules.move-footnotes-to-the-bottom.name",descriptionKey:"rules.move-footnotes-to-the-bottom.description",type:"Footnote",ruleIgnoreTypes:[f.code,f.inlineCode,f.math,f.yaml]})}get OptionsClass(){return fl}apply(t,i){return yu(t)}get exampleBuilders(){return[new y({description:"Moving footnotes to the bottom",before:p` + Lorem ipsum, consectetur adipiscing elit. [^1] Donec dictum turpis quis ipsum pellentesque. + ${""} + [^1]: first footnote + ${""} + Quisque lorem est, fringilla sed enim at, sollicitudin lacinia nisi.[^2] + [^2]: second footnote + ${""} + Maecenas malesuada dignissim purus ac volutpat. + `,after:p` + Lorem ipsum, consectetur adipiscing elit. [^1] Donec dictum turpis quis ipsum pellentesque. + ${""} + Quisque lorem est, fringilla sed enim at, sollicitudin lacinia nisi.[^2] + Maecenas malesuada dignissim purus ac volutpat. + ${""} + [^1]: first footnote + [^2]: second footnote + `})]}get optionBuilders(){return[]}};fr=A([w.register],fr);var ws=class{constructor(){this.minimumNumberOfDollarSignsToBeAMathBlock=2}};A([w.noSettingControl()],ws.prototype,"minimumNumberOfDollarSignsToBeAMathBlock",2);var wt=class extends w{constructor(){super({nameKey:"rules.move-math-block-indicators-to-their-own-line.name",descriptionKey:"rules.move-math-block-indicators-to-their-own-line.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.inlineCode],hasSpecialExecutionOrder:!0})}get OptionsClass(){return ws}apply(t,i){return Cu(t,i.minimumNumberOfDollarSignsToBeAMathBlock)}get exampleBuilders(){return[new y({description:"Moving math block indicator to its own line when `Number of Dollar Signs to Indicate a Math Block` = 2",before:p` + This is left alone: + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + The following is updated: + $$L = \\frac{1}{2} \\rho v^2 S C_L$$ + `,after:p` + This is left alone: + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + The following is updated: + $$ + L = \\frac{1}{2} \\rho v^2 S C_L + $$ + `}),new y({description:"Moving math block indicator to its own line when `Number of Dollar Signs to Indicate a Math Block` = 3 and opening indicator is on the same line as the start of the content",before:p` + $$$\\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$$ + `,after:p` + $$$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$$ + `}),new y({description:"Moving math block indicator to its own line when `Number of Dollar Signs to Indicate a Math Block` = 2 and ending indicator is on the same line as the ending line of the content",before:p` + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix}$$ + `,after:p` + $$ + \\boldsymbol{a}=\\begin{bmatrix}a_x \\\\ a_y\\end{bmatrix} + $$ + `})]}get optionBuilders(){return[]}};wt=A([w.register],wt);var Vi=class{constructor(){this.tagArrayStyle="single-line";this.howToHandleExistingTags="Nothing";this.tagsToIgnore=[];this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};A([w.noSettingControl()],Vi.prototype,"tagArrayStyle",2),A([w.noSettingControl()],Vi.prototype,"defaultEscapeCharacter",2),A([w.noSettingControl()],Vi.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var yr=class extends w{constructor(){super({nameKey:"rules.move-tags-to-yaml.name",descriptionKey:"rules.move-tags-to-yaml.description",type:"YAML",ruleIgnoreTypes:[f.code,f.inlineCode,f.math,f.html,f.wikiLink,f.link]})}get OptionsClass(){return Vi}apply(t,i){let n;return we([f.yaml],t,r=>(n=Gu(r),r)),n.length===0||(t=bi(t),t=Ae(t,r=>{r=r.replace(`--- +`,"").replace("---","");let a=[],s=Hn;for(let d of $n){let c=Ce(r,d);if(c!=null){a=Ja(vi(c)),s=d;break}}let o=new Set;if(typeof a=="string")o.add(a),a=[a];else if(a!=null)for(let d of a)o.add(d);else a=[];for(let d of n){let c=d.trim().substring(1);!o.has(c)&&!i.tagsToIgnore.includes(c)&&(o.add(c),a.push(c))}return`--- +${Te(r,s,Qe(a,i.tagArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays))}---`}),t=we([f.yaml],t,r=>(i.howToHandleExistingTags!=="Nothing"&&(r=r.replace(jn,a=>{let s=a.indexOf("#"),o=a.substring(s+1);return i.tagsToIgnore.includes(o)?a:i.howToHandleExistingTags==="Remove hashtag"?a.substring(0,s)+o:""})),r)),t=t.replace(/(\n---)( |\t)+/,"$1")),t}get exampleBuilders(){return[new y({description:"Move tags from body to YAML with `Tags to ignore = 'ignored-tag'`",before:p` + Text has to do with #test and #markdown + ${""} + #test content here + \`\`\` + #ignored + Code block content is ignored + \`\`\` + ${""} + This inline code \`#ignored content\` + ${""} + #ignored-tag is ignored since it is in the ignored list + `,after:p` + --- + tags: [test, markdown] + --- + Text has to do with #test and #markdown + ${""} + #test content here + \`\`\` + #ignored + Code block content is ignored + \`\`\` + ${""} + This inline code \`#ignored content\` + ${""} + #ignored-tag is ignored since it is in the ignored list + `,options:{tagsToIgnore:["ignored-tag"]}}),new y({description:"Move tags from body to YAML with existing tags retains the already existing ones and only adds new ones",before:p` + --- + tags: [test, tag2] + --- + Text has to do with #test and #markdown + `,after:p` + --- + tags: [test, tag2, markdown] + --- + Text has to do with #test and #markdown + `}),new y({description:"Move tags to YAML frontmatter and then remove hashtags in body content tags when `Body tag operation = 'Remove hashtag'` and `Tags to ignore = 'yet-another-ignored-tag'`.",before:p` + --- + tags: [test, tag2] + --- + Text has to do with #test and #markdown + ${""} + The tag at the end of this line stays as a tag since it is ignored #yet-another-ignored-tag + `,after:p` + --- + tags: [test, tag2, markdown] + --- + Text has to do with test and markdown + ${""} + The tag at the end of this line stays as a tag since it is ignored #yet-another-ignored-tag + `,options:{howToHandleExistingTags:"Remove hashtag",tagsToIgnore:["yet-another-ignored-tag"]}}),new y({description:"Move tags to YAML frontmatter and then remove body content tags when `Body tag operation = 'Remove whole tag'`.",before:p` + --- + tags: [test, tag2] + --- + This document will have #tags removed and spacing around tags is left alone except for the space prior to the hashtag #warning + `,after:p` + --- + tags: [test, tag2, tags, warning] + --- + This document will have removed and spacing around tags is left alone except for the space prior to the hashtag + `,options:{howToHandleExistingTags:"Remove whole tag"}})]}get optionBuilders(){return[new ne({OptionsClass:Vi,nameKey:"rules.move-tags-to-yaml.how-to-handle-existing-tags.name",descriptionKey:"rules.move-tags-to-yaml.how-to-handle-existing-tags.description",optionsKey:"howToHandleExistingTags",records:[{value:"Nothing",description:"Leaves tags in the body of the file alone"},{value:"Remove hashtag",description:"Removes `#` from tags in content body after moving them to the YAML frontmatter"},{value:"Remove whole tag",description:"Removes the whole tag in content body after moving them to the YAML frontmatter. _Note that this removes the first space prior to the tag as well_"}]}),new be({OptionsClass:Vi,nameKey:"rules.move-tags-to-yaml.tags-to-ignore.name",descriptionKey:"rules.move-tags-to-yaml.tags-to-ignore.description",optionsKey:"tagsToIgnore"})]}};yr=A([w.register],yr);var zs=class{constructor(){this.noBareURIs=!1}},ks="'\"\u2018\u2019\u201C\u201D`[]",zb=["http","ftp","https","smtp"],br=class extends w{constructor(){super({nameKey:"rules.no-bare-urls.name",descriptionKey:"rules.no-bare-urls.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag,f.image,f.inlineCode,f.anchorTag,f.html]})}get OptionsClass(){return zs}apply(t,i){let n=t.match(Jt);if(n&&(t=this.handleMatches(t,n,!1)),i.noBareURIs){let r=t.match(Nu);r&&(t=this.handleMatches(t,r,!0))}return t}handleMatches(t,i,n){let r=0,a=i.length;for(let s=0;s"&&(o=o.substring(0,o.length-1),d--);let c=l===0?void 0:t.charAt(l-1),u=d>=t.length?void 0:t.charAt(d),m=Ut(o,"(");if(m!=0&&m!=Ut(o,")")&&u==")"?(o+=u,d++,u=d>=t.length?void 0:t.charAt(d)):m==0&&o.endsWith(")")&&(u=")",d--,o=o.substring(0,o.length-1)),this.skipMatch(c,u,o,n)){r=l+o.length;continue}if(c!=null&&c==="<"&&u!=null&&u===">"){let g=l-1;for(;g>0&&t.charAt(g-1)==="<";)g--;let h=d;for(;h";)h++;t=pe(t,g,h+1,"<"+o+">"),r=l+o.length;continue}t=pe(t,l,l+o.length,"<"+o+">"),r=l+o.length+2}return t}skipMatch(t,i,n,r){let a=t!=null&&ks.includes(t)||ks.includes(n.charAt(0)),s=i!=null&&ks.includes(i)||ks.includes(n.charAt(n.length-1));return a&&s?!0:r?zb.includes(n.substring(0,n.indexOf(":"))):!1}get exampleBuilders(){return[new y({description:"Make sure that links are inside of angle brackets when not in single quotes('), double quotes(\"), or backticks(`)",before:p` + https://github.com + braces around url should stay the same: [https://github.com] + backticks around url should stay the same: \`https://github.com\` + Links mid-sentence should be updated like https://google.com will be. + 'https://github.com' + "https://github.com" + + links should stay the same: [](https://github.com) + https://gitlab.com + `,after:p` + + braces around url should stay the same: [https://github.com] + backticks around url should stay the same: \`https://github.com\` + Links mid-sentence should be updated like will be. + 'https://github.com' + "https://github.com" + + links should stay the same: [](https://github.com) + + `}),new y({description:`Angle brackets are added if the url is not the only text in the single quotes(') or double quotes(")`,before:p` + [https://github.com some text here] + backticks around a url should stay the same: \`https://github.com some text here\` + single quotes around a url should stay the same, but only if the contents of the single quotes is the url: 'https://github.com some text here' + double quotes around a url should stay the same, but only if the contents of the double quotes is the url: "https://github.com some text here" + `,after:p` + [ some text here] + backticks around a url should stay the same: \`https://github.com some text here\` + single quotes around a url should stay the same, but only if the contents of the single quotes is the url: ' some text here' + double quotes around a url should stay the same, but only if the contents of the double quotes is the url: " some text here" + `}),new y({description:"Multiple angle brackets at the start and or end of a url will be reduced down to 1",before:p` + < + > + <> + `,after:p` + + + + `}),new y({description:"Puts angle brackets around URIs when `No Bare URIs` is enabled",before:p` + obsidian://show-plugin?id=cycle-in-sidebar + `,after:p` + + `,options:{noBareURIs:!0}})]}get optionBuilders(){return[new U({OptionsClass:zs,nameKey:"rules.no-bare-urls.no-bare-uris.name",descriptionKey:"rules.no-bare-urls.no-bare-uris.description",optionsKey:"noBareURIs"})]}};br=A([w.register],br);var xr=class{constructor(){this.numberStyle="ascending";this.listEndStyle="."}},vr=class extends w{constructor(){super({nameKey:"rules.ordered-list-style.name",descriptionKey:"rules.ordered-list-style.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.tag]})}get OptionsClass(){return xr}apply(t,i){return Eu(t,i.numberStyle,i.listEndStyle)}get exampleBuilders(){return[new y({description:"Ordered lists have list items set to ascending numerical order when Number Style is `ascending`.",before:p` + 1. Item 1 + 2. Item 2 + 4. Item 3 + ${""} + Some text here + ${""} + 1. Item 1 + 1. Item 2 + 1. Item 3 + `,after:p` + 1. Item 1 + 2. Item 2 + 3. Item 3 + ${""} + Some text here + ${""} + 1. Item 1 + 2. Item 2 + 3. Item 3 + `}),new y({description:"Nested ordered lists have list items set to ascending numerical order when Number Style is `ascending`.",before:p` + 1. Item 1 + 2. Item 2 + 1. Subitem 1 + 5. Subitem 2 + 2. Subitem 3 + 4. Item 3 + `,after:p` + 1. Item 1 + 2. Item 2 + 1. Subitem 1 + 2. Subitem 2 + 3. Subitem 3 + 3. Item 3 + `}),new y({description:"Ordered list in blockquote has list items set to '1.' when Number Style is `lazy`.",before:p` + > 1. Item 1 + > 4. Item 2 + > > 1. Subitem 1 + > > 5. Subitem 2 + > > 2. Subitem 3 + `,after:p` + > 1. Item 1 + > 1. Item 2 + > > 1. Subitem 1 + > > 1. Subitem 2 + > > 1. Subitem 3 + `,options:{numberStyle:"lazy"}}),new y({description:"Ordered list in blockquote has list items set to ascending numerical order when Number Style is `ascending`.",before:p` + > 1. Item 1 + > 4. Item 2 + > > 1. Subitem 1 + > > 5. Subitem 2 + > > 2. Subitem 3 + `,after:p` + > 1. Item 1 + > 2. Item 2 + > > 1. Subitem 1 + > > 2. Subitem 2 + > > 3. Subitem 3 + `}),new y({description:"Nested ordered list has list items set to '1)' when Number Style is `lazy` and Ordered List Indicator End Style is `)`.",before:p` + 1. Item 1 + 2. Item 2 + 1. Subitem 1 + 5. Subitem 2 + 2. Subitem 3 + 4. Item 3 + `,after:p` + 1) Item 1 + 1) Item 2 + 1) Subitem 1 + 1) Subitem 2 + 1) Subitem 3 + 1) Item 3 + `,options:{listEndStyle:")",numberStyle:"lazy"}})]}get optionBuilders(){return[new ne({OptionsClass:xr,nameKey:"rules.ordered-list-style.number-style.name",descriptionKey:"rules.ordered-list-style.number-style.description",optionsKey:"numberStyle",records:[{value:"ascending",description:"Makes sure ordered list items are ascending (i.e. 1, 2, 3, etc.)"},{value:"lazy",description:"Makes sure ordered list item indicators all are the number 1"}]}),new ne({OptionsClass:xr,nameKey:"rules.ordered-list-style.list-end-style.name",descriptionKey:"rules.ordered-list-style.list-end-style.description",optionsKey:"listEndStyle",records:[{value:".",description:"Makes sure ordered list items indicators end in '.' (i.e `1.`)"},{value:")",description:"Makes sure ordered list item indicators end in ')' (i.e. `1)`)"}]})]}};vr=A([w.register],vr);var yl=class{},wr=class extends w{constructor(){super({nameKey:"rules.paragraph-blank-lines.name",descriptionKey:"rules.paragraph-blank-lines.description",type:"Spacing",ruleIgnoreTypes:[f.obsidianMultiLineComments,f.yaml,f.table]})}get OptionsClass(){return yl}apply(t,i){return wu(t)}get exampleBuilders(){return[new y({description:"Paragraphs should be surrounded by blank lines",before:p` + # H1 + Newlines are inserted. + A paragraph is a line that starts with a letter. + `,after:p` + # H1 + ${""} + Newlines are inserted. + ${""} + A paragraph is a line that starts with a letter. + `}),new y({description:"Paragraphs can be extended via the use of 2 or more spaces at the end of a line or line break html",before:p` + # H1 + Content${" "} + Paragraph content continued
+ Paragraph content continued once more
+ Last line of paragraph + A new paragraph + # H2 + `,after:p` + # H1 + ${""} + Content${" "} + Paragraph content continued
+ Paragraph content continued once more
+ Last line of paragraph + ${""} + A new paragraph + ${""} + # H2 + `})]}get optionBuilders(){return[]}};wr=A([w.register],wr);var kr=class{};A([w.noSettingControl()],kr.prototype,"lineContent",2),A([w.noSettingControl()],kr.prototype,"selectedText",2);var kt=class extends w{constructor(){super({nameKey:"rules.prevent-double-checklist-indicator-on-paste.name",descriptionKey:"rules.prevent-double-checklist-indicator-on-paste.description",type:"Paste"})}get OptionsClass(){return kr}apply(t,i){let n=Wu.test(i.lineContent),r=Ua.test(t),a=Ua.test(i.selectedText);return!n||!r||a?t:t.replace(Ua,"")}get exampleBuilders(){return[new y({description:"Line being pasted is left alone when current line has no checklist indicator in it: `Regular text here`",before:p` + - [ ] Checklist item being pasted + `,after:p` + - [ ] Checklist item being pasted + `,options:{lineContent:"Regular text here",selectedText:""}}),new y({description:"Line being pasted into a blockquote without a checklist indicator is left alone when it lacks a checklist indicator: `> > `",before:p` + - [ ] Checklist item contents here + More content here + `,after:p` + - [ ] Checklist item contents here + More content here + `,options:{lineContent:"> > ",selectedText:""}}),new y({description:"Line being pasted into a blockquote with a checklist indicator has its checklist indicator removed when current line is: `> - [x] `",before:p` + - [ ] Checklist item contents here + More content here + `,after:p` + Checklist item contents here + More content here + `,options:{lineContent:"> - [x] ",selectedText:""}}),new y({description:"Line being pasted with a checklist indicator has its checklist indicator removed when current line is: `- [ ] `",before:p` + - [x] Checklist item 1 + - [ ] Checklist item 2 + `,after:p` + Checklist item 1 + - [ ] Checklist item 2 + `,options:{lineContent:"- [ ] ",selectedText:""}}),new y({description:"Line being pasted as a checklist indicator has its checklist indicator removed when current line is: `- [!] `",before:p` + - [x] Checklist item 1 + - [ ] Checklist item 2 + `,after:p` + Checklist item 1 + - [ ] Checklist item 2 + `,options:{lineContent:"- [!] ",selectedText:""}}),new y({description:"When pasting a checklist and the selected text starts with a checklist, the text to paste should still start with a checklist",before:p` + - [x] Checklist item 1 + - [ ] Checklist item 2 + `,after:p` + - [x] Checklist item 1 + - [ ] Checklist item 2 + `,options:{lineContent:"- [!] Some text here",selectedText:"- [!] Some text here"}})]}get optionBuilders(){return[]}};kt=A([w.register],kt);var zr=class{};A([w.noSettingControl()],zr.prototype,"lineContent",2),A([w.noSettingControl()],zr.prototype,"selectedText",2);var zt=class extends w{constructor(){super({nameKey:"rules.prevent-double-list-item-indicator-on-paste.name",descriptionKey:"rules.prevent-double-list-item-indicator-on-paste.description",type:"Paste"})}get OptionsClass(){return zr}apply(t,i){let n=new RegExp(`^${Yn}[*+-] `),r=/^\s*[*+-] /,a=n.test(i.lineContent),s=n.test(i.selectedText),o=r.test(t);return s||!a||!o?t:t.replace(r,"")}get exampleBuilders(){return[new y({description:"Line being pasted is left alone when current line has no list indicator in it: `Regular text here`",before:p` + - List item being pasted + `,after:p` + - List item being pasted + `,options:{lineContent:"Regular text here",selectedText:""}}),new y({description:"Line being pasted into a blockquote without a list indicator is left alone when it lacks a list indicator: `> > `",before:p` + * List item contents here + More content here + `,after:p` + * List item contents here + More content here + `,options:{lineContent:"> > ",selectedText:""}}),new y({description:"Line being pasted into a blockquote with a list indicator is has its list indicator removed when current line is: `> * `",before:p` + + List item contents here + More content here + `,after:p` + List item contents here + More content here + `,options:{lineContent:"> * ",selectedText:""}}),new y({description:"Line being pasted with a list indicator is has its list indicator removed when current line is: `+ `",before:p` + - List item 1 + - List item 2 + `,after:p` + List item 1 + - List item 2 + `,options:{lineContent:"+ ",selectedText:""}}),new y({description:"When pasting a list item and the selected text starts with a list item indicator, the text to paste should still start with a list item indicator",before:p` + - List item 1 + - List item 2 + `,after:p` + - List item 1 + - List item 2 + `,options:{lineContent:"+ ",selectedText:"+ "}})]}get optionBuilders(){return[]}};zt=A([w.register],zt);var bl=class{},St=class extends w{constructor(){super({nameKey:"rules.proper-ellipsis-on-paste.name",descriptionKey:"rules.proper-ellipsis-on-paste.description",type:"Paste"})}get OptionsClass(){return bl}apply(t,i){return t.replaceAll(Va,"\u2026")}get exampleBuilders(){return[new y({description:"Replacing three consecutive dots with an ellipsis even if spaces are present",before:p` + Lorem (...) Impsum. + Lorem (. ..) Impsum. + Lorem (. . .) Impsum. + `,after:p` + Lorem (…) Impsum. + Lorem (…) Impsum. + Lorem (…) Impsum. + `})]}get optionBuilders(){return[]}};St=A([w.register],St);var vl=class{},Sr=class extends w{constructor(){super({nameKey:"rules.proper-ellipsis.name",descriptionKey:"rules.proper-ellipsis.description",type:"Content"})}get OptionsClass(){return vl}apply(t,i){return we([f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag,f.image],t,n=>n.replaceAll(Va,"\u2026"))}get exampleBuilders(){return[new y({description:"Replacing three consecutive dots with an ellipsis.",before:p` + Lorem (...) Impsum. + `,after:p` + Lorem (…) Impsum. + `})]}get optionBuilders(){return[]}};Sr=A([w.register],Sr);var At=class{constructor(){this.singleQuoteStyleEnabled=!0;this.singleQuoteStyle="''";this.doubleQuoteStyleEnabled=!0;this.doubleQuoteStyle='""'}},Ar=class extends w{constructor(){super({nameKey:"rules.quote-style.name",descriptionKey:"rules.quote-style.description",type:"Content",ruleIgnoreTypes:[f.code,f.inlineCode,f.math,f.yaml,f.math,f.inlineMath,f.html,f.templaterCommand]})}get OptionsClass(){return At}apply(t,i){let n=t;return i.doubleQuoteStyleEnabled&&(i.doubleQuoteStyle==='""'?n=this.convertSmartDoubleQuotesToStraightQuotes(n):n=this.convertStraightQuoteToSmartQuote(n,'"',"\u201C\u201D"[0],"\u201C\u201D"[1],!1)),i.singleQuoteStyleEnabled&&(i.singleQuoteStyle==="''"?n=this.convertSmartSingleQuotesToStraightQuotes(n):n=this.convertStraightQuoteToSmartQuote(n,"'","\u2018\u2019"[0],"\u2018\u2019"[1],!0)),n}convertSmartSingleQuotesToStraightQuotes(t){return t.replace(Hu,"'")}convertSmartDoubleQuotesToStraightQuotes(t){return t.replace(Pu,'"')}convertStraightQuoteToSmartQuote(t,i,n,r,a){let s=Ld(i,t);if(s.length===0)return t;let o=t.length-1,l,d="",c="",u=!1,m=!1,g=!1,h=!1,x=!1,b="";for(let v of s)d=v==0?"":t.charAt(v-1),c=v===o?"":t.charAt(v+1),u=il.test(d),m=il.test(c),x=u&&m,g=d!=""&&d.trim()==="",h=c!=""&&c.trim()==="",x&&a?l=r:h&&!g?(l=r,b=l):g&&!h?(l=n,b=l):(b===""||b===r?l=n:l=r,b=l),t=pe(t,v,v+1,l);return t}get exampleBuilders(){return[new y({description:"Smart quotes used in file are converted to straight quotes when styles are set to `Straight`",before:p` + # Double Quote Cases + “There are a bunch of different kinds of smart quote indicators” + „More than you would think” + «Including this one for Spanish» + # Single Quote Cases + ‘Simple smart quotes get replaced’ + ‚Another single style smart quote also gets replaced’ + ‹Even this style of single smart quotes is replaced› + `,after:p` + # Double Quote Cases + "There are a bunch of different kinds of smart quote indicators" + "More than you would think" + "Including this one for Spanish" + # Single Quote Cases + 'Simple smart quotes get replaced' + 'Another single style smart quote also gets replaced' + 'Even this style of single smart quotes is replaced' + `}),new y({description:"Straight quotes used in file are converted to smart quotes when styles are set to `Smart`",before:p` + "As you can see, these double quotes will be converted to smart quotes" + "Common contractions are handled as well. For example can't is updated to smart quotes." + "Nesting a quote in a quote like so: 'here I am' is handled correctly" + 'Single quotes by themselves are handled correctly' + Possessives are handled correctly: Pam's dog is really cool! + Templater commands are ignored: <% tp.date.now("YYYY-MM-DD", 7) %> + ${""} + Be careful as converting straight quotes to smart quotes requires you to have an even amount of quotes + once possessives and common contractions have been dealt with. If not, it will throw an error. + `,after:p` + “As you can see, these double quotes will be converted to smart quotes” + “Common contractions are handled as well. For example can’t is updated to smart quotes.” + “Nesting a quote in a quote like so: ‘here I am’ is handled correctly” + ‘Single quotes by themselves are handled correctly’ + Possessives are handled correctly: Pam’s dog is really cool! + Templater commands are ignored: <% tp.date.now("YYYY-MM-DD", 7) %> + ${""} + Be careful as converting straight quotes to smart quotes requires you to have an even amount of quotes + once possessives and common contractions have been dealt with. If not, it will throw an error. + `,options:{singleQuoteStyle:"\u2018\u2019",doubleQuoteStyle:"\u201C\u201D"}})]}get optionBuilders(){return[new U({OptionsClass:At,nameKey:"rules.quote-style.single-quote-enabled.name",descriptionKey:"rules.quote-style.single-quote-enabled.description",optionsKey:"singleQuoteStyleEnabled"}),new ne({OptionsClass:At,nameKey:"rules.quote-style.single-quote-style.name",descriptionKey:"rules.quote-style.single-quote-style.description",optionsKey:"singleQuoteStyle",records:[{value:"''",description:`Uses "'" instead of smart single quotes`},{value:"\u2018\u2019",description:'Uses "\u2018" and "\u2019" instead of straight single quotes'}]}),new U({OptionsClass:At,nameKey:"rules.quote-style.double-quote-enabled.name",descriptionKey:"rules.quote-style.double-quote-enabled.description",optionsKey:"doubleQuoteStyleEnabled"}),new ne({OptionsClass:At,nameKey:"rules.quote-style.double-quote-style.name",descriptionKey:"rules.quote-style.double-quote-style.description",optionsKey:"doubleQuoteStyle",records:[{value:'""',description:`Uses '"' instead of smart double quotes`},{value:"\u201C\u201D",description:"Uses '\u201C' and '\u201D' instead of straight double quotes"}]})]}};Ar=A([w.register],Ar);var xl=class{},Tr=class extends w{constructor(){super({nameKey:"rules.re-index-footnotes.name",descriptionKey:"rules.re-index-footnotes.description",type:"Footnote",ruleIgnoreTypes:[f.code,f.inlineCode,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return xl}apply(t,i){return bu(t)}get exampleBuilders(){return[new y({description:"Re-indexing footnotes after having deleted previous footnotes",before:p` + Lorem ipsum at aliquet felis.[^3] Donec dictum turpis quis pellentesque,[^5] et iaculis tortor condimentum. + ${""} + [^3]: first footnote + [^5]: second footnote + `,after:p` + Lorem ipsum at aliquet felis.[^1] Donec dictum turpis quis pellentesque,[^2] et iaculis tortor condimentum. + ${""} + [^1]: first footnote + [^2]: second footnote + `}),new y({description:"Re-indexing footnotes after inserting a footnote between",before:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit.[^1] Aenean at aliquet felis. Donec dictum turpis quis ipsum pellentesque, et iaculis tortor condimentum.[^1a] Vestibulum nec blandit felis, vulputate finibus purus.[^2] Praesent quis iaculis diam. + ${""} + [^1]: first footnote + [^1a]: third footnote, inserted later + [^2]: second footnotes + `,after:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit.[^1] Aenean at aliquet felis. Donec dictum turpis quis ipsum pellentesque, et iaculis tortor condimentum.[^2] Vestibulum nec blandit felis, vulputate finibus purus.[^3] Praesent quis iaculis diam. + ${""} + [^1]: first footnote + [^2]: third footnote, inserted later + [^3]: second footnotes + `}),new y({description:"Re-indexing footnotes preserves multiple references to the same footnote index",before:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit.[^1] Aenean at aliquet felis. Donec dictum turpis quis ipsum pellentesque, et iaculis tortor condimentum.[^1a] Vestibulum nec blandit felis, vulputate finibus purus.[^2] Praesent quis iaculis diam.[^1] + ${""} + [^1]: first footnote + [^1a]: third footnote, inserted later + [^2]: second footnotes + `,after:p` + Lorem ipsum dolor sit amet, consectetur adipiscing elit.[^1] Aenean at aliquet felis. Donec dictum turpis quis ipsum pellentesque, et iaculis tortor condimentum.[^2] Vestibulum nec blandit felis, vulputate finibus purus.[^3] Praesent quis iaculis diam.[^1] + ${""} + [^1]: first footnote + [^2]: third footnote, inserted later + [^3]: second footnotes + `}),new y({description:"Re-indexing footnotes condense duplicate footnotes into 1 when key and footnote are the same",before:p` + bla[^1], bla[^1], bla[^2] + [^1]: bla + [^1]: bla + [^2]: bla + `,after:p` + bla[^1], bla[^1], bla[^2] + ${""} + [^1]: bla + [^2]: bla + `})]}get optionBuilders(){return[]}};Tr=A([w.register],Tr);var wl=class{},Lr=class extends w{constructor(){super({nameKey:"rules.remove-consecutive-list-markers.name",descriptionKey:"rules.remove-consecutive-list-markers.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return wl}apply(t,i){return t.replace(/^([ |\t]*)- - \b/gm,"$1- ")}get exampleBuilders(){return[new y({description:"Removing consecutive list markers.",before:p` + - item 1 + - - copypasted item A + - item 2 + - indented item + - - copypasted item B + `,after:p` + - item 1 + - copypasted item A + - item 2 + - indented item + - copypasted item B + `})]}get optionBuilders(){return[]}};Lr=A([w.register],Lr);var kl=class{},Er=class extends w{constructor(){super({nameKey:"rules.remove-empty-lines-between-list-markers-and-checklists.name",descriptionKey:"rules.remove-empty-lines-between-list-markers-and-checklists.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag,f.thematicBreak]});this.replaceEmptyLinesBetweenList=function(i,n){let r=new RegExp(`^${n} +{2,}${n}$`,"gm"),a,s=i;do a=s.match(r),s=s.replaceAll(r,`$1 +$4`);while(a);return s}}get OptionsClass(){return kl}apply(i,n){let r=`(( |\\t)*- ${Xt}( |\\t)+.+)`;i=this.replaceEmptyLinesBetweenList(i,r);let a="(( |\\t)*\\d+\\.( |\\t)+.+)";i=this.replaceEmptyLinesBetweenList(i,a);let s="(( |\\t)*\\+( |\\t)+.+)";i=this.replaceEmptyLinesBetweenList(i,s);let o=`(( |\\t)*-(?! ${Xt})( |\\t)+.+)`;i=this.replaceEmptyLinesBetweenList(i,o);let l="(( |\\t)*\\*( |\\t)+.+)";return this.replaceEmptyLinesBetweenList(i,l)}get exampleBuilders(){return[new y({description:"Blank lines are removed between ordered list items",before:p` + 1. Item 1 + ${""} + 2. Item 2 + `,after:p` + 1. Item 1 + 2. Item 2 + `}),new y({description:"Blank lines are removed between list items when the list indicator is '-'",before:p` + - Item 1 + ${""} + \t- Subitem 1 + ${""} + - Item 2 + `,after:p` + - Item 1 + \t- Subitem 1 + - Item 2 + `}),new y({description:"Blank lines are removed between checklist items",before:p` + - [x] Item 1 + ${""} + \t- [!] Subitem 1 + ${""} + - [ ] Item 2 + `,after:p` + - [x] Item 1 + \t- [!] Subitem 1 + - [ ] Item 2 + `}),new y({description:"Blank lines are removed between list items when the list indicator is '+'",before:p` + + Item 1 + ${""} + \t+ Subitem 1 + ${""} + + Item 2 + `,after:p` + + Item 1 + \t+ Subitem 1 + + Item 2 + `}),new y({description:"Blank lines are removed between list items when the list indicator is '*'",before:p` + * Item 1 + ${""} + \t* Subitem 1 + ${""} + * Item 2 + `,after:p` + * Item 1 + \t* Subitem 1 + * Item 2 + `}),new y({description:"Blanks lines are removed between like list types (ordered, specific list item indicators, and checklists) while blanks are left between different kinds of list item indicators",before:p` + 1. Item 1 + ${""} + 2. Item 2 + ${""} + - Item 1 + ${""} + \t- Subitem 1 + ${""} + - Item 2 + ${""} + - [x] Item 1 + ${""} + \t- [f] Subitem 1 + ${""} + - [ ] Item 2 + ${""} + + Item 1 + ${""} + \t+ Subitem 1 + ${""} + + Item 2 + ${""} + * Item 1 + ${""} + \t* Subitem 1 + ${""} + * Item 2 + `,after:p` + 1. Item 1 + 2. Item 2 + ${""} + - Item 1 + \t- Subitem 1 + - Item 2 + ${""} + - [x] Item 1 + \t- [f] Subitem 1 + - [ ] Item 2 + ${""} + + Item 1 + \t+ Subitem 1 + + Item 2 + ${""} + * Item 1 + \t* Subitem 1 + * Item 2 + `})]}get optionBuilders(){return[]}};Er=A([w.register],Er);var zl=class{},Or=class extends w{constructor(){super({nameKey:"rules.remove-empty-list-markers.name",descriptionKey:"rules.remove-empty-list-markers.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return zl}apply(t,i){let n=new RegExp(`^${Yn}(-|\\*|\\+|\\d+[.)]|- (\\[( |x)\\]))\\s*?$`,"gm");return t=t.replace(new RegExp(n.source+"\\n","gm"),""),t=t.replace(new RegExp("\\n"+n.source,"gm"),""),t.replace(n,"")}get exampleBuilders(){return[new y({description:"Removes empty list markers.",before:p` + - item 1 + - + - item 2 + ${""} + * list 2 item 1 + * + * list 2 item 2 + ${""} + + list 3 item 1 + + + + list 3 item 2 + `,after:p` + - item 1 + - item 2 + ${""} + * list 2 item 1 + * list 2 item 2 + ${""} + + list 3 item 1 + + list 3 item 2 + `}),new y({description:"Removes empty ordered list markers.",before:p` + 1. item 1 + 2. + 3. item 2 + ${""} + 1. list 2 item 1 + 2. list 2 item 2 + 3. ${""} + ${""} + _Note that this rule does not make sure that the ordered list is sequential after removal_ + `,after:p` + 1. item 1 + 3. item 2 + ${""} + 1. list 2 item 1 + 2. list 2 item 2 + ${""} + _Note that this rule does not make sure that the ordered list is sequential after removal_ + `}),new y({description:"Removes empty checklist markers.",before:p` + - [ ] item 1 + - [x] + - [ ] item 2 + - [ ] ${""} + ${""} + _Note that this will affect checked and uncheck checked list items_ + `,after:p` + - [ ] item 1 + - [ ] item 2 + ${""} + _Note that this will affect checked and uncheck checked list items_ + `}),new y({description:"Removes empty list, checklist, and ordered list markers in callouts/blockquotes",before:p` + > Checklist in blockquote + > - [ ] item 1 + > - [x] + > - [ ] item 2 + > - [ ] ${""} + ${""} + > Ordered List in blockquote + > > 1. item 1 + > > 2. + > > 3. item 2 + > > 4. ${""} + ${""} + > Regular lists in blockquote + > + > - item 1 + > - + > - item 2 + > + > List 2 + > + > * item 1 + > * + > * list 2 item 2 + > + > List 3 + > + > + item 1 + > + + > + item 2 + `,after:p` + > Checklist in blockquote + > - [ ] item 1 + > - [ ] item 2 + ${""} + > Ordered List in blockquote + > > 1. item 1 + > > 3. item 2 + ${""} + > Regular lists in blockquote + > + > - item 1 + > - item 2 + > + > List 2 + > + > * item 1 + > * list 2 item 2 + > + > List 3 + > + > + item 1 + > + item 2 + `})]}get optionBuilders(){return[]}};Or=A([w.register],Or);var Sl=class{},Cr=class extends w{constructor(){super({nameKey:"rules.remove-hyphenated-line-breaks.name",descriptionKey:"rules.remove-hyphenated-line-breaks.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return Sl}apply(t,i){return t.replace(/\b[-‐] \b/g,"")}get exampleBuilders(){return[new y({description:"Removing hyphenated line breaks.",before:p` + This text has a linebr‐ eak. + `,after:p` + This text has a linebreak. + `})]}get optionBuilders(){return[]}};Cr=A([w.register],Cr);var Al=class{},Tt=class extends w{constructor(){super({nameKey:"rules.remove-hyphens-on-paste.name",descriptionKey:"rules.remove-hyphens-on-paste.description",type:"Paste"})}get OptionsClass(){return Al}apply(t,i){return t.replace(/([^\s-])[-‐]\s+\n?(?=\w)/g,"$1")}get exampleBuilders(){return[new y({description:"Remove hyphen in content to paste",before:p` + Text that was cool but hyper- + tension made it uncool. + `,after:p` + Text that was cool but hypertension made it uncool. + `})]}get optionBuilders(){return[]}};Tt=A([w.register],Tt);var Tl=class{},Lt=class extends w{constructor(){super({nameKey:"rules.remove-leading-or-trailing-whitespace-on-paste.name",descriptionKey:"rules.remove-leading-or-trailing-whitespace-on-paste.description",type:"Paste"})}get OptionsClass(){return Tl}apply(t,i){return t.replace(/^[\n ]+|\s+$/g,"")}get exampleBuilders(){return[new y({description:"Removes leading spaces and newline characters",before:p` + ${""} + ${""} + This text was really indented + ${""} + `,after:p` + This text was really indented + `}),new y({description:"Leaves leading tabs alone",before:p` + ${""} + ${""} + \t\tThis text is really indented + ${""} + `,after:" This text is really indented"})]}get optionBuilders(){return[]}};Lt=A([w.register],Lt);var Ll=class{},Et=class extends w{constructor(){super({nameKey:"rules.remove-leftover-footnotes-from-quote-on-paste.name",descriptionKey:"rules.remove-leftover-footnotes-from-quote-on-paste.description",ruleIgnoreTypes:[f.wikiLink,f.link,f.image],type:"Paste"})}get OptionsClass(){return Ll}apply(t,i){return t.replace(/(\D)[.,]\d+/g,"$1")}get exampleBuilders(){return[new y({description:"Footnote reference removed",before:p` + He was sure that he would get off without doing any time, but the cops had other plans.50 + ${""} + _Note that the format for footnote references to remove is a dot or comma followed by any number of digits_ + `,after:p` + He was sure that he would get off without doing any time, but the cops had other plans + ${""} + _Note that the format for footnote references to remove is a dot or comma followed by any number of digits_ + `}),new y({description:"Footnote reference removal does not affect links",before:p` + [[Half is .5]] + [Half is .5](HalfIs.5.md) + ![](HalfIs.5.jpg) + ![[Half is .5.jpg]] + `,after:p` + [[Half is .5]] + [Half is .5](HalfIs.5.md) + ![](HalfIs.5.jpg) + ![[Half is .5.jpg]] + `})]}get optionBuilders(){return[]}};Et=A([w.register],Et);var El=class{},Mr=class extends w{constructor(){super({nameKey:"rules.remove-link-spacing.name",descriptionKey:"rules.remove-link-spacing.description",type:"Spacing"})}get OptionsClass(){return El}apply(t,i){return t=ku(t),Vu(t)}get exampleBuilders(){return[new y({description:"Space in regular markdown link text",before:p` + [ here is link text1 ](link_here) + [ here is link text2](link_here) + [here is link text3 ](link_here) + [here is link text4](link_here) + [\there is link text5\t](link_here) + [](link_here) + **Note that image markdown syntax does not get affected even if it is transclusion:** + ![\there is link text6 ](link_here) + `,after:p` + [here is link text1](link_here) + [here is link text2](link_here) + [here is link text3](link_here) + [here is link text4](link_here) + [here is link text5](link_here) + [](link_here) + **Note that image markdown syntax does not get affected even if it is transclusion:** + ![\there is link text6 ](link_here) + `}),new y({description:"Space in wiki link text",before:p` + [[link_here| here is link text1 ]] + [[link_here|here is link text2 ]] + [[link_here| here is link text3]] + [[link_here|here is link text4]] + [[link_here|\there is link text5\t]] + ![[link_here|\there is link text6\t]] + [[link_here]] + `,after:p` + [[link_here|here is link text1]] + [[link_here|here is link text2]] + [[link_here|here is link text3]] + [[link_here|here is link text4]] + [[link_here|here is link text5]] + ![[link_here|here is link text6]] + [[link_here]] + `})]}get optionBuilders(){return[]}};Mr=A([w.register],Mr);var Ol=class{},Ot=class extends w{constructor(){super({nameKey:"rules.remove-multiple-blank-lines-on-paste.name",descriptionKey:"rules.remove-multiple-blank-lines-on-paste.description",type:"Paste"})}get OptionsClass(){return Ol}apply(t,i){return t.replace(/\n{3,}/g,` + +`)}get exampleBuilders(){return[new y({description:"Multiple blanks lines condensed down to one",before:p` + Here is the first line. + ${""} + ${""} + ${""} + ${""} + Here is some more text. + `,after:p` + Here is the first line. + ${""} + Here is some more text. + `}),new y({description:"Text with only one blank line in a row is left alone",before:p` + First line. + ${""} + Last line. + `,after:p` + First line. + ${""} + Last line. + `})]}get optionBuilders(){return[]}};Ot=A([w.register],Ot);var Cl=class{},qr=class extends w{constructor(){super({nameKey:"rules.remove-multiple-spaces.name",descriptionKey:"rules.remove-multiple-spaces.description",type:"Content",ruleIgnoreTypes:[f.code,f.inlineCode,f.math,f.inlineMath,f.yaml,f.link,f.wikiLink,f.tag,f.table]})}get OptionsClass(){return Cl}apply(t,i){return t=t.replace(/(?!^>)([^\s])( ){2,}([^\s])/gm,"$1 $3"),t}get exampleBuilders(){return[new y({description:"Removing double and triple space.",before:p` + Lorem ipsum dolor sit amet. + `,after:p` + Lorem ipsum dolor sit amet. + `})]}get optionBuilders(){return[]}};qr=A([w.register],qr);var Ct=class{constructor(){this.includeFullwidthForms=!0;this.includeCJKSymbolsAndPunctuation=!0;this.includeDashes=!0;this.otherSymbols=""}},Ir=class extends w{constructor(){super({nameKey:"rules.remove-space-around-characters.name",descriptionKey:"rules.remove-space-around-characters.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.inlineCode,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return Ct}apply(t,i){let n="";if(i.includeFullwidthForms&&(n+="\uFF01-\uFF5E"),i.includeCJKSymbolsAndPunctuation&&(n+="\u3000-\u30FF"),i.includeDashes&&(n+="\u2013\u2014"),n+=Pn(i.otherSymbols),!n)return t;let r=new RegExp(`([ ])+([${n}])`,"g"),a=new RegExp(`([${n}])([ ])+`,"g"),s=function(l){return l.replace(r,"$2").replace(a,"$1")},o=we([f.list],t,s);return o=Pa(o,s),o}get exampleBuilders(){return[new y({description:"Remove Spaces and Tabs around Fullwidth Characters",before:p` + Full list of affected characters: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,.:;!?"'`^~ ̄_&@#%+-*=<>()[]{}⦅⦆|¦/\¬$£¢₩¥。、「」『』〔〕【】—…–《》〈〉 + This is a fullwidth period\t 。 with text after it. + This is a fullwidth comma\t, with text after it. + This is a fullwidth left parenthesis ( \twith text after it. + This is a fullwidth right parenthesis ) with text after it. + This is a fullwidth colon : with text after it. + This is a fullwidth semicolon ; with text after it. + Removes space at start of line + `,after:p` + Full list of affected characters:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,.:;!?"'`^~ ̄_&@#%+-*=<>()[]{}⦅⦆|¦/\¬$£¢₩¥。、「」『』〔〕【】—…–《》〈〉 + This is a fullwidth period。with text after it. + This is a fullwidth comma,with text after it. + This is a fullwidth left parenthesis(with text after it. + This is a fullwidth right parenthesis)with text after it. + This is a fullwidth colon:with text after it. + This is a fullwidth semicolon;with text after it. + Removes space at start of line + `}),new y({description:"Fullwidth Characters in List Do not Affect List Markdown Syntax",before:p` + # List indicators should not have the space after them removed if they are followed by a fullwidth character + ${""} + - [ contents here] + - [ more contents here] more text here + + [ another item here] + * [ one last item here] + ${""} + # Nested in a blockquote + ${""} + > - [ contents here] + > - [ more contents here] more text here + > + [ another item here] + > * [ one last item here] + ${""} + # Doubly nested in a blockquote + ${""} + > The following is doubly nested + > > - [ contents here] + > > - [ more contents here] more text here + > > + [ another item here] + > > * [ one last item here] + `,after:p` + # List indicators should not have the space after them removed if they are followed by a fullwidth character + ${""} + - [contents here] + - [more contents here]more text here + + [another item here] + * [one last item here] + ${""} + # Nested in a blockquote + ${""} + > - [contents here] + > - [more contents here]more text here + > + [another item here] + > * [one last item here] + ${""} + # Doubly nested in a blockquote + ${""} + > The following is doubly nested + > > - [contents here] + > > - [more contents here]more text here + > > + [another item here] + > > * [one last item here] + `})]}get optionBuilders(){return[new U({nameKey:"rules.remove-space-around-characters.include-fullwidth-forms.name",descriptionKey:"rules.remove-space-around-characters.include-fullwidth-forms.description",OptionsClass:Ct,optionsKey:"includeFullwidthForms"}),new U({nameKey:"rules.remove-space-around-characters.include-cjk-symbols-and-punctuation.name",descriptionKey:"rules.remove-space-around-characters.include-cjk-symbols-and-punctuation.description",OptionsClass:Ct,optionsKey:"includeCJKSymbolsAndPunctuation"}),new U({nameKey:"rules.remove-space-around-characters.include-dashes.name",descriptionKey:"rules.remove-space-around-characters.include-dashes.description",OptionsClass:Ct,optionsKey:"includeDashes"}),new We({nameKey:"rules.remove-space-around-characters.other-symbols.name",descriptionKey:"rules.remove-space-around-characters.other-symbols.description",OptionsClass:Ct,optionsKey:"otherSymbols"})]}};Ir=A([w.register],Ir);var Fr=class{constructor(){this.charactersToRemoveSpacesBefore=",!?;:).\u2019\u201D]";this.charactersToRemoveSpacesAfter="\xBF\xA1\u2018\u201C(["}},Br=class extends w{constructor(){super({nameKey:"rules.remove-space-before-or-after-characters.name",descriptionKey:"rules.remove-space-before-or-after-characters.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return Fr}apply(t,i){let n=Pn(i.charactersToRemoveSpacesBefore),r=Pn(i.charactersToRemoveSpacesAfter);if(!n&&!r)return t;let a=new RegExp(`([ ])+([${n}])`,"g"),s=new RegExp(`([${r}])([ ])+`,"g"),o=function(d){return d.replace(a,"$2").replace(s,"$1")},l=we([f.list,f.html],t,o);return l=Pa(l,o),l}get exampleBuilders(){return[new y({description:"Remove Spaces and Tabs Before and After Default Symbol Set",before:p` + In the end , the space gets removed\t . + The space before the question mark was removed right ? + The space before the exclamation point gets removed ! + A semicolon ; and colon : have spaces removed before them + ‘ Text in single quotes ’ + “ Text in double quotes ” + [ Text in square braces ] + ( Text in parenthesis ) + `,after:p` + In the end, the space gets removed. + The space before the question mark was removed right? + The space before the exclamation point gets removed! + A semicolon; and colon: have spaces removed before them + ‘Text in single quotes’ + “Text in double quotes” + [Text in square braces] + (Text in parenthesis) + `})]}get optionBuilders(){return[new We({nameKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-before.name",descriptionKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-before.description",OptionsClass:Fr,optionsKey:"charactersToRemoveSpacesBefore"}),new We({nameKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-after.name",descriptionKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-after.description",OptionsClass:Fr,optionsKey:"charactersToRemoveSpacesAfter"})]}};Br=A([w.register],Br);var Ss=class{constructor(){this.punctuationToRemove=".,;:!\u3002\uFF0C\uFF1B\uFF1A\uFF01"}},_r=class extends w{constructor(){super({nameKey:"rules.remove-trailing-punctuation-in-heading.name",descriptionKey:"rules.remove-trailing-punctuation-in-heading.description",type:"Heading",ruleIgnoreTypes:[f.code,f.math,f.yaml]})}get OptionsClass(){return Ss}apply(t,i){return t.replaceAll(Pi,(n,r="",a="",s="",o="",l="")=>{if(o==""||o.match(Yu))return n;let d=o.trimEnd(),c=d.charAt(d.length-1);return i.punctuationToRemove.includes(c)?r+a+s+o.substring(0,d.length-1)+o.substring(d.length)+l:n})}get exampleBuilders(){return[new y({description:"Removes punctuation from the end of a heading",before:p` + # Heading ends in a period. + ## Other heading ends in an exclamation mark! ## + `,after:p` + # Heading ends in a period + ## Other heading ends in an exclamation mark ## + `}),new y({description:"HTML Entities at the end of a heading is ignored",before:p` + # Heading 1 + ## Heading & + `,after:p` + # Heading 1 + ## Heading & + `}),new y({description:"Removes punctuation from the end of a heading when followed by whitespace",before:p` + # Heading 1!${" "} + ## Heading 2.\t + `,after:p` + # Heading 1${" "} + ## Heading 2\t + `})]}get optionBuilders(){return[new We({OptionsClass:Ss,nameKey:"rules.remove-trailing-punctuation-in-heading.punctuation-to-remove.name",descriptionKey:"rules.remove-trailing-punctuation-in-heading.punctuation-to-remove.description",optionsKey:"punctuationToRemove"})]}};_r=A([w.register],_r);var As=class{constructor(){this.yamlKeysToRemove=[]}},Rr=class extends w{constructor(){super({nameKey:"rules.remove-yaml-keys.name",descriptionKey:"rules.remove-yaml-keys.description",type:"YAML"})}get OptionsClass(){return As}apply(t,i){let n=i.yamlKeysToRemove;if(n.length===0)return t;let r=tn(t);if(r===null)return t;let a=r;for(let s of n){let o=s.trim();o.endsWith(":")&&(o=o.substring(0,o.length-1)),a=ut(a,o)}return t.replace(r,a)}get exampleBuilders(){return[new y({description:'Removes the values specified in `YAML Keys to Remove` = "status:\nkeywords\ndate"',before:p` + --- + language: Typescript + type: programming + tags: computer + keywords: + - keyword1 + - keyword2 + status: WIP + date: 02/15/2022 + --- + ${""} + # Header Context + ${""} + Text + `,after:p` + --- + language: Typescript + type: programming + tags: computer + --- + ${""} + # Header Context + ${""} + Text + `,options:{yamlKeysToRemove:["status:","keywords","date"]}})]}get optionBuilders(){return[new be({OptionsClass:As,nameKey:"rules.remove-yaml-keys.yaml-keys-to-remove.name",descriptionKey:"rules.remove-yaml-keys.yaml-keys-to-remove.description",optionsKey:"yamlKeysToRemove"})]}};Rr=A([w.register],Rr);var Ml=class{},Dr=class extends w{constructor(){super({nameKey:"rules.space-after-list-markers.name",descriptionKey:"rules.space-after-list-markers.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return Ml}apply(t,i){return t=t.replace(/^(\s*\d+\.|\s*[-+*])[^\S\r\n]+/gm,"$1 "),t.replace(/^(\s*\d+\.|\s*[-+*]\s+\[[ xX]\])[^\S\r\n]+/gm,"$1 ")}get exampleBuilders(){return[new y({description:"A single space is left between the list marker and the text of the list item",before:p` + 1. Item 1 + 2. Item 2 + ${""} + - [ ] Item 1 + - [x] Item 2 + \t- [ ] Item 3 + `,after:p` + 1. Item 1 + 2. Item 2 + ${""} + - [ ] Item 1 + - [x] Item 2 + \t- [ ] Item 3 + `})]}get optionBuilders(){return[]}};Dr=A([w.register],Dr);var ql=class{},Nr=class extends w{constructor(){super({nameKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.name",descriptionKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.inlineCode,f.yaml,f.image,f.link,f.wikiLink,f.tag,f.math,f.inlineMath,f.html]})}get OptionsClass(){return ql}apply(t,i){let n=/(\p{sc=Han}|\p{sc=Katakana}|\p{sc=Hiragana}|\p{sc=Hangul})( *)(\[[^[]*\]\(.*\)|`[^`]*`|\w+|[-+'"([¥$]|\*[^*])/gmu,r=/(\[[^[]*\]\(.*\)|`[^`]*`|\w+|[-+;:'"°%$)\]]|[^*]\*)( *)(\p{sc=Han}|\p{sc=Katakana}|\p{sc=Hiragana}|\p{sc=Hangul})/gmu,a=`${f.link.placeholder}|${f.inlineMath.placeholder}|${f.inlineCode.placeholder}|${f.wikiLink.placeholder}`.replaceAll("{","\\{").replaceAll("}","\\}"),s=new RegExp(`(\\p{sc=Han}|\\p{sc=Katakana}|\\p{sc=Hiragana}|\\p{sc=Hangul})( *)(${a})`,"gmu"),o=new RegExp(`(${a})( *)(\\p{sc=Han}|\\p{sc=Katakana}|\\p{sc=Hiragana}|\\p{sc=Hangul})`,"gmu"),l=function(c){return c.replace(n,"$1 $3").replace(r,"$1 $3")},d=we([f.italics,f.bold],t,l);return d=d.replace(s,"$1 $3").replace(o,"$1 $3"),d=zu(d,l),d=Su(d,l),d}get exampleBuilders(){return[new y({description:"Space between Chinese and English",before:p` + 中文字符串english中文字符串。 + `,after:p` + 中文字符串 english 中文字符串。 + `}),new y({description:"Space between Chinese and link",before:p` + 中文字符串[english](http://example.com)中文字符串。 + `,after:p` + 中文字符串 [english](http://example.com) 中文字符串。 + `}),new y({description:"Space between Chinese and inline code block",before:p` + 中文字符串\`code\`中文字符串。 + `,after:p` + 中文字符串 \`code\` 中文字符串。 + `}),new y({description:"No space between Chinese and English in tag",before:p` + #标签A #标签2标签 + `,after:p` + #标签A #标签2标签 + `}),new y({description:"Make sure that spaces are not added between italics and chinese characters to preserve markdown syntax",before:p` + _这是一个数学公式_ + *这是一个数学公式english* + ${""} + # Handling bold and italics nested in each other is not supported at this time + ${""} + **_这是一_个数学公式** + *这是一hello__个数学world公式__* + `,after:p` + _这是一个数学公式_ + *这是一个数学公式 english* + ${""} + # Handling bold and italics nested in each other is not supported at this time + ${""} + **_ 这是一 _ 个数学公式** + *这是一 hello__ 个数学 world 公式 __* + `}),new y({description:"Images and links are ignored",before:p` + [[这是一个数学公式english]] + ![[这是一个数学公式english.jpg]] + [这是一个数学公式english](这是一个数学公式english.md) + ![这是一个数学公式english](这是一个数学公式english.jpg) + `,after:p` + [[这是一个数学公式english]] + ![[这是一个数学公式english.jpg]] + [这是一个数学公式english](这是一个数学公式english.md) + ![这是一个数学公式english](这是一个数学公式english.jpg) + `}),new y({description:"Space between CJK and English",before:p` + 日本語englishひらがな + カタカナenglishカタカナ + ハンカクカタカナenglish123全角数字 + 한글english한글 + `,after:p` + 日本語 english ひらがな + カタカナ english カタカナ + ハンカクカタカナ english123全角数字 + 한글 english 한글 + `})]}get optionBuilders(){return[]}};Nr=A([w.register],Nr);var Ts=class{constructor(){this.style="consistent"}},jr=class extends w{constructor(){super({nameKey:"rules.strong-style.name",descriptionKey:"rules.strong-style.description",type:"Content",ruleIgnoreTypes:[f.code,f.yaml,f.link,f.wikiLink,f.tag,f.math,f.inlineMath]})}get OptionsClass(){return Ts}apply(t,i){return Ya(t,i.style,"strong")}get exampleBuilders(){return[new y({description:"Strong indicators should use underscores when style is set to 'underscore'",before:p` + # Strong/Bold Cases + ${""} + **Test bold** + ** Test not bold ** + This is **bold** mid sentence + This is **bold** mid sentence with a second **bold** on the same line + This is ***bold and emphasized*** + This is ***nested bold** and ending emphasized* + This is ***nested emphasis* and ending bold** + ${""} + *Test emphasis* + ${""} + * List Item1 with **bold text** + * List Item2 + `,after:p` + # Strong/Bold Cases + ${""} + __Test bold__ + ** Test not bold ** + This is __bold__ mid sentence + This is __bold__ mid sentence with a second __bold__ on the same line + This is *__bold and emphasized__* + This is *__nested bold__ and ending emphasized* + This is __*nested emphasis* and ending bold__ + ${""} + *Test emphasis* + ${""} + * List Item1 with __bold text__ + * List Item2 + `,options:{style:"underscore"}}),new y({description:"Strong indicators should use asterisks when style is set to 'asterisk'",before:p` + # Strong/Bold Cases + ${""} + __Test bold__ + __ Test not bold __ + This is __bold__ mid sentence + This is __bold__ mid sentence with a second __bold__ on the same line + This is ___bold and emphasized___ + This is ___nested bold__ and ending emphasized_ + This is ___nested emphasis_ and ending bold__ + ${""} + _Test emphasis_ + `,after:p` + # Strong/Bold Cases + ${""} + **Test bold** + __ Test not bold __ + This is **bold** mid sentence + This is **bold** mid sentence with a second **bold** on the same line + This is _**bold and emphasized**_ + This is _**nested bold** and ending emphasized_ + This is **_nested emphasis_ and ending bold** + ${""} + _Test emphasis_ + `,options:{style:"asterisk"}}),new y({description:"Strong indicators should use consistent style based on first strong indicator in a file when style is set to 'consistent'",before:p` + # Strong First Strong Is an Asterisk + ${""} + **First bold** + This is __bold__ mid sentence + This is __bold__ mid sentence with a second **bold** on the same line + This is ___bold and emphasized___ + This is *__nested bold__ and ending emphasized* + This is **_nested emphasis_ and ending bold** + ${""} + __Test bold__ + `,after:p` + # Strong First Strong Is an Asterisk + ${""} + **First bold** + This is **bold** mid sentence + This is **bold** mid sentence with a second **bold** on the same line + This is _**bold and emphasized**_ + This is ***nested bold** and ending emphasized* + This is **_nested emphasis_ and ending bold** + ${""} + **Test bold** + `,options:{style:"consistent"}}),new y({description:"Strong indicators should use consistent style based on first strong indicator in a file when style is set to 'consistent'",before:p` + # Strong First Strong Is an Underscore + ${""} + __First bold__ + This is **bold** mid sentence + This is **bold** mid sentence with a second __bold__ on the same line + This is **_bold and emphasized_** + This is ***nested bold** and ending emphasized* + This is ___nested emphasis_ and ending bold__ + ${""} + **Test bold** + `,after:p` + # Strong First Strong Is an Underscore + ${""} + __First bold__ + This is __bold__ mid sentence + This is __bold__ mid sentence with a second __bold__ on the same line + This is ___bold and emphasized___ + This is *__nested bold__ and ending emphasized* + This is ___nested emphasis_ and ending bold__ + ${""} + __Test bold__ + `,options:{style:"consistent"}})]}get optionBuilders(){return[new ne({OptionsClass:Ts,nameKey:"rules.strong-style.style.name",descriptionKey:"rules.strong-style.style.description",optionsKey:"style",records:[{value:"consistent",description:"Makes sure the first instance of strong is the style that will be used throughout the document"},{value:"asterisk",description:"Makes sure ** is the strong indicator"},{value:"underscore",description:"Makes sure __ is the strong indicator"}]})]}};jr=A([w.register],jr);var Ls=class{constructor(){this.twoSpaceLineBreak=!1}},Kr=class extends w{constructor(){super({nameKey:"rules.trailing-spaces.name",descriptionKey:"rules.trailing-spaces.description",type:"Spacing",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.link,f.wikiLink,f.tag]})}get OptionsClass(){return Ls}apply(t,i){return i.twoSpaceLineBreak?(t=t.replace(/(\S)[ \t]$/gm,"$1"),t=t.replace(/(\S)[ \t]{3,}$/gm,"$1"),t=t.replace(/(\S)( ?\t\t? ?)$/gm,"$1"),t):t.replace(/[ \t]+$/gm,"")}get exampleBuilders(){return[new y({description:"Removes trailing spaces and tabs.",before:p` + # H1 + Line with trailing spaces and tabs. ${""} + `,after:p` + # H1 + Line with trailing spaces and tabs. + `}),new y({description:"With `Two Space Linebreak = true`",before:p` + # H1 + Line with trailing spaces and tabs. ${""} + `,after:p` + # H1 + Line with trailing spaces and tabs. ${""} + `,options:{twoSpaceLineBreak:!0}})]}get optionBuilders(){return[new U({OptionsClass:Ls,nameKey:"rules.trailing-spaces.twp-space-line-break.name",descriptionKey:"rules.trailing-spaces.twp-space-line-break.description",optionsKey:"twoSpaceLineBreak"})]}};Kr=A([w.register],Kr);var Il=class{},Yr=class extends w{constructor(){super({nameKey:"rules.two-spaces-between-lines-with-content.name",descriptionKey:"rules.two-spaces-between-lines-with-content.description",type:"Content",ruleIgnoreTypes:[f.obsidianMultiLineComments,f.yaml,f.table]})}get OptionsClass(){return Il}apply(t,i){return xu(t)}get exampleBuilders(){return[new y({description:"Make sure two spaces are added to the ends of lines that have content on it and the next line for lists, blockquotes, and paragraphs",before:p` + # Heading 1 + First paragraph stays as the first paragraph + ${""} + - list item 1 + - list item 2 + Continuation of list item 2 + - list item 3 + ${""} + 1. Item 1 + 2. Item 2 + Continuation of item 3 + 3. Item 3 + ${""} + Paragraph for with link [[other file name]]. + Continuation *of* the paragraph has \`inline code block\` __in it__. + Even more continuation + ${""} + Paragraph lines that end in
+ Or lines that end in
+ Are left alone + Since they mean the same thing + ${""} + \`\`\` text + Code blocks are ignored + Even with multiple lines + \`\`\` + Another paragraph here + ${""} + > Blockquotes are affected + > More content here + Content here + ${""} +
+ html content + should be ignored +
+ Even more content here + ${""} + `,after:p` + # Heading 1 + First paragraph stays as the first paragraph + ${""} + - list item 1 + - list item 2 ${""} + Continuation of list item 2 + - list item 3 + ${""} + 1. Item 1 + 2. Item 2 ${""} + Continuation of item 3 + 3. Item 3 + ${""} + Paragraph for with link [[other file name]]. ${""} + Continuation *of* the paragraph has \`inline code block\` __in it__. ${""} + Even more continuation + ${""} + Paragraph lines that end in
+ Or lines that end in
+ Are left alone ${""} + Since they mean the same thing + ${""} + \`\`\` text + Code blocks are ignored + Even with multiple lines + \`\`\` + Another paragraph here + ${""} + > Blockquotes are affected ${""} + > More content here ${""} + Content here + ${""} +
+ html content + should be ignored +
+ Even more content here + ${""} + `})]}get optionBuilders(){return[]}};Yr=A([w.register],Yr);var Es=class{constructor(){this.listStyle="consistent"}},Pr=class extends w{constructor(){super({nameKey:"rules.unordered-list-style.name",descriptionKey:"rules.unordered-list-style.description",type:"Content",ruleIgnoreTypes:[f.code,f.math,f.yaml,f.tag]})}get OptionsClass(){return Es}apply(t,i){return Ou(t,i.listStyle)}get exampleBuilders(){return[new y({description:"Unordered lists have their indicator updated to `*` when `List item style = 'consistent'` and `*` is the first unordered list indicator",before:p` + 1. ordered item 1 + 2. ordered item 2 + ${""} + Checklists should be ignored + - [ ] Checklist item 1 + - [x] completed item + ${""} + * Item 1 + - Sublist 1 item 1 + - Sublist 1 item 2 + - Item 2 + + Sublist 2 item 1 + + Sublist 2 item 2 + + Item 3 + * Sublist 3 item 1 + * Sublist 3 item 2 + ${""} + `,after:p` + 1. ordered item 1 + 2. ordered item 2 + ${""} + Checklists should be ignored + - [ ] Checklist item 1 + - [x] completed item + ${""} + * Item 1 + * Sublist 1 item 1 + * Sublist 1 item 2 + * Item 2 + * Sublist 2 item 1 + * Sublist 2 item 2 + * Item 3 + * Sublist 3 item 1 + * Sublist 3 item 2 + ${""} + `}),new y({description:"Unordered lists have their indicator updated to `-` when `List item style = '-'`",before:p` + - Item 1 + * Sublist 1 item 1 + * Sublist 1 item 2 + * Item 2 + + Sublist 2 item 1 + + Sublist 2 item 2 + + Item 3 + - Sublist 3 item 1 + - Sublist 3 item 2 + ${""} + See that the ordered list is ignored, but its sublist is not + ${""} + 1. Item 1 + - Sub item 1 + 1. Item 2 + * Sub item 2 + 1. Item 3 + + Sub item 3 + `,after:p` + - Item 1 + - Sublist 1 item 1 + - Sublist 1 item 2 + - Item 2 + - Sublist 2 item 1 + - Sublist 2 item 2 + - Item 3 + - Sublist 3 item 1 + - Sublist 3 item 2 + ${""} + See that the ordered list is ignored, but its sublist is not + ${""} + 1. Item 1 + - Sub item 1 + 1. Item 2 + - Sub item 2 + 1. Item 3 + - Sub item 3 + `,options:{listStyle:"-"}}),new y({description:"Unordered lists have their indicator updated to `*` when `List item style = '*'`",before:p` + - Item 1 + * Sublist 1 item 1 + * Sublist 1 item 2 + * Item 2 + + Sublist 2 item 1 + + Sublist 2 item 2 + + Item 3 + - Sublist 3 item 1 + - Sublist 3 item 2 + ${""} + `,after:p` + * Item 1 + * Sublist 1 item 1 + * Sublist 1 item 2 + * Item 2 + * Sublist 2 item 1 + * Sublist 2 item 2 + * Item 3 + * Sublist 3 item 1 + * Sublist 3 item 2 + ${""} + `,options:{listStyle:"*"}}),new y({description:"Unordered list in blockquote has list item indicators set to `+` when `List item style = '-'`",before:p` + > - Item 1 + > + Item 2 + > > * Subitem 1 + > > + Subitem 2 + > > - Sub sub item 1 + > > - Subitem 3 + `,after:p` + > + Item 1 + > + Item 2 + > > + Subitem 1 + > > + Subitem 2 + > > + Sub sub item 1 + > > + Subitem 3 + `,options:{listStyle:"+"}})]}get optionBuilders(){return[new ne({OptionsClass:Es,nameKey:"rules.unordered-list-style.list-style.name",descriptionKey:"rules.unordered-list-style.list-style.description",optionsKey:"listStyle",records:[{value:"consistent",description:"Makes sure unordered list items use a consistent list item indicator in the file which will be based on the first list item found"},{value:"-",description:"Makes sure unordered list items use `-` as their indicator"},{value:"*",description:"Makes sure unordered list items use `*` as their indicator"},{value:"+",description:"Makes sure unordered list items use `+` as their indicator"}]})]}};Pr=A([w.register],Pr);var qi=class{constructor(){this.priorityKeysAtStartOfYaml=!0;this.yamlKeyPrioritySortOrder=[];this.yamlSortOrderForOtherKeys="None"}};A([w.noSettingControl()],qi.prototype,"dateModifiedKey",2),A([w.noSettingControl()],qi.prototype,"currentTimeFormatted",2),A([w.noSettingControl()],qi.prototype,"yamlTimestampDateModifiedEnabled",2);var Mt=class extends w{constructor(){super({nameKey:"rules.yaml-key-sort.name",descriptionKey:"rules.yaml-key-sort.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return qi}apply(t,i){let n=tn(t);if(n===null)return t;let r=n,a=i.priorityKeysAtStartOfYaml,s=i.yamlKeyPrioritySortOrder,o=0;for(let x of s)x.endsWith(":")&&(s[o]=x.substring(0,x.length-1)),o++;let l=this.getYAMLKeysSorted(r,s),d=l.sortedYamlKeyValues;r=l.remainingYaml;let c=i.yamlSortOrderForOtherKeys,u=Mi(r);if(u==null)return this.getTextWithNewYamlFrontmatter(t,n,d,r,a,i.dateModifiedKey,i.currentTimeFormatted,i.yamlTimestampDateModifiedEnabled);let m=Object.keys(u),g;if(c==="Ascending Alphabetical")g=this.sortAlphabeticallyAsc;else if(c==="Descending Alphabetical")g=this.sortAlphabeticallyDesc;else return this.getTextWithNewYamlFrontmatter(t,n,d,r,a,i.dateModifiedKey,i.currentTimeFormatted,i.yamlTimestampDateModifiedEnabled);m=m.sort(g);let h=this.getYAMLKeysSorted(r,m);return this.getTextWithNewYamlFrontmatter(t,n,d,h.sortedYamlKeyValues,a,i.dateModifiedKey,i.currentTimeFormatted,i.yamlTimestampDateModifiedEnabled)}getYAMLKeysSorted(t,i){let n="";for(let r of i){let a=Ce(t,r);a!==null&&(a.includes(` +`)?n+=`${r}:${a} +`:n+=`${r}: ${a} +`,t=ut(t,r))}return{remainingYaml:t,sortedYamlKeyValues:n}}updateDateModifiedIfYamlChanged(t,i,n,r){return t==i?i:Te(i,n," "+r)}getTextWithNewYamlFrontmatter(t,i,n,r,a,s,o,l){let d=`${r}${n}`;return a&&(d=`${n}${r}`),l&&(d=this.updateDateModifiedIfYamlChanged(i,d,s,o)),t.replace(i,d)}sortAlphabeticallyAsc(t,i){return t=t.toLowerCase(),i=i.toLowerCase(),ti?-1:i>t?1:0}get exampleBuilders(){return[new y({description:"Sorts YAML keys in order specified by `YAML Key Priority Sort Order` has a sort order of `date type language`",before:p` + --- + language: Typescript + type: programming + tags: computer + keywords: [] + status: WIP + date: 02/15/2022 + --- + `,after:p` + --- + date: 02/15/2022 + type: programming + language: Typescript + tags: computer + keywords: [] + status: WIP + --- + `,options:{yamlKeyPrioritySortOrder:["date","type","language"],yamlSortOrderForOtherKeys:"None",priorityKeysAtStartOfYaml:!0}}),new y({description:"Sorts YAML keys in order specified by `YAML Key Priority Sort Order` has a sort order of `date type language` with `'YAML Sort Order for Other Keys' = Ascending Alphabetical`",before:p` + --- + language: Typescript + type: programming + tags: computer + keywords: [] + status: WIP + date: 02/15/2022 + --- + `,after:p` + --- + date: 02/15/2022 + type: programming + language: Typescript + keywords: [] + status: WIP + tags: computer + --- + `,options:{yamlKeyPrioritySortOrder:["date","type","language"],yamlSortOrderForOtherKeys:"Ascending Alphabetical"}}),new y({description:"Sorts YAML keys in order specified by `YAML Key Priority Sort Order` has a sort order of `date type language` with `'YAML Sort Order for Other Keys' = Descending Alphabetical`",before:p` + --- + language: Typescript + type: programming + tags: computer + keywords: [] + status: WIP + date: 02/15/2022 + --- + `,after:p` + --- + date: 02/15/2022 + type: programming + language: Typescript + tags: computer + status: WIP + keywords: [] + --- + `,options:{yamlKeyPrioritySortOrder:["date","type","language"],yamlSortOrderForOtherKeys:"Descending Alphabetical",priorityKeysAtStartOfYaml:!0}}),new y({description:"Sorts YAML keys in order specified by `YAML Key Priority Sort Order` has a sort order of `date type language` with `'YAML Sort Order for Other Keys' = Descending Alphabetical` and `'Priority Keys at Start of YAML' = false`",before:p` + --- + language: Typescript + type: programming + tags: computer + keywords: [] + ${""} + status: WIP + date: 02/15/2022 + --- + `,after:p` + --- + tags: computer + status: WIP + keywords: [] + date: 02/15/2022 + type: programming + language: Typescript + --- + `,options:{yamlKeyPrioritySortOrder:["date","type","language"],yamlSortOrderForOtherKeys:"Descending Alphabetical",priorityKeysAtStartOfYaml:!1}})]}get optionBuilders(){return[new be({OptionsClass:qi,nameKey:"rules.yaml-key-sort.yaml-key-priority-sort-order.name",descriptionKey:"rules.yaml-key-sort.yaml-key-priority-sort-order.description",optionsKey:"yamlKeyPrioritySortOrder"}),new U({OptionsClass:qi,nameKey:"rules.yaml-key-sort.priority-keys-at-start-of-yaml.name",descriptionKey:"rules.yaml-key-sort.priority-keys-at-start-of-yaml.description",optionsKey:"priorityKeysAtStartOfYaml"}),new ne({OptionsClass:qi,nameKey:"rules.yaml-key-sort.yaml-sort-order-for-other-keys.name",descriptionKey:"rules.yaml-key-sort.yaml-sort-order-for-other-keys.description",optionsKey:"yamlSortOrderForOtherKeys",records:[{value:"None",description:"No sorting other than what is in the YAML Key Priority Sort Order text area"},{value:"Ascending Alphabetical",description:"Sorts the keys based on key value from a to z"},{value:"Descending Alphabetical",description:"Sorts the keys based on key value from z to a"}]})]}};Mt=A([w.register],Mt);var Je=require("obsidian");var gp=da(mp());var Ye=class{constructor(){this.dateCreatedKey="date created";this.dateCreated=!0;this.forceRetentionOfCreatedValue=!1;this.format="dddd, MMMM Do YYYY, h:mm:ss a";this.dateModified=!0;this.dateModifiedKey="date modified";this.locale="en"}};A([w.noSettingControl()],Ye.prototype,"alreadyModified",2),A([w.noSettingControl()],Ye.prototype,"fileCreatedTime",2),A([w.noSettingControl()],Ye.prototype,"fileModifiedTime",2),A([w.noSettingControl()],Ye.prototype,"locale",2),A([w.noSettingControl()],Ye.prototype,"currentTime",2),A([w.noSettingControl()],Ye.prototype,"fileName",2);var Ui=class extends w{constructor(){super({nameKey:"rules.yaml-timestamp.name",descriptionKey:"rules.yaml-timestamp.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return Ye}apply(t,i){let n=i.alreadyModified,r=bi(t);return n=n||r!==t,i.format=i.format.trimEnd(),Ae(r,a=>{if(i.dateCreated){let s=!1;[a,s]=this.handleDateCreatedValue(a,i),n=n||s}return i.dateModified&&(a=this.handleDateModifiedValue(a,n,i)),a})}handleDateCreatedValue(t,i){let n=!1,r=` +${i.dateCreatedKey}: [^ +]+ +`,a=` +${i.dateCreatedKey}:[ ]* +`,s=new RegExp(a),o=new RegExp(r),l=(0,Je.moment)(i.fileCreatedTime);l.locale(i.locale);let d=l.format(i.format),c=` +${i.dateCreatedKey}: ${d}`,u=o.test(t);if(!u&&s.test(t))t=t.replace(s,Ke(c)+` +`),n=!0;else if(u){if(u){let m=this.getYAMLTimestampString(t,o,i.dateCreatedKey);if(i.forceRetentionOfCreatedValue){let g=this.parseValueToCurrentFormatIfPossible(m,i.format,i.locale);if(g==null)throw new Error(E("logs.invalid-date-format-error").replace("{DATE}",m).replace("{FILE_NAME}",i.fileName));if(g.format(i.format)!==m){let h=` +${i.dateCreatedKey}: ${g.format(i.format)}`;t=t.replace(o,Ke(h)+` +`),n=!0}}else{let g=(0,Je.moment)(m,i.format,i.locale,!0);(g==null||!g.isValid())&&(t=t.replace(o,Ke(c)+` +`),n=!0)}}}else{let m=t.indexOf(` +---`);t=st(t,m,` +${i.dateCreatedKey}: ${d}`),n=!0}return[t,n]}handleDateModifiedValue(t,i,n){let r=` +${n.dateModifiedKey}: [^ +]+ +`,a=` +${n.dateModifiedKey}:[ ]* +`,s=new RegExp(a),o=new RegExp(r),l=(0,Je.moment)(n.fileModifiedTime);l.locale(n.locale);let d=n.currentTime.format(n.format),c=` +${n.dateModifiedKey}: ${d}`,u=o.test(t);if(u){let m=(0,Je.moment)(t.match(o)[0].replace(n.dateModifiedKey+":","").trim(),n.format,n.locale,!0);(i||m==null||!m.isValid()||this.getTimeDifferenceInSeconds(m,l,n)>5)&&(t=t.replace(o,Ke(c)+` +`))}else if(s.test(t))t=t.replace(s,Ke(c)+` +`);else if(!u){let m=t.indexOf(` +---`);t=st(t,m,c)}return t}parseValueToCurrentFormatIfPossible(t,i,n){if(t==null)return null;let r=(0,Je.moment)(t,i,n,!0);if(r!=null&&r.isValid())return r;let a=(0,gp.default)(t);if(a!=null){let s=(0,Je.moment)(t,a);return s.locale(n),(0,Je.moment)(s.format(i),i,n,!0)}return null}getYAMLTimestampString(t,i,n){return t.match(i)[0].replace(n+":","").trim()}getTimeDifferenceInSeconds(t,i,n){let r=(0,Je.moment)(i.format(n.format),n.format,n.locale,!0);return Math.abs(t.diff(r,"seconds"))}get exampleBuilders(){return[new y({description:"Adds a header with the date.",before:p` + # H1 + `,after:p` + --- + date created: Wednesday, January 1st 2020, 12:00:00 am + date modified: Thursday, January 2nd 2020, 12:00:05 am + --- + # H1 + `,options:{fileCreatedTime:"2020-01-01T00:00:00-00:00",fileModifiedTime:"2020-01-02T00:00:00-00:00",currentTime:(0,Je.moment)("Thursday, January 2nd 2020, 12:00:05 am","dddd, MMMM Do YYYY, h:mm:ss a"),alreadyModified:!1}}),new y({description:"dateCreated option is false",before:p` + # H1 + `,after:p` + --- + date modified: Thursday, January 2nd 2020, 12:00:05 am + --- + # H1 + `,options:{dateCreated:!1,fileCreatedTime:"2020-01-01T00:00:00-00:00",fileModifiedTime:"2020-01-01T00:00:00-00:00",currentTime:(0,Je.moment)("Thursday, January 2nd 2020, 12:00:05 am","dddd, MMMM Do YYYY, h:mm:ss a"),alreadyModified:!1}}),new y({description:"Date Created Key is set",before:p` + # H1 + `,after:p` + --- + created: Wednesday, January 1st 2020, 12:00:00 am + --- + # H1 + `,options:{dateCreated:!0,dateModified:!1,dateCreatedKey:"created",fileCreatedTime:"2020-01-01T00:00:00-00:00",currentTime:(0,Je.moment)("Thursday, January 2nd 2020, 12:00:03 am","dddd, MMMM Do YYYY, h:mm:ss a"),alreadyModified:!1}}),new y({description:"Date Modified Key is set",before:p` + # H1 + `,after:p` + --- + modified: Wednesday, January 1st 2020, 4:00:00 pm + --- + # H1 + `,options:{dateCreated:!1,dateModified:!0,dateModifiedKey:"modified",fileModifiedTime:"2020-01-01T00:00:00-00:00",currentTime:(0,Je.moment)("Wednesday, January 1st 2020, 4:00:00 pm","dddd, MMMM Do YYYY, h:mm:ss a"),alreadyModified:!1}})]}get optionBuilders(){return[new U({OptionsClass:Ye,nameKey:"rules.yaml-timestamp.date-created.name",descriptionKey:"rules.yaml-timestamp.date-created.description",optionsKey:"dateCreated"}),new We({OptionsClass:Ye,nameKey:"rules.yaml-timestamp.date-created-key.name",descriptionKey:"rules.yaml-timestamp.date-created-key.description",optionsKey:"dateCreatedKey"}),new U({OptionsClass:Ye,nameKey:"rules.yaml-timestamp.force-retention-of-create-value.name",descriptionKey:"rules.yaml-timestamp.force-retention-of-create-value.description",optionsKey:"forceRetentionOfCreatedValue"}),new U({OptionsClass:Ye,nameKey:"rules.yaml-timestamp.date-modified.name",descriptionKey:"rules.yaml-timestamp.date-modified.description",optionsKey:"dateModified"}),new We({OptionsClass:Ye,nameKey:"rules.yaml-timestamp.date-modified-key.name",descriptionKey:"rules.yaml-timestamp.date-modified-key.description",optionsKey:"dateModifiedKey"}),new cs({OptionsClass:Ye,nameKey:"rules.yaml-timestamp.format.name",descriptionKey:"rules.yaml-timestamp.format.description",optionsKey:"format"})]}};Ui=A([w.register],Ui);var zi=class{constructor(){this.preserveExistingAliasesSectionStyle=!0;this.keepAliasThatMatchesTheFilename=!1;this.useYamlKeyToKeepTrackOfOldFilenameOrHeading=!0;this.aliasArrayStyle="multi-line";this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};A([w.noSettingControl()],zi.prototype,"aliasArrayStyle",2),A([w.noSettingControl()],zi.prototype,"fileName",2),A([w.noSettingControl()],zi.prototype,"defaultEscapeCharacter",2),A([w.noSettingControl()],zi.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var Hr=class extends w{constructor(){super({nameKey:"rules.yaml-title-alias.name",descriptionKey:"rules.yaml-title-alias.description",type:"YAML"})}get OptionsClass(){return zi}apply(t,i){t=bi(t);let[n,r]=this.getTitleInfo(t,i.fileName,i.aliasArrayStyle,i.defaultEscapeCharacter),a=null,s=t.match(Ge)[1],o=!i.keepAliasThatMatchesTheFilename&&n===i.fileName,l=s.replace(`--- +`,"").replace(` +---`,""),d=Mi(s);a=d[Za]??null,a!=null&&(a=a+"",a=li(a,i.defaultEscapeCharacter,this.forceEscape(a,i.aliasArrayStyle)));let c=null,u=Object.keys(d);for(let m of Wn)if(u.includes(m)){c=m;break}if(c!=null){let m=Ce(l,c),g="multi-line",h=m==="",x=!1;m.includes(` +`)||(m.match(/^\[.*\]/)===null?(g="single string to single-line",x=!0):g="single-line");let b=Xa(vi(m)),v=this.getNewAliasValue(b,o,r,a);v===""?l=ut(l,c):i.preserveExistingAliasesSectionStyle?!h&&(x&&r==v||!x||b==v)?l=Te(l,c,Qe(v,g,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays,!0)):l=Te(l,c,Qe(v,i.aliasArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays,!0)):l=Te(l,c,Qe(v,i.aliasArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays,!0))}else o||(l=Te(l,nl,Qe(r,i.aliasArrayStyle,i.defaultEscapeCharacter,i.removeUnnecessaryEscapeCharsForMultiLineArrays,!0)));return!i.useYamlKeyToKeepTrackOfOldFilenameOrHeading||o?l=ut(l,Za):l=Te(l,Za,` ${r}`),t=t.replace(`--- +${s}---`,`--- +${l}---`),t}getTitleInfo(t,i,n,r){let a=we([f.code,f.math,f.yaml,f.tag],t,Ga);a=a||i;let s=li(a,r,this.forceEscape(a,n));return[a,s]}forceEscape(t,i){return Oa(t)||t.includes(",")&&(i==="single-line"||i==="single string to single-line"||i==="single string comma delimited")}getNewAliasValue(t,i,n,r){if(t==null)return i?"":n;if(typeof t=="string")i?t===n&&(t=""):r===t?t=n:t=[n,t];else if(r!==null){let a=t.indexOf(r);a===-1&&nn(r)&&(a=t.indexOf(r.substring(1,r.length-1))),a!==-1?i?t.splice(a,1):t[a]=n:t=[n,...t]}else{let a=t.indexOf(n);a!==-1?i&&t.splice(a,1):i||(t=[n,...t])}return t===""||t.length===0?"":t}get exampleBuilders(){return[new y({description:"Adds a header with the title from heading.",before:p` + # Obsidian + `,after:p` + --- + aliases: + - Obsidian + linter-yaml-title-alias: Obsidian + --- + # Obsidian + `}),new y({description:"Adds a header with the title from heading without YAML key when the use of the YAML key is set to false.",before:p` + # Obsidian + `,after:p` + --- + aliases: + - Obsidian + --- + # Obsidian + `,options:{useYamlKeyToKeepTrackOfOldFilenameOrHeading:!1}}),new y({description:"Adds a header with the title.",before:p` + ${""} + `,after:p` + --- + aliases: + - Filename + linter-yaml-title-alias: Filename + --- + ${""} + `,options:{fileName:"Filename",keepAliasThatMatchesTheFilename:!0}}),new y({description:"Adds a header with the title without YAML key when the use of the YAML key is set to false.",before:p` + ${""} + `,after:p` + --- + aliases: + - Filename + --- + ${""} + `,options:{fileName:"Filename",keepAliasThatMatchesTheFilename:!0,useYamlKeyToKeepTrackOfOldFilenameOrHeading:!1}}),new y({description:"Replaces old filename with new filename when no header is present and filename is different than the old one listed in `linter-yaml-title-alias`.",before:p` + --- + aliases: + - Old Filename + - Alias 2 + linter-yaml-title-alias: Old Filename + --- + ${""} + `,after:p` + --- + aliases: + - Filename + - Alias 2 + linter-yaml-title-alias: Filename + --- + ${""} + `,options:{fileName:"Filename",keepAliasThatMatchesTheFilename:!0}}),new y({description:"Make sure that markdown and wiki links in first H1 get their values converted to text",before:p` + # This is a [Heading](markdown.md) + `,after:p` + --- + aliases: + - This is a Heading + linter-yaml-title-alias: This is a Heading + --- + # This is a [Heading](markdown.md) + `,options:{aliasArrayStyle:"multi-line"}})]}get optionBuilders(){return[new U({OptionsClass:zi,nameKey:"rules.yaml-title-alias.preserve-existing-alias-section-style.name",descriptionKey:"rules.yaml-title-alias.preserve-existing-alias-section-style.description",optionsKey:"preserveExistingAliasesSectionStyle"}),new U({OptionsClass:zi,nameKey:"rules.yaml-title-alias.keep-alias-that-matches-the-filename.name",descriptionKey:"rules.yaml-title-alias.keep-alias-that-matches-the-filename.description",optionsKey:"keepAliasThatMatchesTheFilename"}),new U({OptionsClass:zi,nameKey:"rules.yaml-title-alias.use-yaml-key-to-keep-track-of-old-filename-or-heading.name",descriptionKey:"rules.yaml-title-alias.use-yaml-key-to-keep-track-of-old-filename-or-heading.description",optionsKey:"useYamlKeyToKeepTrackOfOldFilenameOrHeading"})]}};Hr=A([w.register],Hr);var qt=class{constructor(){this.defaultEscapeCharacter='"';this.titleKey="title";this.mode="first-h1-or-filename-if-h1-missing"}};A([w.noSettingControl()],qt.prototype,"fileName",2),A([w.noSettingControl()],qt.prototype,"defaultEscapeCharacter",2);var $r=class extends w{constructor(){super({nameKey:"rules.yaml-title.name",descriptionKey:"rules.yaml-title.description",type:"YAML"})}get OptionsClass(){return qt}apply(t,i){t=bi(t);let n="";switch(i.mode){case"filename":n=i.fileName;break;case"first-h1":n=this.getFirstH1Header(t);break;default:n=this.getFirstH1Header(t),n=n||i.fileName}return n=li(n,i.defaultEscapeCharacter),Ae(t,r=>{let a=` +${i.titleKey}.* +`,s=new RegExp(a);if(s.test(r))r=r.replace(s,Ke(` +${i.titleKey}: ${n} +`));else{let o=r.indexOf(` +---`);r=st(r,o,` +${i.titleKey}: ${n}`)}return r})}getFirstH1Header(t){return we([f.code,f.math,f.yaml,f.tag],t,Ga)}get exampleBuilders(){return[new y({description:"Adds a header with the title from heading when `mode = 'First H1 or Filename if H1 Missing'`.",before:p` + # Obsidian + `,after:p` + --- + title: Obsidian + --- + # Obsidian + `,options:{fileName:"Filename"}}),new y({description:"Adds a header with the title when `mode = 'First H1 or Filename if H1 Missing'`.",before:p` + ${""} + `,after:p` + --- + title: Filename + --- + ${""} + `,options:{fileName:"Filename"}}),new y({description:"Make sure that markdown links in headings are properly copied to the YAML as just the text when `mode = 'First H1 or Filename if H1 Missing'`",before:p` + # This is a [Heading](test heading.md) + `,after:p` + --- + title: This is a Heading + --- + # This is a [Heading](test heading.md) + `}),new y({description:"When `mode = 'First H1'`, title does not have a value if no H1 is present",before:p` + ## This is a Heading + `,after:p` + --- + title: "" + --- + ## This is a Heading + `,options:{mode:"first-h1",fileName:"Filename"}}),new y({description:"When `mode = 'Filename'`, title uses the filename ignoring all H1s. Note: the filename is \"Filename\" in this example.",before:p` + # This is a Heading + `,after:p` + --- + title: Filename + --- + # This is a Heading + `,options:{mode:"filename",fileName:"Filename"}})]}get optionBuilders(){return[new We({OptionsClass:qt,nameKey:"rules.yaml-title.title-key.name",descriptionKey:"rules.yaml-title.title-key.description",optionsKey:"titleKey"}),new ne({OptionsClass:qt,nameKey:"rules.yaml-title.mode.name",descriptionKey:"rules.yaml-title.mode.description",optionsKey:"mode",records:[{value:"first-h1-or-filename-if-h1-missing",description:"Uses the first H1 in the file or the filename of the file if there is not H1"},{value:"filename",description:"Uses the filename as the title"},{value:"first-h1",description:"Uses the first H1 in the file as the title"}]})]}};$r=A([w.register],$r);var dx=` + + + + + + + + + + + +`,ux=` + + + + + + + + + + +`,px=` + + + + + + + + + + + +`,mx=` + + + +`,gx=` + + + +`,hx=` + + + + +`,fx=` + + + + + + +`,yx=` + + + +`,bx=` + + + + +`,vx=` + + + +`,xx=` + + + + +`,wx=` + + +`,kx=` + + + + + + + + + +`,zx=` + + +`,Sx=` + +`,ke={folder:{id:"lint-folder",source:ux},file:{id:"lint-file",source:dx},vault:{id:"lint-vault",source:px},whitespace:{id:"lint-whitespace",source:mx},math:{id:"lint-math",source:gx},content:{id:"lint-content",source:hx},paste:{id:"lint-paste",source:fx},custom:{id:"lint-custom",source:yx},heading:{id:"lint-heading",source:bx},footer:{id:"lint-footer",source:vx},yaml:{id:"lint-yaml",source:xx},general:{id:"lint-general",source:wx},debug:{id:"lint-debug",source:kx},clipboard:{id:"linter-clipboard",source:zx},success:{id:"linter-success",source:Sx}};var dn=require("obsidian");var qs=class{constructor(){this.disabledRules=[]}lintText(t){this.skipFile=!1;let i=t.oldText;if([this.disabledRules,this.skipFile]=ss(i),this.skipFile)return i;at(E("logs.rule-running"));let n=E("logs.pre-rules");at(n);let r=this.runBeforeRegularRules(t);ji(n);let a=E("logs.disabled-text");for(let o of ki){if(this.disabledRules.includes(o.alias)){oi(o.alias+" "+a);continue}else if(o.hasSpecialExecutionOrder||o.type==="Paste")continue;[r]=ci.applyIfEnabledBase(o,r,t.settings,{fileCreatedTime:t.fileInfo.createdAtFormatted,fileModifiedTime:t.fileInfo.modifiedAtFormatted,fileName:t.fileInfo.name,locale:t.momentLocale,minimumNumberOfDollarSignsToBeAMathBlock:t.settings.commonStyles.minimumNumberOfDollarSignsToBeAMathBlock,aliasArrayStyle:t.settings.commonStyles.aliasArrayStyle,tagArrayStyle:t.settings.commonStyles.tagArrayStyle,defaultEscapeCharacter:t.settings.commonStyles.escapeCharacter,removeUnnecessaryEscapeCharsForMultiLineArrays:t.settings.commonStyles.removeUnnecessaryEscapeCharsForMultiLineArrays})}let s=E("logs.custom-regex");return at(s),r=this.runCustomRegexReplacement(t.settings.customRegexes,r),ji(s),t.oldText=r,this.runAfterRegularRules(i,t)}runBeforeRegularRules(t){let i=t.oldText;return[i]=xt.applyIfEnabled(i,t.settings,this.disabledRules),[i]=bt.applyIfEnabled(i,t.settings,this.disabledRules,{defaultEscapeCharacter:t.settings.commonStyles.escapeCharacter}),[i]=wt.applyIfEnabled(i,t.settings,this.disabledRules,{minimumNumberOfDollarSignsToBeAMathBlock:t.settings.commonStyles.minimumNumberOfDollarSignsToBeAMathBlock}),i}runAfterRegularRules(t,i){let n=i.oldText,r=E("logs.post-rules");at(r),[n]=yt.applyIfEnabled(n,i.settings,this.disabledRules),[n]=gt.applyIfEnabled(n,i.settings,this.disabledRules),[n]=vt.applyIfEnabled(n,i.settings,this.disabledRules,{defaultEscapeCharacter:i.settings.commonStyles.escapeCharacter});let a=i.getCurrentTime(),s;[n,s]=Ui.applyIfEnabled(n,i.settings,this.disabledRules,{fileCreatedTime:i.fileInfo.createdAtFormatted,fileModifiedTime:i.fileInfo.modifiedAtFormatted,currentTime:a,alreadyModified:t!=n,locale:i.momentLocale});let o=Ui.getRuleOptions(i.settings);return a=i.getCurrentTime(),[n]=Mt.applyIfEnabled(n,i.settings,this.disabledRules,{currentTimeFormatted:a.format(o.format.trimEnd()),yamlTimestampDateModifiedEnabled:s&&o.dateModified,dateModifiedKey:o.dateModifiedKey}),ji(r),ji(E("logs.rule-running")),n}runCustomCommands(t,i){if(this.skipFile)return;oi(E("logs.running-custom-lint-command"));let n=new Set;for(let r of t){if(r.id){if(n.has(r.id)){rt(E("logs.custom-lint-duplicate-warning").replace("{COMMAND_NAME}",r.name));continue}}else continue;try{n.add(r.id),i.executeCommandById(r.id)}catch(a){os(a,`${E("logs.custom-lint-error-message")} ${r.id}`)}}}runCustomRegexReplacement(t,i){return we([f.customIgnore],i,n=>{oi(E("logs.running-custom-regex"));let r=n;for(let a of t){let s=a.find===void 0||a.find==""||a.find===null,o=a.replace===void 0||a.replace===null;if(s||o)continue;let l=new RegExp(`${a.find}`,a.flags);r=r.replace(l,Ad(a.replace))}return r})}runPasteLint(t,i,n){let r=n.oldText;return[r]=Tt.applyIfEnabled(r,n.settings,[]),[r]=Ot.applyIfEnabled(r,n.settings,[]),[r]=Et.applyIfEnabled(r,n.settings,[]),[r]=St.applyIfEnabled(r,n.settings,[]),[r]=Lt.applyIfEnabled(r,n.settings,[]),[r]=kt.applyIfEnabled(r,n.settings,[],{lineContent:t,selectedText:i}),[r]=zt.applyIfEnabled(r,n.settings,[],{lineContent:t,selectedText:i}),[r]=ht.applyIfEnabled(r,n.settings,[],{lineContent:t}),r}};function Wr(e,t=null,i,n){let r=t?(0,dn.moment)(t.stat.ctime):(0,dn.moment)();r.locale(i);let a=t?(0,dn.moment)(t.stat.mtime):(0,dn.moment)();a.locale(i);let s=a.format(),o=r.format();return{oldText:e,fileInfo:{name:t?t.basename:"",createdAtFormatted:o,modifiedAtFormatted:s},settings:n,momentLocale:i,getCurrentTime:()=>{let l=(0,dn.moment)();return l.locale(i),l}}}var Is=require("obsidian");var Vr=class extends Is.Modal{constructor(t,i,n,r,a){super(t),this.modalEl.addClass("confirm-modal"),this.contentEl.createEl("h3",{text:E("warning-text")}).style.textAlign="center",this.contentEl.createEl("p",{text:i+" "+E("file-backup-text")}).id="confirm-dialog",this.contentEl.createDiv("modal-button-container",s=>{s.createEl("button",{text:"Cancel"}).addEventListener("click",()=>this.close());let o=s.createEl("button",{attr:{type:"submit"},cls:"mod-cta",text:n});o.addEventListener("click",async l=>{new Is.Notice(r),this.close(),await a()}),setTimeout(()=>{o.focus()},50)})}};var Xi=require("obsidian");var hp=require("obsidian");var Ax={General:ke.general.id,Custom:ke.custom.id,YAML:ke.yaml.id,Heading:ke.heading.id,Footnote:ke.footer.id,Content:ke.content.id,Spacing:ke.whitespace.id,Paste:ke.paste.id,Debug:ke.debug.id},Tx={General:"tabs.names.general",Custom:"tabs.names.custom",YAML:"tabs.names.yaml",Heading:"tabs.names.heading",Footnote:"tabs.names.footnote",Content:"tabs.names.content",Spacing:"tabs.names.spacing",Paste:"tabs.names.paste",Debug:"tabs.names.debug"},Si=class{constructor(t,i,n,r,a){this.name=n;this.isMobile=r;this.plugin=a;this.searchSettingInfo=[];this.navButton=t.createDiv("linter-navigation-item");let s="linter-desktop";r&&(s="linter-mobile"),this.navButton.addClass(s),(0,hp.setIcon)(this.navButton.createSpan({cls:"linter-navigation-item-icon"}),Ax[n]);let o=E(Tx[n]);this.navButton.createSpan().setText(o),this.contentEl=i.createDiv("linter-tab-settings"),this.contentEl.id=n.toLowerCase().replace(" ","-"),this.headingEl=this.contentEl.createEl("h2",{text:o}),Xe(this.headingEl)}addSettingSearchInfo(t,i="",n="",r=null,a=null){this.searchSettingInfo.push({containerEl:t,name:i.toLowerCase(),description:n.toLowerCase(),options:r,alias:a})}addSettingSearchInfoForGeneralSettings(t){this.searchSettingInfo.push({containerEl:t.containerEl,name:t.name.toLowerCase(),description:t.description.toLowerCase(),options:null,alias:null})}updateTabDisplayMode(t,i="the status is still the same"){switch(t?(this.navButton.addClass("linter-navigation-item-selected"),wi(this.contentEl)):(this.navButton.removeClass("linter-navigation-item-selected"),Xe(this.contentEl)),i){case"entering search mode by focusing on the search input box":wi(this.contentEl),wi(this.headingEl);for(let n of this.searchSettingInfo)wi(n.containerEl);break;case"leaving search mode by selecting a tab":Xe(this.headingEl);for(let n of this.searchSettingInfo)wi(n.containerEl);break}}};var Hp=require("obsidian");var fp=require("obsidian");var Ur={ruleConfigs:{},lintOnSave:!1,recordLintOnSaveLogs:!1,displayChanged:!0,lintOnFileChange:!1,displayLintOnFileChangeNotice:!1,settingsConvertedToConfigKeyValues:!1,foldersToIgnore:[],linterLocale:"system-default",logLevel:"ERROR",lintCommands:[],customRegexes:[],commonStyles:{aliasArrayStyle:"single-line",tagArrayStyle:"single-line",minimumNumberOfDollarSignsToBeAMathBlock:2,escapeCharacter:'"',removeUnnecessaryEscapeCharsForMultiLineArrays:!1}};var Gi=class{constructor(t,i,n,r,a,s=null){this.containerEl=t;this.keyToUpdate=r;this.plugin=a;this.beforeSave=s;this.name=E(i),this.description=E(n)}async saveValue(t){let i=this.keyToUpdate.split(".");i.length===2?this.plugin.settings[i[0]][i[1]]=t:this.plugin.settings[this.keyToUpdate]=t,this.beforeSave&&this.beforeSave(),await this.plugin.saveSettings()}getDefaultValue(){let t=this.keyToUpdate.split(".");return t.length===2?Ur[t[0]][t[1]]:Ur[this.keyToUpdate]}getString(){return Cn(this.plugin.settings,this.keyToUpdate)??this.getDefaultValue()}getBoolean(){return Wc(this.plugin.settings,this.keyToUpdate)??this.getDefaultValue()}getNumber(){return $c(this.plugin.settings,this.keyToUpdate)??this.getDefaultValue()}parseNameAndDescription(){xi(this.name,this.setting.nameEl,this.plugin.settingsTab.component),xi(this.description,this.setting.descEl,this.plugin.settingsTab.component)}};var Ii=class extends Gi{constructor(i,n,r,a,s,o,l=null){super(i,n,r,a,s,l);this.dropdownRecords=o;this.display()}display(){this.setting=new fp.Setting(this.containerEl).setName(this.name).setDesc(this.description).addDropdown(i=>{this.addDropdownRecords(i),i.setValue(this.getString()),i.onChange(async n=>{this.saveValue(n)})})}addDropdownRecords(i){if(this.dropdownRecords.isForEnum){for(let n of this.dropdownRecords.values){let r="enums."+n;i.addOption(n,E(r))}return}for(let n=0;n{i.inputEl.type="number",i.setValue(this.getNumber().toString()).onChange(async n=>{this.saveValue(parseInt(n))})})}};var bp=require("obsidian");var Ai=class extends Gi{constructor(i,n,r,a,s){super(i,n,r,a,s);this.display()}display(){this.setting=new bp.Setting(this.containerEl).addToggle(i=>{i.setValue(this.getBoolean()).onChange(async n=>{this.saveValue(n)})}),this.parseNameAndDescription()}};var Pp=require("obsidian");var vp=require("obsidian");var Qi=class{constructor(t,i,n,r,a,s,o,l){this.containerEl=t;this.parentComponent=i;this.name=n;this.description=r;this.warning=a;this.addInputBtnText=s;this.saveSettings=o;this.onAddInput=l}display(){this.containerEl.createDiv({cls:"setting-item-name",text:this.name});let t=this.containerEl.createDiv({cls:"setting-item-description"});xi(this.description,t.createEl("p",{cls:"custom-row-description"}),this.parentComponent),this.warning!=null&&this.warning.trim()!=""&&t.createEl("p",{text:this.warning,cls:"mod-warning"}),new vp.Setting(this.containerEl).addButton(i=>{i.setButtonText(this.addInputBtnText).setCta().onClick(()=>this.onAddInput())}),this.inputElDiv=this.containerEl.createDiv(),this.showInputEls()}resetInputEls(){this.inputElDiv.empty(),this.showInputEls()}};var Kp=require("obsidian");var me="top",ze="bottom",ve="right",he="left",Fs="auto",Zi=[me,ze,ve,he],Bi="start",It="end",xp="clippingParents",_s="viewport",un="popper",wp="reference",Rl=Zi.reduce(function(e,t){return e.concat([t+"-"+Bi,t+"-"+It])},[]),Rs=[].concat(Zi,[Fs]).reduce(function(e,t){return e.concat([t,t+"-"+Bi,t+"-"+It])},[]),Lx="beforeRead",Ex="read",Ox="afterRead",Cx="beforeMain",Mx="main",qx="afterMain",Ix="beforeWrite",Bx="write",Fx="afterWrite",kp=[Lx,Ex,Ox,Cx,Mx,qx,Ix,Bx,Fx];function Le(e){return e?(e.nodeName||"").toLowerCase():null}function le(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ii(e){var t=le(e).Element;return e instanceof t||e instanceof Element}function Se(e){var t=le(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function pn(e){if(typeof ShadowRoot>"u")return!1;var t=le(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function _x(e){var t=e.state;Object.keys(t.elements).forEach(function(i){var n=t.styles[i]||{},r=t.attributes[i]||{},a=t.elements[i];!Se(a)||!Le(a)||(Object.assign(a.style,n),Object.keys(r).forEach(function(s){var o=r[s];o===!1?a.removeAttribute(s):a.setAttribute(s,o===!0?"":o)}))})}function Rx(e){var t=e.state,i={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,i.popper),t.styles=i,t.elements.arrow&&Object.assign(t.elements.arrow.style,i.arrow),function(){Object.keys(t.elements).forEach(function(n){var r=t.elements[n],a=t.attributes[n]||{},s=Object.keys(t.styles.hasOwnProperty(n)?t.styles[n]:i[n]),o=s.reduce(function(l,d){return l[d]="",l},{});!Se(r)||!Le(r)||(Object.assign(r.style,o),Object.keys(a).forEach(function(l){r.removeAttribute(l)}))})}}var zp={name:"applyStyles",enabled:!0,phase:"write",fn:_x,effect:Rx,requires:["computeStyles"]};function Ee(e){return e.split("-")[0]}var di=Math.max,Bt=Math.min,Fi=Math.round;function mn(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function Gr(){return!/^((?!chrome|android).)*safari/i.test(mn())}function ti(e,t,i){t===void 0&&(t=!1),i===void 0&&(i=!1);var n=e.getBoundingClientRect(),r=1,a=1;t&&Se(e)&&(r=e.offsetWidth>0&&Fi(n.width)/e.offsetWidth||1,a=e.offsetHeight>0&&Fi(n.height)/e.offsetHeight||1);var s=ii(e)?le(e):window,o=s.visualViewport,l=!Gr()&&i,d=(n.left+(l&&o?o.offsetLeft:0))/r,c=(n.top+(l&&o?o.offsetTop:0))/a,u=n.width/r,m=n.height/a;return{width:u,height:m,top:c,right:d+u,bottom:c+m,left:d,x:d,y:c}}function Ft(e){var t=ti(e),i=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-i)<=1&&(i=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:i,height:n}}function Qr(e,t){var i=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(i&&pn(i)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Pe(e){return le(e).getComputedStyle(e)}function Dl(e){return["table","td","th"].indexOf(Le(e))>=0}function Me(e){return((ii(e)?e.ownerDocument:e.document)||window.document).documentElement}function _i(e){return Le(e)==="html"?e:e.assignedSlot||e.parentNode||(pn(e)?e.host:null)||Me(e)}function Sp(e){return!Se(e)||Pe(e).position==="fixed"?null:e.offsetParent}function Dx(e){var t=/firefox/i.test(mn()),i=/Trident/i.test(mn());if(i&&Se(e)){var n=Pe(e);if(n.position==="fixed")return null}var r=_i(e);for(pn(r)&&(r=r.host);Se(r)&&["html","body"].indexOf(Le(r))<0;){var a=Pe(r);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||t&&a.willChange==="filter"||t&&a.filter&&a.filter!=="none")return r;r=r.parentNode}return null}function ui(e){for(var t=le(e),i=Sp(e);i&&Dl(i)&&Pe(i).position==="static";)i=Sp(i);return i&&(Le(i)==="html"||Le(i)==="body"&&Pe(i).position==="static")?t:i||Dx(e)||t}function _t(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Rt(e,t,i){return di(e,Bt(t,i))}function Ap(e,t,i){var n=Rt(e,t,i);return n>i?i:n}function Zr(){return{top:0,right:0,bottom:0,left:0}}function Jr(e){return Object.assign({},Zr(),e)}function Xr(e,t){return t.reduce(function(i,n){return i[n]=e,i},{})}var Nx=function(t,i){return t=typeof t=="function"?t(Object.assign({},i.rects,{placement:i.placement})):t,Jr(typeof t!="number"?t:Xr(t,Zi))};function jx(e){var t,i=e.state,n=e.name,r=e.options,a=i.elements.arrow,s=i.modifiersData.popperOffsets,o=Ee(i.placement),l=_t(o),d=[he,ve].indexOf(o)>=0,c=d?"height":"width";if(!(!a||!s)){var u=Nx(r.padding,i),m=Ft(a),g=l==="y"?me:he,h=l==="y"?ze:ve,x=i.rects.reference[c]+i.rects.reference[l]-s[l]-i.rects.popper[c],b=s[l]-i.rects.reference[l],v=ui(a),S=v?l==="y"?v.clientHeight||0:v.clientWidth||0:0,L=x/2-b/2,M=u[g],B=S-m[c]-u[h],T=S/2-m[c]/2+L,_=Rt(M,T,B),q=l;i.modifiersData[n]=(t={},t[q]=_,t.centerOffset=_-T,t)}}function Kx(e){var t=e.state,i=e.options,n=i.element,r=n===void 0?"[data-popper-arrow]":n;r!=null&&(typeof r=="string"&&(r=t.elements.popper.querySelector(r),!r)||Qr(t.elements.popper,r)&&(t.elements.arrow=r))}var Tp={name:"arrow",enabled:!0,phase:"main",fn:jx,effect:Kx,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ni(e){return e.split("-")[1]}var Yx={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Px(e,t){var i=e.x,n=e.y,r=t.devicePixelRatio||1;return{x:Fi(i*r)/r||0,y:Fi(n*r)/r||0}}function Lp(e){var t,i=e.popper,n=e.popperRect,r=e.placement,a=e.variation,s=e.offsets,o=e.position,l=e.gpuAcceleration,d=e.adaptive,c=e.roundOffsets,u=e.isFixed,m=s.x,g=m===void 0?0:m,h=s.y,x=h===void 0?0:h,b=typeof c=="function"?c({x:g,y:x}):{x:g,y:x};g=b.x,x=b.y;var v=s.hasOwnProperty("x"),S=s.hasOwnProperty("y"),L=he,M=me,B=window;if(d){var T=ui(i),_="clientHeight",q="clientWidth";if(T===le(i)&&(T=Me(i),Pe(T).position!=="static"&&o==="absolute"&&(_="scrollHeight",q="scrollWidth")),T=T,r===me||(r===he||r===ve)&&a===It){M=ze;var D=u&&T===B&&B.visualViewport?B.visualViewport.height:T[_];x-=D-n.height,x*=l?1:-1}if(r===he||(r===me||r===ze)&&a===It){L=ve;var H=u&&T===B&&B.visualViewport?B.visualViewport.width:T[q];g-=H-n.width,g*=l?1:-1}}var j=Object.assign({position:o},d&&Yx),V=c===!0?Px({x:g,y:x},le(i)):{x:g,y:x};if(g=V.x,x=V.y,l){var R;return Object.assign({},j,(R={},R[M]=S?"0":"",R[L]=v?"0":"",R.transform=(B.devicePixelRatio||1)<=1?"translate("+g+"px, "+x+"px)":"translate3d("+g+"px, "+x+"px, 0)",R))}return Object.assign({},j,(t={},t[M]=S?x+"px":"",t[L]=v?g+"px":"",t.transform="",t))}function Hx(e){var t=e.state,i=e.options,n=i.gpuAcceleration,r=n===void 0?!0:n,a=i.adaptive,s=a===void 0?!0:a,o=i.roundOffsets,l=o===void 0?!0:o;if(!1)var d;var c={placement:Ee(t.placement),variation:ni(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Lp(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Lp(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var Ep={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Hx,data:{}};var Ds={passive:!0};function $x(e){var t=e.state,i=e.instance,n=e.options,r=n.scroll,a=r===void 0?!0:r,s=n.resize,o=s===void 0?!0:s,l=le(t.elements.popper),d=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&d.forEach(function(c){c.addEventListener("scroll",i.update,Ds)}),o&&l.addEventListener("resize",i.update,Ds),function(){a&&d.forEach(function(c){c.removeEventListener("scroll",i.update,Ds)}),o&&l.removeEventListener("resize",i.update,Ds)}}var Op={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:$x,data:{}};var Wx={left:"right",right:"left",bottom:"top",top:"bottom"};function gn(e){return e.replace(/left|right|bottom|top/g,function(t){return Wx[t]})}var Vx={start:"end",end:"start"};function Ns(e){return e.replace(/start|end/g,function(t){return Vx[t]})}function Dt(e){var t=le(e),i=t.pageXOffset,n=t.pageYOffset;return{scrollLeft:i,scrollTop:n}}function Nt(e){return ti(Me(e)).left+Dt(e).scrollLeft}function Nl(e,t){var i=le(e),n=Me(e),r=i.visualViewport,a=n.clientWidth,s=n.clientHeight,o=0,l=0;if(r){a=r.width,s=r.height;var d=Gr();(d||!d&&t==="fixed")&&(o=r.offsetLeft,l=r.offsetTop)}return{width:a,height:s,x:o+Nt(e),y:l}}function jl(e){var t,i=Me(e),n=Dt(e),r=(t=e.ownerDocument)==null?void 0:t.body,a=di(i.scrollWidth,i.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),s=di(i.scrollHeight,i.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),o=-n.scrollLeft+Nt(e),l=-n.scrollTop;return Pe(r||i).direction==="rtl"&&(o+=di(i.clientWidth,r?r.clientWidth:0)-a),{width:a,height:s,x:o,y:l}}function jt(e){var t=Pe(e),i=t.overflow,n=t.overflowX,r=t.overflowY;return/auto|scroll|overlay|hidden/.test(i+r+n)}function js(e){return["html","body","#document"].indexOf(Le(e))>=0?e.ownerDocument.body:Se(e)&&jt(e)?e:js(_i(e))}function Ji(e,t){var i;t===void 0&&(t=[]);var n=js(e),r=n===((i=e.ownerDocument)==null?void 0:i.body),a=le(n),s=r?[a].concat(a.visualViewport||[],jt(n)?n:[]):n,o=t.concat(s);return r?o:o.concat(Ji(_i(s)))}function hn(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Ux(e,t){var i=ti(e,!1,t==="fixed");return i.top=i.top+e.clientTop,i.left=i.left+e.clientLeft,i.bottom=i.top+e.clientHeight,i.right=i.left+e.clientWidth,i.width=e.clientWidth,i.height=e.clientHeight,i.x=i.left,i.y=i.top,i}function Cp(e,t,i){return t===_s?hn(Nl(e,i)):ii(t)?Ux(t,i):hn(jl(Me(e)))}function Gx(e){var t=Ji(_i(e)),i=["absolute","fixed"].indexOf(Pe(e).position)>=0,n=i&&Se(e)?ui(e):e;return ii(n)?t.filter(function(r){return ii(r)&&Qr(r,n)&&Le(r)!=="body"}):[]}function Kl(e,t,i,n){var r=t==="clippingParents"?Gx(e):[].concat(t),a=[].concat(r,[i]),s=a[0],o=a.reduce(function(l,d){var c=Cp(e,d,n);return l.top=di(c.top,l.top),l.right=Bt(c.right,l.right),l.bottom=Bt(c.bottom,l.bottom),l.left=di(c.left,l.left),l},Cp(e,s,n));return o.width=o.right-o.left,o.height=o.bottom-o.top,o.x=o.left,o.y=o.top,o}function ea(e){var t=e.reference,i=e.element,n=e.placement,r=n?Ee(n):null,a=n?ni(n):null,s=t.x+t.width/2-i.width/2,o=t.y+t.height/2-i.height/2,l;switch(r){case me:l={x:s,y:t.y-i.height};break;case ze:l={x:s,y:t.y+t.height};break;case ve:l={x:t.x+t.width,y:o};break;case he:l={x:t.x-i.width,y:o};break;default:l={x:t.x,y:t.y}}var d=r?_t(r):null;if(d!=null){var c=d==="y"?"height":"width";switch(a){case Bi:l[d]=l[d]-(t[c]/2-i[c]/2);break;case It:l[d]=l[d]+(t[c]/2-i[c]/2);break;default:}}return l}function pi(e,t){t===void 0&&(t={});var i=t,n=i.placement,r=n===void 0?e.placement:n,a=i.strategy,s=a===void 0?e.strategy:a,o=i.boundary,l=o===void 0?xp:o,d=i.rootBoundary,c=d===void 0?_s:d,u=i.elementContext,m=u===void 0?un:u,g=i.altBoundary,h=g===void 0?!1:g,x=i.padding,b=x===void 0?0:x,v=Jr(typeof b!="number"?b:Xr(b,Zi)),S=m===un?wp:un,L=e.rects.popper,M=e.elements[h?S:m],B=Kl(ii(M)?M:M.contextElement||Me(e.elements.popper),l,c,s),T=ti(e.elements.reference),_=ea({reference:T,element:L,strategy:"absolute",placement:r}),q=hn(Object.assign({},L,_)),D=m===un?q:T,H={top:B.top-D.top+v.top,bottom:D.bottom-B.bottom+v.bottom,left:B.left-D.left+v.left,right:D.right-B.right+v.right},j=e.modifiersData.offset;if(m===un&&j){var V=j[r];Object.keys(H).forEach(function(R){var $=[ve,ze].indexOf(R)>=0?1:-1,re=[me,ze].indexOf(R)>=0?"y":"x";H[R]+=V[re]*$})}return H}function Yl(e,t){t===void 0&&(t={});var i=t,n=i.placement,r=i.boundary,a=i.rootBoundary,s=i.padding,o=i.flipVariations,l=i.allowedAutoPlacements,d=l===void 0?Rs:l,c=ni(n),u=c?o?Rl:Rl.filter(function(h){return ni(h)===c}):Zi,m=u.filter(function(h){return d.indexOf(h)>=0});m.length===0&&(m=u);var g=m.reduce(function(h,x){return h[x]=pi(e,{placement:x,boundary:r,rootBoundary:a,padding:s})[Ee(x)],h},{});return Object.keys(g).sort(function(h,x){return g[h]-g[x]})}function Qx(e){if(Ee(e)===Fs)return[];var t=gn(e);return[Ns(e),t,Ns(t)]}function Zx(e){var t=e.state,i=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var r=i.mainAxis,a=r===void 0?!0:r,s=i.altAxis,o=s===void 0?!0:s,l=i.fallbackPlacements,d=i.padding,c=i.boundary,u=i.rootBoundary,m=i.altBoundary,g=i.flipVariations,h=g===void 0?!0:g,x=i.allowedAutoPlacements,b=t.options.placement,v=Ee(b),S=v===b,L=l||(S||!h?[gn(b)]:Qx(b)),M=[b].concat(L).reduce(function(He,_e){return He.concat(Ee(_e)===Fs?Yl(t,{placement:_e,boundary:c,rootBoundary:u,padding:d,flipVariations:h,allowedAutoPlacements:x}):_e)},[]),B=t.rects.reference,T=t.rects.popper,_=new Map,q=!0,D=M[0],H=0;H=0,re=$?"width":"height",Q=pi(t,{placement:j,boundary:c,rootBoundary:u,altBoundary:m,padding:d}),ce=$?R?ve:he:R?ze:me;B[re]>T[re]&&(ce=gn(ce));var de=gn(ce),ue=[];if(a&&ue.push(Q[V]<=0),o&&ue.push(Q[ce]<=0,Q[de]<=0),ue.every(function(He){return He})){D=j,q=!1;break}_.set(j,ue)}if(q)for(var ae=h?3:1,z=function(_e){var ri=M.find(function(Re){var se=_.get(Re);if(se)return se.slice(0,_e).every(function(Ti){return Ti})});if(ri)return D=ri,"break"},k=ae;k>0;k--){var mi=z(k);if(mi==="break")break}t.placement!==D&&(t.modifiersData[n]._skip=!0,t.placement=D,t.reset=!0)}}var Mp={name:"flip",enabled:!0,phase:"main",fn:Zx,requiresIfExists:["offset"],data:{_skip:!1}};function qp(e,t,i){return i===void 0&&(i={x:0,y:0}),{top:e.top-t.height-i.y,right:e.right-t.width+i.x,bottom:e.bottom-t.height+i.y,left:e.left-t.width-i.x}}function Ip(e){return[me,ve,ze,he].some(function(t){return e[t]>=0})}function Jx(e){var t=e.state,i=e.name,n=t.rects.reference,r=t.rects.popper,a=t.modifiersData.preventOverflow,s=pi(t,{elementContext:"reference"}),o=pi(t,{altBoundary:!0}),l=qp(s,n),d=qp(o,r,a),c=Ip(l),u=Ip(d);t.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:d,isReferenceHidden:c,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":u})}var Bp={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Jx};function Xx(e,t,i){var n=Ee(e),r=[he,me].indexOf(n)>=0?-1:1,a=typeof i=="function"?i(Object.assign({},t,{placement:e})):i,s=a[0],o=a[1];return s=s||0,o=(o||0)*r,[he,ve].indexOf(n)>=0?{x:o,y:s}:{x:s,y:o}}function ew(e){var t=e.state,i=e.options,n=e.name,r=i.offset,a=r===void 0?[0,0]:r,s=Rs.reduce(function(c,u){return c[u]=Xx(u,t.rects,a),c},{}),o=s[t.placement],l=o.x,d=o.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=d),t.modifiersData[n]=s}var Fp={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:ew};function iw(e){var t=e.state,i=e.name;t.modifiersData[i]=ea({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var _p={name:"popperOffsets",enabled:!0,phase:"read",fn:iw,data:{}};function Pl(e){return e==="x"?"y":"x"}function tw(e){var t=e.state,i=e.options,n=e.name,r=i.mainAxis,a=r===void 0?!0:r,s=i.altAxis,o=s===void 0?!1:s,l=i.boundary,d=i.rootBoundary,c=i.altBoundary,u=i.padding,m=i.tether,g=m===void 0?!0:m,h=i.tetherOffset,x=h===void 0?0:h,b=pi(t,{boundary:l,rootBoundary:d,padding:u,altBoundary:c}),v=Ee(t.placement),S=ni(t.placement),L=!S,M=_t(v),B=Pl(M),T=t.modifiersData.popperOffsets,_=t.rects.reference,q=t.rects.popper,D=typeof x=="function"?x(Object.assign({},t.rects,{placement:t.placement})):x,H=typeof D=="number"?{mainAxis:D,altAxis:D}:Object.assign({mainAxis:0,altAxis:0},D),j=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(T){if(a){var R,$=M==="y"?me:he,re=M==="y"?ze:ve,Q=M==="y"?"height":"width",ce=T[M],de=ce+b[$],ue=ce-b[re],ae=g?-q[Q]/2:0,z=S===Bi?_[Q]:q[Q],k=S===Bi?-q[Q]:-_[Q],mi=t.elements.arrow,He=g&&mi?Ft(mi):{width:0,height:0},_e=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:Zr(),ri=_e[$],Re=_e[re],se=Rt(0,_[Q],He[Q]),Ti=L?_[Q]/2-ae-se-ri-H.mainAxis:z-se-ri-H.mainAxis,ai=L?-_[Q]/2+ae+se+Re+H.mainAxis:k+se+Re+H.mainAxis,gi=t.elements.arrow&&ui(t.elements.arrow),Li=gi?M==="y"?gi.clientTop||0:gi.clientLeft||0:0,Kt=(R=j?.[M])!=null?R:0,Xs=ce+Ti-Kt-Li,eo=ce+ai-Kt,vn=Rt(g?Bt(de,Xs):de,ce,g?di(ue,eo):ue);T[M]=vn,V[M]=vn-ce}if(o){var xn,ra=M==="x"?me:he,io=M==="x"?ze:ve,hi=T[B],it=B==="y"?"height":"width",aa=hi+b[ra],sa=hi-b[io],wn=[me,he].indexOf(v)!==-1,oa=(xn=j?.[B])!=null?xn:0,la=wn?aa:hi-_[it]-q[it]-oa+H.altAxis,O=wn?hi+_[it]+q[it]-oa-H.altAxis:sa,I=g&&wn?Ap(la,hi,O):Rt(g?la:aa,hi,g?O:sa);T[B]=I,V[B]=I-hi}t.modifiersData[n]=V}}var Rp={name:"preventOverflow",enabled:!0,phase:"main",fn:tw,requiresIfExists:["offset"]};function Hl(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function $l(e){return e===le(e)||!Se(e)?Dt(e):Hl(e)}function nw(e){var t=e.getBoundingClientRect(),i=Fi(t.width)/e.offsetWidth||1,n=Fi(t.height)/e.offsetHeight||1;return i!==1||n!==1}function Wl(e,t,i){i===void 0&&(i=!1);var n=Se(t),r=Se(t)&&nw(t),a=Me(t),s=ti(e,r,i),o={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!i)&&((Le(t)!=="body"||jt(a))&&(o=$l(t)),Se(t)?(l=ti(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):a&&(l.x=Nt(a))),{x:s.left+o.scrollLeft-l.x,y:s.top+o.scrollTop-l.y,width:s.width,height:s.height}}function rw(e){var t=new Map,i=new Set,n=[];e.forEach(function(a){t.set(a.name,a)});function r(a){i.add(a.name);var s=[].concat(a.requires||[],a.requiresIfExists||[]);s.forEach(function(o){if(!i.has(o)){var l=t.get(o);l&&r(l)}}),n.push(a)}return e.forEach(function(a){i.has(a.name)||r(a)}),n}function Vl(e){var t=rw(e);return kp.reduce(function(i,n){return i.concat(t.filter(function(r){return r.phase===n}))},[])}function Ul(e){var t;return function(){return t||(t=new Promise(function(i){Promise.resolve().then(function(){t=void 0,i(e())})})),t}}function Gl(e){var t=e.reduce(function(i,n){var r=i[n.name];return i[n.name]=r?Object.assign({},r,n,{options:Object.assign({},r.options,n.options),data:Object.assign({},r.data,n.data)}):n,i},{});return Object.keys(t).map(function(i){return t[i]})}var Dp={placement:"bottom",modifiers:[],strategy:"absolute"};function Np(){for(var e=arguments.length,t=new Array(e),i=0;i(e%t+t)%t,Zl=class{constructor(t,i,n){this.owner=t,this.containerEl=i,i.on("click",".suggestion-item",this.onSuggestionClick.bind(this)),i.on("mousemove",".suggestion-item",this.onSuggestionMouseover.bind(this)),n.register([],"ArrowUp",r=>{if(!r.isComposing)return this.setSelectedItem(this.selectedItem-1,!0),!1}),n.register([],"ArrowDown",r=>{if(!r.isComposing)return this.setSelectedItem(this.selectedItem+1,!0),!1}),n.register([],"Enter",r=>{if(!r.isComposing)return this.useSelectedItem(r),!1})}onSuggestionClick(t,i){t.preventDefault();let n=this.suggestions.indexOf(i);this.setSelectedItem(n,!1),this.useSelectedItem(t)}onSuggestionMouseover(t,i){let n=this.suggestions.indexOf(i);this.setSelectedItem(n,!1)}setSuggestions(t){this.containerEl.empty();let i=[];t.forEach(n=>{let r=this.containerEl.createDiv("suggestion-item");this.owner.renderSuggestion(n,r),i.push(r)}),this.values=t,this.suggestions=i,this.setSelectedItem(0,!1)}useSelectedItem(t){let i=this.values[this.selectedItem];i&&this.owner.selectSuggestion(i,t)}setSelectedItem(t,i){let n=sw(t,this.suggestions.length),r=this.suggestions[this.selectedItem],a=this.suggestions[n];r?.removeClass("is-selected"),a?.addClass("is-selected"),this.selectedItem=n,i&&a.scrollIntoView(!1)}},fn=class{constructor(t,i){this.app=t,this.inputEl=i,this.scope=new Kp.Scope,this.suggestEl=createDiv("suggestion-container");let n=this.suggestEl.createDiv("suggestion");this.suggest=new Zl(this,n,this.scope),this.scope.register([],"Escape",this.close.bind(this)),this.inputEl.addEventListener("input",this.onInputChanged.bind(this)),this.inputEl.addEventListener("focus",this.onInputChanged.bind(this)),this.inputEl.addEventListener("blur",this.close.bind(this)),this.suggestEl.on("mousedown",".suggestion-container",r=>{r.preventDefault()})}onInputChanged(){let t=this.inputEl.value,i=this.getSuggestions(t);if(!i){this.close();return}i.length>0?(this.suggest.setSuggestions(i),this.open(this.app.dom.appContainerEl,this.inputEl)):this.close()}open(t,i){this.app.keymap.pushScope(this.scope),t.appendChild(this.suggestEl),this.popper=Ql(i,this.suggestEl,{placement:"bottom-start",modifiers:[{name:"sameWidth",enabled:!0,fn:({state:n,instance:r})=>{let a=`${n.rects.reference.width}px`;n.styles.popper.width!==a&&(n.styles.popper.width=a,r.update())},phase:"beforeWrite",requires:["computeStyles"]}]})}close(){this.app.keymap.popScope(this.scope),this.suggest.setSuggestions([]),this.popper&&this.popper.destroy(),this.suggestEl.detach()}};var Yp=require("obsidian"),ia=class extends fn{constructor(i,n,r=[]){super(i,n);this.app=i;this.inputEl=n;this.valuesToExclude=r}getSuggestions(i){let n=this.app.vault.getAllLoadedFiles().filter(o=>o instanceof Yp.TFolder&&o.path!=="/").map(o=>o.path);if(!n)return[];let r=n.filter(o=>!this.valuesToExclude.includes(o)||o===this.inputEl.getAttribute("folderExists")),a=[],s=i.toLowerCase();return r.forEach(o=>{o.toLowerCase().contains(s)&&a.push(o)}),a}renderSuggestion(i,n){n.setText(i)}selectSuggestion(i){this.inputEl.setAttribute("folderName",i),this.inputEl.value=i,this.inputEl.trigger("input"),this.close()}};var Ks=class extends Qi{constructor(i,n,r,a,s){super(i,n,E("tabs.general.folders-to-ignore.name"),E("tabs.general.folders-to-ignore.description"),null,E("tabs.general.folders-to-ignore.add-input-button-text"),s,()=>{let o="";this.foldersToIgnore.push(o),this.saveSettings(),this.addFolderToIgnore(o,this.foldersToIgnore.length-1,!0)});this.foldersToIgnore=r;this.app=a;this.display(),this.inputElDiv.addClass("linter-folder-ignore-container")}showInputEls(){this.foldersToIgnore.forEach((i,n)=>{this.addFolderToIgnore(i,n)})}addFolderToIgnore(i,n,r=!1){new Pp.Setting(this.inputElDiv).addSearch(s=>{new ia(this.app,s.inputEl,this.foldersToIgnore),s.setPlaceholder(E("tabs.general.folders-to-ignore.folder-search-placeholder-text")).setValue(i).onChange(o=>{let l=o;(l===""||l===s.inputEl.getAttribute("folderName"))&&(this.foldersToIgnore[n]=l,this.saveSettings())}),s.inputEl.setAttr("tabIndex",n),s.inputEl.addClass("linter-folder-ignore"),r&&s.inputEl.focus()}).addExtraButton(s=>{s.setIcon("cross").setTooltip(E("tabs.general.folders-to-ignore.delete-tooltip")).onClick(()=>{this.foldersToIgnore.splice(n,1),this.saveSettings(),this.resetInputEls()})}).settingEl.addClass("linter-no-border")}};var Ys=class extends Si{constructor(i,n,r,a,s){super(i,n,"General",r,a);this.app=s;this.display()}display(){let i=this.contentEl.createDiv();this.addSettingSearchInfoForGeneralSettings(new Ai(i,"tabs.general.lint-on-save.name","tabs.general.lint-on-save.description","lintOnSave",this.plugin)),i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ai(i,"tabs.general.display-message.name","tabs.general.display-message.description","displayChanged",this.plugin)),i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ai(i,"tabs.general.lint-on-file-change.name","tabs.general.lint-on-file-change.description","lintOnFileChange",this.plugin)),i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ai(i,"tabs.general.display-lint-on-file-change-message.name","tabs.general.display-lint-on-file-change-message.description","displayLintOnFileChangeNotice",this.plugin));let n=navigator.language?.toLowerCase(),r=["system-default"],a=[E("tabs.general.same-as-system-locale").replace("{SYS_LOCALE}",n)];for(let g of Hp.moment.locales())r.push(g),a.push(g);let s={isForEnum:!1,values:r,descriptions:a};i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ii(i,"tabs.general.override-locale.name","tabs.general.override-locale.description","linterLocale",this.plugin,s,async()=>{await this.plugin.setOrUpdateMomentInstance()}));let o={isForEnum:!0,values:["multi-line","single-line","single string comma delimited","single string to single-line","single string to multi-line"],descriptions:[]};i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ii(i,"tabs.general.yaml-aliases-section-style.name","tabs.general.yaml-aliases-section-style.description","commonStyles.aliasArrayStyle",this.plugin,o));let l={isForEnum:!0,values:["multi-line","single-line","single string to single-line","single string to multi-line","single-line space delimited","single string space delimited","single string comma delimited"],descriptions:[]};i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ii(i,"tabs.general.yaml-tags-section-style.name","tabs.general.yaml-tags-section-style.description","commonStyles.tagArrayStyle",this.plugin,l));let d=['"',"'"],c={isForEnum:!1,values:d,descriptions:d};i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ii(i,"tabs.general.default-escape-character.name","tabs.general.default-escape-character.description","commonStyles.escapeCharacter",this.plugin,c)),i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ai(i,"tabs.general.remove-unnecessary-escape-chars-in-multi-line-arrays.name","tabs.general.remove-unnecessary-escape-chars-in-multi-line-arrays.description","commonStyles.removeUnnecessaryEscapeCharsForMultiLineArrays",this.plugin)),i=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Bs(i,"tabs.general.number-of-dollar-signs-to-indicate-math-block.name","tabs.general.number-of-dollar-signs-to-indicate-math-block.description","commonStyles.minimumNumberOfDollarSignsToBeAMathBlock",this.plugin));let u=this.contentEl.createDiv(),m=new Ks(u,this.plugin.settingsTab.component,this.plugin.settings.foldersToIgnore,this.app,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(u,m.name,m.description.replaceAll(` +`," "))}};var Ps=class extends Si{constructor(i,n,r,a,s,o){super(i,n,r,s,o);this.rules=a;this.display()}display(){for(let i of this.rules){let n=this.contentEl.createDiv();n.id=i.alias,n.createEl(this.isMobile?"h4":"h3",{},a=>{a.innerHTML=`${i.getName()}`});let r=[];for(let a of i.options)a.display(n,this.plugin.settings,this.plugin),r.push(a.getSearchInfo());this.addSettingSearchInfo(n,i.getName().toLowerCase(),i.getDescription().toLowerCase(),r,n.id)}}};var $p=require("obsidian");var ta=class extends fn{constructor(i,n,r=[]){super(i,n);this.app=i;this.inputEl=n;this.valuesToExclude=r}getSuggestions(i){let n=this.app.commands.listCommands();if(!n)return[];let r=n.filter(o=>{for(let l of this.valuesToExclude)if(l.id==o.id&&!(this.inputEl.hasAttribute("commandId")&&this.inputEl.getAttribute("commandId")==o.id))return!1;return!0}),a=[],s=i.toLowerCase();return r.forEach(o=>{(o.id.contains(s)||o.name.toLowerCase().contains(s))&&a.push(o)}),a}renderSuggestion(i,n){n.setText(i.name)}selectSuggestion(i){this.inputEl.value=i.name,this.inputEl.setAttribute("commandId",i.id),this.inputEl.trigger("input"),this.close()}};var Hs=class extends Qi{constructor(i,n,r,a,s){super(i,n,E("options.custom-command.name"),E("options.custom-command.description"),E("options.custom-command.warning"),E("options.custom-command.add-input-button-text"),s,()=>{let o={id:"",name:""};this.lintCommands.push(o),this.saveSettings(),this.addCommand(o,this.lintCommands.length-1,!0)});this.lintCommands=r;this.app=a;this.display()}showInputEls(){this.lintCommands.forEach((i,n)=>{this.addCommand(i,n)})}addCommand(i,n,r=!1){new $p.Setting(this.inputElDiv).addSearch(a=>{new ta(this.app,a.inputEl,this.lintCommands),a.setPlaceholder(E("options.custom-command.command-search-placeholder-text")).setValue(i.name).onChange(s=>{let o={id:a.inputEl.getAttribute("commandId"),name:s};o.name&&o.id?(this.lintCommands[n]=o,this.saveSettings()):!o.name&&!o.id&&(this.lintCommands[n]=o,this.saveSettings())}),a.inputEl.setAttr("tabIndex",n),a.inputEl.addClass("linter-custom-command"),r&&a.inputEl.focus()}).addExtraButton(a=>{a.setIcon("up-chevron-glyph").setTooltip(E("options.custom-command.move-up-tooltip")).onClick(()=>{this.arrayMove(n,n-1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(a=>{a.setIcon("down-chevron-glyph").setTooltip(E("options.custom-command.move-down-tooltip")).onClick(()=>{this.arrayMove(n,n+1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(a=>{a.setIcon("cross").setTooltip(E("options.custom-command.delete-tooltip")).onClick(()=>{this.lintCommands.splice(n,1),this.saveSettings(),this.resetInputEls()})})}arrayMove(i,n){if(n<0||n===this.lintCommands.length)return;let r=this.lintCommands[i];this.lintCommands[i]=this.lintCommands[n],this.lintCommands[n]=r}};var Jl=require("obsidian");var ow="gm",$s=class extends Qi{constructor(i,n,r,a){super(i,n,E("options.custom-replace.name"),E("options.custom-replace.description"),E("options.custom-replace.warning"),E("options.custom-replace.add-input-button-text"),a,()=>{let s={label:"",find:"",replace:"",flags:ow};this.regexes.push(s),this.saveSettings(),this.addRegex(s,this.regexes.length-1,!0)});this.regexes=r;this.display(),this.inputElDiv.addClass("linter-custom-regex-replacement-container")}showInputEls(){this.regexes.forEach((i,n)=>{this.addRegex(i,n)})}addRegex(i,n,r=!1){let a=this.inputElDiv.createDiv({cls:"linter-custom-regex-replacement"}),s=a.createDiv(),o=new Jl.Setting(s).addText(c=>{c.setPlaceholder(E("options.custom-replace.label-placeholder-text")).setValue(i.label).onChange(u=>{this.regexes[n].label=u,this.saveSettings()}),c.inputEl.setAttr("inputIndex",n),c.inputEl.addClass("linter-custom-regex-replacement-label-input"),r&&c.inputEl.focus()});o.controlEl.addClass("linter-custom-regex-replacement-label"),o.descEl.remove(),o.infoEl.remove(),o.nameEl.remove();let l=a.createDiv();new Jl.Setting(l).addText(c=>{c.setPlaceholder(E("options.custom-replace.regex-to-find-placeholder-text")).setValue(i.find).onChange(u=>{this.regexes[n].find=u,this.saveSettings()}),c.inputEl.addClass("linter-custom-regex-replacement-normal-input")}).addText(c=>{c.setPlaceholder(E("options.custom-replace.flags-placeholder-text")).setValue(i.flags).onChange(u=>{this.regexes[n].flags=u,this.saveSettings()}),c.inputEl.addClass("linter-custom-regex-replacement-flags")}).addText(c=>{c.setPlaceholder(E("options.custom-replace.regex-to-replace-placeholder-text")).setValue(i.replace).onChange(u=>{this.regexes[n].replace=u,this.saveSettings()}),c.inputEl.addClass("linter-custom-regex-replacement-normal-input")}).addExtraButton(c=>{c.setIcon("up-chevron-glyph").setTooltip(E("options.custom-replace.move-up-tooltip")).onClick(()=>{this.arrayMove(n,n-1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(c=>{c.setIcon("down-chevron-glyph").setTooltip(E("options.custom-replace.move-down-tooltip")).onClick(()=>{this.arrayMove(n,n+1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(c=>{c.setIcon("cross").setTooltip(E("options.custom-replace.delete-tooltip")).onClick(()=>{this.regexes.splice(n,1),this.saveSettings(),this.resetInputEls()})}).settingEl.addClass("linter-custom-regex-replacement-row2")}arrayMove(i,n){if(n<0||n===this.regexes.length)return;let r=this.regexes[i];this.regexes[i]=this.regexes[n],this.regexes[n]=r}};var Ws=class extends Si{constructor(i,n,r,a,s){super(i,n,"Custom",r,s);this.app=a;this.display()}display(){let i=this.contentEl.createDiv(),n=new Hs(i,this.plugin.settingsTab.component,this.plugin.settings.lintCommands,this.app,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(i,n.name,n.description.replaceAll(` +`," ")+n.warning.replaceAll(` +`," "));let r=this.contentEl.createDiv(),a=new $s(r,this.plugin.settingsTab.component,this.plugin.settings.customRegexes,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(r,a.name,a.description.replaceAll(` +`," ")+a.warning.replaceAll(` +`," "))}};var Wp=require("obsidian");var Vs=class{constructor(t,i,n,r){this.containerEl=t;this.searchZeroState=i;this.tabNameToTab=n;this.onFocus=r;this.searchSettingInfo=new Map;for(let[a,s]of n)this.searchSettingInfo.set(a,s.searchSettingInfo);this.display()}display(){let t=new Wp.Setting(this.containerEl);t.settingEl.style.border="none",t.addSearch(i=>{this.search=i}),this.search.setPlaceholder(E("tabs.default-search-bar-text")),this.search.inputEl.onfocus=()=>{this.onFocus()},this.search.onChange(i=>{this.searchSettings(i.toLowerCase())})}searchSettings(t){let i=new Set,n=function(r,a){wi(r),i.has(a)||i.add(a)};for(let[r,a]of this.searchSettingInfo)for(let s of a)if(t.trim()===""||s.alias?.includes(t)||s.description.includes(t)||s.name.includes(t))n(s.containerEl,r);else if(s.options)for(let o of s.options){if(o.description.toLowerCase().includes(t)||o.name.toLowerCase().includes(t)){n(s.containerEl,r);break}else if(o.options){for(let l of o.options)if(l.description.toLowerCase().includes(t)||l.value.toLowerCase().includes(t)){n(s.containerEl,r);break}}Xe(s.containerEl)}else Xe(s.containerEl);for(let[r,a]of this.tabNameToTab)i.has(r)?wi(a.headingEl):Xe(a.headingEl);i.size===0?wi(this.searchZeroState):Xe(this.searchZeroState)}focusOnInput(){this.search.inputEl.focus()}};var Vp=da(xo());var yn=require("obsidian");var na=class{constructor(t,i,n,r=!0){this.containerEl=t;this.name=i;this.description=n;this.disabled=r;this.display()}display(){let t=this.containerEl.createDiv(),i=t.createDiv("setting-item-info");this.nameEl=i.createDiv("setting-item-name"),this.nameEl.setText(this.name),this.descEl=i.createDiv("setting-item-description"),this.descEl.setText(this.description),this.inputContainerEl=t.createDiv("full-width-textbox-input-wrapper"),this.inputContainerEl.onmouseover=()=>{this.getInput().trim()!=""&&this.copyEl.removeClass("linter-visually-hidden")},this.inputContainerEl.onmouseleave=()=>{this.copyEl.addClass("linter-visually-hidden")},this.inputEl=this.inputContainerEl.createEl("textarea",{cls:"full-width"}),this.inputEl.spellcheck=!1,this.inputEl.disabled=this.disabled,this.copyEl=this.inputContainerEl.createDiv({cls:"settings-copy-button linter-visually-hidden ",attr:{"aria-label":E("copy-aria-label")}}),this.copyIconEl=this.copyEl.createSpan(),(0,yn.setIcon)(this.copyIconEl,"linter-clipboard"),this.copyIconEl.onclick=()=>{this.handleCopy(this.copyIconEl)}}getInput(){return this.inputEl.value}handleCopy(t){navigator.clipboard.writeText(this.getInput()).then(()=>{(0,yn.setIcon)(t,"linter-success"),setTimeout(()=>{(0,yn.setIcon)(t,"linter-clipboard")},1500)},i=>{new yn.Notice(`${E("notice-text.copy-to-clipboard-failed")+i}`,0)})}};var lw=Object.keys(Vp.default.levels),Us=class extends Si{constructor(t,i,n,r){super(t,i,"Debug",n,r),this.display()}display(){let t=this.contentEl.createDiv(),i={isForEnum:!0,values:lw,descriptions:[]};this.addSettingSearchInfoForGeneralSettings(new Ii(t,"tabs.debug.log-level.name","tabs.debug.log-level.description","logLevel",this.plugin,i,async()=>{wa(this.plugin.settings.logLevel)})),t=this.contentEl.createDiv();let n=E("tabs.debug.linter-config.name"),r=E("tabs.debug.linter-config.description");new na(t,n,r).inputEl.setText(JSON.stringify(this.plugin.settings,null,2)),this.addSettingSearchInfo(t,n,r),t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ai(t,"tabs.debug.log-collection.name","tabs.debug.log-collection.description","recordLintOnSaveLogs",this.plugin)),t=this.contentEl.createDiv(),n=E("tabs.debug.linter-logs.name"),r=E("tabs.debug.linter-logs.description");let s=new na(t,n,"");s.inputEl.setText(va.join(` +`)),xi(r,s.descEl,this.plugin.settingsTab.component),this.addSettingSearchInfo(t,n,r)}};var Gs=class extends Xi.PluginSettingTab{constructor(i,n){super(i,n);this.plugin=n;this.tabNameToTab=new Map;this.selectedTab="General";this.component=new Xi.Component}display(){let{containerEl:i}=this;this.component.load(),i.empty();let n=i.createDiv("linter-setting-title");Xi.Platform.isMobile?n.addClass("linter-mobile"):n.createEl("h1").setText(E("linter-title")),this.navContainer=i.createEl("nav",{cls:"linter-setting-header"}),this.tabNavEl=this.navContainer.createDiv("linter-setting-tab-group"),this.settingsContentEl=i.createDiv("linter-setting-content"),this.addTabs(Xi.Platform.isMobile),this.createSearchZeroState(Xi.Platform.isMobile),this.generateSearchBar(n),this.selectedTab==""&&this.tabSearcher.focusOnInput()}hide(){this.component.unload()}addTabs(i){this.addTab(new Ys(this.tabNavEl,this.settingsContentEl,i,this.plugin,this.app));for(let n of Object.values(N))this.addTab(new Ps(this.tabNavEl,this.settingsContentEl,n,mt.get(n),i,this.plugin));this.addTab(new Ws(this.tabNavEl,this.settingsContentEl,i,this.app,this.plugin)),this.addTab(new Us(this.tabNavEl,this.settingsContentEl,i,this.plugin))}generateSearchBar(i){this.tabSearcher=new Vs(i,this.searchZeroState,this.tabNameToTab,()=>{for(let n of this.tabNameToTab.values()){n.updateTabDisplayMode(!1,"entering search mode by focusing on the search input box");let r=this.tabSearcher.search.getValue();this.selectedTab==""&&r.trim()!=""&&this.tabSearcher.searchSettings(r.toLowerCase()),this.selectedTab=""}})}createSearchZeroState(i){this.searchZeroState=this.settingsContentEl.createDiv(),Xe(this.searchZeroState),this.searchZeroState.createEl(i?"h3":"h2",{text:E("empty-search-results-text")}).style.textAlign="center"}addTab(i){i.navButton.onclick=()=>{this.onTabClick(i.name)},i.updateTabDisplayMode(this.selectedTab===i.name,"the status is still the same"),this.tabNameToTab.set(i.name,i)}onTabClick(i){if(this.selectedTab!==i){if(this.selectedTab=="")for(let[n,r]of this.tabNameToTab)r.updateTabDisplayMode(n===i,"leaving search mode by selecting a tab");else Xe(this.searchZeroState),this.tabNameToTab.get(i).updateTabDisplayMode(!0),this.tabNameToTab.get(this.selectedTab).updateTabDisplayMode(!1);this.selectedTab=i}}};var Gp=require("obsidian");var cw=/^---\n/gm,Up=`${en}:`,Qs=class extends Gp.EditorSuggest{constructor(i){super(i.app);this.plugin=i;this.inline=!1;let n=E("all-rules-option");this.ruleInfo=[{displayName:n,name:n.toLowerCase(),alias:"all"}];for(let r of ki){let a=r.getName();this.ruleInfo.push({displayName:a,name:a.toLowerCase(),alias:r.alias})}}onTrigger(i,n,r){let a=n.getLine(i.line).toLowerCase();if(a.startsWith(Up)||this.disabledRulesIsEndOfStartOfFileToCursor(n.getRange({line:0,ch:0},i))){this.inline=a.startsWith(Up);let o=n.getLine(i.line).substring(0,i.ch),l=o.match(/(\S+)$/)?.first().replaceAll("[","").replaceAll("]","");if(l)return{end:i,start:{ch:o.lastIndexOf(l),line:i.line},query:l}}return null}getSuggestions(i){let[n,r]=ss(i.editor.getValue());if(r)return[];let a=i.query.toLowerCase();return this.ruleInfo.filter(o=>(o.name.contains(a)||o.alias.contains(a))&&!n.includes(o.alias))}renderSuggestion(i,n){n.addClass("mod-complex");let r=n.createDiv({cls:"suggestion-content"});r.createDiv({cls:"suggestion-title"}).setText(`${i.displayName}`),r.createDiv({cls:"suggestion-note"}).setText(`${i.alias}`)}selectSuggestion(i){if(this.context){let n=i.alias;this.inline?n=`${n},`:n=`${n} + -`,this.context.editor.replaceRange(`${n} `,this.context.start,this.context.end)}}disabledRulesIsEndOfStartOfFileToCursor(i){if(!i||!i.length||i.match(cw)?.length!=1)return!1;let n=Ce(i+` +`,en)?.trimEnd();return n===null?!1:i.trimEnd().endsWith(n)}};var dw={en:"en-gb",zh:"zh-cn","zh-TW":"zh-tw",ru:"ru",ko:"ko",it:"it",id:"id",ro:"ro","pt-BR":"pt-br",cz:"cs",da:"da",de:"de",es:"es",fr:"fr",no:"nn",pl:"pl",pt:"pt",tr:"tr",hi:"hi",nl:"nl",ar:"ar",ja:"ja"},et=0,Js=class extends oe.Plugin{constructor(){super(...arguments);this.eventRefs=[];this.isEnabled=!0;this.rulesRunner=new qs;this.overridePaste=!1}async onload(){Sa(window.localStorage.getItem("language")),Vt(E("logs.plugin-load")),this.isEnabled=!0;for(let i in ke){let n=ke[i];(0,oe.addIcon)(n.id,n.source)}await this.loadSettings(),this.addCommands(),this.registerEventsAndSaveCallback(),this.registerEditorSuggest(new Qs(this)),this.settingsTab=new Gs(this.app,this),this.addSettingTab(this.settingsTab)}async onunload(){Vt(E("logs.plugin-unload")),this.isEnabled=!1;for(let i of this.eventRefs)this.app.workspace.offref(i)}async loadSettings(){let i=await this.loadData();this.settings=Object.assign({},Ur,i),typeof this.settings.logLevel=="number"&&(this.settings.logLevel=Qc(this.settings.logLevel)),wa(this.settings.logLevel),this.setOrUpdateMomentInstance(),this.settings.settingsConvertedToConfigKeyValues||this.moveConfigValuesToKeyBasedFormat();for(let n of ki)this.settings.ruleConfigs[n.alias]||(this.settings.ruleConfigs[n.alias]=n.getDefaultOptions());this.updatePasteOverrideStatus()}async saveSettings(){await this.saveData(this.settings),this.updatePasteOverrideStatus()}addCommands(){let i=this;this.addCommand({id:"lint-file",name:E("commands.lint-file.name"),editorCheckCallback(n,r,a){if(n)return i.isMarkdownFile(a.file);i.runLinterEditor(r)},icon:ke.file.id,hotkeys:[{modifiers:["Mod","Alt"],key:"L"}]}),this.addCommand({id:"lint-file-unless-ignored",name:E("commands.lint-file-unless-ignored.name"),editorCheckCallback(n,r,a){if(n)return i.isMarkdownFile(a.file);i.shouldIgnoreFile(a.file)||i.runLinterEditor(r)},icon:ke.file.id}),this.addCommand({id:"lint-all-files",name:E("commands.lint-all-files.name"),icon:ke.vault.id,callback:()=>{let n=E("commands.lint-all-files.start-message"),r=E("commands.lint-all-files.submit-button-text"),a=E("commands.lint-all-files.submit-button-notice-text");new Vr(this.app,n,r,a,()=>this.runLinterAllFiles(this.app)).open()}}),this.addCommand({id:"lint-all-files-in-folder",name:E("commands.lint-all-files-in-folder.name"),icon:ke.folder.id,editorCheckCallback:(n,r,a)=>{if(n)return!a.file.parent.isRoot();this.createFolderLintModal(a.file.parent)}}),this.addCommand({id:"paste-as-plain-text",name:E("commands.paste-as-plain-text.name"),editorCheckCallback:(n,r)=>{if(n)return this.overridePaste;this.pasteAsPlainText(r)}})}registerEventsAndSaveCallback(){let i=this.app.workspace.on("editor-paste",s=>{s.defaultPrevented||!this.overridePaste||this.modifyPasteEvent(s)});this.registerEvent(i),this.eventRefs.push(i),i=this.app.workspace.on("file-menu",(s,o,l)=>this.onMenuOpenCallback(s,o,l)),this.registerEvent(i),this.eventRefs.push(i),this.lastActiveFile=this.app.workspace.getActiveFile(),i=this.app.workspace.on("active-leaf-change",()=>this.onActiveLeafChange()),this.registerEvent(i),this.eventRefs.push(i);let n=this.app.commands?.commands?.["editor:save-file"];typeof n?.callback=="function"&&(n.callback=()=>{if(this.settings.lintOnSave&&this.isEnabled){let s=this.getEditor();if(!s)return;let o=this.app.workspace.getActiveFile();!this.shouldIgnoreFile(o)&&this.isMarkdownFile(o)&&this.runLinterEditor(s)}});let a=this;window.CodeMirrorAdapter.commands.save=()=>{a.app.commands.executeCommandById("editor:save-file")}}onMenuOpenCallback(i,n,r){n instanceof oe.TFile&&this.isMarkdownFile(n)?i.addItem(a=>{a.setIcon(ke.file.id).setTitle(E("commands.lint-file-pop-up-menu-text.name")).onClick(async()=>{let s=this.app.workspace.getActiveFile(),o=this.getEditor();s===n&&o?this.runLinterEditor(o):this.runLinterFile(n)})}):n instanceof oe.TFolder&&i.addItem(a=>{a.setTitle(E("commands.lint-folder-pop-up-menu-text.name")).setIcon(ke.folder.id).onClick(()=>this.createFolderLintModal(n))})}async onActiveLeafChange(){if(!this.isEnabled)return;let i=this.app.workspace.getActiveFile(),n=this.lastActiveFile==null?!1:await this.app.vault.adapter.exists(this.lastActiveFile.path);if(!this.settings.lintOnFileChange||!n||this.lastActiveFile===i||!this.isMarkdownFile(this.lastActiveFile)||this.shouldIgnoreFile(this.lastActiveFile)){this.lastActiveFile=i;return}try{await this.runLinterFile(this.lastActiveFile,!0)}catch(r){this.handleLintError(this.lastActiveFile,r,E("commands.lint-file.error-message")+" '{FILE_PATH}'",!1)}finally{this.lastActiveFile=i}}shouldIgnoreFile(i){for(let n of this.settings.foldersToIgnore)if(n.length>0&&i.path.startsWith(n))return!0;return!1}isMarkdownFile(i){return i&&i.extension==="md"}async runLinterFile(i,n=!1){let r=wd(await this.app.vault.read(i)),a=this.rulesRunner.lintText(Wr(r,i,this.momentLocale,this.settings));if(r!=a&&(await this.app.vault.modify(i,a),n)){let s=E("logs.file-change-lint-message-start")+" "+this.lastActiveFile.path;this.settings.displayLintOnFileChangeNotice&&new oe.Notice(s),Vt(s)}}async runLinterAllFiles(i){let n=0;if(await Promise.all(i.vault.getMarkdownFiles().map(async r=>{if(!this.shouldIgnoreFile(r))try{await this.runLinterFile(r)}catch(a){this.handleLintError(r,a,E("commands.lint-all-files.error-message")+" '{FILE_PATH}'"),n+=1}})),n===0)new oe.Notice(E("commands.lint-all-files.success-message"),et);else{let r=n===1?E("commands.lint-all-files.errors-message-singular"):E("commands.lint-all-files.errors-message-plural").replace("{NUM}",n.toString());new oe.Notice(r,et)}}async runLinterAllFilesInFolder(i){Vt(E("logs.folder-lint")+i.name);let n=0,r=0,a=this.getAllFilesInFolder(i);if(await Promise.all(a.map(async s=>{if(!this.shouldIgnoreFile(s)){try{await this.runLinterFile(s)}catch(o){this.handleLintError(s,o,E("commands.lint-all-files-in-folder.error-message")+" '{FILE_PATH}'"),n+=1}r++}})),n===0)new oe.Notice(E("commands.lint-all-files-in-folder.success-message").replace("{NUM}",r.toString()).replace("{FOLDER_NAME}",i.name),et);else{let s=n===1?E("commands.lint-all-files-in-folder.message-singular").replace("{NUM}",r.toString()).replace("{FOLDER_NAME}",i.name):E("commands.lint-all-files-in-folder.message-plural").replace("{FILE_COUNT}",r.toString()).replace("{FOLDER_NAME}",i.name).replace("{ERROR_COUNT}",n.toString());new oe.Notice(s,et)}}createFolderLintModal(i){let n=E("commands.lint-all-files-in-folder.start-message").replace("{FOLDER_NAME}",i.name),r=E("commands.lint-all-files-in-folder.submit-button-text").replace("{FOLDER_NAME}",i.name),a=E("commands.lint-all-files-in-folder.submit-button-notice-text").replace("{FOLDER_NAME}",i.name);new Vr(this.app,n,r,a,()=>this.runLinterAllFilesInFolder(i)).open()}runLinterEditor(i){ko(this.settings.recordLintOnSaveLogs),Gc(),Vt(E("logs.linter-run"));let n=this.app.workspace.getActiveFile(),r=i.getValue(),a;try{a=this.rulesRunner.lintText(Wr(r,n,this.momentLocale,this.settings))}catch(u){this.handleLintError(n,u,E("commands.lint-file.error-message")+" '{FILE_PATH}'",!1);return}let o=new bn.default.diff_match_patch().diff_main(r,a),l="";o.forEach(u=>{function m(x){let b=x.split(` +`);return{line:b.length-1,ch:b[b.length-1].length}}let[g,h]=u;if(g==bn.default.DIFF_INSERT)i.replaceRange(h,m(l)),l+=h;else if(g==bn.default.DIFF_DELETE){let x=m(l),b=l;b+=h;let v=m(b);i.replaceRange("",x,v)}else l+=h});let d=o.map(u=>u[0]==bn.default.DIFF_INSERT?u[1].length:0).reduce((u,m)=>u+m,0),c=o.map(u=>u[0]==bn.default.DIFF_DELETE?u[1].length:0).reduce((u,m)=>u+m,0);this.displayChangedMessage(d,c);try{this.rulesRunner.runCustomCommands(this.settings.lintCommands,this.app.commands)}catch(u){this.handleLintError(n,u,E("commands.lint-file.error-message")+" '{FILE_PATH}'",!1)}ko(!1)}async setOrUpdateMomentInstance(){let i=localStorage.getItem("language")||"en",n=navigator.language?.toLowerCase(),r=dw[i];this.settings.linterLocale!=="system-default"?r=this.settings.linterLocale:n.startsWith(i)&&(r=n),this.momentLocale=r;let a=Zs.moment.locale(),s=Zs.moment.locale(r);oi(E("logs.moment-locale-not-found").replace("{MOMENT_LOCALE}",r).replace("{CURRENT_LOCALE}",s)),Zs.moment.locale(a)}displayChangedMessage(i,n){if(this.settings.displayChanged){let r=p` + ${i} ${E("notice-text.characters-added")} + ${n} ${E("notice-text.characters-removed")} + `;new oe.Notice(r)}}handleLintError(i,n,r,a=!0){let s=r.replace("{FILE_PATH}",i.path),o=E("logs.see-console");n instanceof Hi?a?new oe.Notice(`${s} ${n.message}. +${o}`,et):new oe.Notice(`${n.message}. +${o}`,et):new oe.Notice(`${E("logs.unknown-error")} ${o}`,et),Uc(s,n)}async modifyPasteEvent(i){let n=this.getEditor();if(!n)return;let r=i.clipboardData.getData("text/plain");if(!r)return;if(Jt.test(r.trim())){rt(E("logs.paste-link-warning"));return}if(i.stopPropagation(),i.preventDefault(),!i.defaultPrevented)return;let a=this.app.vault.getConfig("autoConvertHtml"),s=i.clipboardData.getData("text/html"),o=s&&a?(0,oe.htmlToMarkdown)(s):r,l=n.listSelections();if(l.length===1){let d=l[0];o=this.rulesRunner.runPasteLint(this.getLineContent(n,d),n.getSelection()??"",Wr(o,null,this.momentLocale,this.settings)),n.replaceSelection(o)}else this.handleMultiCursorPaste(n,l,o)}handleMultiCursorPaste(i,n,r){let a=this.convertContentIntoProperPasteContent(n,r),s=[];n.forEach((o,l)=>{r=this.rulesRunner.runPasteLint(this.getLineContent(i,o),i.getRange(o.anchor,o.head)??"",Wr(a[l],null,this.momentLocale,this.settings)),s.push({text:r,from:o.anchor,to:o.head})}),i.transaction({changes:s})}convertContentIntoProperPasteContent(i,n){let r=n.split(` +`),a=[];if(r.length%i.length!==0)for(let s=0;s span:nth-child(2), +.linter-visually-hidden { + border: 0; + clip: rect(0 0 0 0); + clip-path: rect(0 0 0 0); + height: auto; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} + +/** +* Full-width text areas +* Based on https://github.com/nyable/obsidian-code-block-enhancer/blob/bb0c636c1e7609b6d26c48a8d7ca15d5cd9abdcf/src/styles/index.scss +*/ +textarea.full-width { + width: 100%; + min-height: 10em; + margin-top: 0.8em; + margin-bottom: 0.8em; +} + +.full-width-textbox-input-wrapper { + position: relative; +} + +.settings-copy-button { + position: absolute; + top: 0.8em; + right: 0.8em; + margin: 0 0 0 auto; + padding: 4px; +} + +.settings-copy-button svg.linter-clipboard path { + fill: var(--text-faint); +} +.settings-copy-button svg.linter-success path { + fill: var(--interactive-success); +} +.settings-copy-button:hover, .settings-copy-button:active { + cursor: pointer; +} +.settings-copy-button:hover svg path, .settings-copy-button:active svg path { + fill: var(--text-accent-hover); + transition: all ease 0.3s; +} +.settings-copy-button:focus { + outline: 0; +} + +/** +* Custom regex replacement +*/ +.linter-custom-regex-replacement-container div:last-child{ + border: none; +} +.linter-custom-regex-replacement { + margin-bottom: 15px; + border: none; + border-bottom: var(--hr-thickness) solid; + border-color: var(--hr-color); +} +.linter-custom-regex-replacement-row2 { + flex-wrap: wrap; +} +.linter-custom-regex-replacement-normal-input { + width: 40%; +} +.linter-custom-regex-replacement-flags { + width: 15%; +} +.linter-custom-regex-replacement-label { + flex-direction: row-reverse; +} +.linter-custom-regex-replacement-label-input { + width: 50%; +} + +/** +* Setting item no border +*/ +.linter-no-border { + border: none; +} + +/** +* Custom row +*/ +.custom-row-description { + margin-top: 0px; +} diff --git a/.obsidian/plugins/templater-obsidian/data.json b/.obsidian/plugins/templater-obsidian/data.json index 467387f2..6100532a 100644 --- a/.obsidian/plugins/templater-obsidian/data.json +++ b/.obsidian/plugins/templater-obsidian/data.json @@ -1,6 +1,6 @@ { "command_timeout": 5, - "templates_folder": "templates", + "templates_folder": "Templates", "templates_pairs": [ [ "getWord", @@ -19,7 +19,7 @@ "auto_jump_to_cursor": false, "enable_system_commands": false, "shell_path": "", - "user_scripts_folder": "src/js", + "user_scripts_folder": "Static", "enable_folder_templates": true, "folder_templates": [ { @@ -28,6 +28,7 @@ } ], "syntax_highlighting": true, + "syntax_highlighting_mobile": false, "enabled_templates_hotkeys": [ "" ], diff --git a/.obsidian/types.json b/.obsidian/types.json new file mode 100644 index 00000000..edf7bf73 --- /dev/null +++ b/.obsidian/types.json @@ -0,0 +1,9 @@ +{ + "types": { + "aliases": "aliases", + "cssclasses": "multitext", + "tags": "tags", + "keywords": "multitext", + "title": "text" + } +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 00000000..75024dd2 --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,206 @@ +{ + "main": { + "id": "1f445337c2d6e92a", + "type": "split", + "children": [ + { + "id": "438e496f583ca23f", + "type": "tabs", + "children": [ + { + "id": "383e49ad0c9a648f", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Blog/谈谈我的「数字文具盒」.md", + "mode": "source", + "backlinks": true, + "source": false + } + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "807eda8c7f9d39d6", + "type": "split", + "children": [ + { + "id": "127edee3cbe2de12", + "type": "tabs", + "children": [ + { + "id": "32e3954140b6c675", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical" + } + } + }, + { + "id": "0aacbc5bc1b33126", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + } + } + }, + { + "id": "f00a0008002e0f85", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {} + } + } + ] + } + ], + "direction": "horizontal", + "width": 357.5 + }, + "right": { + "id": "b6d0f50ff4f93745", + "type": "split", + "children": [ + { + "id": "72bfceaff7d9617c", + "type": "tabs", + "children": [ + { + "id": "216a95b1562d56d5", + "type": "leaf", + "state": { + "type": "calendar", + "state": {} + } + }, + { + "id": "9701940d4d2f1bc6", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true + } + } + }, + { + "id": "c5fde77b8d301a14", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "Blog/谈谈我的「数字文具盒」.md" + } + } + }, + { + "id": "93a288f062a4606b", + "type": "leaf", + "state": { + "type": "git-view", + "state": {} + } + }, + { + "id": "9f3925b38ed34aad", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "Blog/谈谈我的「数字文具盒」.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "729841caad591361", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "Blog/谈谈我的「数字文具盒」.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + } + } + ], + "currentTab": 4 + } + ], + "direction": "horizontal", + "width": 440.5 + }, + "left-ribbon": { + "hiddenItems": { + "obsidian-weread-plugin:Weread": false, + "canvas:新建白板": false, + "command-palette:打开命令面板": false, + "workspaces:管理工作区布局": false, + "templater-obsidian:Templater": false, + "graph:查看关系图谱": false, + "periodic-notes:Open today": false + } + }, + "active": "383e49ad0c9a648f", + "lastOpenFiles": [ + "Blog/谈谈我的「数字文具盒」 - 心得体会.md", + "Blog/谈谈我的「数字文具盒」.md", + "Canvas", + "blog/「转载」怎么平衡工作与生活?.md", + "blog/唯有热爱可抵岁月漫长.md", + "blog/VIVO IQOO Neo3 开箱测评.md", + "blog/YubiKey 漂流记.md", + "blog/Redemption 主题 0.2.1 版本.md", + "blog/Redemption.md", + "blog/Obsidian 使用 Templater 插件的个性化脚本.md", + "blog/Hello Halo.md", + "blog/Halo 主题 Redemption 首发版.md", + "blog/Don`t Starve-饥荒.md", + "blog/Docusaurus 搭建.md", + "blog/BombSquad-炸弹人小分队.md", + "blog/罪恶应该被遗传么.md", + "blog/最近在折腾什么…….md", + "blog/最近的生活.md", + "blog/最近半年的生活.md", + "blog/自律的痛苦······.md", + "blog/注定不平凡的一年.md", + "blog/种下了一些瓜果蔬菜.md", + "blog/中国传统历法.md", + "blog/真·长安游记.md", + "blog/这个周末.md", + "blog/长安游记.md", + "blog/长安三万里.md", + "Book", + "Static/wttr_weather.js", + "Static/jinrishici.js", + "Static/hitokoto.js", + "Static", + "Templates/wttr_weather.js", + "Templates/jinrishici.js", + "Templates/hitokoto.js", + "src/js/wttr_weather.js" + ] +} \ No newline at end of file diff --git a/Blog/11月28日晚 星期三 霾.md b/Blog/11月28日晚 星期三 霾.md new file mode 100644 index 00000000..4725b2fe --- /dev/null +++ b/Blog/11月28日晚 星期三 霾.md @@ -0,0 +1,29 @@ +--- +title: 11月28日 晚 星期三 霾 +description: 自己博客写作的思考。提到之前写Git学习笔记感觉重复前人,希望写更有nutrition的内容。也提到看计算机文化丛译系列书籍,让作者对计算机先驱充满崇拜之情。但同时作者也感觉非常浮躁,环境也很浮躁,需要继续努力不忘初心。 +keywords: + - 博客写作 + - 浮躁环境 + - 不忘初心 +tags: + - 生活/日记 +authors: + - 7Wate +date: 2018-11-28 +--- + +总是很想写一些东西,却又不知从何下笔。 + +学习笔记,感觉写的很拖沓,就跟小时候写日记打流水账一样。今天早上吃了饭然后上了学然后放学又吃饭然后又上学哈哈。感觉一直在重复搞一些事情,对博客写笔记的定义理解的还不够透彻。一直在做前人做过的东西,Git 相关的笔记,命令一搜一大堆。应该改变一下自己记录学习博客的方式。要秉承着宁要好梨一个,不要烂梨一筐的想法。多写一些更有营养的东西,少做重复的事情。多吸取前辈们的笔记作品书籍,领悟作者的思想,站在作者的角度去思考问题。读一本书就是跟作者对话。更要有会当凌绝顶的感悟。 + +最近也在看计算机文化丛译,Git 这两方面的书。计算机文化丛译系列的书籍,真的超级无敌崇拜计算机的先辈们。上个世纪我国还处于吃饱饭是第一要务的地方,而他们已经开始搞人工智能,算法,个人计算机,互联网等等。确实还是有很多需要学习的地方,不过吃饱饭确实是搞任何事情的前提。 + +同时也是感觉很浮躁,个人很浮躁,环境很浮躁,整个社会都很浮躁。到处充斥着快餐文化,都想一夜暴富,只关乎结果,不在乎过程及质量。看了阮一峰前辈的一些散文,以及平时生活感觉有的国人要走的路还很长。抗战打了十四年,改革开放搞了四十多年,感觉有的国人的思想可能要走八十年。无论需要走的路有多远多长,我还是无比热爱我的国! + +坚信自己能够不忘初心,善始善终! + +加油! + +--- + +此文著于 2018 年 11 月 28 日,仅供留存。 diff --git a/blog/2021.md b/Blog/2021.md similarity index 88% rename from blog/2021.md rename to Blog/2021.md index 6b2efdc6..a1617e2e 100644 --- a/blog/2021.md +++ b/Blog/2021.md @@ -1,121 +1,170 @@ --- title: 2021 -description: 2021 总结 +description: 记录了包括作者在内的多位网友对2021年的规划,内容涵盖工作、学习、生活等多个方面。大家表达了对美好生活的期许,规划着事业发展、生活进步、身心成长等目标。 keywords: -- 年终总结 -tags: -- 纪念 + - 十年之约 + - 2021规划 + - 身心成长 + - 美好生活 +tags: + - 年度/2021 authors: -- 7Wate -date: 2021-02-12 + - 7Wate +date: 2021-02-12 --- - -2020 年平安夜前夕,有幸加入到「十年之约」,更是我平安夜最值得纪念的一份礼物。十年之约的宗旨是:`十年之约,即从加入这个活动起,我们的博客十年不关闭,保持更新和活力!`所以我也想做一件有意义的事情,就想到了这个点子。 +2020 年平安夜前夕,有幸加入到「十年之约」,更是我平安夜最值得纪念的一份礼物。十年之约的宗旨是:`十年之约,即从加入这个活动起,我们的博客十年不关闭,保持更新和活力!` 所以我也想做一件有意义的事情,就想到了这个点子。 无论 2020 究竟多么阴晦隳颓,凡是过往、皆为序章。 - ## 小高 - 考过专四 + - 考过教师资格证 + - 学会理财 + - 年底存款 5000 ## 小王 - 健身锻炼控制体重 105 斤 + - 一次出省旅行 + - 取得教师资格证 + - 两个月看一本书 + - 学习计算机操作、Pr、Ps、做饭 + - 存 10000 元 ## 小雪 - 不谈恋爱 + - 远离拖延 + - 考过四级 + - 做出选择,过有目标的生活 + - 存钱年末毕业旅行 ## 小吴 - 想和朋友出去旅行,最好是能去海边 + - 存 2 万块钱 哈哈哈哈哈哈哈哈哈 + - 努力买一辆属于自己的小车车🚗 + - 赐我一个男朋友 + - 读一本书 + - 一份喜欢的工作 ## 抹茶派派 -转眼间 2020 年已经过去了,这一年于国于民都是非常具有挑战性的一年,在这一年里我也算是遇到了人生的转折点——专升本成功上岸。我现在还清楚的记得考完回去寝室收拾东西的路上的心情,非常绝望,因为老师讲的没考,所以在家的一段时间我已经给自己做好心理准备要去幼儿园工作了,甚至是考招教的书都买好了,成绩出来的那天半夜 12 点就扒拉手机查,结果说延迟一个多小时,我就又等待了一个多小时,后来还是差不成,就睡了。可能心里记挂着,四点多我又醒了,这次查到了,说实话考的分数也在我的预料之中(教心写完之后偷偷算了分),英语也是和平常做的往年卷子分数相差不大。我当时特别激动的又核对了招收学校的分数,在确定自己有学上之后,把还在睡梦中的爸妈叫醒,告诉他们这个消息,全家人都很开心,我也松了一口气,就好像是人生的台阶又往上上了一步一样,很满足。伴随着备考专升本,因为疫情只能在家,我也不知道那段时间是怎么了,就是特别自律,除了上课学习的时候,其他的时间基本上都被我安排做在 b 站上找的健身视频(哔哩哔哩真是个宝藏哈哈哈),甚至是课间十分钟休息也是一样,所以我也成功的瘦下来了,从 2xl 到 l,m 甚至有的衣服款式 s 我都能穿,随便穿什么衣服都很合适的感觉真是太爽了!人家不都是说不要小看能减肥成功的人,我也很棒啊哈哈。这两件事是 2020 年最让我印象深刻的事了,也是改变我人生的两件事,现在回味一下,真像是做梦一样。 +转眼间 2020 年已经过去了,这一年于国于民都是非常具有挑战性的一年,在这一年里我也算是遇到了人生的转折点——专升本成功上岸。我现在还清楚的记得考完回去寝室收拾东西的路上的心情,非常绝望,因为老师讲的没考,所以在家的一段时间我已经给自己做好心理准备要去幼儿园工作了,甚至是考招教的书都买好了,成绩出来的那天半夜 12 点就扒拉手机查,结果说延迟一个多小时,我就又等待了一个多小时,后来还是查不成,就睡了。可能心里记挂着,四点多我又醒了,这次查到了,说实话考的分数也在我的预料之中(教案写完之后偷偷算了分),英语也是和平常做的往年卷子分数相差不大。我当时特别激动的又核对了招收学校的分数,在确定自己有学上之后,把还在睡梦中的爸妈叫醒,告诉他们这个消息,全家人都很开心,我也松了一口气,就好像是人生的台阶又往上上了一步一样,很满足。伴随着备考专升本,因为疫情只能在家,我也不知道那段时间是怎么了,就是特别自律,除了上课学习的时候,其他的时间基本上都被我安排做在 b 站上找的健身视频(哔哩哔哩真是个宝藏哈哈哈),甚至是课间十分钟休息也是一样,所以我也成功的瘦下来了,从 2xl 到 l,m 甚至有的衣服款式 s 我都能穿,随便穿什么衣服都很合适的感觉真是太爽了!人家不都是说不要小看能减肥成功的人,我也很棒啊哈哈。这两件事是 2020 年最让我印象深刻的事了,也是改变我人生的两件事,现在回味一下,真像是做梦一样。 快过年了,新的一年还是有些规划的。有些事情是必须要做的,第一件事就是学校组织的创新引飞的活动,在 9 月份能够取得好成绩吧。第二件事那必须得是要和之前专科的室友们会面一次。第三件嘛,继续坚持减肥,争取到 100 斤并且保持下去。 -第一件事,其实这个活动我当时是不太想参加的,可无奈必须必,当时也是加班加点的备教案,说课,做课件什么的,这件事算是在本科第一学期相当重要的一件事了,最初的时候我特别的迷茫,因为专科学的是学前教育,现在是小学教育,关于小学教育的一切我都不知道,课文啊,上课形式,板书设计等等,当时都觉得无从下手,不过事实证明人还是要逼一逼的,不逼一下自己,都不知道自己有多厉害,在确定要讲的内容后,我就找了人家的教学视频再加上室友们东一句西一句的指导,最后艰难的完成了任务,就在我特别开心的准备走了,我们创新引飞老师叫我留下,她说她看上我了,准备让我参加这个活动!!!OMG 我都惊呆了,我本想着今天终于结束了,我终于可以好好休息了,又出来这么一出,唉,当时也没敢说啥就跟老师说说我之前学的不是小学教育,可能有很多地方不太行,老师说没事,那就没事吧,不过不管怎么说,这件长脸的事那必须得好好干,毕竟也算是磨炼自己的一个机会,不说能晋级到参加省级的吧,起码得混个校级比赛吧嘿嘿,等开学去实习了还可以累积教学经验,加油加油我可以的哈哈~ +第一件事,其实这个活动我当时是不太想参加的,可无奈必须必,当时也是加班加点的备教案,说课,做课件什么的,这件事算是在本科第一学期相当重要的一件事了,最初的时候我特别的迷茫,因为专科学的是学前教育,现在是小学教育,关于小学教育的一切我都不知道,课文啊,上课形式,板书设计等等,当时都觉得无从下手,不过事实证明人还是要逼一逼的,不逼一下自己,都不知道自己有多厉害,在确定要讲的内容后,我就找了人家的教学视频再加上室友们东一句西一句的指导,最后艰难的完成了任务,就在我特别开心的准备走了,我们创新引导老师叫我留下,她说她看上我了,准备让我参加这个活动!!!OMG 我都惊呆了,我本想着今天终于结束了,我终于可以好好休息了,又出来这么一出,唉,当时也没敢说啥就跟老师说说我之前学的不是小学教育,可能有很多地方不太行,老师说没事,那就没事吧,不过不管怎么说,这件长脸的事那必须得好好干,毕竟也算是磨炼自己的一个机会,不说能晋级到参加省级的吧,起码得混个校级比赛吧嘿嘿,等开学去实习了还可以累积教学经验,加油加油我可以的哈哈~ -第二件事我和一个室友已经策划了好久,从 20 年暑假的时候就在讨论了,这群室友,有时候对于他们的一些行为还是看不过去的,但是还是特别喜欢他们,都是特别实在的人,没有什么坏心眼,没有什么心机,跟他们在一块的时候非常开心,有啥说啥这种感觉很舒服,吵吵闹闹的三年,唯一一点就是每次出去都得我之路,人工智能探路雯,害,一群没有方向感不记路的家伙。像这种都坦诚相见过的感情,天天见面烦的慌,不见面了又想的慌,毕业了,也从天天见面到一年才见一次面,机会就很少了,所以今年必须要见一次,看看我养的这群猪猪都有什么新的变化~ +第二件事我和一个室友已经策划了好久,从 20 年暑假的时候就在讨论了,这群室友,有时候对于他们的一些行为还是看不过去的,但是还是特别喜欢他们,都是特别实在的人,没有什么坏心眼,没有什么心机,跟他们在一块的时候非常开心,有啥说啥这种感觉很舒服,吵吵闹闹的三年,唯一一点就是每次出去都得我指路,人工智能探路雯,害,一群没有方向感不记路的家伙。像这种都坦诚相见过的感情,天天见面烦的慌,不见面了又想的慌,毕业了,也从天天见面到一年才见一次面,机会就很少了,所以今年必须要见一次,看看我养的这群猪猪都有什么新的变化~ -第三件事,那不必须得减肥成功,100 斤不过分吧,不过说实话,冬天真不适合减肥啊,天天穿的都不想动,太难了,只能一遍又一遍的给自己做心里辅导,不过现在的运动量还是比着之前夏天的时候少的太多了,夏天最多的时候可以一天连续三个小时锻炼,现在可好,连续半个小时以上我都不想动了,看着镜子里自己穿的跟企鹅一样在那运动,没有一点美感,做着做着就不想动了,但是我妈说了不能再胖回去了,我也是这么觉得,我还要继续瘦嘞。不过马上就要过年回老家了,这是一个大关卡,去年回去就胖十斤,今年可不敢在造次了,管住嘴,迈开腿,挺一挺就过去了,没什么大不了的,我可以的!等回来了每天坚持锻炼 1-2 小时吧,天气也慢慢暖和了,不能光嘴上说要瘦到 100 斤,不行动等于零 。等我瘦到 100 斤,我要好好的奖励自己一下,哼哼~ +第三件事,那不必须得减肥成功,100 斤不过分吧,不过说实话,冬天真不适合减肥啊,天天穿的都不想动,太难了,只能一遍又一遍的给自己做心里辅导,不过现在的运动量还是比着之前夏天的时候少的太多了,夏天最多的时候可以一天连续三个小时锻炼,现在可好,连续半个小时以上我都不想动了,看着镜子里自己穿的跟企鹅一样在那运动,没有一点美感,做着做着就不想动了,但是我妈说了不能再胖回去了,我也是这么觉得,我还要继续瘦嘞。不过马上就要过年回老家了,这是一个大关卡,去年回去就胖十斤,今年可不敢再造次了,管住嘴,迈开腿,挺一挺就过去了,没什么大不了的,我可以的!等回来了每天坚持锻炼 1-2 小时吧,天气也慢慢暖和了,不能光嘴上说要瘦到 100 斤,不行动等于零 。等我瘦到 100 斤,我要好好的奖励自己一下,哼哼~ 好了, 2021 年三件大事情罗列完了,就等我完成这三件大事后发朋友圈吧哈哈哈哈哈哈哈哈 ## 小张 - 欠款还完 + - 存一笔不小于 10000 的小钱 + - 涨薪涨薪 + - 学习一些 SpringBoot 和 SpringCloud 的新技术 + - 脱单脱单(可能性不大😑) ## 小付 - 确定工作 + - 坚持跑步,健身 -- 看一些想看的书(目前看了《意志力》《云边有个小卖部》) + +- 看一些想看的书 (目前看了《意志力》《云边有个小卖部》) + - 如果工作的事情顺利,今年博客技术学习重新启动 + - 有时间多回老家,陪陪老人 ## 老舅 - 找对象 + - 发表一篇 10 分以上的文章 + - 找到工作! ## 老姐 - 瘦到 105 斤 + - 升职加薪✌ + - 想清楚 30 岁以后干啥 + - 读书 * 10 + - 去三个没去过的城市 ## 小周 - 一份稳定工作 ------------------------------------- 转正啦!(6 月 18 日) + - 增加摩托车 D 证 ---------------------------------- 科目四进行中…… + - 买一辆小电车 / 小踏板 --------------------------- 上班买过啦(2 月 28 日) + - 学习摄影 ------------------------------------------- 学习中…… -- 拍 100 张摄影作品 -------------------------------- 50 张+ + +- 拍 100 张摄影作品 -------------------------------- 50 张 + + - 尼康 D610 + 镜头 --------------------------------- 翻车两次……(5 月 6 日) -- 学习钢琴------------------------------------------学习中 ~ + +- 学习钢琴 ------------------------------------------ 学习中 ~ + - 雅马哈 P45 电钢琴 -------------------------------- 买过啦(6 月 18 日) + - 健身 ------------------------------------------------- 尽快落地(6 月 30 ri) + - 篮球 ------------------------------------------------- 从加入公司篮球队开始(5 月 18 日) + - Ps、Pr --------------------------------------------- 学习中 + - LeetCode 100 题 + - 开发维护 1 个开源项目 + - 贡献维护 10 个开源项目 + - 拥有一个 100 星星的开源项目 + - 1000 张字帖 + - 10 本文学作品 + - 骑行北岳恒山 + - 每周最少给父母打一次电话 - ∞ + - 每两个月最少回家见父母一次 - ∞ - - -> 望大家心想事成、万事如意! \ No newline at end of file +> 望大家心想事成、万事如意! diff --git a/Blog/2022.md b/Blog/2022.md new file mode 100644 index 00000000..4ff8b066 --- /dev/null +++ b/Blog/2022.md @@ -0,0 +1,95 @@ +--- +title: 2022 +description: 对2021年的计划规划,涵盖工作、生活、学习、摄影、钢琴、感情等多个方面。 +keywords: + - 工作 + - 生活 + - 2022规划 +tags: + - 年度/2022 +authors: + - 7Wate +date: 2022-02-03 +--- + +感觉时间过得好快呀,新的一年又要开始了。去年的目标完成了 2/3,今年新的目标也需要制定了。 + +## 工作 + +- 今年争取全年工作日无请假 + +- **年中可以谈一次绩效** + +- 同事关系融洽愉快哈 + +- **存 1 万块钱** + +## 生活 + +- 今年大家不要扎堆来结婚好嘛,给我一点时间挣份子钱 + +- 处理好自己的朋友圈,抛弃无关紧要的社交 + +- **需要更好的去处理,收纳家里亲戚的关系!!!这个超级重要!!!** + +- 今年会忙一点累一点,生活质量暂不放在第一位! + +## 学习 + +- **5 月程序员初级职业资格** + +- 5 月初级会计师资格证 + +- PAT 乙级证书 + +- **PAT 甲级证书** + +- **11 月软件设计师中级职业资格** + +- 腾讯云云架构师 + +- 阿里云安全工程师 + +- **RHCE 工程师**(结合物质基础,因为需要花好多钱呀) + +- 华为路由方面认证工程师(同上,这些证书好贵呀) + +## 摄影 + +- 希望,真的超级希望,真的巨希望今年可以拍到星空好嘛 + +- 可以去青岛一趟 ~ + +- 可以积攒一些入会河南省摄影家协会的积分 + +- 提高自己的摄影基本功 + +- 学习 PR & PS 技术 + +## 钢琴 + +- 学好最基础的乐理知识哈(这个必须有) + +- 争取报一个老师领进门,教一些基础知识 ~ + +## 感情 + +- 希望自己可以给自己一个情感支柱 + +## 支出 + +- 70-300 镜头,如果可以的话,虽然虽然需求不大,但是谁又嫌多呢。 + +- 无人机,这个更多只能期盼于中彩票了…… + +- gopro 好吧,这个同上 + +**今年注定是要自给自足的一年,严格的控制好支出。今年务必要养活住自己不问家里张嘴要一分钱。** + +去年没有完成的一些硬性要求更多的局限于 GitHub 上面了,今年不再做更多的硬性要求了。 + +今年物质基础方面更多注重的是自给自足,不再着重于大的开支。如果物质基础充足,更希望可以出去玩几趟 ~ + +今年不再为自己增加不确定性的工作,生活。首先是工作,今年无论如何工作不会有一丝一毫的变动,其次是生活方面将更注重学习,其次是生活。 + +主要就是弃繁就简,提高质量,让自己更加的成长!!! diff --git a/blog/BombSquad-炸弹人小分队.md b/Blog/BombSquad-炸弹人小分队.md similarity index 94% rename from blog/BombSquad-炸弹人小分队.md rename to Blog/BombSquad-炸弹人小分队.md index 94130a4d..503ea40f 100644 --- a/blog/BombSquad-炸弹人小分队.md +++ b/Blog/BombSquad-炸弹人小分队.md @@ -2,16 +2,15 @@ title: BombSquad-炸弹人小分队 description: BombSquad-炸弹人小分队 keywords: -- 游戏 -- 炸弹人小分队 -tags: -- 游戏 + - 游戏 + - 炸弹人小分队 +tags: + - 游戏/炸弹人小分队 authors: -- 7Wate + - 7Wate date: 2018-12-06 --- - 今天推荐一个好玩的游戏,炸弹小分队。 ## 简介 @@ -29,10 +28,13 @@ date: 2018-12-06 ![下载](https://static.7wate.com/img/2020/11/23/e041dabf1cbc6.png) 下载地址:[点击打开](http://www.files.froemling.net/bombsquad/builds) + 官方网址:[点击打开](http://www.froemling.net/) + 安卓版本:[点击打开](https://file.7wate.com/directlink/36/Game/bombsquad/BombSquad_Android_Generic_1.5.29.apk) 选择你用的操作系统版本下载!注意区分安装包与服务器部署包以及 Linux32 位与 64 位。 + *注:如果游戏无法运行或运行错误,可能是缺少运行库,运行解压包内 vc_redist.x86.exe 就可以解决。* ## 个人房间:7Wate diff --git a/blog/Docusaurus 搭建.md b/Blog/Docusaurus 搭建.md similarity index 97% rename from blog/Docusaurus 搭建.md rename to Blog/Docusaurus 搭建.md index f2dbb19f..7f7d251b 100644 --- a/blog/Docusaurus 搭建.md +++ b/Blog/Docusaurus 搭建.md @@ -1,13 +1,15 @@ --- title: Docusaurus 搭建 -description: Docusaurus 搭建 +description: 如何使用 Docusaurus 搭建个人知识库网站。 keywords: -- Docusaurus -- 搭建 -tags: -- Docusaurus + - Docusaurus + - 搭建 + - 个人 + - 知识库 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2023-06-28 --- @@ -153,7 +155,7 @@ i18n: { ![免费计划](https://static.7wate.com/img/2022/07/27/4b2daf39e8a1f.png) -### 获取 API keys +### 获取 API Keys 控制台打开设置页面,点击 API keys,拷贝 **Application ID、Search-Only API Key、Admin API Key**。 @@ -161,7 +163,7 @@ i18n: { ![Key 页面](https://static.7wate.com/img/2022/07/27/6f7717de46944.png) -### 配置 docusaurus +### 配置 Docusaurus 打开项目配置文件 docusaurus.config.js,填写如下配置: diff --git a/blog/Don`t Starve-饥荒.md b/Blog/Don`t Starve-饥荒.md similarity index 87% rename from blog/Don`t Starve-饥荒.md rename to Blog/Don`t Starve-饥荒.md index 3763bc29..b5a2a4d9 100644 --- a/blog/Don`t Starve-饥荒.md +++ b/Blog/Don`t Starve-饥荒.md @@ -1,13 +1,15 @@ --- title: Don't Starve-饥荒 -description: Don't Starve-饥荒 +description: 对游戏《饥荒》的评价,概述了游戏的剧情和玩法,介绍了游戏的环境、角色、版本等信息,并表达了作者很喜欢这款游戏,希望能找到伙伴一起玩的愿望。 keywords: -- 游戏 -- 饥荒 -tags: -- 游戏 + - 饥荒 + - 生存 + - 沙盒 + - 邀请 +tags: + - 游戏/饥荒 authors: -- 7Wate + - 7Wate date: 2020-09-03 --- @@ -51,7 +53,7 @@ date: 2020-09-03 ## 版本 -饥荒目前可在 Windows、Mac OS X、Linux 、Android、ios 等独立作业程序上执行,可经由Steam、WeGame 等多种方式购买。目前拥有 2 个地图、3 个 DLC 拓展、5 个版本、21 个角色供大家尽情游玩,在此不一一赘述了。 +饥荒目前可在 Windows、Mac OS X、Linux 、Android、ios 等独立作业程序上执行,可经由 Steam、WeGame 等多种方式购买。目前拥有 2 个地图、3 个 DLC 拓展、5 个版本、21 个角色供大家尽情游玩,在此不一一赘述了。 新手小白建议 WeGame 选购饥荒 PC 联机版仅售 **24** 元,手机版可以在苹果商店和谷歌商店购买正版, @@ -72,8 +74,8 @@ date: 2020-09-03 > 从此,你在这个世界有了一个家。 > 有一天,你造出了一把长矛。于是,你在采集之外又学会了狩猎。 > 又有一天,你开发了自己的农场,你学会了经营农业…… -> 你的食物开始丰富起来:蔬菜、烤肉、烙饼、饺子、肉丸…… -> 家里的设备也越来越先进:避雷针、冰箱、灭火器、传送门…… +> 你的食物开始丰富起来: 蔬菜、烤肉、烙饼、饺子、肉丸…… +> 家里的设备也越来越先进: 避雷针、冰箱、灭火器、传送门…… > 你挑拨二师兄、牛哥、鱼人、蜘蛛等各个物种发生冲突,然后坐收渔翁之利。 > 夜晚,你的营地灯火通明,你看着冰箱里吃不完快要坏掉的卤肉,自言自语道:“早知道少做一点了……” > “明天吃点什么好呢?” diff --git a/blog/Halo 主题 Redemption 首发版.md b/Blog/Halo 主题 Redemption 首发版.md similarity index 82% rename from blog/Halo 主题 Redemption 首发版.md rename to Blog/Halo 主题 Redemption 首发版.md index 32b80b20..0cf08fc3 100644 --- a/blog/Halo 主题 Redemption 首发版.md +++ b/Blog/Halo 主题 Redemption 首发版.md @@ -1,18 +1,18 @@ --- title: Halo 主题 Redemption 首发版 -description: 一款 Halo 主题 Redemption 首发版 +description: 一款 Halo 主题 Redemption 正式首发版 keywords: -- Halo 主题 -- Redemption + - Halo 主题 + - Redemption tags: -- 技术 + - 开源项目/Redemption author: 7Wate date: 2022-11-02 --- ![img](https://static.7wate.com/img/2022/11/02/4057d365c897c.png) -Redemption 一款专注阅读、写作的 [Halo 博客](https://halo.run/)主题。主要设计思想即是专注阅读、写作,是一款极简类型的博客主题。 +Redemption 一款专注阅读、写作的 [Halo 博客](https://halo.run/) 主题。主要设计思想即是专注阅读、写作,是一款极简类型的博客主题。 Redemption 部分设计灵感借鉴 Halo 博客 Zozo 主题,感谢各位前辈的无私开源。特意针对首屏加载进行优化,无需 CDN**首屏 0.7s 内加载完成。全尺寸媒体自适应查询以及自适应深/浅色模式,让你专注写作,不带感情!** @@ -33,13 +33,13 @@ Redemption 部分设计灵感借鉴 Halo 博客 Zozo 主题,感谢各位前辈 ## 安装方法 -1. 远程拉取:https://github.com/7Wate/halo-theme-Redemption 复制地址点击下载 +1. 远程拉取:https://github.com/7Wate/halo-theme-Redemption 复制地址点击下载 2. 本地上传:在 [Github](https://github.com/7Wate/halo-theme-Redemption)([国内 gitee 下载](https://gitee.com/wate7/redemption.git)) 页面,下载压缩包然后上传安装。 ## 主题配置 - 自定义博客标题以及短语,并填写对应备案号。 -- 自定义显示[开往](https://gitee.com/link?target=https%3A%2F%2Ftravellings.link%2F)和[十年之约](https://gitee.com/link?target=https%3A%2F%2Fwww.foreverblog.cn%2F)的 logo。 +- 自定义显示 [开往](https://gitee.com/link?target=https%3A%2F%2Ftravellings.link%2F) 和 [十年之约](https://gitee.com/link?target=https%3A%2F%2Fwww.foreverblog.cn%2F) 的 logo。 ### 社交链接 diff --git a/blog/Hello Halo.md b/Blog/Hello Halo.md similarity index 93% rename from blog/Hello Halo.md rename to Blog/Hello Halo.md index 38ba4d14..5d2651a3 100644 --- a/blog/Hello Halo.md +++ b/Blog/Hello Halo.md @@ -2,11 +2,12 @@ title: Hello Halo description: 欢迎使用 Halo keywords: -- Halo -tags: -- 技术 + - Halo + - 博客系统 +tags: + - 博客/原创 authors: -- 7Wate + - 7Wate date: 2022-01-09 --- diff --git a/blog/Obsidian 使用 Templater 插件的个性化脚本.md b/Blog/Obsidian 使用 Templater 插件的个性化脚本.md similarity index 93% rename from blog/Obsidian 使用 Templater 插件的个性化脚本.md rename to Blog/Obsidian 使用 Templater 插件的个性化脚本.md index 25a93acc..9b46b835 100644 --- a/blog/Obsidian 使用 Templater 插件的个性化脚本.md +++ b/Blog/Obsidian 使用 Templater 插件的个性化脚本.md @@ -4,15 +4,16 @@ description: Obsidian 使用 Templater 插件的个性化脚本用来写子弹 keywords: - obsidian - templater - - 脚本 + - 个性化脚本 tags: - - obsidian + - 生产力工具/Obsidian + - 开源项目/数字文具盒 authors: - 7Wate date: 2023-09-05 --- -Templater 是 Obsidian 的一个模板插件,它定义了一种模板语言,可将变量和函数结果插入到笔记中。它还将允许执行JavaScript代码来操作这些变量和函数。 +Templater 是 Obsidian 的一个模板插件,它定义了一种模板语言,可将变量和函数结果插入到笔记中。它还将允许执行 JavaScript 代码来操作这些变量和函数。 - [Templater 仓库](https://github.com/SilentVoid13/Templater) - [Templater 文档](https://silentvoid13.github.io/Templater/) diff --git a/blog/Redemption 主题 0.2.1 版本.md b/Blog/Redemption 主题 0.2.1 版本.md similarity index 93% rename from blog/Redemption 主题 0.2.1 版本.md rename to Blog/Redemption 主题 0.2.1 版本.md index 73527403..cbd6550c 100644 --- a/blog/Redemption 主题 0.2.1 版本.md +++ b/Blog/Redemption 主题 0.2.1 版本.md @@ -2,13 +2,13 @@ title: Redemption 主题 0.2.1 版本 description: Redemption 主题 0.2.1 版本 keywords: -- Halo -- 主题 -- Redemption -tags: -- 开源 + - Halo + - 主题 + - Redemption +tags: + - 开源项目/Redemption authors: -- 7Wate + - 7Wate date: 2022-09-14 --- diff --git a/blog/Redemption.md b/Blog/Redemption.md similarity index 93% rename from blog/Redemption.md rename to Blog/Redemption.md index e57f9d2f..c31b1335 100644 --- a/blog/Redemption.md +++ b/Blog/Redemption.md @@ -2,17 +2,16 @@ title: Redemption description: 一款 halo 博客主题 keywords: -- Halo -- 主题 -- Redemption -tags: -- 开源 + - Halo + - 主题 + - Redemption +tags: + - 开源项目/Redemption authors: -- 7Wate + - 7Wate date: 2022-02-14 --- - 一款 Halo 博客主题,前前后后增删改了总计近万行;借鉴 halo-theme-zozo 主题样式,自定义了一些特色。也算圆了自己想独立开发一款博客主题的念想…… ## Redemption @@ -31,7 +30,7 @@ date: 2022-02-14 - 首页:站点标题点击返回首页,[点击打开首页](https://blog.7wate.com/) - 归档:首页文章列表块右下角**日期徽标**[点击打开归档](https://blog.7wate.com/archives) -- 分类:分类目录[点击打开分类目录](https://blog.7wate.com/categories),[点击打开默认分类](https://blog.7wate.com/categories/default) +- 分类:分类目录 [点击打开分类目录](https://blog.7wate.com/categories),[点击打开默认分类](https://blog.7wate.com/categories/default) - 标签:首页文章列表块右下角**标签徽标**点击打开对应标签,[点击打开标签目录](https://blog.7wate.com/tags) ### 顶部徽标 diff --git a/blog/VIVO IQOO Neo3 开箱测评.md b/Blog/VIVO IQOO Neo3 开箱测评.md similarity index 75% rename from blog/VIVO IQOO Neo3 开箱测评.md rename to Blog/VIVO IQOO Neo3 开箱测评.md index 0f060a64..19065aaf 100644 --- a/blog/VIVO IQOO Neo3 开箱测评.md +++ b/Blog/VIVO IQOO Neo3 开箱测评.md @@ -1,14 +1,15 @@ --- title: VIVO IQOO Neo3 开箱测评 -description: VIVO IQOO Neo3 开箱测评 +description: VIVO IQOO Neo3的开箱使用测评。作者为父母购买了这款手机,文章详细介绍了手机的硬件配置、拍照效果、续航表现等信息,并对手机的性价比进行了正面评价。 keywords: -- 手机 -- 开箱 -- VIVO -tags: -- 技术 + - VIVO + - IQOO + - Neo3 + - 开箱测评 +tags: + - 写作/测评 authors: -- 7Wate + - 7Wate date: 2021-02-23 --- @@ -22,9 +23,9 @@ date: 2021-02-23 IQOO Neo3 是 VIVO 一款搭载了高通骁龙 865 处理器,支持双模 5G 全网通,采用 Wifi6 标准的中高端机型。同时 Neo3 还搭载了新一代 UFS 3.1 闪存,屏幕方面 Neo3 则采用了 6.57 英寸挖孔全面屏,拥有 90.4% 屏占比,并且配置 144Hz 高刷新率,显示顺滑流畅。 -续航方面,Neo3 拥有一颗 4500mAh 容量电池,采用 44W Super FlashCharge 闪充技术,58分钟可充入100%的电量,足够日常使用。 +续航方面,Neo3 拥有一颗 4500mAh 容量电池,采用 44W Super FlashCharge 闪充技术,58 分钟可充入 100% 的电量,足够日常使用。 -摄影方面,Neo3 使用了前置1600万像素单摄,后置4800万像素主摄 + 800 万像素超广角 + 200 万像素微距摄像头的三摄方案。 +摄影方面,Neo3 使用了前置 1600 万像素单摄,后置 4800 万像素主摄 + 800 万像素超广角 + 200 万像素微距摄像头的三摄方案。 ![IQOO3 Neo 测评汇总图](https://static.7wate.com/img/2021/02/23/3c6ab4f15a63e.jpg) diff --git a/blog/YubiKey 漂流记.md b/Blog/YubiKey 漂流记.md similarity index 86% rename from blog/YubiKey 漂流记.md rename to Blog/YubiKey 漂流记.md index 81dbcf86..e6d5660f 100644 --- a/blog/YubiKey 漂流记.md +++ b/Blog/YubiKey 漂流记.md @@ -1,19 +1,20 @@ --- title: YubiKey 历险记 -description: YubiKey 历险记 +description: YubiKey 周年活动海淘的记录总结 keywords: -- YubiKey -- 历险记 -tags: -- YubiKey + - YubiKey + - 历险记 + - 海淘 +tags: + - 写作/测评 authors: -- 7Wate + - 7Wate date: 2023-01-10 --- 2022 年 9 月 29 日 [CloudFlare](https://www.cloudflare.com/) 与 [Yubico](https://www.yubico.com/) 开展了周年活动合作,可以为用户提供最低 10 美元购买 YubiKey 5 的机会。 YubiKey 活动力度这么大,啥也不说了赶紧上车。 -YubiKey 是一种小巧安全的令牌,主要用于两步验证和数据加密。对于 YubiKey 从功能上简单来说就是类似于银行的 U盾,但是 YubiKey 相较于 U盾拥有更多的功能。YubiKey 支持多种验证协议:FIDO U2F 和 FIDO2 协议可以用来登录网站和应用程序;而 Yubico OTP 协议可以用来生成一次性密码;OpenPGP 和 PIV 协议可以用来加密数据和电子邮件。 +YubiKey 是一种小巧安全的令牌,主要用于两步验证和数据加密。对于 YubiKey 从功能上简单来说就是类似于银行的 U 盾,但是 YubiKey 相较于 U 盾拥有更多的功能。YubiKey 支持多种验证协议:FIDO U2F 和 FIDO2 协议可以用来登录网站和应用程序;而 Yubico OTP 协议可以用来生成一次性密码;OpenPGP 和 PIV 协议可以用来加密数据和电子邮件。 虽然 YubiKey 适用的场景非常广泛,但是在国内却是非常小众的产品,只有相关的技术爱好者才有所了解。国内目前清华大学技术团队推出了 YubiKey 的替代品 [CanoKey](https://www.canokeys.org/),CanoKey 的目标是从零开始再造一个 YubiKey,即支持 OpenPGP、PIV、TOTP、FIDO 等多种功能的安全密钥。目前 CanoKey 的实现和文档都在 GitHub 上公开,并已经经过了小规模的生产测试。 @@ -30,7 +31,7 @@ YubiKey 是一种小巧安全的令牌,主要用于两步验证和数据加密 - 12 月 28 日:顺丰出库。 - 12 月 31 日:美国纽约分部航班起飞。 - 1 月 9 日:抵达口岸,清关完成。 -- 1 月 10 日:收到 YubiKey +- 1 月 10 日:收到 YubiKey ![YubiKey](https://static.7wate.com/img/2023/01/11/b79cf671c52ae.jpg) diff --git a/blog/「引用」博客的本质是电线杆子.md b/Blog/「引用」博客的本质是电线杆子.md similarity index 84% rename from blog/「引用」博客的本质是电线杆子.md rename to Blog/「引用」博客的本质是电线杆子.md index f53cb9be..341681f7 100644 --- a/blog/「引用」博客的本质是电线杆子.md +++ b/Blog/「引用」博客的本质是电线杆子.md @@ -1,12 +1,14 @@ --- title: 「引用」博客的本质是电线杆子 -description: 记录博客日常的访问数据 +description: 关于个人博客和网站流量的讨论 keywords: -- 博客访问统计 -tags: -- 博客 + - 个人网站 + - 流量分析 + - 访问量 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-03-18 --- @@ -24,11 +26,11 @@ date: 2022-03-18 ![地区](https://static.7wate.com/img/2022/03/18/67c3bda2b26f1.png) -站点首页的数据及其惨淡,可以说无人问津…… +站点首页的数据极其惨淡,可以说无人问津…… 大多可能是自己或者老朋友,大学同学来逛的比较多。 -说来也是有趣,很多友博可能想不明白为什么我的顶级域名是 7wate.com,说来话长。因为大学同学说我脑子瓦特掉了,然后 wate.com 这个域名又被注册了,然后选一个幸运数 7,主域名就这样来了 ~ +说来也是有趣,很多友博可能想不明白为什么我的顶级域名是 7wate.com,说来话长。因为大学同学说我脑子瓦特掉了,然后 wate.com 这个域名又被注册了,然后选一个幸运数 7,主域名就这样来了 ~ ## 博客 @@ -44,16 +46,16 @@ date: 2022-03-18 ![搜索引擎](https://static.7wate.com/img/2022/03/18/a1cb22948c59b.png) -总的趋势来说,主要流量来源于今年加入了一些订阅合集,剩下的就归功于友博了哈哈,蹭着你的每日金句也是掌握了流量密码哈哈 ~ +总的趋势来说,主要流量来源于今年加入了一些订阅合集,剩下的就归功于友博了哈哈,蹭着你的每日金句也是掌握了流量密码哈哈 ~ 从来访地区来看,北上广深杭这些一线城市最多。 -桌面端的话,MS 还是老大,零零散散还有些许 Linux。话说我也想尝试换成 Linux 工作,MS 真得是槽点满满! +桌面端的话,MS 还是老大,零零散散还有些许 Linux。话说我也想尝试换成 Linux 工作,MS 真的是槽点满满! 移动端还是 iphone 居多,紧接着是华为和小米,跟手机销量排行基本相同。 百度现在基本可以正确检索了,完全 ok,所以目前是不再打算做访客信息统计了。 -最后引用友博的标题《[博客的本质是电线杆子,所以难免会遇到乱尿的](https://onojyun.com/2022/03/18/2908/)》,欢迎大家来”尿“ +最后引用友博的标题《[博客的本质是电线杆子,所以难免会遇到乱尿的](https://onojyun.com/2022/03/18/2908/)》,欢迎大家来「尿」。 哈哈哈哈哈哈哈哈哈哈哈哈 diff --git a/blog/「转载」中文大约的确已经死了.md b/Blog/「转载」中文大约的确已经死了.md similarity index 88% rename from blog/「转载」中文大约的确已经死了.md rename to Blog/「转载」中文大约的确已经死了.md index 6594dc25..7a628c6b 100644 --- a/blog/「转载」中文大约的确已经死了.md +++ b/Blog/「转载」中文大约的确已经死了.md @@ -1,13 +1,15 @@ --- title: 「转载」中文大约的确已经死了 -description: 「转载」中文大约的确已经死了 +description: 本文从低幼的流行语、敏感词泛滥、创新乏力、废话式表达等方面阐述了当代中文越来越低龄化、退化的现状,表达了对中文逐渐丧失力量和创造力的担忧。 keywords: -- 中文 -- 死了 -tags: -- 转载 + - 低幼化 + - 敏感词泛滥 + - 创新乏力 + - 思想懒惰 +tags: + - 博客/转载 authors: -- 7Wate + - 7Wate date: 2022-05-24 --- @@ -139,14 +141,14 @@ date: 2022-05-24 但它,本不该这样。 ->【404 文库】王左中右|中文大约的确已经死了 - 中国数字时代 -> ->CDT 档案卡 -> ->标题:中文大约的确已经死了 ->作者:王左中右 ->发表日期:2022.5.20 ->来源:[微信公众号 “王左中右”](https://mp.weixin.qq.com/s/GZKMemoSIDtKBKOI6orVsQ) ->主题归类:[上海疫情](https://chinadigitaltimes.net/chinese/tag/上海疫情) ->CDS 收藏:[真理馆](https://chinadigitaltimes.net/space/真理馆) ->版权说明:该作品版权归原作者所有。中国数字时代仅对原作进行存档,以对抗中国的网络审查。[详细版权说明](https://chinadigitaltimes.net/chinese/copyright)。 +> 【404 文库】王左中右|中文大约的确已经死了 - 中国数字时代 +> +> CDT 档案卡 +> +> 标题:中文大约的确已经死了 +> 作者:王左中右 +> 发表日期:2022.5.20 +> 来源:[微信公众号 “王左中右”](https://mp.weixin.qq.com/s/GZKMemoSIDtKBKOI6orVsQ) +> 主题归类:[上海疫情](https://chinadigitaltimes.net/chinese/tag/上海疫情) +> CDS 收藏:[真理馆](https://chinadigitaltimes.net/space/真理馆) +> 版权说明:该作品版权归原作者所有。中国数字时代仅对原作进行存档,以对抗中国的网络审查。[详细版权说明](https://chinadigitaltimes.net/chinese/copyright)。 diff --git a/blog/「转载」人生.md b/Blog/「转载」人生.md similarity index 74% rename from blog/「转载」人生.md rename to Blog/「转载」人生.md index e6b12530..73080985 100644 --- a/blog/「转载」人生.md +++ b/Blog/「转载」人生.md @@ -1,13 +1,15 @@ --- title: 「转载」人生 -description: 「转载」人生 +description: 人生起伏无常,命运多变,富贵与贫贱都无法决定一个人的成败,我们应顺应天理,坦然面对人生的种种起落。 keywords: -- 人生 -- 诗歌 -tags: -- 转载 + - 励志 + - 命运 + - 历史典故 +tags: + - 博客/转载 + - 成长/个人 authors: -- 7Wate + - 7Wate date: 2020-06-30 --- @@ -26,4 +28,5 @@ date: 2020-06-30 盖人生在世富贵不能移贫贱不能欺,此乃天理循环终而复始者也。 作者:[孟鹤堂](https://baike.baidu.com/item/%E5%AD%9F%E9%B9%A4%E5%A0%82) + 来源:[德云社](http://www.guodegang.org/) diff --git a/blog/「转载」余光中:怎样改进英式中文?.md b/Blog/「转载」余光中:怎样改进英式中文?.md similarity index 98% rename from blog/「转载」余光中:怎样改进英式中文?.md rename to Blog/「转载」余光中:怎样改进英式中文?.md index 64c58924..594024cd 100644 --- a/blog/「转载」余光中:怎样改进英式中文?.md +++ b/Blog/「转载」余光中:怎样改进英式中文?.md @@ -1,13 +1,16 @@ --- title: 「转载」余光中:怎样改进英式中文? -description: 「转载」余光中:怎样改进英式中文? +description: 中文在近代以来受到英文影响而出现的西化趋势,分析了名词、连接词、介词、副词、形容词、动词在语法、语序、时态等方面的变化,指出了一些不当的西化用法,阐述了应该保持中文本身的语言特点和语言生态。 keywords: -- 中文 -- 改进 -tags: -- 转载 + - 中文 + - 英文 + - 西化 + - 基础语法 + - 生态 +tags: + - 博客/转载 authors: -- 7Wate + - 7Wate date: 2020-06-05 --- @@ -146,7 +149,7 @@ date: 2020-06-05 > An old, mad, blind, despised, and dying king,--- -一连五个形容词,直译过来,就成了: 一位衰老的、疯狂的、瞎眼的、被人蔑视的、垂死的君王--- +一连五个形容词,直译过来,就成了: 一位衰老的、疯狂的、瞎眼的、被人蔑视的、垂死的君王 --- 一碰到形容词,就不假思索,交给「的」去组织,正是流行的白话文所以僵化的原因。 @@ -229,6 +232,7 @@ date: 2020-06-05 ---------- 原文作者:[余光中][1]《怎样改进英式中文?- 论中文的常态与变态》 + 本文转载自:[LeanCloud 开放资源][2] [https://open.leancloud.cn/improve-chinese/][3] [1]: https://baike.baidu.com/item/%E4%BD%99%E5%85%89%E4%B8%AD diff --git a/blog/「转载」做了 6 年程序员,我学到的 10 条经验.md b/Blog/「转载」做了 6 年程序员,我学到的 10 条经验.md similarity index 87% rename from blog/「转载」做了 6 年程序员,我学到的 10 条经验.md rename to Blog/「转载」做了 6 年程序员,我学到的 10 条经验.md index cc7d9e5f..c97c15af 100644 --- a/blog/「转载」做了 6 年程序员,我学到的 10 条经验.md +++ b/Blog/「转载」做了 6 年程序员,我学到的 10 条经验.md @@ -1,14 +1,16 @@ --- title: 「转载」做了 6 年程序员,我学到的 10 条经验 -description: 「转载」做了 6 年程序员,我学到的 10 条经验 +description: 作者通过分享自己的工作经历,提出了对程序员职业发展的10条建议。主要内容涉及保持解决问题的心态,了解用户需求,开放包容,持续学习,思考编码,关注用户体验,团队合作,跨团队交流,审视过往代码,以及在技术学习和工作之间找到平衡。 keywords: -- Randy -- 程序员 -- 经验 -tags: -- 感悟 + - 心态 + - 需求 + - 技术 + - 工作 + - 平衡 +tags: + - 工作/经验 authors: -- 7Wate + - 7Wate date: 2022-11-14 --- @@ -27,7 +29,7 @@ date: 2022-11-14 ## 保持一颗解决问题的心 -按照我的观察,那些在工作中用技术取胜的人们共同点都在于他们能保持一颗解决问题的心。他们可以率先想到一种更优的手段解决存在的问题(一般是效率问题)。他们不是嗅觉特别灵敏或者技术特别强,而是当他们遇到了问题,不是把它作为抱怨的话题,而是开始思考这个问题为什么没人解决、应该怎么解决,然后把它实现出来。这种心态在职场上特别稀缺。 +按照我的观察,那些在工作中用技术取胜的人们共同点都在于他们能保持一颗解决问题的心。他们可以率先想到一种更优的手段解决存在的问题 (一般是效率问题)。他们不是嗅觉特别灵敏或者技术特别强,而是当他们遇到了问题,不是把它作为抱怨的话题,而是开始思考这个问题为什么没人解决、应该怎么解决,然后把它实现出来。这种心态在职场上特别稀缺。 我在创业公司的时候做一个图文排版的 App, 设计师会设计一些模板,然后交给我来实现。当时我们有很多模板,为了测试这些模板实现在不同的手机屏幕大小会有什么问题,我们要花特别多的精力。可以想象测试的数量 = 模板数量 * 屏幕尺寸的数量。后来我用 puppeteer 写了个自动生成不同屏幕和模板的截图,直接交给设计师一个一个地看。节省了大量的时间。这个事情没什么技术含量,但它解决了很重要的问题。 @@ -53,7 +55,7 @@ date: 2022-11-14 我刚出来工作犯的最大的错误之一就是拿自己的尺子去度量别人。我因为从小对编程痴迷,写程序对我来说是人生中最大的兴趣,我把几乎所有的时间都花在了技术上。当时我天真地认为所有程序员都应该像我这样,对待技术也应该有一种理想主义,我在互联网上结交的技术朋友都是这样的。所以我当时对我的同事特别苛刻,甚至对那些把写程序只当成工作的人嗤之以鼻。后来回想起来,这是非常错误的想法。每个人有每个人的追求,技术也只是多个兴趣爱好的其中一种。在当时别人的眼里我可能是个「怪人」,甚至有点「装逼」。 -## 保持学习、be open-mind +## 保持学习、be Open-mind 我每天都会在 Twitter 和 Hackernews 发现很多最新的技术和思考,我关注了很多开源库的作者,我可以第一时间了解到他们最近在思考什么,在接触什么。这种主动接收会扩大你的眼界,让你在解决问题的时候有更广的思路。 @@ -79,13 +81,13 @@ date: 2022-11-14 在经历了用户基数如此庞大的产品开发之后,我对代码发布变得尤为审慎。我记得有次只是单纯改了某段 HTML, 但我还是盯着这个 PR diff 看了几分钟,在想这个修改会不会导致什么问题。 -虽然蚂蚁的基础建设可以让这三板斧很容易实现(有成熟的发布平台进行灰度和回滚,有成熟的监控库);虽然即使遵守了三板斧,还是会有 bug. 但是这种代码发布的思维模式是好的,即使我到了别的公司,我在代码发布前还是会问自己这三个问题。 +虽然蚂蚁的基础建设可以让这三板斧很容易实现 (有成熟的发布平台进行灰度和回滚,有成熟的监控库);虽然即使遵守了三板斧,还是会有 bug. 但是这种代码发布的思维模式是好的,即使我到了别的公司,我在代码发布前还是会问自己这三个问题。 ## 跨团队合作是利益交换 在大公司里,有时在做一个事情的时候,需要别的团队一起合作,或许是用到别的团队的接口、或许是需要别的团队开发新的接口,但这通常很难。我以前天真地以为,只要我们做的事情是有利于业务的,别的团队自然就应该一起合作。但实际上,大家更看重的是这个事情对自己的团队有什么好处。 -换位思考一下,我们和别的团队合作,对于他们来说,增加了工作量,增加了风险(带来更高的 qps, 写更多的代码会导致更多的维护成本)。决定是否合作,首先取决于这是否是自上而下的要求,其次就是合作对他们的 KPI 有没有好处。 +换位思考一下,我们和别的团队合作,对于他们来说,增加了工作量,增加了风险 (带来更高的 qps, 写更多的代码会导致更多的维护成本)。决定是否合作,首先取决于这是否是自上而下的要求,其次就是合作对他们的 KPI 有没有好处。 所以我学会了在游说别的团队合作的时候,首先应该想明白合作能给别人带来什么好处,而不是对事情本身夸夸其谈。这样更容易促成合作。 @@ -109,7 +111,6 @@ date: 2022-11-14 能把学习到的技术运用到自己的工作中当然是最好的,但这是可遇不可求的事。但是这不代表没有用在工作中,就等于没有真正学习到这个技术。我认为很多人对技术学习有错误的理解,对我来说,学习技术的精髓在于理解这个技术的 Why, What, How. 和能不能用到工作中没有太大的关系。 -举个例子,我在刚接触到 Redux 的时候,我去学习它,除了了解它怎么用以外,我特别关心的是,Redux 的哲学是什么?是什么启发了 Redux 的作者创造了 Redux? 他和别的库有什么不同?顺着这些问题,我就会了解更多的东西,比如我发现 Redux 是受了 Elm 的启发,我就会去了解 Elm -> 了解 Functional Programming -> 了解 Immutable, 然后关注 Dan (Redux 的作者) 的 Twitter, 看他日常会分享什么,看他对自己做的这个东西的理解是什么。即使我没有把 Redux 用在工作中(事实上我从来没有用过 Redux),当我在学习这个库的时候,我学习到的不仅仅是 Redux 本身,还有它背后的更多东西。我可能很快就会忘掉 Redux 的 API, 但那又如何,那些它背后的知识才是最有价值的,是不会被忘掉的。 +举个例子,我在刚接触到 Redux 的时候,我去学习它,除了了解它怎么用以外,我特别关心的是,Redux 的哲学是什么?是什么启发了 Redux 的作者创造了 Redux? 他和别的库有什么不同?顺着这些问题,我就会了解更多的东西,比如我发现 Redux 是受了 Elm 的启发,我就会去了解 Elm -> 了解 Functional Programming -> 了解 Immutable, 然后关注 Dan (Redux 的作者) 的 Twitter, 看他日常会分享什么,看他对自己做的这个东西的理解是什么。即使我没有把 Redux 用在工作中 (事实上我从来没有用过 Redux),当我在学习这个库的时候,我学习到的不仅仅是 Redux 本身,还有它背后的更多东西。我可能很快就会忘掉 Redux 的 API, 但那又如何,那些它背后的知识才是最有价值的,是不会被忘掉的。 而工作则相当于是一个真实的场景,是在你学习新的技术的时候,帮助你进行实际思考的场景。你需要有意识地去想,这个技术如果用到我的工作中,它是否适合?它能解决什么问题?它为什么适合?它为什么不适合。当你在学习新技术的时候,结合这个技术,多思考这些问题,这才是真正的学习。 - diff --git a/blog/「转载」可逆与不可逆的决策.md b/Blog/「转载」可逆与不可逆的决策.md similarity index 75% rename from blog/「转载」可逆与不可逆的决策.md rename to Blog/「转载」可逆与不可逆的决策.md index bfb1ce36..55020957 100644 --- a/blog/「转载」可逆与不可逆的决策.md +++ b/Blog/「转载」可逆与不可逆的决策.md @@ -1,10 +1,15 @@ --- title: 「转载」可逆与不可逆的决策 -description: 可逆与不可逆的决策 +description: 可逆决策和不可逆决策的差异。 keywords: - - 认知 + - 可逆决策 + - 不可逆决策 + - 信息门限 + - 快速决策 + - 慎重决策 tags: - - 认知 + - 博客/转载 + - 成长/个人 authors: - 7Wate date: 2023-09-22 @@ -20,12 +25,12 @@ date: 2023-09-22 对于可逆的决策,我们应迅速做出。**快速决策并不是鲁莽行事或信息不灵通的借口,而是承认即使决策不完美,也是可以接受的。**例如,今天早晨你发现牙膏快用完了,决定去商店购买。到了商店,你却发现原来常用的牙膏品牌已经卖完。面对这种情况,你并没有犹豫,而是选择了一个包装看起来还不错的牌子。毕竟,如果这个牙膏不合口味,你随时都可以更换。 -而对于不可逆的决策,我们应更为审慎。想象一下,如果你是一支NBA球队的经理,正在考虑是否交易队中的明星球员。这样的决策一旦确定,将很难撤销。 +而对于不可逆的决策,我们应更为审慎。想象一下,如果你是一支 NBA 球队的经理,正在考虑是否交易队中的明星球员。这样的决策一旦确定,将很难撤销。 -贝佐斯认为,**当我们对某个决策有70%的把握时,就应该采取行动,而不是无休止地等待更多信息。**在《一瞬之间:不假思索的思考力量》中,马尔科姆·格莱德威尔探讨了为何在不确定性下决策可能如此高效。我们常常认为信息越多,决策越好,但格莱德威尔并不这么看。他指出,有时过多的信息反而会使问题变得模糊。 +贝佐斯认为,**当我们对某个决策有 70% 的把握时,就应该采取行动,而不是无休止地等待更多信息。**在《一瞬之间:不假思索的思考力量》中,马尔科姆·格莱德威尔探讨了为何在不确定性下决策可能如此高效。我们常常认为信息越多,决策越好,但格莱德威尔并不这么看。他指出,有时过多的信息反而会使问题变得模糊。 当你真正理解到,可逆决策不仅是为了引入新的可能性、收集信息,还是为了寻求他人的意见时,你的决策模式会发生深刻的变化。对于那些一旦确定就无法更改的决策,最大的风险在于过于急躁。而对于可调整的决策,真正的挑战在于避免拖延。我们应该及时做出那些可调整的选择,而对于关键且不可逆的决策,则应在最合适的时机慎重决策。 > Reversible and Irreversible Decisions -> +> > 原文: diff --git a/blog/「转载」小镇做题家.md b/Blog/「转载」小镇做题家.md similarity index 77% rename from blog/「转载」小镇做题家.md rename to Blog/「转载」小镇做题家.md index f8215dac..8ff9458d 100644 --- a/blog/「转载」小镇做题家.md +++ b/Blog/「转载」小镇做题家.md @@ -1,12 +1,17 @@ --- title: 「转载」小镇做题家 -description: 「转载」小镇做题家 +description: 赵韦的“小镇做题家”的成长故事。文章描写了赵韦从小镇逃离到上大学,再到出国留学,最终毕业后在大城市难以立足的过程。赵韦代表了许多来自小地方的“做题家”在现实中苦苦挣扎的写照。 keywords: -- 小镇做题家 -tags: -- 转载 + - 小镇做题家 + - 逃离 + - 大学 + - 出国 + - 焦虑 +tags: + - 博客/转载 + - 成长/个人 authors: -- 7Wate + - 7Wate date: 2022-07-12 --- @@ -30,13 +35,13 @@ date: 2022-07-12   年级排名表就贴在墙上,根据分数高低从左到右排列。赵韦的名字总出现在右栏,他盯着左侧名次靠前的名单,发现里面总有他瞧不上的同学。以往,赵韦觉得他们不如他聪明,只懂得没日没夜地刷题,到头来才发现,在高考的规则里,分能补拙,掌握了做题的技巧,也能事半功倍。 -  从那之后,赵韦像变了一个人。他不再玩游戏,而是专心攻克学业。一路发奋的过程中,赵韦也变成了自己讨厌的那类学生:课间埋头做作业;早晨跑操、食堂打饭排队的间隙,也带上小本子,边走边看。父母每天中午把饭送到教室门口,他用半个小时吃完,然后接着刷题。练习题逐渐占据了赵韦的生活,每周休息的时间逐渐缩减为半天,到后来干脆完全取消。就这样埋头苦读了半年,赵韦终于把自己训练成做题专家,成绩也从百名开外,跃居全年级二三十名。 +  从那之后,赵韦像变了一个人。他不再玩游戏,而是专心攻克学业。一路发奋的过程中,赵韦也变成了自己讨厌的那类学生:课间埋头做作业; 早晨跑操、食堂打饭排队的间隙,也带上小本子,边走边看。父母每天中午把饭送到教室门口,他用半个小时吃完,然后接着刷题。练习题逐渐占据了赵韦的生活,每周休息的时间逐渐缩减为半天,到后来干脆完全取消。就这样埋头苦读了半年,赵韦终于把自己训练成做题专家,成绩也从百名开外,跃居全年级二三十名。 ## 二 -  2015年夏天,高考成绩公布,赵韦过了一本线。志愿填报书里的专业词汇他不甚明白。上网搜索填报技巧后,他从所有能够得着的“211”高校里,选择了一所离家最远的学校。网上说,这所学校最好的专业是农业种植,他稀里糊涂地选了,觉得那代表着前程。 +  2015 年夏天,高考成绩公布,赵韦过了一本线。志愿填报书里的专业词汇他不甚明白。上网搜索填报技巧后,他从所有能够得着的“211”高校里,选择了一所离家最远的学校。网上说,这所学校最好的专业是农业种植,他稀里糊涂地选了,觉得那代表着前程。 -  赵韦告别小镇。临走时,他告诉自己,别再回头,去追求老师所说的自由人生。他渴望逃离家乡——这里的人市侩功利,为了蝇头小利,不惜违背道德;娱乐只有茶馆、棋牌室,低俗又乏味。也许去了大城市,就不再是这样了。 +  赵韦告别小镇。临走时,他告诉自己,别再回头,去追求老师所说的自由人生。他渴望逃离家乡——这里的人市侩功利,为了蝇头小利,不惜违背道德; 娱乐只有茶馆、棋牌室,低俗又乏味。也许去了大城市,就不再是这样了。   大学是完全不一样的世界,操场草坪上有抱着吉他弹唱的人,跆拳道学院的学生穿着洁白宽松的训练服打拳……同学们聊梦想、谈艺术,没有人被困在生计里。 @@ -44,7 +49,7 @@ date: 2022-07-12   在大学,赵韦还谈了恋爱。和女友一起去参加学院晚会的时候,赵韦看到别人盛装出席,才觉察到自己的邋遢。他开始关注容貌、穿著,学习穿搭技巧。他不再穿从家里带来的衣服了,给自己置办了许多新衣物。很快,父母给的生活费花完了,赵韦就利用课余时间到街头派发传单、在五星级酒店里当杂工。 -  大二那年,赵韦添置了一台单反相机。买单反的钱来自母亲,那是母亲送给他的生日礼物,5000多块钱,相当于她摆摊一个月的收入。赵韦从未拥有过这类高级数码设备。那之后,无论去哪里,他都会带着相机,拍下学校的雨夜、南京的雪。 +  大二那年,赵韦添置了一台单反相机。买单反的钱来自母亲,那是母亲送给他的生日礼物,5000 多块钱,相当于她摆摊一个月的收入。赵韦从未拥有过这类高级数码设备。那之后,无论去哪里,他都会带着相机,拍下学校的雨夜、南京的雪。   小镇做题家逃离了小镇,继续一路狂奔。大三夏天,他通过学校的面试,拿下了美国名校访学全额奖学金的名额。他踏上地球另一端的土地,西方社会在他面前展开。他站在纽约时代广场的高楼下,发现人渺小如沙尘,巨幅广告交错辉映的光线,霸占着城市的上空。他这才发觉,家乡其实很小很小。 @@ -58,11 +63,11 @@ date: 2022-07-12   他有了新兴趣——大四偶然选修的计算机网络课。尽管课程难度很大,但为了学会编程,他茶饭不思,沉迷于创造的快感。 -​ 2019年,临近毕业时,赵韦最终决定放弃就业和保研,多学一年计算机,跨专业考研。他搬出学校,靠父母的资助,一个人租房,修读计算机编程。 +​ 2019 年,临近毕业时,赵韦最终决定放弃就业和保研,多学一年计算机,跨专业考研。他搬出学校,靠父母的资助,一个人租房,修读计算机编程。   身边的同学接连收到企业的录用信,成绩不如他的人也考上了研究生。这让他焦虑倍增,他放弃应届招聘,放弃本专业保研后孤注一掷,去考计算机专业的研究生。他没有后路可退,失败了就是坠落。高中时代的阴影又回来了,一本书看到最后,前面的内容又忘光了。他愈发紧张,通宵学习,清早枕在书上睡着,再到傍晚醒来。 -  极端焦虑下,赵韦的精神逐渐失控。他的自制力越来越差,到最后日夜颠倒,吃不下饭,体重在几天内骤降8斤。有一次压力袭来,他不受控制哭喊:“对不起,对不起……” +  极端焦虑下,赵韦的精神逐渐失控。他的自制力越来越差,到最后日夜颠倒,吃不下饭,体重在几天内骤降 8 斤。有一次压力袭来,他不受控制哭喊:“对不起,对不起……”   本科毕业时,赵韦的父母出现在学校。他们没通知儿子,就赶来参加他的毕业典礼。两个中年人在晚会大厅不知所措,手机没电了,在女厕门口寻到一个插座,蹲在地上给手机充电。赵韦发现了,忙将他们拉走,到了人少的街道才停下,对他们一通埋怨。 @@ -70,17 +75,17 @@ date: 2022-07-12   手足无措之下,夫妻俩把原因归结为“书读得太多”,觉得如果当初不逼孩子上大学,儿子就不会得病。 -  2019年年底,趁着春节,父母把赵韦劝回家。赵韦又一次踏上那辆绿皮火车。他跟父母约好,回家之后,必须留给他独处的空间。回到家,父母尽力满足他的要求,用一张帘子遮住了儿子的床。但这层“膜”薄得可怜,父母掀开帘子就能入侵他的物理边界。父母不知抑郁症的缘由,总跟儿子叨叨:“要开心啊。” +  2019 年年底,趁着春节,父母把赵韦劝回家。赵韦又一次踏上那辆绿皮火车。他跟父母约好,回家之后,必须留给他独处的空间。回到家,父母尽力满足他的要求,用一张帘子遮住了儿子的床。但这层“膜”薄得可怜,父母掀开帘子就能入侵他的物理边界。父母不知抑郁症的缘由,总跟儿子叨叨:“要开心啊。”   赵韦想找计算机相关的工作,但给大批互联网企业投去简历,没有得到过回复——毕竟,他连个与之相关的学历都没有。家里已经拿不出钱让他继续学习编程,赵韦只能在家埋头苦学。最夸张的时候,他连续一个多星期通宵达旦,累得不行就眯一会儿,醒来后继续学。除了喝水,他基本不吃东西,也不洗澡。   父母见他偏执,愈发觉得恐惧。最终他们求助亲友,将儿子交给最有出息的亲戚——对方是工程项目经理,身家几百万。赵韦被介绍去了工地。他说服自己,一边干活一边学习,还能攒些钱上课。 -  在工地,赵韦的学历成了废纸。他和中专毕业的男孩一起干活,早8点到晚10点,挖土、扫地、擦玻璃、刨废墟。休息时,几十个人围在一起吸着烟,说着段子,烟雾弥漫,只有赵韦适应不了。他盯着自己沾满黄土的白色手套,不明白自己为何走到了这一步。 +  在工地,赵韦的学历成了废纸。他和中专毕业的男孩一起干活,早 8 点到晚 10 点,挖土、扫地、擦玻璃、刨废墟。休息时,几十个人围在一起吸着烟,说着段子,烟雾弥漫,只有赵韦适应不了。他盯着自己沾满黄土的白色手套,不明白自己为何走到了这一步。 -##   四 +## 四 -  工作闲暇,赵韦保持着在大学里刷豆瓣的习惯。一次,他偶然点进豆瓣小组“985废物引进计划”,小组成员都是毕业于“985”“211”高校的学生,他们曾是应试教育规则下的强者,走上社会后却被打回原形。 +  工作闲暇,赵韦保持着在大学里刷豆瓣的习惯。一次,他偶然点进豆瓣小组“985 废物引进计划”,小组成员都是毕业于“985”“211”高校的学生,他们曾是应试教育规则下的强者,走上社会后却被打回原形。   小组里有天出现了一个热帖,发帖人自称“小鎮做题家”:“出身小城,埋头苦读,擅长应试,缺乏一定视野和资源的青年学子。”带有戏谑意味的自嘲戳中了很多人的痛点。 @@ -95,7 +100,7 @@ date: 2022-07-12   想到这里,他心疼父母,他们劳心劳力地培养他,到头来儿子变成这副模样又让他们感到可悲。可他又有什么资格俯视父母。父母做了一辈子农民工,即使被城市淘汰,也可以没有心理障碍地回到小镇的怀抱。不像他,既无法在大城市落脚,也回不了农村。 > 原文:小镇做题家 -> +> > 作者:陈晓妍 -> +> > 地址:[https://www.rain8.com/wenzhang/54627-2.html](https://www.rain8.com/wenzhang/54627-2.html) diff --git a/blog/「转载」年轻.md b/Blog/「转载」年轻.md similarity index 90% rename from blog/「转载」年轻.md rename to Blog/「转载」年轻.md index 7896828a..38503a41 100644 --- a/blog/「转载」年轻.md +++ b/Blog/「转载」年轻.md @@ -1,13 +1,17 @@ --- title: 「转载」年轻 -description: 「转载」年轻 +description: 青春并不只是年轻貌美,而是一种勇于梦想、追求的心态。它存在于任何年龄段,60岁的人也可能比20岁更有这份气质。只要心中怀有梦想,保持乐观热情,我们就永远年轻。 keywords: -- 年轻 -- 诗歌 -tags: -- 转载 + - 青春 + - 心态 + - 激情 + - 勇气 + - 梦想 +tags: + - 博客/转载 + - 成长/个人 authors: -- 7Wate + - 7Wate date: 2021-01-22 --- @@ -27,7 +31,9 @@ date: 2021-01-22 > 千万不要动不动就说自己老了,错误引导自己!年轻就是力量,有梦就有未来! --- + **Youth** + *Samuel Ullman* Youth is not a time of life; it is a state of mind. It is not a matter of rosy cheeks, red lips and supple knees. It is a matter of the will, a quality of the imagination, vigor of the emotions; it is the freshness of the deep spring of life. diff --git a/blog/「转载」当代科技生活.md b/Blog/「转载」当代科技生活.md similarity index 78% rename from blog/「转载」当代科技生活.md rename to Blog/「转载」当代科技生活.md index b4eaf86d..fdc70c14 100644 --- a/blog/「转载」当代科技生活.md +++ b/Blog/「转载」当代科技生活.md @@ -1,21 +1,29 @@ --- title: 「转载」当代科技生活 -description: 当代科技生活 +description: 理想中的科技生活和现实中的科技生活之间的差距。 keywords: -- 科技生活 -tags: -- 转载 + - 科技生活 + - 机器 + - 理想 + - 现实 + - 服务器 +tags: + - 博客/转载 authors: -- 7Wate + - 7Wate date: 2022-02-23 --- 理想中的科技生活: + 家用电器随时都能准备好,招之即来,挥之即去,完美完成安排的工作。 + ——机器为我服务。 现实中的科技生活: + 换饮水机滤芯,洗空调滤网,清洗扫地机器人尘盒,清洗洗衣机、干衣机,换灯泡,修电路,优化网络,交电费、水费、话费、交通费,给手机、平板、手环、手表、电脑、电动车充电… + ——我为机器服务。 人间真实哈哈哈哈哈 😏😏😏 diff --git a/blog/「转载」怎么平衡工作与生活?.md b/Blog/「转载」怎么平衡工作与生活?.md similarity index 96% rename from blog/「转载」怎么平衡工作与生活?.md rename to Blog/「转载」怎么平衡工作与生活?.md index 515ba508..eba9109c 100644 --- a/blog/「转载」怎么平衡工作与生活?.md +++ b/Blog/「转载」怎么平衡工作与生活?.md @@ -1,14 +1,18 @@ --- title: 「转载」怎么平衡工作与生活? -description: 「转载」怎么平衡工作与生活? +description: 文章讨论了工作与生活的平衡问题。作者认为,追求完美的工作生活平衡是不现实的,我们应该接受生活本身的不平衡,在工作中找到意义,在生活中寻找乐趣,努力让工作开心,生活快乐。 keywords: -- 工作 -- 生活 -- 平衡 -tags: -- 转载 + - 工作 + - 生活 + - 平衡 + - 意义 + - 乐趣 +tags: + - 博客/转载 + - 工作/经验 + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-07-07 --- @@ -102,6 +106,7 @@ date: 2022-07-07 很多人解决事情的方式是堆时间,所谓堆时间,把其他事情的时间都尽力挤压掉,留出大量的时间专门用于一件事情的完成,颇有一种牺牲一切没必要的事情只为一件事情完成的魄力,但真到具体做这件事情的时候,则会各种分神,找个借口休息一下,查点相关的资料结果越查越远,不自觉地拿起手机点开了微信消息,事情还没干多少,无论是内部打断,还是外部打断,都打断了几十回。这样的事情,即便完成了,享受过短暂的成就感之后,心理上依然感到十分疲惫。 所以对于这种较大时间块,一定要明确的划分出做事和休息的时间,否则就会自己主动陷入 996 的陷阱之中。 + 而做具体的活动之时,可以采用比如番茄工作法。 关于番茄工作法也多说一句,这个名字想必大家都听过很多遍,本身并不复杂,但是,也没有大家了解的那么简单,什么“每工作 25 分钟,然后休息 5 分钟,第 4 个休息的时候,休息 30 分钟”,那这其中,为什么番茄工作法很有效,背后的原理是什么?对于干扰的情况如何处理?每天结束时统计和处理哪些内容?对于这些问题,大家可能都没有了解过,更多的是看一两篇二手的文章大致的了解了下。 @@ -121,7 +126,7 @@ date: 2022-07-07 所以日常生活中,在你察觉到负面情绪的时候,及时的反思背后导致的原因,当断不断,反受其乱,但也不用一直的断,加加减减,才是人生的常态。 > 原作者:冴羽答 - 读者问:怎么平衡工作与生活 -> +> > 文章地址:[https://github.com/mqyqingfeng/Blog/issues/298](https://github.com/mqyqingfeng/Blog/issues/298) -> -> 文章采用[知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/)进行许可。 +> +> 文章采用 [知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 进行许可。 diff --git a/blog/「转载」提问的艺术.md b/Blog/「转载」提问的艺术.md similarity index 84% rename from blog/「转载」提问的艺术.md rename to Blog/「转载」提问的艺术.md index 2a5a3086..5cc4757c 100644 --- a/blog/「转载」提问的艺术.md +++ b/Blog/「转载」提问的艺术.md @@ -1,12 +1,15 @@ --- title: 「转载」提问的艺术 -description: 「转载」提问的艺术 +description: 全面地讲解了如何更好地提出和回答技术问题。 keywords: -- 提问 -tags: -- 转载 + - 提问技巧 + - 解答方法 + - 技术社区 +tags: + - 博客/转载 + - 工作/沟通 authors: -- 7Wate + - 7Wate date: 2020-09-04 --- @@ -43,9 +46,9 @@ date: 2020-09-04 ### 使用有意义且明确的主题 -在论坛或社交群中,大约 50 字以内的标题是抓住资深专家注意力的好机会,别用喋喋不休的`帮帮忙`、`跪求`、`急`(更别说`救命啊!!!!`这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。 +在论坛或社交群中,大约 50 字以内的标题是抓住资深专家注意力的好机会,别用喋喋不休的 `帮帮忙`、`跪求`、`急`(更别说 `救命啊!!!!` 这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。 -一个好标题范例是`目标 —— 差异`式的描述,在`目标`部分指出是哪一个或哪一组东西有问题,在`差异`部分则描述与期望的行为不一致的地方。 +一个好标题范例是 `目标 —— 差异` 式的描述,在 `目标` 部分指出是哪一个或哪一组东西有问题,在 `差异` 部分则描述与期望的行为不一致的地方。 ``` 蠢问题:救命啊!我的笔记本电脑不能正常显示了! @@ -61,9 +64,9 @@ date: 2020-09-04 ### 去掉无意义的提问句 -避免用无意义的话结束提问,例如`有人能帮我吗?`或者`这有答案吗?`。 +避免用无意义的话结束提问,例如 `有人能帮我吗?` 或者 `这有答案吗?`。 -### 即使你很急也不要在标题写`紧急` +### 即使你很急也不要在标题写 `紧急` ### 用清晰、正确、精准且语法正确的语句 @@ -76,11 +79,11 @@ date: 2020-09-04 ### 精确地描述问题并言之有物 - 仔细、清楚地描述你的问题或 Bug 的症状。 -- 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:`Fedora Core 4`、`Slackware 9.1`等)。 +- 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:`Fedora Core 4`、`Slackware 9.1` 等)。 - 描述在提问前你是怎样去研究和理解这个问题的。 - 描述在提问前为确定问题而采取的诊断步骤。 - 描述最近做过什么可能相关的硬件或软件变更。 -- 尽可能的提供一个可以`重现这个问题的可控环境`的方法。 +- 尽可能的提供一个可以 `重现这个问题的可控环境` 的方法。 ### 话不在多而在精 @@ -128,19 +131,19 @@ date: 2020-09-04 ### 礼多人不怪,而且有时还很有帮助 -彬彬有礼,多用`请`和`谢谢您的关注`,或`谢谢你的关照`。让大家都知道你对他们花时间免费提供帮助心存感激。 +彬彬有礼,多用 `请` 和 `谢谢您的关注`,或 `谢谢你的关照`。让大家都知道你对他们花时间免费提供帮助心存感激。 ### 问题解决后,加个简短的补充说明 -最理想的方式是向最初提问的话题回复此消息,并在标题中包含`已修正`,`已解决`或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串`问题 X`和`问题 X - 已解决`的潜在回复者就明白不用再浪费时间了。 +最理想的方式是向最初提问的话题回复此消息,并在标题中包含 `已修正`,`已解决` 或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串 `问题 X` 和 `问题 X - 已解决` 的潜在回复者就明白不用再浪费时间了。 ## 如何解读答案 ### RTFM 和 STFW -有一个古老而神圣的传统:如果你收到`RTFM (Read The Fucking Manual)`的回应,回答者认为你**应该去读他妈的手册**。当然,基本上他是对的,你应该去读一读。 +有一个古老而神圣的传统:如果你收到 `RTFM (Read The Fucking Manual)` 的回应,回答者认为你**应该去读他妈的手册**。当然,基本上他是对的,你应该去读一读。 -RTFM 有一个年轻的亲戚。如果你收到`STFW(Search The Fucking Web)`的回应,回答者认为你**应该到他妈的网上搜索**。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 **Google 是你的朋友**!) +RTFM 有一个年轻的亲戚。如果你收到 `STFW(Search The Fucking Web)` 的回应,回答者认为你**应该到他妈的网上搜索**。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 **Google 是你的朋友**!) 你不应该因此不爽;依照黑客的标准,他已经表示了对你一定程度的关注,而没有对你的要求视而不见。 @@ -280,9 +283,9 @@ foo 项目代码在 Nulix 6.2 版下无法编译通过。我读过了 FAQ,但 **正面的回答问题**!如果这个提问者已经很深入的研究而且也表明已经试过 X 、 Y 、 Z 、 A 、 B 、 C 但没得到结果,回答 `试试看 A 或是 B` 或者 `试试 X 、 Y 、 Z 、 A 、 B 、 C` 并附上一个链接一点用都没有。 -**帮助你的社区从问题中学习**。当回复一个好问题时,问问自己`如何修改相关文件或常见问题文件以免再次解答同样的问题?`,接着再向文件维护者发一份补丁。 +**帮助你的社区从问题中学习**。当回复一个好问题时,问问自己 `如何修改相关文件或常见问题文件以免再次解答同样的问题?`,接着再向文件维护者发一份补丁。 -如果你是在研究一番后才做出的回答,**展现你的技巧而不是直接端出结果**。毕竟`授人以鱼不如授人以渔`。 +如果你是在研究一番后才做出的回答,**展现你的技巧而不是直接端出结果**。毕竟 `授人以鱼不如授人以渔`。 ## 声明 @@ -298,6 +301,6 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 本中文指南是基于原文 3.10 版以及 2010 年由 [Gasolin](https://github.com/gasolin) 所翻译版本的最新翻译; -协助指出翻译问题,**请[发 Issue](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/issues/new),或直接[发 Pull Request](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/compare) 给我。** +协助指出翻译问题,**请 [发 Issue](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/issues/new),或直接 [发 Pull Request](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/compare) 给我。** 本文另有:[简体中文版](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md) diff --git a/blog/「转载」访谈总结.md b/Blog/「转载」访谈总结.md similarity index 86% rename from blog/「转载」访谈总结.md rename to Blog/「转载」访谈总结.md index 898b3226..315c8221 100644 --- a/blog/「转载」访谈总结.md +++ b/Blog/「转载」访谈总结.md @@ -1,16 +1,20 @@ --- title: 「转载」访谈总结 -description: 好友在面试前准备的访谈总结 +description: 分享了两位程序员小鹏和小豪的基本信息、工作信息、建议以及一位阿里前辈的问题回答,涉及程序员的学习、工作、面试、职业规划等方面。 keywords: -- 成长 -- 面试 -- 访谈总结 -tags: -- 转载 + - 程序员 + - 工作流程 + - 技术栈 + - 面试 + - 经验分享 +tags: + - 博客/转载 + - 工作/经验 authors: -- 7Wate + - 7Wate date: 2022-10-08 --- + ## 小鹏 ### 基本信息 @@ -29,7 +33,7 @@ date: 2022-10-08 离职原因:工作用的技术和目前主流技术栈不匹配且工作氛围不好。 -薪酬结构:基本工资+绩效+补贴 +薪酬结构:基本工资 + 绩效 + 补贴 缴纳基数:基本工资 @@ -44,7 +48,7 @@ date: 2022-10-08 #### 技术 / 学习建议 1. 要接触主流技术,学习新技术。 -2. B站学习。 +2. B 站学习。 #### 面试建议 @@ -60,7 +64,7 @@ date: 2022-10-08 2. 学会责任划分,要有推锅意识。不是自己的责任,不要背锅。 -3. 面试的时候期望薪资要高一点,HR有招聘人员转正的提成(他的公司HR大多本地人)。 +3. 面试的时候期望薪资要高一点,HR 有招聘人员转正的提成(他的公司 HR 大多本地人)。 **权衡是否离家工作:没有权衡过,基本上一个月坐飞机回家一次。** @@ -80,7 +84,7 @@ date: 2022-10-08 在职状态:在职 -薪酬结构:基本工资+各种拆分形式的补助 +薪酬结构:基本工资 + 各种拆分形式的补助 缴纳基数:全额 @@ -103,7 +107,7 @@ date: 2022-10-08 1. 简历上的项目和公司类型要匹配,项目都是一个方向的项目。 2. 技术要在项目中的业务上有落地点。 3. 如果写上线的公网项目,有的会要求展示。 -4. 如果一个岗位面试成功,可以联系HR将入职时间延长,把手头的面试面完,尽可能拿到多的Offer做选择入职哪个。 +4. 如果一个岗位面试成功,可以联系 HR 将入职时间延长,把手头的面试面完,尽可能拿到多的 Offer 做选择入职哪个。 5. 入职后一周会熟悉代码,然后就给一些简单的功能开发。 #### 避坑建议 @@ -119,7 +123,7 @@ date: 2022-10-08 ### 问题与回答 -#### Java未来的发展方向?未来这个技术的发展方向? +#### Java 未来的发展方向?未来这个技术的发展方向? **没有人能预知未来,没有东西能一成不变的。**Java 只是个工具,Java 岗位的方向有很多,大数据,CRUD。用这个工具只是当前的业务需要,能给业务带来效能。纵使你知道当前的发展方向,可能过几年就变了,你那时候就会有新的认识,新的想法。 @@ -141,7 +145,7 @@ date: 2022-10-08 #### 如何平衡工作和生活,能达到平衡吗? -做不到,我的大老板也做不到。你在工作里面,你想要做出成绩,你要你要多付出;你在生活里面,你想要去照顾好家庭,照顾好父母,也需要多付出。精力与时间都是有限的。人无完人,平衡工作和生活,就跟鱼与熊掌一样不可兼得。 +做不到,我的大老板也做不到。你在工作里面,你想要做出成绩,你要多付出;你在生活里面,你想要去照顾好家庭,照顾好父母,也需要多付出。精力与时间都是有限的。人无完人,平衡工作和生活,就跟鱼与熊掌一样不可兼得。 ## 指导建议 diff --git a/blog/一线城市拥有一亩三分地是什么体验.md b/Blog/一线城市拥有一亩三分地是什么体验.md similarity index 89% rename from blog/一线城市拥有一亩三分地是什么体验.md rename to Blog/一线城市拥有一亩三分地是什么体验.md index 9fe09af2..838cf2e3 100644 --- a/blog/一线城市拥有一亩三分地是什么体验.md +++ b/Blog/一线城市拥有一亩三分地是什么体验.md @@ -1,13 +1,17 @@ --- title: 一线城市拥有一亩三分地是什么体验 -description: 一线城市拥有一亩三分地是什么体验 +description: 记录我在一线城市拥有自己一亩三分地的文章。我居住在中部省会城市,有幸享受城市生活还能拥有自己的土地。 keywords: -- 种地 -- 花园 -tags: -- 花园 + - 一线城市 + - 一亩三分地 + - 果园 + - 种花 + - 养鱼 + - 规划 +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2022-04-06 --- diff --git a/blog/三步为你博客文章分析情感关键字.md b/Blog/三步为你博客文章分析情感关键字.md similarity index 87% rename from blog/三步为你博客文章分析情感关键字.md rename to Blog/三步为你博客文章分析情感关键字.md index 13235b3e..023fc8ad 100644 --- a/blog/三步为你博客文章分析情感关键字.md +++ b/Blog/三步为你博客文章分析情感关键字.md @@ -1,18 +1,19 @@ --- title: 三步为你博客文章分析情感关键字 -description: 三步为你博客文章分析情感关键字 +description: 使用Python来分析博客文章关键字并生成词云图的项目。作者分享了项目的GitHub地址和使用方法,并展示了自己的词云图。 keywords: -- 博客 -- 情感 -- 关键字 -tags: -- 博客 + - 博客 + - 情感 + - 词云图 + - 关键字 + - 个性 +tags: + - 开源项目/EndOfYear authors: -- 7Wate + - 7Wate date: 2022-03-02 --- - 最近闲来无事(其实真的不能说自己闲,有毒……),便想着用 Python 分析一下博客文章关键字,看看平时博客主要写了些什么,能不能从中探寻到什么? ## 如何使用 @@ -28,7 +29,9 @@ date: 2022-03-02 *具体细节请阅读项目 README* ## 莫比乌斯 + ![WordCloud.jpg](https://static.7wate.com/img/2022/03/03/9e9578db6c62a.jpg) + ## 我的词云图 ![WordCloud](https://static.7wate.com/img/2022/03/02/810071735e500.jpg) @@ -55,4 +58,3 @@ date: 2022-03-02 忙了一整天,有点累有点累…… 我要回家拥抱大床了,奥里给 ~ - diff --git a/blog/上有天堂、下有苏杭.md b/Blog/上有天堂、下有苏杭.md similarity index 79% rename from blog/上有天堂、下有苏杭.md rename to Blog/上有天堂、下有苏杭.md index 38da3662..7da8703c 100644 --- a/blog/上有天堂、下有苏杭.md +++ b/Blog/上有天堂、下有苏杭.md @@ -1,21 +1,23 @@ --- title: 上有天堂、下有苏杭 -description: 上有天堂、下有苏杭 +description: 文章描述了作者的杭州之旅,特别是参观了杭州的西湖和阿里巴巴总部园区。作者分享了自己拍摄的照片,包括西湖的风景、寺庙、雷峰塔、夜景,以及阿里巴巴园区的图片。文章充满了对杭州之美的赞美,以及对西湖景区管理的点赞。作者在最后也提到了自己买相机后拍摄的这些作品。 keywords: -- 杭州 -- 旅行 -tags: -- 旅游 + - 杭州 + - 西湖 + - 阿里巴巴 + - 摄影 + - 作品 +tags: + - 游记/杭州 + - 游记/西湖 + - 摄影/作品 authors: -- 7Wate + - 7Wate date: 2021-07-02 --- - 上上个月,五月二十日去了杭州,果不其然如诗所述:上有天堂、下有苏杭。时至今日,现代化的杭州更加让人着迷! - - ## 西湖 ![西湖划船](https://static.7wate.com/img/2021/07/02/ee1a97b5c41a3.jpg) @@ -58,8 +60,6 @@ date: 2021-07-02 🙃Hahhh ~ -写的及其敷衍 +写的及其敷衍 主要是分享一下,买完相机刚去杭州的时候拍的几幅摄影作品。 - - diff --git a/blog/不要在饿的时候吃螺蛳粉!.md b/Blog/不要在饿的时候吃螺蛳粉!.md similarity index 94% rename from blog/不要在饿的时候吃螺蛳粉!.md rename to Blog/不要在饿的时候吃螺蛳粉!.md index 3c99ba44..709b35b2 100644 --- a/blog/不要在饿的时候吃螺蛳粉!.md +++ b/Blog/不要在饿的时候吃螺蛳粉!.md @@ -1,15 +1,18 @@ --- title: 不要在饿的时候吃螺蛳粉! -description: 不要在饿的时候吃螺蛳粉! +description: 我对螺蛳粉的喜爱与体会。 keywords: -- 博客 -- 螺蛳粉 -tags: -- 美食 + - 螺蛳粉 + - 青春 + - 味蕾 + - 情绪 +tags: + - 美食/螺蛳粉 authors: -- 7Wate + - 7Wate date: 2022-08-27 --- + 螺蛳粉源于广西柳州,由柳州特有的米粉,加上酸笋、木耳、花生、油炸豆皮、黄花菜、青菜等配料及适度的酸辣味和煮淡水石螺的汤水调合而成,具有酸、辣、鲜、爽、烫的风味及酸笋的特殊气味。 第一次吃是高中参加市田径运动会,比赛结束后被队友带去吃的,从此便开始了螺狮粉的不归之路。自此螺蛳粉贯穿了我的青春,虽然臭是真的臭,但是好吃是真的好吃。 @@ -17,6 +20,7 @@ date: 2022-08-27 至于为什么不要在饿的时候吃螺蛳粉,我是因为饿的时候,饥不择食、吃到最后会很撑。全然只是为了吃,丝毫体会不到螺蛳粉的快乐。只有真正不饿的时候,想不起它时候。突然它的出现,产生出让你想要进去吃一份的欲望,那么这份螺蛳粉才是真真的好吃。 至此以后,每每再吃螺狮粉总会对比曾经的味蕾巅峰。这家的差点意思、这家的有点辣、妈的,酸醋呢?不好吃,还是去那家吧、这家是不是换老板了? + 说实话,螺狮粉的味道差异真的会有那么大么?我觉得不然,现代工业社会,我们从味蕾上几乎很难分辨出公牛、母牛肉。同样我们也很难分辨出螺蛳粉的味道差距,所以到底是什么在作怪。 当我很饿的时候,我几乎觉得螺狮粉都挺好吃的。不过,这种情况下、除了💩不好吃,其他都会很好吃。当我不开心的时候,再好吃的螺蛳粉也吃不到我的心里。当我没有钱的时候,理智告诉我,你去吃霸王餐会被摁到💩里,但是我的口水会流三里地…… diff --git a/blog/中国传统历法.md b/Blog/中国传统历法.md similarity index 83% rename from blog/中国传统历法.md rename to Blog/中国传统历法.md index e719e546..c46f9790 100644 --- a/blog/中国传统历法.md +++ b/Blog/中国传统历法.md @@ -1,13 +1,18 @@ --- title: 中国传统历法 -description: 中国传统历法 +description: 我国民间现行的两种历法——公历和农历,概述了它们的特点。公历为阳历,农历同时考虑了阴阳历法,是我国民间广泛使用的传统历法。文章还详细介绍了农历的阴历部分和阳历部分,以及农历闰月的确定方法。 keywords: -- 中国传统 -- 历法 -tags: -- 杂谈 + - 中国传统 + - 历法 + - 公历 + - 阳历 + - 农历 + - 节气 + - 闰月 +tags: + - 文化/民俗 authors: -- 7Wate + - 7Wate date: 2020-11-16 --- @@ -15,7 +20,7 @@ date: 2020-11-16 我国民间现施行的传统历法分为两种:**格里历(阳历)**、**农历**。 -格里历(拉丁语:Calendarium Gregorianum,又译国瑞历、额我略历、格列高利历、格里高利历、葛瑞格里历、格列高历,也称基督历[1]),是由意大利医生兼哲学家阿洛伊修斯·里利乌斯改革儒略历制定的历法,亦是一个被当今国际社会最广泛地使用的历法。公历是阳历的一种,于1912年在中国引进采用,因农历等中国传统历法是阴阳历,故公历在中文中又称**阳历、西历、新历、公历**。 +格里历(拉丁语:Calendarium Gregorianum,又译国瑞历、额我略历、格列高利历、格里高利历、葛瑞格里历、格列高历,也称基督历 [1]),是由意大利医生兼哲学家阿洛伊修斯·里利乌斯改革儒略历制定的历法,亦是一个被当今国际社会最广泛地使用的历法。公历是阳历的一种,于 1912 年在中国引进采用,因农历等中国传统历法是阴阳历,故公历在中文中又称**阳历、西历、新历、公历**。 农历,是现今东亚地区民间传统广泛使用的**阴阳合历**。古代相传为黄帝时代或者夏朝创制,又称黄历、夏历,中国以外的语言和地区普遍称为中国历。农历广泛应用于生日标记、各种民俗活动节日等,比如“年节”、“元宵节”、“端午节”、“中秋节”、“重阳节”等节庆活动,被视为中华文化象征。 @@ -27,7 +32,7 @@ date: 2020-11-16 ## 农历 -历法是记录时间的坐标系统,多数民族根据天象来确定历法。年,就是四季周期,即地球围绕太阳公转;月,就是月相盈亏周期,即月球围绕地球公转。准确测量回归年和朔望月之长度,会发现一年比十二个月多大约10.875日,即单个阴历或阳历无法同时满足年和月的准确周期。 +历法是记录时间的坐标系统,多数民族根据天象来确定历法。年,就是四季周期,即地球围绕太阳公转;月,就是月相盈亏周期,即月球围绕地球公转。准确测量回归年和朔望月之长度,会发现一年比十二个月多大约 10.875 日,即单个阴历或阳历无法同时满足年和月的准确周期。 通俗来说,月即为月亮对地球的一个完整的运动周期,大月 30 天,小月 29 天。一年 12 个月,那么一年的长度大概在 354 到 355 天之间。年即为地球对太阳的一个完整的运动周期,约为 365 天。故一年会比十二个月多大约 10 日。而农历罕有地同时考虑到太阳及月球运动,兼顾了年和月之准确周期,是为**阴阳合历**。 diff --git a/blog/为什么不推开那扇门?.md b/Blog/为什么不推开那扇门?.md similarity index 92% rename from blog/为什么不推开那扇门?.md rename to Blog/为什么不推开那扇门?.md index 68f850f4..f9ba7243 100644 --- a/blog/为什么不推开那扇门?.md +++ b/Blog/为什么不推开那扇门?.md @@ -1,13 +1,16 @@ --- title: 为什么不推开那扇门? -description: 为什么不推开那扇门? +description: 对生活中的观察和反思,以及对人性和社会现象的深刻思考。 keywords: -- 思考 -- 哲学 -tags: -- 感悟 + - 思考 + - 生活 + - 理解 + - 个体 + - 社会 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2023-02-23 --- @@ -25,6 +28,6 @@ date: 2023-02-23 下学踏入社会,求职工作,伴随着阅历的增加、智慧的充实。我开始变得越来越理解:每一个人所处的环境和社会阅历都不一样,认知也是大相径庭。我凭什么把一株小草变成参天大树?更甚至我凭什么让大树有花香?我就想吃一口苹果,你给我说葡萄多甜多甜,可我就想吃一口苹果。她可能已经很开心、快乐、幸福了,但是我对她说离开这个浪浪山,外面会更美好。 -楼梯拐角处的那一扇门,可能不仅仅是我觉得只有一扇门是开着的,或许哪一天我路过的时候也不会看两扇门是否同时开着。公司领导层对员工不尊重的决策和赤裸裸的剥削,只需拿 100 元便可以弄人性。对我来说,这是一种极致傻逼,但或许有一些人每月还清房贷本来就不剩多少钱,还可以多花100元来改善自己的生活。默默恨自己支援次数不是第一的人,或许存了一年钱就差这1000元买到心仪的相机。 +楼梯拐角处的那一扇门,可能不仅仅是我觉得只有一扇门是开着的,或许哪一天我路过的时候也不会看两扇门是否同时开着。公司领导层对员工不尊重的决策和赤裸裸的剥削,只需拿 100 元便可以弄人性。对我来说,这是一种极致傻逼,但或许有一些人每月还清房贷本来就不剩多少钱,还可以多花 100 元来改善自己的生活。默默恨自己支援次数不是第一的人,或许存了一年钱就差这 1000 元买到心仪的相机。 这世间万物终究是让花成花,让树成树。子非鱼,安知鱼之乐?但人啊,难得糊涂,更难得一世糊涂。 diff --git a/blog/习惯养成第一步.md b/Blog/习惯养成第一步.md similarity index 77% rename from blog/习惯养成第一步.md rename to Blog/习惯养成第一步.md index 918eb903..878d9c9d 100644 --- a/blog/习惯养成第一步.md +++ b/Blog/习惯养成第一步.md @@ -1,18 +1,20 @@ --- title: 习惯养成第一步 -description: 个人成长过程中的习惯养成和学习的方法论 +description: 对过去两个月践行早起、阅读、写作、运动、冥想、子弹笔记等生活习惯的简单复盘和对现有问题的解决方案提出的总结。 keywords: -- 成长 -- 习惯 -tags: -- 习惯 + - 习惯 + - 早期 + - 生活 +tags: + - 成长/个人 authors: -- 7Wate + - 7Wate date: 2022-10-08 --- + 最近践行早起、阅读、写作、运动、冥想、子弹笔记近两个月了,简单复盘并针对现有问题提出对应解决方案。 -### 早起 +## 早起 我所认为的早起并不是成功学所定义的早起,每日早上四点啊,五点啊,弱弱的感觉这种成功学大部分都有病…… @@ -20,7 +22,7 @@ date: 2022-10-08 这两个月总体来说,坚持得不错,相对于之前有较大的改善,不过还是偶尔会被外部原因所打乱作息。**下一阶段性目标:继续坚持,非必要不打破作息。** -### 阅读 +## 阅读 每周阅读一本书还是完全 ok 的,但是吸收归纳产出的话,一个月可能才会啃烂一本书,有些书真的需要细嚼慢咽,慢慢回味。 @@ -28,17 +30,17 @@ date: 2022-10-08 目前暂时停止了读书计划,因为前几本书的产出还未完成,所以打算再产出后再开始新书阅读。**下一阶段性目标:提高产出效率,保持阅读频率。** -### 写作 +## 写作 产出效率较低一直是我比较头疼的地方,也许是没有找到正确的方法论,感觉也是**写的太少想得太多**。不想写流水账感觉有点敷衍,未来还是需要不断尝试,寻找适合自己的方法。 -> 曾经完成过一次500日写作,如今又开始新一轮500日写作的人帮你总结道:写作开始的时间,并不是你准备、收集、思考、规划、大纲等等过程,写作开始的时间就是你开始写下第一个字的时间,然后继续下去。 -> +> 曾经完成过一次 500 日写作,如今又开始新一轮 500 日写作的人帮你总结道:写作开始的时间,并不是你准备、收集、思考、规划、大纲等等过程,写作开始的时间就是你开始写下第一个字的时间,然后继续下去。 +> > —— ONO 目前还是参考 [ONO](https://onojyun.com/) 的建议,但是先写在 wiki 上,然后每周甄选一篇博客发表,暂时就这样尝试。**下一阶段性目标:实现每周产出。** -### 运动 +## 运动 运动还是需要保持,在生活中留出一部分时间去运动、散步,然后继续坚持。不能这几天猛怼接下来几天偷懒,要把运动当成吃饭一样 ~ @@ -46,15 +48,15 @@ date: 2022-10-08 **下一阶段性目标:继续保持,争取早日养成运动习惯。** -### 冥想 +## 冥想 浅尝了一下,**这玩意真不是玄学,YYDS!!!** -### 子弹笔记 +## 子弹笔记 子弹笔记也可以理解为复盘总结,目前每日、每周、每季度都会进行工作生活的复盘。本来是一提起日记就会头痛的,但是结合自己的情况,尝试了多种方法,最终找到了适合自己的工具和方法。 -日志总结归纳在 wiki 上边了,可以[点击打开](https://wiki.7wate.com/journal)浏览。最重要的就是**每日任务、复盘、习惯养成**,有想法的朋友可以尝试一番。目前发现的几个问题是:任务完成效率不高、习惯养成容易被打破、子弹笔记容易中断。**首先必须肯定这两个月来的进步,但是仍然需要继续保持,直至习惯的养成。** +日志总结归纳在 wiki 上边了,可以 [点击打开](https://wiki.7wate.com/journal) 浏览。最重要的就是**每日任务、复盘、习惯养成**,有想法的朋友可以尝试一番。目前发现的几个问题是:任务完成效率不高、习惯养成容易被打破、子弹笔记容易中断。**首先必须肯定这两个月来的进步,但是仍然需要继续保持,直至习惯的养成。** 任务完成效率不高同时带有拖延,主要原因还是对任务难易的估量偏差过大。目前针对此情况的解决方法是:主线任务、支线任务、其他任务;主线任务是具有一定难度和时间成本的,但是无论如何必须完成;支线任务相对主线任务较简单的,所以最少完成一个;其他任务则是换脑子的,很容易就完成的,可以在疲惫的情况下换换脑子。 diff --git a/blog/人在囧途——青海湖.md b/Blog/人在囧途——青海湖.md similarity index 89% rename from blog/人在囧途——青海湖.md rename to Blog/人在囧途——青海湖.md index 065e85d0..e76a3a22 100644 --- a/blog/人在囧途——青海湖.md +++ b/Blog/人在囧途——青海湖.md @@ -1,20 +1,23 @@ --- title: 人在囧途——青海湖 -description: 人在囧途青海湖之旅 +description: 十一假期的第二天突发奇想,决定去青海湖旅行,带着三个成年人和三个小孩出发,经历了一段自由与热爱的旅程。他们一路上充满热情,虽然遇到了各种挑战和困难,但也有许多令人难忘的瞬间。然而,最后他们却因当地疫情防控政策的限制未能抵达青海湖,不得不原路折返。 keywords: -- 旅行 -- 青海湖 -tags: -- 旅游 + - 青海湖 + - 旅行 + - 疫情 + - 自由 + - 热爱 +tags: + - 游记/青海湖 authors: -- 7Wate + - 7Wate date: 2022-10-10 --- 一直以来对大西北都拥有莫名的向往,更是憧憬有朝一日漫步在青海湖。在十一假期的第二天晚上,去打球的路上莫名的想去青海湖。 > 叔、突然那么一瞬间,咱去青海湖吧? -> +> > 速度回电话,明天去! 就这样,第二天四个成年人加三个小孩出发了,来了一场自由与热爱的旅行…… @@ -48,11 +51,11 @@ date: 2022-10-10 ![风景照](https://static.7wate.com/img/2022/10/10/edd37d5113d39.jpg) > 我们这里暂时不让下高速,请你前往 XXX 高速口下高速! -> +> > 啊哈,疫情防控办发布的通告,符合规定允许下高速啊。 -> +> > 抱歉,我们这里禁止下高速,请你自行折返! -> +> > …… 我日哦,就是 TM 这么戏剧化;我们奔袭了 1700km,临近青海湖 15km,禁止下高速。 diff --git a/blog/人格类型测试.md b/Blog/人格类型测试.md similarity index 92% rename from blog/人格类型测试.md rename to Blog/人格类型测试.md index 01dae968..754346d4 100644 --- a/blog/人格类型测试.md +++ b/Blog/人格类型测试.md @@ -1,17 +1,19 @@ --- title: 人格类型测试 -description: 人格类型测试 +description: 本文探讨了“指挥官”人格类型,以及他们在领导和决策方面的特点。指挥官型的人天生具备领导才能,追求挑战,坚定决心,追求目标。 keywords: -- 人格类型 -- 测试 -tags: -- 日记 + - 人格类型 + - 指挥官 + - 领导 + - 决策 + - 挑战 +tags: + - 生活/随笔 authors: -- 7Wate + - 7Wate date: 2022-04-06 --- - 有看到很多人在做这个评测,我也闲来无事尝试了一下 ~ ![概述](https://static.7wate.com/img/2022/04/06/8fc8ef21a439f.png) @@ -19,7 +21,7 @@ date: 2022-04-06 ## “指挥官” 人格 > 你的时间是有限的,所以不要浪费它为别人而活。 不要陷入教条 — 活在其他人的思想成果之中。 不要让他人意见产生的噪音淹没你自己的心声。 最重要的是,要拥有追随你的内心和直觉的勇气。 他们已经知道你真正想成为什么。 其他所有都是次要的。 -> +> > STEVE JOBS 指挥官人格类型的人是天生的领导者。 这种人格类型的人天生具有魅力和信心,他们所散发的权威性能召集大家为着一个共同目标努力。 但与领导者人格类型有所不同的是,他们的性格中有着近乎残酷的理性,用强大的动力、坚定的决心和锋芒毕露的思想实现为自己制定的一切目标。 好在只有 3% 的人口具有这种人格类型,否则就会无情碾压那些剩下的大多数胆小又敏感的人格类型 — 但是对于许多我们习以为常的公司和机构,我们都要感谢他们的贡献。 @@ -32,7 +34,7 @@ date: 2022-04-06 在谈判桌上,无论是在公司环境下还是购买一辆汽车,“指挥官”们始终处于主导地位,毫不留情且锱铢必较。 这不是因为他们冷血无情或者是恶魔的化身,更重要的原因在于,指挥官人格类型的人天生喜欢挑战,喜欢斗智斗勇,拥有在这种环境下造就的智慧,如果对方难以招架,那就休怪“指挥官”让自己成为最后赢家的野心一览无遗。 -> 指挥官”脑子里想的是,“我才不在乎你是否把我看作一个冷漠无情的“*球”,只要我一直做个志在必得的“*球”就行。 +> 指挥官”脑子里想的是,“我才不在乎你是否把我看作一个冷漠无情的“* 球”,只要我一直做个志在必得的“* 球”就行。 如果问起指挥官会尊重什么,那就是能够在智力上与之比肩的人,行事的准确度和质量能够与之旗鼓相当的人。 指挥官人格类型的人在发现他人的才能方面可谓天赋异禀,这对他们的团队建设(因为即便一个人聪明绝顶,也不可能单打独斗就能成功)大有助益,也能让指挥官们有所收敛,无需时时展现自己的傲慢和屈尊态度。 但是他们也非常善于以令人发指的后知后觉唤起他人的失败感,而这也确实会让指挥官人格类型的人陷入麻烦当中。 diff --git a/blog/你愿意嫁给自己么?.md b/Blog/你愿意嫁给自己么?.md similarity index 97% rename from blog/你愿意嫁给自己么?.md rename to Blog/你愿意嫁给自己么?.md index 66d59262..83061881 100644 --- a/blog/你愿意嫁给自己么?.md +++ b/Blog/你愿意嫁给自己么?.md @@ -1,11 +1,14 @@ --- title: 你愿意嫁给自己么 -description: 你愿意嫁给自己么 +description: 关于自己成长和经历的回顾,以及对人生、家庭、感情和自我认知的深思熟虑。 keywords: - - 感情 + - 成长 + - 家庭 + - 早恋 - 认知 + - 执念 tags: - - 日记 + - 生活/感悟 authors: - 7Wate date: 2023-10-24 diff --git a/blog/你还记得曾经的梦想么?.md b/Blog/你还记得曾经的梦想么?.md similarity index 69% rename from blog/你还记得曾经的梦想么?.md rename to Blog/你还记得曾经的梦想么?.md index 79b52bf2..1a4bf317 100644 --- a/blog/你还记得曾经的梦想么?.md +++ b/Blog/你还记得曾经的梦想么?.md @@ -1,17 +1,16 @@ --- title: 你还记得曾经的梦想么? -description: 你还记得曾经的梦想么? +description: 看到了一篇博客,有一段视频,也算是广告很有意味。 keywords: -- B站 -- 梦想 -tags: -- 感悟 + - B站 + - 梦想 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-03-24 --- - 看到了一篇博客,有一段视频,也算是广告很有意味。然后想顺带测试一下博客的 Bilibili 视频功能,再水一篇哈哈哈 [bilibili:53239786,1,1] diff --git a/blog/使用 Docusaurus 搭建优秀个人wiki.md b/Blog/使用 Docusaurus 搭建优秀个人wiki.md similarity index 92% rename from blog/使用 Docusaurus 搭建优秀个人wiki.md rename to Blog/使用 Docusaurus 搭建优秀个人wiki.md index 6568fb93..8a2241a3 100644 --- a/blog/使用 Docusaurus 搭建优秀个人wiki.md +++ b/Blog/使用 Docusaurus 搭建优秀个人wiki.md @@ -1,13 +1,16 @@ --- title: 使用 Docusaurus 搭建优秀个人wiki -description: 使用 Docusaurus 搭建优秀个人wiki +description: Docusaurus 一个静态站点生成器,以及如何安装、初始化、配置和部署Docusaurus项目。作者还分享了使用Algolia DocSearch搜索的经验和步骤。 keywords: -- Docusaurus -- wiki -tags: -- 博客 + - Docusaurus + - 静态站点生成器 + - 安装 + - 配置 + - 部署 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-07-27 --- @@ -65,16 +68,16 @@ my-website └── yarn.lock ``` -- `/blog/`:包含博客的 Markdown 文件。 +- `/blog/`:包含博客的 Markdown 文件。 - `/docs/`:包含文档的 Markdown 文件。 - `/src/`:如页面或自定义 React 组件一类的非文档文件。 - - `/src/pages` - 所有放在此目录中的 JSX/TSX/MDX 文件都会被转换成网站页面。 - -- `/static/` - 静态目录。 + - `/src/pages` - 所有放在此目录中的 JSX/TSX/MDX 文件都会被转换成网站页面。 -- `/docusaurus.config.js` - 站点配置文件。 +- `/static/` - 静态目录。 + +- `/docusaurus.config.js` - 站点配置文件。 - `/package.json` - Docusaurus 网站是一个 React 应用。 你可以安装并使用任何 npm 包。 @@ -91,8 +94,6 @@ npm run start ![站点首页](https://static.7wate.com/img/2022/07/27/13c9cd02b370f.png) - - ### 项目构建 ```shell @@ -146,7 +147,7 @@ i18n: { ![免费计划](https://static.7wate.com/img/2022/07/27/4b2daf39e8a1f.png) -### 获取 API keys +### 获取 API Keys 控制台打开设置页面,点击 API keys,拷贝 **Application ID、Search-Only API Key、Admin API Key**。 @@ -154,7 +155,7 @@ i18n: { ![Key 页面](https://static.7wate.com/img/2022/07/27/6f7717de46944.png) -### 配置 docusaurus +### 配置 Docusaurus 打开项目配置文件 docusaurus.config.js,填写如下配置: @@ -188,7 +189,7 @@ APPLICATION_ID=Application ID API_KEY=Admin API Key ``` -2. 新建 docsearch.json(爬虫配置文件) +1. 新建 docsearch.json(爬虫配置文件) ```json { @@ -244,7 +245,7 @@ API_KEY=Admin API Key } ``` -3. 运行 Docker +1. 运行 Docker ```shell docker run -it --env-file=.env -e "CONFIG=$(cat docsearch.json | jq -r tostring)" algolia/docsearch-scraper @@ -261,4 +262,3 @@ docker run -it --env-file=.env -e "CONFIG=$(cat docsearch.json | jq -r tostring) 因为被 Docusaurus 官方 Showcase 收录了,所以产出一篇文章推广一下 ~ 更多优秀 Docusaurus 站点请访问:[展示站点](https://docusaurus.io/showcase?tags=personal) - diff --git a/blog/关于感情的事情.md b/Blog/关于感情的事情.md similarity index 91% rename from blog/关于感情的事情.md rename to Blog/关于感情的事情.md index 0778bd4e..7a8476a9 100644 --- a/blog/关于感情的事情.md +++ b/Blog/关于感情的事情.md @@ -1,70 +1,73 @@ --- title: 关于感情的事情 -description: 关于感情的事情 +description: 听到董宇辉谈初恋和朋友的两段感情经历,让我思考感情需要在物质基础上建立精神富足。要珍惜当下,善始善终,处理好旧感情再开始新感情。爱自己,爱他人,相信终将拥有幸福生活。 keywords: -- 感情 -tags: -- 日记 + - 初恋感悟 + - 朋友感情 + - 物质基础 + - 精神富足 + - 善始善终 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-06-23 --- - 抖音最近新东方甄选流量火爆,被动接收了这份热点。其中也真的被董宇辉聊到初恋时的这段话触动了…… > 当时我一直觉得肯定是因为我没有钱,才给两个人平添了那么多的痛苦。其实我后来觉得不一定、不一定,可能那刻我既没有钱,也没有其他的东西。 -> +> > 那时候我也没有丰富的思想,也没有深刻的智慧,也没有跟别人交流时候体现出一种让人舒服的态度,什么都没有。 -> +> > 现在我再看自己当时就像一个摆烂的青年一样,什么都没有。却要求这世界一如既往的包容我,却要求身边的人照单接受地去接纳我。 -> +> > 只要他们不愿意,我就说是他们不好。 -> +> > 指责多容易呀,我们都喜欢做容易地事情,就是职责别人,对吧? -> +> > 现在觉得其实可能当时并不是因为我没钱,因为好多年后你还是没钱,所以可能跟钱地关系不大。 -> +> > 你即给不了生活上的安全感,其实很多时候你也给不了精神上的陪伴。你不够有吸引力、你没有什么美丽;坦诚来说,因为你读了足够多的爱情故事,所以你就会发现其实幸福的爱情里头,金钱不是最重要的。它可以是因素之一,但它不是唯一。它是之一,它不是唯一。 -> +> > 我们都喜欢一个非常健全完美的人,不能把爱情等于金钱,所以后来我就懂了…… 还有最近我接触到身边朋友的两个故事,关于感情的,大致如下: > 朋友 A -> +> > 背景:A 年少辍学跟随父亲多年打拼,又恰逢家里拆迁,随后父母包办婚姻,孕育两子,A 的妻子主职家庭夫妇,其姐姐曾多次再婚。 -> +> > 离婚原因不清楚,婚姻期间家庭矛盾不断。听来 A 说来得知主要原因是妻子太过悠闲,加上其姐姐的影响。在一次争吵下,一气之下签了离婚合同。 -> +> > 合同内容大致如下:A 获得儿子抚养权,女方获得女儿抚养权。A 一次性赋予 18.8w 抚养费 + 108 平房产,并由女方承担所有抚养权,无探视无任何联系(合同暂未履行)。 -> +> > 当时 A 以为是开玩笑了,觉得还会复合再加上法盲,觉得无所谓……女方因为其姐姐“经验丰富”所以可以理解为有备而来。 -> +> > --- -> +> > A 离婚后一个月认识现任妻子(无婚姻历史)并怀孕,期间曾想过打掉,但是女方坚持留下。 -> +> > --- -> +> > A 被前妻起诉,期间没能藏住被现任妻子发现。现任妻随有想法打掉孩子,但是客观原因无法打掉。A 的离婚官司被法院要求一个月内履行,A 无可奈何。现任妻子家人也是拒绝接受 A …… -> +> > A 一直很苦闷,后来也未去了解更多。 分享这个故事不是背后讨论朋友的选择,只是坚定的认为,感情上的事情务必一定善始善终,处理好自己,干干净净的去迎接下一份感情。 > 朋友 B -> +> > 背景:酒局上认识朋友的朋友,无过多了解,单方面倾听得来的。 -> +> > B 和妻子从男女朋友开始就比较坎坷,双方出身都挺贫困,后努力努力再努力终于走进婚姻的殿堂。 -> +> > 由于物质基础并不好,B 极度的想要给妻子更好的生活,期间尝试创业和不断换工作。但是生活依旧不如所愿,将生活推向了更低谷。 -> +> > B 和妻子面对这生活的不如意,就如一句话:夫妻本是同林鸟、大难临头各自飞。随后 B 和妻子争夺孩子抚养权,打了 3 年官司,都已经麻木了…… -> +> > B 说:我努力为了这个家,是为了追求我想要的生活,她陪着我奋斗也是为了想要的生活。但是生活越过越不如意,人总不能在一颗树上吊死呀。 -> +> > 但是我生活已经破灭了,活着感受不到希望,只剩下眼前的这两个孩子。也许真是贫贱夫妻百事衰…… 当代大家都有追求幸福生活的方式,你不能祈求的另一半陪你一起奋斗,就如你不能否定女方要车子、要房子是不对的。没有物质基础的感情就是一盘散沙,柴米油盐酱醋茶更会抹去鲜花的浪漫。 diff --git a/blog/关于花.md b/Blog/关于花.md similarity index 83% rename from blog/关于花.md rename to Blog/关于花.md index 0b56cb87..f7da2334 100644 --- a/blog/关于花.md +++ b/Blog/关于花.md @@ -1,16 +1,18 @@ --- title: 关于花 -description: 关于花 +description: 周末闲来无事去花卉市场逛了一圈,买了月季桂、文竹、小饰件等植物回家。花费不多,过程中吃了烤肠冰淇淋,开心。回家后把新买的植物摆设好了,特别喜欢餐桌上的干花。 keywords: -- 花 -tags: -- 花园 + - 花卉市场 + - 月季桂 + - 文竹 + - 小装饰 +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2022-03-05 --- - 春天来了,在万物复苏的季节,空气中到处弥漫着荷尔蒙的气息!跑偏了跑偏了哈哈哈 ~ 春天来了,种些花花草草也是甚好。周末闲来无事,便去花卉市场闲逛乱吃哈哈 ## 乱逛 diff --git a/blog/关于郑州的互联网记忆.md b/Blog/关于郑州的互联网记忆.md similarity index 65% rename from blog/关于郑州的互联网记忆.md rename to Blog/关于郑州的互联网记忆.md index d6001e40..c50ada28 100644 --- a/blog/关于郑州的互联网记忆.md +++ b/Blog/关于郑州的互联网记忆.md @@ -1,13 +1,15 @@ --- title: 关于郑州的互联网记忆 -description: 关于郑州的互联网记忆 +description: 简单记录了郑州这几年发生的一些重大事件,包括洪水、烂尾楼、120事件、村镇银行危机、富士康事件、疫情管控、大雾引发交通事故等,这些事件多少展现出郑州发展过程中的一些问题。但不作过多评论,郑州仍在艰难前行。 keywords: -- 郑州 -- 互联网记忆 -tags: -- 日记 + - 郑州 + - 洪水 + - 烂尾楼 + - 疫情 +tags: + - 记忆/郑州 authors: -- 7Wate + - 7Wate date: 2022-12-29 --- @@ -51,4 +53,4 @@ date: 2022-12-29 ## 郑州大雾 -- 黄河大桥 400 车相撞 \ No newline at end of file +- 黄河大桥 400 车相撞 diff --git a/blog/再游嵩山.md b/Blog/再游嵩山.md similarity index 89% rename from blog/再游嵩山.md rename to Blog/再游嵩山.md index 7d979fc1..76f90e37 100644 --- a/blog/再游嵩山.md +++ b/Blog/再游嵩山.md @@ -1,13 +1,19 @@ --- title: 再游嵩山 -description: 再游嵩山 +description: 我再次爬嵩山的游记。本不想去,但为了积累拍银河的经验还是去了。中午开始登山,装备很多也很重。遇到一个活泼的小女孩,让过程很开心。到山顶吃饭看日落,帐篷太小睡得不舒服。凌晨看到了银河,虽然不太清晰,还遇到了流星。我坐着回忆往事,看日出后就下山了。这次虽然辛苦,但过程是开心的,留下了许多回忆。 keywords: -- 嵩山 -- 游记 -tags: -- 旅游 + - 嵩山 + - 露营 + - 小女孩 + - 日落 + - 银河 + - 流星 + - 回忆 +tags: + - 游记/嵩山 + - 摄影/作品 authors: -- 7Wate + - 7Wate date: 2022-03-17 --- @@ -19,7 +25,7 @@ date: 2022-03-17 前阵子天天吹泡泡,今天拍星轨明天拍银河,却始终停留在嘴上哈哈。周三的时候,一看天气还不错(其实天气很差),然后拍板这周说啥也得去嵩山露营。 -### 为啥子去爬嵩山 +## 为啥子去爬嵩山 我们的目标是为了四、五月份的银河季做准备;主要想法还是提前积累经验,免得到银河季了搞个措手不及什么也没拍到;最后定的方向是决定中午登山,主要拍日落,银河,日出。 @@ -27,7 +33,7 @@ date: 2022-03-17 主要还是前半夜给我冻的,帐篷尺寸还虚标,我根本就伸不开腿,无良商家,请原地升天!!! -### 过程是美好的 +## 过程是美好的 就这,前半夜还给我激动的睡不着,其实我也真的不知道为啥睡不着哈哈。 @@ -46,13 +52,13 @@ date: 2022-03-17 从 12 点爬到 4 点才接近登顶,马上登顶的时候支起了凳子让小女孩休息了一会。小女孩一路上都在激励(要是我理解,这就是吐槽哈哈哈)我朋友,给他累的呀。小女孩还时不时的帮忙提东西,边爬边说: > 叔叔,你快点呗 ~ -> +> > 叔叔,你不行呀 ~ -> +> > 走,咱俩不管他了 -> +> > 那个叔叔已经丢了 -> +> > 走走走,不要他了 哈哈哈,甚是欢乐 ~ @@ -60,7 +66,7 @@ date: 2022-03-17 只记得小女孩妈妈吐槽说: > 唉,迟早被拐走。 -> +> > 女儿,你怎么不帮妈妈拿东西呀 说起来也是,就刚认识,小女孩便对我们如此之放心与信任。**世界上最可爱的果然是人类幼崽** @@ -69,7 +75,7 @@ date: 2022-03-17 ![合照](https://static.7wate.com/img/2022/03/17/9287cb3dde7f6.jpg) -### 现实是残酷的 +## 现实是残酷的 小女孩很想和我们一块看银河、云海,并且想和我们一块露营。可是实际情况并不允许,最后恋恋不舍的帮我们支起帐篷便下山了。不过最后答应拍到的照片分享给她 ~ @@ -89,7 +95,7 @@ date: 2022-03-17 还不如不睡,睡的巨 TM 痛苦。主要前半夜又下雨了,没有带睡袋,就很冷。然后帐篷尺寸还虚表,我只能蜷缩着腿,完全是在受罪!😭 -### 念念不忘的银河 +## 念念不忘的银河 一点多都睡不着了,便想着起来坐坐。天气预报显示有雨,云层高度也是近万米,所以期望并不高。 @@ -109,7 +115,7 @@ date: 2022-03-17 **一直心心念念能和爱人拥在银河下,看一场流星雨 ~** -### 回首往事 +## 回首往事 后半夜也睡不着,自己就坐在椅子上,葛优躺仰望星空。 @@ -119,7 +125,7 @@ date: 2022-03-17 ***五年,你知道我这五年怎么过的么?你挑的嘛偶像*** -### 下山回家 +## 下山回家 日落和日出太拉跨了,云海也一般般…… diff --git a/blog/写十万字的博客是一种什么感觉.md b/Blog/写十万字的博客是一种什么感觉.md similarity index 66% rename from blog/写十万字的博客是一种什么感觉.md rename to Blog/写十万字的博客是一种什么感觉.md index cc3485e7..fe02978e 100644 --- a/blog/写十万字的博客是一种什么感觉.md +++ b/Blog/写十万字的博客是一种什么感觉.md @@ -1,21 +1,23 @@ --- title: 写十万字的博客是一种什么感觉 -description: 写十万字的博客是一种什么感觉 +description: 自己在求学期间不喜欢写文章,现在经营博客都写了十万字,是出乎意料的。我希望在这一生中能突破百万字大关。 keywords: -- 博客 -- 十万字 -tags: -- 博客 + - 博客 + - 十万字 + - 感慨 + - 突破 + - 成就 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2022-05-17 --- - 年初的时候就粗略统计了一下,快要突破十万字了。还想着十万字的时候浪漫一下子 ~ 但是现在也没有太大的感觉。在我求学期间我很烦写文章的,基本就是最低分和极少数情况下的近满分,想不到运营博客这第五个年头也是破十万字了。 ![统计图](https://static.7wate.com/img/2022/04/06/cbadd50b31ddc.png) 统计可能有出入吧,但是因为一些事自己也删了好多文章。十万字是一定有的! -希望在投胎之前突破一百万字哈哈哈 \ No newline at end of file +希望在投胎之前突破一百万字哈哈哈 diff --git a/blog/写博客的正确姿势 - 先行版.md b/Blog/写博客的正确姿势 - 先行版.md similarity index 80% rename from blog/写博客的正确姿势 - 先行版.md rename to Blog/写博客的正确姿势 - 先行版.md index 4b09df22..7947b1bc 100644 --- a/blog/写博客的正确姿势 - 先行版.md +++ b/Blog/写博客的正确姿势 - 先行版.md @@ -1,12 +1,15 @@ --- title: 写博客的正确姿势 - 先行版 -description: 写博客的正确姿势 - 先行版 +description: 回顾了我博客的历程和一些长期存在的写作难题,如需要坐在电脑前才能写作、灵感难以保存、不想在周末打开电脑写文章等。作者表示正在研究解决这些问题的方法,并提到了草稿箱中一些待写的主题。 keywords: -- 博客 -tags: -- 博客 + - 博客 + - 写作难题 + - 灵感 + - 草稿箱 +tags: + - 写作/技巧 authors: -- 7Wate + - 7Wate date: 2022-08-25 --- @@ -43,4 +46,4 @@ date: 2022-08-25 现在是只记得题目了,少部分还记得灵感,也不是输出这些文章对我来说很难,就是单纯姿势不对。 -日后慢慢补上把,毕竟来日方长! \ No newline at end of file +日后慢慢补上把,毕竟来日方长! diff --git a/blog/写博客的正确姿势 - 测试版.md b/Blog/写博客的正确姿势 - 测试版.md similarity index 90% rename from blog/写博客的正确姿势 - 测试版.md rename to Blog/写博客的正确姿势 - 测试版.md index ef4f8d8a..1d7c9d00 100644 --- a/blog/写博客的正确姿势 - 测试版.md +++ b/Blog/写博客的正确姿势 - 测试版.md @@ -1,12 +1,14 @@ --- title: 写博客的正确姿势 - 测试版 -description: 7Wate 写博客的姿势 - 测试版 +description: 关于博客、技术类博客以及日志记录的详细信息,以及他采用的工具和流程,包括Obsidian、Docusaurus、Git等,以提高写作效率和博客管理。 keywords: -- 博客 -tags: -- 博客 + - 博客 + - 日志 + - 生产力 +tags: + - 写作/技巧 authors: -- 7Wate + - 7Wate date: 2022-08-25 --- @@ -14,7 +16,7 @@ date: 2022-08-25 我平时不仅仅写文章,还会写技术类博客。但是我一般不会把技术类博客放在 blog 上,因为我觉得如果什么都往博客上放的话,过于混乱而且也不是我的风格,所以我只在 blog 上写日常文章,在 wiki 上写综合体。 -## 关于 blog +## 关于 Blog blog 是我最早的出发点,也是我与互联网上的博友最紧密的联系点。因为我热爱它,所以更不想去折腾来蒸腾去让它满足我各种奇奇怪怪的要求。 @@ -25,7 +27,7 @@ blog 目前采用 halo 搭建,跑在了 docker 上,现在主要负责日常 摄影和日志页面已经停滞好久了,疫情原因今年没咋出去拍照片,日志则用了另一种方式故弃用。 -## 关于 wiki +## 关于 Wiki 因为工作原因,学习原因,所以我平时需要涉及技术方面,要学习新技术,涉猎新知识,写到本本上又不方便检索,放在第三方平台上又不放心,而且没有办法 web 展示和交流。 @@ -49,17 +51,17 @@ blog 目前采用 halo 搭建,跑在了 docker 上,现在主要负责日常 - 日历 + 任务:目前工作、学习中的规划以及代办都基于这两个实现,贼好用哦 ~ - 新闻:Rss 阅读器。基于我又自建了 RssHub,同时又是 RssHub 贡献者,所以想看什么自己写个爬虫就好,不会有任何的广告啊,乱七八糟的,是目前 90% 以上的信息来源。 -虽然这套生产力工作目前被我打磨的得心应手,但是每日复盘及工作记录有点不爽。关于每日复盘和工作记录,我就想咋简单咋来,也不想草草两句话就发在博客上。直至看到了**可爱的 DIYgod**的[《基于 Obsidian 的生活记录系统》](https://diygod.me/obsidian/),瞬间来了灵感。 +虽然这套生产力工作目前被我打磨的得心应手,但是每日复盘及工作记录有点不爽。关于每日复盘和工作记录,我就想咋简单咋来,也不想草草两句话就发在博客上。直至看到了**可爱的 DIYgod**的 [《基于 Obsidian 的生活记录系统》](https://diygod.me/obsidian/),瞬间来了灵感。 ## 我是怎么解决这些痛点的 还记得上篇我说的那些痛点么? ->- 每次必须要正襟危坐地坐在电脑前才可以输出。 ->- 偶尔闪现的灵感纵使通过笔记软件记下后来也是只记得这个灵感的名字了。 ->- 周末了,我更是不想打开电脑,再打开 Typora 写文章。 ->- 如果因为一些事情,我没有办法使用电脑,那完了更不用提了。 ->- 虽然我是运维,但是我不喜欢博客宕机…… +> - 每次必须要正襟危坐地坐在电脑前才可以输出。 +> - 偶尔闪现的灵感纵使通过笔记软件记下后来也是只记得这个灵感的名字了。 +> - 周末了,我更是不想打开电脑,再打开 Typora 写文章。 +> - 如果因为一些事情,我没有办法使用电脑,那完了更不用提了。 +> - 虽然我是运维,但是我不喜欢博客宕机…… 再加上刚才所描述的痛点 @@ -114,7 +116,7 @@ Obsidian + Docusaurus 已经决定 wiki 只能采用静态网页方式实现的 ![博客](https://static.7wate.com/img/2022/08/25/bb6c78b4a7488.png) -### 6.想保持 blog 和 wiki 各自的独立性 +### 6.想保持 Blog 和 Wiki 各自的独立性 因为 wiki 承载着我所有的知识笔记、文章、日志记录,所以我就可以像挑衣服一样选择写好的文章,记录好的日志,稍加修改就可以输出到 blog。 diff --git a/blog/写博客的正确姿势.md b/Blog/写博客的正确姿势.md similarity index 92% rename from blog/写博客的正确姿势.md rename to Blog/写博客的正确姿势.md index cc314cad..a99e9eeb 100644 --- a/blog/写博客的正确姿势.md +++ b/Blog/写博客的正确姿势.md @@ -1,13 +1,15 @@ --- title: 写博客的正确姿势 -description: 写博客的正确姿势正式版 +description: 关于写作的正确姿势以及如何将写作融入生活的经验和见解。他强调了从点、线、面获取信息源的重要性,并介绍了如何整理碎片化知识,收集线性信息源,以及如何处理大量的线性信息。 keywords: -- 博客 -- 写作 -tags: -- 数字文具盒 + - 写作 + - 信息源 + - 工作流 + - 经验分享 +tags: + - 写作/技巧 authors: -- 7Wate + - 7Wate date: 2023-07-14 --- @@ -62,3 +64,7 @@ date: 2023-07-14 在博客的第六年,我也浅浅地定下一个小目标:**每个月最少写 6 篇文章,总字数不少于 1 万字。**可是,说到底写作最后又能有什么意义呢?我也不知道。可能如同生命一般,没有任何意义。 可当下我就是想说,想写。毕竟高度够了,看什么都是风景。 + +[[blog/写博客的正确姿势 - 测试版|写博客的正确姿势 - 测试版]] + +[[blog/写博客的正确姿势 - 先行版|写博客的正确姿势 - 先行版]] diff --git a/blog/初号机,起飞!.md b/Blog/初号机,起飞!.md similarity index 83% rename from blog/初号机,起飞!.md rename to Blog/初号机,起飞!.md index 5ff33199..1aa4574e 100644 --- a/blog/初号机,起飞!.md +++ b/Blog/初号机,起飞!.md @@ -1,12 +1,15 @@ --- title: 初号机,起飞! -description: 初号机,起飞! +description: 从初中时代拥有第一台电脑开始,到现在已经组装过多台电脑的成长故事。 keywords: -- 电脑 -tags: -- 硬件 + - 电脑 + - 海尔 + - 成长 + - 青春 +tags: + - 记忆/童年 authors: -- 7Wate + - 7Wate date: 2020-06-12 --- @@ -26,13 +29,13 @@ date: 2020-06-12 第一个网名:叮当、想必大家和我一样干着同样的事情,添加好友、发说说、写日志、装饰空间。 -当然还有那个年代不可缺少的东西,QQ农场。现在已经鲜有人玩了,毕竟这已经是十年前的东西。 +当然还有那个年代不可缺少的东西,QQ 农场。现在已经鲜有人玩了,毕竟这已经是十年前的东西。 ![QQ 农场](https://static.7wate.com/img/2020/06/12/30c0929d3a88c.jpg) ![QQ 牧场](https://static.7wate.com/img/2020/06/12/992c7fd0c88b5.png) -除了这些还有抢车位、Q宠大乐斗、QQ牧场、胡莱三国、你画我猜、QQ宠物,以及 4399、7K7K、1399。如果全部说完怕是整篇都是游戏了哈哈,那时它包揽了我和小伙伴们全部的欢乐。 +除了这些还有抢车位、Q 宠大乐斗、QQ 牧场、胡莱三国、你画我猜、QQ 宠物,以及 4399、7K7K、1399。如果全部说完怕是整篇都是游戏了哈哈,那时它包揽了我和小伙伴们全部的欢乐。 ### 把玩初号机 @@ -59,7 +62,7 @@ CPU:Intel Xeon E3-1230 v3 > 错过往往可能都是为了更好的相遇! -### i3 8100 +### I3 8100 步入大学后,虽然已经有了一台笔记本,但还是更想自己组装一台台式电脑。经过几个月的攒钱、筹备、观察价格、网购,终于全部到货。准备装机了! @@ -88,7 +91,7 @@ CPU:Intel i3 8100 2017 年 AMD Ryzen 横空出世,瞬间 AMD 真香,AMD Yes!我当时配第一台电脑得时候就很想配 AMD 的电脑,奈何荷包不足。只能 i3 8100 将就一下了,后来因特尔鬼才营销,将 i3 8100 推到 800 元以上。然后我就把 CPU 主板卖了,还小赚了一笔。 -锐龙一代存在一些小东小西的问题,以及二代的推出,导致后来价格迅速跌落至900元左右。是的,没错!八核十六线程主频 3.0 还可以超频,想啥呢?赶紧上车! +锐龙一代存在一些小东小西的问题,以及二代的推出,导致后来价格迅速跌落至 900 元左右。是的,没错!八核十六线程主频 3.0 还可以超频,想啥呢?赶紧上车! ``` 配置清单: @@ -111,11 +114,12 @@ CPU:AMD Ryzen 1700 ## 初号机,起飞 -写这篇博客的时候,我和我姐的 QQ 好友已经3630天了,也算十年了。零零散散的十年,同时即将迎来全新的十年。 +写这篇博客的时候,我和我姐的 QQ 好友已经 3630 天了,也算十年了。零零散散的十年,同时即将迎来全新的十年。 > Sometimes all we can do is turn the page ...... Let it go. --- 图片 -本文图一来自海尔官网、图二来自QQ农场、图三来自洛克王国 + +本文图一来自海尔官网、图二来自 QQ 农场、图三来自洛克王国 diff --git a/blog/原点.md b/Blog/原点.md similarity index 95% rename from blog/原点.md rename to Blog/原点.md index b0b6c95f..e4d3b493 100644 --- a/blog/原点.md +++ b/Blog/原点.md @@ -1,57 +1,84 @@ --- title: 原点 -description: 原点 +description: 我对过去一年在工作、爱好、生活、感情、家庭等方面的回顾和感悟。 keywords: -- 原点 -- 日记 -tags: -- 日记 + - 工作 + - 爱好 + - 生活 + - 感情 + - 成长 + - 感悟 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-02-02 --- - 记录一下自己的状态,也发发牢骚…… ## 工作 2021 年 3 月 5 日是我拥有第一份很正式的工作,很幸运也很开心呀。一路走过来不容易 ~ + 当时找到这份工作真得激动的要哭了……离家超级近,仅 10 分钟的路程。而且公司很正规:五天八小时、双休、法定节假日年假、从不加班! + 薪资的话平均每个月到手 3500 左右,年末刚谈了绩效🤩,新的一年到手应该是 4000 左右。加班双倍工资可以摸到 4500 的屁股了。正常满勤是 14 薪,上半年请了好多好多的假期,所以今年 13 薪😭。公司管吃管住省了好多好多好多😛 + 过完假期有很多新项目会上线,应该会忙一阵子,不过平时是真得很划水 ~ + 唯一的缺点就是没有发展潜力,部门的老同事很多,大家都是一个萝卜一个坑,很少很少裁员,所以就需要熬 si 同事才有晋升机会。😫 + 新的一年好好工作,努力学习! ## 爱好 今年新增了两个爱好:摄影和钢琴,摄影是一直都在拍拍拍,钢琴倒是学习的少。不过好喜欢钢琴曲,超级解压! + 今年趁周末好好把郑州转转,再学习学习 PR、PS 尝试一下自媒体。 + 趁年轻多做加法,搞不动了再说! ## 生活 感觉跟自己的朋友,特别是结完婚成家立业的朋友似乎是越来越远了…… + 没有办法呀,人家孩子都多大了,自己还在这挂着嘞…… + 就感觉大家已经不是在一个圈子里了,而且产生了一次最奇葩的矛盾更颠覆了我的认知…… + 事情是这样的: + 朋友 A 喊我吃饭,朋友 B 去了,C 是后来去的。我和 A、B 的关系比较好,然后呢 B 平时经常找我买药(我在医药行业工作,买药比较实惠)。我就聊起来说:可以尝试刷社保并买一些小额度的保险,这样下来一年也能省不少钱,你也不用那么累了。B 说不太懂,我就深入讲了几句。 + C 这时候听着感觉不爽,说大过年提这丧气的事情。然后呢,我听出来他的意思了。我也想我表达方式可能有问题,毕竟大家都不想生病。我赔了不是,说没注意场合很抱歉哈。 + 然后呢,C 蹬鼻子上脸,我也没啥说的了,丢下一句话:兄弟实在是佩服。便走了…… + 事后 A、B 并不觉得 C 很过分,只是说 C 喝了酒别往心里去。我也知道我说话方式可能不妥,大家并接受不了这样的方式。 + 我的出发点在于 B 是从事体力劳动,无五险一金和商业保险,平时医药支出也大,我作为好朋友想替他省点钱。大家觉得我可能在丧人家的气,然后我就觉得大家好像已经不是一个圈子的人了…… + 事后我也反思了一下,我说话场合不太合适,但是我出发点没错,不过以后还是尽量少说点…… ## 感情 客观的来说,我不是在恋爱就是在恋爱的路上…… + 以前也是好不懂事,总是很喜欢恋爱带来的热闹感,呵护感和安全感。也不知道自己究竟为什么这样,而且每一段感情都很不愉快…… + 认真的来说,我想结婚、想成家似乎都是因为小时候家里的琐碎带来的阴影,自己也不知道如何正确的处理和消化。企图通过恋爱来修复这块伤痕,所以就超级想成家结婚,似乎结婚就可以解决这所有的问题。 + 然而呢,并不是这样的,稚嫩的时候无法正确的认知和辨别事务的对错,还带着些许的迷信,偏执,自以为是。 + 没有领路人没有伯乐,似乎就在这条路上错的越来越远了。 + 上一次很痛的恋爱后,家里的催婚各个方面又开始了一段新的感情。似乎问题解决了,似乎也在重蹈覆辙。现如今这段感情也到此结束了,今年确确实实成长成熟了很多,由内而外的成长。也能去看清事物本质,结合客观实际去做选择。 + 现在对我来说,稳定的工作、稳定的生活、稳定的情绪都是非常重要的!而且是及其重要的,虽然还带着些历史包袱。但是质变需要一个过程,最后也会带来一个结果。 + 去年一年都在努力向前看,今年依旧要努力向前看。 + 过去的很多事情都无法弥补,有时候也会困扰着我。再次真诚的希望,伤害过我的和我伤害过的人,大家都可以过的很好,越来越好。 ## 父母 diff --git a/blog/吉普赛满天星.md b/Blog/吉普赛满天星.md similarity index 77% rename from blog/吉普赛满天星.md rename to Blog/吉普赛满天星.md index 9dec4760..ebd736f5 100644 --- a/blog/吉普赛满天星.md +++ b/Blog/吉普赛满天星.md @@ -1,56 +1,63 @@ --- title: 吉普赛满天星 -description: 吉普赛满天星 +description: 一篇记录2020年7月种植吉普赛满天星的成长日记。 keywords: -- 吉普赛满天星 -- 花园 -tags: -- 花园 + - 吉普赛满天星 + - 成长日记 + - 快乐 +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2020-09-07 --- - 谨以记录 2020 年 7 月 21 日栽种的吉普赛满天星(于 2020 年 11 月 2 日暂停记录)。 -## 9 月 2 日 周三 多云 +## 9 月 2 日 周三 多云 铛铛铛、我又来了。Come On! + ![新生命](https://static.7wate.com/img/2020/09/02/432f07162574e.jpg) + ![七月十五的月亮](https://static.7wate.com/img/2020/09/02/aad9c0f44438e.jpg) -## 9 月 7 日 周三 狂风暴雨 +## 9 月 7 日 周三 狂风暴雨 发芽啦发芽啦,感觉有点徒长,但是又怕晒死…… + 傍晚突如其来的狂风暴雨,晚上顺带给仙人球搬了 Big House!累了溜了溜了🙃 + ![发芽了](https://static.7wate.com/img/2020/09/07/a1576d60f5153.jpg) + ![雨后](https://static.7wate.com/img/2020/09/07/7ec5ce945a6ed.jpg) -## 9 月 21 日 周一 中雨 +## 9 月 21 日 周一 中雨 耐不住山区将近 20℃ 的温差,加上我也无心照养。 + 来年再种。 -## 11 月 2 日 周一 大风 +## 11 月 2 日 周一 大风 2020 年仅剩的三盆小生命! + ![合照](https://static.7wate.com/img/2020/11/02/3a043a18f3da0.jpg) --- -## 7 月 21 日 周二 小雨转中雨 +## 7 月 21 日 周二 小雨转中雨 ![第一天](https://static.7wate.com/img/2020/07/22/034daa2a7de8c.jpg) 打扫房间发现了一包吉普赛满天星种子,还是粉色的吉普赛满天星。便想起来是大学时种花遗留下来的,谨以此记录它的成长! -## 7 月 27 日 周一 多云 +## 7 月 27 日 周一 多云 ![7-27](https://static.7wate.com/img/2020/07/27/e8b8bd9843914.jpg) 前几天回郑州了,虽然一周了但满天星还没有发芽,还长了些许杂草。网购的仙人球和含羞草也到了,不过有点坑。 -## 8 月 32 日 周八 地球毁灭 +## 8 月 32 日 周八 地球毁灭 铛铛铛、发芽失败。Over! diff --git a/blog/唯有热爱可抵岁月漫长.md b/Blog/唯有热爱可抵岁月漫长.md similarity index 90% rename from blog/唯有热爱可抵岁月漫长.md rename to Blog/唯有热爱可抵岁月漫长.md index a899be76..14c0ea13 100644 --- a/blog/唯有热爱可抵岁月漫长.md +++ b/Blog/唯有热爱可抵岁月漫长.md @@ -1,12 +1,16 @@ --- title: 唯有热爱、可抵岁月漫长 -description: 唯有热爱可抵岁月漫长 +description: 这篇文章回顾了计算机与互联网在二十一世纪的快速发展,以及它们如何重塑了每个人的生活。 keywords: -- 唯有热爱可抵岁月漫长 -tags: -- 杂谈 + - 计算机科学 + - 贝尔实验室 + - 社会需求 + - 科技进步 + - 科技革新 +tags: + - 历史/计算机科学 authors: -- 7Wate + - 7Wate date: 2023-08-29 --- @@ -18,7 +22,7 @@ date: 2023-08-29 特别是近现代两次世界大战极大地推动了科学技术的高速发展,继而孕育出许多划时代的科学发明。在第一次世界大战中,无线电广泛的军事应用具有巨大的战略价值,同时也为现代通信技术打下了坚实的基础。进入第二次世界大战后,出现了可以用于计算导弹弹道和破译加密通讯的计算机技术,这一进展无疑为现代信息技术的蓬勃发展铺平了道路。 -在第二次世界大战期中,以艾伦·图灵领导的密码破译团队成功地解密了德国的 Enigma 密码机,这一成就对战局产生了深远的影响。更重要的是,图灵 1936 年提出的图灵机模型为现代计算机的逻辑运行方式奠定了基础。此外,图灵 1950年 提出的图灵测试也成为了人工智能领域一个标志性的概念。或许是天妒英才的缘故,图灵于 1954 年自杀。 +在第二次世界大战期中,以艾伦·图灵领导的密码破译团队成功地解密了德国的 Enigma 密码机,这一成就对战局产生了深远的影响。更重要的是,图灵 1936 年提出的图灵机模型为现代计算机的逻辑运行方式奠定了基础。此外,图灵 1950 年 提出的图灵测试也成为了人工智能领域一个标志性的概念。或许是天妒英才的缘故,图灵于 1954 年自杀。 两次世界大战期间,美国作为一个主要的参与国,受益于其主要国土远离亚欧大陆的地理位置,未曾遭受到严重的军事侵害,同时也获得了战争带来的巨量经济利益。特别是在第二次世界大战中,众多的全球顶级科学家为了逃离战乱,选择了移民美国。其中就包括冯·诺依曼,他是一位在多个领域内拥有卓越贡献的科学家,如现代计算机科学、博弈论、核武器以及生物化学武器,被后人尊称为现代「计算机之父」和「博弈论之父」。 @@ -26,7 +30,7 @@ date: 2023-08-29 更值得一提的是,AT&T 旗下 1925 年创建的贝尔实验室。经过多年的研究和发展,即将迎来其最为辉煌的三十年。1947 年,约翰·巴丁、沃尔特·布拉顿和威廉·肖克利等人联合研制出共同发明了改变世界的晶体管。紧接着在 1948 年,克劳德·香农又发表了名为《A Mathematical Theory of Communication》的论文,标志着信息论的诞生,并在同年引入了「熵」的概念。进一步地,贝尔实验室在 1969 年还推出了具有里程碑意义的 C 语言和 Unix 操作系统。 -尤其是在《贝尔实验室与美国革新大时代》一书中,其中有一段内容描述了上世纪60年代的美国繁荣情景。与此同时,我们还在面临吃不饱肚子的问题。而在这一阶段,美国家庭普遍拥有小汽车并住进了舒适的洋房,与之形成鲜明对比。贝尔实验室的多位科学家也都有机会全心全意地投入到自己的研究工作中,这一点实在令人充满羡慕。 +尤其是在《贝尔实验室与美国革新大时代》一书中,其中有一段内容描述了上世纪 60 年代的美国繁荣情景。与此同时,我们还在面临吃不饱肚子的问题。而在这一阶段,美国家庭普遍拥有小汽车并住进了舒适的洋房,与之形成鲜明对比。贝尔实验室的多位科学家也都有机会全心全意地投入到自己的研究工作中,这一点实在令人充满羡慕。 综合来看,当时的 AT&T 不仅准确地把握住了社会需求,获得了可观的商业利润同时,而且持续地投资于贝尔实验室,其聚集了全球顶级的科学家,从而推动了计算机科学和通讯行业的巨大发展。 @@ -82,7 +86,7 @@ date: 2023-08-29 - 《[贝尔实验室与美国革新大时代](https://book.douban.com/subject/26681345/)》:乔恩·格特纳《纽约时报》的记者、历史学家和专题作家。 -- 《[UNIX 传奇:历史与回忆](https://book.douban.com/subject/35292726/)》:Brian W. Kernighan ,《C 程序设计语言》和《UNIX 编程环境》等10多部计算机著作的合著者。他曾在贝尔实验室计算科学研究中心 Unix 开发组工作超过 30 年,见证了 Unix 的诞生。 +- 《[UNIX 传奇:历史与回忆](https://book.douban.com/subject/35292726/)》:Brian W. Kernighan ,《C 程序设计语言》和《UNIX 编程环境》等 10 多部计算机著作的合著者。他曾在贝尔实验室计算科学研究中心 Unix 开发组工作超过 30 年,见证了 Unix 的诞生。 - 《[硅谷之火:个人计算机的诞生与衰落](https://book.douban.com/subject/34875818/)》:迈克尔·斯韦,是知名 IT 作家,最早投入 IT 行业的媒体人之一,与盖茨等众多硅谷大佬有着良好的关系。 @@ -90,7 +94,7 @@ date: 2023-08-29 - 《[芯片战争](https://book.douban.com/subject/35659418/)》:余盛,战略咨询专家、消费品营销专家及财经作家。 -- 《[开源之迷](https://book.douban.com/subject/35716759/)》:适兕、「开源之道」主创,Linux基金会亚太区开源布道者团队主席,Apache Local community Beijing 成员,CCF 开源技术丛书编委会委员 。 +- 《[开源之迷](https://book.douban.com/subject/35716759/)》:适兕、「开源之道」主创,Linux 基金会亚太区开源布道者团队主席,Apache Local community Beijing 成员,CCF 开源技术丛书编委会委员 。 - 《[世界前沿技术发展报告 2022](https://book.douban.com/subject/35968658/)》:国务院发展研究中心国际技术经济研究所。 diff --git a/blog/回首 2022 展望 2023.md b/Blog/回首 2022 展望 2023.md similarity index 86% rename from blog/回首 2022 展望 2023.md rename to Blog/回首 2022 展望 2023.md index 380d320a..f2c7ebbe 100644 --- a/blog/回首 2022 展望 2023.md +++ b/Blog/回首 2022 展望 2023.md @@ -1,13 +1,16 @@ --- title: 回首 2022 展望 2023 -description: 回首 2022 展望 2023 +description: 我博客的第100篇,简单回顾过去一年的春夏秋冬。2022年最开心的是认识女朋友,最憎恶的是疫情,最大收获是持续阅读17本书。不再轻易定下目标,2023只做一件事:活在当下,今天比昨天进步一点。 keywords: -- 2022 -- 年终总结 -tags: -- 年终总结 + - 回顾2022 + - 阅读 + - 女友 + - 疫情 + - 活在当下 +tags: + - 年度/2023 authors: -- 7Wate + - 7Wate date: 2023-01-05 --- @@ -45,4 +48,4 @@ date: 2023-01-05 说实话再也不敢装逼了,也不会洋洋洒洒的写下一堆目标了。期望 2023 年拥有稳定的生活,持续的进步成长就知足了。具体的目标就是今天比昨天好一点点,活在当下。 -**2023 年目标只有一件事,也只做这一件事。** \ No newline at end of file +**2023 年目标只有一件事,也只做这一件事。** diff --git a/blog/夏日花记.md b/Blog/夏日花记.md similarity index 91% rename from blog/夏日花记.md rename to Blog/夏日花记.md index 46b632a8..b78a0950 100644 --- a/blog/夏日花记.md +++ b/Blog/夏日花记.md @@ -1,23 +1,25 @@ --- title: 夏日花记 -description: 夏日花记 +description: 分享了我对种花的热爱和经历,包括种植的凤仙花、波斯菊、黄金万年草、吉普赛满天星和仙人球等植物的故事和成长过程。 keywords: -- 夏日 -- 花园 -tags: -- 花园 + - 种花 + - 吉普赛满天星 + - 花盆 + - 多肉 + - 春天 +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2020-07-31 --- - 夏天种花怕是只有我这样的憨憨了,但是依旧要记录一下。我呢、从小就蛮喜欢种花的,不是因为我有一颗少女心哈哈哈。而是因为种花是付出就一定有回报的,而且开花的时候成就感爆棚! - ## 桃红 ![凤仙花](https://static.7wate.com/img/2020/07/31/73e08b4e04753.jpg) + > 凤仙花(学名:Impatiens )、又名指甲花、指甲桃、急性子、凤仙透骨草,是凤仙花科凤仙花属的植物。 印象里,第一次开始种花是在十岁左右,种的凤仙花。我们这里喜欢叫它桃红,因为可以用它开的花包指甲,所以又名指甲花。它很容易成活开花,每天春天播撒完种子就完全不用管了,安心等待夏天开花包指甲就可以了。但是如果想让它长得如人一般高,那你便要好好松土、施肥、浇水了。 @@ -68,4 +70,4 @@ date: 2020-07-31 --- -凤仙花图片及其介绍来自[百度百科](https://baike.baidu.com/item/%E5%87%A4%E4%BB%99%E8%8A%B1) \ No newline at end of file +凤仙花图片及其介绍来自 [百度百科](https://baike.baidu.com/item/%E5%87%A4%E4%BB%99%E8%8A%B1) diff --git a/blog/大学回忆录.md b/Blog/大学回忆录.md similarity index 90% rename from blog/大学回忆录.md rename to Blog/大学回忆录.md index 7347f7ff..1fd10cce 100644 --- a/blog/大学回忆录.md +++ b/Blog/大学回忆录.md @@ -1,13 +1,15 @@ --- title: 大学回忆录 -description: 大学回忆录 +description: 一篇记录作者大学时期的成长历程的文章。 keywords: -- 大学 -- 回忆 -tags: -- 杂谈 + - 回忆 + - 大学 + - 成长 + - 遗憾 +tags: + - 记忆/大学 authors: -- 7Wate + - 7Wate date: 2023-03-21 --- @@ -43,7 +45,7 @@ date: 2023-03-21 淘宝小店很好玩,那时候总是觉得生活费不够用,想着靠自己计科专业知识来提供相应的服务赚点外快,后来也是烂尾了。团员管理系统是毕业设计,那时候要随便交一个项目应付毕业的,再加时间不够总之挺垃圾。 -《17软件周中平社会实践报告终极版》记得去过二七塔和郑州烈士博物馆的,但是还是很过瘾的,记得就是公费报销吃喝拉撒哈哈。《2018十个目标》都是吹牛逼的。《企业计划书》这是最蠢的哈哈,那时候我可是吹牛逼的一把好手啊。 +《17 软件周中平社会实践报告终极版》记得去过二七塔和郑州烈士博物馆的,但是还是很过瘾的,记得就是公费报销吃喝拉撒哈哈。《2018 十个目标》都是吹牛逼的。《企业计划书》这是最蠢的哈哈,那时候我可是吹牛逼的一把好手啊。 ![企业计划书](https://static.7wate.com/img/2023/03/21/50919fc152716.png) diff --git a/blog/如何不写错别字!.md b/Blog/如何不写错别字!.md similarity index 80% rename from blog/如何不写错别字!.md rename to Blog/如何不写错别字!.md index e7bb6f2a..6cc389c5 100644 --- a/blog/如何不写错别字!.md +++ b/Blog/如何不写错别字!.md @@ -1,13 +1,15 @@ --- title: 如何不写错别字! -description: 如何不写错别字! +description: 在2023年岁末年初,我面临着一个常见的挑战——如何避免写错字。从学生时代起,我就一直容易写错字,而且常常执着于一个错误,难以摆脱。这个问题在我写博文的过程中变得尤为突出,甚至导致我的文章被指出错字,让我感到非常尴尬。为了在新的一年里改进,我制定了两个策略来逐步克服这个毛病。 keywords: -- 写作 -- 错别字 -tags: -- 杂谈 + - 写作 + - 错别字 + - 语法 + - 文字校验 +tags: + - 写作/技巧 authors: -- 7Wate + - 7Wate date: 2023-01-06 --- diff --git a/blog/如何免费创建一个属于自己的网站.md b/Blog/如何免费创建一个属于自己的网站.md similarity index 92% rename from blog/如何免费创建一个属于自己的网站.md rename to Blog/如何免费创建一个属于自己的网站.md index ccb68945..b3effa4f 100644 --- a/blog/如何免费创建一个属于自己的网站.md +++ b/Blog/如何免费创建一个属于自己的网站.md @@ -1,24 +1,29 @@ --- title: 如何免费创建一个属于自己的网站 -description: 如何免费创建一个属于自己的网站 +description: 如何免费建立网站的过程,以及一些相关的技巧和工具。作者强调了免费主机网站的优势,尤其适用于学习建站的初学者,同时提到了有关注册和部署网站的详细步骤。 keywords: -- 网站 -- 创建 -tags: -- 网站 + - 免费主机 + - 部署网站 + - 网站程序 + - 数据库 + - 工具 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2018-10-31 --- - 分享这篇文章,主要是给室友栋哥写的。嘿嘿,有其他需要尝试的也可以自己尝试一下,免费空间不用安装服务器软件,也不用担心域名注册备案访问问题,用来学习建站最好不过。如果真的想建设一个网站,还是不要嫌麻烦,找好的服务器和域名,这样也就不用担心其他有的没的问题。 ## 免费主机网站 网址: + 注册页面: + 技术支持: + 技术教程: 原博主也有注册教程,大家多多支持! @@ -50,6 +55,7 @@ date: 2018-10-31 ![账户信息](https://static.7wate.com/img/2020/11/23/1f1a5df9e2fe9.png) 到此,账户已经注册成功!域名已经可以访问初始页面! + 网址:[http://zhou20181031.ccaeo.com](http://zhou20181031.ccaeo.com/) ## 部署网站 @@ -57,6 +63,7 @@ date: 2018-10-31 了解过相关知识就知道,创建一个网站需要网站程序和数据库,类似于 Wordpress,Discuz,以及我使用的 Typecho 简称网站程序吧,一时间也想不起来术语了。这些都是开源的!这次我创建一个 Typecho 的博客,其他的也类似!首先下载博客主程序。 网址: + 下载地址: 下载好文件,解压如下 @@ -66,6 +73,7 @@ date: 2018-10-31 然后登陆网站后台,创建一个数据库。 后台网址:[http://cpanel.ccaeo.com](http://cpanel.ccaeo.com/) + 账户以及密码信息,邮箱文件都有。语言选择简体中文。 ![选择简体中文](https://static.7wate.com/img/2020/11/23/cbb4237d56405.png) @@ -91,6 +99,7 @@ date: 2018-10-31 ![数据库信息](https://static.7wate.com/img/2020/11/23/86b6837353852.png) 数据库到这一步已经创建成功!然后用 FTP 工具上传博客主程序。 + FTP 工具: ![登录 ftp](https://static.7wate.com/img/2020/11/23/4013c1514c310.png) @@ -120,8 +129,11 @@ FTP 工具: ![安装成功](https://static.7wate.com/img/2020/11/23/c2deb561b93a3.png) 这一步网站就已经安装成功了!写的有点仓促,有什么笔误大家可以留言,关联微信了实时收到!多多留言支持!不介意给个赞助哈哈哈哈哈哈哈! + 网址:[http://zhou20181031.ccaeo.com](http://zhou20181031.ccaeo.com/)(2022.01.10 - 失效) + 管理员:admin + 密码:123456 --- diff --git a/blog/如何免费获得 Jetbrains 正版授权.md b/Blog/如何免费获得 Jetbrains 正版授权.md similarity index 81% rename from blog/如何免费获得 Jetbrains 正版授权.md rename to Blog/如何免费获得 Jetbrains 正版授权.md index 3f0199b7..67f2b4b8 100644 --- a/blog/如何免费获得 Jetbrains 正版授权.md +++ b/Blog/如何免费获得 Jetbrains 正版授权.md @@ -1,17 +1,16 @@ --- title: 如何免费获得 Jetbrains 正版授权 -description: 如何免费获得 Jetbrains 正版授权 +description: 这篇文章分享了如何免费获得个人正版授权来使用Jetbrains系列工具的方法。作者强调了官方提供的特惠方式之一,即通过参与开源项目来获取授权。文章提供了详细的步骤,包括申请表单的填写和等待授权邮件的到来。 keywords: -- Jetbrains -- 授权 -tags: -- 开源 + - Jetbrains + - 开源授权 +tags: + - 生产力工具/Jetbrains authors: -- 7Wate + - 7Wate date: 2022-03-18 --- - 最近 Jetbrains 的授权又到期了,之前有些写过相关的文章。但是那时候没有加入到相关的博客订阅,阅读量也不大。现在有一定的阅读量了,便想再次分享给大家如何免费获得个人正版授权。 ## 关于授权模式 @@ -28,7 +27,7 @@ Jetbrains 主要面对用户为个人和组织,官方其实对于个人授权 官方的条件要求是: -- 了解[开源](https://opensource.org/docs/osd)定义。 +- 了解 [开源](https://opensource.org/docs/osd) 定义。 - 正在积极开发,例如,**在过去 3 个月内定期提交新代码。** - 不提供开源软件的付费版本,也不提供与开源项目相关的任何商业服务(例如付费支持、咨询等)。 - 未获得商业公司或组织(NGO、教育、研究或政府组织)的资助。 @@ -44,7 +43,7 @@ Jetbrains 主要面对用户为个人和组织,官方其实对于个人授权 1. 注册 Jetbrains 官方账户 2. 符合要求的开源项目 -3. 打开[申请网址](https://www.jetbrains.com.cn/community/opensource/#support)填写表单 +3. 打开 [申请网址](https://www.jetbrains.com.cn/community/opensource/#support) 填写表单 4. 等待邮件授权激活 如果超过七天未收到授权邮件,可以邮件联系官方,由于时差原因,所以不要着急。(官方不会磨磨唧唧,一般直接就给了) diff --git a/blog/如何拍好一张照片.md b/Blog/如何拍好一张照片.md similarity index 94% rename from blog/如何拍好一张照片.md rename to Blog/如何拍好一张照片.md index e81a3b38..cc14a92c 100644 --- a/blog/如何拍好一张照片.md +++ b/Blog/如何拍好一张照片.md @@ -1,13 +1,17 @@ --- title: 如何拍好一张照片 -description: 如何拍好一张照片 +description: 文章讨论了摄影中一副好照片的要素和原则。作者强调了三项基本原则,包括鲜明的主题、引人注目的内容以及简练的构图。 keywords: -- 如何拍好一张照片 -- 摄影 -tags: -- 摄影 + - 摄影 + - 作品 + - 主题 + - 内容 + - 构图 + - 后期 +tags: + - 摄影/技巧 authors: -- 7Wate + - 7Wate date: 2023-08-14 --- diff --git a/blog/家里的三块地.md b/Blog/家里的三块地.md similarity index 92% rename from blog/家里的三块地.md rename to Blog/家里的三块地.md index 04e71ce0..423419f4 100644 --- a/blog/家里的三块地.md +++ b/Blog/家里的三块地.md @@ -1,12 +1,16 @@ --- title: 家里的三块地 -description: 家里的三块地 +description: 回忆童年暑假时在乡下割草浇地的日子。每年暑假开始就要帮家里干活,割草最苦。家里的三块地,一块一块被占走和挖掉,没能挣到钱。那段日子虽然辛苦,但让我懂得生活不是轻松的,是成长的开始。 keywords: -- 家里的三块地 -tags: -- 感悟 + - 童年暑假 + - 割草 + - 浇地 + - 三块地 + - 成长 +tags: + - 记忆/童年 authors: -- 7Wate + - 7Wate date: 2023-08-19 --- diff --git a/blog/岁月是把猪饲料,把我喂的嘎嘎胖.md b/Blog/岁月是把猪饲料,把我喂的嘎嘎胖.md similarity index 58% rename from blog/岁月是把猪饲料,把我喂的嘎嘎胖.md rename to Blog/岁月是把猪饲料,把我喂的嘎嘎胖.md index 6bd7fe12..5a2ec86e 100644 --- a/blog/岁月是把猪饲料,把我喂的嘎嘎胖.md +++ b/Blog/岁月是把猪饲料,把我喂的嘎嘎胖.md @@ -1,16 +1,16 @@ --- title: 岁月是把猪饲料,把我喂的嘎嘎胖 -description: 岁月是把猪饲料,把我喂的嘎嘎胖,三年胖了 27 斤 +description: 分享了自己工作两年多以来的体重增加问题,并提到身体状况的下降。他表达了对体重的担忧,并通过体重记录图表展示了体重的变化。作者提到曾经是体育特长生,但现在因为工作生活的压力和饮食习惯的改变导致体重增加。他讨论了自己的健身计划,包括锻炼频率和体重控制目标。 keywords: -- 岁月是把猪饲料 -- 三一计划 -- 运动健身 -tags: -- 健身 + - 健身计划 + - 工作生活平衡 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2023-07-27 --- + 上班两年多了,工资没见上涨,体重却是蹭蹭蹭的长。小肚腩,气喘吁吁,干啥事都不想动弹。日常工作、生活琐事搞得每天都精疲力竭,更别提回来再运动运动了。然而,然而……尽管现在实现了当初梦想体重 80kg,但这是虚假的 80kg,满满肥肉的 80kg。 ![体重记录](https://static.7wate.com/img/2023/07/27/4b7cdbc9202d0.png) @@ -19,23 +19,20 @@ date: 2023-07-27 三年,你知道我这三年怎么过的么?27 斤,27 斤五花肉啊!😵😵😵 -之前高中的时候,体育特长生,身材还算一级棒。如今呢,猪饲料y越吃越多,真的是毁灭吧!天天拍着日渐丰满的小肚腩啧啧啧。平时也不是没有锻炼,主要就是吃的饲料太多了,运动强度达不到,吃的又多,只能一路小跑的发胖了…… +之前高中的时候,体育特长生,身材还算一级棒。如今呢,猪饲料 y 越吃越多,真的是毁灭吧!天天拍着日渐丰满的小肚腩啧啧啧。平时也不是没有锻炼,主要就是吃的饲料太多了,运动强度达不到,吃的又多,只能一路小跑的发胖了…… 下班之后我是懒得去健身房的,练完之后还要通勤,我就想洗个澡,直接躺了。再有就是上班的时候跟一群吊毛斗智斗勇,没有心力来场高强度锻炼了。而且如果高强度训练没有坚持下来,非常打消积极性。毕竟要学会尊重人性,啥事单靠毅力是坚持不久的。 目前,我正在践行《三一计划》,家里也买了一些精巧好用的健身器材。未来体重还是要保持在合理的区间范围内的,简单来说《三一计划》是这样的: -- 小于 140 斤:不减肥,要吃吃吃了。 +- 小于 140 斤:不减肥,要吃吃吃了。 - 150 斤左右:正好,继续保持。 -- 大于 160 斤:必须要控制饮食,保持运动了。 +- 大于 160 斤:必须要控制饮食,保持运动了。 -- 三:每周 3 次 1.5 倍基础心率 30 分钟的运动。 +- 三:每周 3 次 1.5 倍基础心率 30 分钟的运动。 -- 一:周末 1 次 2 倍基础心率 30 分钟的运动。 +- 一:周末 1 次 2 倍基础心率 30 分钟的运动。 冲冲冲!GGBOY 在行动! - - - diff --git a/blog/幸福的事情都是需要等待的.md b/Blog/幸福的事情都是需要等待的.md similarity index 66% rename from blog/幸福的事情都是需要等待的.md rename to Blog/幸福的事情都是需要等待的.md index 8f24a559..5215e4da 100644 --- a/blog/幸福的事情都是需要等待的.md +++ b/Blog/幸福的事情都是需要等待的.md @@ -2,21 +2,27 @@ title: 幸福的事情都是需要等待的 description: 幸福的事情都是需要等待的 keywords: -- 幸福 -- 感悟 -tags: -- 感悟 + - 小孩 + - 不耐烦 + - 妈妈 + - 劝导 + - 等待 + - 幸福 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2020-11-15 --- - 买蛋糕的时候,排了很长的队。 前面小孩等的不耐烦了。 + 妈妈、我不想买了。 + 你每次都是这样,幸福的事情都是需要等待的。 --- -> 是啊,幸福的事情都是需要等待的。 \ No newline at end of file + +> 是啊,幸福的事情都是需要等待的。 diff --git a/blog/开源软件之道.md b/Blog/开源软件之道.md similarity index 83% rename from blog/开源软件之道.md rename to Blog/开源软件之道.md index 73fd3cca..1f5a9937 100644 --- a/blog/开源软件之道.md +++ b/Blog/开源软件之道.md @@ -1,17 +1,17 @@ --- title: 开源软件之道 -description: 开源软件之道 +description: 介绍了开源软件的定义、优点、风险以及许可证的简介和兼容性,强调了开源软件在信息和知识共享中的重要性,同时提醒了选择合适许可证的重要性。 keywords: -- 开源 -- 哲学 -tags: -- 开源 + - 开源 + - 优缺点 + - 许可证 +tags: + - 社区/开源 authors: -- 7Wate + - 7Wate date: 2020-07-02 --- - 源代码开放的软件并不一定是开源软件,开源软件有着严格统一的的定义,封闭软件(Closed Software)、自由软件(Free software)和开源软件(Open source software)有着显著地区别。 ## 开源软件的定义 @@ -50,7 +50,7 @@ date: 2020-07-02 ## 开源软件的风险 -开源软件主要风险在于`管理维护`和`技术支持`以及`许可证法律纠纷`,由于开源软件采用的协作方式,你可能无法追究某一处代码的作者(部分协议要求作者著名)。以及如果出现问题,你可能无法寻找官方的技术支持,更多的支持可能来自于社区,可这种支持不是每次都有好人跳出来帮忙。还有如果你不了解许可证可能会带来的法律风险(部分国家法律不同,如果源代码无许可证,默认著作权属于作者)。 +开源软件主要风险在于 `管理维护` 和 `技术支持` 以及 `许可证法律纠纷`,由于开源软件采用的协作方式,你可能无法追究某一处代码的作者(部分协议要求作者著名)。以及如果出现问题,你可能无法寻找官方的技术支持,更多的支持可能来自于社区,可这种支持不是每次都有好人跳出来帮忙。还有如果你不了解许可证可能会带来的法律风险(部分国家法律不同,如果源代码无许可证,默认著作权属于作者)。 ## 开源许可证简介 @@ -72,7 +72,7 @@ date: 2020-07-02 ## 许可证的兼容性 -目前经过 ISO 认证的许可证多达 70 多种,被自由软件基金会认可的自由软件许可证也有数十种,而它们的条款又各不相同,有些甚至互相矛盾。这种兼容性问题被称为`许可证增值问题(License proliferation)`。 +目前经过 ISO 认证的许可证多达 70 多种,被自由软件基金会认可的自由软件许可证也有数十种,而它们的条款又各不相同,有些甚至互相矛盾。这种兼容性问题被称为 `许可证增值问题(License proliferation)`。 怎么样才算兼容呢?如果使用许可证 A 的代码和使用许可证 B 的代码能在一个广域作品中结合在一起,那么 A 和 B 就是兼容的,否则就是不兼容的。更近一步,如果结合后的广义作品可以用许可证 A 发布,那么许可证 B 就是许可证 A 兼容的(A-compatible)。反之亦然,但需要注意的是兼容性并**不可逆**。 @@ -87,7 +87,11 @@ date: 2020-07-02 --- 参考: + 《开源软件之道》 + [开源社——开源许可证选择器](https://kaiyuanshe.cn/license-tool/) + [Open Source Initiative](https://opensource.org/) + [阮一峰《如何选择开源许可证》](http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html) diff --git a/blog/我开发的第一款软件.md b/Blog/我开发的第一款软件.md similarity index 82% rename from blog/我开发的第一款软件.md rename to Blog/我开发的第一款软件.md index 77ca0ba8..542f3229 100644 --- a/blog/我开发的第一款软件.md +++ b/Blog/我开发的第一款软件.md @@ -1,19 +1,20 @@ --- title: 我开发的第一款软件 -description: 我开发的第一款软件 +description: 我的编程经历,包括接触程序设计的早期经历和开发外挂的经历。作者分享了在精益论坛和洛克王国游戏中的一些有趣故事,以及如何利用一个特殊的BUG来缩短宠物升级时间。 keywords: -- 开发 -- 软件 -tags: -- 技术 + - 编程经历 + - 外挂开发 + - 游戏BUG + - 洛克王国 +tags: + - 记忆/高中 authors: -- 7Wate + - 7Wate date: 2021-04-26 --- 无意间发现 CSDN 显示自己拥有九年码龄,就勾起了很深的记忆。那时刚开始接触程序设计的时候,经常接触到易语言、精益论坛、吾爱破解、看雪论坛等等。所以就一个一个登录查看有没有当年留下的痕迹…… - ## 邮箱群发 ![帖子](https://static.7wate.com/img/2021/04/26/bc80fc0155623.png) @@ -100,18 +101,18 @@ Path : C:\Users\ZZP\Downloads\Compressed\QQ群-发利器\QQ群发利器.zip 100ms -2. 服务器:收到编号 0001 怪物战斗请求,当前地图场景编号是否 0001 的我需要确认一下? -3. 客户端:我确定在编号 0001 怪物的地图场景,我要开始战斗了。 +1. 服务器:收到编号 0001 怪物战斗请求,当前地图场景编号是否 0001 的我需要确认一下? +2. 客户端:我确定在编号 0001 怪物的地图场景,我要开始战斗了。 100ms -4. 封禁服务器:这 B 太快了,封禁。 -5. 封禁服务器:这 B 在那个地图?跟谁战斗?找到他封禁! -6. 客户端:已被封禁 +1. 封禁服务器:这 B 太快了,封禁。 +2. 封禁服务器:这 B 在那个地图?跟谁战斗?找到他封禁! +3. 客户端:已被封禁 可能是因为每个功能具体分工不同,而且也不明白为什么要在游戏内找到这个角色再进行封禁…… -基于这个机制,我是这样搞得哈哈h +基于这个机制,我是这样搞得哈哈 h 1. 客户端:我要与编号 0001 怪物战斗。 2. 服务器:收到编号 0001 怪物战斗请求,当前地图场景编号是否 0001 的我需要确认一下? @@ -120,34 +121,34 @@ Path : C:\Users\ZZP\Downloads\Compressed\QQ群-发利器\QQ群发利器.zip 5. 客户端:我要用技能 A,干它。 6. **客户端:哎、我跑到这个地图了。** -1ms +1ms -7. 客户端:我要用技能 B,干它。 -8. **客户端:哎、我跑到这个地图了。** +1. 客户端:我要用技能 B,干它。 +2. **客户端:哎、我跑到这个地图了。** -1ms +1ms -9. 客户端:我要用技能 C,干它。 -10. **客户端:哎、我跑到这个地图了。** +1. 客户端:我要用技能 C,干它。 +2. **客户端:哎、我跑到这个地图了。** -1ms +1ms -11. 服务器:技能 A 使用成功。 +1. 服务器:技能 A 使用成功。 -12. 服务器:技能 B 使用成功。 +2. 服务器:技能 B 使用成功。 -13. 服务器:技能 C 使用成功。 +3. 服务器:技能 C 使用成功。 -14. 服务器:怪物死亡…… +4. 服务器:怪物死亡…… -15. 服务器:宠物 A 获取 100 exp(经验)。 -16. **封禁服务器:这 B 太快了,封禁他** -17. **封禁服务器:这 B 在那个地图?跟谁战斗?找到他封禁!** -18. **地图服务器:在 001 地图(此时用户又更换了地图场景 002)** -19. **封禁服务器:找不到啊,赶紧告诉我位置!** -20. **地图服务器:在 002 地图(此时用户又更换了地图场景 003)** -21. **封禁服务器:找不到啊,赶紧告诉我位置!** -22. …… +5. 服务器:宠物 A 获取 100 exp(经验)。 +6. **封禁服务器:这 B 太快了,封禁他** +7. **封禁服务器:这 B 在那个地图?跟谁战斗?找到他封禁!** +8. **地图服务器:在 001 地图(此时用户又更换了地图场景 002)** +9. **封禁服务器:找不到啊,赶紧告诉我位置!** +10. **地图服务器:在 002 地图(此时用户又更换了地图场景 003)** +11. **封禁服务器:找不到啊,赶紧告诉我位置!** +12. …… 简述如上,封禁服务器一直在屁股上追着你,而且永远追不到你!就这样每个数据包通信为 1ms,升级时间从两个小时缩短到 12 分钟。 @@ -159,4 +160,4 @@ Path : C:\Users\ZZP\Downloads\Compressed\QQ群-发利器\QQ群发利器.zip 接下来的日子,砥砺前行! -![CSDN](https://static.7wate.com/img/2021/04/26/c64ae18f83dd8.png) \ No newline at end of file +![CSDN](https://static.7wate.com/img/2021/04/26/c64ae18f83dd8.png) diff --git a/blog/我是关系户.md b/Blog/我是关系户.md similarity index 76% rename from blog/我是关系户.md rename to Blog/我是关系户.md index f55c512d..32e58f33 100644 --- a/blog/我是关系户.md +++ b/Blog/我是关系户.md @@ -1,13 +1,14 @@ --- title: 我是关系户 -description: 我是关系户 +description: 最近加入的微信群以及一次有趣的经历。作者在群里分享了他整理书柜时闲置的书籍,并决定送给群友。这个举动引发了一些思考,特别是关于人与人之间的互动和选择。 keywords: -- 关系户 -- 博客 -tags: -- 感悟 + - 微信群 + - 书籍分享 + - 社交互动 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-08-31 --- @@ -15,7 +16,7 @@ date: 2022-08-31 在一个周末闲来无事收拾书柜,整理出来几本闲置的书籍。思来想去不知道如何处理;不想送到回收站,因为那样我觉得知识被埋没了,所以便想着送人好了。 -在群里发布了这个消息后,马上就有好几个群友加我微信预定书籍。直到最后共 3 位朋友预定了 8 本书籍,随后我就在周日下午寄出了。对于我来说这件事情并不奢求任何回报,也不希望谁感激我,我只是想让这几本书继续“活下去”。 +在群里发布了这个消息后,马上就有好几个群友加我微信预定书籍。直到最后共 3 位朋友预定了 8 本书籍,随后我就在周日下午寄出了。对于我来说这件事情并不奢求任何回报,也不希望谁感激我,我只是想让这几本书继续“活下去”。 但是后续发生的事情很有意思,其中一位朋友非常有礼貌,从始至终你都能感受到尊敬与感恩;另外两位朋友也是感谢至极,但是远没有那位朋友“更礼貌”。最后收到货后,那位朋友更是如获至宝似的发朋友圈言谢,这是令我没有想到的。 @@ -27,4 +28,4 @@ date: 2022-08-31 > 我们无法做到理智选择,只能尽力尝试去做出最优解。 -基于这个结论下,关系户也只是其一撮表现形式,钱权交易更是必然存在的。不过谈论这些对我们来说太遥远了。 \ No newline at end of file +基于这个结论下,关系户也只是其一撮表现形式,钱权交易更是必然存在的。不过谈论这些对我们来说太遥远了。 diff --git a/blog/我的小羊肖恩.md b/Blog/我的小羊肖恩.md similarity index 85% rename from blog/我的小羊肖恩.md rename to Blog/我的小羊肖恩.md index c3f54cb3..54999797 100644 --- a/blog/我的小羊肖恩.md +++ b/Blog/我的小羊肖恩.md @@ -1,19 +1,18 @@ --- title: 我的小羊肖恩 -description: 我的小羊肖恩 +description: 建厂来产下的第一只小绵羊——肖恩! keywords: -- 小羊 -- 肖恩 -tags: -- 日记 + - 小羊 + - 肖恩 +tags: + - 记忆/洛阳 authors: -- 7Wate + - 7Wate date: 2020-11-02 --- 建厂来产下的第一只小绵羊——肖恩! - ![幼年](https://static.7wate.com/img/2020/11/02/247bc3f3c36c0.jpg) ![少年](https://static.7wate.com/img/2020/11/02/1ce3cc6d88aab.jpg) @@ -31,4 +30,3 @@ date: 2020-11-02 ![小山羊](https://static.7wate.com/img/2020/12/27/75ad41bd9da3b.jpg) 古灵精怪的小山羊、嘿嘿嘿~~~ - diff --git a/blog/我站立的地方是中国.md b/Blog/我站立的地方是中国.md similarity index 76% rename from blog/我站立的地方是中国.md rename to Blog/我站立的地方是中国.md index 2a2400dc..c0c297bb 100644 --- a/blog/我站立的地方是中国.md +++ b/Blog/我站立的地方是中国.md @@ -1,19 +1,20 @@ --- title: 我站立的地方是中国 -description: 我站立的地方是中国 +description: 向四位卫国戍边英雄致敬!!! keywords: -- 中国 -- 致敬 -tags: -- 纪念 + - 中国 + - 致敬 + - 卫国 + - 戍边 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2021-02-19 --- 向四位卫国戍边英雄致敬!!! - ## 陈红军烈士 ![陈红军](https://static.7wate.com/img/2021/02/23/da2525b39fc67.jpg) @@ -33,4 +34,5 @@ date: 2021-02-19 > 清澈的爱、只为中国! --- -图片引用自百度百科 \ No newline at end of file + +图片引用自百度百科 diff --git a/blog/我要拔智齿!!!.md b/Blog/我要拔智齿!!!.md similarity index 81% rename from blog/我要拔智齿!!!.md rename to Blog/我要拔智齿!!!.md index b9f5423d..c5257f95 100644 --- a/blog/我要拔智齿!!!.md +++ b/Blog/我要拔智齿!!!.md @@ -1,36 +1,61 @@ --- title: 我要拔智齿!!! -description: 我要拔智齿!!! +description: 文章描述了作者的牙周炎问题,起因是智齿引起的。作者经历了疼痛和不适,并采取了一些措施来减轻症状。最终,作者去医院拔掉了引起问题的智齿,并分享了拔牙的经历。 keywords: -- 智齿 -tags: -- 日记 + - 牙周炎 + - 智齿 + - 拔牙 + - 医院 + - 痛苦 +tags: + - 生活/随笔 authors: -- 7Wate + - 7Wate date: 2022-03-24 --- 啊啊啊、莫名其妙的智齿引起了牙周炎…… + ## 起因 + 前几天都有点炎症,不过没太注意…… + 今天一天心情被这个智齿搞得痛不欲生,还导致了吞咽也很痛,张嘴都有些困难。 + 依稀记得去年体检的时候,医生都说智齿可能有点问题需要注意一下…… + 还好有药吃了点甲硝锉,立帖为证,灭了智齿全家啊啊啊······ + 😭😭😭 + ## 三月二十五 + 吃了药感觉可能会好一点,但是一阵一阵的。 + 到家还是给我疼的嗷嗷叫,吃了药躺床。 + 然后就从 7 点躺到凌晨 5 点,我觉得痛的处于半昏迷状态(又瞌睡又痛的睡不着) + 拿了好几个雪糕,放在脸颊上,冰的都没有知觉了······ + ## 三月二十六 + 本来是没有打算今天拔牙的,只是想着去看看。 + 到了医院后,医生说没问题,可以直接拔。风风火火拍了片,然后开始拔牙。 + 我的牙长的巨整齐,医生都说是不是做了矫正。而且没有网上那种什么阻生齿呀,更没有很奇怪的样子,最长牙根 28 mm,都很乖巧。 + 打了麻药有点痛和木,拔牙还好,来了一群实习生观摩…… + 拔牙痛感约为指尖采血的 1/2,麻药劲过后痛感为 1/10,可以理解并不痛,只是麻药劲比较不舒服。 + 不过牙痛的感觉有指尖采血的 3 - 5 倍,真的是巨痛苦(痛感时间巨长!!!) + 为什么没有照片,因为我全程懵逼状态、等待接受痛苦…… --- + 拔完牙下午去看机车了,然后傍晚回家,家被抄了…… -离家 100 米确诊一例来自上海的司机,我还是灰溜溜的回公司吧 ~ \ No newline at end of file + +离家 100 米确诊一例来自上海的司机,我还是灰溜溜的回公司吧 ~ diff --git a/Blog/我还在…….md b/Blog/我还在…….md new file mode 100644 index 00000000..b4601f48 --- /dev/null +++ b/Blog/我还在…….md @@ -0,0 +1,22 @@ +--- +title: 我还在…… +description: 最近现实生活比较充实、也就没有太多闲暇时光写博客了……放几张最近生活照,期待下一篇博客。 +keywords: + - 日记 + - 打卡 + - 开封 +tags: + - 生活/随笔 + - 游记/开封 +authors: + - 7Wate +date: 2021-06-10 +--- + +最近现实生活比较充实、也就没有太多闲暇时光写博客了……放几张最近生活照,期待下一篇博客。 + +![开封](https://static.7wate.com/img/2021/06/10/90216348e950a.jpg) + +![开封](https://static.7wate.com/img/2021/06/10/9dc96bf2ba208.jpg) + +> 二十三岁你好! diff --git a/blog/拾月游记.md b/Blog/拾月游记.md similarity index 82% rename from blog/拾月游记.md rename to Blog/拾月游记.md index 1dc58405..4ec27c62 100644 --- a/blog/拾月游记.md +++ b/Blog/拾月游记.md @@ -1,10 +1,15 @@ --- title: 拾月游记 -description: 拾月游记,最近出去玩的记录。 +description: 在最近的两次旅行中,作者分享了他去云台山和神农架的经历。他强调旅行的最重要的是开心,而不是目的地或活动。作者提到了旅游的模式相似性,其中许多地方都可以视为一个大型的公园,需要门票,并建议在当地租一个小院子来享受休闲时光。 keywords: - - 游记 + - 旅行 + - 云台山 + - 神农架 + - 露营 + - 开心 tags: - - 日记 + - 游记/云台山 + - 游记/神农架 authors: - 7Wate date: 2023-10-09 diff --git a/blog/揭晓你的博客一年之最,尽在 EndOfYear!.md b/Blog/揭晓你的博客一年之最,尽在 EndOfYear!.md similarity index 90% rename from blog/揭晓你的博客一年之最,尽在 EndOfYear!.md rename to Blog/揭晓你的博客一年之最,尽在 EndOfYear!.md index 1f635bb9..658e7124 100644 --- a/blog/揭晓你的博客一年之最,尽在 EndOfYear!.md +++ b/Blog/揭晓你的博客一年之最,尽在 EndOfYear!.md @@ -1,10 +1,13 @@ --- title: 揭晓你的博客一年之最,尽在 EndOfYear! -description: 揭晓你的博客一年之最,尽在 EndOfYear! +description: EndOfYear 可以抓取博客文章数据进行统计分析,生成博主的年度报告。 keywords: - EndOfYear + - 开源 + - 年度报告 + - 博客 tags: - - 创意 + - 开源项目/EndOfYear authors: - 7Wate date: 2023-10-30 diff --git a/blog/数字文化遗产.md b/Blog/数字文化遗产.md similarity index 84% rename from blog/数字文化遗产.md rename to Blog/数字文化遗产.md index abd3b316..cc28f73b 100644 --- a/blog/数字文化遗产.md +++ b/Blog/数字文化遗产.md @@ -1,13 +1,16 @@ --- title: 数字文化遗产 -description: 数字文化遗产 +description: 探讨了个人博客作为数字文化遗产的未来传承问题。他提到了互联网的发展历程以及个人博客的兴起,并思考了如何将个人博客作为文化遗产传承下去的核心思想。作者强调了文化传承和数字化的重要性,同时提到了数字文化遗产的客观价值和共认机制。他还提出了生命机制和技术实现方面的想法,最后讨论了数字文化遗产的表现形式。 keywords: -- 数字文化 -- 遗产 -tags: -- 创意 + - 数字文化 + - 遗产 + - 个人博客 + - 文化传承 + - 数字化 +tags: + - 开源项目/数字文化遗产 authors: -- 7Wate + - 7Wate date: 2022-05-30 --- @@ -79,4 +82,4 @@ date: 2022-05-30 仅此记录一下本人天马星空的想法,不具有任何专业性的调研和科学性。 -不过我的第六感告诉我:这应该会在将来某天得以实现。 \ No newline at end of file +不过我的第六感告诉我:这应该会在将来某天得以实现。 diff --git a/blog/数据恢复杂谈.md b/Blog/数据恢复杂谈.md similarity index 87% rename from blog/数据恢复杂谈.md rename to Blog/数据恢复杂谈.md index cfa17c8b..cedb0fbb 100644 --- a/blog/数据恢复杂谈.md +++ b/Blog/数据恢复杂谈.md @@ -1,19 +1,22 @@ --- title: 数据恢复杂谈 -description: 数据恢复杂谈 +description: 一次数据恢复经历,他帮助一位公务人员恢复了执法记录仪中的视频文件。文章介绍了数据恢复的基本常识,包括物理损坏和逻辑损坏,以及恢复方式。作者详细描述了文件修复的过程,包括使用数据恢复软件、视频修复工具等。最后,他提到了数据销毁的问题,强调了数据的重要性。 keywords: -- 数据 -- 恢复 -tags: -- 技术 + - 数据恢复 + - 执法记录仪 + - 物理损坏 + - 逻辑损坏 + - 文件修复 + - 数据销毁 +tags: + - 生活/随笔 authors: -- 7Wate + - 7Wate date: 2020-08-14 --- 昨天下午一位公务人员通过朋友联系到我,需要我帮忙恢复执法记录仪中的视频文件。因为他不知道执法记录仪的工作原理,所以导致一个重要的执法视频被覆盖。我了解后,觉得有几率恢复,便有了这次数据恢复的经历。 - ## 数据恢复基本常识 首先对于电子文件的损坏,无外乎以下两种损坏的方式。 @@ -33,7 +36,7 @@ date: 2020-08-14 ## 文件修复过程 1. 执法记录仪是惠普的 DSJ 系列之一,拥有官方的桌面管理工具,通过阅读说明书发现连接记录仪需要禁用驱动程序签名强制,具体操作可以 Google。 -2. 连接执法记录仪,登录软件,进入U盘模式。 +2. 连接执法记录仪,登录软件,进入 U 盘模式。 3. 通过使用数据恢复软件,查找到近两年的视频文件。 4. 恢复视频文件,发现视频文件无法打开。 5. 猜测视频文件头可能损坏,使用视频修复工具修复。 @@ -58,4 +61,3 @@ date: 2020-08-14 希望大家多了解一下相关的知识,务必不要让自己的文件损毁。我之前一块 2T 移动硬盘坏掉了给我心疼的,心疼着心疼着我还是没想起来里面到底存了啥哈哈哈。 > 硬盘有价、数据无价! - diff --git a/blog/新冠笔记.md b/Blog/新冠笔记.md similarity index 90% rename from blog/新冠笔记.md rename to Blog/新冠笔记.md index f1c009a5..505c3b62 100644 --- a/blog/新冠笔记.md +++ b/Blog/新冠笔记.md @@ -1,12 +1,16 @@ --- title: 新冠笔记 -description: 新冠笔记 +description: 我和身边亲朋好友感染新冠的详细过程,总结了新冠病毒的症状和应对方法。 keywords: -- 新冠笔记 -tags: -- 日记 + - 新冠病毒 + - 感染 + - 治疗 + - 预测 + - 帮助 +tags: + - 生活/随笔 authors: -- 7Wate + - 7Wate date: 2022-12-27 --- @@ -40,7 +44,7 @@ date: 2022-12-27 新冠绝对不是普通的感冒,并且从发烧第一天算起最少需要 15 天左右的时间恢复,切勿盲目自信乱得瑟!(个人主观体验) -新冠不存在任何特效药,发烧超过 38.5°吃布洛芬类降温止痛药是最好的选择,同时多喝热水除此之外没有任何直接有效的办法。(硬抗的有效方法) +新冠不存在任何特效药,发烧超过 38.5° 吃布洛芬类降温止痛药是最好的选择,同时多喝热水除此之外没有任何直接有效的办法。(硬抗的有效方法) 新冠确诊 3 - 5 天反复发烧不退,建议直接去医院做肺部 CT 并且抽血化验。切勿盲目相信社区诊所,大部分社区诊所只会一味的打糖皮质激素和抗生素。(咨询过医师朋友) @@ -54,4 +58,4 @@ date: 2022-12-27 现如今的大环境下,我们也没有任何选择的权力去拒绝感染。只有平时多运动,保持良好情绪,多喝牛奶多吃鸡蛋开心快乐每一天才是最有效的。如果各位博友有需要布洛芬,N95,抗原等,可以无偿友情代买。虽然不保证时刻有货,但是工作原因可以第一时间一手拿货。 -如果有需要的可以直接留言或者邮箱联系我,望安康! \ No newline at end of file +如果有需要的可以直接留言或者邮箱联系我,望安康! diff --git a/blog/新手村村长.md b/Blog/新手村村长.md similarity index 91% rename from blog/新手村村长.md rename to Blog/新手村村长.md index e9f8601d..2bc49879 100644 --- a/blog/新手村村长.md +++ b/Blog/新手村村长.md @@ -1,17 +1,20 @@ --- title: 新手村村长 -description: 新手村村长 +description: 从公司、部门和工作三个方面,分享了我作为新人应该如何度过新手村阶段的建议。我提到了要熟悉公司信息,与领导同事保持良好关系,并且要记笔记、做计划,逐步掌握工作内容。我还表示,工作是为了生活,不要内卷和过度奉献。 keywords: -- 工作 -- 经验 -tags: -- 工作 + - 新手村 + - 公司 + - 部门 + - 工作 + - 计划 + - 建议 +tags: + - 工作/经验 authors: -- 7Wate + - 7Wate date: 2022-07-19 --- - 最近在带新员工,也是再记录总结一下,我们应该如何度过新手村?想想去年这个时候俺也是小白,没想到今年就开始带新员工了。内容主要偏向于技术岗位,各抒己见欢迎来怼,不说废话,赶紧上车。😏 ## 公司 @@ -70,4 +73,4 @@ date: 2022-07-19 杜绝内卷、杜绝自杀式奉献从你我做起,全世界的无产阶级联合起来,世界终将属于我们。 -![无产阶级](https://static.7wate.com/img/2022/07/11/3d7269b20b6e3.png) \ No newline at end of file +![无产阶级](https://static.7wate.com/img/2022/07/11/3d7269b20b6e3.png) diff --git a/blog/早起、阅读、写作、运动、冥想.md b/Blog/早起、阅读、写作、运动、冥想.md similarity index 96% rename from blog/早起、阅读、写作、运动、冥想.md rename to Blog/早起、阅读、写作、运动、冥想.md index 78c170ce..b278f6cb 100644 --- a/blog/早起、阅读、写作、运动、冥想.md +++ b/Blog/早起、阅读、写作、运动、冥想.md @@ -1,16 +1,17 @@ --- title: 早起、冥想、阅读、写作、运动 -description: 早起、冥想、阅读、写作、运动 +description: 对周岭提出的改变人生的五件事「早起」、「冥想」、「阅读」、「写作」、「运动」的感悟和心得。 keywords: -- 早起 -- 阅读 -- 写作 -- 运动 -- 冥想 -tags: -- 日记 + - 早起 + - 阅读 + - 写作 + - 运动 + - 冥想 + - 改变 +tags: + - 成长/个人 authors: -- 7Wate + - 7Wate date: 2023-03-10 --- diff --git a/blog/星光不问赶路人.md b/Blog/星光不问赶路人.md similarity index 94% rename from blog/星光不问赶路人.md rename to Blog/星光不问赶路人.md index d6ed6ff6..51236986 100644 --- a/blog/星光不问赶路人.md +++ b/Blog/星光不问赶路人.md @@ -1,13 +1,19 @@ --- title: 星光不问赶路人 -description: 星光不问赶路人 +description: 我最近一个月的生活点滴。首先是辞职后艰难的找工作过程,经过面试终于找到了新的工作。入职后适应了新的环境,认识了新的同事。业余时间和同事外出旅行拍照,去了洛阳和老君山,看了日出日落,拍了不少美照。 keywords: -- 工作 -- 成长 -tags: -- 工作 + - 工作 + - 面试 + - 同事 + - 旅行 + - 洛阳 + - 老君山 +tags: + - 游记/洛阳 + - 游记/老君山 + - 摄影/作品 authors: -- 7Wate + - 7Wate date: 2021-04-07 --- diff --git a/blog/是微风、是晚霞、是来日方长.md b/Blog/是微风、是晚霞、是来日方长.md similarity index 79% rename from blog/是微风、是晚霞、是来日方长.md rename to Blog/是微风、是晚霞、是来日方长.md index f2cc1373..93b9319f 100644 --- a/blog/是微风、是晚霞、是来日方长.md +++ b/Blog/是微风、是晚霞、是来日方长.md @@ -1,17 +1,19 @@ --- title: 是微风、是晚霞、是来日方长 -description: 是微风、是晚霞、是来日方长 +description: 在周末骑摩托车进行了一次长途骑行,行程包括购买酷酷的眼镜、回到大学校园、享受湖边美食和音乐表演,以及被交警拦截的刺激经历。 keywords: -- 感情 -tags: -- 日记 + - 摩托车 + - 骑行 + - 大学 + - 交警 + - 拦截 +tags: + - 游记/巩义 authors: -- 7Wate + - 7Wate date: 2022-04-12 --- - - 自打增加了 D 证,就没有正儿八经的骑一次摩托车,心心念念的终于在这个周末搞定了。借了一辆小踏板,然后两天疯狂骑行了 300 km,属实有点疯狂。 去了郑铁那的小破街买了酷酷的眼镜 😎 diff --git a/blog/最近半年的生活.md b/Blog/最近半年的生活.md similarity index 88% rename from blog/最近半年的生活.md rename to Blog/最近半年的生活.md index 728c9c60..01b6950d 100644 --- a/blog/最近半年的生活.md +++ b/Blog/最近半年的生活.md @@ -1,12 +1,16 @@ --- title: 最近半年的生活 -description: 最近半年的生活 +description: 时隔半年更新的生活日记,记录了作者从二月到六月这半年的生活点滴。 keywords: -- 最近半年的生活 -tags: -- 日记 + - 生活 + - 日记 + - 婚礼 + - 装修 + - 照片 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2023-05-19 --- @@ -20,7 +24,7 @@ date: 2023-05-19 ![大门](https://static.7wate.com/img/2023/05/19/99e176dd0c7ec.png) -还有就是老朋友装修的房子,我滴妈;那个门真的是巨大哈哈哈。无敌了,小偷来了都望门生畏哈哈哈。不过自己设计装修真的很nice,老朋友父亲全权设计,超级多人性化的地方真的是让人爱了。我对于装修第一要求就是住着舒服就行,很多反人类的设计真的是恼火。毕竟房子是用来住的,不是用来看的 ~ +还有就是老朋友装修的房子,我滴妈;那个门真的是巨大哈哈哈。无敌了,小偷来了都望门生畏哈哈哈。不过自己设计装修真的很 nice,老朋友父亲全权设计,超级多人性化的地方真的是让人爱了。我对于装修第一要求就是住着舒服就行,很多反人类的设计真的是恼火。毕竟房子是用来住的,不是用来看的 ~ ![动物园](https://static.7wate.com/img/2023/05/19/91f9250babfd3.jpg) @@ -40,7 +44,7 @@ date: 2023-05-19 ![大哥结婚](https://static.7wate.com/img/2023/05/19/47f91474ddc62.jpg) -大伯家的哥哥,30岁历经坎坷可终于结婚了。这一大家子一路以来太多烦恼,太多痛苦,太多的太多都随风化成雨吧。 +大伯家的哥哥,30 岁历经坎坷可终于结婚了。这一大家子一路以来太多烦恼,太多痛苦,太多的太多都随风化成雨吧。 --- @@ -80,4 +84,4 @@ date: 2023-05-19 看着难受是吧?说实话我写着也挺难受的,磨磨唧唧的写了两个月,哎西吧。感觉真的写作方法有问题,需要系统性的学习一下写作方法了! -2023年下半年,冲冲冲!! +2023 年下半年,冲冲冲!! diff --git a/blog/最近在折腾什么…….md b/Blog/最近在折腾什么…….md similarity index 79% rename from blog/最近在折腾什么…….md rename to Blog/最近在折腾什么…….md index 6d2375e0..d985fe4a 100644 --- a/blog/最近在折腾什么…….md +++ b/Blog/最近在折腾什么…….md @@ -1,13 +1,16 @@ --- title: 最近在折腾什么…… -description: 最近在折腾什么…… +description: 最近参加了几场好友的婚礼,感受到了婚礼的温馨和仪式感。同时也在学习和准备考试,希望能取得好成绩。抽空也在整理个人网站,使它更简洁实用。总体来说,生活和工作都在积极推进中。 keywords: -- 生活 -- 日记 -tags: -- 日记 + - 生活 + - 日记 + - 婚礼 + - 网站 + - 学习 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2022-01-21 --- @@ -16,6 +19,7 @@ date: 2022-01-21 ## 参加婚礼 郑州疫情散去便迎来了婚礼黄金周,参加了 7 场婚礼,我的天哪哈哈哈。有发小的、同事的、同学的,看的我也是心痒痒。 + 多学习多了解婚礼仪式的进行,得到了如下总结: - 司仪很重要!!! @@ -31,14 +35,21 @@ date: 2022-01-21 ## 网站 最近又折腾了一下网站、服务器,弃繁就简将是以后一贯的宗旨。 + 弃用了 typecho,换成了 halo,以实际需求为宗旨。 + 整合归纳了个人知识库,更系统化,结构化。 + 其他的暂时也没了,有时间会细说分享一下 ~ ## 疫情 邪魔退散! + 邪魔退散! + 💪💪💪 + 平时生活中一忙,博客就更的少了。 + 马上迎来春节了,祝大家新年新气象,新年赚大钱!🎉🎉🎉 diff --git a/blog/最近的生活.md b/Blog/最近的生活.md similarity index 86% rename from blog/最近的生活.md rename to Blog/最近的生活.md index 642543d9..694b15ce 100644 --- a/blog/最近的生活.md +++ b/Blog/最近的生活.md @@ -1,17 +1,18 @@ --- title: 最近的生活 -description: 最近的生活 +description: 简短的生活日记,记录了作者最近一个月的生活点滴。 keywords: -- 生活 -- 日记 -tags: -- 日记 + - 疫情 + - 封控 + - 单位生活 + - 工作学习 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2022-05-25 --- - 又是一个月没写博客了,比较随心所欲。不过还是简单流水账记录一下最近的事情 ~ 五一假期都没能完整的过完,就通知要静态管理……大半夜连忙跑到单位,毕竟单位有吃有喝还能工作忙起来。在家待半个月怕是都待傻了。 diff --git a/blog/月季到了.md b/Blog/月季到了.md similarity index 87% rename from blog/月季到了.md rename to Blog/月季到了.md index e2fad55f..edc7848c 100644 --- a/blog/月季到了.md +++ b/Blog/月季到了.md @@ -1,13 +1,15 @@ --- title: 月季到了 -description: 月季到了 +description: 我种花的日志。我心心念念了很久的月季花终于到了,选购了月季和绣球花 keywords: -- 月季 -- 花园 -tags: -- 花园 + - 月季 + - 绣球花 + - 除草 + - 种菜 +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2022-04-19 --- diff --git a/blog/注定不平凡的一年.md b/Blog/注定不平凡的一年.md similarity index 97% rename from blog/注定不平凡的一年.md rename to Blog/注定不平凡的一年.md index cb3196b7..142503fa 100644 --- a/blog/注定不平凡的一年.md +++ b/Blog/注定不平凡的一年.md @@ -2,12 +2,13 @@ title: 注定不平凡的一年 description: 注定不平凡的一年 keywords: -- 生活 -- 感悟 -tags: -- 感悟 + - 生活 + - 纪念 + - 感悟 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2020-12-13 --- diff --git a/blog/浅谈一下自己折腾的网站.md b/Blog/浅谈一下自己折腾的网站.md similarity index 89% rename from blog/浅谈一下自己折腾的网站.md rename to Blog/浅谈一下自己折腾的网站.md index 34ab60f7..8fecee07 100644 --- a/blog/浅谈一下自己折腾的网站.md +++ b/Blog/浅谈一下自己折腾的网站.md @@ -1,16 +1,18 @@ --- title: 浅谈一下自己折腾的网站 -description: 浅谈一下自己折腾的网站 +description: 我折腾了好久的网站和服务器,最终决定弃繁就简,以使用和需求为出发点。 keywords: -- 网站 -tags: -- 网站 + - 网站 + - Bitwarden + - Gitea + - NextCloud +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-02-14 --- - 折腾了好久网站了,也折腾了好久的服务器了。网络拓扑图也不想画了,总之就是弃繁就简了,一切以使用、需求为出发点。 ## 网站 diff --git a/blog/浅谈个人服务器架构.md b/Blog/浅谈个人服务器架构.md similarity index 88% rename from blog/浅谈个人服务器架构.md rename to Blog/浅谈个人服务器架构.md index 3e9a4f17..58f567fc 100644 --- a/blog/浅谈个人服务器架构.md +++ b/Blog/浅谈个人服务器架构.md @@ -1,17 +1,18 @@ --- title: 浅谈个人服务器架构 -description: 浅谈个人服务器架构 +description: 在大学时购买了第一台服务器,并从最初的腾讯云学生主机搭建了一个WordPress博客网站开始,到后来升级服务器配置、更换域名和博客系统,以及解决了多个服务器运维和性能方面的问题。 keywords: -- 服务器 -- 架构 -tags: -- 服务器 + - 服务器 + - 腾讯云 + - 学生主机 + - 服务器架构 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2020-07-08 --- - 大一上学年购买了第一台服务器,并且搭建了网站。当时购买的腾讯云学生主机,搭建了一个 WordPress 个人博客网站。后续购买并备案了域名,服务器系统也由 Windows 转为 Linux,也第一次接触到了服务器管理面板…… 直至今天,服务器配置也是由当初的 1 核心 1G 内存 1M 带宽升级到 2 核心 4G 内存 5M 带宽;博客也由 WordPress 更换成 Typecho。熬了数不清的夜晚,折腾了不少的时间,经过不断地打怪升级,经验宝宝也含泪成为了天线宝宝。简单总结了个人服务器的痛点如下: @@ -37,7 +38,7 @@ date: 2020-07-08 ### 服务器性能低下 -在我们只有学生云主机的情况下,推荐服务器仅部署一个网站;推荐使用[宝塔云面板](https://www.bt.cn/),方便整个服务器的运维和网站的部署。 +在我们只有学生云主机的情况下,推荐服务器仅部署一个网站;推荐使用 [宝塔云面板](https://www.bt.cn/),方便整个服务器的运维和网站的部署。 ### 服务器续费太贵 diff --git a/blog/济南呀济南的泰山之旅.md b/Blog/济南呀济南的泰山之旅.md similarity index 92% rename from blog/济南呀济南的泰山之旅.md rename to Blog/济南呀济南的泰山之旅.md index ed9d4d73..7030bb3f 100644 --- a/blog/济南呀济南的泰山之旅.md +++ b/Blog/济南呀济南的泰山之旅.md @@ -1,20 +1,21 @@ --- title: 济南呀济南的泰山之旅 -description: 济南呀济南的泰山之旅 +description: 记录了爬泰山的游记。从济南出发,途径大明湖,感觉一般。夜间登山人很多,中途分散,独自登顶。虽然看了日出,但整体感觉一般,没有想象中惊艳,可能因为攻略不充分,也没看到云海。总体此行没太多波澜,主要是记录过程。 keywords: -- 济南 -- 泰山 -- 旅游 -tags: -- 旅游 + - 济南大明湖 + - 夜爬泰山 + - 日出 +tags: + - 游记/济南 + - 游记/泰山 authors: -- 7Wate + - 7Wate date: 2021-04-30 --- 啦啦啦~~~是的、没错我又去爬泰山了。今年中岳嵩山、西岳华山、东岳泰山都已经搞定!接下来就是南岳衡山和北岳恒山了,游记一类的博文,很多时候写的都是流水账……其实我也想挂几张照片完事哈哈哈。 -## 赶路 ing +## 赶路 Ing 出发前,大家是真的好墨迹墨迹,连我平时磨磨唧唧的都感觉是真的墨迹。我们五个人,她们四个没啥事,我是最晚的 6 点下班。然后磨磨唧唧的搞到 8 点才上高速,极其平淡的 5 个小时路程,真的是极其平淡的 5 个小时。一路上我开车,然后她们都是死气沉沉的…… @@ -26,7 +27,7 @@ date: 2021-04-30 最后感觉都有点麻木了,用一句话表达我们酒后的状态! -山东菏泽曹县,牛逼 666 我嘞宝贝!!!(原谅我等粗俗之人哈哈h) +山东菏泽曹县,牛逼 666 我嘞宝贝!!!(原谅我等粗俗之人哈哈 h) ## 济南呀济南 diff --git a/blog/涝疫结合.md b/Blog/涝疫结合.md similarity index 91% rename from blog/涝疫结合.md rename to Blog/涝疫结合.md index a85083e8..03f50fda 100644 --- a/blog/涝疫结合.md +++ b/Blog/涝疫结合.md @@ -1,17 +1,19 @@ --- title: 涝疫结合 -description: 涝疫结合 +description: 在2021年的上半年,我经历了酷暑、洪水和疫情等一系列天灾人祸,特别是郑州的洪水事件。 keywords: -- 涝疫 -- 郑州 -tags: -- 日记 + - 郑州 + - 洪水 + - 疫情 + - 酷暑 + - 天灾 +tags: + - 记忆/郑州 authors: -- 7Wate + - 7Wate date: 2021-08-02 --- - 2021 年上半年已过,迎接下半年的便是酷暑、洪水、疫情,天灾人祸,地处郑州的我最近也是经历蛮多,触目惊心…… ## 酷暑 diff --git a/blog/独立生活能力清单.md b/Blog/独立生活能力清单.md similarity index 86% rename from blog/独立生活能力清单.md rename to Blog/独立生活能力清单.md index 738392b6..3f92eb7a 100644 --- a/blog/独立生活能力清单.md +++ b/Blog/独立生活能力清单.md @@ -1,12 +1,13 @@ --- title: 独立生活能力清单 -description: 独立生活能力清单 +description: 这几年一直自己居住,通过实践锻炼独立生活能力的分享 keywords: -- 独立生活能力清单 -tags: -- 生活 + - 独立生活 + - 膳食指南 +tags: + - 生活/经验 authors: -- 7Wate + - 7Wate date: 2023-07-28 --- diff --git a/blog/球鞋日记.md b/Blog/球鞋日记.md similarity index 94% rename from blog/球鞋日记.md rename to Blog/球鞋日记.md index b99470a4..a867a2f7 100644 --- a/blog/球鞋日记.md +++ b/Blog/球鞋日记.md @@ -1,17 +1,19 @@ --- title: 球鞋日记 -description: 球鞋日记 +description: 篮球曾是我的热爱,梦想扣篮。然而,如今这份热情已经飘散如烟。 keywords: -- 球鞋 -- 篮球 -tags: -- 日记 + - 篮球 + - 篮球鞋 + - 李宁 + - Nike + - 扣篮 +tags: + - 记忆/高中 authors: -- 7Wate + - 7Wate date: 2020-09-21 --- - 扣篮是每个男孩少年时的梦,我也不例外。曾经刻到骨子里的热爱,现如今也都飘散如烟。 ## 李宁 音速三 鸳鸯色 diff --git a/blog/申请 Jetbrains 开源项目授权.md b/Blog/申请 Jetbrains 开源项目授权.md similarity index 89% rename from blog/申请 Jetbrains 开源项目授权.md rename to Blog/申请 Jetbrains 开源项目授权.md index 2123f6b1..5395239d 100644 --- a/blog/申请 Jetbrains 开源项目授权.md +++ b/Blog/申请 Jetbrains 开源项目授权.md @@ -1,22 +1,19 @@ --- title: 申请 Jetbrains 开源项目授权 -description: 申请 Jetbrains 开源项目授权 +description: 如何通过拥有一个开源项目来申请Jetbrains正版授权。作者解释了申请条件和申请过程,还分享了自己的申请经历和结果,最后提醒读者这种授权不能用于商业项目。 keywords: -- Jetbrains -- 授权 -tags: -- 开源 + - Jetbrains + - 正版授权 + - 开源项目 +tags: + - 生产力工具/Jetbrains authors: -- 7Wate + - 7Wate date: 2021-02-26 --- - - 作为宇宙第二 IDE:Jetbrains,业内很多 ITer 肯定都了解一二。不过相对于宇宙第一 VS,Jetbrains 严格的正版授权和高昂的售价,让很多人望而却步。不过也肯定有不少细心的小伙伴发现了,如果你拥有一个开源项目便可以申请 Jetbrains 正版的授权!已经申请成功的我来分享一下过程! - - 很多使用 Jetbrains 系类产品的小伙伴肯定知道学生和老师是可以通过 .edu 邮箱免费获得授权,不过很多小伙伴毕业了才发现,更是悔恨相见恨晚。但 Jetbrains 提供了很多优惠,其中一项便是开源项目授权。 ## 申请条件 @@ -62,6 +59,3 @@ date: 2021-02-26 记住,梦想是不分大小的,每个拥有梦想的小伙伴也都是值得尊敬的! 不过申请成功的小伙伴谨记,**此授权是不可以用在商业项目上的!**所以拿到公司用是不可以的,不过通过自己努力得到的正版授权一定别有一番意义! - - - diff --git a/blog/电脑坏了,我换了 Ubuntu.md b/Blog/电脑坏了,我换了 Ubuntu.md similarity index 57% rename from blog/电脑坏了,我换了 Ubuntu.md rename to Blog/电脑坏了,我换了 Ubuntu.md index bdd0330b..80478050 100644 --- a/blog/电脑坏了,我换了 Ubuntu.md +++ b/Blog/电脑坏了,我换了 Ubuntu.md @@ -1,51 +1,53 @@ --- title: 电脑坏了,我换了 Ubuntu -description: 电脑坏了,我换了 Ubuntu +description: 一篇分享从 Windows 切换到 Ubuntu 的心路历程。 keywords: - Linux - Ubunt + - 生态 + - 经验 tags: - - Linux + - Linux/Ubuntu authors: - 7Wate date: 2023-09-28 --- -使用了将近十年的笔记本,前段时间因为太热,机械硬盘掉盘了。不过还有一块固态硬盘是装的系统,但是 Windows 系统却崩了,许多软件也都打不开了。尽管这台笔记本已经快十年了,但它的32GB 内存和 1TB 固态硬盘仍然非常给力。然而,日常开发需要使用 Docker 和 WSL 以及 Jetbrains 的全家桶,32GB 的内存在 Windows 系统下仍然感觉不够,经常会用满…… +使用了将近十年的笔记本,前段时间因为太热,机械硬盘掉盘了。不过还有一块固态硬盘是装的系统,但是 Windows 系统却崩了,许多软件也都打不开了。尽管这台笔记本已经快十年了,但它的 32GB 内存和 1TB 固态硬盘仍然非常给力。然而,日常开发需要使用 Docker 和 WSL 以及 Jetbrains 的全家桶,32GB 的内存在 Windows 系统下仍然感觉不够,经常会用满…… 想想以前,我总是特别爱重装系统,现在真的懒得折腾了。对于 Windows 11 也不太想用,而 Windows 12 似乎还很远。所幸就圆了自己曾将想用 Linux 的梦。 -不得不说,现在的Linux桌面生态确实与过去大不相同。 +不得不说,现在的 Linux 桌面生态确实与过去大不相同。 我也犹豫过 Linux 众多发行版本选哪个,不过最终还是坚定的选择了 Ubuntu。我也推荐一个 [distrochooser.de](https://distrochooser.de/zh-hans) 网站,可以帮助你结合自己需求选择最合适的发行版本。 -#### 第一个坑:关于电脑硬件驱动的问题 +## 第一个坑:关于电脑硬件驱动的问题 这个是一定要清楚的,虽然 Linux 是开源的,但一些硬件驱动却是闭源的。如果你的电脑硬件比较新,而你选择了 debian,折腾起来会有些许麻烦。甚至有些硬件例如 Windows 的指纹解锁和 LED 发光键盘可能根本没有驱动。 ![Ubuntu 驱动](https://static.7wate.com/img/2023/09/28/881811002c1ce.png) -在这方面,Ubuntu 做得非常好,系统自带的`ubuntu-drivers`能够傻瓜式安装驱动。 +在这方面,Ubuntu 做得非常好,系统自带的 `ubuntu-drivers` 能够傻瓜式安装驱动。 -#### 第二个坑:关于更新频率的问题 +## 第二个坑:关于更新频率的问题 ![Ubuntu 更新](https://static.7wate.com/img/2023/09/28/ad3f9ace9a2c1.png) -在使用了将近十年的笔记本后,它在不久前因为过热而停止运作,机械硬盘也出现了问题。虽然我还有一块装有系统的固态硬盘,但Windows系统却崩溃了,许多软件也无法打开。尽管这台笔记本已经快十年了,但它的32GB内存和1TB固态硬盘仍然非常强劲。然而,在日常的开发工作中,我常常需要使用Docker、WSL以及Jetbrains的全家桶,即便如此,32GB的内存在Windows系统下仍然感觉不够用,经常会用满…… +在使用了将近十年的笔记本后,它在不久前因为过热而停止运作,机械硬盘也出现了问题。虽然我还有一块装有系统的固态硬盘,但 Windows 系统却崩溃了,许多软件也无法打开。尽管这台笔记本已经快十年了,但它的 32GB 内存和 1TB 固态硬盘仍然非常强劲。然而,在日常的开发工作中,我常常需要使用 Docker、WSL 以及 Jetbrains 的全家桶,即便如此,32GB 的内存在 Windows 系统下仍然感觉不够用,经常会用满…… -回想起以前,我总是喜欢重新安装系统,但现在真的感觉懒得折腾了。对于Windows 11我并不太感兴趣,而Windows 12似乎还遥不可及。幸运的是,这让我终于实现了使用Linux的梦想。不得不说,现在的Linux桌面生态确实与过去大不相同。 +回想起以前,我总是喜欢重新安装系统,但现在真的感觉懒得折腾了。对于 Windows 11 我并不太感兴趣,而 Windows 12 似乎还遥不可及。幸运的是,这让我终于实现了使用 Linux 的梦想。不得不说,现在的 Linux 桌面生态确实与过去大不相同。 -在选择Linux的众多发行版本时,我也曾犹豫不决,但最终还是坚定地选择了Ubuntu。同时,我也想推荐一个网站 [distrochooser.de](https://distrochooser.de/zh-hans),它可以帮助你根据自己的需求选择最合适的发行版本。 +在选择 Linux 的众多发行版本时,我也曾犹豫不决,但最终还是坚定地选择了 Ubuntu。同时,我也想推荐一个网站 [distrochooser.de](https://distrochooser.de/zh-hans),它可以帮助你根据自己的需求选择最合适的发行版本。 -#### 第一个挑战:电脑硬件驱动的问题 +## 第一个挑战:电脑硬件驱动的问题 -这是一个必须要清楚的问题。虽然Linux是开源的,但一些硬件驱动却是闭源的。如果你的电脑硬件比较新,而你选择了debian,可能会遇到一些麻烦。甚至有些硬件例如Windows的指纹解锁和LED发光键盘可能根本没有驱动。 +这是一个必须要清楚的问题。虽然 Linux 是开源的,但一些硬件驱动却是闭源的。如果你的电脑硬件比较新,而你选择了 debian,可能会遇到一些麻烦。甚至有些硬件例如 Windows 的指纹解锁和 LED 发光键盘可能根本没有驱动。 ![Ubuntu 驱动](https://static.7wate.com/img/2023/09/28/881811002c1ce.png) -在这方面,Ubuntu做得非常好,系统自带的`ubuntu-drivers`能够傻瓜式安装驱动。 +在这方面,Ubuntu 做得非常好,系统自带的 `ubuntu-drivers` 能够傻瓜式安装驱动。 -#### 第二个挑战:更新频率的问题 +## 第二个挑战:更新频率的问题 ![Ubuntu 更新](https://static.7wate.com/img/2023/09/28/ad3f9ace9a2c1.png) @@ -53,32 +55,32 @@ Linux 的发行版本众多,更新频率主要分为两种:定期更新和 毕竟 Linux 可是出了名的稳定! -#### 第三个坑:关于桌面环境的问题 +## 第三个坑:关于桌面环境的问题 ![三台显示器](https://static.7wate.com/img/2023/09/28/1024df0087ce9.png) 在 Linux 中,一切都是文件,桌面运行环境也只是一个软件包。可以根据自己的喜好选择喜欢的桌面环境,不必再担心内存占用的问题。毕竟现在是 2023 年了,你的电脑不会连 8GB 运行内存都没有吧? -#### 第四个坑:关于软件生态的问题 +## 第四个坑:关于软件生态的问题 -这是一个非常重要的问题。首先,我们可以将软件生态分为国内和国外两种情况。从我的主观感受来看,国外的主流软件有90%都有Linux客户端,而国内的主流软件只有40%有Linux客户端。不过,针对国内的特殊情况,deepin结合wine适配了90%的国内主流软件,虽然使用起来有些不足,但基本上已经够用了。 +这是一个非常重要的问题。首先,我们可以将软件生态分为国内和国外两种情况。从我的主观感受来看,国外的主流软件有 90% 都有 Linux 客户端,而国内的主流软件只有 40% 有 Linux 客户端。不过,针对国内的特殊情况,deepin 结合 wine 适配了 90% 的国内主流软件,虽然使用起来有些不足,但基本上已经够用了。 -接下来,只需要使用以下两种方法,你就可以解决80%的常用软件问题。 +接下来,只需要使用以下两种方法,你就可以解决 80% 的常用软件问题。 -- [deepin-wine](https://github.com/zq1997/deepin-wine):Debian/Ubuntu上最快的QQ/微信安装方式,作者提供了简单,快捷的使用 deepin 的 wine 应用方法。 +- [deepin-wine](https://github.com/zq1997/deepin-wine):Debian/Ubuntu 上最快的 QQ/微信安装方式,作者提供了简单,快捷的使用 deepin 的 wine 应用方法。 - [Flathub](https://flathub.org/zh-Hans):一个开源的应用程序分发平台,旨在为 Linux 操作系统提供简便的软件安装和更新方式。它基于 Flatpak 技术,Flatpak 是一种容器化的应用程序打包和分发格式,可以在不同的 Linux 发行版上运行。 -#### 第五个坑:关于打游戏的问题 +## 第五个坑:关于打游戏的问题 ![Steam](https://static.7wate.com/img/2023/09/28/5bb7195bb0125.png) 也许,你可能还想玩游戏,比如玩玩《饥荒》、《缺氧》或是一些 3A 大作。没关系,安装了 Linux 并不意味着你必须放弃游戏,Steam 已经为你准备好了一切。 -#### 心得体会 +## 心得体会 说实话,从多年的 Windows 切换到 Ubuntu,阵痛感确实非常强烈。一开始使用时,很多地方都感觉不舒服,特别是一些小细节的折腾会让你感觉发狂,例如输入法和显卡驱动的问题。但是,一旦你度过了这个阵痛期,你会发现一切都变得非常舒适,简直是完美! -首先,老笔记本又焕发了新生,32GB 的内存根本用不完。各种开发工具只需要一个`apt install`命令就能安装,系统运行非常流畅,特别是字体渲染,Windows 字体优化的跟 💩 一样。 +首先,老笔记本又焕发了新生,32GB 的内存根本用不完。各种开发工具只需要一个 `apt install` 命令就能安装,系统运行非常流畅,特别是字体渲染,Windows 字体优化的跟 💩 一样。 然而,Ubuntu 在很多细节上还是不如 Windows 和 Mac。我也使用 Mac,Mac 的体验确实非常好,但高配置的 Mac 对于我的荷包来说实在是太贵了,而且内存的价格简直比黄金还贵。 diff --git a/blog/番茄开花啦 ~.md b/Blog/番茄开花啦 ~.md similarity index 89% rename from blog/番茄开花啦 ~.md rename to Blog/番茄开花啦 ~.md index 77614f6c..8d8eb08a 100644 --- a/blog/番茄开花啦 ~.md +++ b/Blog/番茄开花啦 ~.md @@ -1,20 +1,21 @@ --- title: 番茄开花啦 ~ -description: 番茄开花啦 ~ +description: 五一假期因疫情管控,提前浇灌了菜园。解封后看到菜园还活着,除草施肥。菜蔬生长良好,瓜苗长势喜人,西红柿结果。小菜园里各作物成长明显,等待端午好好疏理。 keywords: -- 菜园 -- 番茄 -tags: -- 花园 + - 疫情 + - 菜园 + - 除草 + - 浇水 +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2022-05-31 --- - 当下没有诗和远方,只能更新一下我的小菜园了。现在的小菜园已经颇具规模啦,吃上可口的蔬菜已经指日可待了,奥里给!!! -## 5月3日 +## 5 月 3 日 @@ -28,7 +29,7 @@ date: 2022-05-31 临走还采摘了一束月季用来插花,美极了 ~ -## 5月13日 +## 5 月 13 日 终于终于部分区域解封了,这半个月算是在单位待麻木了…… @@ -52,13 +53,13 @@ date: 2022-05-31 周日上班前,我又去清理了一下杂草。清理干净舒服多了 ~ -## 5月18日 +## 5 月 18 日 ![浇水](https://static.7wate.com/img/2022/05/31/e79b31c422154.jpg) 工作日期间,怕旱死就又跑来浇了一次水,看这样子又需要漫灌式浇水了。 -## 5月22日 +## 5 月 22 日 ![浇水](https://static.7wate.com/img/2022/05/31/cad5cbe7e2b3f.jpg) @@ -70,7 +71,7 @@ date: 2022-05-31 也是再次深刻体验到种地真的好辛苦,面临这些灾难真的是无能为力。 -## 5月25日 +## 5 月 25 日 ![铺水带](https://static.7wate.com/img/2022/05/31/2e92a6f49d634.jpg) @@ -80,7 +81,7 @@ date: 2022-05-31 这次有经验,刚好天黑之前搞定! -## 5月29日 +## 5 月 29 日 ![瓜苗](https://static.7wate.com/img/2022/05/31/0809c3523c598.jpg) diff --git a/blog/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md b/Blog/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md similarity index 81% rename from blog/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md rename to Blog/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md index 0f3c7680..b95921ca 100644 --- a/blog/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md +++ b/Blog/看 V2Ex 的 ChatGPT 老哥浅谈办公室政治.md @@ -1,12 +1,12 @@ --- title: 看 V2Ex 的 ChatGPT 老哥浅谈办公室政治 -description: 看 V2Ex 的 ChatGPT 老哥浅谈办公室政治 +description: 前段时间 V2EX 有几篇典型的职场政治贴,值得反思 keywords: - V2Ex - - 职场 - - 政治 + - 职场政治 + - 人际关系 tags: - - 职场心得 + - 工作/经验 authors: - 7Wate date: 2023-09-14 @@ -18,80 +18,80 @@ date: 2023-09-14 1. [我给公司部署了一套 ChatGPT, 老板说没有目的性, 给我这件事的绩效打了个 C, 如何评价这一现象?](https://www.v2ex.com/t/963224#reply246) -> 我主动给公司部署了一套 ChatGPT, 也给公司所有员工展开 AI 及 ChatGPT 的入门使用培训, 希望大家能更好地利用 AI 工具 来提高工作效率, 现在每天不同岗位提问的数量有 200~400 条左右(公司有 100 人左右), 老板自己也用它来翻译各种文档和写各种文档的大纲等等, 结果老板给我的月度绩效考核时说这件事没有目的性, 也没有对业务到底帮助多少的数据支撑, 就这件事本身给我打了个 C, 我心里是不服气的, 但不知道如何反驳, 如何评价我做的这件事以及老板对我的绩效考核? -> +> 我主动给公司部署了一套 ChatGPT, 也给公司所有员工展开 AI 及 ChatGPT 的入门使用培训, 希望大家能更好地利用 AI 工具 来提高工作效率, 现在每天不同岗位提问的数量有 200~400 条左右 (公司有 100 人左右), 老板自己也用它来翻译各种文档和写各种文档的大纲等等, 结果老板给我的月度绩效考核时说这件事没有目的性, 也没有对业务到底帮助多少的数据支撑, 就这件事本身给我打了个 C, 我心里是不服气的, 但不知道如何反驳, 如何评价我做的这件事以及老板对我的绩效考核? +> > 第 1 条附言 -> -> 补充点信息: 公司有 2 个老板, 给我打 C 的是二老板, 面试时候 2 个老板都面过我, 面完本来他们觉得我管理能力不行(我估计是 2 老板觉得的), 过了 1 个月后大老板加我微信, 又约我聊了下, 说他还是比较倾向于技术纯粹的人, 他说他是长沙人, 觉得"辣椒不管怎么样还是辣最重要", 于是我进这家公司了, 做技术经理, 进公司后归二老板管, 大老板比较闲云野鹤, 不怎么管公司内部具体事宜。 -> +> +> 补充点信息: 公司有 2 个老板, 给我打 C 的是二老板, 面试时候 2 个老板都面过我, 面完本来他们觉得我管理能力不行 (我估计是 2 老板觉得的), 过了 1 个月后大老板加我微信, 又约我聊了下, 说他还是比较倾向于技术纯粹的人, 他说他是长沙人, 觉得 " 辣椒不管怎么样还是辣最重要 ", 于是我进这家公司了, 做技术经理, 进公司后归二老板管, 大老板比较闲云野鹤, 不怎么管公司内部具体事宜。 +> > 我部署 ChatGPT 这件事, 也是大老板微信我说他朋友的公司用 ChatGPT 做了很多好玩的事, 当时我正好在研究自己部署 ChatGPT, 就和老板说了我打算给公司部署一套, 大老板给我了肯定和支持, 说 AI 优先, 逐步推广起来。等到周一我也和二老板说了,他没什么态度,就说试试看,后来我开展培训的时候大老板也来听了, 二老板没来听。 -2. [我就是上次给公司部署 ChatGPT 的, 今天被开了](https://www.v2ex.com/t/966243#reply585) +1. [我就是上次给公司部署 ChatGPT 的, 今天被开了](https://www.v2ex.com/t/966243#reply585) > 除了这件事, 还有另外一件也是我主动发现, 然后开发进行优化的事 -> +> > **背景:** 我发现投放部门每天每个人都要花费 1 个多小时去做重复劳动力的事, 并且做出来的月报数据不准确。 -> +> > **目标:** 开发 RPA 帮助投放部门释放生产力。 -> +> > **行动:**用 1 周的时间完成 RPA 的开发上线, 交付给投放小组使用 -> +> > **效果:** 用户给出的评价: 使用频率: 每天满意度: 非常满意响应速度: 非常快数据准确性: 非常准确 -> +> > “在查询日报、周报、月报及回本数据时,大大减少了人工查询成本,并且增加了 7 日、14 日、30 日数据情况,因此便于每日查看当日回本进度,便于投放把控投产及回本情况。” -> +> > 第 1 条附言 -> -> 这次来吐槽主要也是想快点找到工作, 就像我最后截图说的, 现在一个人养家, 压力大, 我想找架构师工作(我老婆也说我性格幼稚不成熟, 不适合做管理, 我个人自我评价也是对技术对人都是"赤子之心"), 开发经验 10 年, 坐标杭州, 各位 V 友如果有推荐的岗位, 不胜感激[抱拳] -> +> +> 这次来吐槽主要也是想快点找到工作, 就像我最后截图说的, 现在一个人养家, 压力大, 我想找架构师工作 (我老婆也说我性格幼稚不成熟, 不适合做管理, 我个人自我评价也是对技术对人都是 " 赤子之心 "), 开发经验 10 年, 坐标杭州, 各位 V 友如果有推荐的岗位, 不胜感激 [抱拳] +> > 第 2 条附言 -> +> > 回复各位网友我的岗位和职责: -> -> 1. 我的岗位是技术经理(技术负责人), 面试时候就说进来后所有技术都是我这边管理; 我想着既然是技术 leader, 就应该用技术服务于大家, 立好技术团队的旗帜; +> +> 1. 我的岗位是技术经理 (技术负责人), 面试时候就说进来后所有技术都是我这边管理; 我想着既然是技术 leader, 就应该用技术服务于大家, 立好技术团队的旗帜; > 2. 进来试用期就定了 2 个目标: -> -> 1). 制定技术团队人效框架(背景是二老板需要有一个相对客观的产出评估工具给所有员工打绩效), 我花了 2 周左右时间也做出了, 现在也在按这个框架管理所有的开发同学, 但是二老板后来说我没有继续跟进改进框架; -> 2). 研发 AI 智能客服机器人, 我们是 2c 的电商互联网公司, 所以客服团队人员也是较多的, 老板希望用 AI 来解决客服团队的效率问题, 当时定的计划是 8 月底 AI 回答采用率达到 90%, 其实这件事我就用了 v 友推荐的 dify 这个开源产品+gpt 的能力, 就做好了, 本身不需要写什么代码, 结果采用率已经到 95%以上了; 二老板说如果没有 gpt 怎么办, 那我说就是要自研模型, 需要算法工程师岗位来做公司内部模型这件事, 但是公司没有算法工程师, 招聘又迟迟没有结果, 于是这件事在二老板看来我就没有继续做下去了; -> -> 其实大家可以看出来, 如果只是这两件事, 我其实事情并不多(特别是技术上面), 所以想主动做点事, 想充分发挥自己的价值, 结果现在就这样了 -> +> +> 1). 制定技术团队人效框架 (背景是二老板需要有一个相对客观的产出评估工具给所有员工打绩效), 我花了 2 周左右时间也做出了, 现在也在按这个框架管理所有的开发同学, 但是二老板后来说我没有继续跟进改进框架; +> 2). 研发 AI 智能客服机器人, 我们是 2c 的电商互联网公司, 所以客服团队人员也是较多的, 老板希望用 AI 来解决客服团队的效率问题, 当时定的计划是 8 月底 AI 回答采用率达到 90%, 其实这件事我就用了 v 友推荐的 dify 这个开源产品 +gpt 的能力, 就做好了, 本身不需要写什么代码, 结果采用率已经到 95% 以上了; 二老板说如果没有 gpt 怎么办, 那我说就是要自研模型, 需要算法工程师岗位来做公司内部模型这件事, 但是公司没有算法工程师, 招聘又迟迟没有结果, 于是这件事在二老板看来我就没有继续做下去了; +> +> 其实大家可以看出来, 如果只是这两件事, 我其实事情并不多 (特别是技术上面), 所以想主动做点事, 想充分发挥自己的价值, 结果现在就这样了 +> > 第 3 条附言 -> -> 二老板喜欢否定和踩人, 这是公司员工基本都感受过的感觉, 很多人都怕和他开会, "我一开始真的以为自己没做好, 后来发现好像不是这样的, 而且就算下次我改进了, 他也不会说好的地方, 继续挑刺说我其他不好的地方", 这是其他同学的原话, 还有同学说我"直脾气, 只做事不做人,在这里吃亏的, 老板只喜欢听话的", 我脾气是真的直, 如果否定, 指责我时完全子虚乌有, 指鹿为马, 我会会上当场怼回去 -> +> +> 二老板喜欢否定和踩人, 这是公司员工基本都感受过的感觉, 很多人都怕和他开会, " 我一开始真的以为自己没做好, 后来发现好像不是这样的, 而且就算下次我改进了, 他也不会说好的地方, 继续挑刺说我其他不好的地方 ", 这是其他同学的原话, 还有同学说我 " 直脾气, 只做事不做人,在这里吃亏的, 老板只喜欢听话的 ", 我脾气是真的直, 如果否定, 指责我时完全子虚乌有, 指鹿为马, 我会会上当场怼回去 +> > 第 4 条附言 -> +> > 很多同学让我下掉我主动做的两个服务, 二老板昨天让 2 个开发来交接我这两个服务, 我没有拆, 不过..., 我也下掉了自己的 api-key -> +> > 第 5 条附言 -> -> 希望大家不要抓些敏感信息, 甚至去"定位"到公司或人, 这样可能对我不利, 我希望所有吐槽就在 V2 这个小圈子里消化掉, 拜托各位 V 友啦🙏🏻 -> +> +> 希望大家不要抓些敏感信息, 甚至去 " 定位 " 到公司或人, 这样可能对我不利, 我希望所有吐槽就在 V2 这个小圈子里消化掉, 拜托各位 V 友啦🙏🏻 +> > 第 6 条附言 -> +> > 我想过了, 其实我被老板开, 和我主动多少事没有一点儿关系, 我主动做的对其他部门, 对公司有价值的事也不会在他心里留下什么不开的理由。本质上来说, 就是我面对一个喜欢 PUA 的又不实事求是的领导, 选择了怼回去, 这才有这样的结局, 不管以后在哪家公司, 我如果有技术上能帮大家的还会继续去做;如果我面对一个喜欢 PUA 的又不实事求是的领导, 我可能还会怼回去, 也可能会更成熟地去面对; -3. [我是 GPT 老哥, 现在公司因为我下了自己的 API-KEY 威胁我, 我可以怎么办](https://www.v2ex.com/t/966984#reply549) +1. [我是 GPT 老哥, 现在公司因为我下了自己的 API-KEY 威胁我, 我可以怎么办](https://www.v2ex.com/t/966984#reply549) > 关于我的情况详情见: 交接时已经和技术同学说了我要下掉自己的 key, 因为用的是我的钱, 只是之前找公司报销, 以后不可能再用我的钱, 也告诉他应该怎么申请 OPENAI 的账号和 key, 结果我收到这样一份邮件, 请问各位 V 友我可以怎么保护自己 -> +> > ![法律函](https://static.7wate.com/img/2023/09/14/dc5d902f246aa.png) -> +> > 第 1 条附言 -> +> > 大家讨论怎么解决, 不要网暴, 否则那公司会更恶心, 谢谢 -> +> > 第 2 条附言 -> +> > HR 经理说提前三天通知, 没有赔偿, 我想仲裁就去好了 -> +> > 第 3 条附言 -> +> > 刚才我联系了以前同事, 原来是他们 VPN 到期了, 然后碰巧遇到我的事, 那些老板和高层不明所以就怪到我的头上, 所以发了这封邮件, 现在 vpn 恢复了, 他们用新申请的账号可以继续用了 -> +> > 第 4 条附言 -> +> > 刚打电话给律师了, 他说因为我签的是主动离职, 所以现在也无能为力了, 这个亏我吃过记住了 --- @@ -160,7 +160,7 @@ date: 2023-09-14 - 例如企业微信的自建应用,需要企业主体域名绑定认证,然后才能进行开发。部门会议我提出申请一个公司域名,是的,我们这么大的公司没有可以让开发用的域名。更可笑的是同事 A 怕公司因为这个域名导致停业,理由是信息安全。 -- 例如去年底部门大 Boss 绩效面谈,客套话说尽。最后来了句,同事 B 今年也不小了(29岁),买房子还贷款,所以今年绩效就不给我了。争取明年给你…… +- 例如去年底部门大 Boss 绩效面谈,客套话说尽。最后来了句,同事 B 今年也不小了(29 岁),买房子还贷款,所以今年绩效就不给我了。争取明年给你…… - 例如某次部门会议上,部门大 Boss 要求我们搞一些创新。我实在忍不住就硬刚了 A 同事,大概意思就是阻力太大,事情干不下来。部门大 Boss 碍于场合的关系,要我必须做出成绩,于是乎大家不得不配合我。后续两三个小项目做成了,创新项目也交给了集团,进了创新月报,最后还有奖品哈哈哈。 diff --git a/blog/真·长安游记.md b/Blog/真·长安游记.md similarity index 93% rename from blog/真·长安游记.md rename to Blog/真·长安游记.md index 322d3e48..7a82225f 100644 --- a/blog/真·长安游记.md +++ b/Blog/真·长安游记.md @@ -1,13 +1,17 @@ --- title: 真·长安游记 -description: 真·长安游记 +description: 一篇记录我和朋友去西安旅游的游记,我们爬了华山,体验了西安的民风民俗,吃了特色小吃凉皮、羊肉泡馍、肉夹馍和biangbiang面,一起度过了开心难忘的旅行。 keywords: -- 西安 -- 旅游 -tags: -- 旅游 + - 西安 + - 旅游 + - 华山 + - 民俗 + - 小吃 +tags: + - 游记/西安 + - 游记/华山 authors: -- 7Wate + - 7Wate date: 2021-03-11 --- diff --git a/blog/破万卷书,行万里路!.md b/Blog/破万卷书,行万里路!.md similarity index 97% rename from blog/破万卷书,行万里路!.md rename to Blog/破万卷书,行万里路!.md index cab26fac..be02694e 100644 --- a/blog/破万卷书,行万里路!.md +++ b/Blog/破万卷书,行万里路!.md @@ -1,16 +1,19 @@ --- title: 破万卷书,行万里路! -description: 2023年春节自驾游滇川之旅。 +description: 在旅途中的各种体验和见闻,包括重庆的美食、重庆的繁华,丽江的古城,香格里拉的美景以及在梅里雪山欣赏日照金山的经历。 keywords: -- 云南 -- 四川 -- 自驾游 -- 破万卷书 -- 行万里路 -tags: -- 旅游 + - 重庆 + - 丽江 + - 香格里拉 + - 梅里雪山 + - 日照金山 + - 旅行 +tags: + - 游记/川西 + - 游记/重庆 + - 游记/丽江 authors: -- 7Wate + - 7Wate date: 2023-02-08 --- @@ -53,7 +56,7 @@ date: 2023-02-08 > 昨天还是前天,洪崖洞最少来了 15 万人,这么一点地方,还能干啥?要想去景点就预约明天的票,今天是不可能了! ``` -我就想做个缆车,重庆的人属实给我上了一课;这还能咋地?吃火锅呗 ~ +我就想做个缆车,重庆的人属实给我上了一课;这还能咋地?吃火锅呗 ~ 来到老城区,感情还没进门呢,空气中弥漫的辛辣味,我仿佛已经被”七上八下“了。不过重庆火锅确实美味,对比内地的火锅其香辛辣更纯粹;在食材方面并没有质的差距,形式上也更为丰富。不过只有油碟可能会有人不习惯,饭后暗暗感觉重庆的肛肠医院绝对很挣钱 🤣🤣🤣 @@ -127,9 +130,9 @@ date: 2023-02-08 下山之后,我们在纳西族村民家里听胖金妹(少数民族姑娘的称呼)讲解倒是挺有趣: > 我们纳西族崇尚圆润美,在这里男人是不用干活的,和你们内地是不一样的;我们结婚也不需要房子、车子、彩礼,倒是要送给男家几十头牦牛。就像这个小伙(朋友 200+ 斤),也只有村长家的姑娘才配得上咯。 -> +> > 我们这里男方虽然只会抽烟喝酒打打牌,看看孩子不用干活;但是男人是不上桌的,任何事男人都是没有话语权的。我们这里结婚有点类似于你们哪里的上门女婿,要不要考虑留在这里当上门女婿呀? -> +> > ······ 胖金妹后来宣传起了茶叶和牦牛干,试尝牦牛肉干的时候。我们硬生生给胖金妹上了一课,足足一斤多的牛肉直接干完哈哈哈 ~ 结果大家真的不好意思了,还是买了点牛肉干。胖金妹表示你们真的是太好意思了! @@ -207,4 +210,3 @@ date: 2023-02-08 - 古城:https://www.bilibili.com/video/BV1Ay4y1f7Nf - 川西:https://www.bilibili.com/video/BV1584y1J78R - 日照金山:https://www.bilibili.com/video/BV1rY411Y754 - diff --git a/blog/种下了一些瓜果蔬菜.md b/Blog/种下了一些瓜果蔬菜.md similarity index 88% rename from blog/种下了一些瓜果蔬菜.md rename to Blog/种下了一些瓜果蔬菜.md index ae78f258..7f645cb3 100644 --- a/blog/种下了一些瓜果蔬菜.md +++ b/Blog/种下了一些瓜果蔬菜.md @@ -1,13 +1,16 @@ --- title: 种下了一些瓜果蔬菜 -description: 种下了一些瓜果蔬菜 +description: 五一假期只有一天,与同事一起开垦菜园的经历。内容涵盖了购买菜苗、种植、与邻里互动的趣事,以及今后打算拍摄种菜Vlog、与网友交换闲置书籍的计划。 keywords: -- 瓜果蔬菜 -- 菜园 -tags: -- 花园 + - 五一假期 + - 菜园 + - 互动 + - 计划 + - VLog +tags: + - 生活/园艺 authors: -- 7Wate + - 7Wate date: 2022-04-24 --- diff --git a/blog/罪恶应该被遗传么.md b/Blog/罪恶应该被遗传么.md similarity index 89% rename from blog/罪恶应该被遗传么.md rename to Blog/罪恶应该被遗传么.md index aa6d899a..87597ecc 100644 --- a/blog/罪恶应该被遗传么.md +++ b/Blog/罪恶应该被遗传么.md @@ -1,13 +1,15 @@ --- title: 罪恶应该被遗传么? -description: 罪恶应该被遗传么 +description: 最近看了几个关于工作制度的视频,让我对不同国家的工作文化有了更多了解。英国正在试行四天工作周,这在全球范围内可以说是一次工作方式的重大变革。 keywords: -- 罪恶 -- 遗传 -tags: -- 感悟 + - 罪恶 + - 四天工作周 + - 英国 + - 变革 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-10-13 --- @@ -27,4 +29,4 @@ date: 2022-10-13 但是进而又存在的问题可以推翻这个结论,孩子生下来作为独立个体有选择的权力吗?如果父母就是想通过自己曾犯下的恶让自己的孩子获得利益呢?就如动物生下来是猪,小猪仔说它不想被吃,我能重新投胎吗?很明显这是不能的,也是做不到的。 -综上所述,最后还需要再加一条简单粗暴的结论:**强者拥有最终解释权,因为我得拳头比你大,所以我的规矩就是规矩。**可是我以为我以为的就是我以为的吗? \ No newline at end of file +综上所述,最后还需要再加一条简单粗暴的结论:**强者拥有最终解释权,因为我得拳头比你大,所以我的规矩就是规矩。**可是我以为我以为的就是我以为的吗? diff --git a/blog/自律的痛苦······.md b/Blog/自律的痛苦······.md similarity index 92% rename from blog/自律的痛苦······.md rename to Blog/自律的痛苦······.md index 4d81dca3..01ae3c6a 100644 --- a/blog/自律的痛苦······.md +++ b/Blog/自律的痛苦······.md @@ -1,21 +1,26 @@ --- title: 自律的痛苦······ -description: 自律的痛苦······ +description: 近一周生活的日记体文章。因疫情居住在公司,平日工作轻松,生活自律。 keywords: -- 生活 -- 自律 -tags: -- 日记 + - 疫情 + - 公司生活 + - 自律 + - 工作 + - 娱乐 + - 出行 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-03-31 --- - 最近因为疫情,家也回不去了,一直在住在公司。去年考的专升本也通知让开始上课了,工作也比较清闲,生活、学习、锻炼及其自律,自律的有点痛苦······ 去年通宵一周考上的函授专升本,不谈有用没用。因为我开心哈哈,最近通知又开始上课了。 + 为什么要提一嘴这个了,就是很奇葩。高考第一志愿就是这个学校,然后又莫名其妙的考到了这个学校…… + 人生兜兜转转真是个圈子?但我觉得这只是心理暗示在作俑! 简单叙述一下最近一周来的生活节奏,目前我是已经平静不下去了······ diff --git a/blog/英雄联盟 S8 全球总决赛.md b/Blog/英雄联盟 S8 全球总决赛.md similarity index 63% rename from blog/英雄联盟 S8 全球总决赛.md rename to Blog/英雄联盟 S8 全球总决赛.md index c11c3e77..337ac3e8 100644 --- a/blog/英雄联盟 S8 全球总决赛.md +++ b/Blog/英雄联盟 S8 全球总决赛.md @@ -1,13 +1,15 @@ --- title: 英雄联盟 S8 全球总决赛 -description: 英雄联盟 S8 全球总决赛 +description: 2018 年 11 月 3 日 英雄联盟 S8 全球总决赛 IG 夺冠 keywords: -- 英雄联盟 -- 游戏 -tags: -- 游戏 + - 英雄联盟 + - S8 + - IG + - 夺冠 +tags: + - 游戏/英雄联盟 authors: -- 7Wate + - 7Wate date: 2018-11-03 --- @@ -16,4 +18,5 @@ date: 2018-11-03 ![IG](https://static.7wate.com/img/2020/11/23/e99e7730b0ff2.jpg) --- + 此文著于 2018 年 11 月 3 日,仅供留存。 diff --git a/blog/螺蛳粉.md b/Blog/螺蛳粉.md similarity index 83% rename from blog/螺蛳粉.md rename to Blog/螺蛳粉.md index 50497135..94a9101d 100644 --- a/blog/螺蛳粉.md +++ b/Blog/螺蛳粉.md @@ -1,23 +1,30 @@ --- title: 螺蛳粉 -description: 螺蛳粉 +description: 广西柳州市的特色小吃——螺蛳粉,以及我的亲身体验和喜好。 keywords: -- 螺蛳粉 -tags: -- 美食 + - 螺蛳粉 + - 广西 + - 郑州 + - 阿生哥 +tags: + - 美食/螺蛳粉 authors: -- 7Wate + - 7Wate date: 2018-11-04 --- -螺蛳粉是广西壮族自治区柳州市的小吃米粉,具有辣、爽、鲜、酸、烫的独特风味。是柳州最具地方特色的名小吃。螺蛳粉的味美还因为它有着独特的汤料。汤料由螺蛳、山奈、八角、肉桂、丁香、多种辣椒、等天然香料和味素配制而成。 +螺蛳粉是广西壮族自治区柳州市的小吃米粉,具有辣、爽、鲜、酸、烫的独特风味。是柳州最具地方特色的名小吃。螺蛳粉的味美还因为它有着独特的汤料。汤料由螺蛳、山奈、八角、肉桂、丁香、多种辣椒、等天然香料和味素配制而成。 ![拒绝](https://static.7wate.com/img/2020/11/23/67f207b9dd0cd.png) 嘿嘿嘿,螺蛳粉。 + 以前对这些东西是很拒绝的,吃过以后真香定律哈哈哈! + 我最喜欢吃配品和汤汁的味道,豆皮把应该是还有酸汁?自己起的名字,很刺激味蕾。特别是酸的,山西老陈醋哈哈哈。 + 感觉佐料才是默默无名的王者,刺激着味蕾!!! + 分享一下郑州的螺蛳粉。 ## 阿生哥柳州螺蛳粉 @@ -29,7 +36,9 @@ date: 2018-11-04 ![美食评价](https://static.7wate.com/img/2020/11/23/571df2b58a62e.png) 平时去只顾吃了,哈哈哈哈哈哈哈哈。 + 没有想过拍照,喜欢吃的自己去尝试一下! + 不喜欢吃也别找我嘿嘿! --- diff --git a/blog/記拾月.md b/Blog/記拾月.md similarity index 86% rename from blog/記拾月.md rename to Blog/記拾月.md index 2065cd2e..5c1fb7a1 100644 --- a/blog/記拾月.md +++ b/Blog/記拾月.md @@ -1,17 +1,19 @@ --- title: 記拾月 -description: 記拾月 +description: 记录了十月的一些片段。开头押送毛驴到广西,体验南北饮食文化差异。然后在高铁站发现口罩带反,有趣。做完人口普查后,参加了几个工作面试,结果都不尽如人意。转眼十月就这样过去了,秋天到来。 keywords: -- 日记 -- 拾月 -tags: -- 日记 + - 押车 + - 毛驴 + - 南北文化 + - 工作面试 + - 秋天 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2020-10-31 --- - 阿巴阿巴……感觉上个月跟做梦一样,稀里糊涂的十月。 九月底,厂里卖到广西南宁一车毛驴让我押车去了。1700 公里、30 小时的旅程,司机是山西人,操着一口流利的山西话对我而言就像开头般:阿巴阿巴…… @@ -30,7 +32,7 @@ date: 2020-10-31 因为还需要去洛阳接妈妈,所以我要来一次史诗级大联动,机场——城铁——高铁。 -下午 5 点的飞机,7 点 30 到新郑机场。坐上7 点 55 的城铁,8 点 10 分到郑州东站。等待 9 点的高铁,中途还不慌不忙的吃了顿开封菜。心里再一次佩服我党之伟大哈哈哈,这就非常 good 了。 +下午 5 点的飞机,7 点 30 到新郑机场。坐上 7 点 55 的城铁,8 点 10 分到郑州东站。等待 9 点的高铁,中途还不慌不忙的吃了顿开封菜。心里再一次佩服我党之伟大哈哈哈,这就非常 good 了。 在等高铁的时候,我发现大家眼神都在看我。心里的一顿飘飘然,啧啧啧…… diff --git a/blog/记拾月.md b/Blog/记拾月.md similarity index 61% rename from blog/记拾月.md rename to Blog/记拾月.md index e3e50524..1e830847 100644 --- a/blog/记拾月.md +++ b/Blog/记拾月.md @@ -1,17 +1,19 @@ --- title: 记拾月 -description: 记拾月 +description: 最近生活很忙,没有太多时间写博客。工作上感到无聊重复,想换一份开发工作,进入更高层次的围城。生活上腰疼加重,长期坐班导致,还胖了30斤,生活比较颓废。总体来说近期生活工作都比较浮躁和无聊。 keywords: -- 日记 -- 拾月 -tags: -- 日记 + - 工作 + - 无聊 + - 颓废 + - 腰疼 + - 胖30斤 +tags: + - 生活/日记 authors: -- 7Wate + - 7Wate date: 2021-10-25 --- - 生活很充实,便没有太多闲暇时光来续写博客。好忙呀好忙呀…… ## 工作 diff --git a/blog/论成年人的睡眠.md b/Blog/论成年人的睡眠.md similarity index 86% rename from blog/论成年人的睡眠.md rename to Blog/论成年人的睡眠.md index 9ffbf01e..12e56710 100644 --- a/blog/论成年人的睡眠.md +++ b/Blog/论成年人的睡眠.md @@ -1,13 +1,15 @@ --- title: 论成年人的睡眠 -description: 论成年人的睡眠 +description: 探讨了失眠问题,分享了自己的经历和应对策略。 keywords: -- 成年人 -- 睡眠 -tags: -- 日记 + - 失眠 + - 抗拒性入眠 + - 压力 + - 放松 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-02-24 --- @@ -29,11 +31,11 @@ Take easy ~ 这个我还真的不知道要怎么解决,不过目前方法是随它去吧哈哈。 -有时候工作一天,到家就只想刷刷抖音,看看B站等等…… +有时候工作一天,到家就只想刷刷抖音,看看 B 站等等…… 有时候老友相聚,就只想玩玩玩玩玩,该睡也不睡…… -这种熬夜真得很快乐、很自由[手动狗头]。 +这种熬夜真得很快乐、很自由 [手动狗头]。 熬夜一时爽,过后火葬场……这种熬夜牺牲的大多是第二天的工作生活,然后习惯性的熬夜之后。时差倒不过来,过度的享受快乐,提高开心阈值又会导致干好多事情都没意思…… diff --git a/blog/谈谈我的「数字文具盒」 - NextCloud.md b/Blog/谈谈我的「数字文具盒」 - NextCloud.md similarity index 87% rename from blog/谈谈我的「数字文具盒」 - NextCloud.md rename to Blog/谈谈我的「数字文具盒」 - NextCloud.md index bed7fa93..c4e6bd63 100644 --- a/blog/谈谈我的「数字文具盒」 - NextCloud.md +++ b/Blog/谈谈我的「数字文具盒」 - NextCloud.md @@ -1,13 +1,15 @@ --- title: 谈谈我的「数字文具盒」 - NextCloud -description: 谈谈我的「数字文具盒」 - NextCloud +description: Nextcloud 一个用于创建网络硬盘的客户端-服务器软件,以及作者在使用中的技巧和心得体会。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - NextCloud + - 数字化 + - 效率 +tags: + - 开源项目/数字文具盒 + - 生产力工具/NextCloud authors: -- 7Wate + - 7Wate date: 2022-11-30 --- @@ -15,7 +17,7 @@ date: 2022-11-30 ## Nextcloud -Nextcloud 是一套用于创建网络硬盘的客户端-服务器软件。其功能与 Dropbox相近,但 Nextcloud 是自由及开放源代码软件,每个人都可以在私人服务器上安装并执行它。 +Nextcloud 是一套用于创建网络硬盘的客户端-服务器软件。其功能与 Dropbox 相近,但 Nextcloud 是自由及开放源代码软件,每个人都可以在私人服务器上安装并执行它。 Nextcloud 的主要特性支持 WebDAV、日历(CalDAV)、联系人(CardDAV)、计划工作与流媒体,同时拥有大量的插件增强了 Nextcloud 的功能和多样性,例如在线的文本编辑、书签服务、相册、RSS 阅读器、文件查看器等。 @@ -61,7 +63,7 @@ Nextcloud 的日历功能则显示任务中指定的计划,同时可以通过 ![看板](https://static.7wate.com/img/2022/12/02/544ea52b59ad4.png) -Nextcloud 的看板就类似于甘特图,甘特图(Gantt Chart)是条状图的一种流行类型,显示项目、进度以及其他与时间相关的系统进展的内在关系随着时间进展的情况,是由亨利·甘特于1910年开发出。在项目管理中,甘特图显示项目的终端元素的开始和结束,概要元素或终端元素的依赖关系,**管理者可透过甘特图,监控项目当前各任务的进度**。若想要同时显示多个不同的项目开始与结束的时间,就可以利用甘特图呈现,监控项目当前各任务的进度。 +Nextcloud 的看板就类似于甘特图,甘特图(Gantt Chart)是条状图的一种流行类型,显示项目、进度以及其他与时间相关的系统进展的内在关系随着时间进展的情况,是由亨利·甘特于 1910 年开发出。在项目管理中,甘特图显示项目的终端元素的开始和结束,概要元素或终端元素的依赖关系,**管理者可透过甘特图,监控项目当前各任务的进度**。若想要同时显示多个不同的项目开始与结束的时间,就可以利用甘特图呈现,监控项目当前各任务的进度。 ### 新闻 @@ -100,4 +102,4 @@ Nextcloud 相对于其他的应用并无特别明显的优点,例如邮件功 > 来源:[Nextcloud - 维基百科,自由的百科全书](https://zh.wikipedia.org/wiki/Nextcloud);仅学术引用,著作权归作者所有。 -> 来源:[甘特图 - 维基百科,自由的百科全书](https://zh.wikipedia.org/wiki/%E7%94%98%E7%89%B9%E5%9B%BE);仅学术引用,著作权归作者所有。 \ No newline at end of file +> 来源:[甘特图 - 维基百科,自由的百科全书](https://zh.wikipedia.org/wiki/%E7%94%98%E7%89%B9%E5%9B%BE);仅学术引用,著作权归作者所有。 diff --git a/blog/谈谈我的「数字文具盒」 - Obsidian.md b/Blog/谈谈我的「数字文具盒」 - Obsidian.md similarity index 95% rename from blog/谈谈我的「数字文具盒」 - Obsidian.md rename to Blog/谈谈我的「数字文具盒」 - Obsidian.md index feb2b31b..379e8462 100644 --- a/blog/谈谈我的「数字文具盒」 - Obsidian.md +++ b/Blog/谈谈我的「数字文具盒」 - Obsidian.md @@ -1,13 +1,14 @@ --- title: 谈谈我的「数字文具盒」 - Obsidian -description: 谈谈我的「数字文具盒」 - Obsidian +description: 如何将Obsidian与Docusaurus有机结合,以实现知识管理和网站展示的目标。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - obsidian + - Docusaurus +tags: + - 生产力工具/Obsidian + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-30 --- @@ -112,4 +113,4 @@ Obsidian 的 XMind 思维导图插件在写完文章后可以快速生成思维 ![字数](https://static.7wate.com/img/2022/12/13/69ea12a01d73f.png) -至此生产力工具篇结束,整个「数字文具盒」系列也算进入了终篇。目前还有两篇文章,关于心得体会和网络环境的。希望这 2w 字的「数字文具盒」对你有所启发和帮助! \ No newline at end of file +至此生产力工具篇结束,整个「数字文具盒」系列也算进入了终篇。目前还有两篇文章,关于心得体会和网络环境的。希望这 2w 字的「数字文具盒」对你有所启发和帮助! diff --git a/blog/谈谈我的「数字文具盒」 - 个人工作流.md b/Blog/谈谈我的「数字文具盒」 - 个人工作流.md similarity index 79% rename from blog/谈谈我的「数字文具盒」 - 个人工作流.md rename to Blog/谈谈我的「数字文具盒」 - 个人工作流.md index 040b999f..bff0451f 100644 --- a/blog/谈谈我的「数字文具盒」 - 个人工作流.md +++ b/Blog/谈谈我的「数字文具盒」 - 个人工作流.md @@ -1,19 +1,22 @@ --- title: 谈谈我的「数字文具盒」 - 个人工作流 -description: 数字文具盒系列关于个人工作流的一些经验分享 +description: 分享了我不断打磨的个人生产力工具经验,这些工具组成了我的“数字文具盒”系列。强调了以结果为导向的原则,警告读者不要盲目折腾,而是要选择适合自己的工具。 keywords: -- 数字文具盒 -- 个人工作流 -tags: -- 数字文具盒 + - 数字文具盒 + - 个人工作流 + - 数据自主权 + - 虚拟桌面 +tags: + - 工作/效率 + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2023-07-25 --- 谈谈我的「数字文具盒」系列是我一直不断打磨的个人生产力工具经验分享贴。尽管前期有些折腾,可实际用起来却是嘎嘎好用。数字文具盒一贯宗旨**倡导以结果为导向,切勿盲目折腾,适合自己的才是最好的。** -我一直很重视数据自主权的,数字文具盒系列中用到的工具全都是以开源项目为基础结合 Dokcer 运行的。本篇《个人工作流》主要分享:数字文具盒系列工具如何高效使用的流程? +我一直很重视数据自主权的,数字文具盒系列中用到的工具全都是以开源项目为基础结合 Docker 运行的。本篇《个人工作流》主要分享:数字文具盒系列工具如何高效使用的流程? ## 工作区 @@ -25,7 +28,7 @@ IT 工作中大多数都会使用两个以上显示器,一台团队协作, - 通讯桌面:运行企业微信、钉钉、QQ 等通讯工具。 -- 开发桌面:运行 IDE、Dokcer、虚拟机等开发工具。 +- 开发桌面:运行 IDE、Docker、虚拟机等开发工具。 - 学习桌面:运行 Obsidian、Typora、Memos 等笔记工具。 @@ -59,16 +62,16 @@ IT 工作中大多数都会使用两个以上显示器,一台团队协作, 我日常在 NextCloud 上的工作流程: -0. Dashboard:仪表盘提供了全局概览,可以快速了解工作状况。 -1. Mail:提供了基础性的邮件处理功能。我主要是用来收、看邮件。 -2. Calendar:日历展示了月度视角的任务。我主要快速浏览一下本月的工作方向、里程碑,以及本月剩下的时间。 -3. Deck:看板展示了全局任务的状态。我可以快速地切入工作中去,今天有代办是什么?在做什么?事情到了什么程度?哪些干完了?有点类似于虚拟桌面,避免了每天早上不知道当天要干啥。 -4. Task:任务提供了 ToDoList 的特性。我平时用来管理任务启动、结束、归档,可以和 Cale、Deck 进行联动。俗话说,好记性不如烂笔头嘛。 -5. News:NextCloud 的 Rss 阅读应用,结合 RssHub 给我提供了平时大部分的信息源。我日常最喜欢的就是阅读 Rss 订阅源了,可以快速了解各种咨询。 -6. 如果阅读 RSS 订阅源文章的时候,有一些想法 or 感悟,我就会随手记录在 Memos(文字类) 和 MassCode(代码类),并在每个月的第一个周日前定时整理。 -7. 如果有一些文章篇幅太长需要花时间阅读。我把文章就会加入到 [WallaBag](https://github.com/wallabag/wallabag) 中,有空了再进行深入阅读,WallaBag 也提供了移动端,可以让我们随时随地的阅读。 -8. 如果有精华文章需要收录。我会在 Zotero 中添加文章,并且按照文章的主题进一步分类归档。并在每个月第一个周日前定时整理,如果有 idea 就会记录在 Memos 中,加入到 NextCloud 的 Task 中落实写作。 -9. 每天我还会结合 Obsidian 进行复盘总结一下。尽管有时候会写,有时候不会写……但是复盘确实嘎嘎有用,定期地审视一下自己最近的收获,哪些做得好、哪些做得不好、哪些需要改进、哪些需要坚持,进一步修正发展方向。除了每日复盘,还有每周、季度的复盘总结,复盘总结可真是项目管理,风险把控的一大神器。 +1. Dashboard:仪表盘提供了全局概览,可以快速了解工作状况。 +2. Mail:提供了基础性的邮件处理功能。我主要是用来收、看邮件。 +3. Calendar:日历展示了月度视角的任务。我主要快速浏览一下本月的工作方向、里程碑,以及本月剩下的时间。 +4. Deck:看板展示了全局任务的状态。我可以快速地切入工作中去,今天有代办是什么?在做什么?事情到了什么程度?哪些干完了?有点类似于虚拟桌面,避免了每天早上不知道当天要干啥。 +5. Task:任务提供了 ToDoList 的特性。我平时用来管理任务启动、结束、归档,可以和 Cale、Deck 进行联动。俗话说,好记性不如烂笔头嘛。 +6. News:NextCloud 的 Rss 阅读应用,结合 RssHub 给我提供了平时大部分的信息源。我日常最喜欢的就是阅读 Rss 订阅源了,可以快速了解各种咨询。 +7. 如果阅读 RSS 订阅源文章的时候,有一些想法 or 感悟,我就会随手记录在 Memos(文字类) 和 MassCode(代码类),并在每个月的第一个周日前定时整理。 +8. 如果有一些文章篇幅太长需要花时间阅读。我把文章就会加入到 [WallaBag](https://github.com/wallabag/wallabag) 中,有空了再进行深入阅读,WallaBag 也提供了移动端,可以让我们随时随地的阅读。 +9. 如果有精华文章需要收录。我会在 Zotero 中添加文章,并且按照文章的主题进一步分类归档。并在每个月第一个周日前定时整理,如果有 idea 就会记录在 Memos 中,加入到 NextCloud 的 Task 中落实写作。 +10. 每天我还会结合 Obsidian 进行复盘总结一下。尽管有时候会写,有时候不会写……但是复盘确实嘎嘎有用,定期地审视一下自己最近的收获,哪些做得好、哪些做得不好、哪些需要改进、哪些需要坚持,进一步修正发展方向。除了每日复盘,还有每周、季度的复盘总结,复盘总结可真是项目管理,风险把控的一大神器。 如上就是我个人日常的工作流程,整体来说已经非常成熟了,完全满足了我的个人需求。以后细节上可能会有一些变化,但是方向是不会调整了。 diff --git a/blog/谈谈我的「数字文具盒」 - 心得体会.md b/Blog/谈谈我的「数字文具盒」 - 心得体会.md similarity index 87% rename from blog/谈谈我的「数字文具盒」 - 心得体会.md rename to Blog/谈谈我的「数字文具盒」 - 心得体会.md index 6b0a3ee8..de95c206 100644 --- a/blog/谈谈我的「数字文具盒」 - 心得体会.md +++ b/Blog/谈谈我的「数字文具盒」 - 心得体会.md @@ -1,13 +1,16 @@ --- title: 谈谈我的「数字文具盒」 - 心得体会 -description: 谈谈我的「数字文具盒」 - 心得体会 +description: 作者的"数字文具盒"系列文章旨在为读者提供指南,而不仅仅是提供具体的操作细节。核心指导思想包括适合自己的工具最好、数据自主权、提高效率但不要陷入无休止的折腾。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - 数字文具盒 + - 生产力工具 + - 效率 + - 适合自己 +tags: + - 工作/效率 + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-30 --- @@ -29,4 +32,5 @@ date: 2022-11-30 不忘初心,方得始终;初心易得,始终难守。我也见过很多很多很多博友在折腾工具的路上一去不复返了,似乎忘了最初的本意,完全沉浸在折腾的乐趣里了。并不是要论个谁对谁错,我其实也非常喜欢折腾,真的嘎嘎快乐 ~ -因为我对于「数字文具盒」的定义就是为了提高学习、工作效率,并以结果为导向,以实现需求为目标的。所以如果你打造「数字文具盒」是为了提高效率,那么就切勿折腾;如果是为了快乐,那就好好折腾 ~ \ No newline at end of file +因为我对于「数字文具盒」的定义就是为了提高学习、工作效率,并以结果为导向,以实现需求为目标的。所以如果你打造「数字文具盒」是为了提高效率,那么就切勿折腾;如果是为了快乐,那就好好折腾 ~ + diff --git a/blog/谈谈我的「数字文具盒」 - 数字基建.md b/Blog/谈谈我的「数字文具盒」 - 数字基建.md similarity index 93% rename from blog/谈谈我的「数字文具盒」 - 数字基建.md rename to Blog/谈谈我的「数字文具盒」 - 数字基建.md index bac2efcf..ab4064f9 100644 --- a/blog/谈谈我的「数字文具盒」 - 数字基建.md +++ b/Blog/谈谈我的「数字文具盒」 - 数字基建.md @@ -1,14 +1,16 @@ --- title: 谈谈我的「数字文具盒」 - 数字基建 -description: 我的数字文具盒之路以及生产力工具的搭建 +description: 数字基建中的两个关键要素:云服务器和域名。强调了云服务器的灵活性和成本效益,并提供了一些建议,例如根据实际需求选择服务器配置和购买大厂的云服务。 keywords: -- 数字文具盒 -- 生产力工具 -- 数字基建 -tags: -- 数字文具盒 + - 数字文具盒 + - 生产力工具 + - 数字基建 + - 云服务器 + - 域名 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-28 --- @@ -69,7 +71,7 @@ date: 2022-11-28 **优先买大厂的云服务,然后买优惠享折扣**。例如常见的境内:腾讯云、阿里云、华为云等等,境外的:亚马逊云、搬瓦工等等太多了。**我用了大概 5 年左右腾讯云的服务器**,目前整体来说腾讯云对个人还是不错的,暂时并未遇到太大问题。 -如果你有经常蹲折扣,例如双11,黑色星期五,那么一定是真香定律。例如我这次升级云服务器则是蹲到了腾讯云 - 轻量云两周年活动。仅花费了 1400 元左右,购买了 7 年的 2 核心 4GB 的云服务器。 +如果你有经常蹲折扣,例如双 11,黑色星期五,那么一定是真香定律。例如我这次升级云服务器则是蹲到了腾讯云 - 轻量云两周年活动。仅花费了 1400 元左右,购买了 7 年的 2 核心 4GB 的云服务器。 ### 群晖、树莓派会不会更省钱、更好用? @@ -80,7 +82,7 @@ date: 2022-11-28 | 网络 | 速度快、不稳定 | 速度慢、稳定(可弹性升级) | | 存储 | 容量大 | 容量小(可弹性升级) | | 性能 | 高性能 | 低性能(可弹性升级) | -| 电费 | 0.5元 - 10元 | 无 | +| 电费 | 0.5 元 - 10 元 | 无 | | 费用 | 同性能价格低 | 同性能价格高 | | 运维 | 边际成本极高 | 无 | diff --git a/blog/谈谈我的「数字文具盒」 - 生产力工具(上).md b/Blog/谈谈我的「数字文具盒」 - 生产力工具(上).md similarity index 92% rename from blog/谈谈我的「数字文具盒」 - 生产力工具(上).md rename to Blog/谈谈我的「数字文具盒」 - 生产力工具(上).md index c14c2183..c574a5bc 100644 --- a/blog/谈谈我的「数字文具盒」 - 生产力工具(上).md +++ b/Blog/谈谈我的「数字文具盒」 - 生产力工具(上).md @@ -1,13 +1,15 @@ --- title: 谈谈我的「数字文具盒」 - 生产力工具(上) -description: 谈谈我的「数字文具盒」 - 生产力工具(上) +description: 我搭建个人生产力工具的应用服务部分,包括博客、碎片化知识管理、维基、RSS订阅和其他工具。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - 博客系统 + - 碎片化知识 + - 知识库 + - RSS订阅 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-28 --- @@ -43,7 +45,7 @@ Typecho 的程序设计逻辑与 Wordpress 相似,通过插件与模板机制 ![Halo](https://static.7wate.com/img/2022/11/30/504726d751b4e.png) -[Halo](https://halo.run/) 一款现代化的开源建站 / CMS 系统,其社区背后运营主体是[飞致云](https://www.fit2cloud.com/)。现在的开源项目在靠爱发电和商业化运行的权衡中总是难以取舍,终究一旦是没有新鲜血液的注入就会渐渐没落。 +[Halo](https://halo.run/) 一款现代化的开源建站 / CMS 系统,其社区背后运营主体是 [飞致云](https://www.fit2cloud.com/)。现在的开源项目在靠爱发电和商业化运行的权衡中总是难以取舍,终究一旦是没有新鲜血液的注入就会渐渐没落。 Halo 作为开源项目同时拥有商业化运营,其易于部署、完善的模板系统、附件系统、评论系统正是我所想要的。因为 Halo 基于 Java 开发,所以相对于 PHP 开发**系统资源占用较高,勉强还可以接受。** 不过现在 Github 有位作者基于 Halo 的开源组件,使用 Go 语言重构了 Halo 并改名为 [sonic](https://github.com/go-sonic/sonic);sonic 相对于 Halo 最大的优点就是系统资源占用缩减了 50 倍,仅仅占用 10mb 左右内存。目前一直在用 Halo,将来可能会更换到 sonic。以后的事情以后再说 ~ @@ -59,7 +61,7 @@ Halo 作为开源项目同时拥有商业化运营,其易于部署、完善的 二十一世纪信息大爆炸,不同以往信息传递更新慢;现在各种各样的碎片化信息充斥着生活,其更易学、更易用;但是管理起来却很不方便,针对这个问题我使用了 [memos](https://github.com/usememos/memos) 和 [massCode](https://masscode.io/),分别用来管理文字和代码。 -### memos +### Memos ![memos](https://static.7wate.com/img/2022/11/30/59efbd590dea2.png) @@ -89,7 +91,7 @@ massCode 是一款开源代码片段管理软件,类似于 Github 的 Gist; ![Zotero](https://static.7wate.com/img/2022/11/30/48380d33fb30e.png) -[Zotero](https://www.zotero.org/) 是一款自由及开放源代码的文献管理软件,用以管理书目信息(如作者、标题、出版社、摘要、阅读笔记等)及相关材料(如PDF文件)。其最著名的特性是作为浏览器插件、在线同步、与文档编辑软件如 Microsoft Word、LibreOffice、OpenOffice.org Writer、NeoOffice 等集成,可生成文内引用、生成页面脚注或文后的参考文献。 +[Zotero](https://www.zotero.org/) 是一款自由及开放源代码的文献管理软件,用以管理书目信息(如作者、标题、出版社、摘要、阅读笔记等)及相关材料(如 PDF 文件)。其最著名的特性是作为浏览器插件、在线同步、与文档编辑软件如 Microsoft Word、LibreOffice、OpenOffice.org Writer、NeoOffice 等集成,可生成文内引用、生成页面脚注或文后的参考文献。 Zotero 在我这里主要的作用就是收集、整理、归纳零散的资料,例如:网页好文、研究报告、书籍文档等。Zotero 支持多终端平台使用,可以通过 WebDav 方式同步。 diff --git a/blog/谈谈我的「数字文具盒」 - 生产力工具(下).md b/Blog/谈谈我的「数字文具盒」 - 生产力工具(下).md similarity index 88% rename from blog/谈谈我的「数字文具盒」 - 生产力工具(下).md rename to Blog/谈谈我的「数字文具盒」 - 生产力工具(下).md index e5dbb403..94a9b735 100644 --- a/blog/谈谈我的「数字文具盒」 - 生产力工具(下).md +++ b/Blog/谈谈我的「数字文具盒」 - 生产力工具(下).md @@ -1,13 +1,13 @@ --- title: 谈谈我的「数字文具盒」 - 生产力工具(下) -description: 谈谈我的「数字文具盒」 - 生产力工具(下) +description: 一些非常实用的生产力工具,包括思维脑图工具、数据统计工具、静态文件管理、密码管理器、邮箱服务、版本控制工具和CI/CD工具。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - 数字文具盒 + - 生产力工具 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-30 --- @@ -30,7 +30,7 @@ date: 2022-11-30 Xmind 平时我用的最多的一款工具了,简直太好用;整理思绪、提炼要点的一把好手。虽然有很多的开源项目可以实现 Xmind 的大部分功能,但是我真的是用习惯了,所以没有搭建私有的工具。 -### excalidraw +### Excalidraw ![excalidraw](https://static.7wate.com/img/2022/12/01/f0b5d390bc117.png) @@ -66,9 +66,9 @@ Umami 是一款简单、快速、注重隐私的数据统计(Google Analytics - **本机安装**并在本机访问的应用程序(如 KeePass) - **在线服务**,通常经网站访问(如客户端、网络应用程序等) -- 经本机访问的外挂**硬件设备**,如 U盾、FIDO 等 USB Key。 +- 经本机访问的外挂**硬件设备**,如 U 盾、FIDO 等 USB Key。 -它们的主要区别是保存密码及数字签名的加密数据库是保存在本机使用的,还是保存在在线存储服务的,还是保存在特定存储设备的。一些密码管理器,如GNOME 钥匙圈、钥匙串、大部分浏览器内置的密码窗体存储功能等,既可在本机访问,也可在用户经过设置以后能使用在线存储服务的。一般密码管理器会要求用户至少需要一个**主控密码**来解锁经过该主控密码加密的存有账号密码信息的数据库。 +它们的主要区别是保存密码及数字签名的加密数据库是保存在本机使用的,还是保存在在线存储服务的,还是保存在特定存储设备的。一些密码管理器,如 GNOME 钥匙圈、钥匙串、大部分浏览器内置的密码窗体存储功能等,既可在本机访问,也可在用户经过设置以后能使用在线存储服务的。一般密码管理器会要求用户至少需要一个**主控密码**来解锁经过该主控密码加密的存有账号密码信息的数据库。 密码管理器这个范畴太大了,我平时用的最多的就是管理各个网站的密码,登录的时候一键填充密码服务。现在国外成立的 **[FIDO](https://fidoalliance.org/)(Fast IDentity Online)联盟**,其宗旨是为解决强制认证设备的交互性和用户面临大量复杂的用户名和密码。我比较看好 FIDO,也许这就是以后密码管理的最终解决方案。 @@ -78,7 +78,7 @@ Umami 是一款简单、快速、注重隐私的数据统计(Google Analytics [Bitwarden](https://bitwarden.com/) 是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden 平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden 提供云端托管服务,并支持自行部署解决方案。 -Bitwarden 除了拥有基础且丰富的密码管理功能,同时支持自动填写登录信息、用户名,密码生成器、2FA 验证、数据泄露报告、跨平台客户端、支持私有部署等其他优点。Bitwarden 真的是密码管理器的一大杀手,但是官方提供的私有部署系统资源消耗较大。这时 [vaultwarden](https://github.com/dani-garcia/vaultwarden) 便闪亮登场,vaultwarden 是Bitwarden 的完美复刻版,但是资源占用更少更易于部署。Dokcer run 一下就完成了服务搭建,真的嘎嘎好用、嘎嘎香呀! +Bitwarden 除了拥有基础且丰富的密码管理功能,同时支持自动填写登录信息、用户名,密码生成器、2FA 验证、数据泄露报告、跨平台客户端、支持私有部署等其他优点。Bitwarden 真的是密码管理器的一大杀手,但是官方提供的私有部署系统资源消耗较大。这时 [vaultwarden](https://github.com/dani-garcia/vaultwarden) 便闪亮登场,vaultwarden 是 Bitwarden 的完美复刻版,但是资源占用更少更易于部署。Docker run 一下就完成了服务搭建,真的嘎嘎好用、嘎嘎香呀! ### 浏览器的密码管理器好用么? @@ -94,7 +94,7 @@ Bitwarden 除了拥有基础且丰富的密码管理功能,同时支持自动 > 《互联网周刊》报道认为:“1969 年 10 月,世界上的第一封电子邮件是由计算机科学家 Leonard K. 教授发给他的同事的一条简短消息。” -电子邮件广为商业界使用,是第一个广域的电子介质,也是商业通信的第一次“e化革命”。电子邮件发送信息方便、不需要同步进行,但是随着邮件越来越多,垃圾邮件、信息重载等等也令人苦恼。 +电子邮件广为商业界使用,是第一个广域的电子介质,也是商业通信的第一次“e 化革命”。电子邮件发送信息方便、不需要同步进行,但是随着邮件越来越多,垃圾邮件、信息重载等等也令人苦恼。 我个人非常喜欢邮件进行工作沟通,首先相对于即时通讯,邮件不需要秒回,沟通起来更省劲、效率更高。但是大环境,似乎并没人喜欢邮件沟通,更喜欢秒回……本来也是打算自建邮箱服务器,但是权衡之后还是选择了第三方服务。主要原因如下: @@ -118,7 +118,7 @@ Bitwarden 除了拥有基础且丰富的密码管理功能,同时支持自动 ![screenshot](https://static.7wate.com/img/2022/12/01/ab8652c95b20f.png) -Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go编写,采用 MIT 许可证;Gitea 是从 Gogs 分支过来的,其主要优点开源、易于安装、跨平台、轻量级运行。 +Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证;Gitea 是从 Gogs 分支过来的,其主要优点开源、易于安装、跨平台、轻量级运行。 ### Git 社区托管不好用么? @@ -132,7 +132,7 @@ Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端 ![Spug](https://static.7wate.com/img/2022/12/01/6c289f747eba5.png) -Spug 是一款灵活、强大、易用的开源运维平台,其面向中小型企业设计的轻量级无Agent的自动化运维平台,主要支持批量执行命令、文件管理、计划任务、发布部署、配置、监控、报警等综合一体化运维服务。 +Spug 是一款灵活、强大、易用的开源运维平台,其面向中小型企业设计的轻量级无 Agent 的自动化运维平台,主要支持批量执行命令、文件管理、计划任务、发布部署、配置、监控、报警等综合一体化运维服务。 平时我有一些小主机都会使用 Spug 来进行统一的管理,挺方便的。Spug 相对于 JumpServer 的主要优点就是性能要求不高,可以跑在小主机上。JumpServer 专业程度更高,Github 更是 19.5K 的星星,真的是让人流口水 ~ diff --git a/blog/谈谈我的「数字文具盒」 - 番外篇.md b/Blog/谈谈我的「数字文具盒」 - 番外篇.md similarity index 89% rename from blog/谈谈我的「数字文具盒」 - 番外篇.md rename to Blog/谈谈我的「数字文具盒」 - 番外篇.md index 0fb83234..36b463fe 100644 --- a/blog/谈谈我的「数字文具盒」 - 番外篇.md +++ b/Blog/谈谈我的「数字文具盒」 - 番外篇.md @@ -1,13 +1,14 @@ --- title: 谈谈我的「数字文具盒」 - 番外篇 -description: 谈谈我的「数字文具盒」 - 番外篇 +description: 在这篇文章中,作者探讨了如何建立一个开放、自由、无感知的网络访问环境,特别关注了DNS(域名系统)和网络方面的建设。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - 网络访问 + - DNS + - 网络代理 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-28 --- @@ -46,14 +47,17 @@ https://dns.cloudflare.com/dns-query 1. 狡兔三窟,一常多备。 2. 切勿违法,反复横跳。 3. 巧用代理,嘎嘎嘎香。 + ### 服务商 首先介绍几个常用的网络服务商,附有推广链接不喜勿喷。😍 + - TAG:我用了好几年体验最好的服务商。 - WgetCloud:备用服务商,年付费 12 元 10GB 流量。 - - Hutao:备用服务商,年付费 90元 600GB 流量。 - - RelayCloud:备用服务商,年付费 15元 每季度 32GB 流量。 - - 一元机场:备用服务商,年付费 11元 每月 100GB 流量。 + - Hutao:备用服务商,年付费 90 元 600GB 流量。 + - RelayCloud:备用服务商,年付费 15 元 每季度 32GB 流量。 + - 一元机场:备用服务商,年付费 11 元 每月 100GB 流量。 + ``` # TAG https://tagss.pro/(官网) @@ -90,7 +94,6 @@ export no_proxy="127.0.0.1,localhost" 最后切记网络也不是法外之地,开始尽情地享受互联网时代开放、自由、无感的数字生活吧 ~ - > 来源:[域名系统 - 维基百科,自由的百科全书](https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F);仅学术引用,著作权归作者所有。 -> 来源:[DNS 原理入门 - 阮一峰的网络日志](https://www.ruanyifeng.com/blog/2016/06/dns.html);仅学术引用,著作权归作者所有。 \ No newline at end of file +> 来源:[DNS 原理入门 - 阮一峰的网络日志](https://www.ruanyifeng.com/blog/2016/06/dns.html);仅学术引用,著作权归作者所有。 diff --git a/blog/谈谈我的「数字文具盒」 - 运行平台.md b/Blog/谈谈我的「数字文具盒」 - 运行平台.md similarity index 88% rename from blog/谈谈我的「数字文具盒」 - 运行平台.md rename to Blog/谈谈我的「数字文具盒」 - 运行平台.md index affe8fb1..05c99679 100644 --- a/blog/谈谈我的「数字文具盒」 - 运行平台.md +++ b/Blog/谈谈我的「数字文具盒」 - 运行平台.md @@ -1,14 +1,15 @@ --- title: 谈谈我的「数字文具盒」 - 运行平台 -description: 我的数据文具盒之路以及生产力工具的搭建 +description: 数字基建的准备工作完成后,搭建运行平台的重要性,特别是在云服务器与应用服务之间的中间层。作者强调了运行平台的目标是实现应用服务的高内聚和低耦合。 keywords: -- 数字文具盒 -- 生产力工具 -- 运行平台 -tags: -- 数字文具盒 + - 运行平台 + - WindowsServer + - Linux + - Docker +tags: + - 开源项目/数字文具盒 authors: -- 7Wate + - 7Wate date: 2022-11-28 --- @@ -57,7 +58,7 @@ sudo bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/Change ## 运行模式 -云服务器的操作系统安装完成后,规划合理的运行模式依旧很重要。因为我的**目的是应用服务高内聚,低耦合**,所以我使用的是容器模式;最常用的就是大名鼎鼎的 Docker。除了容器模式,还有裸机运行模式;同时低门槛上手,文档完善的管理面板就是[宝塔](https://www.bt.cn/new/index.html)了。可以结合实际情况来选择,但是我真的不建议用宝塔。🤐🤐🤐 +云服务器的操作系统安装完成后,规划合理的运行模式依旧很重要。因为我的**目的是应用服务高内聚,低耦合**,所以我使用的是容器模式;最常用的就是大名鼎鼎的 Docker。除了容器模式,还有裸机运行模式;同时低门槛上手,文档完善的管理面板就是 [宝塔](https://www.bt.cn/new/index.html) 了。可以结合实际情况来选择,但是我真的不建议用宝塔。🤐🤐🤐 ### 裸机 @@ -67,7 +68,7 @@ sudo bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/Change #### 宝塔 -[宝塔面板](https://www.bt.cn/new/index.html)作为国内一款安全高效的服务器运维面板,宝塔提供的 Web 管理页面让运维简单高效。可以一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过 Web 端轻松管理服务器。**但是但是它翻过车,曾有一个更新导致众多站长的数据库被爆,损失惨重!** 虽然曾经翻过车,但是宝塔的学习成本低,上手容易入门快。所以就**结合实际情况,理性使用。** +[宝塔面板](https://www.bt.cn/new/index.html) 作为国内一款安全高效的服务器运维面板,宝塔提供的 Web 管理页面让运维简单高效。可以一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过 Web 端轻松管理服务器。**但是但是它翻过车,曾有一个更新导致众多站长的数据库被爆,损失惨重!** 虽然曾经翻过车,但是宝塔的学习成本低,上手容易入门快。所以就**结合实际情况,理性使用。** ### 容器 @@ -75,7 +76,7 @@ sudo bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/Change [Docker](https://www.docker.com/) 是一个开放源代码的开放平台软件,用于开发应用、交付应用、运行应用。Docker 允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker 容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,**因此容器更具有便携性、高效地利用服务器。** -**Dokcer 容器的特性就是虚拟化,提供一个隔离的环境。** 例如你可以运行多个版本的应用服务,其环境不会产生任何冲突。现在绝大部分的应用服务都提供了 Docker 镜像,可以方便快捷的搭建、运行应用服务;例如搭建一个 nginx 服务: +**Docker 容器的特性就是虚拟化,提供一个隔离的环境。** 例如你可以运行多个版本的应用服务,其环境不会产生任何冲突。现在绝大部分的应用服务都提供了 Docker 镜像,可以方便快捷的搭建、运行应用服务;例如搭建一个 nginx 服务: ```shell docker run --name nginx -d nginx @@ -93,7 +94,7 @@ docker run --name nginx -d nginx #### MySQL / MariaDB 哪个好? -**应用服务需要那个就用那个,尽量选择通用版本。** MariaDB 是 MySQL 关系数据库管理系统的一个复刻,由社区开发,有商业支持,旨在继续保持在 GNU GPL 下开源。简单来说 MariaDB 就是 MySQL 的儿子。 +**应用服务需要那个就用那个,尽量选择通用版本。** MariaDB 是 MySQL 关系数据库管理系统的一个复刻,由社区开发,有商业支持,旨在继续保持在 GNU GPL 下开源。简单来说 MariaDB 就是 MySQL 的儿子。 #### 其他的数据库管理系统可以用么? diff --git a/blog/谈谈我的「数字文具盒」.md b/Blog/谈谈我的「数字文具盒」.md similarity index 89% rename from blog/谈谈我的「数字文具盒」.md rename to Blog/谈谈我的「数字文具盒」.md index 44332d69..da02a892 100644 --- a/blog/谈谈我的「数字文具盒」.md +++ b/Blog/谈谈我的「数字文具盒」.md @@ -1,14 +1,15 @@ --- title: 谈谈我的「数字文具盒」 -description: 我的数据文具盒之路以及生产力工具的搭建 +description: 在这篇文章中分享了升级和打造第三版的「数字文具盒」的经历。我回顾了过去的博客搭建经历,以及不断迁移服务器和改进数字工具的过程。 keywords: -- 数字文具盒 -- 生产力工具 -tags: -- 数字文具盒 + - 数字文具盒 + - 生产力工具 + - 服务器迁移 +tags: + - 开源项目/数字文具盒 authors: -- 7Wate -date: 2022-11-21 + - 7Wate +date: 2022-11-21 --- 最近耗费了一周的时间迁移服务器,升级打造 V3 版本的「数字文具盒」。从 2018 年第一次尝试搭建博客,期间尝试各种生产力工具到现如今的第三次迁移服务器,终于打造了一个完美契合,效率至上的数字文具盒。在这期间踩了无数大大小小的坑,折腾了一次又一次;虽然折腾浪费时间,但是依旧是收获满满。 diff --git a/blog/贰号机、落幕.md b/Blog/贰号机、落幕.md similarity index 87% rename from blog/贰号机、落幕.md rename to Blog/贰号机、落幕.md index 4a389006..e4e42c1a 100644 --- a/blog/贰号机、落幕.md +++ b/Blog/贰号机、落幕.md @@ -1,12 +1,15 @@ --- title: 贰号机、落幕 -description: 贰号机、落幕 +description: 自己配置的第二台高端主机,通过闲鱼转手老机,终于拥有了梦想中的Threadripper 1950X 极致配置。 keywords: -- 个人电脑 -tags: -- 硬件 + - Threadripper + - 1950X + - 闲鱼 + - 折腾 +tags: + - 生活/随笔 authors: -- 7Wate + - 7Wate date: 2021-09-23 --- diff --git a/blog/这个周末.md b/Blog/这个周末.md similarity index 88% rename from blog/这个周末.md rename to Blog/这个周末.md index 2f445597..46667f58 100644 --- a/blog/这个周末.md +++ b/Blog/这个周末.md @@ -1,17 +1,19 @@ --- title: 这个周末 -description: 这个周末 +description: 记录了周末参加公司年会和高中同学聚会的游记,年会上表演节目非常精彩,同学聚会中大家聊起了婚姻家庭等话题,之后进行了游戏和打牌,一起度过了开心的周末。 keywords: -- 老友 -- 聚会 -tags: -- 日记 + - 公司年会 + - 高中同学 + - 聚会 + - 节目 + - 游戏 +tags: + - 记忆/高中 authors: -- 7Wate + - 7Wate date: 2022-02-21 --- - 这个周末公司年会、老同学聚会。虽然没有在家躺尸(现在真得越来越懒了),但是蛮快乐滴 🤪 ## 公司年会 diff --git a/blog/通货膨胀的猪.md b/Blog/通货膨胀的猪.md similarity index 87% rename from blog/通货膨胀的猪.md rename to Blog/通货膨胀的猪.md index e8425002..320955c6 100644 --- a/blog/通货膨胀的猪.md +++ b/Blog/通货膨胀的猪.md @@ -1,13 +1,16 @@ --- title: 通货膨胀的猪 -description: 通货膨胀的猪 +description: 最近公司食堂饭菜质量下降,涉及通货膨胀引发的猪肉价格上涨。本文从经济学角度探讨通货膨胀和猪肉价格的关系,分析了猪肉生产流程中各环节的影响因素,以及市场因素对猪肉价格的影响。 keywords: -- 猪 -- 经济 -tags: -- 经济 + - 通货膨胀 + - 猪肉价格 + - 生猪 + - 价格因素 + - 市场因素 +tags: + - 生活/随笔 authors: -- 7Wate + - 7Wate date: 2022-08-30 --- @@ -25,7 +28,7 @@ date: 2022-08-30 ![猪肉流程](https://static.7wate.com/img/2022/08/30/3484b5d51dad0.png) -接下来咱一个环节一个环节的细细道来,首先小猪仔出生时到成猪 200 天期间的费用,这一环节的损溢价由养殖场承担。 +接下来咱一个环节一个环节的细细道来,首先小猪仔出生时到成猪 200 天期间的费用,这一环节的损溢价由养殖场承担。 1. 养殖厂房:一次投资,费用固定,每年小修小补开销不大,影响因素为 1。 2. 人员工资:劳动力市场丰富,人员工资固定,市场价格小幅度波动,影响因素为 3。 @@ -52,7 +55,7 @@ date: 2022-08-30 ![猪肉](https://static.7wate.com/img/2022/08/30/9c4bdac7061b9.png) -如果按照成猪周期是 200 天左右,也就是 7 个月左右。其他所有因素稳定的情况下,线性预测猪肉价格最快也要明年开春 3 月份左右才会回落。 +如果按照成猪周期是 200 天左右,也就是 7 个月左右。其他所有因素稳定的情况下,线性预测猪肉价格最快也要明年开春 3 月份左右才会回落。 本文不具有科学性和普遍性,只是个人的一些瞥见。我其实想说的不是这,我想说的是工资工资工资!!!5 个月猪头价格翻倍,我他妈工资没涨好嘛,一家四口每个月按照 20 斤猪肉的情况下,我要比之前多花一倍的价钱。 diff --git a/blog/长安三万里.md b/Blog/长安三万里.md similarity index 94% rename from blog/长安三万里.md rename to Blog/长安三万里.md index 53dfc369..07ac48c0 100644 --- a/blog/长安三万里.md +++ b/Blog/长安三万里.md @@ -1,13 +1,17 @@ --- title: 长安三万里 -description: 安史之乱爆发后数年,吐蕃大军攻打西南。大唐节度使高适交战不利,长安岌岌可危。困守孤城的高适向监军太监回忆起自己与李白的一生往事。 +description: 电影《长安三万里》的观后感。 keywords: -- 长安三万里 -- 影评 -tags: -- 电影 + - 长安三万里 + - 李白 + - 杜甫 + - 高适 + - 盛唐 + - 安史之乱 +tags: + - 写作/影评 authors: -- 7Wate + - 7Wate date: 2023-07-17 --- @@ -20,7 +24,7 @@ date: 2023-07-17 《长安三万里》的剧情中,李白因为商人出身,无法考取功名,生性洒脱,虚掷光阴。高适虽满腔热血,追求功名,一心报国,但却处处事与愿违,整部剧中他俩形成了鲜明的对比。李白后来因为皇帝赏识被召进宫,但因性格洒脱,不甘心成为笼子中的金丝雀,便弃官寻求得道成仙。高适依旧坐冷板凳。杜甫科举不中,在长安待了数十年,最后落得一个屈辱般的芝麻官,但为了生活还是不得不接受。剧中最后李白颠沛流离,杜甫一生凄苦,剧中甚至连画面都不见了……后高适虽然大器晚成,但终究还是取得了功名。 > 片子很长,长到将近三个小时,长到身边有小朋友已经坐不住了,片子很短,短到王维张旭李龟年也只能匆匆一瞥,短到装不下李白高适以及盛唐灿烂的几十年,前半场鲜衣怒马少年郎与烈火烹油极尽繁华的盛唐,后半场前途困窘的中年人和高楼倾覆满目疮痍的河山,将进酒把片子推上的貌似是高潮,更是无限悲凉,好在悲凉后是两岸猿声啼不住,轻舟已过万重山。 -> +> > ——豆瓣书评 momo ![长安三万里](https://static.7wate.com/img/2023/07/25/c6c4c4aad5b0e.png) @@ -61,8 +65,8 @@ date: 2023-07-17 高适的一生经历了许多的波折。他年轻时随父亲在广东韶关生活,但在父亲去世后家道中落。曾有尝试在长安寻求职位,但却未能成功。这次失败之后,他选择在宋城(现在的河南商丘)从事农耕和捕鱼以为生,甚至一度陷入乞讨的困境。在稍长些的岁数后,高适北上至幽州,寻求朔方节度大使信安王李祎的庇护,与他一同出征对抗契丹。在这段战争期间,他创作了一系列的诗篇,这标志着他边塞诗创作的开始。尽管他在战争中表现出色,但他觉得自己的才能未被充分利用,因此决定返回宋州。 -随后,在公元 735 年,他前往长安参加官方考试,但并未通过,因此再次回到了宋州。在长安期间,他与王昌龄、王之涣等人结为知己。接下来的几年,他创作了众多知名的诗篇,包括《燕歌行》和《画马篇》等。后来,他开始游历四方,与诸如李白、杜甫等名家共同赞美古人,并创作了更多的诗篇。到了天宝八载(公元749年),高适被提拔为有道科,并在长安中举。在担任职务期间,他被任命为封丘县尉,但在之后的工作中并未得到满意,他选择了辞职,并最终进入了哥舒翰的幕府。 +随后,在公元 735 年,他前往长安参加官方考试,但并未通过,因此再次回到了宋州。在长安期间,他与王昌龄、王之涣等人结为知己。接下来的几年,他创作了众多知名的诗篇,包括《燕歌行》和《画马篇》等。后来,他开始游历四方,与诸如李白、杜甫等名家共同赞美古人,并创作了更多的诗篇。到了天宝八载(公元 749 年),高适被提拔为有道科,并在长安中举。在担任职务期间,他被任命为封丘县尉,但在之后的工作中并未得到满意,他选择了辞职,并最终进入了哥舒翰的幕府。 在安史之乱爆发后,高适的诗歌创作速度明显减缓,但他在文赋创作上却取得了新的突破。在这段时期,他被任命为左拾遗,转任监察御史,并辅佐哥舒翰守卫潼关。 -虽然高适在晚年享有富贵,但他直言不讳的性格激怒了权臣李辅国,因此被降职为太子少詹事,被派往东都。尽管如此,他仍然被提拔为彭州刺史,后来又被调任为蜀州刺史。在任期间,他曾主张合并剑南东川、西川节度使,但未获批准。后来,在唐代宗的召唤下,他代替严武出任剑南西川节度使,直至 765 年去世,享年72岁。 +虽然高适在晚年享有富贵,但他直言不讳的性格激怒了权臣李辅国,因此被降职为太子少詹事,被派往东都。尽管如此,他仍然被提拔为彭州刺史,后来又被调任为蜀州刺史。在任期间,他曾主张合并剑南东川、西川节度使,但未获批准。后来,在唐代宗的召唤下,他代替严武出任剑南西川节度使,直至 765 年去世,享年 72 岁。 diff --git a/blog/长安游记.md b/Blog/长安游记.md similarity index 94% rename from blog/长安游记.md rename to Blog/长安游记.md index f953c7ae..7ef303ad 100644 --- a/blog/长安游记.md +++ b/Blog/长安游记.md @@ -1,13 +1,19 @@ --- title: 长安游记 -description: 长安游记 +description: 一篇记录了我和几位好友南下旅行的游记,我们去了南阳、洛阳等地,体验了漂流、爬山、品尝美食等活动,一起度过了开心难忘的三天两夜。 keywords: -- 长安 -- 游记 -tags: -- 旅游 + - 旅行 + - 好友 + - 南阳 + - 洛阳 + - 漂流 + - 爬山 + - 美食 +tags: + - 游记/洛阳 + - 游记/南阳 authors: -- 7Wate + - 7Wate date: 2020-07-18 --- @@ -27,7 +33,7 @@ date: 2020-07-18 进入南阳界后都是山路,一路蜿蜒曲折,高低起伏的。那么偏远的山区,有的甚至只有一两户村民,国家依旧修的有国道、县道、以及正在建设的高速公路,不禁感叹「基建狂魔」名副其实。 -### 宝天曼大峡谷漂流 +## 宝天曼大峡谷漂流 在经过 5 个多小时的路程之后,第一站到达的是南阳宝天曼大峡谷漂流。大家都有点疲惫了,可能是因为天气不太好,几十公里的山路仅仅只碰见了一位老大爷、一辆摩托车;我们还挺怕漂流不营业了,那样就太 der 了。到达目的地之后,发现人还不少,提起兴致赶紧换衣服、买装备准备出发。 @@ -49,13 +55,13 @@ date: 2020-07-18 除了我大家都是第一次漂流哈哈,所以吃了不少亏。一路上大喊大叫,船还被人家给掀翻了(某个人喝了不少水哦),泼水用的盆也扔光了,全程下来只剩被欺负了;到最后我也是很迷茫,出来漂流了,半路上大家把盆都给仍光?我的天哪!真的是最惨的组合,不过大家玩的都挺开心的! -### 真心话大冒险 +## 真心话大冒险 漂流过后,我们赶到了栾川,住在老君山脚下的一间民宿。一顿酒饱饭足之后,回到民宿,开始了真心话大冒险哈哈哈。 某些人竟然是海王?某些人…… -### 栾川豆腐汤 +## 栾川豆腐汤 一直耳闻栾川的豆腐非常有名,豆腐汤也是及其好喝。第二天一早起来便点了一份外卖,尝一尝这栾川豆腐汤。 @@ -167,6 +173,6 @@ date: 2020-07-18 图片 -老君山风景图来自百度百科[老君山](https://baike.baidu.com/item/%E8%80%81%E5%90%9B%E5%B1%B1/22174?fr=aladdin) +老君山风景图来自百度百科 [老君山](https://baike.baidu.com/item/%E8%80%81%E5%90%9B%E5%B1%B1/22174?fr=aladdin) 老君山全景图来自老君山官方微信公众号 diff --git a/blog/闭门锁网.md b/Blog/闭门锁网.md similarity index 95% rename from blog/闭门锁网.md rename to Blog/闭门锁网.md index 26801638..86b22ac4 100644 --- a/blog/闭门锁网.md +++ b/Blog/闭门锁网.md @@ -1,15 +1,19 @@ --- title: 闭门锁网 -description: 背道而驰的互联网开放 +description: 互联网发展引发作者对网络环境变化的感慨,呼吁回归互联网开放共享的初心。 keywords: -- 互联网 -- 封闭 -tags: -- 感悟 + - 互联网 + - 等级保护 + - 微信小程序 + - 算法推送 + - 商业化 +tags: + - 生活/感悟 authors: -- 7Wate + - 7Wate date: 2022-09-15 --- + 最近临近天朝高层会议,公司也迎来了网安大队的检查,网安大队来了不少人,掺带着三方公司的技术员。简单询问了一些问题,并告诫临近会议不要出乱子,随后三方公司的技术员象征性的扫了扫漏洞。 其中一位警长深有意味说道,我们来不是吃拿卡要的,是为了保护人民、企业信息财产安全。有点那种去嫖娼不是犯法,而是为了救济失足少女,挽救背后成千上万的家庭哈哈哈。因为我们上了等保,所以问题不大。 diff --git a/blog/非黑即白.md b/Blog/非黑即白.md similarity index 76% rename from blog/非黑即白.md rename to Blog/非黑即白.md index d613c813..4fac52a4 100644 --- a/blog/非黑即白.md +++ b/Blog/非黑即白.md @@ -1,10 +1,12 @@ --- title: 非黑即白 -description: 非黑即白 +description: 年少时偏科严重,喜欢非黑即白的科目,不喜欢主观打分的文科。随着年龄增长,逐渐认识到生活不是非黑即白,而是充满灰色地带。认知的转变让我明白世事复杂,不存在标准答案,只能做一个不那么错的选择。 keywords: -- 非黑即白 + - 非黑既白 + - 灰色地带 + - 认知 tags: -- 感悟 + - 生活/感悟 author: 7Wate date: 2022-10-30 --- @@ -18,6 +20,3 @@ date: 2022-10-30 步入社会以后,随着阅历的增长加上生活的锻炼,开始慢慢的认识并打破了这个观点。生活不仅只有黑白灰,其充斥着各式各样的色彩,更夹杂着无数的中间地带。其没有所谓的标准答案,更没有非黑即白。 唯一能做的就是做一个不那么错的选择,仅此而已。 - - - diff --git a/blog/首页加载速度优化方案.md b/Blog/首页加载速度优化方案.md similarity index 75% rename from blog/首页加载速度优化方案.md rename to Blog/首页加载速度优化方案.md index a4441666..a4fd283d 100644 --- a/blog/首页加载速度优化方案.md +++ b/Blog/首页加载速度优化方案.md @@ -1,18 +1,18 @@ --- title: 首页加载速度优化方案 -description: 个人网站首页加载速度优化的一些心得 +description: 介绍了自己开发的Halo博客主题"Redemption"的优化工作。通过优化静态资源、样式表、字体等方面,显著提高了博客首页的加载速度。文章提到了使用CDN、压缩图片、优化CSS/JS代码、减少字体文件大小等方法,以及一些开源工具和项目。 keywords: -- 网站 -- 加速 -- 优化 -tags: -- 技术 + - Halo主题 + - 首屏 + - 优化 +tags: + - 开源项目/Redemption authors: -- 7Wate + - 7Wate date: 2022-11-03 --- -自己一条龙研发的 Halo 博客主题 [Redemption](https://blog.7wate.com/?p=85) 最近也是发布了首个正式版,在博友[杜郎俊赏](https://dujun.io/)提供的 [CleanCSS](https://dujun.io/cleancss-remove-unused-css.html) 工具下麻溜地搞定了,同时又添加了一些自己的想法。主要思路是首页做减法:删减无用代码文件、压缩静态资源体积,同时完全不影响首页的内容展示。 +自己一条龙研发的 Halo 博客主题 [Redemption](https://blog.7wate.com/?p=85) 最近也是发布了首个正式版,在博友 [杜郎俊赏](https://dujun.io/) 提供的 [CleanCSS](https://dujun.io/cleancss-remove-unused-css.html) 工具下麻溜地搞定了,同时又添加了一些自己的想法。主要思路是首页做减法:删减无用代码文件、压缩静态资源体积,同时完全不影响首页的内容展示。 ## 问题场景 @@ -32,7 +32,7 @@ date: 2022-11-03 ## 2.CSS/JS 代码 -如果想优化 CSS/JS 代码文件,可以尝试在博友[杜郎俊赏](https://dujun.io/)提供的 [CleanCSS](https://dujun.io/cleancss-remove-unused-css.html) 中一键优化代码。 +如果想优化 CSS/JS 代码文件,可以尝试在博友 [杜郎俊赏](https://dujun.io/) 提供的 [CleanCSS](https://dujun.io/cleancss-remove-unused-css.html) 中一键优化代码。 CleanCSS 第一次直接优化了之后提升明显,但是发现 remixicon.css 字体图标有问题。然而这个优化还是最大问题,毕竟加上字体 1.3s,遂又找了其他方法实现(**后来发现是我没用明白 CleanCSS 🤣**)。 @@ -55,4 +55,3 @@ CleanCSS 第一次直接优化了之后提升明显,但是发现 remixicon.css 在特定问题场景下,通过一套操作优化后的首页体积仅仅 35kB,加载时间 597 毫秒。就连 CDN 都不用套,全国平均访问延时 0.6s。需要注意的地方是,优化字体比较偏激可能导致页面显示不正常。其次我为了避免其他页面出现未知错误,利用代码进行判断仅仅对首页进行了优化。 现在 H5 的 CSS 样式库越来越多了,网页效果越来越优美了,同时也变得臃肿了起来。**不过只要网速快,优化个毛线!奥里给!!!** - diff --git a/blog/骑行在路上.md b/Blog/骑行在路上.md similarity index 94% rename from blog/骑行在路上.md rename to Blog/骑行在路上.md index c0b49e70..32b7817b 100644 --- a/blog/骑行在路上.md +++ b/Blog/骑行在路上.md @@ -1,28 +1,19 @@ --- title: 骑行在路上 -description: 骑行在路上 +description: 从中学时期就对骑行产生兴趣,但直到大学毕业后才实现了自己的骑行梦想。文章中包括了我的骑行经历,路线图,以及他所经历的各个站点的风景和体验。 keywords: -- 骑行 -- 游记 -tags: -- 旅游 -authors: -- 7Wate -date: 2020-05-27 ---- - - ---- -title: 骑行在路上 -date: 2020-05-27 12:02:59.0 -updated: 2022-01-10 12:04:50.296 -url: /?p=8 -categories: - -- 新随笔 + - 骑行 + - 中学 + - 大学 + - 洛阳 + - 开封 tags: -- 游记 - + - 游记/骑行 + - 游记/开封 + - 游记/洛阳 +authors: + - 7Wate +date: 2020-05-27 --- ## 始于 @@ -31,8 +22,6 @@ tags: 最开始打算骑行是在中学,那时我每周末上学都是步行去学校的。在当时我们班有一个市区的同学总是骑行来学校,年少的我觉得很酷,便开始对骑行有很大的兴趣。中学大家总是会谈论到去哪个高中、环境怎么怎么样、实力怎么样。从小我就没有出过远门,更是很少去市区,所以一直对繁华的市区有很大的憧憬。然后就梦想着可以自己去外国语、省实验这些好学校走走看看。 - - 想着骑自行车去,拿着自己的大头机去拍照,集成册。然后再出书分享给很多和我一样的,想去看看却没有机会去看看的。不过那时候对于年少的我,很多事情是无法做到的。 ### 高中 @@ -162,6 +151,7 @@ tags: ### 路书 ![行者](https://static.7wate.com/img/2020/08/03/e88e6c32050d7.png) + ![行者](https://static.7wate.com/img/2020/08/03/88c1e99ab25aa.png) ### 单车 @@ -186,7 +176,7 @@ tags: **下午 5 点**,骑行至中牟县刘集。距离目的地还有 40 公里。由于全程逆风,消耗了更多的体力。同时根据身体状况,不敢再贸然的去喝功能性饮料。只能喝苏打水和矿泉水。巡航速度由 21 km/h 逐步降低至 13 km/h。此时,骑行 10 公里已经变得很艰难。只有不停的休息。 -**晚上 7 点**,距离目的地还有 18 公里,已经是骑行 + 滑行。最后 23 公里,完全没有了任何体力。只有机械式的往复运动,感觉不到疲惫,感觉不到屁股的疼痛。 +**晚上 7 点**,距离目的地还有 18 公里,已经是骑行 + 滑行。最后 23 公里,完全没有了任何体力。只有机械式的往复运动,感觉不到疲惫,感觉不到屁股的疼痛。 **晚上 8 点**,距离目的地还有 7 公里,自我感觉有点昏沉。下车推行 1 公里,检查了身体状况。 @@ -207,4 +197,5 @@ tags: ---------- 图片 + 本文路线图、海拔示意图来自 Google Earth Pro diff --git a/blog/黄山归来不看岳.md b/Blog/黄山归来不看岳.md similarity index 89% rename from blog/黄山归来不看岳.md rename to Blog/黄山归来不看岳.md index 16410093..114a519b 100644 --- a/blog/黄山归来不看岳.md +++ b/Blog/黄山归来不看岳.md @@ -1,14 +1,16 @@ --- title: 黄山归来不看岳 -description: 黄山之旅 +description: 自驾游黄山,途径徽州古城、宏村,感受徽派建筑。徒步爬黄山主峰观赏日出日落,山顶遇到困境无处住宿。虽然过程艰辛,还是看到了壮美的银河,完成了此行主要目的。总体感觉不错,但觉得黄山过度商业化,一次就足够。 keywords: -- 黄山 -- 徽州 -- 宏村 -tags: -- 旅游 + - 自驾游 + - 徽州古城 + - 宏村 + - 黄山 +tags: + - 游记/黄山 + - 游记/徽州 authors: -- 7Wate + - 7Wate date: 2023-05-04 --- @@ -20,16 +22,16 @@ date: 2023-05-04 | 时间 | 行程 | 备注 | | ------------- | -------- | ------------------------------------------------------------ | -| 4月14日 14:00 | 出发郑州 | 自驾前往徽州古城,预计行程约 870 公里,耗时约 9 小时。 | -| 4月14日 23:00 | 到达徽州 | 选择附近的酒店住宿,休息。 | -| 4月15日 8:00 | 徽州古城 | 游览古城风貌,了解徽州文化。时长约 4 小时 | -| 4月15日 13:00 | 出发宏村 | 前往宏村,欣赏徽派建筑风格,拍摄美丽的乡村风光。时长约 2 小时。 | -| 4月15日 18:00 | 黄山温泉 | 泡温泉放松身心。时长约 2 小时。 | -| 4月16日 10:00 | 开始爬山 | 从云谷寺门户进山,途径白鹅岭、始信峰等景点. | -| 4月16日 17:30 | 黄山日落 | 在光明顶观看日落,预计日落时间为 17:30。 | -| 4月17日 22:00 | 银河升起 | 预计银河升起时间为 22:00,可以在光明顶附近拍摄星空 。 | -| 4月17日 05:30 | 黄山日出 | 黄山山顶观看日出,预计日出时间为 05:30。 | -| 4月17日 10:00 | 返回郑州 | 黄山出发返回郑州,预计行程约 800 公里,耗时约 9 小时。 | +| 4 月 14 日 14:00 | 出发郑州 | 自驾前往徽州古城,预计行程约 870 公里,耗时约 9 小时。 | +| 4 月 14 日 23:00 | 到达徽州 | 选择附近的酒店住宿,休息。 | +| 4 月 15 日 8:00 | 徽州古城 | 游览古城风貌,了解徽州文化。时长约 4 小时 | +| 4 月 15 日 13:00 | 出发宏村 | 前往宏村,欣赏徽派建筑风格,拍摄美丽的乡村风光。时长约 2 小时。 | +| 4 月 15 日 18:00 | 黄山温泉 | 泡温泉放松身心。时长约 2 小时。 | +| 4 月 16 日 10:00 | 开始爬山 | 从云谷寺门户进山,途径白鹅岭、始信峰等景点. | +| 4 月 16 日 17:30 | 黄山日落 | 在光明顶观看日落,预计日落时间为 17:30。 | +| 4 月 17 日 22:00 | 银河升起 | 预计银河升起时间为 22:00,可以在光明顶附近拍摄星空 。 | +| 4 月 17 日 05:30 | 黄山日出 | 黄山山顶观看日出,预计日出时间为 05:30。 | +| 4 月 17 日 10:00 | 返回郑州 | 黄山出发返回郑州,预计行程约 800 公里,耗时约 9 小时。 | 我们是自驾的方式,一共 3.5 天左右的时间。然后计划第一站徽州古城,接着宏村,最后再登黄山。行程表是 ChatGPT 在我的引导下制定的,真香 ~ diff --git a/journal/2022/W34/2022-08-24.md b/Journal/2022/W34/2022-08-24.md similarity index 100% rename from journal/2022/W34/2022-08-24.md rename to Journal/2022/W34/2022-08-24.md diff --git a/journal/2022/W34/2022-08-25.md b/Journal/2022/W34/2022-08-25.md similarity index 100% rename from journal/2022/W34/2022-08-25.md rename to Journal/2022/W34/2022-08-25.md diff --git a/journal/2022/W34/2022-08-26.md b/Journal/2022/W34/2022-08-26.md similarity index 100% rename from journal/2022/W34/2022-08-26.md rename to Journal/2022/W34/2022-08-26.md diff --git a/journal/2022/W34/2022-08-27.md b/Journal/2022/W34/2022-08-27.md similarity index 100% rename from journal/2022/W34/2022-08-27.md rename to Journal/2022/W34/2022-08-27.md diff --git a/journal/2022/W34/2022-08-28.md b/Journal/2022/W34/2022-08-28.md similarity index 100% rename from journal/2022/W34/2022-08-28.md rename to Journal/2022/W34/2022-08-28.md diff --git a/journal/2022/W34/2022-W34.md b/Journal/2022/W34/2022-W34.md similarity index 100% rename from journal/2022/W34/2022-W34.md rename to Journal/2022/W34/2022-W34.md diff --git a/journal/2022/W35/2022-08-29.md b/Journal/2022/W35/2022-08-29.md similarity index 100% rename from journal/2022/W35/2022-08-29.md rename to Journal/2022/W35/2022-08-29.md diff --git a/journal/2022/W35/2022-08-30.md b/Journal/2022/W35/2022-08-30.md similarity index 100% rename from journal/2022/W35/2022-08-30.md rename to Journal/2022/W35/2022-08-30.md diff --git a/journal/2022/W35/2022-08-31.md b/Journal/2022/W35/2022-08-31.md similarity index 100% rename from journal/2022/W35/2022-08-31.md rename to Journal/2022/W35/2022-08-31.md diff --git a/journal/2022/W35/2022-09-01.md b/Journal/2022/W35/2022-09-01.md similarity index 100% rename from journal/2022/W35/2022-09-01.md rename to Journal/2022/W35/2022-09-01.md diff --git a/journal/2022/W35/2022-W35.md b/Journal/2022/W35/2022-W35.md similarity index 100% rename from journal/2022/W35/2022-W35.md rename to Journal/2022/W35/2022-W35.md diff --git a/journal/2022/W36/2022-09-05.md b/Journal/2022/W36/2022-09-05.md similarity index 100% rename from journal/2022/W36/2022-09-05.md rename to Journal/2022/W36/2022-09-05.md diff --git a/journal/2022/W36/2022-09-06.md b/Journal/2022/W36/2022-09-06.md similarity index 100% rename from journal/2022/W36/2022-09-06.md rename to Journal/2022/W36/2022-09-06.md diff --git a/journal/2022/W36/2022-09-07.md b/Journal/2022/W36/2022-09-07.md similarity index 100% rename from journal/2022/W36/2022-09-07.md rename to Journal/2022/W36/2022-09-07.md diff --git a/journal/2022/W36/2022-09-08.md b/Journal/2022/W36/2022-09-08.md similarity index 100% rename from journal/2022/W36/2022-09-08.md rename to Journal/2022/W36/2022-09-08.md diff --git a/journal/2022/W36/2022-W36.md b/Journal/2022/W36/2022-W36.md similarity index 100% rename from journal/2022/W36/2022-W36.md rename to Journal/2022/W36/2022-W36.md diff --git a/journal/2022/W37/2022-09-12.md b/Journal/2022/W37/2022-09-12.md similarity index 100% rename from journal/2022/W37/2022-09-12.md rename to Journal/2022/W37/2022-09-12.md diff --git a/journal/2022/W37/2022-09-13.md b/Journal/2022/W37/2022-09-13.md similarity index 100% rename from journal/2022/W37/2022-09-13.md rename to Journal/2022/W37/2022-09-13.md diff --git a/journal/2022/W37/2022-09-14.md b/Journal/2022/W37/2022-09-14.md similarity index 100% rename from journal/2022/W37/2022-09-14.md rename to Journal/2022/W37/2022-09-14.md diff --git a/journal/2022/W37/2022-09-15.md b/Journal/2022/W37/2022-09-15.md similarity index 100% rename from journal/2022/W37/2022-09-15.md rename to Journal/2022/W37/2022-09-15.md diff --git a/journal/2022/W37/2022-09-16.md b/Journal/2022/W37/2022-09-16.md similarity index 100% rename from journal/2022/W37/2022-09-16.md rename to Journal/2022/W37/2022-09-16.md diff --git a/journal/2022/W37/2022-09-17.md b/Journal/2022/W37/2022-09-17.md similarity index 100% rename from journal/2022/W37/2022-09-17.md rename to Journal/2022/W37/2022-09-17.md diff --git a/journal/2022/W37/2022-09-18.md b/Journal/2022/W37/2022-09-18.md similarity index 100% rename from journal/2022/W37/2022-09-18.md rename to Journal/2022/W37/2022-09-18.md diff --git a/journal/2022/W37/2022-W37.md b/Journal/2022/W37/2022-W37.md similarity index 100% rename from journal/2022/W37/2022-W37.md rename to Journal/2022/W37/2022-W37.md diff --git a/journal/2022/W38/2022-09-19.md b/Journal/2022/W38/2022-09-19.md similarity index 100% rename from journal/2022/W38/2022-09-19.md rename to Journal/2022/W38/2022-09-19.md diff --git a/journal/2022/W38/2022-09-20.md b/Journal/2022/W38/2022-09-20.md similarity index 100% rename from journal/2022/W38/2022-09-20.md rename to Journal/2022/W38/2022-09-20.md diff --git a/journal/2022/W38/2022-09-21.md b/Journal/2022/W38/2022-09-21.md similarity index 100% rename from journal/2022/W38/2022-09-21.md rename to Journal/2022/W38/2022-09-21.md diff --git a/journal/2022/W38/2022-09-22.md b/Journal/2022/W38/2022-09-22.md similarity index 100% rename from journal/2022/W38/2022-09-22.md rename to Journal/2022/W38/2022-09-22.md diff --git a/journal/2022/W38/2022-W38.md b/Journal/2022/W38/2022-W38.md similarity index 100% rename from journal/2022/W38/2022-W38.md rename to Journal/2022/W38/2022-W38.md diff --git a/journal/2022/W39/2022-09-28.md b/Journal/2022/W39/2022-09-28.md similarity index 100% rename from journal/2022/W39/2022-09-28.md rename to Journal/2022/W39/2022-09-28.md diff --git a/journal/2022/W39/2022-09-29.md b/Journal/2022/W39/2022-09-29.md similarity index 100% rename from journal/2022/W39/2022-09-29.md rename to Journal/2022/W39/2022-09-29.md diff --git a/journal/2022/W39/2022-W39.md b/Journal/2022/W39/2022-W39.md similarity index 100% rename from journal/2022/W39/2022-W39.md rename to Journal/2022/W39/2022-W39.md diff --git a/journal/2022/W41/2022-10-10.md b/Journal/2022/W41/2022-10-10.md similarity index 100% rename from journal/2022/W41/2022-10-10.md rename to Journal/2022/W41/2022-10-10.md diff --git a/journal/2022/W41/2022-10-11.md b/Journal/2022/W41/2022-10-11.md similarity index 100% rename from journal/2022/W41/2022-10-11.md rename to Journal/2022/W41/2022-10-11.md diff --git a/journal/2022/W41/2022-10-12.md b/Journal/2022/W41/2022-10-12.md similarity index 100% rename from journal/2022/W41/2022-10-12.md rename to Journal/2022/W41/2022-10-12.md diff --git a/journal/2022/W41/2022-10-13.md b/Journal/2022/W41/2022-10-13.md similarity index 100% rename from journal/2022/W41/2022-10-13.md rename to Journal/2022/W41/2022-10-13.md diff --git a/journal/2022/W41/2022-10-14.md b/Journal/2022/W41/2022-10-14.md similarity index 100% rename from journal/2022/W41/2022-10-14.md rename to Journal/2022/W41/2022-10-14.md diff --git a/journal/2022/W41/2022-10-16.md b/Journal/2022/W41/2022-10-16.md similarity index 100% rename from journal/2022/W41/2022-10-16.md rename to Journal/2022/W41/2022-10-16.md diff --git a/journal/2022/W41/2022-W41.md b/Journal/2022/W41/2022-W41.md similarity index 100% rename from journal/2022/W41/2022-W41.md rename to Journal/2022/W41/2022-W41.md diff --git a/journal/2022/W42/2022-10-17.md b/Journal/2022/W42/2022-10-17.md similarity index 100% rename from journal/2022/W42/2022-10-17.md rename to Journal/2022/W42/2022-10-17.md diff --git a/journal/2022/W42/2022-10-18.md b/Journal/2022/W42/2022-10-18.md similarity index 100% rename from journal/2022/W42/2022-10-18.md rename to Journal/2022/W42/2022-10-18.md diff --git a/journal/2022/W42/2022-10-19.md b/Journal/2022/W42/2022-10-19.md similarity index 100% rename from journal/2022/W42/2022-10-19.md rename to Journal/2022/W42/2022-10-19.md diff --git a/journal/2022/W42/2022-10-21.md b/Journal/2022/W42/2022-10-21.md similarity index 100% rename from journal/2022/W42/2022-10-21.md rename to Journal/2022/W42/2022-10-21.md diff --git a/journal/2022/W42/2022-W42.md b/Journal/2022/W42/2022-W42.md similarity index 100% rename from journal/2022/W42/2022-W42.md rename to Journal/2022/W42/2022-W42.md diff --git a/journal/2022/W43/2022-10-24.md b/Journal/2022/W43/2022-10-24.md similarity index 100% rename from journal/2022/W43/2022-10-24.md rename to Journal/2022/W43/2022-10-24.md diff --git a/journal/2022/W43/2022-10-26.md b/Journal/2022/W43/2022-10-26.md similarity index 100% rename from journal/2022/W43/2022-10-26.md rename to Journal/2022/W43/2022-10-26.md diff --git a/journal/2022/W43/2022-W43.md b/Journal/2022/W43/2022-W43.md similarity index 100% rename from journal/2022/W43/2022-W43.md rename to Journal/2022/W43/2022-W43.md diff --git a/journal/2022/W44/2022-11-02.md b/Journal/2022/W44/2022-11-02.md similarity index 100% rename from journal/2022/W44/2022-11-02.md rename to Journal/2022/W44/2022-11-02.md diff --git a/journal/2022/W44/2022-W44.md b/Journal/2022/W44/2022-W44.md similarity index 100% rename from journal/2022/W44/2022-W44.md rename to Journal/2022/W44/2022-W44.md diff --git a/journal/2022/W45/2022-11-10.md b/Journal/2022/W45/2022-11-10.md similarity index 100% rename from journal/2022/W45/2022-11-10.md rename to Journal/2022/W45/2022-11-10.md diff --git a/journal/2022/W45/2022-11-11.md b/Journal/2022/W45/2022-11-11.md similarity index 100% rename from journal/2022/W45/2022-11-11.md rename to Journal/2022/W45/2022-11-11.md diff --git a/journal/2022/W45/2022-11-12.md b/Journal/2022/W45/2022-11-12.md similarity index 100% rename from journal/2022/W45/2022-11-12.md rename to Journal/2022/W45/2022-11-12.md diff --git a/journal/2022/W45/2022-11-13.md b/Journal/2022/W45/2022-11-13.md similarity index 100% rename from journal/2022/W45/2022-11-13.md rename to Journal/2022/W45/2022-11-13.md diff --git a/journal/2022/W46/2022-11-18.md b/Journal/2022/W46/2022-11-18.md similarity index 100% rename from journal/2022/W46/2022-11-18.md rename to Journal/2022/W46/2022-11-18.md diff --git a/journal/2022/W46/2022-11-20.md b/Journal/2022/W46/2022-11-20.md similarity index 100% rename from journal/2022/W46/2022-11-20.md rename to Journal/2022/W46/2022-11-20.md diff --git a/journal/2022/W47/2022-11-21.md b/Journal/2022/W47/2022-11-21.md similarity index 100% rename from journal/2022/W47/2022-11-21.md rename to Journal/2022/W47/2022-11-21.md diff --git a/journal/2022/W47/2022-11-22.md b/Journal/2022/W47/2022-11-22.md similarity index 100% rename from journal/2022/W47/2022-11-22.md rename to Journal/2022/W47/2022-11-22.md diff --git a/journal/2022/W47/2022-W47.md b/Journal/2022/W47/2022-W47.md similarity index 100% rename from journal/2022/W47/2022-W47.md rename to Journal/2022/W47/2022-W47.md diff --git a/journal/2022/W48/2022-11-28.md b/Journal/2022/W48/2022-11-28.md similarity index 100% rename from journal/2022/W48/2022-11-28.md rename to Journal/2022/W48/2022-11-28.md diff --git a/journal/2022/W48/2022-11-29.md b/Journal/2022/W48/2022-11-29.md similarity index 100% rename from journal/2022/W48/2022-11-29.md rename to Journal/2022/W48/2022-11-29.md diff --git a/journal/2022/W48/2022-12-01.md b/Journal/2022/W48/2022-12-01.md similarity index 100% rename from journal/2022/W48/2022-12-01.md rename to Journal/2022/W48/2022-12-01.md diff --git a/journal/2022/W48/2022-12-04.md b/Journal/2022/W48/2022-12-04.md similarity index 100% rename from journal/2022/W48/2022-12-04.md rename to Journal/2022/W48/2022-12-04.md diff --git a/journal/2022/W49/2022-12-06.md b/Journal/2022/W49/2022-12-06.md similarity index 100% rename from journal/2022/W49/2022-12-06.md rename to Journal/2022/W49/2022-12-06.md diff --git a/journal/2022/W49/2022-W49.md b/Journal/2022/W49/2022-W49.md similarity index 100% rename from journal/2022/W49/2022-W49.md rename to Journal/2022/W49/2022-W49.md diff --git a/journal/2022/W50/2022-12-12.md b/Journal/2022/W50/2022-12-12.md similarity index 100% rename from journal/2022/W50/2022-12-12.md rename to Journal/2022/W50/2022-12-12.md diff --git a/journal/2023/W10/2023-W10.md b/Journal/2023/W10/2023-W10.md similarity index 100% rename from journal/2023/W10/2023-W10.md rename to Journal/2023/W10/2023-W10.md diff --git a/journal/2023/W12/2023-03-20.md b/Journal/2023/W12/2023-03-20.md similarity index 100% rename from journal/2023/W12/2023-03-20.md rename to Journal/2023/W12/2023-03-20.md diff --git a/journal/2023/W12/2023-03-21.md b/Journal/2023/W12/2023-03-21.md similarity index 100% rename from journal/2023/W12/2023-03-21.md rename to Journal/2023/W12/2023-03-21.md diff --git a/journal/2023/W12/2023-W12.md b/Journal/2023/W12/2023-W12.md similarity index 100% rename from journal/2023/W12/2023-W12.md rename to Journal/2023/W12/2023-W12.md diff --git a/journal/2023/W14/2023-04-08.md b/Journal/2023/W14/2023-04-08.md similarity index 100% rename from journal/2023/W14/2023-04-08.md rename to Journal/2023/W14/2023-04-08.md diff --git a/journal/2023/W14/2023-W14.md b/Journal/2023/W14/2023-W14.md similarity index 100% rename from journal/2023/W14/2023-W14.md rename to Journal/2023/W14/2023-W14.md diff --git a/journal/2023/W16/2023-04-21.md b/Journal/2023/W16/2023-04-21.md similarity index 100% rename from journal/2023/W16/2023-04-21.md rename to Journal/2023/W16/2023-04-21.md diff --git a/journal/2023/W16/2023-04-23.md b/Journal/2023/W16/2023-04-23.md similarity index 100% rename from journal/2023/W16/2023-04-23.md rename to Journal/2023/W16/2023-04-23.md diff --git a/journal/2023/W2/2023-W2.md b/Journal/2023/W2/2023-W2.md similarity index 100% rename from journal/2023/W2/2023-W2.md rename to Journal/2023/W2/2023-W2.md diff --git a/journal/2023/W22/2023-05-31.md b/Journal/2023/W22/2023-05-31.md similarity index 100% rename from journal/2023/W22/2023-05-31.md rename to Journal/2023/W22/2023-05-31.md diff --git a/journal/2023/W22/2023-06-01.md b/Journal/2023/W22/2023-06-01.md similarity index 100% rename from journal/2023/W22/2023-06-01.md rename to Journal/2023/W22/2023-06-01.md diff --git a/journal/2023/W22/2023-W22.md b/Journal/2023/W22/2023-W22.md similarity index 100% rename from journal/2023/W22/2023-W22.md rename to Journal/2023/W22/2023-W22.md diff --git a/journal/2023/W23/2023-06-05.md b/Journal/2023/W23/2023-06-05.md similarity index 100% rename from journal/2023/W23/2023-06-05.md rename to Journal/2023/W23/2023-06-05.md diff --git a/journal/2023/W23/2023-06-08.md b/Journal/2023/W23/2023-06-08.md similarity index 100% rename from journal/2023/W23/2023-06-08.md rename to Journal/2023/W23/2023-06-08.md diff --git a/journal/2023/W23/2023-W23.md b/Journal/2023/W23/2023-W23.md similarity index 100% rename from journal/2023/W23/2023-W23.md rename to Journal/2023/W23/2023-W23.md diff --git a/journal/2023/W24/2023-06-12.md b/Journal/2023/W24/2023-06-12.md similarity index 100% rename from journal/2023/W24/2023-06-12.md rename to Journal/2023/W24/2023-06-12.md diff --git a/journal/2023/W24/2023-06-13.md b/Journal/2023/W24/2023-06-13.md similarity index 100% rename from journal/2023/W24/2023-06-13.md rename to Journal/2023/W24/2023-06-13.md diff --git a/journal/2023/W24/2023-06-15.md b/Journal/2023/W24/2023-06-15.md similarity index 100% rename from journal/2023/W24/2023-06-15.md rename to Journal/2023/W24/2023-06-15.md diff --git a/journal/2023/W24/2023-W24.md b/Journal/2023/W24/2023-W24.md similarity index 100% rename from journal/2023/W24/2023-W24.md rename to Journal/2023/W24/2023-W24.md diff --git a/journal/2023/W25/2023-W25.md b/Journal/2023/W25/2023-W25.md similarity index 100% rename from journal/2023/W25/2023-W25.md rename to Journal/2023/W25/2023-W25.md diff --git a/journal/2023/W26/2023-06-26.md b/Journal/2023/W26/2023-06-26.md similarity index 100% rename from journal/2023/W26/2023-06-26.md rename to Journal/2023/W26/2023-06-26.md diff --git a/journal/2023/W3/2023-01-16.md b/Journal/2023/W3/2023-01-16.md similarity index 100% rename from journal/2023/W3/2023-01-16.md rename to Journal/2023/W3/2023-01-16.md diff --git a/journal/2023/W3/2023-01-18.md b/Journal/2023/W3/2023-01-18.md similarity index 100% rename from journal/2023/W3/2023-01-18.md rename to Journal/2023/W3/2023-01-18.md diff --git a/journal/2023/W31/2023-W31.md b/Journal/2023/W31/2023-W31.md similarity index 100% rename from journal/2023/W31/2023-W31.md rename to Journal/2023/W31/2023-W31.md diff --git a/journal/2023/W32/2023-08-07.md b/Journal/2023/W32/2023-08-07.md similarity index 100% rename from journal/2023/W32/2023-08-07.md rename to Journal/2023/W32/2023-08-07.md diff --git a/journal/2023/W32/2023-08-08.md b/Journal/2023/W32/2023-08-08.md similarity index 100% rename from journal/2023/W32/2023-08-08.md rename to Journal/2023/W32/2023-08-08.md diff --git a/journal/2023/W32/2023-W32.md b/Journal/2023/W32/2023-W32.md similarity index 100% rename from journal/2023/W32/2023-W32.md rename to Journal/2023/W32/2023-W32.md diff --git a/journal/2023/W33/2023-W33.md b/Journal/2023/W33/2023-W33.md similarity index 100% rename from journal/2023/W33/2023-W33.md rename to Journal/2023/W33/2023-W33.md diff --git a/journal/2023/W35/2023-W35.md b/Journal/2023/W35/2023-W35.md similarity index 100% rename from journal/2023/W35/2023-W35.md rename to Journal/2023/W35/2023-W35.md diff --git a/journal/2023/W36/2023-W36.md b/Journal/2023/W36/2023-W36.md similarity index 100% rename from journal/2023/W36/2023-W36.md rename to Journal/2023/W36/2023-W36.md diff --git a/journal/2023/W37/2023-W37.md b/Journal/2023/W37/2023-W37.md similarity index 100% rename from journal/2023/W37/2023-W37.md rename to Journal/2023/W37/2023-W37.md diff --git a/journal/2023/W40/2023-W40.md b/Journal/2023/W40/2023-W40.md similarity index 100% rename from journal/2023/W40/2023-W40.md rename to Journal/2023/W40/2023-W40.md diff --git a/journal/2023/W5/2023-W5.md b/Journal/2023/W5/2023-W5.md similarity index 100% rename from journal/2023/W5/2023-W5.md rename to Journal/2023/W5/2023-W5.md diff --git a/journal/2023/W6/2023-W6.md b/Journal/2023/W6/2023-W6.md similarity index 100% rename from journal/2023/W6/2023-W6.md rename to Journal/2023/W6/2023-W6.md diff --git a/journal/2023/W7/2023-02-14.md b/Journal/2023/W7/2023-02-14.md similarity index 100% rename from journal/2023/W7/2023-02-14.md rename to Journal/2023/W7/2023-02-14.md diff --git a/journal/2023/W7/2023-02-15.md b/Journal/2023/W7/2023-02-15.md similarity index 100% rename from journal/2023/W7/2023-02-15.md rename to Journal/2023/W7/2023-02-15.md diff --git a/journal/2023/W7/2023-02-16.md b/Journal/2023/W7/2023-02-16.md similarity index 100% rename from journal/2023/W7/2023-02-16.md rename to Journal/2023/W7/2023-02-16.md diff --git a/journal/2023/W8/2023-02-20.md b/Journal/2023/W8/2023-02-20.md similarity index 100% rename from journal/2023/W8/2023-02-20.md rename to Journal/2023/W8/2023-02-20.md diff --git a/journal/2023/W8/2023-02-22.md b/Journal/2023/W8/2023-02-22.md similarity index 100% rename from journal/2023/W8/2023-02-22.md rename to Journal/2023/W8/2023-02-22.md diff --git a/License b/License deleted file mode 100644 index e142a525..00000000 --- a/License +++ /dev/null @@ -1,625 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The GNU General Public License is a free, copyleft license for software and -other kinds of works. - -The licenses for most software and other practical works are designed to take -away your freedom to share and change the works. By contrast, the GNU General -Public License is intended to guarantee your freedom to share and change all -versions of a program--to make sure it remains free software for all its users. -We, the Free Software Foundation, use the GNU General Public License for most -of our software; it applies also to any other work released this way by its -authors. You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for them if you wish), that -you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs, and that you know you -can do these things. - -To protect your rights, we need to prevent others from denying you these rights -or asking you to surrender the rights. Therefore, you have certain responsibilities -if you distribute copies of the software, or if you modify it: responsibilities -to respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or -for a fee, you must pass on to the recipients the same freedoms that you received. -You must make sure that they, too, receive or can get the source code. And -you must show them these terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: (1) assert -copyright on the software, and (2) offer you this License giving you legal -permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that -there is no warranty for this free software. For both users' and authors' -sake, the GPL requires that modified versions be marked as changed, so that -their problems will not be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified -versions of the software inside them, although the manufacturer can do so. -This is fundamentally incompatible with the aim of protecting users' freedom -to change the software. The systematic pattern of such abuse occurs in the -area of products for individuals to use, which is precisely where it is most -unacceptable. Therefore, we have designed this version of the GPL to prohibit -the practice for those products. If such problems arise substantially in other -domains, we stand ready to extend this provision to those domains in future -versions of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. States -should not allow patents to restrict development and use of software on general-purpose -computers, but in those that do, we wish to avoid the special danger that -patents applied to a free program could make it effectively proprietary. To -prevent this, the GPL assures that patents cannot be used to render the program -non-free. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - -"Copyright" also means copyright-like laws that apply to other kinds of works, -such as semiconductor masks. - -"The Program" refers to any copyrightable work licensed under this License. -Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals -or organizations. - -To "modify" a work means to copy from or adapt all or part of the work in -a fashion requiring copyright permission, other than the making of an exact -copy. The resulting work is called a "modified version" of the earlier work -or a work "based on" the earlier work. - -A "covered work" means either the unmodified Program or a work based on the -Program. - -To "propagate" a work means to do anything with it that, without permission, -would make you directly or secondarily liable for infringement under applicable -copyright law, except executing it on a computer or modifying a private copy. -Propagation includes copying, distribution (with or without modification), -making available to the public, and in some countries other activities as -well. - -To "convey" a work means any kind of propagation that enables other parties -to make or receive copies. Mere interaction with a user through a computer -network, with no transfer of a copy, is not conveying. - -An interactive user interface displays "Appropriate Legal Notices" to the -extent that it includes a convenient and prominently visible feature that -(1) displays an appropriate copyright notice, and (2) tells the user that -there is no warranty for the work (except to the extent that warranties are -provided), that licensees may convey the work under this License, and how -to view a copy of this License. If the interface presents a list of user commands -or options, such as a menu, a prominent item in the list meets this criterion. - - 1. Source Code. - -The "source code" for a work means the preferred form of the work for making -modifications to it. "Object code" means any non-source form of a work. - -A "Standard Interface" means an interface that either is an official standard -defined by a recognized standards body, or, in the case of interfaces specified -for a particular programming language, one that is widely used among developers -working in that language. - -The "System Libraries" of an executable work include anything, other than -the work as a whole, that (a) is included in the normal form of packaging -a Major Component, but which is not part of that Major Component, and (b) -serves only to enable use of the work with that Major Component, or to implement -a Standard Interface for which an implementation is available to the public -in source code form. A "Major Component", in this context, means a major essential -component (kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to produce -the work, or an object code interpreter used to run it. - -The "Corresponding Source" for a work in object code form means all the source -code needed to generate, install, and (for an executable work) run the object -code and to modify the work, including scripts to control those activities. -However, it does not include the work's System Libraries, or general-purpose -tools or generally available free programs which are used unmodified in performing -those activities but which are not part of the work. For example, Corresponding -Source includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically linked -subprograms that the work is specifically designed to require, such as by -intimate data communication or control flow between those subprograms and -other parts of the work. - -The Corresponding Source need not include anything that users can regenerate -automatically from other parts of the Corresponding Source. - - The Corresponding Source for a work in source code form is that same work. - - 2. Basic Permissions. - -All rights granted under this License are granted for the term of copyright -on the Program, and are irrevocable provided the stated conditions are met. -This License explicitly affirms your unlimited permission to run the unmodified -Program. The output from running a covered work is covered by this License -only if the output, given its content, constitutes a covered work. This License -acknowledges your rights of fair use or other equivalent, as provided by copyright -law. - -You may make, run and propagate covered works that you do not convey, without -conditions so long as your license otherwise remains in force. You may convey -covered works to others for the sole purpose of having them make modifications -exclusively for you, or provide you with facilities for running those works, -provided that you comply with the terms of this License in conveying all material -for which you do not control copyright. Those thus making or running the covered -works for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of your copyrighted -material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the conditions -stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological measure -under any applicable law fulfilling obligations under article 11 of the WIPO -copyright treaty adopted on 20 December 1996, or similar laws prohibiting -or restricting circumvention of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention -of technological measures to the extent such circumvention is effected by -exercising rights under this License with respect to the covered work, and -you disclaim any intention to limit operation or modification of the work -as a means of enforcing, against the work's users, your or third parties' -legal rights to forbid circumvention of technological measures. - - 4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you receive -it, in any medium, provided that you conspicuously and appropriately publish -on each copy an appropriate copyright notice; keep intact all notices stating -that this License and any non-permissive terms added in accord with section -7 apply to the code; keep intact all notices of the absence of any warranty; -and give all recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you -may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to produce -it from the Program, in the form of source code under the terms of section -4, provided that you also meet all of these conditions: - -a) The work must carry prominent notices stating that you modified it, and -giving a relevant date. - -b) The work must carry prominent notices stating that it is released under -this License and any conditions added under section 7. This requirement modifies -the requirement in section 4 to "keep intact all notices". - -c) You must license the entire work, as a whole, under this License to anyone -who comes into possession of a copy. This License will therefore apply, along -with any applicable section 7 additional terms, to the whole of the work, -and all its parts, regardless of how they are packaged. This License gives -no permission to license the work in any other way, but it does not invalidate -such permission if you have separately received it. - -d) If the work has interactive user interfaces, each must display Appropriate -Legal Notices; however, if the Program has interactive interfaces that do -not display Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, -which are not by their nature extensions of the covered work, and which are -not combined with it such as to form a larger program, in or on a volume of -a storage or distribution medium, is called an "aggregate" if the compilation -and its resulting copyright are not used to limit the access or legal rights -of the compilation's users beyond what the individual works permit. Inclusion -of a covered work in an aggregate does not cause this License to apply to -the other parts of the aggregate. - - 6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of sections -4 and 5, provided that you also convey the machine-readable Corresponding -Source under the terms of this License, in one of these ways: - -a) Convey the object code in, or embodied in, a physical product (including -a physical distribution medium), accompanied by the Corresponding Source fixed -on a durable physical medium customarily used for software interchange. - -b) Convey the object code in, or embodied in, a physical product (including -a physical distribution medium), accompanied by a written offer, valid for -at least three years and valid for as long as you offer spare parts or customer -support for that product model, to give anyone who possesses the object code -either (1) a copy of the Corresponding Source for all the software in the -product that is covered by this License, on a durable physical medium customarily -used for software interchange, for a price no more than your reasonable cost -of physically performing this conveying of source, or (2) access to copy the -Corresponding Source from a network server at no charge. - -c) Convey individual copies of the object code with a copy of the written -offer to provide the Corresponding Source. This alternative is allowed only -occasionally and noncommercially, and only if you received the object code -with such an offer, in accord with subsection 6b. - -d) Convey the object code by offering access from a designated place (gratis -or for a charge), and offer equivalent access to the Corresponding Source -in the same way through the same place at no further charge. You need not -require recipients to copy the Corresponding Source along with the object -code. If the place to copy the object code is a network server, the Corresponding -Source may be on a different server (operated by you or a third party) that -supports equivalent copying facilities, provided you maintain clear directions -next to the object code saying where to find the Corresponding Source. Regardless -of what server hosts the Corresponding Source, you remain obligated to ensure -that it is available for as long as needed to satisfy these requirements. - -e) Convey the object code using peer-to-peer transmission, provided you inform -other peers where the object code and Corresponding Source of the work are -being offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from -the Corresponding Source as a System Library, need not be included in conveying -the object code work. - -A "User Product" is either (1) a "consumer product", which means any tangible -personal property which is normally used for personal, family, or household -purposes, or (2) anything designed or sold for incorporation into a dwelling. -In determining whether a product is a consumer product, doubtful cases shall -be resolved in favor of coverage. For a particular product received by a particular -user, "normally used" refers to a typical or common use of that class of product, -regardless of the status of the particular user or of the way in which the -particular user actually uses, or expects or is expected to use, the product. -A product is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent the -only significant mode of use of the product. - -"Installation Information" for a User Product means any methods, procedures, -authorization keys, or other information required to install and execute modified -versions of a covered work in that User Product from a modified version of -its Corresponding Source. The information must suffice to ensure that the -continued functioning of the modified object code is in no case prevented -or interfered with solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically -for use in, a User Product, and the conveying occurs as part of a transaction -in which the right of possession and use of the User Product is transferred -to the recipient in perpetuity or for a fixed term (regardless of how the -transaction is characterized), the Corresponding Source conveyed under this -section must be accompanied by the Installation Information. But this requirement -does not apply if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has been installed -in ROM). - -The requirement to provide Installation Information does not include a requirement -to continue to provide support service, warranty, or updates for a work that -has been modified or installed by the recipient, or for the User Product in -which it has been modified or installed. Access to a network may be denied -when the modification itself materially and adversely affects the operation -of the network or violates the rules and protocols for communication across -the network. - -Corresponding Source conveyed, and Installation Information provided, in accord -with this section must be in a format that is publicly documented (and with -an implementation available to the public in source code form), and must require -no special password or key for unpacking, reading or copying. - - 7. Additional Terms. - -"Additional permissions" are terms that supplement the terms of this License -by making exceptions from one or more of its conditions. Additional permissions -that are applicable to the entire Program shall be treated as though they -were included in this License, to the extent that they are valid under applicable -law. If additional permissions apply only to part of the Program, that part -may be used separately under those permissions, but the entire Program remains -governed by this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any -additional permissions from that copy, or from any part of it. (Additional -permissions may be written to require their own removal in certain cases when -you modify the work.) You may place additional permissions on material, added -by you to a covered work, for which you have or can give appropriate copyright -permission. - -Notwithstanding any other provision of this License, for material you add -to a covered work, you may (if authorized by the copyright holders of that -material) supplement the terms of this License with terms: - -a) Disclaiming warranty or limiting liability differently from the terms of -sections 15 and 16 of this License; or - -b) Requiring preservation of specified reasonable legal notices or author -attributions in that material or in the Appropriate Legal Notices displayed -by works containing it; or - -c) Prohibiting misrepresentation of the origin of that material, or requiring -that modified versions of such material be marked in reasonable ways as different -from the original version; or - -d) Limiting the use for publicity purposes of names of licensors or authors -of the material; or - -e) Declining to grant rights under trademark law for use of some trade names, -trademarks, or service marks; or - -f) Requiring indemnification of licensors and authors of that material by -anyone who conveys the material (or modified versions of it) with contractual -assumptions of liability to the recipient, for any liability that these contractual -assumptions directly impose on those licensors and authors. - -All other non-permissive additional terms are considered "further restrictions" -within the meaning of section 10. If the Program as you received it, or any -part of it, contains a notice stating that it is governed by this License -along with a term that is a further restriction, you may remove that term. -If a license document contains a further restriction but permits relicensing -or conveying under this License, you may add to a covered work material governed -by the terms of that license document, provided that the further restriction -does not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, -in the relevant source files, a statement of the additional terms that apply -to those files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form -of a separately written license, or stated as exceptions; the above requirements -apply either way. - - 8. Termination. - -You may not propagate or modify a covered work except as expressly provided -under this License. Any attempt otherwise to propagate or modify it is void, -and will automatically terminate your rights under this License (including -any patent licenses granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from -a particular copyright holder is reinstated (a) provisionally, unless and -until the copyright holder explicitly and finally terminates your license, -and (b) permanently, if the copyright holder fails to notify you of the violation -by some reasonable means prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently -if the copyright holder notifies you of the violation by some reasonable means, -this is the first time you have received notice of violation of this License -(for any work) from that copyright holder, and you cure the violation prior -to 30 days after your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses -of parties who have received copies or rights from you under this License. -If your rights have been terminated and not permanently reinstated, you do -not qualify to receive new licenses for the same material under section 10. - - 9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run a copy -of the Program. Ancillary propagation of a covered work occurring solely as -a consequence of using peer-to-peer transmission to receive a copy likewise -does not require acceptance. However, nothing other than this License grants -you permission to propagate or modify any covered work. These actions infringe -copyright if you do not accept this License. Therefore, by modifying or propagating -a covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically receives -a license from the original licensors, to run, modify and propagate that work, -subject to this License. You are not responsible for enforcing compliance -by third parties with this License. - -An "entity transaction" is a transaction transferring control of an organization, -or substantially all assets of one, or subdividing an organization, or merging -organizations. If propagation of a covered work results from an entity transaction, -each party to that transaction who receives a copy of the work also receives -whatever licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the Corresponding -Source of the work from the predecessor in interest, if the predecessor has -it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights -granted or affirmed under this License. For example, you may not impose a -license fee, royalty, or other charge for exercise of rights granted under -this License, and you may not initiate litigation (including a cross-claim -or counterclaim in a lawsuit) alleging that any patent claim is infringed -by making, using, selling, offering for sale, or importing the Program or -any portion of it. - - 11. Patents. - -A "contributor" is a copyright holder who authorizes use under this License -of the Program or a work on which the Program is based. The work thus licensed -is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned or controlled -by the contributor, whether already acquired or hereafter acquired, that would -be infringed by some manner, permitted by this License, of making, using, -or selling its contributor version, but do not include claims that would be -infringed only as a consequence of further modification of the contributor -version. For purposes of this definition, "control" includes the right to -grant patent sublicenses in a manner consistent with the requirements of this -License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent -license under the contributor's essential patent claims, to make, use, sell, -offer for sale, import and otherwise run, modify and propagate the contents -of its contributor version. - -In the following three paragraphs, a "patent license" is any express agreement -or commitment, however denominated, not to enforce a patent (such as an express -permission to practice a patent or covenant not to sue for patent infringement). -To "grant" such a patent license to a party means to make such an agreement -or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the -Corresponding Source of the work is not available for anyone to copy, free -of charge and under the terms of this License, through a publicly available -network server or other readily accessible means, then you must either (1) -cause the Corresponding Source to be so available, or (2) arrange to deprive -yourself of the benefit of the patent license for this particular work, or -(3) arrange, in a manner consistent with the requirements of this License, -to extend the patent license to downstream recipients. "Knowingly relying" -means you have actual knowledge that, but for the patent license, your conveying -the covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that country -that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, -you convey, or propagate by procuring conveyance of, a covered work, and grant -a patent license to some of the parties receiving the covered work authorizing -them to use, propagate, modify or convey a specific copy of the covered work, -then the patent license you grant is automatically extended to all recipients -of the covered work and works based on it. - -A patent license is "discriminatory" if it does not include within the scope -of its coverage, prohibits the exercise of, or is conditioned on the non-exercise -of one or more of the rights that are specifically granted under this License. -You may not convey a covered work if you are a party to an arrangement with -a third party that is in the business of distributing software, under which -you make payment to the third party based on the extent of your activity of -conveying the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory patent -license (a) in connection with copies of the covered work conveyed by you -(or copies made from those copies), or (b) primarily for and in connection -with specific products or compilations that contain the covered work, unless -you entered into that arrangement, or that patent license was granted, prior -to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied -license or other defenses to infringement that may otherwise be available -to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot convey a covered work so as -to satisfy simultaneously your obligations under this License and any other -pertinent obligations, then as a consequence you may not convey it at all. -For example, if you agree to terms that obligate you to collect a royalty -for further conveying from those to whom you convey the Program, the only -way you could satisfy both those terms and this License would be to refrain -entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have permission to -link or combine any covered work with a work licensed under version 3 of the -GNU Affero General Public License into a single combined work, and to convey -the resulting work. The terms of this License will continue to apply to the -part which is the covered work, but the special requirements of the GNU Affero -General Public License, section 13, concerning interaction through a network -will apply to the combination as such. - - 14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of the -GNU General Public License from time to time. Such new versions will be similar -in spirit to the present version, but may differ in detail to address new -problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies -that a certain numbered version of the GNU General Public License "or any -later version" applies to it, you have the option of following the terms and -conditions either of that numbered version or of any later version published -by the Free Software Foundation. If the Program does not specify a version -number of the GNU General Public License, you may choose any version ever -published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions of -the GNU General Public License can be used, that proxy's public statement -of acceptance of a version permanently authorizes you to choose that version -for the Program. - -Later license versions may give you additional or different permissions. However, -no additional obligations are imposed on any author or copyright holder as -a result of your choosing to follow a later version. - - 15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE -LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM -PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - - 16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM -AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, -INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO -USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE -PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided above cannot -be given local legal effect according to their terms, reviewing courts shall -apply local law that most closely approximates an absolute waiver of all civil -liability in connection with the Program, unless a warranty or assumption -of liability accompanies a copy of the Program in return for a fee. END OF -TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively state the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - - - -Copyright (C) - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short notice like -this when it starts in an interactive mode: - - Copyright (C) - -This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - -This is free software, and you are welcome to redistribute it under certain -conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands might -be different; for a GUI interface, you would use an "about box". - -You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. For -more information on this, and how to apply and follow the GNU GPL, see . - -The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General Public -License instead of this License. But first, please read . diff --git a/README.md b/README.md deleted file mode 100644 index c8eaf26b..00000000 --- a/README.md +++ /dev/null @@ -1,72 +0,0 @@ -# 7Wate 知识库 - -> Always For Freedom. -> 一个喜欢异想天开的家伙 💨 - -我在这里记录知识,希望对你也有帮助。👉👉👉 [English README](README_EN.md) - -![站点首页](static/img/index.jpg) - -## 目录 - -```markdown -Wiki -├─ 博客 -├─ 维基 -│ ├─ 基础入门 -│ ├─ 程序设计语言 -│ ├─ 数据结构与算法 -│ ├─ 计算机组成 -│ ├─ 计算机网络 -│ ├─ 操作系统 -│ ├─ 数据库系统 -│ ├─ 计算机系统安全 -│ ├─ 软件工程 -│ └─ 编译原理 -├─ 职业 -│ ├─ 求职之路 -│ ├─ SRE 工程师 -│ ├─ Data 工程师 -│ └─ Front-End 工程师 -├─ 组织 -│ ├─ 开源社区 -│ ├─ 现代企业 -│ └─ 国家政府 -├─ 生活 -└─ 日志 -``` - -## 分支 - -```markdown -Main 主分支 -├─ dev 合并分支 -├─ mac 移动分支 -└─ phone 移动分支 -``` - -## CI&CD - - - build.yml:main 分支自动构建静态网站,并部署至 html 分支。 - - algolia.yml:每周三凌晨 02:00 自动爬取并推送至 Algolia。 - 1. 设置 `ALGOLIA_ADMIN_API_KEY`、`ALGOLIA_APP_ID` 仓库环境密钥,密钥获取具体步骤请阅读 [使用 Docusaurus 搭建优秀个人wiki](https://blog.7wate.com/?p=75)。 - 2. 修改 `.github\workflows\docsearch.json` 目录下 `start_urls` 和 `sitemap_urls` 键值为对应网站。 - - -## 贡献 - -欢迎各位 Fork 贡献,并提供指导纠错。 👊 - -## 协议 - -- 所有**原创代码**采用 [GPL-3.0](http://www.thebigfly.com/gnu/FDLv1.3/) 协议,**原创非代码内容**采用[署名-相同方式共享 4.0 国际](http://creativecommons.org/licenses/by-sa/4.0/)。 - -- 所有**引用第三方**内容仅为学术使用。其所属**著作权、版权均归原作者**所有,如有冒犯侵权,请[邮件联系](mailto:admin@7wate.com)删除。 - -- **Docusaurus** is [MIT licensed.](https://github.com/facebook/docusaurus/blob/main/LICENSE) - -## 致谢 - -感谢第三方原创作者的无私贡献! - -感觉 Docusaurus 项目官方的维护开发! diff --git a/README_EN.md b/README_EN.md deleted file mode 100644 index e701eae2..00000000 --- a/README_EN.md +++ /dev/null @@ -1,67 +0,0 @@ -# 7Wate Knowledge Base - -> Always For Freedom. A guy who likes to think outside the box 💨 - -I record knowledge here and hope it can be helpful to you. - -![Site Homepage](static/img/index.jpg) - -## Table of Contents - -```markdown -markdownCopy codeWiki -├─ Blog -├─ Wiki -│ ├─ Basic Introduction -│ ├─ Programming Languages -│ ├─ Data Structures and Algorithms -│ ├─ Computer Organization -│ ├─ Computer Networks -│ ├─ Operating Systems -│ ├─ Database Systems -│ ├─ Computer System Security -│ ├─ Software Engineering -│ └─ Compiler Design -├─ Career -│ ├─ Job Seeking -│ ├─ DevOps Engineer -│ └─ Information Security Engineer -├─ Organizations -│ ├─ Open Source Communities -│ ├─ Modern Enterprises -│ └─ National Governments -├─ Life -└─ Log -``` - -## Branches - -```markdown -markdownCopy codeMain Main Branch -├─ dev Development Branch -└─ phone Mobile Branch -``` - -## CI&CD - -- `build.yml`: Automatically build the static website from the main branch and deploy it to the html branch. - -- `algolia.yml`: Automatically crawl and push to Algolia at 02:00 every Wednesday. - 1. Set the `ALGOLIA_ADMIN_API_KEY` and `ALGOLIA_APP_ID` repository environment keys. For the specific steps to obtain the key, please read [Building Excellent Personal Wiki with Docusaurus](https://blog.7wate.com/?p=75). - 2. Modify the `start_urls` and `sitemap_urls` values in the `.github\workflows\docsearch.json` directory to correspond to the website. - -## Contribution - -Welcome to fork and contribute, and provide guidance and correction. 👊 - -## License - -- All **original code** is licensed under the [GPL-3.0](http://www.thebigfly.com/gnu/FDLv1.3/) license, and **original non-code content** is licensed under the [Attribution-ShareAlike 4.0 International](http://creativecommons.org/licenses/by-sa/4.0/) license. -- All **referenced third-party** content is for academic use only. Copyright and ownership of the content belong to the original authors. If there is any infringement, please [contact us by email](mailto:admin@7wate.com) for deletion. -- **Docusaurus** is [MIT licensed](https://github.com/facebook/docusaurus/blob/main/LICENSE). - -## Acknowledgments - -Thanks to the selfless contributions of third-party original authors! - -Thanks to the maintenance and development of the Docusaurus project! \ No newline at end of file diff --git a/src/js/hitokoto.js b/Static/hitokoto.js similarity index 100% rename from src/js/hitokoto.js rename to Static/hitokoto.js diff --git a/src/js/jinrishici.js b/Static/jinrishici.js similarity index 100% rename from src/js/jinrishici.js rename to Static/jinrishici.js diff --git a/src/js/wttr_weather.js b/Static/wttr_weather.js similarity index 100% rename from src/js/wttr_weather.js rename to Static/wttr_weather.js diff --git a/wiki/computer-network/应用服务/CDN 内容分发网络.md b/Tech/computer-network/应用服务/CDN 内容分发网络.md similarity index 99% rename from wiki/computer-network/应用服务/CDN 内容分发网络.md rename to Tech/computer-network/应用服务/CDN 内容分发网络.md index 4c4d817c..051a90b8 100644 --- a/wiki/computer-network/应用服务/CDN 内容分发网络.md +++ b/Tech/computer-network/应用服务/CDN 内容分发网络.md @@ -2,10 +2,10 @@ title: CDN 内容分发网络 description: CDN内容分发网络技术概述 keywords: -- CDN -- 概述 + - CDN + - 概述 tags: -- CDN + - 计算机网络/CDN应用 sidebar_position: 1 author: 7Wate date: 2023-06-27 diff --git a/wiki/computer-network/网络协议/DHCP 动态主机配置协议.md b/Tech/computer-network/网络协议/DHCP 动态主机配置协议.md similarity index 99% rename from wiki/computer-network/网络协议/DHCP 动态主机配置协议.md rename to Tech/computer-network/网络协议/DHCP 动态主机配置协议.md index 3dc4e018..0e6b8836 100644 --- a/wiki/computer-network/网络协议/DHCP 动态主机配置协议.md +++ b/Tech/computer-network/网络协议/DHCP 动态主机配置协议.md @@ -2,10 +2,10 @@ title: DHCP 动态主机配置协议 description: DHCP 动态主机配置协议 keywords: -- DHCP -- 动态主机配置协议 + - DHCP + - 动态主机配置协议 tags: -- 网络协议 + - 计算机网络/DHCP协议 sidebar_position: 2 author: 7Wate date: 2023-06-28 diff --git a/wiki/computer-network/网络协议/DNS 域名系统.md b/Tech/computer-network/网络协议/DNS 域名系统.md similarity index 94% rename from wiki/computer-network/网络协议/DNS 域名系统.md rename to Tech/computer-network/网络协议/DNS 域名系统.md index 22808b34..08fc133d 100644 --- a/wiki/computer-network/网络协议/DNS 域名系统.md +++ b/Tech/computer-network/网络协议/DNS 域名系统.md @@ -2,11 +2,11 @@ title: DNS 域名系统 description: DNS 域名系统概述 keywords: -- DNS -- 域名系统 -- 概述 + - DNS + - 域名系统 + - 概述 tags: -- 网络协议 + - 计算机网络/DNS协议 sidebar_position: 1 author: 7Wate date: 2023-06-28 @@ -22,7 +22,7 @@ date: 2023-06-28 DNS 在 1980 年代由 Paul Mockapetris 发明,以解决当时互联网上主机名和 IP 地址管理的问题。原来的主机名和 IP 地址的对应关系是存储在一个叫做 HOSTS.TXT 的文件中,随着互联网的发展,这个文件变得越来越大,难以管理。 -因此,DNS 被设计出来,以提供一种可扩展的名称解析系统。DNS 提供了一种分布式的解决方案,允许主机名和IP地址的对应关系在各个服务器上进行存储和管理。 +因此,DNS 被设计出来,以提供一种可扩展的名称解析系统。DNS 提供了一种分布式的解决方案,允许主机名和 IP 地址的对应关系在各个服务器上进行存储和管理。 ## 工作原理 @@ -73,12 +73,14 @@ DNS 的域名架构是分层次的,每个级别的域名都由特定的实体 DNS 系统由多种服务器和各种类型的 DNS 记录组成。 ### 服务器 + - **权威服务器**:存储特定域名与其关联 IP 地址的服务器。权威服务器是 DNS 查询的最终目的地。 - **递归服务器**:接收来自客户端的 DNS 查询,与其他服务器进行交流以解析查询。 - **缓存服务器**:存储 DNS 查询结果,加快解析速度,减少网络延迟。 - **根服务器**:全球仅有 13 组 IPv4 根服务器,它们知道所有顶级域的权威服务器的位置。 ### 记录 + DNS 记录是存储在 DNS 服务器上的数据,用于定义域名的各种属性。以下是一些常见的 DNS 记录类型: | 记录类型 | 使用目的 | @@ -87,7 +89,7 @@ DNS 记录是存储在 DNS 服务器上的数据,用于定义域名的各种 | CNAME | 将域名指向另一个域名,再由另一个域名提供 IP 地址(外网地址)。 | | MX | 设置邮箱,让邮箱能收到邮件。 | | NS | 将子域名交给其他 DNS 服务商解析。 | -| SPF | 将域名指向发送邮件的服务器,是一种以IP地址认证电子邮件发件人身份的技术,是非常高效的垃圾邮件解决方案。 | +| SPF | 将域名指向发送邮件的服务器,是一种以 IP 地址认证电子邮件发件人身份的技术,是非常高效的垃圾邮件解决方案。 | | AAAA | 将域名指向一个 IPv6 地址。 | | SRV | 用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。 | | TXT | 对域名进行标识和说明,绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件)。 | @@ -104,6 +106,7 @@ DNS 记录是存储在 DNS 服务器上的数据,用于定义域名的各种 - **针对基础设施的 DDoS 攻击**:通过发送大量的查询请求,可以使 DNS 服务器瘫痪,影响用户访问互联网的能力。 ### 措施 + - **DNSSEC(域名系统安全扩展)**:这是一种通过在 DNS 查询结果中添加数字签名的技术,可以保证 DNS 查询结果的真实性和完整性,防止 DNS 欺骗和缓存污染。 - **过滤和黑名单**:通过设置过滤规则和黑名单,可以阻止恶意网站的 DNS 查询,保护用户免受恶意网站的攻击。 @@ -115,7 +118,7 @@ DNS 记录是存储在 DNS 服务器上的数据,用于定义域名的各种 ## 扩展 -- **DoH(DNS over HTTPS)和DoT(DNS over TLS)**:这两种新技术可以实现 DNS 查询的加密传输,从而提高用户的隐私保护。DoH 和 DoT 都可以防止 DNS 查询被窃听或篡改,保护用户的互联网使用安全。 +- **DoH(DNS over HTTPS)和 DoT(DNS over TLS)**:这两种新技术可以实现 DNS 查询的加密传输,从而提高用户的隐私保护。DoH 和 DoT 都可以防止 DNS 查询被窃听或篡改,保护用户的互联网使用安全。 - **国际化域名(IDNs)**:国际化域名是一种新的域名类型,允许使用非拉丁字符的域名,如中文、阿拉伯文等。这大大扩展了域名的使用范围,使得更多的人可以方便地使用互联网。 - **基于 DNS 的服务发现(DNS-SD)**:DNS-SD 是一种使用 DNS 协议在网络上自动发现可用服务的技术。例如,打印机、文件共享、网络摄像头等设备和服务,可以通过 DNS-SD 自动地在网络上宣告其存在,用户可以方便地发现和使用这些服务。 @@ -124,4 +127,3 @@ DNS 记录是存储在 DNS 服务器上的数据,用于定义域名的各种 **DNS 是互联网的基础设施之一,它将用户可以理解和记忆的域名转换为计算机可以理解的 IP 地址。**这个过程涉及到多个不同类型的服务器和记录,每一个部分都在整个解析过程中扮演着重要的角色。在 DNS 查询过程中,客户端发出请求,递归服务器处理这个请求,并从权威服务器获取响应,然后将响应返回给客户端。为了提高效率,这些查询结果会被缓存在各个层级的服务器上。 尽管 DNS 已经有了几十年的历史,但它仍在不断发展和创新。新的技术如 DoH 和 DoT,使得 DNS 查询可以在加密的通道中传输,提高了用户的隐私保护。国际化域名则使得更多的人可以方便地使用互联网。同时,DNS 也面临着一些挑战,如安全威胁、管理复杂性等,这需要我们不断地学习和改进,以保护互联网的安全和稳定。 - diff --git a/wiki/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md b/Tech/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md similarity index 97% rename from wiki/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md rename to Tech/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md index 3f4cc23d..ef831064 100644 --- a/wiki/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md +++ b/Tech/computer-security/信息安全/OpenPGP/GnuPG 简明指南.md @@ -2,10 +2,10 @@ title: GnuPG 简明指南 description: GnuPG 简明指南 keywords: -- GnuPG -- 简明指南 + - GnuPG + - 简明指南 tags: -- GnuPG + - 计算机安全/信息安全 sidebar_position: 1 author: 7Wate date: 2023-06-28 @@ -21,7 +21,7 @@ date: 2023-06-28 ### 安装 -在 Linux 系统中,GnuPG 通常已经被默认安装。在 Windows 和 macOS 系统中,你可以从 [GnuPG 官方网站](https://gnupg.org/)下载安装。 +在 Linux 系统中,GnuPG 通常已经被默认安装。在 Windows 和 macOS 系统中,你可以从 [GnuPG 官方网站](https://gnupg.org/) 下载安装。 ### 配置 @@ -145,7 +145,7 @@ gpg --armor --output public-key.txt --export [密钥ID] gpg --armor --output private-key.txt --export-secret-keys [密钥ID] ``` -在这里,`--armor`选项会生成.asc后缀的ASCII类型的文本文件,如果不使用该选项,则会生成.gpg后缀的二进制文件。 +在这里,`--armor` 选项会生成.asc 后缀的 ASCII 类型的文本文件,如果不使用该选项,则会生成.gpg 后缀的二进制文件。 ### 导入 diff --git a/wiki/computer-security/密码学/简明指南.md b/Tech/computer-security/密码学/简明指南.md similarity index 92% rename from wiki/computer-security/密码学/简明指南.md rename to Tech/computer-security/密码学/简明指南.md index a7a406c9..4aa1e284 100644 --- a/wiki/computer-security/密码学/简明指南.md +++ b/Tech/computer-security/密码学/简明指南.md @@ -2,16 +2,15 @@ title: 简明指南 description: 密码学简明指南 keywords: -- 密码学 -- 简明指南 + - 密码学 + - 简明指南 tags: -- 密码学 + - 计算机安全/密码学 sidebar_position: 1 author: 7Wate date: 2023-06-28 --- - 这篇文章不涉及密码学的数学原理,只提及相关概念和应用 ## 概念 @@ -159,7 +158,7 @@ date: 2023-06-28 - 中间证书 = 一个 CA 向另一个 CA 颁发的证书,又或者说证书链中处于中间位置的证书,一个证书链里可以有多个中间证书 -- 在线证书状态协议(英语:Online Certificate Status Protocol,缩写:OCSP)是一个用于获取 X.509 数字证书撤销状态的网际协议,在RFC 6960中定义,作为证书吊销列表(CRL)的替代品解 +- 在线证书状态协议(英语:Online Certificate Status Protocol,缩写:OCSP)是一个用于获取 X.509 数字证书撤销状态的网际协议,在 RFC 6960 中定义,作为证书吊销列表(CRL)的替代品解 - 证书吊销列表(英文:Certificate revocation list,缩写:CRL,或译作证书废止清册)是尚未到期就被证书颁发机构吊销的数字证书的名单。这些在证书吊销列表中的证书不再会受到信任。目前,在线证书状态协议(OCSP)已经替代证书吊销列表(CRL)成为检查证书状态的主流。 @@ -207,7 +206,7 @@ date: 2023-06-28 - PKCS 和 X.509 是格式标准,而 DER 和 PEM 是文件编码格式 -- CA/浏览器论坛 (CA/Browser Forum) ,是一个证书颁发机构、网页浏览器软件供应商、操作系统,以及其他采用PKI的应用程序的自愿联合体,其颁布X.509 v.3电子证书的签发与管理的行业治理方针,在诸多应用程序中链接到信任锚。其方针涵盖用于SSL/TLS协议和代码签名的证书,以及系统和证书颁发机构的系统和网络安全。 +- CA/浏览器论坛 (CA/Browser Forum) ,是一个证书颁发机构、网页浏览器软件供应商、操作系统,以及其他采用 PKI 的应用程序的自愿联合体,其颁布 X.509 v.3 电子证书的签发与管理的行业治理方针,在诸多应用程序中链接到信任锚。其方针涵盖用于 SSL/TLS 协议和代码签名的证书,以及系统和证书颁发机构的系统和网络安全。 - 会话密钥,加密会话内容的密钥,大多数情况下只用一次。 @@ -229,7 +228,7 @@ date: 2023-06-28 - sha2 - md5 -- 密码套件 (cipher suite) 或者称为密码包,是 https 中各种算法的集合,一般包括 密钥交换算法 身份验证算法 加密算法(加密方法-加密强度-模式) 哈希算法 。一般情况下密码包里的算法不能重复出现,例如 密钥交换算法用了 RSA ,那么身份验证算法就不能用 RSA +- 密码套件 (cipher suite) 或者称为密码包,是 https 中各种算法的集合,一般包括 密钥交换算法 身份验证算法 加密算法(加密方法 - 加密强度 - 模式) 哈希算法 。一般情况下密码包里的算法不能重复出现,例如 密钥交换算法用了 RSA ,那么身份验证算法就不能用 RSA - PR = 伪随机数 (Pseudo Random) ,计算机里生成真正的随机数其实挺麻烦的,所以一般都是用伪随机数 @@ -270,11 +269,11 @@ date: 2023-06-28 - 组织验证证书 (Organization Validation Certificate OV) ,验证域名所有权,也要验证企业或组织身份, 因为 CA 会验证企业或组织的身份,一般需要几天才完成颁发 - 扩展验证证书 (Extended Validation Certificate EV) ,除了验证域名所有权, CA 验证企业或组织身份之外,还会引入第三方审核,可能牵涉专业法律人员的调查及独立审计人员 -- S/MIME ,安全的多用途 Internet 邮件扩展(Secure Multipurpose Internet Mail Extensions,简称S/MIME)是一种 Internet 标准,它在安全方面对 MIME 协议进行了扩展,可以将 MIME 实体(比如数字签名和加密信息等)封装成安全对象,为电子邮件应用增添了消息真实性、完整性和保密性服务。 S/MIME 不局限于电子邮件,也可以被其他支持 MIME 的传输机制使用,如 HTTP +- S/MIME ,安全的多用途 Internet 邮件扩展(Secure Multipurpose Internet Mail Extensions,简称 S/MIME)是一种 Internet 标准,它在安全方面对 MIME 协议进行了扩展,可以将 MIME 实体(比如数字签名和加密信息等)封装成安全对象,为电子邮件应用增添了消息真实性、完整性和保密性服务。 S/MIME 不局限于电子邮件,也可以被其他支持 MIME 的传输机制使用,如 HTTP - 证书颁发机构浏览器论坛,也称 CA/浏览器论坛(英语: CA/Browser Forum 缩写: CA/B)、证书机构与浏览器论坛,它是一个证书颁发机构、网页浏览器软件供应商、操作系统,以及其他采用 PKI 的应用程序的自愿联合体,其颁布 X.509 v.3 电子证书的签发与管理的行业治理方针,在诸多应用程序中链接到信任锚。其方针涵盖用于 SSL/TLS 协议和代码签名的证书,以及系统和证书颁发机构的系统和网络安全。 -- 证书透明度(英语:Certificate Transparency,简称CT)也称证书透明、证书透明化,它是一个实验性的IETF开源标准和开源框架,目的是监测和审计数字证书。通过证书日志、监控和审计系统,证书透明度使网站用户和域名持有者可以识别不当或恶意签发的证书,以及识别数字证书认证机构(CA)的作为。 +- 证书透明度(英语:Certificate Transparency,简称 CT)也称证书透明、证书透明化,它是一个实验性的 IETF 开源标准和开源框架,目的是监测和审计数字证书。通过证书日志、监控和审计系统,证书透明度使网站用户和域名持有者可以识别不当或恶意签发的证书,以及识别数字证书认证机构(CA)的作为。 - 向前保密,前向安全性或前向保密性(英语:Forward Secrecy,缩写:FS),有时也被称为完美前向安全(英语:Perfect Forward Secrecy,缩写:PFS),是密码学中通讯协议的安全属性,指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。 @@ -303,7 +302,7 @@ date: 2023-06-28 - DNS over TSL 基于 TLS 的 DNS - DoH 的安全原理与 DoT 一样,他们之间的区别只在于:DoH 有了 HTTP 格式封装,更加通用。 -- DNSSEC = 域名系统安全扩展(DNS Security Extensions),简称DNSSEC。通过数字签名来保证 DNS 应答报文的真实性和完整性,能够防止 DNS 欺骗和缓存污染等攻击。 +- DNSSEC = 域名系统安全扩展(DNS Security Extensions),简称 DNSSEC。通过数字签名来保证 DNS 应答报文的真实性和完整性,能够防止 DNS 欺骗和缓存污染等攻击。 ## 信息安全 @@ -328,7 +327,7 @@ date: 2023-06-28 - 保密性 -> 窃听 - 可用性 -> 阻断 -### 以 https 为例解释信息安全的五要素 +### 以 Https 为例解释信息安全的五要素 - https 的连接过程 1. tcp 三次握手建立连接 @@ -358,7 +357,7 @@ date: 2023-06-28 - 认证(Authentication) - 识别信息用户的身份,可记录信息被谁所访问使用,例如:透过密码或证书方式验证用户身份。 实务做法: - 你所知道的(Something you know):账号/密码 - - 你所拥有的(Something you have):IC卡、数字设备、数字签名、一次性密码(OTP) + - 你所拥有的(Something you have):IC 卡、数字设备、数字签名、一次性密码 (OTP) - 你所具备的(Something you are):指纹、虹膜、声纹、脸部特征、静脉脉纹、DNA - 授权(Authorization) - 依照实际需求给予实体适当的权限,一般建议采最小权限(Least privilege),意即仅给予实际作业所需要的权限,避免过度授权可能造成的信息暴露或泄漏。 信息系统层面的实务访问控制方法分类如下: @@ -367,7 +366,7 @@ date: 2023-06-28 - 以角色为基础的访问控制(Role-Based Access Control) - 以规则为基础的访问控制(Rule-Based Access Control) - 记录(Accounting) - - 内容项目包含量测(Measuring)、监控(Monitoring)、报告(Reporting)与日志案(Logging), 以便提供未来作为审核(Auditing)、计费(Billing)、分析(Analysis)与管理之用, 主要精神在于收集用户与系统之间交互的资料,并留下轨迹纪录。 + - 内容项目包含量测(Measuring)、监控(Monitoring)、报告(Reporting)与日志案 (Logging), 以便提供未来作为审核(Auditing)、计费(Billing)、分析(Analysis)与管理之用, 主要精神在于收集用户与系统之间交互的资料,并留下轨迹纪录。 ### 信息安全的基本原则 @@ -415,7 +414,7 @@ date: 2023-06-28 - 用随机数的目的是为了提高密文的不可预测性 -### 在 linux 下生成随机数 +### 在 Linux 下生成随机数 /dev/random 在类 UNIX 系统中是一个特殊的设备文件,可以用作随机数生成器。 diff --git a/wiki/computer-security/用户安全/权限设计/_category_.json b/Tech/computer-security/用户安全/权限设计/_category_.json similarity index 100% rename from wiki/computer-security/用户安全/权限设计/_category_.json rename to Tech/computer-security/用户安全/权限设计/_category_.json diff --git a/wiki/computer-security/用户安全/权限设计/主流权限系统的设计.md b/Tech/computer-security/用户安全/权限设计/主流权限系统的设计.md similarity index 92% rename from wiki/computer-security/用户安全/权限设计/主流权限系统的设计.md rename to Tech/computer-security/用户安全/权限设计/主流权限系统的设计.md index 4d587506..233d3438 100644 --- a/wiki/computer-security/用户安全/权限设计/主流权限系统的设计.md +++ b/Tech/computer-security/用户安全/权限设计/主流权限系统的设计.md @@ -2,25 +2,24 @@ title: 主流权限系统的设计 description: 主流权限系统的设计 keywords: -- 主流权限系统的设计 -- 用户安全 + - 主流权限系统的设计 + - 用户安全 tags: -- 用户安全 + - 计算机安全/用户安全 sidebar_position: 1 author: 7Wate date: 2023-06-28 --- - 权限管控可以通俗的理解为权力限制,即不同的人由于拥有不同权力,他所看到的、能使用的可能不一样。对应到一个应用系统,其实就是一个用户可能拥有不同的数据权限(看到的)和操作权限(使用的)。 主流的权限模型主要分为以下五种: -- **ACL模型**:访问控制列表 -- **DAC模型**:自主访问控制 -- **MAC模型**:强制访问控制 -- **ABAC模型**:基于属性的访问控制 -- **RBAC模型**:基于角色的权限访问控制 +- **ACL 模型**:访问控制列表 +- **DAC 模型**:自主访问控制 +- **MAC 模型**:强制访问控制 +- **ABAC 模型**:基于属性的访问控制 +- **RBAC 模型**:基于角色的权限访问控制 ## ACL 模型:访问控制列表 @@ -28,7 +27,7 @@ date: 2023-06-28 **原理**:每一个客体都有一个列表,列表中记录的是哪些主体可以对这个客体做哪些行为,非常简单。 -**例如**:当用户A要对一篇文章进行编辑时,ACL 会先检查一下文章编辑功能的控制列表中有没有用户 A,有就可以编辑,无则不能编辑。再例如:不同等级的会员在产品中可使用的功能范围不同。 +**例如**:当用户 A 要对一篇文章进行编辑时,ACL 会先检查一下文章编辑功能的控制列表中有没有用户 A,有就可以编辑,无则不能编辑。再例如:不同等级的会员在产品中可使用的功能范围不同。 **缺点**:当主体的数量较多时,配置和维护工作就会成本大、易出错。 @@ -89,11 +88,11 @@ RBAC 三要素: ![RBAC](https://static.7wate.com/img/2022/08/30/2fb0d9ad61795.png) -## RBAC的深度拓展 +## RBAC 的深度拓展 -RBAC模型可以分为:**RBAC0**、**RBAC1**、**RBAC2**、**RBAC3** 四个阶段,一般公司使用 **RBAC0** 的模型就可以。另外,**RBAC0** 相当于底层逻辑,后三者都是在 **RBAC0** 模型上的拔高。 +RBAC 模型可以分为:**RBAC0**、**RBAC1**、**RBAC2**、**RBAC3** 四个阶段,一般公司使用 **RBAC0** 的模型就可以。另外,**RBAC0** 相当于底层逻辑,后三者都是在 **RBAC0** 模型上的拔高。 -我先简单介绍下这四个RBAC模型: +我先简单介绍下这四个 RBAC 模型: ### 1. RBAC0 模型 @@ -123,11 +122,11 @@ RBAC模型可以分为:**RBAC0**、**RBAC1**、**RBAC2**、**RBAC3** 四个阶 如**角色互斥**,比较经典的案例是财务系统中出纳不得兼管稽核,那么在赋予财务系统操作人员角色时,同一个操作员不能同时拥有出纳和稽核两个角色。 -如**角色数量限制**,例如:一个角色专门为公司 CEO 创建的,最后发现公司有 10 个人拥有 CEO 角色,一个公司有10 个 CEO ?这就是对角色数量的限制,它指的是有多少用户能拥有这个角色。 +如**角色数量限制**,例如:一个角色专门为公司 CEO 创建的,最后发现公司有 10 个人拥有 CEO 角色,一个公司有 10 个 CEO ?这就是对角色数量的限制,它指的是有多少用户能拥有这个角色。 **RBAC2** 模型主要是为了增加角色赋予的限制条件,这也符合权限系统的目标:权责明确,系统使用安全、保密。 -### 4. RBAC3模型 +### 4. RBAC3 模型 同样是基于 **RBAC0** 模型,但是综合了 **RBAC1** 和 **RBAC2** 的所有特点 diff --git a/wiki/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md b/Tech/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md similarity index 89% rename from wiki/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md rename to Tech/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md index 355122f2..0f4856a7 100644 --- a/wiki/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md +++ b/Tech/computer-security/用户安全/用户鉴权/HTTP 基本鉴权.md @@ -2,14 +2,15 @@ title: HTTP 基本鉴权 description: HTTP 基本鉴权 keywords: -- HTTP -- 鉴权 + - HTTP + - 鉴权 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 1 author: 7Wate date: 2022-08-31 --- + ## HTTP 基本鉴权 在 HTTP 中,**基本认证方案(Basic Access Authentication)**是允许客户端(通常指的就是网页浏览器)在请求时,通过用户提供用户名和密码的方式,实现对用户身份的验证。 @@ -28,25 +29,25 @@ date: 2022-08-31 Authorization: Basic aHR0cHdhdGNoOmY= ``` -2. **服务器**:客户端你好,这个资源在安全区 baidu.com 里是受限资源,需要基本认证。并且向客户端返回 401 状态码 Unauthorized(未授权)以及附带提供了一个认证域 `www-Authenticate: Basic realm="baidu.com"` 要求进行身份验证;其中 Basic 就是验证的模式,而 `realm="baidu.com"` 说明客户端需要输入这个安全域的用户名和密码,而不是其他域的。 +1. **服务器**:客户端你好,这个资源在安全区 baidu.com 里是受限资源,需要基本认证。并且向客户端返回 401 状态码 Unauthorized(未授权)以及附带提供了一个认证域 `www-Authenticate: Basic realm="baidu.com"` 要求进行身份验证;其中 Basic 就是验证的模式,而 `realm="baidu.com"` 说明客户端需要输入这个安全域的用户名和密码,而不是其他域的。 ```http HTTP/1.1 401 Unauthorized www-Authenticate: Basic realm= "baidu.com" ``` -3. **客户端:** 服务器,我已经携带了用户名和密码给你了,你看一下(如果客户端是浏览器,那么此时会自动弹出一个弹窗,让用户输入用户名和密码); +1. **客户端:** 服务器,我已经携带了用户名和密码给你了,你看一下(如果客户端是浏览器,那么此时会自动弹出一个弹窗,让用户输入用户名和密码); 输入完用户名和密码后,则客户端将用户名及密码以 Base64 加密方式发送给服务器 - 传送的格式如下(其中 Basic 内容为:**用户名+密码的 AES 64 形式**): + 传送的格式如下(其中 Basic 内容为:**用户名 + 密码的 AES 64 形式**): ```http GET /list/ HTTP/1.1 Authorization: Basic Ksid2FuZzp3YW5n== ``` -4. **服务器:** 客户端你好,我已经校验了 `Authorization` 字段你的用户名和密码,是正确的,这是你要的资源。 +1. **服务器:** 客户端你好,我已经校验了 `Authorization` 字段你的用户名和密码,是正确的,这是你要的资源。 ```http HTTP/1.1 200 OK diff --git a/wiki/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md b/Tech/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md similarity index 98% rename from wiki/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md rename to Tech/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md index 66263d67..5fbdda87 100644 --- a/wiki/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md +++ b/Tech/computer-security/用户安全/用户鉴权/JWT(JSON Web Token)鉴权.md @@ -2,11 +2,11 @@ title: JWT 鉴权 description: JWT 鉴权 keywords: -- JWT -- Java -- 鉴权 + - JWT + - Java + - 鉴权 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 4 author: 7Wate date: 2022-08-31 diff --git a/wiki/computer-security/用户安全/用户鉴权/OAuth 鉴权.md b/Tech/computer-security/用户安全/用户鉴权/OAuth 鉴权.md similarity index 92% rename from wiki/computer-security/用户安全/用户鉴权/OAuth 鉴权.md rename to Tech/computer-security/用户安全/用户鉴权/OAuth 鉴权.md index 77196fa9..4d668c97 100644 --- a/wiki/computer-security/用户安全/用户鉴权/OAuth 鉴权.md +++ b/Tech/computer-security/用户安全/用户鉴权/OAuth 鉴权.md @@ -2,14 +2,15 @@ title: OAuth 鉴权 description: OAuth 鉴权 keywords: -- OAuth -- 鉴权 + - OAuth + - 鉴权 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 6 author: 7Wate date: 2022-08-31 --- + ## OAuth 2.0 OAuth 协议又有 1.0 和 2.0 两个版本,2.0 版整个授权验证流程更简单更安全,也是目前最主要的用户身份验证和授权方式。 @@ -49,7 +50,7 @@ OAuth 2.0 对于如何颁发令牌的细节,规定得非常详细。具体来 #### 1. 客户端 -打开网站 A,点击登录按钮,请求 A 服务,A 服务重定向 (重定向地址如下) 至授权服务器(如QQ、微信授权服务)。 +打开网站 A,点击登录按钮,请求 A 服务,A 服务重定向 (重定向地址如下) 至授权服务器(如 QQ、微信授权服务)。 ```http https://qq.com/oauth/authorize? @@ -114,7 +115,7 @@ https://qq.com/oauth/token? 有些 Web 应用是纯前端应用,没有后端;这时就不能用上面的方式了,必须将令牌储存在前端。 -OAuth2.0 就规定了**第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)**。 +OAuth2.0 就规定了**第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)" 隐藏式 "(implicit)**。 一句话概括:**客户端让用户登录授权服务器换 Token,客户端使用 Token 访问资源。** @@ -148,18 +149,18 @@ https://a.com/callback#token=ACCESS_TOKEN 还有需要**注意**的地方如下: -1. 令牌的位置是 URL 锚点(fragment),而不是查询字符串(querystring),这是因为 OAuth 2.0 允许跳转网址是 HTTP 协议,因此存在"中间人攻击"的风险,而浏览器跳转时,锚点不会发到服务器,就减少了泄漏令牌的风险。 +1. 令牌的位置是 URL 锚点(fragment),而不是查询字符串(querystring),这是因为 OAuth 2.0 允许跳转网址是 HTTP 协议,因此存在 " 中间人攻击 " 的风险,而浏览器跳转时,锚点不会发到服务器,就减少了泄漏令牌的风险。 2. 这种方式把令牌直接传给前端,是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了。 ## 用户名密码式模式(Password Credentials Grant) -如果你高度信任某个应用,OAuth 2.0 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。 +如果你高度信任某个应用,OAuth 2.0 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为 " 密码式 "(password)。 -一句话概括:**用户在客户端提交账号密码换 Token,客户端使用 Token访问资源。** +一句话概括:**用户在客户端提交账号密码换 Token,客户端使用 Token 访问资源。** ### 步骤详解 -##### 1. 客户端 +#### 1. 客户端 A 网站要求用户提供 授权服务器(qq.com)的用户名和密码。拿到以后,A 就直接向授权服务器请求令牌。 @@ -171,9 +172,9 @@ https://oauth.b.com/token? client_id=CLIENT_ID ``` -上面 URL 中,grant_type 参数是授权方式,这里的 password 表示"密码式",username 和 password 是授权服务器的用户名和密码。 +上面 URL 中,grant_type 参数是授权方式,这里的 password 表示 " 密码式 ",username 和 password 是授权服务器的用户名和密码。 -##### 2. 授权服务器 +#### 2. 授权服务器 授权服务器验证身份通过后,直接给出令牌。注意,这时不需要跳转,而是把令牌放在 JSON 数据里面,作为 HTTP 回应,A 网站因此拿到令牌。 @@ -183,11 +184,11 @@ https://oauth.b.com/token? 客户端模式指客户端以自己的名义,而不是以用户的名义,向授权服务器进行认证。主要适用于没有前端的命令行应用。 -一句话概括:**客户端使用自己的标识换token,客户端使用token访问资源**。 +一句话概括:**客户端使用自己的标识换 token,客户端使用 token 访问资源**。 ### 步骤详解 -##### 1. 客户端 +#### 1. 客户端 客户端向授权服务器进行身份认证,并要求一个访问令牌。 @@ -200,7 +201,7 @@ https://oauth.b.com/token? 上面 URL 中,grant_type 参数等于 client_credentials 表示采用凭证式,client_id 和 client_secret 用来让授权服务器确认 A 的身份。 -##### 2. 授权服务器 +#### 2. 授权服务器 授权服务器验证通过以后,直接返回令牌。这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。 diff --git a/wiki/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md b/Tech/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md similarity index 96% rename from wiki/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md rename to Tech/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md index 9d30b9a4..4cf5cd0e 100644 --- a/wiki/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md +++ b/Tech/computer-security/用户安全/用户鉴权/Session-Cookie 鉴权.md @@ -2,15 +2,16 @@ title: Session-Cookie 鉴权 description: Session-Cookie 鉴权 keywords: -- Session -- Cookie -- 鉴权 + - Session + - Cookie + - 鉴权 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 2 author: 7Wate date: 2022-08-31 --- + ## Session-Cookie 鉴权 **Session-Cookie** 认证是利用服务端的 **Session(会话**)和 **浏览器(客户端)** 的 Cookie 来实现的前后端通信认证模式。 @@ -27,7 +28,7 @@ date: 2022-08-31 - 有大小限制,最大为 4kb。 -- 有数量限制,一般一个浏览器对于一个网站只能存不超过 20 个 Cookie,浏览器一般只允许存放 300个 Cookie。 +- 有数量限制,一般一个浏览器对于一个网站只能存不超过 20 个 Cookie,浏览器一般只允许存放 300 个 Cookie。 - Android 和 IOS 对 Cookie 支持性不好。 @@ -45,7 +46,7 @@ Session 的抽象概念是会话,是无状态协议通信过程中,为了实 3. **客户端:** 浏览器收到响应获取会话信息,并且会在下一次请求时带上 Session / Session ID。 -4. **服务器:** 服务器提取后会与本地保存的 Session ID进行对比找到该特定用户的会话,进而获取会话状态。 +4. **服务器:** 服务器提取后会与本地保存的 Session ID 进行对比找到该特定用户的会话,进而获取会话状态。 5. 至此客户端与服务器的通信变成有状态的通信。 diff --git a/wiki/computer-security/用户安全/用户鉴权/Token 鉴权.md b/Tech/computer-security/用户安全/用户鉴权/Token 鉴权.md similarity index 97% rename from wiki/computer-security/用户安全/用户鉴权/Token 鉴权.md rename to Tech/computer-security/用户安全/用户鉴权/Token 鉴权.md index af223943..f98c5454 100644 --- a/wiki/computer-security/用户安全/用户鉴权/Token 鉴权.md +++ b/Tech/computer-security/用户安全/用户鉴权/Token 鉴权.md @@ -2,14 +2,15 @@ title: Token 鉴权 description: Token 鉴权 keywords: -- Token -- 鉴权 + - Token + - 鉴权 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 3 author: 7Wate date: 2022-08-31 --- + ## Token 鉴权 现在我们已经得知,Session-Cookie 的一些缺点,以及 Session 的维护给服务端造成很大困扰,我们必须找地方存放它,又要考虑分布式的问题,甚至要单独为了它启用一套 Redis 集群。那有没有更好的办法? @@ -46,7 +47,7 @@ Token 是一个令牌,客户端访问服务器时,验证通过后服务端 #### Token 的缺点 - **配合:** 需要前后端配合处理。 -- **占带宽:** 正常情况下比 sid 更大,消耗更多流量,挤占更多宽带。 +- **占带宽:** 正常情况下比 sid 更大,消耗更多流量,挤占更多宽带。 - **性能问题:** 虽说验证 Token 时不用再去访问数据库或远程服务进行权限校验,但是需要对 Token 加解密等操作,所以会更耗性能。 - **有效期短:** 为了避免 Token 被盗用,一般 Token 的有效期会设置的较短,所以就有了 Refresh Token。 diff --git a/wiki/computer-security/用户安全/用户鉴权/_category_.json b/Tech/computer-security/用户安全/用户鉴权/_category_.json similarity index 100% rename from wiki/computer-security/用户安全/用户鉴权/_category_.json rename to Tech/computer-security/用户安全/用户鉴权/_category_.json diff --git a/wiki/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md b/Tech/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md similarity index 96% rename from wiki/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md rename to Tech/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md index dab02551..c19e177d 100644 --- a/wiki/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md +++ b/Tech/computer-security/用户安全/用户鉴权/一键登录(适用于原生APP).md @@ -2,15 +2,16 @@ title: 一键登录 description: 一键登录 keywords: -- 一键登录 -- APP + - 一键登录 + - APP tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 10 author: 7Wate date: 2022-08-31 --- -## 一键登录(适用于原生APP) + +## 一键登录(适用于原生 APP) ### 账号密码登录 @@ -54,4 +55,4 @@ date: 2022-08-31 由于国内三大运营商各自有独立的 SDK,所以会导致兼容方面的工作会特别繁琐。如果要采用一键登录的方案,不妨采用第三方提供了号码认证服务,下列几家供应商都拥有手机号码认证能力:[阿里 - 号码认证服务](https://help.aliyun.com/product/75010.html)、[创蓝 - 闪验](http://shanyan.253.com/)、[极光 - 极光认证](https://www.jiguang.cn/identify)、[mob - 秒验](https://www.mob.com/mobService/secverify) -在认证过程中,需要用户打开蜂窝网络,如果手机设备没有插入 SIM 卡、或者关闭蜂窝网络的情况下,是无法完成认证的。所以就算接入一键登录,还是要兼容传统的登录方式,允许用户在失败的情况下,仍能正常完成登录流程。 \ No newline at end of file +在认证过程中,需要用户打开蜂窝网络,如果手机设备没有插入 SIM 卡、或者关闭蜂窝网络的情况下,是无法完成认证的。所以就算接入一键登录,还是要兼容传统的登录方式,允许用户在失败的情况下,仍能正常完成登录流程。 diff --git a/wiki/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md b/Tech/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md similarity index 93% rename from wiki/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md rename to Tech/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md index 53663030..1daf832f 100644 --- a/wiki/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md +++ b/Tech/computer-security/用户安全/用户鉴权/单点登录(Single Sign On).md @@ -2,11 +2,11 @@ title: SSO 单点登录 description: SSO 单点登录 keywords: -- 单点登录 -- SSO -- Single Sign On + - 单点登录 + - SSO + - Single Sign On tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 5 author: 7Wate date: 2022-08-31 @@ -66,5 +66,5 @@ date: 2022-08-31 #### CAS 生成的票据 - **TGT(Ticket Grangting Ticket)** :TGT 是 CAS 为用户签发的登录票据,拥有了 TGT,用户就可以证明自己在 CAS 成功登录过。 -- **TGC:Ticket Granting Cookie:** CAS Server 生成TGT放入自己的 Session 中,而 TGC 就是这个 Session 的唯一标识(SessionId),以 Cookie 形式放到浏览器端,是 CAS Server 用来明确用户身份的凭证。 +- **TGC:Ticket Granting Cookie:** CAS Server 生成 TGT 放入自己的 Session 中,而 TGC 就是这个 Session 的唯一标识(SessionId),以 Cookie 形式放到浏览器端,是 CAS Server 用来明确用户身份的凭证。 - **ST(Service Ticket)** :ST 是 CAS 为用户签发的访问某个 Service 的票据。 diff --git a/wiki/computer-security/用户安全/用户鉴权/唯一登录.md b/Tech/computer-security/用户安全/用户鉴权/唯一登录.md similarity index 82% rename from wiki/computer-security/用户安全/用户鉴权/唯一登录.md rename to Tech/computer-security/用户安全/用户鉴权/唯一登录.md index c4bc7fe5..7c36933e 100644 --- a/wiki/computer-security/用户安全/用户鉴权/唯一登录.md +++ b/Tech/computer-security/用户安全/用户鉴权/唯一登录.md @@ -2,9 +2,9 @@ title: 唯一登录 description: 唯一登录 keywords: -- 唯一登录 + - 唯一登录 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 8 author: 7Wate date: 2022-08-31 @@ -35,4 +35,4 @@ date: 2022-08-31 1. 输入账号请求登录接口。 2. …… -用户在客户端 B 上开始登录操作时,我们会发现,步骤和在客户端A上面的操作几乎是一致的。只是后端在生成新的 Token 时,要**先验证登录状态**,然后再生成对应新的 Token; \ No newline at end of file +用户在客户端 B 上开始登录操作时,我们会发现,步骤和在客户端 A 上面的操作几乎是一致的。只是后端在生成新的 Token 时,要**先验证登录状态**,然后再生成对应新的 Token; diff --git a/wiki/computer-security/用户安全/用户鉴权/扫码登录.md b/Tech/computer-security/用户安全/用户鉴权/扫码登录.md similarity index 87% rename from wiki/computer-security/用户安全/用户鉴权/扫码登录.md rename to Tech/computer-security/用户安全/用户鉴权/扫码登录.md index 1c3dede3..c051a933 100644 --- a/wiki/computer-security/用户安全/用户鉴权/扫码登录.md +++ b/Tech/computer-security/用户安全/用户鉴权/扫码登录.md @@ -2,19 +2,20 @@ title: 扫码登录 description: 扫码登录 keywords: -- 扫码登录 -- 二维码 + - 扫码登录 + - 二维码 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 9 author: 7Wate date: 2022-08-31 --- + ## 扫码登录 ### 扫码登录定义 -扫码登录通常见于移动端 APP 中,很多 PC 端的网站都提供了扫码登录的功能,无需在网页上输入任何账号和密码,只需要让移动端 APP(如微信、淘宝、QQ等等)中已登录用户主动扫描二维码 ,再确认登录,以使 PC 端的同款应用得以快速登录的方式就是扫码登录 。 +扫码登录通常见于移动端 APP 中,很多 PC 端的网站都提供了扫码登录的功能,无需在网页上输入任何账号和密码,只需要让移动端 APP(如微信、淘宝、QQ 等等)中已登录用户主动扫描二维码 ,再确认登录,以使 PC 端的同款应用得以快速登录的方式就是扫码登录 。 ### 二维码定义 @@ -28,7 +29,7 @@ date: 2022-08-31 #### 1. 待扫码阶段 -1. **桌面端:**打开某个网站(如taobao.com)或者某个 APP 的扫码登录入口;就会携带 PC 端的设备信息向服务端发送一个获取二维码的请求。 +1. **桌面端:**打开某个网站(如 taobao.com)或者某个 APP 的扫码登录入口;就会携带 PC 端的设备信息向服务端发送一个获取二维码的请求。 2. **服务端:**服务器收到请求后,随机生成一个 UUID 作为二维码 ID,并将 UUID 与桌面端的设备信息关联起来存储在 Redis 服务器中,然后返回给 PC 端;同时设置一个过期时间,在过期后,用户登录二维码需要进行刷新重新获取。 3. **桌面端:**收到二维码 ID 之后,将二维码 ID 以二维码的形式展示,等待移动端扫码。并且此时的桌面端开始轮询查询二维码状态,直到登录成功。 4. 如果移动端未扫描,那么一段时间后二维码会自动失效。 diff --git a/wiki/computer-security/用户安全/用户鉴权/联合登录和信任登录.md b/Tech/computer-security/用户安全/用户鉴权/联合登录和信任登录.md similarity index 96% rename from wiki/computer-security/用户安全/用户鉴权/联合登录和信任登录.md rename to Tech/computer-security/用户安全/用户鉴权/联合登录和信任登录.md index 65695f7a..44239fc6 100644 --- a/wiki/computer-security/用户安全/用户鉴权/联合登录和信任登录.md +++ b/Tech/computer-security/用户安全/用户鉴权/联合登录和信任登录.md @@ -2,14 +2,15 @@ title: 联合登录和信任登录 description: 联合登录和信任登录 keywords: -- 联合登录 -- 信任登录 + - 联合登录 + - 信任登录 tags: -- 权限 + - 计算机安全/用户安全 sidebar_position: 7 author: 7Wate date: 2022-08-31 --- + ## 联合登录和信任登录 ### 联合登录定义 diff --git a/wiki/computer-security/用户安全/简明指南.md b/Tech/computer-security/用户安全/简明指南.md similarity index 97% rename from wiki/computer-security/用户安全/简明指南.md rename to Tech/computer-security/用户安全/简明指南.md index be5c9505..e5980061 100644 --- a/wiki/computer-security/用户安全/简明指南.md +++ b/Tech/computer-security/用户安全/简明指南.md @@ -2,10 +2,10 @@ title: 简明指南 description: 用户安全简明指南 keywords: -- 用户安全 -- 简明指南 + - 用户安全 + - 简明指南 tags: -- 用户安全 + - 计算机安全/用户安全 sidebar_position: 1 author: 7Wate date: 2022-08-31 diff --git a/wiki/computer-security/系统安全/防火墙/网络端口大全.md b/Tech/computer-security/系统安全/防火墙/网络端口大全.md similarity index 53% rename from wiki/computer-security/系统安全/防火墙/网络端口大全.md rename to Tech/computer-security/系统安全/防火墙/网络端口大全.md index 932c22ec..7e15bf61 100644 --- a/wiki/computer-security/系统安全/防火墙/网络端口大全.md +++ b/Tech/computer-security/系统安全/防火墙/网络端口大全.md @@ -2,9 +2,9 @@ title: 网络端口大全 description: 网络端口大全 keywords: -- 网络端口 + - 网络端口 tags: -- 防火墙 + - 计算机安全/系统安全 sidebar_position: 1 author: 7Wate date: 2023-06-28 @@ -20,9 +20,9 @@ TCP/IP 协议中的端口是指在网络通信中使用的端口号,用于标 根据端口号的范围,网络端口可以分为以下三类: -1. **公认端口(Well-Known Ports):范围从0到1023,也被称为常用端口。**这些端口与一些特定的服务紧密绑定,例如FTP服务的21端口、HTTP服务的80端口等。 -2. **注册端口(Registered Ports):范围从1024到49151,这些端口松散地绑定于一些服务。**许多服务可能使用这些端口,并且这些端口也可能用于其他目的。 -3. **动态和/或私有端口(Dynamic and/or Private Ports):范围从49152到65535。**根据理论,常用服务不应分配到这些端口上。然而,实际上,一些特殊的程序,特别是一些恶意软件(如木马程序),经常使用这些端口。 +1. **公认端口(Well-Known Ports):范围从 0 到 1023,也被称为常用端口。**这些端口与一些特定的服务紧密绑定,例如 FTP 服务的 21 端口、HTTP 服务的 80 端口等。 +2. **注册端口(Registered Ports):范围从 1024 到 49151,这些端口松散地绑定于一些服务。**许多服务可能使用这些端口,并且这些端口也可能用于其他目的。 +3. **动态和/或私有端口(Dynamic and/or Private Ports):范围从 49152 到 65535。**根据理论,常用服务不应分配到这些端口上。然而,实际上,一些特殊的程序,特别是一些恶意软件(如木马程序),经常使用这些端口。 此外,端口还可以根据所使用的传输协议分为 **TCP 协议端口**和 **UDP 协议端口**。TCP(传输控制协议)和 UDP(用户数据报协议)是 TCP/IP 协议族中常用的传输层协议。一些常见的端口和它们所对应的协议包括 FTP(使用 21 端口,TCP 协议)、SMTP(使用 25 端口,TCP 协议)、HTTP(使用 80 端口,TCP 协议)、DNS(使用 53 端口,UDP 协议)等。 @@ -31,147 +31,147 @@ TCP/IP 协议中的端口是指在网络通信中使用的端口号,用于标 | 端口 | 服务 | 描述 | | ----- | ---------------------------------------------- | ------------------------------------------------------------ | | 0 | Reserved | 通常用于分析操作系统。 | -| 1 | tcpmux | 用于寻找SGI Irix机器。 | +| 1 | tcpmux | 用于寻找 SGI Irix 机器。 | | 7 | Echo | 发送信息到广播地址的端口。 | | 19 | Character Generator | 仅发送字符的服务。 | -| 21 | FTP | FTP服务器所开放的端口,用于上传和下载文件。 | -| 22 | Ssh | 用于寻找ssh。 | -| 23 | Telnet | 远程登录,入侵者搜索远程登录UNIX的服务。 | -| 25 | SMTP | SMTP服务器所开放的端口,用于发送邮件。 | -| 31 | MSG Authentication | 木马Master Paradise、Hackers Paradise开放此端口。 | -| 42 | WINS Replication | WINS复制端口。 | -| 53 | DNS | DNS服务器所开放的端口,用于域名解析。 | +| 21 | FTP | FTP 服务器所开放的端口,用于上传和下载文件。 | +| 22 | Ssh | 用于寻找 ssh。 | +| 23 | Telnet | 远程登录,入侵者搜索远程登录 UNIX 的服务。 | +| 25 | SMTP | SMTP 服务器所开放的端口,用于发送邮件。 | +| 31 | MSG Authentication | 木马 Master Paradise、Hackers Paradise 开放此端口。 | +| 42 | WINS Replication | WINS 复制端口。 | +| 53 | DNS | DNS 服务器所开放的端口,用于域名解析。 | | 67 | Bootstrap Protocol Server | 通过广播请求地址的端口。 | | 69 | Trivial File Transfer | 用于从系统下载启动代码的服务。 | | 79 | Finger Server | 用于获得用户信息的服务。 | | 80 | HTTP | 用于网页浏览的端口。 | -| 99 | Metagram Relay | 后门程序ncx99开放此端口。 | +| 99 | Metagram Relay | 后门程序 ncx99 开放此端口。 | | 102 | Message transfer agent (MTA)-X.400 over TCP/IP | 消息传输代理。 | -| 109 | Post Office Protocol - Version 3 | 用于接收邮件的POP3服务器端口。 | -| 110 | SUN公司的RPC服务所有端口 | SUN公司的RPC服务开放的端口。 | -| 113 | Authentication Service | 用于鉴别TCP连接的用户的服务。 | +| 109 | Post Office Protocol - Version 3 | 用于接收邮件的 POP3 服务器端口。 | +| 110 | SUN 公司的 RPC 服务所有端口 | SUN 公司的 RPC 服务开放的端口。 | +| 113 | Authentication Service | 用于鉴别 TCP 连接的用户的服务。 | | 137 | NETBIOS Name Service | 用于传输文件的服务。 | | 138 | NETBIOS Name Service | 用于传输文件的服务。 | -| 139 | NETBIOS/SMB服务 | 用于Windows文件和打印机共享的服务。 | -| 143 | Interim Mail Access Protocol v2 | 用于电子邮件的IMAP服务。 | +| 139 | NETBIOS/SMB 服务 | 用于 Windows 文件和打印机共享的服务。 | +| 143 | Interim Mail Access Protocol v2 | 用于电子邮件的 IMAP 服务。 | | 161 | SNMP | 用于远程管理设备的协议。 | -| 177 | X Display Manager Control Protocol | 用于访问X-windows操作台的服务。 | -| 389 | LDAP, ILS | 轻型目录访问协议和NetMeeting Internet Locator Server的共用端口。 | -| 443 | HTTPS | 提供加密和通过安全端口传输的HTTP服务。 | -| 456 | [NULL] | 木马HACKERS PARADISE开放此端口。 | -| 513 | Login, remote login | 从使用cable modem或DSL登陆到子网中的UNIX计算机发出的广播。 | -| 548 | Macintosh, File Services (AFP/IP) | 用于Macintosh文件服务的端口。 | -| 553 | CORBA IIOP (UDP) | CORBA面向对象的RPC系统的端口。 | -| 555 | DSF | 木马PhAse1.0、Stealth Spy、IniKiller开放此端口。 | -| 568 | Membership DPA | 成员资格DPA的端口。 | -| 569 | Membership MSN | 成员资格MSN的端口。 | -| 635 | mountd | Linux的mountd Bug的端口。 | -| 636 | LDAP | SSL端口。 | -| 666 | Doom Id Software | 木马Attack FTP、Satanz Backdoor开放此端口。 | -| 993 | IMAP | SSL端口。 | -| 1001 | [NULL] | 木马Silencer、WebEx开放此端口。 | -| 1011 | [NULL] | 木马Doly Trojan开放此端口。 | +| 177 | X Display Manager Control Protocol | 用于访问 X-windows 操作台的服务。 | +| 389 | LDAP, ILS | 轻型目录访问协议和 NetMeeting Internet Locator Server 的共用端口。 | +| 443 | HTTPS | 提供加密和通过安全端口传输的 HTTP 服务。 | +| 456 | [NULL] | 木马 HACKERS PARADISE 开放此端口。 | +| 513 | Login, remote login | 从使用 cable modem 或 DSL 登陆到子网中的 UNIX 计算机发出的广播。 | +| 548 | Macintosh, File Services (AFP/IP) | 用于 Macintosh 文件服务的端口。 | +| 553 | CORBA IIOP (UDP) | CORBA 面向对象的 RPC 系统的端口。 | +| 555 | DSF | 木马 PhAse1.0、Stealth Spy、IniKiller 开放此端口。 | +| 568 | Membership DPA | 成员资格 DPA 的端口。 | +| 569 | Membership MSN | 成员资格 MSN 的端口。 | +| 635 | mountd | Linux 的 mountd Bug 的端口。 | +| 636 | LDAP | SSL 端口。 | +| 666 | Doom Id Software | 木马 Attack FTP、Satanz Backdoor 开放此端口。 | +| 993 | IMAP | SSL 端口。 | +| 1001 | [NULL] | 木马 Silencer、WebEx 开放此端口。 | +| 1011 | [NULL] | 木马 Doly Trojan 开放此端口。 | | 1024 | Reserved | 动态端口的开始,许多程序使用此端口连接网络。 | | 1025 | network blackjack | [NULL] | -| 1033 | [NULL] | 木马netspy开放此端口。 | -| 1080 | SOCKS | 以通道方式穿过防火墙的协议,允许防火墙后面的人通过一个IP地址访问INTERNET。 | -| 1170 | [NULL] | 木马Streaming Audio Trojan、Psyber Stream Server、Voice开放此端口。 | -| 1234 | [NULL] | 木马SubSeven2.0、Ultors Trojan开放此端口。 | -| 1243 | [NULL] | 木马SubSeven1.0/1.9开放此端口。 | -| 135 | Location Service | Microsoft的DCOM服务运行的端口。 | -| 1370 | [NULL] | 木马DeltaSource开放此端口。 | -| 1390 | [NULL] | 木马Gatecrasher、Priority开放此端口。 | -| 1433 | SQL | Microsoft的SQL服务开放的端口。 | -| 1492 | stone-design-1 | 木马FTP99CMP开放此端口。 | -| 1500 | RPC client fixed port session queries | 用于固定端口会话查询的RPC客户端。 | -| 1503 | NetMeeting T.120 | NetMeeting T.120端口。 | -| 1600 | issd | 木马Phineas Phucker开放此端口。 | -| 1720 | NetMeeting | NetMeeting H.233呼叫设置。 | -| 1731 | NetMeeting Audio Call Control | NetMeeting音频调用控制。 | -| 1807 | [NULL] | 木马SpySender开放此端口。 | -| 1981 | [NULL] | 木马ShockRave开放此端口。 | -| 1999 | cisco identification port | 木马BackDoor开放此端口。 | -| 2000 | [NULL] | 木马GirlFriend 1.3、Millenium 1.0开放此端口。 | -| 2001 | [NULL] | 木马Millenium 1.0、Trojan Cow开放此端口。 | -| 2023 | xinuexpansion 4 | 木马Pass Ripper开放此端口。 | -| 2049 | NFS | NFS程序常运行于此端口。 | -| 2115 | [NULL] | 木马Bugs开放此端口。 | -| 2140 | [NULL] | 木马Phineas Phucker开放此端口。 | -| 2583 | [NULL] | 木马Wincrash 2.0开放此端口。 | -| 2801 | [NULL] | 木马Phineas Phucker开放此端口。 | -| 3024 | [NULL] | 木马WinCrash开放此端口。 | -| 3129 | [NULL] | 木马Master Paradise开放此端口。 | -| 3150 | [NULL] | 木马The Invasor开放此端口。 | -| 3210 | [NULL] | 木马SchoolBus开放此端口。 | -| 3333 | dec-notes | 木马Prosiak开放此端口。 | -| 3389 | 超级终端 | WINDOWS 2000终端开放此端口。 | -| 3700 | [NULL] | 木马Portal of Doom开放此端口。 | -| 3996 | [NULL] | 木马RemoteAnything开放此端口。 | -| 4000 | QQ客户端 | 腾讯QQ客户端开放此端口。 | -| 4092 | [NULL] | 木马WinCrash开放此端口。 | -| 4590 | [NULL] | 木马ICQTrojan开放此端口。 | -| 5000 | [NULL] | 木马blazer5开放此端口。 | -| 5001 | [NULL] | 木马Sockets de Troie开放此端口。 | -| 5321 | [NULL] | 木马Sockets de Troie开放此端口。 | -| 5400 | [NULL] | 木马Blade Runner开放此端口。 | -| 5401 | [NULL] | 木马Blade Runner开放此端口。 | -| 5402 | [NULL] | 木马Blade Runner开放此端口。 | -| 5550 | [NULL] | 木马xtcp开放此端口。 | -| 5569 | [NULL] | 木马Robo-Hack开放此端口。 | -| 5631 | pcanywhere-data | Symantec pcAnywhere远程控制软件使用的数据端口。 | -| 5632 | pcanywhere-udp | Symantec pcAnywhere远程控制软件使用的UDP端口。 | -| 5742 | [NULL] | 木马WinCrash开放此端口。 | -| 5822 | [NULL] | 木马KillU2开放此端口。 | -| 5900 | VNC | Virtual Network Computing远程控制软件使用的端口。 | -| 6000 | X Window | X-Window系统默认的端口。 | -| 6667 | IRC | Internet Relay Chat使用的端口。 | -| 7000 | [NULL] | 木马Remote Grab开放此端口。 | -| 7215 | [NULL] | 木马PSX开放此端口。 | +| 1033 | [NULL] | 木马 netspy 开放此端口。 | +| 1080 | SOCKS | 以通道方式穿过防火墙的协议,允许防火墙后面的人通过一个 IP 地址访问 INTERNET。 | +| 1170 | [NULL] | 木马 Streaming Audio Trojan、Psyber Stream Server、Voice 开放此端口。 | +| 1234 | [NULL] | 木马 SubSeven2.0、Ultors Trojan 开放此端口。 | +| 1243 | [NULL] | 木马 SubSeven1.0/1.9 开放此端口。 | +| 135 | Location Service | Microsoft 的 DCOM 服务运行的端口。 | +| 1370 | [NULL] | 木马 DeltaSource 开放此端口。 | +| 1390 | [NULL] | 木马 Gatecrasher、Priority 开放此端口。 | +| 1433 | SQL | Microsoft 的 SQL 服务开放的端口。 | +| 1492 | stone-design-1 | 木马 FTP99CMP 开放此端口。 | +| 1500 | RPC client fixed port session queries | 用于固定端口会话查询的 RPC 客户端。 | +| 1503 | NetMeeting T.120 | NetMeeting T.120 端口。 | +| 1600 | issd | 木马 Phineas Phucker 开放此端口。 | +| 1720 | NetMeeting | NetMeeting H.233 呼叫设置。 | +| 1731 | NetMeeting Audio Call Control | NetMeeting 音频调用控制。 | +| 1807 | [NULL] | 木马 SpySender 开放此端口。 | +| 1981 | [NULL] | 木马 ShockRave 开放此端口。 | +| 1999 | cisco identification port | 木马 BackDoor 开放此端口。 | +| 2000 | [NULL] | 木马 GirlFriend 1.3、Millennium 1.0 开放此端口。 | +| 2001 | [NULL] | 木马 Millennium 1.0、Trojan Cow 开放此端口。 | +| 2023 | xinuexpansion 4 | 木马 Pass Ripper 开放此端口。 | +| 2049 | NFS | NFS 程序常运行于此端口。 | +| 2115 | [NULL] | 木马 Bugs 开放此端口。 | +| 2140 | [NULL] | 木马 Phineas Phucker 开放此端口。 | +| 2583 | [NULL] | 木马 Wincrash 2.0 开放此端口。 | +| 2801 | [NULL] | 木马 Phineas Phucker 开放此端口。 | +| 3024 | [NULL] | 木马 WinCrash 开放此端口。 | +| 3129 | [NULL] | 木马 Master Paradise 开放此端口。 | +| 3150 | [NULL] | 木马 The Invasor 开放此端口。 | +| 3210 | [NULL] | 木马 SchoolBus 开放此端口。 | +| 3333 | dec-notes | 木马 Prosiak 开放此端口。 | +| 3389 | 超级终端 | WINDOWS 2000 终端开放此端口。 | +| 3700 | [NULL] | 木马 Portal of Doom 开放此端口。 | +| 3996 | [NULL] | 木马 RemoteAnything 开放此端口。 | +| 4000 | QQ 客户端 | 腾讯 QQ 客户端开放此端口。 | +| 4092 | [NULL] | 木马 WinCrash 开放此端口。 | +| 4590 | [NULL] | 木马 ICQTrojan 开放此端口。 | +| 5000 | [NULL] | 木马 blazer5 开放此端口。 | +| 5001 | [NULL] | 木马 Sockets de Troie 开放此端口。 | +| 5321 | [NULL] | 木马 Sockets de Troie 开放此端口。 | +| 5400 | [NULL] | 木马 Blade Runner 开放此端口。 | +| 5401 | [NULL] | 木马 Blade Runner 开放此端口。 | +| 5402 | [NULL] | 木马 Blade Runner 开放此端口。 | +| 5550 | [NULL] | 木马 xtcp 开放此端口。 | +| 5569 | [NULL] | 木马 Robo-Hack 开放此端口。 | +| 5631 | pcanywhere-data | Symantec pcAnywhere 远程控制软件使用的数据端口。 | +| 5632 | pcanywhere-udp | Symantec pcAnywhere 远程控制软件使用的 UDP 端口。 | +| 5742 | [NULL] | 木马 WinCrash 开放此端口。 | +| 5822 | [NULL] | 木马 KillU2 开放此端口。 | +| 5900 | VNC | Virtual Network Computing 远程控制软件使用的端口。 | +| 6000 | X Window | X-Window 系统默认的端口。 | +| 6667 | IRC | Internet Relay Chat 使用的端口。 | +| 7000 | [NULL] | 木马 Remote Grab 开放此端口。 | +| 7215 | [NULL] | 木马 PSX 开放此端口。 | | 8080 | HTTP | 另一种用于网页浏览的端口。 | -| 8222 | [NULL] | 木马Prosiak开放此端口。 | -| 8443 | HTTPS | 提供加密和通过安全端口传输的HTTP服务。 | -| 8888 | [NULL] | 木马Blazer5开放此端口。 | -| 9898 | [NULL] | 木马Dabber开放此端口。 | -| 9988 | [NULL] | 木马MassDestruction开放此端口。 | -| 9989 | [NULL] | 木马iNi-Killer开放此端口。 | -| 11000 | [NULL] | 木马SennaSpy开放此端口。 | -| 11223 | [NULL] | 木马Progenic trojan开放此端口。 | -| 12076 | [NULL] | 木马Telecommando开放此端口。 | -| 61466 | [NULL] | 木马Telecommando开放此端口。 | -| 12223 | [NULL] | 木马Hack99 KeyLogger开放此端口。 | -| 12345 | [NULL] | 木马NetBus1.60/1.70、GabanBus开放此端口。 | -| 12346 | [NULL] | 木马NetBus1.60/1.70、GabanBus开放此端口。 | -| 12361 | [NULL] | 木马Whack-a-mole开放此端口。 | -| 13223 | PowWow | PowWow是Tribal Voice的聊天程序。 | -| 16969 | [NULL] | 木马Priority开放此端口。 | -| 17027 | Conducent | 公司内部安装了带有Conducent"adbot"的共享软件。 | +| 8222 | [NULL] | 木马 Prosiak 开放此端口。 | +| 8443 | HTTPS | 提供加密和通过安全端口传输的 HTTP 服务。 | +| 8888 | [NULL] | 木马 Blazer5 开放此端口。 | +| 9898 | [NULL] | 木马 Dabber 开放此端口。 | +| 9988 | [NULL] | 木马 MassDestruction 开放此端口。 | +| 9989 | [NULL] | 木马 iNi-Killer 开放此端口。 | +| 11000 | [NULL] | 木马 SennaSpy 开放此端口。 | +| 11223 | [NULL] | 木马 Progenic trojan 开放此端口。 | +| 12076 | [NULL] | 木马 Telecommando 开放此端口。 | +| 61466 | [NULL] | 木马 Telecommando 开放此端口。 | +| 12223 | [NULL] | 木马 Hack99 KeyLogger 开放此端口。 | +| 12345 | [NULL] | 木马 NetBus1.60/1.70、GabanBus 开放此端口。 | +| 12346 | [NULL] | 木马 NetBus1.60/1.70、GabanBus 开放此端口。 | +| 12361 | [NULL] | 木马 Whack-a-mole 开放此端口。 | +| 13223 | PowWow | PowWow 是 Tribal Voice 的聊天程序。 | +| 16969 | [NULL] | 木马 Priority 开放此端口。 | +| 17027 | Conducent | 公司内部安装了带有 Conducent"adbot" 的共享软件。 | | 19191 | [NULL] | 木马蓝色火焰开放此端口。 | -| 20000 | [NULL] | 木马Millennium开放此端口。 | -| 20001 | [NULL] | 木马Millennium开放此端口。 | -| 20034 | [NULL] | 木马NetBus Pro开放此端口。 | -| 21554 | [NULL] | 木马GirlFriend开放此端口。 | -| 22222 | [NULL] | 木马Prosiak开放此端口。 | -| 23456 | [NULL] | 木马Evil FTP、Ugly FTP开放此端口。 | -| 26274 | [NULL] | 木马Delta开放此端口。 | -| 47262 | [NULL] | 木马Delta开放此端口。 | -| 27374 | [NULL] | 木马Subseven 2.1开放此端口。 | -| 30100 | [NULL] | 木马NetSphere开放此端口。 | -| 30303 | [NULL] | 木马Socket23开放此端口。 | -| 30999 | [NULL] | 木马Kuang开放此端口。 | -| 31337 | [NULL] | 木马BO (Back Orifice)开放此端口。 | -| 31338 | [NULL] | 木马BO (Back Orifice)、DeepBO开放此端口。 | -| 31339 | [NULL] | 木马NetSpy DK开放此端口。 | -| 31666 | [NULL] | 木马BOWhack开放此端口。 | -| 33333 | [NULL] | 木马Prosiak开放此端口。 | -| 34324 | [NULL] | 木马Tiny Telnet Server、BigGluck、TN开放此端口。 | -| 40412 | [NULL] | 木马The Spy开放此端口。 | -| 40421 | [NULL] | 木马Masters Paradise开放此端口。 | -| 40422 | [NULL] | 木马Masters Paradise开放此端口。 | -| 40423 | [NULL] | 木马Masters Paradise开放此端口。 | -| 40426 | [NULL] | 木马Masters Paradise开放此端口。 | -| 43210 | [NULL] | 木马SchoolBus 1.0/2.0开放此端口。 | -| 54321 | [NULL] | 木马SchoolBus 1.0/2.0开放此端口。 | -| 44445 | [NULL] | 木马Happypig开放此端口。 | -| 50766 | [NULL] | 木马Fore开放此端口。 | -| 53001 | [NULL] | 木马Remote Windows Shutdown开放此端口。 | -| 65000 | [NULL] | 木马Devil 1.03开放此端口。 | +| 20000 | [NULL] | 木马 Millennium 开放此端口。 | +| 20001 | [NULL] | 木马 Millennium 开放此端口。 | +| 20034 | [NULL] | 木马 NetBus Pro 开放此端口。 | +| 21554 | [NULL] | 木马 GirlFriend 开放此端口。 | +| 22222 | [NULL] | 木马 Prosiak 开放此端口。 | +| 23456 | [NULL] | 木马 Evil FTP、Ugly FTP 开放此端口。 | +| 26274 | [NULL] | 木马 Delta 开放此端口。 | +| 47262 | [NULL] | 木马 Delta 开放此端口。 | +| 27374 | [NULL] | 木马 Subseven 2.1 开放此端口。 | +| 30100 | [NULL] | 木马 NetSphere 开放此端口。 | +| 30303 | [NULL] | 木马 Socket23 开放此端口。 | +| 30999 | [NULL] | 木马 Kuang 开放此端口。 | +| 31337 | [NULL] | 木马 BO (Back Orifice) 开放此端口。 | +| 31338 | [NULL] | 木马 BO (Back Orifice)、DeepBO 开放此端口。 | +| 31339 | [NULL] | 木马 NetSpy DK 开放此端口。 | +| 31666 | [NULL] | 木马 BOWhack 开放此端口。 | +| 33333 | [NULL] | 木马 Prosiak 开放此端口。 | +| 34324 | [NULL] | 木马 Tiny Telnet Server、BigGluck、TN 开放此端口。 | +| 40412 | [NULL] | 木马 The Spy 开放此端口。 | +| 40421 | [NULL] | 木马 Masters Paradise 开放此端口。 | +| 40422 | [NULL] | 木马 Masters Paradise 开放此端口。 | +| 40423 | [NULL] | 木马 Masters Paradise 开放此端口。 | +| 40426 | [NULL] | 木马 Masters Paradise 开放此端口。 | +| 43210 | [NULL] | 木马 SchoolBus 1.0/2.0 开放此端口。 | +| 54321 | [NULL] | 木马 SchoolBus 1.0/2.0 开放此端口。 | +| 44445 | [NULL] | 木马 Happypig 开放此端口。 | +| 50766 | [NULL] | 木马 Fore 开放此端口。 | +| 53001 | [NULL] | 木马 Remote Windows Shutdown 开放此端口。 | +| 65000 | [NULL] | 木马 Devil 1.03 开放此端口。 | diff --git a/wiki/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md b/Tech/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md similarity index 98% rename from wiki/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md rename to Tech/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md index b1ca71ce..c70ad339 100644 --- a/wiki/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md +++ b/Tech/computer-security/网络安全/OpenSSH/OpenSSH 使用方法.md @@ -2,10 +2,10 @@ title: OpenSSH 使用方法 description: OpenSSH 使用方法 keywords: -- OpenSSH -- 使用方法 + - OpenSSH + - 使用方法 tags: -- OpenSSH + - 计算机安全/网络安全 sidebar_position: 2 author: 7Wate date: 2023-06-26 @@ -115,7 +115,7 @@ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT ## 工具 -### ssh +### Ssh `ssh` 是用于远程登录或者在远程主机上执行命令。 @@ -140,9 +140,9 @@ $ ssh [options] [user@]hostname [command] | `-R ` | 设置远程端口转发,把远程的某个端口的流量转发到本地的某个端口 | | `-D <[bind_address:]port>` | 设置动态端口转发,创建 SOCKS 代理 | -### scp +### Scp -`scp`是用于在本地主机和远程主机之间,或者两个远程主机之间复制文件的命令行工具。 +`scp` 是用于在本地主机和远程主机之间,或者两个远程主机之间复制文件的命令行工具。 ```shell # 从本地复制文件到远程主机 @@ -161,7 +161,7 @@ $ scp [options] user@remote:/path/to/source /path/to/local/destination | `-c ` | 指定加密算法,如 aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, etc. | | `-i ` | 选择私钥文件,用于密钥认证 | -### sftp +### Sftp `sftp` 是一个用于安全地传输文件的网络协议。可以使用 `sftp` 命令在你的计算机和远程服务器之间传输文件,就像使用 FTP 一样。 @@ -200,7 +200,7 @@ $ sftp [user@]hostname | `bye` 、 `exit` | `sftp> bye` 、 `sftp> exit` | 退出 `sftp` 会话 | | `help` | `sftp> help` | 显示帮助信息 | -### ssh-keygen +### Ssh-keygen `ssh-keygen` 是一个用于创建、管理和转换认证密钥的工具,ssh-keygen 是 OpenSSH 套件中的一个重要组成部分。 @@ -228,7 +228,7 @@ $ ssh-keygen -t -b *注意,如果你想要创建一个没有密码的私钥,你可以在 `-N` 选项后面留空,或者在运行 `ssh-keygen` 命令时直接按 Enter 跳过输入密码的步骤。* -### ssh-agent +### Ssh-agent `ssh-agent` 是一个帮助管理 SSH 私钥的程序,用于保存所有私钥,并在需要进行 SSH 认证时提供这些私钥。`ssh-agent` 通过在后台运行并维护一个已解锁的私钥列表,可以让你在使用 SSH 客户端进行多个 SSH 连接或操作时避免频繁输入密码。 @@ -241,7 +241,7 @@ $ ssh-agent bash $ ssh-agent -k ``` -### ssh-add +### Ssh-add `ssh-add` 可以把你的私钥添加到 `ssh-agent` 的密钥列表中,这样你就可以避免频繁输入密码。一旦你的私钥被添加到 `ssh-agent` 中,你在使用 SSH 客户端进行认证时就可以直接从 `ssh-agent` 中获取私钥,无需再手动输入。 @@ -262,7 +262,7 @@ $ ssh-add [options] [file ...] | `-x` | 锁定 `ssh-agent`,需要密码才能解锁 | | `-X` | 解锁 `ssh-agent` | -### ssh-keyscan +### Ssh-keyscan `ssh-keyscan` 是一个方便的工具,它允许用户获取和管理公开的 SSH 密钥。当需要扫描和收集远程服务器的 SSH 公钥以用于以后的身份验证时,`ssh-keyscan` 是一个非常有用的工具。 @@ -279,7 +279,7 @@ ssh-keyscan [options] host [host2] [host3]... | `-H` | 将结果中的主机名哈希化,这可以防止主机名被保存在已知主机文件中 | | `-o ` | 将输出写入到指定的文件中 | -### ssh-copy-id +### Ssh-copy-id `ssh-copy-id` 是一个非常有用的命令,它可以把你的 SSH 公钥复制到远程服务器,以便实现无密码登录。这个命令会自动处理公钥的安装和权限设置。 diff --git a/wiki/computer-security/网络安全/OpenSSH/OpenSSH 概述.md b/Tech/computer-security/网络安全/OpenSSH/OpenSSH 概述.md similarity index 69% rename from wiki/computer-security/网络安全/OpenSSH/OpenSSH 概述.md rename to Tech/computer-security/网络安全/OpenSSH/OpenSSH 概述.md index 73fb4edd..0772850e 100644 --- a/wiki/computer-security/网络安全/OpenSSH/OpenSSH 概述.md +++ b/Tech/computer-security/网络安全/OpenSSH/OpenSSH 概述.md @@ -2,10 +2,10 @@ title: OpenSSH 概述 description: OpenSSH 概述 keywords: -- OpenSSH -- 简介 + - OpenSSH + - 简介 tags: -- OpenSSH + - 计算机安全/网络安全 sidebar_position: 1 author: 7Wate date: 2023-06-26 @@ -21,7 +21,7 @@ date: 2023-06-26 Tatu Ylonen 创建了 SSH 通信安全公司,为企业提供商业支持,原始版本演变为 Tectia SSH。商业版本还支持 Windows 和 IBM 主机(z/OS)平台,并全面支持 X.509 证书和智能卡认证(例如美国政府使用的 CAC 和 PIV 卡)。 -[开源版本](https://github.com/openssh/openssh-portable)以源代码或预编译的二进制文件的形式提供,使用 BSD 风格的许可证。项目团队不为最终用户提供支持服务,但各种安全网络论坛提供基于社区的支持(基于自愿的基础)。 +[开源版本](https://github.com/openssh/openssh-portable) 以源代码或预编译的二进制文件的形式提供,使用 BSD 风格的许可证。项目团队不为最终用户提供支持服务,但各种安全网络论坛提供基于社区的支持(基于自愿的基础)。 ## 组成 @@ -63,17 +63,17 @@ OpenSSH (Open Secure Shell) 是一个为安全网络通信提供的套件,包 ### 认证方法 -- 密码认证:密码认证是最基础的认证方式,用户需要提供用户名和密码,服务器会验证密码是否正确。这种方式简单易用,但是**密码可能被窃听,或者通过暴力破解获取。** +- 密码认证:密码认证是最基础的认证方式,用户需要提供用户名和密码,服务器会验证密码是否正确。这种方式简单易用,但是**密码可能被窃听,或者通过暴力破解获取。** -- 公钥认证:公钥认证是一种更为安全的认证方式,用户需要在服务器上提前存储公钥,在进行认证时,客户端使用私钥对一段数据进行签名,服务器使用公钥验证签名,以此确认客户端拥有私钥,从而验证其身份。这种方式的安全性较高,因为私钥不需要在网络上传输,而且即使公钥被窃取,也无法伪造签名。 +- 公钥认证:公钥认证是一种更为安全的认证方式,用户需要在服务器上提前存储公钥,在进行认证时,客户端使用私钥对一段数据进行签名,服务器使用公钥验证签名,以此确认客户端拥有私钥,从而验证其身份。这种方式的安全性较高,因为私钥不需要在网络上传输,而且即使公钥被窃取,也无法伪造签名。 ### 防范攻击 -- 中间人攻击:OpenSSH 通过在建立连接时使用非对称密钥加密传输会话密钥,以及在公钥认证时使用私钥签名,公钥验证的方式,防止了中间人攻击。即使中间人能够截获通信数据,也无法获取会话密钥,或者伪造签名。 +- 中间人攻击:OpenSSH 通过在建立连接时使用非对称密钥加密传输会话密钥,以及在公钥认证时使用私钥签名,公钥验证的方式,防止了中间人攻击。即使中间人能够截获通信数据,也无法获取会话密钥,或者伪造签名。 -- 重放攻击:在建立连接的过程中,客户端和服务器都会生成一个随机数,这个随机数只用于当前的会话,下一次连接会重新生成。这样即使旧的通信会话被截获,也无法被重放,因为随机数已经改变。 +- 重放攻击:在建立连接的过程中,客户端和服务器都会生成一个随机数,这个随机数只用于当前的会话,下一次连接会重新生成。这样即使旧的通信会话被截获,也无法被重放,因为随机数已经改变。 -- 拒绝服务攻击:OpenSSH 通过各种机制,如限制并发连接数,限制每秒认证请求的次数,使用 TCP Wrapper 等方式,防止拒绝服务攻击。这样可以防止恶意用户通过大量的无效连接,耗尽服务器的资源。 +- 拒绝服务攻击:OpenSSH 通过各种机制,如限制并发连接数,限制每秒认证请求的次数,使用 TCP Wrapper 等方式,防止拒绝服务攻击。这样可以防止恶意用户通过大量的无效连接,耗尽服务器的资源。 ## 结论 diff --git a/wiki/computer-security/网络安全/OpenSSL/简明指南.md b/Tech/computer-security/网络安全/OpenSSL/简明指南.md similarity index 95% rename from wiki/computer-security/网络安全/OpenSSL/简明指南.md rename to Tech/computer-security/网络安全/OpenSSL/简明指南.md index 0e5e66cd..e994738b 100644 --- a/wiki/computer-security/网络安全/OpenSSL/简明指南.md +++ b/Tech/computer-security/网络安全/OpenSSL/简明指南.md @@ -2,10 +2,10 @@ title: 简明指南 description: OpenSSL 简明指南 keywords: -- OpenSSL -- 简明指南 + - OpenSSL + - 简明指南 tags: -- OpenSSL + - 计算机安全/网络安全 sidebar_position: 1 author: 7Wate date: 2023-06-28 @@ -13,7 +13,7 @@ date: 2023-06-28 ## OpenSSL 的一般使用 -OpenSSL是一个开放源代码的软件库包。这个包广泛被应用在互联网的网页服务器上。 其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。 +OpenSSL 是一个开放源代码的软件库包。这个包广泛被应用在互联网的网页服务器上。 其主要库是以 C 语言所写成,实现了基本的加密功能,实现了 SSL 与 TLS 协议。 > 以下命令均在 cygwin 或 linux 下运行 > 以下命令是在这个版本 `OpenSSL 1.1.1g 21 Apr 2020` 下的 OpenSSL 运行的 @@ -359,7 +359,7 @@ openssl req -new \ openssl ca -in client.csr -out client.crt -cert cacert.crt -keyfile cakey.key -config openssl.cnf ``` -- 注意:默认要求 国家,省,公司名称三项必须和CA一致 +- 注意:默认要求 国家,省,公司名称三项必须和 CA 一致 - 如果不想一致,可以修改 openssl.cnf 的 [ CA_default ] 的 policy 为 policy_anything @@ -423,6 +423,6 @@ openssl s_client 用于测试 TSL 服务端 openssl s_client -connect www.baidu.com:443 -showcerts ``` -openssl smime 用于处理S/MIME邮件,它能加密、解密、签名和验证S/MIME消息 +openssl smime 用于处理 S/MIME 邮件,它能加密、解密、签名和验证 S/MIME 消息 -openssl ca ca命令是一个小型CA系统。它能签发证书请求和生成CRL。它维护一个已签发证书状态的文本数据库。 +openssl ca ca 命令是一个小型 CA 系统。它能签发证书请求和生成 CRL。它维护一个已签发证书状态的文本数据库。 diff --git a/wiki/database-system/PostgreSQL/基本概念.md b/Tech/database-system/PostgreSQL/基本概念.md similarity index 94% rename from wiki/database-system/PostgreSQL/基本概念.md rename to Tech/database-system/PostgreSQL/基本概念.md index b7dc9b9f..d15b0093 100644 --- a/wiki/database-system/PostgreSQL/基本概念.md +++ b/Tech/database-system/PostgreSQL/基本概念.md @@ -5,7 +5,7 @@ keywords: - Postgresql - 基本概念 tags: - - Postgresql + - 数据库系统/PostgreSQL sidebar_position: 2 author: 7Wate date: 2023-09-21 @@ -133,7 +133,7 @@ graph TD; | pg_ident.conf | 用于标识客户端连接的规则配置文件 | | pg_logical | 用于逻辑复制的相关文件和状态信息 | | pg_multixact | 存储多事务共享锁的信息 | -| pg_notify | 用于实现`NOTIFY`和`LISTEN`功能的通知目录 | +| pg_notify | 用于实现 `NOTIFY` 和 `LISTEN` 功能的通知目录 | | pg_replslot | 存储逻辑复制插槽信息的目录 | | pg_serial | 存储序列的数据文件 | | pg_snapshots | 存储快照信息 | @@ -346,11 +346,11 @@ graph LR - **共享缓冲区/Shared Buffers**: 这是 PostgreSQL 的主要缓存区,用于存储表数据、索引和系统目录。它是所有后端进程和后台进程共享的,用于减少磁盘 I/O。 - **工作内存/Work Mem**: 用于存储排序和哈希操作的中间结果。每个后端进程都有自己的工作内存。 - **维护工作内存/Maintenance Work Mem**: 用于存储维护任务(如 VACUUM、CREATE INDEX)的中间结果。这通常比普通的工作内存大。 -- **WAL缓冲区/WAL Buffers**: 用于存储即将写入 WAL(Write-Ahead Logging)的日志记录。这确保了在数据被写入磁盘之前,所有的修改都会先被记录在 WAL 中。 +- **WAL 缓冲区/WAL Buffers**: 用于存储即将写入 WAL(Write-Ahead Logging)的日志记录。这确保了在数据被写入磁盘之前,所有的修改都会先被记录在 WAL 中。 - **本地缓冲区/Local Buffers**: 用于存储临时表的数据。与共享缓冲区不同,本地缓冲区是每个后端进程私有的。 - **消息层/Message Layer**: 负责处理后端进程之间的消息传递,如锁通知和进程间通信。 -- **CLOG缓冲区/CLOG Buffers**: CLOG (Commit Log) 用于存储事务的提交状态。每个事务都有一个对应的 CLOG 记录,指示它是已提交、未提交还是中止。 -- **TOAST缓冲区/TOAST Buffers**: TOAST (The Oversized-Attribute Storage Technique) 是 PostgreSQL 用于存储大型数据的机制。当一个数据项太大而不能直接存储在常规的数据页中时,它会被“toast”到一个特殊的 TOAST 表中,并在原表中保留一个指针。TOAST 缓冲区用于缓存这些大型数据项。 +- **CLOG 缓冲区/CLOG Buffers**: CLOG (Commit Log) 用于存储事务的提交状态。每个事务都有一个对应的 CLOG 记录,指示它是已提交、未提交还是中止。 +- **TOAST 缓冲区/TOAST Buffers**: TOAST (The Oversized-Attribute Storage Technique) 是 PostgreSQL 用于存储大型数据的机制。当一个数据项太大而不能直接存储在常规的数据页中时,它会被“toast”到一个特殊的 TOAST 表中,并在原表中保留一个指针。TOAST 缓冲区用于缓存这些大型数据项。 ### 逻辑存储结构 @@ -491,9 +491,9 @@ graph TD **多用户模式是 PostgreSQL 的常规运行模式**,它允许多个用户(或多个应用)同时访问和操作数据库。这就像一个图书馆在正常营业时间对所有读者开放,每个人都可以自由地浏览书籍和使用资源,同时图书馆的管理员会确保所有的操作都是有序和高效的。在这种模式下,数据库服务器必须处理并发访问,确保数据的完整性和一致性,并提供事务管理功能。 -### 主-从复制模式 +### 主 - 从复制模式 -在主-从复制模式下,有一个主数据库(主图书馆)和一个或多个从数据库(分支图书馆)。**主数据库负责处理所有的写操作(如添加新书籍),而从数据库则是主数据库的只读副本,用于处理读操作(如查询书籍)。**从数据库会定期从主数据库同步数据,以保证数据的一致性。这样可以提高系统的读取性能和可用性。此外,这种模式还为数据备份和灾难恢复提供了额外的保障,因为从数据库可以作为备份数据源。 +在主 - 从复制模式下,有一个主数据库(主图书馆)和一个或多个从数据库(分支图书馆)。**主数据库负责处理所有的写操作(如添加新书籍),而从数据库则是主数据库的只读副本,用于处理读操作(如查询书籍)。**从数据库会定期从主数据库同步数据,以保证数据的一致性。这样可以提高系统的读取性能和可用性。此外,这种模式还为数据备份和灾难恢复提供了额外的保障,因为从数据库可以作为备份数据源。 ### 集群模式 diff --git a/wiki/database-system/PostgreSQL/安装配置.md b/Tech/database-system/PostgreSQL/安装配置.md similarity index 91% rename from wiki/database-system/PostgreSQL/安装配置.md rename to Tech/database-system/PostgreSQL/安装配置.md index 8eec3175..a0518c7b 100644 --- a/wiki/database-system/PostgreSQL/安装配置.md +++ b/Tech/database-system/PostgreSQL/安装配置.md @@ -5,7 +5,7 @@ keywords: - Postgresql - 安装配置 tags: - - Postgresql + - 数据库系统/PostgreSQL sidebar_position: 3 author: 7Wate date: 2023-09-20 @@ -170,7 +170,7 @@ postgresql 目录下文件夹其对应的用途。 #### 2. 下载源码 -PostgreSQL 源码可以在官方提供的 [FTP 渠道](https://www.postgresql.org/ftp/source/)下载。 +PostgreSQL 源码可以在官方提供的 [FTP 渠道](https://www.postgresql.org/ftp/source/) 下载。 ![PostgreSQL 源码](https://static.7wate.com/img/2023/09/22/7f25aaababea4.png) @@ -211,7 +211,7 @@ postgres@debian:/opt/postgresql/source/postgresql-16.0$ ./configure --prefix=/op | 选项 | 描述 | | :--------------------- | :----------------------------------------------------------- | | `--prefix=<目录>` | 指定安装目录的前缀,即 PostgreSQL 将被安装到的基本目录。 | -| `--bindir=<目录>` | 指定可执行文件的目录,例如 `pg_ctl`和 `psql`。 | +| `--bindir=<目录>` | 指定可执行文件的目录,例如 `pg_ctl` 和 `psql`。 | | `--sbindir=<目录>` | 指定系统管理员可执行文件的目录,例如 `pg_ctl` 和 `pg_config`。 | | `--datadir=<目录>` | 指定数据文件的根目录,例如数据表空间。 | | `--libdir=<目录>` | 指定库文件的目录,例如共享库文件。 | @@ -345,7 +345,7 @@ sudo yum install postgresql-server --prefix=/usr/local/pgsql --datadir=/usr/loca | `--sharedstatedir=DIR` | 定义可修改的单主机数据的安装目录 | | `--localstatedir=DIR` | 定义可修改的多主机数据的安装目录 | | `--libexecdir=DIR` | 定义可执行程序和其他程序运行的安装目录 | -| `--includedir=DIR` | 定义C头文件的安装目录 | +| `--includedir=DIR` | 定义 C 头文件的安装目录 | | `--mandir=DIR` | 定义 man 文档的安装目录 | | `--docdir=DIR` | 定义文档的根目录 | @@ -418,7 +418,7 @@ source ~/.bash_profile ## 使用 -### psql 命令 +### Psql 命令 | 内置命令 | 作用描述 | | --------------- | ------------------------------------------------ | @@ -465,44 +465,44 @@ PostgreSQL 的主配置文件,可以在这里设置各种参数,如内存使 | `port` | 定义服务器监听的端口 | `port = 5432` | | `max_connections` | 最大并发连接数 | `max_connections = 100` | | `superuser_reserved_connections` | 为超级用户保留的连接数 | `superuser_reserved_connections = 3` | -| `unix_socket_directories` | Unix域套接字的目录 | `unix_socket_directories = '/var/run/postgresql'` | +| `unix_socket_directories` | Unix 域套接字的目录 | `unix_socket_directories = '/var/run/postgresql'` | | **认证和安全** | | | -| `ssl` | 是否启用SSL | `ssl = on` | -| `ssl_cert_file` | SSL证书文件的位置 | `ssl_cert_file = '/path/to/server.crt'` | -| `ssl_key_file` | SSL私钥文件的位置 | `ssl_key_file = '/path/to/server.key'` | +| `ssl` | 是否启用 SSL | `ssl = on` | +| `ssl_cert_file` | SSL 证书文件的位置 | `ssl_cert_file = '/path/to/server.crt'` | +| `ssl_key_file` | SSL 私钥文件的位置 | `ssl_key_file = '/path/to/server.key'` | | `password_encryption` | 密码加密方式 | `password_encryption = scram-sha-256` | | `hba_file` | `pg_hba.conf` 文件的位置 | `hba_file = '/path/to/pg_hba.conf'` | | **内存使用** | | | | `shared_buffers` | 用于缓存的内存大小 | `shared_buffers = 128MB` | | `work_mem` | 查询操作可以使用的内存量 | `work_mem = 4MB` | -| `maintenance_work_mem` | 维护操作(如VACUUM)可以使用的内存量 | `maintenance_work_mem = 64MB` | +| `maintenance_work_mem` | 维护操作(如 VACUUM)可以使用的内存量 | `maintenance_work_mem = 64MB` | | `effective_cache_size` | 估计的操作系统缓存大小 | `effective_cache_size = 512MB` | | **查询调优** | | | | `seq_page_cost` | 顺序磁盘页的成本 | `seq_page_cost = 1.0` | | `random_page_cost` | 随机磁盘页的成本 | `random_page_cost = 4.0` | -| `cpu_tuple_cost` | 处理每个元组的CPU成本 | `cpu_tuple_cost = 0.01` | -| `cpu_index_tuple_cost` | 处理每个索引元组的CPU成本 | `cpu_index_tuple_cost = 0.005` | -| `cpu_operator_cost` | 执行操作符的CPU成本 | `cpu_operator_cost = 0.0025` | +| `cpu_tuple_cost` | 处理每个元组的 CPU 成本 | `cpu_tuple_cost = 0.01` | +| `cpu_index_tuple_cost` | 处理每个索引元组的 CPU 成本 | `cpu_index_tuple_cost = 0.005` | +| `cpu_operator_cost` | 执行操作符的 CPU 成本 | `cpu_operator_cost = 0.0025` | | **日志记录** | | | | `logging_collector` | 是否启用日志收集 | `logging_collector = on` | | `log_directory` | 日志文件的存储目录 | `log_directory = 'pg_log'` | | `log_filename` | 日志文件的命名方式 | `log_filename = 'postgresql.log'` | -| `log_statement` | 记录的SQL语句类型(例如所有语句或只有DDL) | `log_statement = 'all'` | +| `log_statement` | 记录的 SQL 语句类型(例如所有语句或只有 DDL) | `log_statement = 'all'` | | `log_duration` | 是否记录语句的执行时间 | `log_duration = on` | | `log_min_duration_statement` | 记录执行时间超过指定毫秒数的语句 | `log_min_duration_statement = 500` | | **运行时统计** | | | | `track_activities` | 是否跟踪服务器进程的活动 | `track_activities = on` | | `track_counts` | 是否跟踪访问统计信息 | `track_counts = on` | -| `track_io_timing` | 是否跟踪I/O计时信息 | `track_io_timing = on` | +| `track_io_timing` | 是否跟踪 I/O 计时信息 | `track_io_timing = on` | | `stats_temp_directory` | 临时统计数据的目录 | `stats_temp_directory = 'pg_stat_tmp'` | | **锁定** | | | | `deadlock_timeout` | 死锁检测的超时时间 | `deadlock_timeout = 1s` | | `max_locks_per_transaction` | 每个事务可以持有的最大锁数 | `max_locks_per_transaction = 64` | | **自动 VACUUM** | | | -| `autovacuum` | 是否启用自动VACUUM | `autovacuum = on` | -| `autovacuum_vacuum_scale_factor` | 触发自动VACUUM的脏数据比例 | `autovacuum_vacuum_scale_factor = 0.2` | -| `autovacuum_analyze_scale_factor` | 触发自动ANALYZE的脏数据比例 | `autovacuum_analyze_scale_factor = 0.1` | -| `autovacuum_vacuum_cost_limit` | 自动VACUUM操作的成本限制 | `autovacuum_vacuum_cost_limit = 200` | +| `autovacuum` | 是否启用自动 VACUUM | `autovacuum = on` | +| `autovacuum_vacuum_scale_factor` | 触发自动 VACUUM 的脏数据比例 | `autovacuum_vacuum_scale_factor = 0.2` | +| `autovacuum_analyze_scale_factor` | 触发自动 ANALYZE 的脏数据比例 | `autovacuum_analyze_scale_factor = 0.1` | +| `autovacuum_vacuum_cost_limit` | 自动 VACUUM 操作的成本限制 | `autovacuum_vacuum_cost_limit = 200` | | **客户端连接默认值** | | | | `DateStyle` | 默认的日期格式 | `DateStyle = 'ISO, MDY'` | | `TimeZone` | 默认的时区 | `TimeZone = 'UTC'` | @@ -521,18 +521,18 @@ PostgreSQL 的主配置文件,可以在这里设置各种参数,如内存使 | 类型 | 数据库 | 用户 | 地址 | 认证方法 | 说明 | | ----------- | ------ | -------- | ---------------- | -------- | -------------------------------------------- | | `local` | `all` | `all` | | `trust` | 本地所有用户对所有数据库的连接不需要密码 | -| `host` | `all` | `all` | `127.0.0.1/32` | `md5` | 从本地通过TCP/IP连接的所有用户需要密码 | +| `host` | `all` | `all` | `127.0.0.1/32` | `md5` | 从本地通过 TCP/IP 连接的所有用户需要密码 | | `host` | `mydb` | `myuser` | `192.168.1.0/24` | `md5` | 从指定网络连接到指定数据库的指定用户需要密码 | -| `hostssl` | `all` | `all` | `0.0.0.0/0` | `md5` | 从任何地址通过SSL连接的所有用户需要密码 | -| `hostnossl` | `all` | `all` | `0.0.0.0/0` | `reject` | 拒绝非SSL连接 | +| `hostssl` | `all` | `all` | `0.0.0.0/0` | `md5` | 从任何地址通过 SSL 连接的所有用户需要密码 | +| `hostnossl` | `all` | `all` | `0.0.0.0/0` | `reject` | 拒绝非 SSL 连接 | -- **类型**:连接类型。常见的有 `local`(Unix域套接字)、`host`(TCP/IP套接字)、`hostssl`(仅限SSL的TCP/IP连接)和 `hostnossl`(不使用SSL的TCP/IP连接)。 +- **类型**:连接类型。常见的有 `local`(Unix 域套接字)、`host`(TCP/IP 套接字)、`hostssl`(仅限 SSL 的 TCP/IP 连接)和 `hostnossl`(不使用 SSL 的 TCP/IP 连接)。 - **数据库**:适用的数据库名。`all` 表示所有数据库。 - **用户**:适用的用户名。`all` 表示所有用户。 -- **地址**:客户端的 IP 地址。对于 `local` 类型,这一列是空的。对于 `host` 类型,这是一个CIDR地址或一个IP地址和一个掩码。 +- **地址**:客户端的 IP 地址。对于 `local` 类型,这一列是空的。对于 `host` 类型,这是一个 CIDR 地址或一个 IP 地址和一个掩码。 - **认证方法**:常见的有 `trust`(不需要密码)、`reject`(拒绝连接)、`md5`(密码认证)、`password`(明文密码)等。 -`pg_hba.conf` 文件的每一行都是一个连接规则,PostgreSQL会按照文件中的顺序评估这些规则,直到找到一个匹配的规则为止。因此,顺序很重要,特别是当有多个规则可能匹配同一个连接时。 +`pg_hba.conf` 文件的每一行都是一个连接规则,PostgreSQL 会按照文件中的顺序评估这些规则,直到找到一个匹配的规则为止。因此,顺序很重要,特别是当有多个规则可能匹配同一个连接时。 ### 3. 启动数据库 @@ -553,7 +553,7 @@ postgres -D /path/to/data/directory psql -U postgres -c "SELECT version();" ``` -### 5. 配置 systemctl 服务 +### 5. 配置 Systemctl 服务 1. 关闭 postgresql 数据库。 2. 创建一个 Systemd 服务文件,通常位于 `/etc/systemd/system/postgresql.service`。 @@ -583,9 +583,9 @@ TimeoutSec=30 WantedBy=multi-user.target ``` -4. 重新加载 Systemd 配置:`sudo systemctl daemon-reload` -5. 启动服务:`sudo systemctl start postgresql` -6. 设置开机启动:`sudo systemctl enable postgresql` +1. 重新加载 Systemd 配置:`sudo systemctl daemon-reload` +2. 启动服务:`sudo systemctl start postgresql` +3. 设置开机启动:`sudo systemctl enable postgresql` ### 6. 创建用户和数据库 @@ -622,7 +622,7 @@ sudo -u postgres psql -c "ALTER USER WITH PASSWORD '';" #### `pg_dump` 备份 -`pg_dump` 是用于备份 PostgreSQL 数据库的工具。它可以生成包含数据库内容的SQL脚本文件或其他格式,如 tar 和 custom。使用以下命令进行全量备份: +`pg_dump` 是用于备份 PostgreSQL 数据库的工具。它可以生成包含数据库内容的 SQL 脚本文件或其他格式,如 tar 和 custom。使用以下命令进行全量备份: ```shell pg_dump -U -h -p -F c -b > backup.dump @@ -677,6 +677,7 @@ pg_restore -U -h -p -d backup.dump 3. **替换二进制文件**: 下载并安装 PostgreSQL 15.4 的二进制文件。 + 4. **重启 PostgreSQL 服务**: 使用 `pg_ctl start` 或您的系统的服务管理工具重新启动 PostgreSQL 服务。 @@ -706,9 +707,11 @@ pg_restore -U -h -p -d backup.dump 2. **检查兼容性**: 检查新版本的 PostgreSQL 文档以确保您的应用程序和数据库架构与新版本兼容。 + 3. **安装新版本的 PostgreSQL**: 在同一系统上安装新版本的 PostgreSQL,但不要覆盖旧版本。 + 4. **使用 pg_upgrade 或逻辑备份和恢复**: 使用 `pg_upgrade` 工具快速升级。 @@ -724,12 +727,15 @@ pg_restore -U -h -p -d backup.dump 5. **测试新集群**: 在新集群上运行测试以确保它按预期工作。 + 6. **切换到新集群**: 一旦满意,可以切换到新集群并更新任何连接字符串和配置。 + 7. **监控性能和错误**: 在升级后监控系统性能和错误,以确保一切正常。 + 8. **(可选)删除旧集群**: 确保新集群运行正常后,可以选择删除旧集群以释放空间。 diff --git a/wiki/database-system/PostgreSQL/简介.md b/Tech/database-system/PostgreSQL/简介.md similarity index 99% rename from wiki/database-system/PostgreSQL/简介.md rename to Tech/database-system/PostgreSQL/简介.md index d763ed30..2e160c30 100644 --- a/wiki/database-system/PostgreSQL/简介.md +++ b/Tech/database-system/PostgreSQL/简介.md @@ -5,7 +5,7 @@ keywords: - Postgresql - 简介 tags: - - Postgresql + - 数据库系统/PostgreSQL sidebar_position: 1 author: 7Wate date: 2023-09-11 @@ -29,7 +29,7 @@ PostgreSQL 的发展历程反映了其对技术创新和社区驱动的承诺: - **PostgreSQL 10.x (2017)**:这个版本开始,PostgreSQL 的版本号发生了变化,主要版本号只增加第一个数字。例如,从 9.6 直接跳到了 10。 - **PostgreSQL 11.x (2018)**:此版本进一步增强了分区表的功能,并引入了并行执行的存储过程。 - **PostgreSQL 12.x (2019)**:引入了对 SQL/JSON 路径语言的支持,提供了更好的索引和分区。 -- **PostgreSQL 13.x (2020)**:增加了并行化的增量排序和聚合功能,以及对 B树索引的改进。 +- **PostgreSQL 13.x (2020)**:增加了并行化的增量排序和聚合功能,以及对 B 树索引的改进。 - **PostgreSQL 14.x (2021)**:此版本带来了对长事务的性能改进,以及对复制和分区的增强。 - **PostgreSQL 15.x (2022)**:发布于 2022 年 10 月 13 日,带来了一系列的新特性和改进。 - **PostgreSQL 16.x (2023)**:计划于 2023 年 9 月 14 日发布,目前已经发布了 RC1 版本。 diff --git a/wiki/database-system/SQL 语言/基础语法.md b/Tech/database-system/SQL 语言/基础语法.md similarity index 97% rename from wiki/database-system/SQL 语言/基础语法.md rename to Tech/database-system/SQL 语言/基础语法.md index 1c83b801..71896665 100644 --- a/wiki/database-system/SQL 语言/基础语法.md +++ b/Tech/database-system/SQL 语言/基础语法.md @@ -2,16 +2,15 @@ title: 基础语法 description: SQL 基础语法 keywords: -- SQL -- 基础语法 + - SQL + - 基础语法 tags: -- SQL + - 数据库系统/SQL sidebar_position: 1 author: 7Wate date: 2023-08-18 --- - ## 概述 SQL(Structured Query Language)是一种用于管理关系型数据库的强大语言。它的历史可以追溯到 1970 年,当时 IBM 的研究员 Edgar F. Codd 发表了论文 A Relational Model of Data for Large Shared Data Banks 中首次提出。最初,SQL 被称为 SEQUEL(Structured English Query Language),后来被简化为 SQL。 @@ -293,16 +292,16 @@ SELECT * FROM Users LIMIT 10 OFFSET 5; -- 查询第6至第15条用户记录 1. **查询速度**:索引大大提高了查询速度,减少了数据库的查询时间。 2. **数据检索效率**:有了索引,数据的检索变得更加高效。 -3. **加速表连接**:在进行JOIN操作时,如果涉及到的字段已经被索引,该操作会更加迅速。 +3. **加速表连接**:在进行 JOIN 操作时,如果涉及到的字段已经被索引,该操作会更加迅速。 **缺点**: 1. **占用空间**:索引虽然可以提高查询速度,但也占据了额外的磁盘空间。 2. **维护成本**:每当有数据插入、更新或删除时,索引也需要进行相应的更新,这可能导致这些操作的速度变慢。 -在实际操作中,**索引的使用主要是为了优化查询效率**。当数据表中的数据量较大,或需要频繁查询特定列数据时,使用索引是明智的。那些经常需要排序的列或在`WHERE`子句中经常被查询的列,建议创建索引。 +在实际操作中,**索引的使用主要是为了优化查询效率**。当数据表中的数据量较大,或需要频繁查询特定列数据时,使用索引是明智的。那些经常需要排序的列或在 `WHERE` 子句中经常被查询的列,建议创建索引。 -然而,对于数据量较小的表,或数据在某列上有大量重复值的表,以及对于经常进行大量的INSERT、UPDATE和DELETE操作的表,过多的索引可能并不合适,因为维护索引会带来额外的开销。 +然而,对于数据量较小的表,或数据在某列上有大量重复值的表,以及对于经常进行大量的 INSERT、UPDATE 和 DELETE 操作的表,过多的索引可能并不合适,因为维护索引会带来额外的开销。 ### 创建索引 @@ -474,7 +473,7 @@ REVOKE SELECT, INSERT ON database_name.table_name FROM 'username'@'hostname'; ## SQL 函数 -SQL 函数提供了处理数据的方便方法,允许我们在查询过程中对数据进行操作和转换。以下是一些常见的SQL函数分类及其示例。 +SQL 函数提供了处理数据的方便方法,允许我们在查询过程中对数据进行操作和转换。以下是一些常见的 SQL 函数分类及其示例。 ### 字符串函数 diff --git a/wiki/database-system/基础/关系型数据库.md b/Tech/database-system/基础/关系型数据库.md similarity index 89% rename from wiki/database-system/基础/关系型数据库.md rename to Tech/database-system/基础/关系型数据库.md index 2dff6841..86f7b128 100644 --- a/wiki/database-system/基础/关系型数据库.md +++ b/Tech/database-system/基础/关系型数据库.md @@ -2,9 +2,9 @@ title: 关系型数据库 description: 关系型数据库概述 keywords: -- 关系型数据库 + - 关系型数据库 tags: -- 数据库 + - 数据库系统/关系型数据库 sidebar_position: 2 author: 7Wate date: 2023-08-17 @@ -47,7 +47,7 @@ date: 2023-08-17 ## ER 模型 -**ER 模型(实体-关系模型)用于描述现实世界的关系。**这个模型以图形的形式表示数据的结构,有助于理解和构建复杂的数据结构。让我们通过一个实例来详细了解ER模型的各个组成部分。 +**ER 模型(实体 - 关系模型)用于描述现实世界的关系。**这个模型以图形的形式表示数据的结构,有助于理解和构建复杂的数据结构。让我们通过一个实例来详细了解 ER 模型的各个组成部分。 ```mermaid erDiagram @@ -104,14 +104,14 @@ erDiagram 例如,如果我们有一个存储学生和他们选修课程的表格: -| 学生ID | 姓名 | 选修课程 | +| 学生 ID | 姓名 | 选修课程 | | ------ | ---- | ---------- | | 1001 | 张三 | 数学, 物理 | | 1002 | 李四 | 英语, 数学 | 这就违反了第一范式,因为选修课程列包含了多个值。要修正这种情况,可以将每个选修课程拆分成单独的行: -| 学生ID | 姓名 | 选修课程 | +| 学生 ID | 姓名 | 选修课程 | | ------ | ---- | -------- | | 1001 | 张三 | 数学 | | 1001 | 张三 | 物理 | @@ -126,20 +126,20 @@ erDiagram **订单表:** -| 订单ID (PK) | 顾客ID | 订单日期 | +| 订单 ID (PK) | 顾客 ID | 订单日期 | | ----------- | ------ | ---------- | | 001 | 1001 | 2023-08-01 | | 002 | 1002 | 2023-08-02 | **订单项表:** -| 订单ID (PK, FK) | 产品ID (PK) | 数量 | +| 订单 ID (PK, FK) | 产品 ID (PK) | 数量 | | --------------- | ----------- | ---- | | 001 | 101 | 2 | | 001 | 102 | 1 | | 002 | 101 | 3 | -在这里,虽然订单表满足第一范式,但订单项表中的数量列部分依赖于订单ID,而订单ID是主键的一部分。为了满足第二范式,我们可以将订单项表分为两个表格,一个是订单表,一个是订单项表。 +在这里,虽然订单表满足第一范式,但订单项表中的数量列部分依赖于订单 ID,而订单 ID 是主键的一部分。为了满足第二范式,我们可以将订单项表分为两个表格,一个是订单表,一个是订单项表。 ### 第三范式(3NF) @@ -149,24 +149,24 @@ erDiagram **学生课程表:** -| 学生ID (PK) | 课程ID (PK) | 学分 | 课程名称 | +| 学生 ID (PK) | 课程 ID (PK) | 学分 | 课程名称 | | ----------- | ----------- | ---- | -------- | | 1001 | 101 | 3 | 数学 | | 1001 | 102 | 4 | 物理 | | 1002 | 101 | 3 | 数学 | -在这里,课程名称是根据课程ID直接得出的,因此存在传递依赖。为了满足第三范式,可以将课程名称拆分到一个独立的课程表中: +在这里,课程名称是根据课程 ID 直接得出的,因此存在传递依赖。为了满足第三范式,可以将课程名称拆分到一个独立的课程表中: **课程表:** -| 课程ID (PK) | 课程名称 | +| 课程 ID (PK) | 课程名称 | | ----------- | -------- | | 101 | 数学 | | 102 | 物理 | **学生课程表:** -| 学生ID (PK) | 课程ID (PK) | 学分 | +| 学生 ID (PK) | 课程 ID (PK) | 学分 | | ----------- | ----------- | ---- | | 1001 | 101 | 3 | | 1001 | 102 | 4 | diff --git a/wiki/database-system/基础/数据库概述.md b/Tech/database-system/基础/数据库概述.md similarity index 91% rename from wiki/database-system/基础/数据库概述.md rename to Tech/database-system/基础/数据库概述.md index 48f0a3b1..7137dbf6 100644 --- a/wiki/database-system/基础/数据库概述.md +++ b/Tech/database-system/基础/数据库概述.md @@ -2,17 +2,16 @@ title: 数据库概述 description: 数据库基础理论概述 keywords: -- 数据库 -- 基础理论 -- 概述 + - 数据库 + - 基础理论 + - 概述 tags: -- 数据库 + - 数据库系统 sidebar_position: 1 author: 7Wate date: 2023-08-17 --- - ## 概述 ### 数据库是什么 @@ -28,23 +27,23 @@ date: 2023-08-17 ## 历史发展 -### 1960年代:计算机化数据库的开始 +### 1960 年代:计算机化数据库的开始 在 1960 年代,随着计算机价格的下降,私人组织开始将数据存储和数据库转移到计算机上。CODASYL 网络模型和 IMS 层次模型成为流行的数据模型。IBM 的 SABRE 系统用于帮助美国航空管理预订数据,成为商业上的成功案例。 -### 1970年代:关系型数据库的引入 +### 1970 年代:关系型数据库的引入 -E.F. Codd 的关系数据库理论改变了人们对数据库的看法。他的模型将数据库的逻辑组织与物理信息存储分离,成为数据库系统的标准原则。Ingres 和 System R 是这一时期的主要关系数据库系统原型。实体-关系(ER)模型也在 1976 年被提出,使设计人员能够专注于数据应用。 +E.F. Codd 的关系数据库理论改变了人们对数据库的看法。他的模型将数据库的逻辑组织与物理信息存储分离,成为数据库系统的标准原则。Ingres 和 System R 是这一时期的主要关系数据库系统原型。实体 - 关系(ER)模型也在 1976 年被提出,使设计人员能够专注于数据应用。 -### 1980年代:SQL成为标准查询语言 +### 1980 年代:SQL 成为标准查询语言 1986 年,SQL 成为美国国家标准化协会选择的标准查询语言。关系数据库系统在商业上取得了成功,如 IBM 的 DB2 成为旗舰数据库产品。许多新的数据库公司成立,开发了如 PARADOX、RBASE 5000 等产品。 -### 1990年代:数据库技术的多元化发展 +### 1990 年代:数据库技术的多元化发展 1990 年代,数据库和数据库软件取得了重要进展。新的客户端开发工具如 Oracle Developer、PowerBuilder、VB 等被发布。物联网的出现导致数据库行业的指数增长。到了 90 年代末,对互联网数据库连接器如 Front Page、Active Server Pages 等的需求增加。 -### 2000年代:NoSQL数据库的开始和持续增长 +### 2000 年代:NoSQL 数据库的开始和持续增长 2000 年代初,尽管互联网行业经历了衰退,但数据库应用继续增长。NoSQL 术语首次在 1998 年由 Carlo Strozzi 提出,但直到 2009 年才重新进入行业词汇。新的交互式应用为 PDAs、销售点交易等开发。 @@ -66,10 +65,10 @@ E.F. Codd 的关系数据库理论改变了人们对数据库的看法。他的 常见的关系型数据库: -- **Postgres**:开源的对象-关系型数据库系统,提供了许多先进功能。 +- **Postgres**:开源的对象 - 关系型数据库系统,提供了许多先进功能。 - **MySQL**:流行的开源数据库,适用于网站和在线应用。 - **Oracle**:企业级数据库,提供了高性能、可靠性和安全性。 -- **SQL Server**:微软推出的数据库解决方案,适合于Windows环境。 +- **SQL Server**:微软推出的数据库解决方案,适合于 Windows 环境。 ### 非关系型数据库 @@ -108,7 +107,7 @@ E.F. Codd 的关系数据库理论改变了人们对数据库的看法。他的 ### 市场趋势 -开源数据库在功能、管理工具和可用DBA技能方面的增长,结合商业数据库产品源代码的高成本和复杂的许可协议,使开源产品成为越来越有吸引力的替代方案。 +开源数据库在功能、管理工具和可用 DBA 技能方面的增长,结合商业数据库产品源代码的高成本和复杂的许可协议,使开源产品成为越来越有吸引力的替代方案。 开源和商业数据库各有优势和劣势。开源解决方案提供了成本效益和灵活性,而商业解决方案则提供了全面的功能和专业支持。组织在选择数据库解决方案时应考虑其特定需求、预算和战略目标。 diff --git a/wiki/database-system/基础/非关系型数据库.md b/Tech/database-system/基础/非关系型数据库.md similarity index 85% rename from wiki/database-system/基础/非关系型数据库.md rename to Tech/database-system/基础/非关系型数据库.md index b2c9800c..cb8b3104 100644 --- a/wiki/database-system/基础/非关系型数据库.md +++ b/Tech/database-system/基础/非关系型数据库.md @@ -2,9 +2,9 @@ title: 非关系型数据库 description: 非关系型数据库 keywords: -- 非关系型数据库 + - 非关系型数据库 tags: -- 数据库 + - 数据库系统/非关系型数据库 sidebar_position: 3 author: 7Wate date: 2023-08-17 @@ -26,12 +26,12 @@ date: 2023-08-17 | 特性 | 关系型数据库 | 非关系型数据库 | | -------------- | -------------------------------- | -------------------------------------------- | | **数据结构** | 固定的表结构,每个表有预定义的列 | 灵活的数据结构,可以存储不同格式的数据 | -| **查询语言** | 使用SQL作为标准查询语言 | 可使用各种专用查询语言或API | +| **查询语言** | 使用 SQL 作为标准查询语言 | 可使用各种专用查询语言或 API | | **扩展性** | 主要支持垂直扩展 | 更容易水平扩展,适合大数据和高并发场景 | -| **一致性** | 强一致性,支持ACID事务 | 可能牺牲一些一致性,以换取更高的性能和可用性 | +| **一致性** | 强一致性,支持 ACID 事务 | 可能牺牲一些一致性,以换取更高的性能和可用性 | | **性能** | 适合复杂查询和事务处理 | 在读写密集和大数据场景下可能提供更高性能 | | **用途** | 通用数据存储和管理 | 特定用途,如大数据分析、实时应用、缓存等 | -| **典型数据库** | MySQL, PostgreSQL, Oracle等 | MongoDB, Redis, Cassandra等 | +| **典型数据库** | MySQL, PostgreSQL, Oracle 等 | MongoDB, Redis, Cassandra 等 | 非关系型数据库广泛应用于大数据分析、实时应用、缓存、分布式系统等领域。由于其灵活的数据结构和高性能的读写能力,**非关系型数据库特别适合需要快速读写和灵活数据结构的场景**,如社交网络、电商、物联网等。 @@ -54,7 +54,7 @@ date: 2023-08-17 | ------------------- | ------------------------------------ | ------------------------------ | ------------------------------------ | | **Redis** | 高性能、支持多种数据结构、可用于缓存 | 内存消耗较高、持久化配置较复杂 | 实时分析、缓存、排行榜等 | | **Riak** | 高可扩展性、容错能力强 | 查询功能有限、配置复杂 | 分布式应用、大数据处理 | -| **Amazon DynamoDB** | 完全托管、易于扩展、与AWS集成良好 | 成本可能较高、灵活性可能较低 | 云原生应用、移动应用、大规模实时分析 | +| **Amazon DynamoDB** | 完全托管、易于扩展、与 AWS 集成良好 | 成本可能较高、灵活性可能较低 | 云原生应用、移动应用、大规模实时分析 | ### 适用场景 @@ -82,8 +82,8 @@ date: 2023-08-17 | 数据库 | 优点 | 缺点 | 适用场景 | | ----------- | ----------------------------------------------------- | ---------------------------------- | ------------------------------------ | | **MongoDB** | 灵活的数据模型、高可扩展性、支持地理空间查询 | 写入吞吐量可能受限、事务支持较弱 | 大数据分析、实时应用、物联网数据存储 | -| **CouchDB** | 多版本并发控制(MVCC)、强大的MapReduce支持、高可用性 | 查询性能可能较低、不支持复杂的事务 | 分布式系统、移动应用数据同步 | -| **RavenDB** | 支持ACID事务、强大的索引和查询能力、易于使用和管理 | 社区支持较弱、商业许可可能昂贵 | 企业应用、金融服务、健康医疗数据管理 | +| **CouchDB** | 多版本并发控制(MVCC)、强大的 MapReduce 支持、高可用性 | 查询性能可能较低、不支持复杂的事务 | 分布式系统、移动应用数据同步 | +| **RavenDB** | 支持 ACID 事务、强大的索引和查询能力、易于使用和管理 | 社区支持较弱、商业许可可能昂贵 | 企业应用、金融服务、健康医疗数据管理 | ### 适用场景 @@ -113,8 +113,8 @@ date: 2023-08-17 | 数据库 | 优点 | 缺点 | 适用场景 | | --------------- | ---------------------------------------------- | -------------------- | ------------------------------ | | **InfluxDB** | 高写入吞吐量、强大的查询语言、易于使用 | 高并发下性能可能受限 | 监控、实时分析、物联网 | -| **Prometheus** | 高可用、与Kubernetes良好集成、丰富的可视化选项 | 长时间存储能力较弱 | 系统监控、应用性能监控 | -| **TimescaleDB** | 基于PostgreSQL、SQL兼容、可用现有工具和知识 | 资源消耗可能较高 | 金融分析、工业自动化、科学研究 | +| **Prometheus** | 高可用、与 Kubernetes 良好集成、丰富的可视化选项 | 长时间存储能力较弱 | 系统监控、应用性能监控 | +| **TimescaleDB** | 基于 PostgreSQL、SQL 兼容、可用现有工具和知识 | 资源消耗可能较高 | 金融分析、工业自动化、科学研究 | ### 适用场景 @@ -144,7 +144,7 @@ date: 2023-08-17 | ------------------ | ------------------------------------------ | ---------------------------- | -------------------------------- | | **Neo4j** | 丰富的图查询语言、强大的社区支持、易于使用 | 大规模分布式支持有限 | 社交网络分析、推荐系统、欺诈检测 | | **OrientDB** | 支持多模型(图、文档)、高性能、可扩展 | 社区支持较弱 | 多关系数据分析、实时应用 | -| **Amazon Neptune** | 完全托管、高可用、与AWS集成良好 | 成本可能较高、自定义选项较少 | 云原生应用、知识图谱、网络分析 | +| **Amazon Neptune** | 完全托管、高可用、与 AWS 集成良好 | 成本可能较高、自定义选项较少 | 云原生应用、知识图谱、网络分析 | ### 适用场景 @@ -170,13 +170,13 @@ date: 2023-08-17 | 数据库 | 优点 | 缺点 | 适用场景 | | ------------ | -------------------------------------------- | ------------------------------ | -------------------------- | -| **ObjectDB** | 高性能、易于使用、与JPA完全兼容 | 社区支持有限 | 企业应用、复杂数据模型管理 | +| **ObjectDB** | 高性能、易于使用、与 JPA 完全兼容 | 社区支持有限 | 企业应用、复杂数据模型管理 | | **Versant** | 强大的并发控制、可扩展、长期稳定 | 学习曲线可能较陡峭 | 金融分析、电信网络管理 | | **db4o** | 开源、轻量级、易于集成、适合移动和嵌入式设备 | 没有商业支持、可能存在性能问题 | 嵌入式系统、移动应用 | ### 适用场景 -- **复杂数据模型管理**:例如CAD/CAM系统、科学研究、地理信息系统等需要处理复杂数据结构的应用。 +- **复杂数据模型管理**:例如 CAD/CAM 系统、科学研究、地理信息系统等需要处理复杂数据结构的应用。 - **实时系统**:例如电信、工业自动化等需要快速响应和处理的场景。 - **面向对象开发的企业应用**:对象数据库能够更自然地与面向对象的编程语言和开发模式集成。 @@ -184,7 +184,7 @@ date: 2023-08-17 ## 列族存储数据库 -列族存储数据库是一种NoSQL数据库,其存储模型不是按行组织数据,而是按列组织。这种结构特别适合于具有大量列且读取模式相对固定的数据集,它可以提高数据读取的效率,并允许高效的数据压缩。 +列族存储数据库是一种 NoSQL 数据库,其存储模型不是按行组织数据,而是按列组织。这种结构特别适合于具有大量列且读取模式相对固定的数据集,它可以提高数据读取的效率,并允许高效的数据压缩。 ### 特点 @@ -197,9 +197,9 @@ date: 2023-08-17 | 数据库 | 优点 | 缺点 | 适用场景 | | ------------------- | ------------------------------------ | ------------------------------ | -------------------------------------- | -| **Apache HBase** | 高可扩展、高可用、集成Hadoop生态 | 写入性能较低、管理复杂 | 大数据分析、实时分析、数据仓库 | +| **Apache HBase** | 高可扩展、高可用、集成 Hadoop 生态 | 写入性能较低、管理复杂 | 大数据分析、实时分析、数据仓库 | | **Cassandra** | 高可扩展、高性能读写、支持多数据中心 | 学习曲线陡峭、一致性配置复杂 | 互联网应用、实时大数据分析、分布式系统 | -| **Google Bigtable** | 企业级服务、高性能、完全托管 | 成本可能较高、主要绑定Google云 | 云原生应用、广告技术、物联网数据存储 | +| **Google Bigtable** | 企业级服务、高性能、完全托管 | 成本可能较高、主要绑定 Google 云 | 云原生应用、广告技术、物联网数据存储 | ### 适用场景 diff --git a/wiki/getting-started/Git/入门/分支.md b/Tech/getting-started/Git/入门/分支.md similarity index 99% rename from wiki/getting-started/Git/入门/分支.md rename to Tech/getting-started/Git/入门/分支.md index f0fd7d03..ccc1f4d5 100644 --- a/wiki/getting-started/Git/入门/分支.md +++ b/Tech/getting-started/Git/入门/分支.md @@ -2,10 +2,10 @@ title: 分支 description: Git 分支操作 keywords: -- Git -- 分支 + - Git + - 分支 tags: -- Git + - Git/入门 sidebar_position: 3 author: 7Wate date: 2022-09-13 @@ -256,6 +256,7 @@ git merge experiment ### 更有趣的变基例子 在对两个分支进行变基时,所生成的“重放”并不一定要在目标分支上应用,你也可以指定另外的一个分支进行 + 应用。 你从 master 分支创建了一个 server 分支,添加功能并提交后。又基于提交后的 server 分支创建了 client 分支,同样添加功能并提交后。你回到了 server 分支,继续添加功能并提交。假设你希望将 client 中的修改合并到主分支并发布,但暂时并不想合并 server 中的修改,因为它们还需要经过更全面的测试。 @@ -294,7 +295,7 @@ git merge server 如果你遵循这条金科玉律,就不会出差错。 否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾你。 -### 变基 vs 合并 +### 变基 Vs 合并 至此,你已在实战中学习了变基和合并的用法,你一定会想问,到底哪种方式更好。 在回答这个问题之前,让我们退后一步,想讨论一下提交历史到底意味着什么。 diff --git a/wiki/getting-started/Git/入门/协议.md b/Tech/getting-started/Git/入门/协议.md similarity index 99% rename from wiki/getting-started/Git/入门/协议.md rename to Tech/getting-started/Git/入门/协议.md index f3e9d92f..dab85392 100644 --- a/wiki/getting-started/Git/入门/协议.md +++ b/Tech/getting-started/Git/入门/协议.md @@ -2,10 +2,10 @@ title: 协议 description: Git 常见协议 keywords: -- Git -- 协议 + - Git + - 协议 tags: -- Git + - Git/入门 sidebar_position: 4 author: 7Wate data: 2022年9月13日 @@ -16,7 +16,9 @@ data: 2022年9月13日 架设一台 Git 服务器并不难。如果你不介意托管你的代码在其他人的服务器,且不想经历设置与维护自己服务器的麻烦,可以试试第三方仓库托管服务。 一个远程仓库通常只是一个裸仓库(bare repository)——即一个没有当前工作目录的仓库。 因为该仓库仅仅 + 作为合作媒介,不需要从磁盘检查快照;存放的只有 Git 的资料。 简单的说,裸仓库就是你工程目录内的 .git + 子目录内容,不包含其他资料。 ## Git 协议 @@ -26,7 +28,7 @@ Git 可以使用四种不同的协议来传输资料: - 本地协议(Local) - HTTP 协议 - SSH(Secure Shell)协议 -- Git协议 +- Git 协议 ### 本地协议 @@ -67,6 +69,7 @@ Git 通过 HTTP 通信有两种模式:**智能 HTTP 协议、哑(Dumb) HTT - 优点 用 SSH 协议的优势有很多。 首先,SSH 架设相对简单 —— SSH 守护进程很常见,多数管理员都有使用经验,并 + 且多数操作系统都包含了它及相关的管理工具。 其次,通过 SSH 访问是安全的 —— 所有传输数据都要经过授权和加密。 最后,与 HTTPS 协议、Git 协议及本地协议一样,SSH 协议很高效,在传输前也会尽量压缩数据。 - 缺点 diff --git a/wiki/getting-started/Git/入门/基础.md b/Tech/getting-started/Git/入门/基础.md similarity index 96% rename from wiki/getting-started/Git/入门/基础.md rename to Tech/getting-started/Git/入门/基础.md index 29bf1312..42690677 100644 --- a/wiki/getting-started/Git/入门/基础.md +++ b/Tech/getting-started/Git/入门/基础.md @@ -2,16 +2,16 @@ title: 基础 description: Git 基础操作 keywords: -- Git -- 基础 + - Git + - 基础 tags: -- Git + - Git/入门 sidebar_position: 2 author: 7Wate date: 2022-09-13 --- -本章涵盖了你在使用 Git完成各种工作时将会用到的各种基本命令。 在学习完本章之后,你应该能够配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改。 +本章涵盖了你在使用 Git 完成各种工作时将会用到的各种基本命令。 在学习完本章之后,你应该能够配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改。 本章也将向你演示了如何配置 Git 来忽略指定的文件和文件模式、如何迅速而简单地撤销错误操作、如何浏览你的项目的历史版本以及不同提交(commits)之间的差异、如何向你的远程仓库推送(push)以及如何从你的远程仓库拉取(pull)文件。 @@ -121,7 +121,7 @@ git commit -a ## 查看提交历史 -### git log 的常用选项 +### Git Log 的常用选项 ```shell // 格式化输出一行显示提交历史 @@ -138,10 +138,10 @@ git log --oneline | --abbrev-commit | 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 | | --relative-date | 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 | | --graph | 在日志旁以 ASCII 图形显示分支与合并历史。 | -| --pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和format(用来定义自己的格式)。 | +| --pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。 | | --oneline | --pretty=oneline --abbrev-commit 合用的简写。 | -### git log --pretty=format 常用的选项 +### Git Log --pretty=format 常用的选项 ```shell // format 可以定制记录的显示格式 @@ -166,7 +166,7 @@ git log --pretty=format:"%h - %an, %ar : %s" | %cr | 提交日期(距今多长时间) | | %s | 提交说明 | -### git log 限制输出的选项 +### Git Log 限制输出的选项 | 选项 | 说明 | | ----------------- | ------------------------------------------ | @@ -181,6 +181,7 @@ git log --pretty=format:"%h - %an, %ar : %s" ## 撤消操作 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选 + 项的提交命令来重新提交: ```shell @@ -211,6 +212,7 @@ git checkout -- ## 远程仓库 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。远程仓库是指托管在因特网或其他网络中 + 的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。 @@ -340,6 +342,7 @@ git push origin --delete ## Git 别名 Git 并不会在你输入部分命令时自动推断出你想要的命令。 如果不想每次都输入完整的 Git 命令,可以通过 git + config 文件来轻松地为每一个命令设置一个别名。如下: ```shell diff --git a/wiki/getting-started/Git/入门/起步.md b/Tech/getting-started/Git/入门/起步.md similarity index 98% rename from wiki/getting-started/Git/入门/起步.md rename to Tech/getting-started/Git/入门/起步.md index 75dc14f8..6108cff0 100644 --- a/wiki/getting-started/Git/入门/起步.md +++ b/Tech/getting-started/Git/入门/起步.md @@ -2,10 +2,10 @@ title: 起步 description: Git 起步 keywords: -- Git -- 起步 + - Git + - 起步 tags: -- Git + - Git/入门 sidebar_position: 1 author: 7Wate date: 2022-09-13 @@ -48,7 +48,7 @@ date: 2022-09-13 Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002 年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。 -到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标: +到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标: - **速度** - **简单的设计** diff --git a/wiki/getting-started/Git/进阶/Git-LFS.md b/Tech/getting-started/Git/进阶/Git-LFS.md similarity index 99% rename from wiki/getting-started/Git/进阶/Git-LFS.md rename to Tech/getting-started/Git/进阶/Git-LFS.md index f66ad843..53d74292 100644 --- a/wiki/getting-started/Git/进阶/Git-LFS.md +++ b/Tech/getting-started/Git/进阶/Git-LFS.md @@ -2,10 +2,10 @@ title: Git-LFS description: Git-LFS 扩展 keywords: -- Git -- LFS + - Git + - LFS tags: -- Git + - Git/进阶 sidebar_position: 6 author: 7Wate date: 2022-11-16 @@ -117,4 +117,3 @@ $ git lfs checkout # 正常情况下会随着 git pull/push 一起执行 # 如果在 git pull/push 的过程中断了, 导致二进制文件没有被拉取的时候, 可以使用这些命令(支持断点续传,速度不慢) ``` - diff --git a/wiki/getting-started/Git/进阶/参考手册.md b/Tech/getting-started/Git/进阶/参考手册.md similarity index 88% rename from wiki/getting-started/Git/进阶/参考手册.md rename to Tech/getting-started/Git/进阶/参考手册.md index 91c6fff3..ee45c7d5 100644 --- a/wiki/getting-started/Git/进阶/参考手册.md +++ b/Tech/getting-started/Git/进阶/参考手册.md @@ -2,10 +2,10 @@ title: 参考手册 description: Git 参考手册 keywords: -- Git -- 参考手册 + - Git + - 参考手册 tags: -- Git + - Git/进阶 sidebar_position: 5 author: 7Wate date: 2022-09-13 @@ -18,7 +18,7 @@ date: 2022-09-13 - 初始化一个新的 Git 仓库。 - 克隆一个存在的项目。 -### git init +### Git Init 在命令行当前目录中执行 git init,就可以将当前目录初始化为 Git 仓库。 @@ -32,13 +32,13 @@ $ ls -a . .. .git ``` -### git clone +### Git Clone 如果需要克隆一个存在的项目。,在命令行当前目录中执行 git clone [url],url 为项目地址,然后就可以了。git clone 实际上是一个封装了其他几个命令的命令。 1. 它创建了一个新目录,切换到新的目录。 2. 然后 git init 来初始化一个空的 Git 仓库, 然后为你指定的 URL 添加一个(默认名称为 origin 的)远程仓库。 -3. 再针对远程仓库执行 git fetch,最后通过 git checkout 将远程仓库的最新提交检出到本地的工作目录。 +3. 再针对远程仓库执行 git fetch,最后通过 git checkout 将远程仓库的最新提交检出到本地的工作目录。 ```shell $ git clone git://github.com/schacon/simplegit.git @@ -59,7 +59,7 @@ Git 的工作就是创建和保存项目的快照,及与之后的快照进行 简而言之,使用 git add 添加需要追踪的新文件和待提交的更改, 然后使用 git status 和 git diff 查看有何改动, 最后用 git commit 将你的快照记录。绝大部分时候的基本流程都是这样的。 -### git add +### Git Add 在 Git 中提交修改文件之前,需要将它们添加到缓存。 @@ -70,7 +70,7 @@ $ git add helloworld.cpp $ git add . ``` -### git status +### Git Status 在 Git 中执行 git status 命令,查看代码在缓存与当前工作目录的状态。 @@ -81,7 +81,7 @@ $ git status -s $ git status ``` -### git diff +### Git Diff 在 Git 中使用 git diff 描述已临时提交的或者已修改但尚未提交的改动。 @@ -96,7 +96,7 @@ $ git diff HEAD $ git diff --stat ``` -### git commit +### Git Commit 在 Git 中使用 git add 将内容写入缓存,然后执行 git commit 就将它实际存储快照了。 @@ -139,7 +139,7 @@ $ git commit -am 'changes to hello file' 1 files changed, 2 insertions(+), 1 deletions(-) ``` -### git reset HEAD +### Git Reset HEAD git reset 命令用于回退版本,可以指定退回某一次提交的版本。 @@ -147,16 +147,17 @@ git reset 命令用于回退版本,可以指定退回某一次提交的版本 $git reset HEAD^ ``` -### git rm +### Git Rm 通过执行 git rm 来删除 Git 追踪的文件,它还会删除你的工作目录中的相应文件。 -### git mv +### Git Mv git mv 命令是一个便利命令,用于移到一个文件并且在新文件上执行 git add 命令及在老文件上执行 git + rm 命令。 -### git clean +### Git Clean git clean 是一个用来从工作区中移除不想要的文件的命令。 可以是编译的临时文件或者合并冲突的文件。 @@ -164,7 +165,7 @@ git clean 是一个用来从工作区中移除不想要的文件的命令。 可 几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。Git 的分支模型称为**必杀技特性**,而正是因为它,将 Git 从版本控制系统家族里区分出来。 -### git branch +### Git Branch 在 Git 中列出、创建与管理工作上下文。 @@ -177,7 +178,7 @@ $ git branch (branchname) $ git branch -d (branchname) ``` -### git switch +### Git Switch 在 Git 中切换至指定分支。 @@ -185,7 +186,7 @@ $ git branch -d (branchname) $git switch master ``` -### git checkout +### Git Checkout 在 Git 中 git checkout 创建新分支,并立即切换到它 @@ -193,7 +194,7 @@ $git switch master $git checkout -b (branchname) ``` -### git merge +### Git Merge 一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用 `git merge` 命令将任何分支合并到当前分支中去。 @@ -215,12 +216,13 @@ $ ls README hello.rb ``` -### git stash +### Git Stash git stash 命令用来临时地保存一些还没有提交的工作,以便在分支上不需要提交未完成工作就可以清理工作 -目录。 -### git log +目录。 + +### Git Log 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。 @@ -245,7 +247,7 @@ Date: Fri Jun 4 12:58:53 2010 +0200 ... ``` -### git tag +### Git Tag 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 `git tag` 给它打上标签。 @@ -263,7 +265,7 @@ $ git tag -s -m "runoob.com标签" Git 并不像 Subversion 那样有个中心服务器。 目前为止所有的命令都是本地执行的,更新的知识本地的数据库。简而言之使用 git fetch 更新你的项目,使用 git push 分享你的改动。 你可以用 git remote 管理你的远程仓库。 -### git remote +### Git Remote 在 Git 中 git remote 命令管理远端仓库列表。 @@ -276,7 +278,7 @@ $ git remote add $ git remote rm ``` -### git fetch +### Git Fetch 在 Git 中 git fetch 从远端仓库**下载新分支与数据**。 @@ -284,7 +286,7 @@ $ git remote rm $git fetch ``` -### git pull +### Git Pull 在 Git 中 **git pull 从远端仓库提取数据并尝试合并到当前分支。**该命令就是在 git fetch 之后紧接着 git merge 远端分支到你所在的任意分支。 @@ -292,129 +294,144 @@ $git fetch $git pull ``` -### git push +### Git Push -在 Git 中 git push remote-name branch-name 将本地改动推送到远端仓库。 如果可以的话,它会依据你的 branch 的样子,推送到远端的 branch 去。 +在 Git 中 git push remote-name branch-name 将本地改动推送到远端仓库。 如果可以的话,它会依据你的 branch 的样子,推送到远端的 branch 去。 ```shell $git push github master ``` -### git archive +### Git Archive -git archive 命令用来创建项目一个指定快照的归档文件。 +git archive 命令用来创建项目一个指定快照的归档文件。 -### git submodule +### Git Submodule git submodule 命令用来管理一个仓库的其他外部仓库。 ## 检查与比较 -### git show +### Git Show git show 命令可以以一种简单的人类可读的方式来显示一个 Git 对象。 一般使用此命令来显示一个标签或一 -个提交的信息。 -### git shortlog +个提交的信息。 + +### Git Shortlog git shortlog 是一个用来归纳 git log 的输出的命令。 它可以接受很多与 git log 相同的选项,但是此命 -令并不会列出所有的提交,而是展示一个根据作者分组的提交记录的概括性信息 -### git describe +令并不会列出所有的提交,而是展示一个根据作者分组的提交记录的概括性信息 -git describe 命令用来接受任何可以解析成一个提交的东西,然后生成一个人类可读的字符串且不可变。 +### Git Describe + +git describe 命令用来接受任何可以解析成一个提交的东西,然后生成一个人类可读的字符串且不可变。 ## 调试 -### git bisect +### Git Bisect git bisect 工具是一个非常有用的调试工具,它通过自动进行一个二分查找来找到哪一个特定的提交是导致 -bug 或者问题的第一个提交。 -### git blame +bug 或者问题的第一个提交。 + +### Git Blame git blame 命令标注任何文件的行,指出文件的每一行的最后的变更的提交及谁是那一个提交的作者。 当你要 -找那个人去询问关于这块特殊代码的信息时这会很有用。 -### git grep +找那个人去询问关于这块特殊代码的信息时这会很有用。 -git grep 命令可以帮助在源代码中,甚至是你项目的老版本中的任意文件中查找任何字符串或者正则表达式。 +### Git Grep + +git grep 命令可以帮助在源代码中,甚至是你项目的老版本中的任意文件中查找任何字符串或者正则表达式。 ## 补丁 -### git cherry-pick +### Git Cherry-pick git cherry-pick 命令用来获得在单个提交中引入的变更,然后尝试将作为一个新的提交引入到你当前分支 + 上。 从一个分支单独一个或者两个提交而不是合并整个分支的所有变更是非常有用的。 -### git rebase +### Git Rebase git rebase 命令基本是是一个自动化的 cherry-pick 命令。 它计算出一系列的提交,然后再以它们在其他 -地方以同样的顺序一个一个的 cherry-picks 出它们。 -### git revert +地方以同样的顺序一个一个的 cherry-picks 出它们。 + +### Git Revert git revert 命令本质上就是一个逆向的 git cherry-pick 操作。 它将你提交中的变更的以完全相反的方式 -的应用到一个新创建的提交中,本质上就是撤销或者倒转。 + +的应用到一个新创建的提交中,本质上就是撤销或者倒转。 ## 邮件 -### git apply +### Git Apply git apply 命令应用一个通过 git diff 或者甚至使用 GNU diff 命令创建的补丁。 它跟补丁命令做了差不多 -的工作,但还是有一些小小的差别。 -### git am +的工作,但还是有一些小小的差别。 + +### Git Am git am 命令用来应用来自邮箱的补丁。特别是那些被 mbox 格式化过的。 这对于通过邮件接受补丁并将他们 -轻松地应用到你的项目中很有用。 -### git format-patch +轻松地应用到你的项目中很有用。 -git format-patch 命令用来以 mbox 的格式来生成一系列的补丁以便你可以发送到一个邮件列表中。 +### Git Format-patch -### git imap-send +git format-patch 命令用来以 mbox 的格式来生成一系列的补丁以便你可以发送到一个邮件列表中。 + +### Git Imap-send git imap-send 将一个由 git format-patch 生成的邮箱上传至 IMAP 草稿文件夹。 -### git send-email +### Git Send-email -git send-mail 命令用来通过邮件发送那些使用 git format-patch 生成的补丁。 +git send-mail 命令用来通过邮件发送那些使用 git format-patch 生成的补丁。 -### git request-pull +### Git Request-pull git request-pull 命令只是简单的用来生成一个可通过邮件发送给某个人的示例信息体。 如果你在公共服务 + 器上有一个分支,并且想让别人知道如何集成这些变更,而不用通过邮件发送补丁,你就可以执行此命令的输出 -发送给这个你想拉取变更的人。 + +发送给这个你想拉取变更的人。 ## 外部系统 -### git svn +### Git Svn git svn 可以使 Git 作为一个客户端来与 Subversion 版本控制系统通信。 这意味着你可以使用 Git 来检出内 -容,或者提交到 Subversion 服务器。 -### git fast-import +容,或者提交到 Subversion 服务器。 + +### Git Fast-import 对于其他版本控制系统或者从其他任何的格式导入,你可以使用 git fast-import 快速地将其他格式映射到 -Git 可以轻松记录的格式。 + +Git 可以轻松记录的格式。 ## 管理 -### git gc +### Git Gc git gc 命令在你的仓库中执行 “garbage collection”,删除数据库中不需要的文件和将其他文件打包成一种 -更有效的格式。 -### git fsck +更有效的格式。 -git fsck 命令用来检查内部数据库的问题或者不一致性。 +### Git Fsck -### git reflog +git fsck 命令用来检查内部数据库的问题或者不一致性。 -git reflog 命令分析你所有分支的头指针的日志来查找出你在重写历史上可能丢失的提交。 +### Git Reflog -### git filter-branch +git reflog 命令分析你所有分支的头指针的日志来查找出你在重写历史上可能丢失的提交。 + +### Git Filter-branch git filter-branch 命令用来根据某些规则来重写大量的提交记录,例如从任何地方删除文件,或者通过过 -滤一个仓库中的一个单独的子目录以提取出一个项目。 + +滤一个仓库中的一个单独的子目录以提取出一个项目。 diff --git a/wiki/getting-started/Git/进阶/工作流.md b/Tech/getting-started/Git/进阶/工作流.md similarity index 99% rename from wiki/getting-started/Git/进阶/工作流.md rename to Tech/getting-started/Git/进阶/工作流.md index 6b1b3602..36e16406 100644 --- a/wiki/getting-started/Git/进阶/工作流.md +++ b/Tech/getting-started/Git/进阶/工作流.md @@ -2,10 +2,10 @@ title: 工作流 description: Git 协作工作流 keywords: -- Git -- 工作流 + - Git + - 工作流 tags: -- Git + - Git/进阶 sidebar_position: 2 author: 7Wate date: 2022-09-13 diff --git a/wiki/getting-started/Git/进阶/常用命令.md b/Tech/getting-started/Git/进阶/常用命令.md similarity index 98% rename from wiki/getting-started/Git/进阶/常用命令.md rename to Tech/getting-started/Git/进阶/常用命令.md index aad4a2bb..315255ba 100644 --- a/wiki/getting-started/Git/进阶/常用命令.md +++ b/Tech/getting-started/Git/进阶/常用命令.md @@ -2,10 +2,10 @@ title: 常用命令 description: Git 常用命令 keywords: -- Git -- 常用命令 + - Git + - 常用命令 tags: -- Git + - Git/进阶 sidebar_position: 4 author: 7Wate date: 2022-09-13 diff --git a/wiki/getting-started/Git/进阶/常用技巧.md b/Tech/getting-started/Git/进阶/常用技巧.md similarity index 99% rename from wiki/getting-started/Git/进阶/常用技巧.md rename to Tech/getting-started/Git/进阶/常用技巧.md index 57029878..fb890ed4 100644 --- a/wiki/getting-started/Git/进阶/常用技巧.md +++ b/Tech/getting-started/Git/进阶/常用技巧.md @@ -2,10 +2,10 @@ title: 常用技巧 description: Git 常用技巧 keywords: -- Git -- 技巧 + - Git + - 技巧 tags: -- Git + - Git/进阶 sidebar_position: 3 author: 7Wate date: 2022-09-13 diff --git a/Tech/getting-started/Git/进阶/思维导图.md b/Tech/getting-started/Git/进阶/思维导图.md new file mode 100644 index 00000000..3eaedca5 --- /dev/null +++ b/Tech/getting-started/Git/进阶/思维导图.md @@ -0,0 +1,17 @@ +--- +title: 思维导图 +description: 思维导图 +keywords: + - Git + - 思维导图 +tags: + - Git/进阶 +sidebar_position: +author: 7Wate +date: 2022-11-06 +--- + +![Git_V2.16.2](https://static.7wate.com/img/2022/11/16/cb8f63c9b3042.png) + +- [XMind 文件](https://static.7wate.com/img/2022/11/16/30b8d694bde9b.xmind) +- [PDF 文件](https://static.7wate.com/img/2022/11/16/081d4a93481e3.pdf) diff --git a/wiki/getting-started/Git/进阶/钩子.md b/Tech/getting-started/Git/进阶/钩子.md similarity index 99% rename from wiki/getting-started/Git/进阶/钩子.md rename to Tech/getting-started/Git/进阶/钩子.md index 99ef213c..ae0b67d1 100644 --- a/wiki/getting-started/Git/进阶/钩子.md +++ b/Tech/getting-started/Git/进阶/钩子.md @@ -2,14 +2,14 @@ title: 钩子 description: Git 钩子 keywords: -- Git -- Hook -- 钩子 + - Git + - Hook + - 钩子 tags: -- Git + - Git/进阶 sidebar_position: 1 author: 7Wate -date: 2022-09-13 +date: 2022-09-13 --- ## 钩子定义 diff --git a/wiki/getting-started/Shell/Shell 必备锦囊.md b/Tech/getting-started/Shell/Shell 必备锦囊.md similarity index 100% rename from wiki/getting-started/Shell/Shell 必备锦囊.md rename to Tech/getting-started/Shell/Shell 必备锦囊.md diff --git a/wiki/getting-started/Shell/Shell 是什么.md b/Tech/getting-started/Shell/Shell 是什么.md similarity index 100% rename from wiki/getting-started/Shell/Shell 是什么.md rename to Tech/getting-started/Shell/Shell 是什么.md diff --git a/wiki/getting-started/Shell/命令行的艺术.md b/Tech/getting-started/Shell/命令行的艺术.md similarity index 100% rename from wiki/getting-started/Shell/命令行的艺术.md rename to Tech/getting-started/Shell/命令行的艺术.md diff --git a/wiki/getting-started/Vim/Vim 入门.md b/Tech/getting-started/Vim/Vim 入门.md similarity index 100% rename from wiki/getting-started/Vim/Vim 入门.md rename to Tech/getting-started/Vim/Vim 入门.md diff --git a/wiki/getting-started/Vim/Vim 参考手册.md b/Tech/getting-started/Vim/Vim 参考手册.md similarity index 100% rename from wiki/getting-started/Vim/Vim 参考手册.md rename to Tech/getting-started/Vim/Vim 参考手册.md diff --git a/wiki/getting-started/Vim/Vim 帮助文档.md b/Tech/getting-started/Vim/Vim 帮助文档.md similarity index 100% rename from wiki/getting-started/Vim/Vim 帮助文档.md rename to Tech/getting-started/Vim/Vim 帮助文档.md diff --git a/wiki/getting-started/开源/如何向开源社区提问.md b/Tech/getting-started/开源/如何向开源社区提问.md similarity index 99% rename from wiki/getting-started/开源/如何向开源社区提问.md rename to Tech/getting-started/开源/如何向开源社区提问.md index 29376be1..2798fd6a 100644 --- a/wiki/getting-started/开源/如何向开源社区提问.md +++ b/Tech/getting-started/开源/如何向开源社区提问.md @@ -3,6 +3,8 @@ id: 如何向开源社区提问 title: 如何向开源社区提问 sidebar_position: 2 data: 2022年5月30日 +tags: + - 社区/开源 --- 使用软件产品,或多或少都会遇到问题。对于商业产品,我们可以咨询客服寻求帮助。对于公司自己研发的产品,我们可以直接请教专家同事。但对于开源软件,在遇到问题时,如何才能及时有效地寻求帮助呢? diff --git a/wiki/getting-started/开源/如何有效报告 BUG.md b/Tech/getting-started/开源/如何有效报告 BUG.md similarity index 55% rename from wiki/getting-started/开源/如何有效报告 BUG.md rename to Tech/getting-started/开源/如何有效报告 BUG.md index 39028859..3ca03931 100644 --- a/wiki/getting-started/开源/如何有效报告 BUG.md +++ b/Tech/getting-started/开源/如何有效报告 BUG.md @@ -3,6 +3,8 @@ id: 如何有效报告 BUG title: 如何有效报告 BUG sidebar_position: 3 data: 2022年5月30日 +tags: + - 社区/开源 --- 作者:Simon Tatham 专业的自由软件程序员 @@ -11,9 +13,9 @@ data: 2022年5月30日 [ [English](https://www.chiark.greenend.org.uk/~sgtatham/bugs.html) | [Português](https://www.chiark.greenend.org.uk/~sgtatham/bugs-br.html) | **简体中文** | [Česky](https://www.chiark.greenend.org.uk/~sgtatham/bugs-cz.html) | [Dansk](https://www.chiark.greenend.org.uk/~sgtatham/bugs-da.html) | [Deutsch](https://www.chiark.greenend.org.uk/~sgtatham/bugs-de.html) | [Español](https://www.chiark.greenend.org.uk/~sgtatham/bugs-es.html) | [Français](https://www.chiark.greenend.org.uk/~sgtatham/bugs-fr.html) | [Magyar](https://www.chiark.greenend.org.uk/~sgtatham/bugs-hu.html) | [Italiano](https://www.chiark.greenend.org.uk/~sgtatham/bugs-it.html) | [日本語](https://www.chiark.greenend.org.uk/~sgtatham/bugs-jp.html) | [Nederlands](https://www.chiark.greenend.org.uk/~sgtatham/bugs-nl.html) | [Polski](https://www.chiark.greenend.org.uk/~sgtatham/bugs-pl.html) | [Русский](https://www.chiark.greenend.org.uk/~sgtatham/bugs-ru.html) | [繁體中文](https://www.chiark.greenend.org.uk/~sgtatham/bugs-tw.html) ] -### 引言 +## 引言 -为公众写过软件的人,大概都收到过很拙劣的bug(计算机程序代码中的错误或程序运行时的瑕疵——译者注)报告,例如: +为公众写过软件的人,大概都收到过很拙劣的 bug(计算机程序代码中的错误或程序运行时的瑕疵——译者注)报告,例如: 在报告中说“不好用”; @@ -29,45 +31,45 @@ data: 2022年5月30日 所报告的问题是由于网络错误而产生的; -这便是为什么“技术支持”被认为是一件可怕的工作,因为有拙劣的bug报告需要处理。然而并不是所有的bug报告都令人生厌:我在业余时间维护自由软件,有时我会收到非常清晰、有帮助并且*“有内容”*的bug报告。 +这便是为什么“技术支持”被认为是一件可怕的工作,因为有拙劣的 bug 报告需要处理。然而并不是所有的 bug 报告都令人生厌:我在业余时间维护自由软件,有时我会收到非常清晰、有帮助并且 *“有内容”* 的 bug 报告。 -在这里我会尽力阐明如何写一个好的bug报告。我非常希望每一个人在报告bug之前都读一下这篇短文,当然我也希望用户在给*我*报告bug之前已经读过这篇文章。 +在这里我会尽力阐明如何写一个好的 bug 报告。我非常希望每一个人在报告 bug 之前都读一下这篇短文,当然我也希望用户在给*我*报告 bug 之前已经读过这篇文章。 -简单地说,报告bug的目的是为了让程序员看到程序的错误。您可以亲自示范,也可以给出能导致程序出错的、详尽的操作步骤。如果程序出错了,程序员会收集额外的信息直到找到错误的原因;如果程序没有出错,那么他们会请您继续关注这个问题,收集相关的信息。 +简单地说,报告 bug 的目的是为了让程序员看到程序的错误。您可以亲自示范,也可以给出能导致程序出错的、详尽的操作步骤。如果程序出错了,程序员会收集额外的信息直到找到错误的原因;如果程序没有出错,那么他们会请您继续关注这个问题,收集相关的信息。 -在bug报告里,要设法搞清什么是事实(例如:“我在电脑旁”和“XX出现了”)什么是推测(例如:“我*想*问题可能是出在……”)。如果愿意的话,您可以省去推测,但是千万别省略事实。 +在 bug 报告里,要设法搞清什么是事实(例如:“我在电脑旁”和“XX 出现了”)什么是推测(例如:“我*想*问题可能是出在……”)。如果愿意的话,您可以省去推测,但是千万别省略事实。 -当您报告bug的时候(既然您已经这么做了),一定是希望bug得到及时修正。所以此时针对程序员的任何过激或亵渎的言语(甚至谩骂)都是与事无补的——因为这可能是程序员的错误,也有可能是您的错误,也许您有权对他们发火,但是如果您能多提供一些有用的信息(而不是激愤之词)或许bug会被更快的修正。除此以外,请记住:如果是免费软件,作者提供给我们已经是出于好心,所以要是太多的人对他们无礼,他们可能就要“收起”这份好心了。 +当您报告 bug 的时候(既然您已经这么做了),一定是希望 bug 得到及时修正。所以此时针对程序员的任何过激或亵渎的言语(甚至谩骂)都是与事无补的——因为这可能是程序员的错误,也有可能是您的错误,也许您有权对他们发火,但是如果您能多提供一些有用的信息(而不是激愤之词)或许 bug 会被更快的修正。除此以外,请记住:如果是免费软件,作者提供给我们已经是出于好心,所以要是太多的人对他们无礼,他们可能就要“收起”这份好心了。 -### “程序不好用” +## “程序不好用” -程序员不是弱智:如果程序一点都不好用,他们不可能不知道。他们不知道一定是因为程序在他们看来工作得很正常。所以,或者是您作过一些与他们不同的操作,或者是您的环境与他们不同。他们需要信息,报告bug也是为了提供信息。信息总是越多越好。 +程序员不是弱智:如果程序一点都不好用,他们不可能不知道。他们不知道一定是因为程序在他们看来工作得很正常。所以,或者是您作过一些与他们不同的操作,或者是您的环境与他们不同。他们需要信息,报告 bug 也是为了提供信息。信息总是越多越好。 -许多程序,特别是自由软件,会公布一个“已知bug列表”。如果您找到的bug在列表里已经有了,那就不必再报告了,但是如果您认为自己掌握的信息比列表中的丰富,那无论如何也要与程序员联系。您提供的信息可能会使他们更简单地修复bug。 +许多程序,特别是自由软件,会公布一个“已知 bug 列表”。如果您找到的 bug 在列表里已经有了,那就不必再报告了,但是如果您认为自己掌握的信息比列表中的丰富,那无论如何也要与程序员联系。您提供的信息可能会使他们更简单地修复 bug。 -本文中提到的都是一些指导方针,没有哪一条是必须恪守的准则。不同的程序员会喜欢不同形式的bug报告。如果程序附带了一套报告bug的准则,一定要读。如果它与本文中提到的规则相抵触,那么请以它为准。 +本文中提到的都是一些指导方针,没有哪一条是必须恪守的准则。不同的程序员会喜欢不同形式的 bug 报告。如果程序附带了一套报告 bug 的准则,一定要读。如果它与本文中提到的规则相抵触,那么请以它为准。 -如果您不是报告bug,而是寻求帮助,您应该说明您曾经到哪里找过答案,(例如:我看了第四章和第五章的第二节,但我找不到解决的办法。)这会使程序员了解用户喜欢到哪里去找答案,从而使程序员把帮助文档做得更容易使用。 +如果您不是报告 bug,而是寻求帮助,您应该说明您曾经到哪里找过答案,(例如:我看了第四章和第五章的第二节,但我找不到解决的办法。)这会使程序员了解用户喜欢到哪里去找答案,从而使程序员把帮助文档做得更容易使用。 -### “演示给我看” +## “演示给我看” -报告bug的最好的方法之一是“演示”给程序员看。让程序员站在电脑前,运行他们的程序,指出程序的错误。让他们看着您启动电脑、运行程序、如何进行操作以及程序对您的输入有何反应。 +报告 bug 的最好的方法之一是“演示”给程序员看。让程序员站在电脑前,运行他们的程序,指出程序的错误。让他们看着您启动电脑、运行程序、如何进行操作以及程序对您的输入有何反应。 他们对自己写的软件了如指掌,他们知道哪些地方不会出问题,而哪些地方最可能出问题。他们本能地知道应该注意什么。在程序真的出错之前,他们可能已经注意到某些地方不对劲,这些都会给他们一些线索。他们会观察程序测试中的每一个*细节*,并且选出他们认为有用的信息。 -这些可能还不够。也许他们觉得还需要更多的信息,会请您重复刚才的操作。他们可能在这期间需要与您交流一下,以便在他们需要的时候让bug重新出现。他们可能会改变一些操作,看看这个错误的产生是个别问题还是相关的一类问题。如果您不走运,他们可能需要坐下来,拿出一堆开发工具,花上几个小时来*好好地*研究一下。但是最重要的是在程序出错的时候让程序员在电脑旁。一旦他们看到了问题,他们通常会找到原因并开始试着修改。 +这些可能还不够。也许他们觉得还需要更多的信息,会请您重复刚才的操作。他们可能在这期间需要与您交流一下,以便在他们需要的时候让 bug 重新出现。他们可能会改变一些操作,看看这个错误的产生是个别问题还是相关的一类问题。如果您不走运,他们可能需要坐下来,拿出一堆开发工具,花上几个小时来*好好地*研究一下。但是最重要的是在程序出错的时候让程序员在电脑旁。一旦他们看到了问题,他们通常会找到原因并开始试着修改。 -### “告诉我该怎么做” +## “告诉我该怎么做” 如今是网络时代,是信息交流的时代。我可以点一下鼠标把自己的程序送到俄罗斯的某个朋友那里,当然他也可以用同样简单的方法给我一些建议。但是如果我的程序出了什么问题,我*不可能*在他旁边。“演示”是很好的办法,但是常常做不到。 -如果您必须报告bug,而此时程序员又不在您身边,那么您就要想办法让bug*重现*在他们面前。当他们亲眼看到错误时,就能够进行处理了。 +如果您必须报告 bug,而此时程序员又不在您身边,那么您就要想办法让 bug*重现*在他们面前。当他们亲眼看到错误时,就能够进行处理了。 确切地告诉程序员您做了些什么。如果是一个图形界面程序,告诉他们您按了哪个按钮,依照什么顺序按的。如果是一个命令行程序,精确的告诉他们您键入了什么命令。您应该尽可能详细地提供您所键入的命令和程序的反应。 把您能想到的所有的输入方式都告诉程序员,如果程序要读取一个文件,您可能需要发一个文件的拷贝给他们。如果程序需要通过网络与另一台电脑通讯,您或许不能把那台电脑复制过去,但至少可以说一下电脑的类型和安装了哪些软件(如果可以的话)。 -### “哪儿出错了?在我看来一切正常哦!” +## “哪儿出错了?在我看来一切正常哦!” 如果您给了程序员一长串输入和指令,他们执行以后没有出现错误,那是因为您没有给他们足够的信息,可能错误不是在每台计算机上都出现,您的系统可能和他们的在某些地方不一样。有时候程序的行为可能和您预想的不一样,这也许是误会,但是您会认为程序出错了,程序员却认为这是对的。 @@ -79,57 +81,57 @@ data: 2022年5月30日 在这种情形下,程序员的排错工作会十分高效。他们不知道发生了什么,也不可能到现场去观察,所以他们一直在搜寻有价值的线索。错误消息、错误消息号以及一些莫名其妙的延迟,都是很重要的线索,就像办案时的指纹一样重要,保存好。 -如果您使用UNIX系统,程序可能会产生一个内核输出(coredump)。内核输出是特别有用的线索来源,别扔了它们。另一方面,大多数程序员不喜欢收到含有大量内核输出文件的EMAIL,所以在发邮件之前最好先问一下。还有一点要注意:内核输出文件记录了完整的程序状态,也就是说任何秘密(可能当时程序正在处理一些私人信息或秘密数据)都可能包含在内核输出文件里。 +如果您使用 UNIX 系统,程序可能会产生一个内核输出(coredump)。内核输出是特别有用的线索来源,别扔了它们。另一方面,大多数程序员不喜欢收到含有大量内核输出文件的 EMAIL,所以在发邮件之前最好先问一下。还有一点要注意:内核输出文件记录了完整的程序状态,也就是说任何秘密(可能当时程序正在处理一些私人信息或秘密数据)都可能包含在内核输出文件里。 -### “出了问题之后,我做了……” +## “出了问题之后,我做了……” -当一个错误或bug发生的时候,您可能会做许多事情。但是大多数人会使事情变的更糟。我的一个朋友在学校里误删了她所有的Word文件,在找人帮忙之前她重装了Word,又运行了一遍碎片整理程序,这些操作对于恢复文件是毫无益处的,因为这些操作搞乱了磁盘的文件区块。恐怕在这个世界上没有一种反删除软件能恢复她的文件了。如果她不做任何操作,或许还有一线希望。 +当一个错误或 bug 发生的时候,您可能会做许多事情。但是大多数人会使事情变的更糟。我的一个朋友在学校里误删了她所有的 Word 文件,在找人帮忙之前她重装了 Word,又运行了一遍碎片整理程序,这些操作对于恢复文件是毫无益处的,因为这些操作搞乱了磁盘的文件区块。恐怕在这个世界上没有一种反删除软件能恢复她的文件了。如果她不做任何操作,或许还有一线希望。 这种用户仿佛一只被逼到墙角的鼬(黄鼠狼、紫貂一类的动物——译者注):背靠墙壁,面对死亡的降临奋起反扑,疯狂攻击。他们认为做点什么总比什么都不做强。然而这些在处理计算机软件问题时并不适用。 不要做鼬,做一只羚羊。当一只羚羊面对料想不到的情况或受到惊吓时,它会一动不动,是为了不吸引任何注意,与此同时也在思考解决问题的最好办法(如果羚羊有一条技术支持热线,此时占线。)。然后,一旦它找到了最安全的行动方案,它便去做。 -当程序出毛病的时候,立刻停止正在做的*任何操作*。不要按任何健。仔细地看一下屏幕,注意那些不正常的地方,记住它或者写下来。然后慎重地点击“确定” 或“取消”,选择一个最安全的。学着养成一种条件反射——一旦电脑出了问题,先不要动。要想摆脱这个问题,关掉受影响的程序或者重新启动计算机都不好,一个解决问题的好办法是让问题再次产生。程序员们喜欢可以被重现的问题,快乐的程序员可以更快而且更有效率的修复bug。 +当程序出毛病的时候,立刻停止正在做的*任何操作*。不要按任何健。仔细地看一下屏幕,注意那些不正常的地方,记住它或者写下来。然后慎重地点击“确定” 或“取消”,选择一个最安全的。学着养成一种条件反射——一旦电脑出了问题,先不要动。要想摆脱这个问题,关掉受影响的程序或者重新启动计算机都不好,一个解决问题的好办法是让问题再次产生。程序员们喜欢可以被重现的问题,快乐的程序员可以更快而且更有效率的修复 bug。 -### “我想粒子的跃迁与错误的极化有关” +## “我想粒子的跃迁与错误的极化有关” -并不只是非专业的用户才会写出拙劣的bug报告,我见过一些非常差的bug报告出自程序员之手,有些还是非常优秀的程序员。 +并不只是非专业的用户才会写出拙劣的 bug 报告,我见过一些非常差的 bug 报告出自程序员之手,有些还是非常优秀的程序员。 -有一次我与另一个程序员一起工作,他一直在找代码中的bug,他常常遇到一个bug,但是不会解决,于是就叫我帮忙。“出什么毛病了?”我问。而他的回答却总是一些关于bug的意见。如果他的观点正确,那的确是一件好事。这意味着他已经完成了工作的一半,并且我们可以一起完成另一半工作。这是有效率并有用的。 +有一次我与另一个程序员一起工作,他一直在找代码中的 bug,他常常遇到一个 bug,但是不会解决,于是就叫我帮忙。“出什么毛病了?”我问。而他的回答却总是一些关于 bug 的意见。如果他的观点正确,那的确是一件好事。这意味着他已经完成了工作的一半,并且我们可以一起完成另一半工作。这是有效率并有用的。 -但事实上他常常是错的。这就会使我们花上半个小时在原本正确的代码里来回寻找错误,而实际上问题出在别的地方。我敢肯定他不会对医生这么做。“大夫,我得了Hydroyoyodyne(真是怪病——译者),给我开个方子”,人们知道不该对一位医生说这些。您描述一下症状,哪个地方不舒服,哪里疼、起皮疹、发烧……让医生诊断您得了什么病,应该怎样治疗。否则医生会把您当做疑心病或精神病患者打发了,这似乎没什么不对。 +但事实上他常常是错的。这就会使我们花上半个小时在原本正确的代码里来回寻找错误,而实际上问题出在别的地方。我敢肯定他不会对医生这么做。“大夫,我得了 Hydroyoyodyne(真是怪病——译者),给我开个方子”,人们知道不该对一位医生说这些。您描述一下症状,哪个地方不舒服,哪里疼、起皮疹、发烧……让医生诊断您得了什么病,应该怎样治疗。否则医生会把您当做疑心病或精神病患者打发了,这似乎没什么不对。 -做程序员也是一样。即便您自己的“诊断”有时真的有帮助,也要只说“症状”。“诊断”是可说可不说的,但是“症状”一定要说。同样,在bug报告里面附上一份针对bug而做出修改的源代码是有用处的,但它并不能替代bug报告本身。 +做程序员也是一样。即便您自己的“诊断”有时真的有帮助,也要只说“症状”。“诊断”是可说可不说的,但是“症状”一定要说。同样,在 bug 报告里面附上一份针对 bug 而做出修改的源代码是有用处的,但它并不能替代 bug 报告本身。 -如果程序员向您询问额外的信息,千万别应付。曾经有一个人向我报告bug,我让他试一个命令,我知道这个命令不好用,但我是要看看程序会返回一个什么错误(这是很重要的线索)。但是这位老兄根本就没试,他在回复中说“那肯定不好用”,于是我又花了好些时间才说服他试了一下那个命令。 +如果程序员向您询问额外的信息,千万别应付。曾经有一个人向我报告 bug,我让他试一个命令,我知道这个命令不好用,但我是要看看程序会返回一个什么错误(这是很重要的线索)。但是这位老兄根本就没试,他在回复中说“那肯定不好用”,于是我又花了好些时间才说服他试了一下那个命令。 用户多动动脑筋对程序员的工作是有帮助的。即使您的推断是错误的,程序员也应该感谢您,至少您*想*去帮助他们,使他们的工作变的更简单。不过千万别忘了报告“症状”,否则只会使事情变得更糟。 -### “真是奇怪,刚才还不好用,怎么现在又好了?” +## “真是奇怪,刚才还不好用,怎么现在又好了?” “间歇性错误”着实让程序员发愁。相比之下,进行一系列简单的操作便能导致错误发生的问题是简单的。程序员可以在一个便于观察的条件下重复那些操作,观察每一个细节。太多的问题在这种情况下不能解决,例如:程序每星期出一次错,或者偶然出一次错,或者在程序员面前从不出错(程序员一离开就出错。——译者)。当然还有就是程序的截止日期到了,那肯定要出错。 大多数“间歇性错误”并不是真正的“间歇”。其中的大多数错误与某些地方是有联系的。有一些错误可能是内存泄漏产生的,有一些可能是别的程序在不恰当的时候修改某个重要文件造成的,还有一些可能发生在每一个小时的前半个小时中(我确实遇到过这种事情)。 -同样,如果您能使bug重现,而程序员不能,那很有可能是他们的计算机和您的计算机在某些地方是不同的,这种不同引起了问题。我曾写过一个程序,它的窗口可以*蜷缩*成一个小球呆在屏幕的左上角,它在别的计算机上只能在 800x600 的解析度工作,但是在我的机器上却可以在 1024x768 下工作。 +同样,如果您能使 bug 重现,而程序员不能,那很有可能是他们的计算机和您的计算机在某些地方是不同的,这种不同引起了问题。我曾写过一个程序,它的窗口可以*蜷缩*成一个小球呆在屏幕的左上角,它在别的计算机上只能在 800x600 的解析度工作,但是在我的机器上却可以在 1024x768 下工作。 -程序员想要了解任何与您发现的问题相关的事情。有可能的话您到另一台机器上试试,多试几次,两次,三次,看看问题是不是经常发生。如果问题出现在您进行了一系列操作之后,不是您想让它出现它就会出现,这就有可能是长时间的运行或处理大文件所导致的错误。程序崩溃的时候,您要尽可能的记住您都做了些什么,并且如果您看到任何图形,也别忘了提一下。您提供的任何事情都是有帮助的。即使只是概括性的描述(例如:当后台有EMACS运行时,程序常常出错),这虽然不能提供导致问题的直接线索,但是可能帮助程序员重现问题。 +程序员想要了解任何与您发现的问题相关的事情。有可能的话您到另一台机器上试试,多试几次,两次,三次,看看问题是不是经常发生。如果问题出现在您进行了一系列操作之后,不是您想让它出现它就会出现,这就有可能是长时间的运行或处理大文件所导致的错误。程序崩溃的时候,您要尽可能的记住您都做了些什么,并且如果您看到任何图形,也别忘了提一下。您提供的任何事情都是有帮助的。即使只是概括性的描述(例如:当后台有 EMACS 运行时,程序常常出错),这虽然不能提供导致问题的直接线索,但是可能帮助程序员重现问题。 最重要的是:程序员想要确定他们正在处理的是一个真正的“间歇性错误”呢,还是一个在另一类特定的计算机上才出现的错误。他们想知道有关您计算机的许多细节,以便了解您的机器与他们的有什么不同。有许多细节都依仗特定的程序,但是有一件东西您一定要提供——版本号。程序的版本、操作系统的版本以及与问题有关的程序的版本。 -### “我把磁盘装进了 Windows……” +## “我把磁盘装进了 Windows……” -表意清楚在一份bug报告里是最基本的要求。如果程序员不知道您说的是什么意思,那您就跟没说一样。我收到的bug报告来自世界各地,有许多是来自非英语国家,他们通常为自己的英文不好而表示歉意。总的来说,这些用户发来的bug报告通常是清晰而且有用的。几乎所有不清晰的bug报告都是来自母语是英语的人,他们总是以为只要自己随便说说,程序员就能明白。 +表意清楚在一份 bug 报告里是最基本的要求。如果程序员不知道您说的是什么意思,那您就跟没说一样。我收到的 bug 报告来自世界各地,有许多是来自非英语国家,他们通常为自己的英文不好而表示歉意。总的来说,这些用户发来的 bug 报告通常是清晰而且有用的。几乎所有不清晰的 bug 报告都是来自母语是英语的人,他们总是以为只要自己随便说说,程序员就能明白。 - *精确*。如果做相同的事情有两种方法,请说明您用的是哪一种。例如:“我选择了‘载入’”,可能意味着“我用鼠标点击‘载入’”或“我按下了‘ALT+L’”,说清楚您用了哪种方法,有时候这也有关系。 -- *详细*。信息宁多毋少!如果您说了很多,程序员可以略去一部分,可是如果您说的太少,他们就不得不回过头再去问您一些问题。有一次我收到了一份bug报告只有一句话,每一次我问他更多事情时,他每次的回复都是一句话,于是我花了几个星期的时间才得到了有用的信息。 -- *慎用代词*。诸如“它”,“窗体”这些词,当它们指代不清晰的时候不要用。来看看这句话:“我运行了FooApp,它弹出一个警告窗口,我试着关掉它,它就崩溃了。”这种表述并不清晰,用户究竟关掉了哪个窗口?是警告窗口还是整个FooApp程序?您可以这样说,“我运行FooApp程序时弹出一个警告窗口,我试着关闭警告窗口,FooApp崩溃了。”这样虽然罗嗦点,但是很清晰不容易产生误解。 -- *检查*。重新读一遍您写的bug报告,*您*觉得它是否清晰?如果您列出了一系列能导致程序出错的操作,那么照着做一遍,看看您是不是漏写了一步。 +- *详细*。信息宁多毋少!如果您说了很多,程序员可以略去一部分,可是如果您说的太少,他们就不得不回过头再去问您一些问题。有一次我收到了一份 bug 报告只有一句话,每一次我问他更多事情时,他每次的回复都是一句话,于是我花了几个星期的时间才得到了有用的信息。 +- *慎用代词*。诸如“它”,“窗体”这些词,当它们指代不清晰的时候不要用。来看看这句话:“我运行了 FooApp,它弹出一个警告窗口,我试着关掉它,它就崩溃了。”这种表述并不清晰,用户究竟关掉了哪个窗口?是警告窗口还是整个 FooApp 程序?您可以这样说,“我运行 FooApp 程序时弹出一个警告窗口,我试着关闭警告窗口,FooApp 崩溃了。”这样虽然罗嗦点,但是很清晰不容易产生误解。 +- *检查*。重新读一遍您写的 bug 报告,*您*觉得它是否清晰?如果您列出了一系列能导致程序出错的操作,那么照着做一遍,看看您是不是漏写了一步。 -### 小结 +## 小结 -- bug报告的首要目的是让程序员亲眼看到错误。如果您不能亲自做给他们看,给他们能使程序出错的详细的操作步骤。 -- 如果首要目的不能达成,程序员*不能*看到程序出错。这就需要bug报告的第二个目的来描述程序的什么地方出毛病了。详细的描述每一件事情:您看到了什么,您想看到什么,把错误消息记下来,*尤其*是“错误消息号”。 +- bug 报告的首要目的是让程序员亲眼看到错误。如果您不能亲自做给他们看,给他们能使程序出错的详细的操作步骤。 +- 如果首要目的不能达成,程序员*不能*看到程序出错。这就需要 bug 报告的第二个目的来描述程序的什么地方出毛病了。详细的描述每一件事情:您看到了什么,您想看到什么,把错误消息记下来,*尤其*是“错误消息号”。 - 当您的计算机做了什么您料想不到的事,*不要动*!在您平静下来之前什么都别做。不要做您认为不安全的事。 - 尽量试着自己“诊断”程序出错的原因(如果您认为自己可以的话)。即使做出了“诊断”,您仍然应该报告“症状”。 - 如果程序员需要,请准备好额外的信息。如果他们不需要,就不会问您要。他们不会故意为难自己。您手头上一定要有程序的版本号,它很可能是必需品。 @@ -138,11 +140,11 @@ data: 2022年5月30日 ------ -*声明:*我从没有真的看见过鼬和羚羊,我的比喻可能不恰当。 +* 声明:* 我从没有真的看见过鼬和羚羊,我的比喻可能不恰当。 版权所有 Simon Tatham 1999 -本文属于[OPL(OpenContent License)](https://www.opencontent.org/),请在复制和使用本文时自觉遵守OPL。 +本文属于 [OPL(OpenContent License)](https://www.opencontent.org/),请在复制和使用本文时自觉遵守 OPL。 对本文的任何意见和批评请发送至: diff --git a/wiki/getting-started/开源/开源指北.md b/Tech/getting-started/开源/开源指北.md similarity index 95% rename from wiki/getting-started/开源/开源指北.md rename to Tech/getting-started/开源/开源指北.md index 6604fdc4..a215a961 100644 --- a/wiki/getting-started/开源/开源指北.md +++ b/Tech/getting-started/开源/开源指北.md @@ -3,6 +3,8 @@ id: 开源指北 title: 开源指北 sidebar_position: 1 data: 2022年5月30日 +tags: + - 社区/开源 --- 一份给开源新手的保姆级开源百科,由 Gitee 开发维护。 diff --git a/wiki/getting-started/开源/提问的智慧.md b/Tech/getting-started/开源/提问的智慧.md similarity index 83% rename from wiki/getting-started/开源/提问的智慧.md rename to Tech/getting-started/开源/提问的智慧.md index 816d3b97..761363e1 100644 --- a/wiki/getting-started/开源/提问的智慧.md +++ b/Tech/getting-started/开源/提问的智慧.md @@ -3,6 +3,8 @@ id: 提问的智慧 title: 提问的智慧 sidebar_position: 4 data: 2022年7月26日 +tags: + - 社区/开源 --- ## How To Ask Questions The Smart Way @@ -17,7 +19,7 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 本中文指南是基于原文 3.10 版以及 2010 年由 [Gasolin](https://github.com/gasolin) 所翻译版本的最新翻译; -协助指出翻译问题,**请[发 issue](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/issues/new),或直接[发 pull request](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/compare) 给我。** +协助指出翻译问题,**请 [发 issue](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/issues/new),或直接 [发 pull request](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/compare) 给我。** ## 声明 @@ -31,7 +33,7 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu ## 简介 -在[黑客](http://www.catb.org/~esr/faqs/hacker-howto.html)的世界里,当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。本指南将教你如何正确的提问以获得你满意的答案。 +在 [黑客](http://www.catb.org/~esr/faqs/hacker-howto.html) 的世界里,当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。本指南将教你如何正确的提问以获得你满意的答案。 现在开源(Open Source)软件已经相当盛行,您通常可以从其他更有经验的用户那里获得与黑客一样好的答案,这是件**好事**;和黑客相比,用户们往往对那些新手常遇到的问题更宽容一些。尽管如此,以我们在此推荐的方式对待这些有经验的用户通常也是从他们那里获得有用答案的最有效方式。 @@ -43,7 +45,7 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 我们意识到许多人只是想使用我们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,电脑只是种工具,是种达到目的的手段而已。他们有自己的生活并且有更要紧的事要做。我们了解这点,也从不指望每个人都对这些让我们着迷的技术问题感兴趣。尽管如此,我们回答问题的风格是指向那些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不该变。如果连这都变了,我们就是在降低做自己最擅长的事情上的效率。 -我们(在很大程度上)是自愿的,从繁忙的生活中抽出时间来解答疑惑,而且时常被提问淹没。所以我们无情地滤掉一些话题,特别是拋弃那些看起来像失败者的家伙,以便更高效地利用时间来回答`赢家(winner)`的问题。 +我们(在很大程度上)是自愿的,从繁忙的生活中抽出时间来解答疑惑,而且时常被提问淹没。所以我们无情地滤掉一些话题,特别是拋弃那些看起来像失败者的家伙,以便更高效地利用时间来回答 `赢家(winner)` 的问题。 如果你厌恶我们的态度,高高在上,或过于傲慢,不妨也设身处地想想。我们并没有要求你向我们屈服 —— 事实上,我们大多数人非常乐意与你平等地交流,只要你付出小小努力来满足基本要求,我们就会欢迎你加入我们的文化。但让我们帮助那些不愿意帮助自己的人是没有效率的。无知没有关系,但装白痴就是不行。 @@ -51,7 +53,7 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 如果你决定向我们求助,当然你也不希望被视为失败者,更不愿成为失败者中的一员。能立刻得到快速并有效答案的最好方法,就是像赢家那样提问 —— 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。 -(欢迎对本指南提出改进意见。你可以 email 你的建议至 [esr@thyrsus.com](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/esr@thyrsus.com) 或 [respond-auto@linuxmafia.com](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/respond-auto@linuxmafia.com)。然而请注意,本文并非[网络礼节](http://www.ietf.org/rfc/rfc1855.txt)的通用指南,而我们通常会拒绝无助于在技术论坛得到有用答案的建议)。 +(欢迎对本指南提出改进意见。你可以 email 你的建议至 [esr@thyrsus.com](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/esr@thyrsus.com) 或 [respond-auto@linuxmafia.com](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/respond-auto@linuxmafia.com)。然而请注意,本文并非 [网络礼节](http://www.ietf.org/rfc/rfc1855.txt) 的通用指南,而我们通常会拒绝无助于在技术论坛得到有用答案的建议)。 ## 在提问之前 @@ -67,17 +69,17 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 当你提出问题的时候,请先表明你已经做了上述的努力;这将有助于树立你并不是一个不劳而获且浪费别人的时间的提问者。如果你能一并表达在做了上述努力的过程中所**学到**的东西会更好,因为我们更乐于回答那些表现出能从答案中学习的人的问题。 -运用某些策略,比如先用 Google 搜索你所遇到的各种错误信息(搜索 [Google 论坛](http://groups.google.com/)和网页),这样很可能直接就找到了能解决问题的文件或邮件列表线索。即使没有结果,在邮件列表或新闻组寻求帮助时加上一句 `我在 Google 中搜过下列句子但没有找到什么有用的东西` 也是件好事,即使它只是表明了搜索引擎不能提供哪些帮助。这么做(加上搜索过的字串)也让遇到相似问题的其他人能被搜索引擎引导到你的提问来。 +运用某些策略,比如先用 Google 搜索你所遇到的各种错误信息(搜索 [Google 论坛](http://groups.google.com/) 和网页),这样很可能直接就找到了能解决问题的文件或邮件列表线索。即使没有结果,在邮件列表或新闻组寻求帮助时加上一句 `我在 Google 中搜过下列句子但没有找到什么有用的东西` 也是件好事,即使它只是表明了搜索引擎不能提供哪些帮助。这么做(加上搜索过的字串)也让遇到相似问题的其他人能被搜索引擎引导到你的提问来。 别着急,不要指望几秒钟的 Google 搜索就能解决一个复杂的问题。在向专家求助之前,再阅读一下常见问题文件(FAQ)、放轻松、坐舒服一些,再花点时间思考一下这个问题。相信我们,他们能从你的提问看出你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑拋出,只因你的第一次搜索没有找到答案(或者找到太多答案)。 准备好你的问题,再将问题仔细的思考过一遍,因为草率的发问只能得到草率的回答,或者根本得不到任何答案。越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能得到实质性的帮助。 -小心别问错了问题。如果你的问题基于错误的假设,某个普通黑客(J. Random Hacker)多半会一边在心里想着`蠢问题…`,一边用无意义的字面解释来答复你,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。 +小心别问错了问题。如果你的问题基于错误的假设,某个普通黑客(J. Random Hacker)多半会一边在心里想着 `蠢问题…`,一边用无意义的字面解释来答复你,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。 绝不要自以为**够格**得到答案,你没有;你并没有。毕竟你没有为这种服务支付任何报酬。你将会是自己去**挣到**一个答案,靠提出有内涵的、有趣的、有思维激励作用的问题 —— 一个有潜力能贡献社区经验的问题,而不仅仅是被动的从他人处索取知识。 -另一方面,表明你愿意在找答案的过程中做点什么是一个非常好的开端。`谁能给点提示?`、`我的这个例子里缺了什么?`以及`我应该检查什么地方`比`请把我需要的确切的过程贴出来`更容易得到答复。因为你表现出只要有人能指个正确方向,你就有完成它的能力和决心。 +另一方面,表明你愿意在找答案的过程中做点什么是一个非常好的开端。`谁能给点提示?`、`我的这个例子里缺了什么?` 以及 `我应该检查什么地方` 比 `请把我需要的确切的过程贴出来` 更容易得到答复。因为你表现出只要有人能指个正确方向,你就有完成它的能力和决心。 ## 当你提问时 @@ -114,7 +116,7 @@ Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu 因为 Google 索引是即时的,在看 Stack Exchange 之前先在 Google 搜索。有很高的几率某人已经问了一个类似的问题,而且 Stack Exchange 网站们往往会是搜索结果中最前面几个。如果你在 Google 上没有找到任何答案,你再到特定相关主题的网站去找。用标签(Tag)搜索能让你更缩小你的搜索结果。 -Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/sites),以下是最常用的几个站: +Stack Exchange 已经成长到 [超过一百个网站](https://stackexchange.com/sites),以下是最常用的几个站: - Super User 是问一些通用的电脑问题,如果你的问题跟代码或是写程序无关,只是一些网络连线之类的,请到这里。 - Stack Overflow 是问写程序有关的问题。 @@ -149,15 +151,15 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ ### 使用有意义且描述明确的标题 -在邮件列表、新闻群组或论坛中,大约 50 字以内的标题是抓住资深专家注意力的好机会。别用喋喋不休的`帮帮忙`、`跪求`、`急`(更别说`救命啊!!!!`这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。不要妄想用你的痛苦程度来打动我们,而应该是在这点空间中使用极简单扼要的描述方式来提出问题。 +在邮件列表、新闻群组或论坛中,大约 50 字以内的标题是抓住资深专家注意力的好机会。别用喋喋不休的 `帮帮忙`、`跪求`、`急`(更别说 `救命啊!!!!` 这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。不要妄想用你的痛苦程度来打动我们,而应该是在这点空间中使用极简单扼要的描述方式来提出问题。 -一个好标题范例是`目标 —— 差异`式的描述,许多技术支持组织就是这样做的。在`目标`部分指出是哪一个或哪一组东西有问题,在`差异`部分则描述与期望的行为不一致的地方。 +一个好标题范例是 `目标 —— 差异` 式的描述,许多技术支持组织就是这样做的。在 `目标` 部分指出是哪一个或哪一组东西有问题,在 `差异` 部分则描述与期望的行为不一致的地方。 > 蠢问题:救命啊!我的笔记本电脑不能正常显示了! > 聪明问题:X.org 6.8.1 的鼠标光标会变形,某牌显卡 MV1005 芯片组。 > 更聪明问题:X.org 6.8.1 的鼠标光标,在某牌显卡 MV1005 芯片组环境下 - 会变形。 -编写`目标 —— 差异` 式描述的过程有助于你组织对问题的细致思考。是什么被影响了? 仅仅是鼠标光标或者还有其它图形?只在 X.org 的 X 版中出现?或只是出现在 6.8.1 版中? 是针对某牌显卡芯片组?或者只是其中的 MV1005 型号? 一个黑客只需瞄一眼就能够立即明白你的环境**和**你遇到的问题。 +编写 `目标 —— 差异` 式描述的过程有助于你组织对问题的细致思考。是什么被影响了? 仅仅是鼠标光标或者还有其它图形?只在 X.org 的 X 版中出现?或只是出现在 6.8.1 版中? 是针对某牌显卡芯片组?或者只是其中的 MV1005 型号? 一个黑客只需瞄一眼就能够立即明白你的环境**和**你遇到的问题。 总而言之,请想像一下你正在一个只显示标题的存档讨论串(Thread)索引中查寻。让你的标题更好地反映问题,可使下一个搜索类似问题的人能够关注这个讨论串,而不用再次提问相同的问题。 @@ -171,9 +173,9 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ ### 使问题容易回复 -以`请将你的回复发送到……`来结束你的问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦,我们也觉得花几秒钟思考你的问题更麻烦。如果你的邮件程序不支持这样做,[换个好点的](http://linuxmafia.com/faq/Mail/muas.html);如果是操作系统不支持这种邮件程序,也换个好点的。 +以 `请将你的回复发送到……` 来结束你的问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦,我们也觉得花几秒钟思考你的问题更麻烦。如果你的邮件程序不支持这样做,[换个好点的](http://linuxmafia.com/faq/Mail/muas.html);如果是操作系统不支持这种邮件程序,也换个好点的。 -在论坛,要求通过电子邮件回复是非常无礼的,除非你认为回复的信息可能比较敏感(有人会为了某些未知的原因,只让你而不是整个论坛知道答案)。如果你只是想在有人回复讨论串时得到电子邮件提醒,可以要求网页论坛发送给你。几乎所有论坛都支持诸如`追踪此讨论串`、`有回复时发送邮件提醒`等功能。 +在论坛,要求通过电子邮件回复是非常无礼的,除非你认为回复的信息可能比较敏感(有人会为了某些未知的原因,只让你而不是整个论坛知道答案)。如果你只是想在有人回复讨论串时得到电子邮件提醒,可以要求网页论坛发送给你。几乎所有论坛都支持诸如 `追踪此讨论串`、`有回复时发送邮件提醒` 等功能。 ### 使用清晰、正确、精准且合乎语法的语句 @@ -181,9 +183,9 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ 正确的拼写、标点符号和大小写是很重要的。一般来说,如果你觉得这样做很麻烦,不想在乎这些,那我们也觉得麻烦,不想在乎你的提问。花点额外的精力斟酌一下字句,用不着太僵硬与正式 —— 事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它**必须很**准确,而且有迹象表明你是在思考和关注问题。 -正确地拼写、使用标点和大小写,不要将`its`混淆为`it's`,`loose`搞成`lose`或者将`discrete`弄成`discreet`。不要**全部用大写**,这会被视为无礼的大声嚷嚷(全部小写也好不到哪去,因为不易阅读。[Alan Cox](http://en.wikipedia.org/wiki/Alan_Cox) 也许可以这样做,但你不行)。 +正确地拼写、使用标点和大小写,不要将 `its` 混淆为 `it's`,`loose` 搞成 `lose` 或者将 `discrete` 弄成 `discreet`。不要**全部用大写**,这会被视为无礼的大声嚷嚷(全部小写也好不到哪去,因为不易阅读。[Alan Cox](http://en.wikipedia.org/wiki/Alan_Cox) 也许可以这样做,但你不行)。 -更白话的说,如果你写得像是个半文盲[译注:[小白](http://zh.wikipedia.org/wiki/小白)],那多半得不到理睬。也不要使用即时通信中的简写或[火星文](http://zh.wikipedia.org/wiki/火星文),如将`的`简化为`d`会使你看起来像一个为了少打几个键而省字的小白。更糟的是,如果像个小孩似地鬼画符那绝对是在找死,可以肯定没人会理你(或者最多是给你一大堆指责与挖苦)。 +更白话的说,如果你写得像是个半文盲 [译注:[小白](http://zh.wikipedia.org/wiki/小白)],那多半得不到理睬。也不要使用即时通信中的简写或 [火星文](http://zh.wikipedia.org/wiki/火星文),如将 `的` 简化为 `d` 会使你看起来像一个为了少打几个键而省字的小白。更糟的是,如果像个小孩似地鬼画符那绝对是在找死,可以肯定没人会理你(或者最多是给你一大堆指责与挖苦)。 如果在使用非母语的论坛提问,你可以犯点拼写和语法上的小错,但决不能在思考上马虎(没错,我们通常能弄清两者的分别)。同时,除非你知道回复者使用的语言,否则请使用英语书写。繁忙的黑客一般会直接删除用他们看不懂的语言写的消息。在网络上英语是通用语言,用英语书写可以将你的问题在尚未被阅读就被直接删除的可能性降到最低。 @@ -215,21 +217,21 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ - 使用 MIME 附件通常是可以的,前提是真正有内容(譬如附带的源代码或 patch),而不仅仅是邮件程序生成的模板(譬如只是信件内容的拷贝)。 - 不要发送一段文字只是一行句子但自动换行后会变成多行的邮件(这使得回复部分内容非常困难)。设想你的读者是在 80 个字符宽的终端机上阅读邮件,最好设置你的换行分割点小于 80 字。 - 但是,对一些特殊的文件**不要**设置固定宽度(譬如日志文件拷贝或会话记录)。数据应该原样包含,让回复者有信心他们看到的是和你看到的一样的东西。 -- 在英语论坛中,不要使用`Quoted-Printable` MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的,但很多邮件程序并不支持这种编码。当它们处理换行时,那些文本中四处散布的`=20`符号既难看也分散注意力,甚至有可能破坏内容的语意。 +- 在英语论坛中,不要使用 `Quoted-Printable` MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的,但很多邮件程序并不支持这种编码。当它们处理换行时,那些文本中四处散布的 `=20` 符号既难看也分散注意力,甚至有可能破坏内容的语意。 - 绝对,**永远**不要指望黑客们阅读使用封闭格式编写的文档,像微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就像有人将还在冒热气的猪粪倒在你家门口时你的反应一样。即便他们能够处理,他们也很厌恶这么做。 -- 如果你从使用 Windows 的电脑发送电子邮件,关闭微软愚蠢的`智能引号`功能 (从[选项] > [校订] > [自动校正选项],勾选掉`智能引号`单选框),以免在你的邮件中到处散布垃圾字符。 -- 在论坛,勿滥用`表情符号`和`HTML`功能(当它们提供时)。一两个表情符号通常没有问题,但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来像个傻笑的小姑娘。这通常不是个好主意,除非你只是对性而不是对答案感兴趣。 +- 如果你从使用 Windows 的电脑发送电子邮件,关闭微软愚蠢的 `智能引号` 功能 (从 [选项] > [校订] > [自动校正选项],勾选掉 `智能引号` 单选框),以免在你的邮件中到处散布垃圾字符。 +- 在论坛,勿滥用 `表情符号` 和 `HTML` 功能(当它们提供时)。一两个表情符号通常没有问题,但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来像个傻笑的小姑娘。这通常不是个好主意,除非你只是对性而不是对答案感兴趣。 -如果你使用图形用户界面的邮件程序(如微软公司的 Outlook 或者其它类似的),注意它们的默认设置不一定满足这些要求。大多数这类程序有基于选单的`查看源代码`命令,用它来检查发送文件夹中的邮件,以确保发送的是纯文本文件同时没有一些奇怪的字符。 +如果你使用图形用户界面的邮件程序(如微软公司的 Outlook 或者其它类似的),注意它们的默认设置不一定满足这些要求。大多数这类程序有基于选单的 `查看源代码` 命令,用它来检查发送文件夹中的邮件,以确保发送的是纯文本文件同时没有一些奇怪的字符。 ### 精确地描述问题并言之有物 - 仔细、清楚地描述你的问题或 Bug 的症状。 -- 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:`Fedora Core 4`、`Slackware 9.1`等)。 +- 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:`Fedora Core 4`、`Slackware 9.1` 等)。 - 描述在提问前你是怎样去研究和理解这个问题的。 - 描述在提问前为确定问题而采取的诊断步骤。 - 描述最近做过什么可能相关的硬件或软件变更。 -- 尽可能地提供一个可以`重现这个问题的可控环境`的方法。 +- 尽可能地提供一个可以 `重现这个问题的可控环境` 的方法。 尽量去揣测一个黑客会怎样反问你,在你提问之前预先将黑客们可能提出的问题回答一遍。 @@ -245,11 +247,11 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ ### 别动辄声称找到 Bug -当你在使用软件中遇到问题,除非你非常、**非常**的有根据,不要动辄声称找到了 Bug。提示:除非你能提供解决问题的源代码补丁,或者提供回归测试来表明前一版本中行为不正确,否则你都多半不够完全确信。这同样适用在网页和文件,如果你(声称)发现了文件的`Bug`,你应该能提供相应位置的修正或替代文件。 +当你在使用软件中遇到问题,除非你非常、**非常**的有根据,不要动辄声称找到了 Bug。提示:除非你能提供解决问题的源代码补丁,或者提供回归测试来表明前一版本中行为不正确,否则你都多半不够完全确信。这同样适用在网页和文件,如果你(声称)发现了文件的 `Bug`,你应该能提供相应位置的修正或替代文件。 -请记得,还有其他许多用户没遇到你发现的问题,否则你在阅读文件或搜索网页时就应该发现了(你在抱怨前[已经做了这些,是吧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md#在提问之前)?)。这也意味着很有可能是你弄错了而不是软件本身有问题。 +请记得,还有其他许多用户没遇到你发现的问题,否则你在阅读文件或搜索网页时就应该发现了(你在抱怨前 [已经做了这些,是吧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md#在提问之前)?)。这也意味着很有可能是你弄错了而不是软件本身有问题。 -编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了 Bug,也就是在质疑他们的能力,即使你是对的,也有可能会冒犯到其中某部分人。当你在标题中嚷嚷着有`Bug`时,这尤其严重。 +编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了 Bug,也就是在质疑他们的能力,即使你是对的,也有可能会冒犯到其中某部分人。当你在标题中嚷嚷着有 `Bug` 时,这尤其严重。 提问时,即使你私下非常确信已经发现一个真正的 Bug,最好写得像是**你**做错了什么。如果真的有 Bug,你会在回复中看到这点。这样做的话,如果真有 Bug,维护者就会向你道歉,这总比你惹恼别人然后欠别人一个道歉要好一点。 @@ -279,7 +281,7 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ 问题发生前的一系列操作,往往就是对找出问题最有帮助的线索。因此,你的说明里应该包含你的操作步骤,以及机器和软件的反应,直到问题发生。在命令行处理的情况下,提供一段操作记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会非常有帮助。 -如果挂掉的程序有诊断选项(如 -v 的详述开关),试着选择这些能在记录中增加调试信息的选项。记住,`多`不等于`好`。试着选取适当的调试级别以便提供有用的信息而不是让读者淹没在垃圾中。 +如果挂掉的程序有诊断选项(如 -v 的详述开关),试着选择这些能在记录中增加调试信息的选项。记住,`多` 不等于 `好`。试着选取适当的调试级别以便提供有用的信息而不是让读者淹没在垃圾中。 如果你的说明很长(如超过四个段落),在开头简述问题,接下来再按时间顺序详述会有所帮助。这样黑客们在读你的记录时就知道该注意哪些内容了。 @@ -297,7 +299,7 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ > 我正试着用替换一幅图片的色码(color table)成自己选定的色码,我现在知道的唯一方法是编辑每个色码区块(table slot), 但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。 -第二种提问法比较聪明,你可能得到像是`建议采用另一个更合适的工具`的回复。 +第二种提问法比较聪明,你可能得到像是 `建议采用另一个更合适的工具` 的回复。 ### 别要求使用私人电邮回复 @@ -305,7 +307,7 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ 当你要求私下回复时,这个过程和奖励都被中止。别这样做,让**回复者**来决定是否私下回答 —— 如果他真这么做了,通常是因为他认为问题编写太差或者太肤浅,以至于不可能使其他人产生兴趣。 -这条规则存在一条有限的例外,如果你确信提问可能会引来大量雷同的回复时,那么这个神奇的提问句会是`向我发电邮,我将为论坛归纳这些回复`。试着将邮件列表或新闻群组从洪水般的雷同回复中解救出来是非常有礼貌的 —— 但你必须信守诺言。 +这条规则存在一条有限的例外,如果你确信提问可能会引来大量雷同的回复时,那么这个神奇的提问句会是 `向我发电邮,我将为论坛归纳这些回复`。试着将邮件列表或新闻群组从洪水般的雷同回复中解救出来是非常有礼貌的 —— 但你必须信守诺言。 ### 清楚明确的表达你的问题以及需求 @@ -315,13 +317,13 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ 要理解专家们所处的世界,请把专业技能想像为充裕的资源,而回复的时间则是稀缺的资源。你要求他们奉献的时间越少,你越有可能从真正专业而且很忙的专家那里得到解答。 -所以,界定一下你的问题,使专家花在辨识你的问题和回答所需要付出的时间减到最少,这技巧对你有用答案相当有帮助 —— 但这技巧通常和简化问题有所区别。因此,问`我想更好地理解 X,可否指点一下哪有好一点说明?`通常比问`你能解释一下 X 吗?`更好。如果你的代码不能运作,通常请别人看看哪里有问题,比要求别人替你改正要明智得多。 +所以,界定一下你的问题,使专家花在辨识你的问题和回答所需要付出的时间减到最少,这技巧对你有用答案相当有帮助 —— 但这技巧通常和简化问题有所区别。因此,问 `我想更好地理解 X,可否指点一下哪有好一点说明?` 通常比问 `你能解释一下 X 吗?` 更好。如果你的代码不能运作,通常请别人看看哪里有问题,比要求别人替你改正要明智得多。 ### 询问有关代码的问题时 -别要求他人帮你调试有问题的代码,不提示一下应该从何入手。张贴几百行的代码,然后说一声:`它不能工作`会让你完全被忽略。只贴几十行代码,然后说一句:`在第七行以后,我期待它显示 ,但实际出现的是 `比较有可能让你得到回应。 +别要求他人帮你调试有问题的代码,不提示一下应该从何入手。张贴几百行的代码,然后说一声:`它不能工作` 会让你完全被忽略。只贴几十行代码,然后说一句:`在第七行以后,我期待它显示 ,但实际出现的是 ` 比较有可能让你得到回应。 -最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例(bug-demonstrating test case)。什么是最精简的测试用例?那是问题的缩影;一小个程序片段能**刚好**展示出程序的异常行为,而不包含其他令人分散注意力的内容。怎么制作最精简的测试用例?如果你知道哪一行或哪一段代码会造成异常的行为,复制下来并加入足够重现这个状况的代码(例如,足以让这段代码能被编译/直译/被应用程序处理)。如果你无法将问题缩减到一个特定区块,就复制一份代码并移除不影响产生问题行为的部分。总之,测试用例越小越好(查看[话不在多而在精](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md#话不在多而在精)一节)。 +最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例(bug-demonstrating test case)。什么是最精简的测试用例?那是问题的缩影;一小个程序片段能**刚好**展示出程序的异常行为,而不包含其他令人分散注意力的内容。怎么制作最精简的测试用例?如果你知道哪一行或哪一段代码会造成异常的行为,复制下来并加入足够重现这个状况的代码(例如,足以让这段代码能被编译/直译/被应用程序处理)。如果你无法将问题缩减到一个特定区块,就复制一份代码并移除不影响产生问题行为的部分。总之,测试用例越小越好(查看 [话不在多而在精](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md#话不在多而在精) 一节)。 一般而言,要得到一段相当精简的测试用例并不太容易,但永远先尝试这样做的是种好习惯。这种方式可以帮助你了解如何自行解决这个问题 —— 而且即使你的尝试不成功,黑客们也会看到你在尝试取得答案的过程中付出了努力,这可以让他们更愿意与你合作。 @@ -335,41 +337,41 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ ### 去掉无意义的提问句 -避免用无意义的话结束提问,例如`有人能帮我吗?`或者`这有答案吗?`。 +避免用无意义的话结束提问,例如 `有人能帮我吗?` 或者 `这有答案吗?`。 首先:如果你对问题的描述不是很好,这样问更是画蛇添足。 -其次:由于这样问是画蛇添足,黑客们会很厌烦你 —— 而且通常会用逻辑上正确,但毫无意义的回答来表示他们的蔑视, 例如:`没错,有人能帮你`或者`不,没答案`。 +其次:由于这样问是画蛇添足,黑客们会很厌烦你 —— 而且通常会用逻辑上正确,但毫无意义的回答来表示他们的蔑视, 例如:`没错,有人能帮你` 或者 `不,没答案`。 -一般来说,避免用 `是或否`、`对或错`、`有或没有`类型的问句,除非你想得到[是或否类型的回答](https://strcat.de/questions-with-yes-or-no-answers.html)。 +一般来说,避免用 `是或否`、`对或错`、`有或没有` 类型的问句,除非你想得到 [是或否类型的回答](https://strcat.de/questions-with-yes-or-no-answers.html)。 -### 即使你很急也不要在标题写`紧急` +### 即使你很急也不要在标题写 `紧急` -这是你的问题,不是我们的。宣称`紧急`极有可能事与愿违:大多数黑客会直接删除无礼和自私地企图即时引起关注的问题。更严重的是,`紧急`这个字(或是其他企图引起关注的标题)通常会被垃圾信过滤器过滤掉 —— 你希望能看到你问题的人可能永远也看不到。 +这是你的问题,不是我们的。宣称 `紧急` 极有可能事与愿违:大多数黑客会直接删除无礼和自私地企图即时引起关注的问题。更严重的是,`紧急` 这个字(或是其他企图引起关注的标题)通常会被垃圾信过滤器过滤掉 —— 你希望能看到你问题的人可能永远也看不到。 有半个例外的情况是,如果你是在一些很高调,会使黑客们兴奋的地方,也许值得这样去做。在这种情况下,如果你有时间压力,也很有礼貌地提到这点,人们也许会有兴趣回答快一点。 -当然,这风险很大,因为黑客们兴奋的点多半与你的不同。譬如从 NASA 国际空间站(International Space Station)发这样的标题没有问题,但用自我感觉良好的慈善行为或政治原因发肯定不行。事实上,张贴诸如`紧急:帮我救救这个毛茸茸的小海豹!`肯定让你被黑客忽略或惹恼他们,即使他们认为毛茸茸的小海豹很重要。 +当然,这风险很大,因为黑客们兴奋的点多半与你的不同。譬如从 NASA 国际空间站(International Space Station)发这样的标题没有问题,但用自我感觉良好的慈善行为或政治原因发肯定不行。事实上,张贴诸如 `紧急:帮我救救这个毛茸茸的小海豹!` 肯定让你被黑客忽略或惹恼他们,即使他们认为毛茸茸的小海豹很重要。 如果你觉得这点很不可思议,最好再把这份指南剩下的内容多读几遍,直到你弄懂了再发文。 ### 礼多人不怪,而且有时还很有帮助 -彬彬有礼,多用`请`和`谢谢您的关注`,或`谢谢你的关照`。让大家都知道你对他们花时间免费提供帮助心存感激。 +彬彬有礼,多用 `请` 和 `谢谢您的关注`,或 `谢谢你的关照`。让大家都知道你对他们花时间免费提供帮助心存感激。 坦白说,这一点并没有比使用清晰、正确、精准且合乎语法和避免使用专用格式重要(也不能取而代之)。黑客们一般宁可读有点唐突但技术上鲜明的 Bug 报告,而不是那种有礼但含糊的报告。(如果这点让你不解,记住我们是按问题能教给我们什么来评价问题的价值的) 然而,如果你有一串的问题待解决,客气一点肯定会增加你得到有用回应的机会。 -(我们注意到,自从本指南发布后,从资深黑客那里得到的唯一严重缺陷反馈,就是对预先道谢这一条。一些黑客觉得`先谢了`意味着事后就不用再感谢任何人的暗示。我们的建议是要么先说`先谢了`,**然后**事后再对回复者表示感谢,或者换种方式表达感激,譬如用`谢谢你的关注`或`谢谢你的关照`。) +(我们注意到,自从本指南发布后,从资深黑客那里得到的唯一严重缺陷反馈,就是对预先道谢这一条。一些黑客觉得 `先谢了` 意味着事后就不用再感谢任何人的暗示。我们的建议是要么先说 `先谢了`,**然后**事后再对回复者表示感谢,或者换种方式表达感激,譬如用 `谢谢你的关注` 或 `谢谢你的关照`。) ### 问题解决后,加个简短的补充说明 问题解决后,向所有帮助过你的人发个说明,让他们知道问题是怎样解决的,并再一次向他们表示感谢。如果问题在新闻组或者邮件列表中引起了广泛关注,应该在那里贴一个说明比较恰当。 -最理想的方式是向最初提问的话题回复此消息,并在标题中包含`已修正`,`已解决`或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串`问题 X`和`问题 X - 已解决`的潜在回复者就明白不用再浪费时间了(除非他个人觉得`问题 X`的有趣),因此可以利用此时间去解决其它问题。 +最理想的方式是向最初提问的话题回复此消息,并在标题中包含 `已修正`,`已解决` 或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串 `问题 X` 和 `问题 X - 已解决` 的潜在回复者就明白不用再浪费时间了(除非他个人觉得 `问题 X` 的有趣),因此可以利用此时间去解决其它问题。 -补充说明不必很长或是很深入;简单的一句`你好,原来是网线出了问题!谢谢大家 – Bill`比什么也不说要来的好。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。 +补充说明不必很长或是很深入;简单的一句 `你好,原来是网线出了问题!谢谢大家 – Bill` 比什么也不说要来的好。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。 对于有深度的问题,张贴调试记录的摘要是有帮助的。描述问题的最终状态,说明是什么解决了问题,在此**之后**才指明可以避免的盲点。避免盲点的部分应放在正确的解决方案和其它总结材料之后,而不要将此信息搞成侦探推理小说。列出那些帮助过你的名字,会让你交到更多朋友。 @@ -385,9 +387,9 @@ Stack Exchange 已经成长到[超过一百个网站](https://stackexchange.com/ ### RTFM 和 STFW:如何知道你已完全搞砸了 -有一个古老而神圣的传统:如果你收到`RTFM(Read The Fucking Manual)`的回应,回答者认为你**应该去读他妈的手册**。当然,基本上他是对的,你应该去读一读。 +有一个古老而神圣的传统:如果你收到 `RTFM(Read The Fucking Manual)` 的回应,回答者认为你**应该去读他妈的手册**。当然,基本上他是对的,你应该去读一读。 -RTFM 有一个年轻的亲戚。如果你收到`STFW(Search The Fucking Web)`的回应,回答者认为你**应该到他妈的网上搜索**。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 **[Google 是你的朋友](http://lmgtfy.com/)**!) +RTFM 有一个年轻的亲戚。如果你收到 `STFW(Search The Fucking Web)` 的回应,回答者认为你**应该到他妈的网上搜索**。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 **[Google 是你的朋友](http://lmgtfy.com/)**!) 在论坛,你也可能被要求去爬爬论坛的旧文。事实上,有人甚至可能热心地为你提供以前解决此问题的讨论串。但不要依赖这种关照,提问前应该先搜索一下旧文。 @@ -416,7 +418,7 @@ RTFM 有一个年轻的亲戚。如果你收到`STFW(Search The Fucking Web) Jeff Bigler 的观察总结和这个相关也值得一读 (**[tact filters](http://www.mit.edu/~jcb/tact.html)**)。 -在下一节,我们会谈到另一个问题,当**你**行为不当时所会受到的`冒犯`。 +在下一节,我们会谈到另一个问题,当**你**行为不当时所会受到的 `冒犯`。 ## 如何避免扮演失败者 @@ -428,7 +430,7 @@ Jeff Bigler 的观察总结和这个相关也值得一读 (**[tact filters](http 社区的标准不会自行维持,它们是通过参与者积极而**公开地**执行来维持的。不要哭嚎所有的批评都应该通过私下的邮件传送,它不是这样运作的。当有人评论你的一个说法有误或者提出不同看法时,坚持声称受到个人攻击也毫无益处,这些都是失败者的态度。 -也有其它的黑客论坛,受过高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称`如果你不想帮助用户就闭嘴。` 结果造成有想法的参与者纷纷离开,这么做只会使它们沦为毫无意义的唠叨与无用的技术论坛。 +也有其它的黑客论坛,受过高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称 `如果你不想帮助用户就闭嘴。` 结果造成有想法的参与者纷纷离开,这么做只会使它们沦为毫无意义的唠叨与无用的技术论坛。 夸张的讲法是:你要的是“友善”(以上述方式)还是有用?两个里面挑一个。 @@ -500,7 +502,7 @@ Jeff Bigler 的观察总结和这个相关也值得一读 (**[tact filters](http > 问题:我在安装 Linux(或者 X )时有问题,你能帮我吗? -回答:不能,我只有亲自在你的电脑上动手才能找到毛病。还是去找你当地的 Linux 使用群组者寻求实际的指导吧(你能在[这儿](http://www.linux.org/groups/index.html)找到用户群组的清单)。 +回答:不能,我只有亲自在你的电脑上动手才能找到毛病。还是去找你当地的 Linux 使用群组者寻求实际的指导吧(你能在 [这儿](http://www.linux.org/groups/index.html) 找到用户群组的清单)。 注意:如果安装问题与某 Linux 的发行版有关,在它的邮件列表、论坛或本地用户群组中提问也许是恰当的。此时,应描述问题的准确细节。在此之前,先用 `Linux` 和**所有**被怀疑的硬件作关键词仔细搜索。 @@ -548,7 +550,7 @@ Jeff Bigler 的观察总结和这个相关也值得一读 (**[tact filters](http 这个家伙,从另一个角度来看,值得去回答他。他表现出了解决问题的能力,而不是坐等天上掉答案。 -在最后一个问题中,注意`告诉我答案`和`给我启示,指出我还应该做什么诊断工作`之间微妙而又重要的区别。 +在最后一个问题中,注意 `告诉我答案` 和 `给我启示,指出我还应该做什么诊断工作` 之间微妙而又重要的区别。 事实上,后一个问题源自于 2001 年 8 月在 Linux 内核邮件列表(lkml)上的一个真实的提问。我(Eric)就是那个提出问题的人。我在 Tyan S2464 主板上观察到了这种无法解释的锁定现象,列表成员们提供了解决这一问题的重要信息。 @@ -590,16 +592,16 @@ Jeff Bigler 的观察总结和这个相关也值得一读 (**[tact filters](http **正面地回答问题!** 如果这个提问者已经很深入的研究而且也表明已经试过 X 、 Y 、 Z 、 A 、 B 、 C 但没得到结果,回答 `试试看 A 或是 B` 或者 `试试 X 、 Y 、 Z 、 A 、 B 、 C` 并附上一个链接一点用都没有。 -**帮助你的社区从问题中学习。** 当回复一个好问题时,问问自己`如何修改相关文件或常见问题文件以免再次解答同样的问题?`,接着再向文件维护者发一份补丁。 +**帮助你的社区从问题中学习。** 当回复一个好问题时,问问自己 `如何修改相关文件或常见问题文件以免再次解答同样的问题?`,接着再向文件维护者发一份补丁。 -如果你在研究一番后才作出了回答,**展现你的技巧而不是直接端出结果**。毕竟`授人以鱼不如授人以渔`。 +如果你在研究一番后才作出了回答,**展现你的技巧而不是直接端出结果**。毕竟 `授人以鱼不如授人以渔`。 ## 相关资源 如果你需要个人电脑、Unix 系统和网络如何运作的基础知识,参阅 [Unix 系统和网络基本原理](http://en.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/)。 -当你发布软件或补丁时,试着按[软件发布实践](http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html)操作。 +当你发布软件或补丁时,试着按 [软件发布实践](http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html) 操作。 ## 鸣谢 -Evelyn Mitchel 贡献了一些愚蠢问题例子并启发了编写`如何更好地回答问题`这一节, Mikhail Ramendik 贡献了一些特别有价值的建议和改进。 +Evelyn Mitchel 贡献了一些愚蠢问题例子并启发了编写 `如何更好地回答问题` 这一节, Mikhail Ramendik 贡献了一些特别有价值的建议和改进。 diff --git a/wiki/operating-system/Linux/基础/Linux 命令行操作.md b/Tech/operating-system/Linux/基础/Linux 命令行操作.md similarity index 89% rename from wiki/operating-system/Linux/基础/Linux 命令行操作.md rename to Tech/operating-system/Linux/基础/Linux 命令行操作.md index b02ec945..07206ee9 100644 --- a/wiki/operating-system/Linux/基础/Linux 命令行操作.md +++ b/Tech/operating-system/Linux/基础/Linux 命令行操作.md @@ -2,17 +2,18 @@ title: Linux 命令行操作 description: Linux 的命令行操作 keywords: -- Linux -- 命令行操作 + - Linux + - 命令行操作 tags: -- Linux + - Linux/基础 sidebar_position: 2 author: 7Wate date: 2023-03-22 --- 一台完整的计算机是由运算器、控制器、存储器、输入/输出等多种硬件设备共同组成的,而能让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用。 -Shell 就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令告诉终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的**许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器**,这个 Bash 解释器主要有以下4项优势: + +Shell 就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令告诉终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的**许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器**,这个 Bash 解释器主要有以下 4 项优势: - 通过上下方向键来调取执行过的 Linux 命令; - 命令或参数仅需输入前几位就可以用 Tab 键补全; @@ -31,7 +32,7 @@ Shell 就是终端程序的统称,它充当了人与内核(硬件)之间 - **命令参数**:用于**对命令进行调整**,让修改过的命令能更好地贴合工作需求,达到事半功倍的效果。 -Linux命令参数的长格式与短格式示例: +Linux 命令参数的长格式与短格式示例: | 类别 | 示例 | | ------ | ---------- | @@ -40,7 +41,7 @@ Linux命令参数的长格式与短格式示例: - **命令对象**:一般指要处理的文件、目录、用户等资源名称,也就是**命令执行后的承受方**。例如创建一位叫小明的用户、查看一个叫工资表的文件、重启一个 IP 为 192.168.10.10 的系统等。 -Linux系统中的**命令、参数、对象都是严格区分大小写**的。 +Linux 系统中的**命令、参数、对象都是严格区分大小写**的。 ## 目录移动 @@ -86,8 +87,8 @@ $ popd | 按键 | 作用 | | ------------- | ------------------ | -| Tab键 | 自动补全 | -| Tab键 + Tab键 | 匹配所有符合的命令 | +| Tab 键 | 自动补全 | +| Tab 键 + Tab 键 | 匹配所有符合的命令 | ### Ctrl+c @@ -111,7 +112,7 @@ $ popd ## 特殊符号 -### 快捷符号 `!` +### 快捷符号 `!` ```shell # !! 快速执行上条命令 @@ -225,10 +226,10 @@ command1; command2 | 命令 | 全拼 | 说明 | | ------- | -------------------------- | ---------------------------------- | -| apt-get | Advanced Packaging Tool | Ubuntu系统软件包管理工具 | -| yum | Yellowdog Updater Modified | CentOS、Fedora等系统软件包管理工具 | -| dpkg | Debian Package | Debian、Ubuntu等系统软件包管理工具 | -| rpm | Red Hat Package Manager | CentOS、Fedora等系统软件包管理工具 | +| apt-get | Advanced Packaging Tool | Ubuntu 系统软件包管理工具 | +| yum | Yellowdog Updater Modified | CentOS、Fedora 等系统软件包管理工具 | +| dpkg | Debian Package | Debian、Ubuntu 等系统软件包管理工具 | +| rpm | Red Hat Package Manager | CentOS、Fedora 等系统软件包管理工具 | ### 磁盘管理 @@ -252,7 +253,7 @@ command1; command2 | killall | killall | 终止一个指定名称的进程 | | nice | nice | 改变进程优先级 | | renice | renice | 改变正在运行进程的优先级 | -| jobs | jobs | 显示当前shell的活动作业 | +| jobs | jobs | 显示当前 shell 的活动作业 | | bg | background | 将一个进程置于后台 | | fg | foreground | 将一个进程置于前台 | | nohup | no hang up | 在后台运行命令,并不挂起 | @@ -260,7 +261,7 @@ command1; command2 ## 任务 -Linux系统中运行程序时,可以选择在前台或后台运行。在前台运行时,程序会占用终端并且输出信息直接显示在终端中。而在后台运行时,程序在后台默默地执行,不会占用终端并且不会直接显示输出信息。 +Linux 系统中运行程序时,可以选择在前台或后台运行。在前台运行时,程序会占用终端并且输出信息直接显示在终端中。而在后台运行时,程序在后台默默地执行,不会占用终端并且不会直接显示输出信息。 ### 运行 @@ -292,7 +293,7 @@ $ ls /nonexistent |& less ### 管理 -#### jobs +#### Jobs jobs 命令可以列出**当前终端会话中正在运行的后台任务**。每个任务都有一个唯一的编号,**可以使用该编号来操作任务**,例如将任务切换到前台或终止任务。 @@ -303,15 +304,15 @@ $ jobs | 选项 | 选项全拼 | 描述 | | ---- | --------- | ------------------------------ | -| -l | --list | 列出每个作业的进程ID号 | -| -p | --pid | 仅列出作业的进程ID号 | +| -l | --list | 列出每个作业的进程 ID 号 | +| -p | --pid | 仅列出作业的进程 ID 号 | | -n | --new | 显示自上次通知以后已更改的作业 | | -r | --running | 仅列出运行中的作业 | | -s | --stopped | 仅列出停止的作业 | #### fg、bg -`fg`命令可以将一个后台任务切换到前台运行,`bg`命令可以将一个在后台暂停的任务切换到后台继续运行。 +`fg` 命令可以将一个后台任务切换到前台运行,`bg` 命令可以将一个在后台暂停的任务切换到后台继续运行。 ```shell # 将一个后台任务切换到前台运行,假设任务的编号是 1 @@ -321,7 +322,7 @@ $ fg %1 $ bg %1 ``` -#### ps +#### Ps `ps` 命令可以**显示系统中所有进程的状态,包括后台运行的进程。** @@ -343,9 +344,9 @@ $ ps | -e | --every | 列出所有进程(在某些系统上,此选项为 -A) | | -p | --pid | 列出指定进程号的进程 | -#### kill +#### Kill -`kill` 命令是用于发送特定的信号到操作系统中的进程。默认情况下,如果不指定信号,`kill` 命令会发送 `TERM` (终止)信号,这会请求一个进程自我终止。 +`kill` 命令是用于发送特定的信号到操作系统中的进程。默认情况下,如果不指定信号,`kill` 命令会发送 `TERM` (终止) 信号,这会请求一个进程自我终止。 ```shell # 终止一个后台任务,假设任务的编号是 1 @@ -360,12 +361,12 @@ $ kill PID | --------------- | -------------------------------------- | | `-l` | 列出所有可用的信号 | | `-s signal` | 指定发送的信号,可以是信号名或信号号码 | -| `-p` | 不发送信号,只打印进程ID | +| `-p` | 不发送信号,只打印进程 ID | | `-9` 或 `-KILL` | 发送 `KILL` 信号强制终止进程 | ## 管道 -**管道命令符把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入**,其执行格式为「命令A | 命令B」。按下键盘上的 Shift+反斜杠(\)键即可输入管道符, +**管道命令符把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入**,其执行格式为「命令 A | 命令 B」。按下键盘上的 Shift+ 反斜杠(\)键即可输入管道符, ```shell # 输出禁止登录用户行数 @@ -375,7 +376,7 @@ grep /sbin/nologin /etc/passwd | wc -l ps aux | grep bash ``` -**命令符可以无限组合,例如:命令A | 命令B | 命令C |……** +**命令符可以无限组合,例如:命令 A | 命令 B | 命令 C |……** > 曾经有位东北的同学做了一个特别贴切的类比:把管道符当做流水线作业,这跟吃顿烧烤是同一个道理,即第一个人负责切肉,第二个人负责串肉,第三个人负责烧烤,最后的处理结果交付给用户。 @@ -383,11 +384,11 @@ ps aux | grep bash 输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。 -- **标准输入重定向(STDIN,文件描述符为0)**:默认从键盘输入,也可从其他文件或命令中输入。 +- **标准输入重定向(STDIN,文件描述符为 0)**:默认从键盘输入,也可从其他文件或命令中输入。 -- **标准输出重定向(STDOUT,文件描述符为1)**:默认输出到屏幕。 +- **标准输出重定向(STDOUT,文件描述符为 1)**:默认输出到屏幕。 -- **错误输出重定向(STDERR,文件描述符为2)**:默认输出到屏幕。 +- **错误输出重定向(STDERR,文件描述符为 2)**:默认输出到屏幕。 *对于重定向中的标准输出模式,可以省略**文件描述符 1 不写,而错误输出模式的文件描述符 2 是必须要写的。*** @@ -430,7 +431,7 @@ $ ls /nonexistentdirectory &>> all_output.txt | -------------------- | -------------------------------------------- | | 命令 < 文件 | 将文件作为命令的标准输入 | | 命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 | -| 命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 | +| 命令 < 文件 1 > 文件 2 | 将文件 1 作为命令的标准输入并将标准输出到文件 2 | ### 输出重定向 @@ -492,26 +493,26 @@ Sun Sep 4 22:38:10 PDT 2023 ## 环境变量 -**在Linux系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。** +**在 Linux 系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。** -Linux系统中最重要的 10 个环境变量 +Linux 系统中最重要的 10 个环境变量 | 变量名称 | 作用 | | ------------ | -------------------------------- | | HOME | 用户的主目录(即家目录) | -| SHELL | 用户在使用的Shell解释器名称 | +| SHELL | 用户在使用的 Shell 解释器名称 | | HISTSIZE | 输出的历史命令记录条数 | | HISTFILESIZE | 保存的历史命令记录条数 | | MAIL | 邮件保存路径 | | LANG | 系统语言、语系名称 | | RANDOM | 生成一个随机数字 | -| PS1 | Bash解释器的提示符 | +| PS1 | Bash 解释器的提示符 | | PATH | 定义解释器搜索用户执行命令的路径 | | EDITOR | 用户默认的文本编辑器 | ## 帮助文档 -### man +### Man 使用 **man** 命令查看到的帮助内容信息 diff --git a/wiki/operating-system/Linux/基础/Linux 安装和配置.md b/Tech/operating-system/Linux/基础/Linux 安装和配置.md similarity index 95% rename from wiki/operating-system/Linux/基础/Linux 安装和配置.md rename to Tech/operating-system/Linux/基础/Linux 安装和配置.md index df47d29b..1f5e1792 100644 --- a/wiki/operating-system/Linux/基础/Linux 安装和配置.md +++ b/Tech/operating-system/Linux/基础/Linux 安装和配置.md @@ -2,11 +2,11 @@ title: Linux 安装和配置 description: Linux的安装和配置 keywords: -- Linux -- 安装 -- 配置 + - Linux + - 安装 + - 配置 tags: -- Linux + - Linux/基础 sidebar_position: 1 author: 7Wate date: 2023-03-21 @@ -42,7 +42,7 @@ GNU/Linux 有许多不同的发行版可供选择,如 Debian、CentOS/RHEL、 在选择好自己的发行版后,我们需要将其安装到计算机上并进行配置。下面是 GNU/Linux 安装的一些基本步骤: -1. 下载并刻录光盘或制作U盘启动盘。 +1. 下载并刻录光盘或制作 U 盘启动盘。 2. 进入 BIOS 设置,设置计算机从光盘或 U 盘启动。 3. 启动后进入安装程序,进行分区、格式化、挂载硬盘等操作。 4. 安装操作系统并进行基本设置,如选择时区、语言、设置用户等。 @@ -68,7 +68,7 @@ bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirro ## GNU/Linux 的基本设置和管理 -在完成基本的配置后,我们需要对GNU/Linux进行一些基本的设置和管理。下面是一些常见的设置和管理操作: +在完成基本的配置后,我们需要对 GNU/Linux 进行一些基本的设置和管理。下面是一些常见的设置和管理操作: 1. 配置用户和权限,如添加用户、设置用户组、分配权限等。 2. 管理软件包,如更新、安装、删除软件包等。 diff --git a/wiki/operating-system/Linux/基础/Linux 文件管理.md b/Tech/operating-system/Linux/基础/Linux 文件管理.md similarity index 83% rename from wiki/operating-system/Linux/基础/Linux 文件管理.md rename to Tech/operating-system/Linux/基础/Linux 文件管理.md index 52d88e44..b1322ba7 100644 --- a/wiki/operating-system/Linux/基础/Linux 文件管理.md +++ b/Tech/operating-system/Linux/基础/Linux 文件管理.md @@ -2,10 +2,10 @@ title: Linux 文件管理 description: Linux 文件管理 keywords: -- Linux -- 文件管理 + - Linux + - 文件管理 tags: -- Linux + - Linux/基础 sidebar_position: 3 author: 7Wate date: 2023-03-30 @@ -87,7 +87,7 @@ Nano 是一款基于命令行的文本编辑器,它是 Linux 中最常用的 | ---------- | -------------------- | | `Ctrl + G` | 显示帮助文档 | | `Ctrl + O` | 保存文件 | -| `Ctrl + X` | 退出Nano | +| `Ctrl + X` | 退出 Nano | | `Ctrl + K` | 剪切当前行 | | `Ctrl + U` | 粘贴剪切的行 | | `Ctrl + W` | 查找文本 | @@ -126,17 +126,17 @@ Nano 是一款基于命令行的文本编辑器,它是 Linux 中最常用的 6. 保存和退出: - 使用 `Ctrl + O` 保存文件,使用 `Ctrl + X` 退出Nano编辑器。 + 使用 `Ctrl + O` 保存文件,使用 `Ctrl + X` 退出 Nano 编辑器。 ### Vim -Vim 是一款文本编辑器,也是Linux中最常用的编辑器之一。Vim 支持多种编辑模式,包括命令模式、插入模式和可视模式。以下是 Vim 的常用命令: +Vim 是一款文本编辑器,也是 Linux 中最常用的编辑器之一。Vim 支持多种编辑模式,包括命令模式、插入模式和可视模式。以下是 Vim 的常用命令: | 命令 | 功能 | | ----- | -------------------------- | | `:w` | 保存文件 | -| `:q` | 退出Vim | -| `:wq` | 保存文件并退出Vim | +| `:q` | 退出 Vim | +| `:wq` | 保存文件并退出 Vim | | `i` | 进入插入模式 | | `Esc` | 退出插入模式并返回命令模式 | | `v` | 进入可视模式 | @@ -185,7 +185,7 @@ Vim 是一款文本编辑器,也是Linux中最常用的编辑器之一。Vim ### Tar -Tar(磁带归档器,Tape Archive)是一种用于文件打包(归档)的 UNIX 和 Linux 系统上的实用程序。它能将多个文件和目录合并成一个单独的归档文件,便于文件的传输、备份和存储。需要注意的是,Tar 本身并不具备压缩功能,但它可以与其他压缩工具(如Gzip、Bzip2等)结合使用,以实现文件归档与压缩的需求。 +Tar(磁带归档器,Tape Archive)是一种用于文件打包(归档)的 UNIX 和 Linux 系统上的实用程序。它能将多个文件和目录合并成一个单独的归档文件,便于文件的传输、备份和存储。需要注意的是,Tar 本身并不具备压缩功能,但它可以与其他压缩工具(如 Gzip、Bzip2 等)结合使用,以实现文件归档与压缩的需求。 #### 优点 @@ -215,10 +215,10 @@ Tar(磁带归档器,Tape Archive)是一种用于文件打包(归档) | `tar -cvf archive.tar file1 file2 directory1` | 创建归档文件 | | `tar -xvf archive.tar` | 解压缩归档文件 | | `tar -tvf archive.tar` | 查看归档文件的内容 | -| `tar -zcvf archive.tar.gz file1 file2 directory1` | 压缩归档文件为.gz格式 | -| `tar -zxvf archive.tar.gz` | 解压缩.gz格式的归档文件 | -| `tar -jcvf archive.tar.bz2 file1 file2 directory1` | 压缩归档文件为.bz2格式 | -| `tar -jxvf archive.tar.bz2` | 解压缩.bz2格式的归档文件 | +| `tar -zcvf archive.tar.gz file1 file2 directory1` | 压缩归档文件为.gz 格式 | +| `tar -zxvf archive.tar.gz` | 解压缩.gz 格式的归档文件 | +| `tar -jcvf archive.tar.bz2 file1 file2 directory1` | 压缩归档文件为.bz2 格式 | +| `tar -jxvf archive.tar.bz2` | 解压缩.bz2 格式的归档文件 | | `tar -P` | 保留绝对路径 | | `tar --exclude='*.log' directory1` | 排除指定文件或目录 | @@ -230,19 +230,19 @@ Tar(磁带归档器,Tape Archive)是一种用于文件打包(归档) | `-x` | `--extract` | 解压归档文件 | | `-t` | `--list` | 查看归档文件中的文件列表 | | `-f` | `--file` | 指定归档文件的名称 | -| `-z` | `--gzip` | 使用gzip压缩算法压缩归档文件 | -| `-j` | `--bzip2` | 使用bzip2压缩算法压缩归档文件 | +| `-z` | `--gzip` | 使用 gzip 压缩算法压缩归档文件 | +| `-j` | `--bzip2` | 使用 bzip2 压缩算法压缩归档文件 | | `-v` | `--verbose` | 在执行操作时显示详细信息 | | `-P` | `--absolute-names` | 保留文件和目录的绝对路径 | | `--exclude` | `--exclude=PATTERN` | 排除匹配指定模式的文件或目录 | ### Zip -ZIP(Zone Information Protocol)是一种广泛使用的文件压缩和归档格式工具,它可以将多个文件或目录打包成一个单独的文件,以便于传输、备份和存档。这种格式最初是由Phil Katz在1989年开发的,现在已成为一种通用的归档和压缩标准。 +ZIP(Zone Information Protocol)是一种广泛使用的文件压缩和归档格式工具,它可以将多个文件或目录打包成一个单独的文件,以便于传输、备份和存档。这种格式最初是由 Phil Katz 在 1989 年开发的,现在已成为一种通用的归档和压缩标准。 #### 优点 -1. 跨平台兼容性:Zip 是一种通用的文件压缩和归档格式,几乎所有的操作系统(如Windows、macOS、Linux等)都支持Zip格式,具有很强的跨平台兼容性。 +1. 跨平台兼容性:Zip 是一种通用的文件压缩和归档格式,几乎所有的操作系统(如 Windows、macOS、Linux 等)都支持 Zip 格式,具有很强的跨平台兼容性。 2. 集成压缩和归档功能:Zip 同时具备文件压缩和归档功能,可以将多个文件和目录压缩成一个文件,便于传输和存储。 3. 压缩率适中:Zip 格式的压缩率适中,能有效减少文件大小,从而节省存储空间和加快文件传输速度。 4. 随机访问:Zip 支持随机访问,可以在不解压整个压缩包的情况下提取单个文件。 @@ -250,7 +250,7 @@ ZIP(Zone Information Protocol)是一种广泛使用的文件压缩和归档 #### 缺点 -1. 压缩效率:与一些专门的压缩算法(如7z、Bzip2等)相比,Zip 的压缩效率较低,可能无法获得最佳的压缩效果。 +1. 压缩效率:与一些专门的压缩算法(如 7z、Bzip2 等)相比,Zip 的压缩效率较低,可能无法获得最佳的压缩效果。 2. 加密安全性:Zip 的标准加密算法较弱,容易受到密码破解工具的攻击。虽然现代的 Zip 实现支持更强大的加密算法,但并非所有的压缩工具都支持这些算法。 #### 适用场景 @@ -260,7 +260,7 @@ ZIP(Zone Information Protocol)是一种广泛使用的文件压缩和归档 3. 软件分发:开发者经常使用 Zip 格式打包软件和资源,便于用户下载和安装。 4. 文档压缩:将文档、图片等资料压缩成 Zip 格式,方便存储和分享。 -总的来说,Zip 是一种广泛使用的文件压缩和归档格式,具有很强的跨平台兼容性。它可以将多个文件和目录压缩成一个文件,便于传输和存储。Zip 的压缩率适中,支持随机访问和密码保护。然而,与一些专门的压缩算法(如7z、Bzip2等)相比,Zip 的压缩效率较低,可能无法获得最佳的压缩效果。 +总的来说,Zip 是一种广泛使用的文件压缩和归档格式,具有很强的跨平台兼容性。它可以将多个文件和目录压缩成一个文件,便于传输和存储。Zip 的压缩率适中,支持随机访问和密码保护。然而,与一些专门的压缩算法(如 7z、Bzip2 等)相比,Zip 的压缩效率较低,可能无法获得最佳的压缩效果。 此外,虽然 Zip64 扩展已经解决了传统 Zip 格式中的 4GB 文件大小限制,但并非所有的压缩解压缩工具都支持 Zip64,因此在处理大文件时需要注意选择合适的工具。 @@ -268,11 +268,11 @@ ZIP(Zone Information Protocol)是一种广泛使用的文件压缩和归档 | 命令 | 描述 | | ---------------------------------------- | --------------------------------- | -| `zip archive.zip file1 file2 directory1` | 创建Zip归档文件 | -| `unzip archive.zip` | 解压缩Zip归档文件 | -| `zip -r archive.zip directory1` | 压缩目录为Zip归档文件 | -| `unzip -l archive.zip` | 列出Zip归档文件中的文件列表 | -| `zip -e archive.zip file1 file2` | 使用加密算法压缩文件为Zip归档文件 | +| `zip archive.zip file1 file2 directory1` | 创建 Zip 归档文件 | +| `unzip archive.zip` | 解压缩 Zip 归档文件 | +| `zip -r archive.zip directory1` | 压缩目录为 Zip 归档文件 | +| `unzip -l archive.zip` | 列出 Zip 归档文件中的文件列表 | +| `zip -e archive.zip file1 file2` | 使用加密算法压缩文件为 Zip 归档文件 | #### 常见选项 @@ -280,30 +280,30 @@ ZIP(Zone Information Protocol)是一种广泛使用的文件压缩和归档 | ---- | ----------------- | ----------------------------- | | `-r` | `--recurse-paths` | 递归压缩目录及其所有子目录 | | `-e` | `--encrypt` | 使用加密算法压缩文件 | -| `-d` | `--delete` | 从Zip归档文件中删除文件 | -| `-u` | `--update` | 更新Zip归档文件中的文件 | -| `-l` | `--list` | 列出Zip归档文件中的文件列表 | +| `-d` | `--delete` | 从 Zip 归档文件中删除文件 | +| `-u` | `--update` | 更新 Zip 归档文件中的文件 | +| `-l` | `--list` | 列出 Zip 归档文件中的文件列表 | | `-v` | `--verbose` | 在执行操作时显示详细信息 | | `-q` | `--quiet` | 在执行操作时禁止输出 | | `-f` | `--file` | 指定归档文件的名称 | -| `-z` | `--gzip` | 使用gzip压缩算法压缩归档文件 | -| `-j` | `--bzip2` | 使用bzip2压缩算法压缩归档文件 | +| `-z` | `--gzip` | 使用 gzip 压缩算法压缩归档文件 | +| `-j` | `--bzip2` | 使用 bzip2 压缩算法压缩归档文件 | ### Gzip -Gzip(GNU zip)是一种广泛使用的文件压缩和解压缩工具。它基于DEFLATE算法,该算法结合了LZ77(Lempel-Ziv 77)和Huffman编码技术,能够有效地压缩文件。Gzip 主要用于压缩单个文件,而不是整个目录结构。在Linux和Unix系统中,Gzip 常与 Tar(磁带归档器)结合使用,以实现文件归档和压缩的双重功能。 +Gzip(GNU zip)是一种广泛使用的文件压缩和解压缩工具。它基于 DEFLATE 算法,该算法结合了 LZ77(Lempel-Ziv 77)和 Huffman 编码技术,能够有效地压缩文件。Gzip 主要用于压缩单个文件,而不是整个目录结构。在 Linux 和 Unix 系统中,Gzip 常与 Tar(磁带归档器)结合使用,以实现文件归档和压缩的双重功能。 #### 优点 1. 高压缩率:Gzip 通常能提供较高的压缩率,从而降低文件大小,节省存储空间和带宽。 2. 快速压缩和解压缩速度:Gzip 在保证较高压缩率的同时,压缩和解压缩速度相对较快。 -3. 跨平台兼容性:Gzip 在Linux、Unix、macOS 和 Windows 等操作系统上都有实现,具有良好的跨平台兼容性。 +3. 跨平台兼容性:Gzip 在 Linux、Unix、macOS 和 Windows 等操作系统上都有实现,具有良好的跨平台兼容性。 4. 开源和免费:Gzip 是 GNU 项目的一部分,遵循开源协议,免费提供给用户使用。 #### 缺点 1. **仅支持单文件压缩**:Gzip 本身只能压缩单个文件,无法直接压缩目录。通常需要与 Tar 等归档工具结合使用。 -2. **压缩效率高**:虽然 Gzip 的压缩效率较高,但与一些专门的压缩算法(如7z、Bzip2等)相比,可能无法获得最佳的压缩效果。 +2. **压缩效率高**:虽然 Gzip 的压缩效率较高,但与一些专门的压缩算法(如 7z、Bzip2 等)相比,可能无法获得最佳的压缩效果。 #### 适用场景 @@ -312,7 +312,7 @@ Gzip(GNU zip)是一种广泛使用的文件压缩和解压缩工具。它基 - 数据存储:Gzip 可以用于压缩文档、日志文件等,节省存储空间。 - 软件分发:开发者可以将源代码或二进制文件压缩为 Gzip 格式,便于用户下载和安装。 -总之,Gzip 是一种广泛使用的文件压缩工具,基于 DEFLATE 算法,提供较高的压缩率和较快的压缩速度。尽管 Gzip 仅支持单文件压缩,但可以与 Tar 等归档工具结合使用,实现目录的压缩。具有良好的跨平台兼容性和开源性质,适用于文件传输、网页优化、数据存储和软件分发等场景。在压缩效率方面,虽然 Gzip 表现出色,但可能无法与一些专门的压缩算法(如7z、Bzip2等)相媲美。 +总之,Gzip 是一种广泛使用的文件压缩工具,基于 DEFLATE 算法,提供较高的压缩率和较快的压缩速度。尽管 Gzip 仅支持单文件压缩,但可以与 Tar 等归档工具结合使用,实现目录的压缩。具有良好的跨平台兼容性和开源性质,适用于文件传输、网页优化、数据存储和软件分发等场景。在压缩效率方面,虽然 Gzip 表现出色,但可能无法与一些专门的压缩算法(如 7z、Bzip2 等)相媲美。 #### 常见命令 @@ -320,8 +320,8 @@ Gzip(GNU zip)是一种广泛使用的文件压缩和解压缩工具。它基 | --------------------- | -------------------------------------------- | | `gzip file.txt` | 压缩文件“file.txt” | | `gzip -r directory1` | 递归压缩目录“directory1”及其所有子目录和文件 | -| `gzip -d file.txt.gz` | 解压缩Gzip压缩的文件“file.txt.gz” | -| `gzip -l file.txt.gz` | 查看Gzip压缩文件“file.txt.gz”的详细信息 | +| `gzip -d file.txt.gz` | 解压缩 Gzip 压缩的文件“file.txt.gz” | +| `gzip -l file.txt.gz` | 查看 Gzip 压缩文件“file.txt.gz”的详细信息 | | `gzip -v file.txt` | 压缩文件“file.txt”并显示压缩进度 | #### 常见选项 @@ -330,11 +330,11 @@ Gzip(GNU zip)是一种广泛使用的文件压缩和解压缩工具。它基 | ---- | -------------- | ---------------------------- | | `-d` | `--decompress` | 解压缩文件 | | `-r` | `--recursive` | 递归压缩目录及其所有子目录 | -| `-l` | `--list` | 列出Gzip压缩文件的详细信息 | +| `-l` | `--list` | 列出 Gzip 压缩文件的详细信息 | | `-v` | `--verbose` | 显示操作的详细信息 | | `-q` | `--quiet` | 禁止输出操作信息 | | `-f` | `--force` | 强制执行操作,即使会覆盖文件 | -| `-t` | `--test` | 测试Gzip压缩文件的完整性 | +| `-t` | `--test` | 测试 Gzip 压缩文件的完整性 | | `-k` | `--keep` | 保留原始文件,不删除压缩文件 | ### Bzip2 @@ -366,8 +366,8 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法(BWT | ----------------------- | ----------------------------------------- | | `bzip2 file.txt` | 压缩文件“file.txt” | | `bzip2 -k file.txt` | 压缩文件“file.txt”并保留原始文件 | -| `bzip2 -d file.txt.bz2` | 解压缩Bzip2压缩的文件“file.txt.bz2” | -| `bzip2 -l file.txt.bz2` | 查看Bzip2压缩文件“file.txt.bz2”的详细信息 | +| `bzip2 -d file.txt.bz2` | 解压缩 Bzip2 压缩的文件“file.txt.bz2” | +| `bzip2 -l file.txt.bz2` | 查看 Bzip2 压缩文件“file.txt.bz2”的详细信息 | | `bzip2 -v file.txt` | 压缩文件“file.txt”并显示压缩进度 | #### 常见选项 @@ -375,26 +375,26 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法(BWT | 选项 | 选项全称 | 功能 | | ---- | -------------- | ------------------------------------------------------------ | | -c | --stdout | 将输出写入标准输出,而不是写入压缩文件。 | -| -d | --decompress | 解压缩Bzip2压缩文件,生成原始文件。 | +| -d | --decompress | 解压缩 Bzip2 压缩文件,生成原始文件。 | | -f | --force | 强制覆盖现有的压缩文件,而不提示。 | | -k | --keep | 保留原始文件,不删除生成的压缩文件。 | | -q | --quiet | 不显示任何压缩和解压缩过程的信息。 | -| -t | --test | 测试Bzip2压缩文件的完整性。 | +| -t | --test | 测试 Bzip2 压缩文件的完整性。 | | -v | --verbose | 显示详细的压缩和解压缩过程的信息。 | -| -z | --compress | 使用Bzip2进行压缩,生成Bzip2压缩文件(默认选项)。 | -| -1 | --fast | 使用1级别的压缩,生成速度快,压缩比低的压缩文件。 | -| -2 | --best | 使用2级别的压缩,生成速度慢,压缩比高的压缩文件(默认级别)。 | -| -3 | --small | 使用3级别的压缩,生成速度较慢,压缩比更高的压缩文件。 | -| -4 | | 使用4级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | -| -5 | | 使用5级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | -| -6 | | 使用6级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | -| -7 | | 使用7级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | -| -8 | | 使用8级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | -| -9 | --best-quality | 使用9级别的压缩,生成速度最慢,压缩比最高的压缩文件。 | +| -z | --compress | 使用 Bzip2 进行压缩,生成 Bzip2 压缩文件(默认选项)。 | +| -1 | --fast | 使用 1 级别的压缩,生成速度快,压缩比低的压缩文件。 | +| -2 | --best | 使用 2 级别的压缩,生成速度慢,压缩比高的压缩文件(默认级别)。 | +| -3 | --small | 使用 3 级别的压缩,生成速度较慢,压缩比更高的压缩文件。 | +| -4 | | 使用 4 级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | +| -5 | | 使用 5 级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | +| -6 | | 使用 6 级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | +| -7 | | 使用 7 级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | +| -8 | | 使用 8 级别的压缩,生成速度更慢,压缩比更高的压缩文件。 | +| -9 | --best-quality | 使用 9 级别的压缩,生成速度最慢,压缩比最高的压缩文件。 | ### 7z -7z(7-Zip)是一款开源的文件压缩和解压缩工具,主要使用 LZMA(Lempel-Ziv-Markov链算法)和 LZMA2 算法进行压缩。7z 格式以高压缩率和高压缩速度而著称,通常能够提供比 Gzip 和 Bzip2 更高的压缩效果。除了 7z 格式,7-Zip 还支持其他压缩格式,如 ZIP、Gzip、Bzip2、Tar 等。 +7z(7-Zip)是一款开源的文件压缩和解压缩工具,主要使用 LZMA(Lempel-Ziv-Markov 链算法)和 LZMA2 算法进行压缩。7z 格式以高压缩率和高压缩速度而著称,通常能够提供比 Gzip 和 Bzip2 更高的压缩效果。除了 7z 格式,7-Zip 还支持其他压缩格式,如 ZIP、Gzip、Bzip2、Tar 等。 #### 优点 diff --git a/wiki/operating-system/Linux/基础/Linux 用户和权限.md b/Tech/operating-system/Linux/基础/Linux 用户和权限.md similarity index 95% rename from wiki/operating-system/Linux/基础/Linux 用户和权限.md rename to Tech/operating-system/Linux/基础/Linux 用户和权限.md index 8dd03ab9..8a61d32f 100644 --- a/wiki/operating-system/Linux/基础/Linux 用户和权限.md +++ b/Tech/operating-system/Linux/基础/Linux 用户和权限.md @@ -2,11 +2,11 @@ title: Linux 用户和权限 description: Linux 用户和权限 keywords: -- Linux -- 用户 -- 权限 + - Linux + - 用户 + - 权限 tags: -- Linux + - Linux/基础 sidebar_position: 4 author: 7Wate date: 2023-03-30 @@ -48,7 +48,7 @@ Linux 多用户系统具有强大的用户和权限管理功能,可以帮助 ### 创建 -#### useradd +#### Useradd `useradd` 命令是 Linux 系统中的一个命令行工具,用于创建新用户帐户。通过 `useradd` 命令,可以指定新用户的用户名、用户 ID(UID)、主目录、默认 shell 和密码等信息。 @@ -74,7 +74,7 @@ sudo useradd john ### 管理 -#### chfn +#### Chfn `chfn`(Change Finger)命令用于修改用户信息。该命令可以用来更改用户的全名、办公室电话、家庭电话、其他说明等信息。 @@ -99,7 +99,7 @@ Enter the new value, or press ENTER for the default | `-u, --uid` | 更改用户的 UID。 | `chfn --uid 1001 [username]` | | `-c, --comment` | 更改用户的注释字段。 | `chfn --comment "这是一个测试用户" [username]` | -#### chsh +#### Chsh `chsh` (Change Shell)命令是 Linux 系统中的一个命令行工具,用于更改用户的默认 shell。默认情况下,用户登录后会进入一个特定的 shell 环境,该环境定义了用户与系统交互的方式。`chsh` 命令可用于更改用户的默认 shell,从而改变用户与系统交互的方式。 @@ -114,7 +114,7 @@ chsh -s /bin/bash chsh -s /bin/bash john ``` -#### passwd +#### Passwd `passwd` (Password)命令是 Linux 系统中的一个命令行工具,用于更改用户的密码或口令。默认情况下,每个 Linux 用户都有一个口令或密码来保护其账户的安全性。`passwd` 命令可用于更改密码或口令。 @@ -134,7 +134,7 @@ passwd john | `-e, --expire` | 强制用户在下一次登录时更改密码或口令。 | `sudo passwd --expire john` | | `-S, --status` | 显示用户密码或口令的状态。 | `passwd --status john` | -#### usermod +#### Usermod `usermod`(User Modify)命令是 Linux 系统中的一个命令行工具,用于修改用户的属性或配置。`usermod` 命令允许您更改现有用户的用户名、UID、主目录、默认 shell 等信息,还可以将用户添加到其他用户组中。 @@ -153,7 +153,7 @@ passwd john ### 删除 -#### userdel +#### Userdel `userdel`(User Delete)命令是 Linux 系统中的一个命令行工具,用于删除现有用户帐户。默认情况下,`userdel` 命令仅删除用户的帐户,而不删除用户的主目录和邮件箱。如果需要删除用户的主目录和邮件箱,可以使用 `-r` 选项。 @@ -171,7 +171,7 @@ sudo userdel john ### 创建 -#### groupadd +#### Groupadd `groupadd` 命令是 Linux 系统中的一个命令行工具,用于创建新的用户组。管理员用户(如 root 用户)可以使用 `groupadd` 命令创建新组。 @@ -188,7 +188,7 @@ sudo groupadd newgroup ### 管理 -#### groups +#### Groups `groups` 命令是 Linux 系统中的一个命令行工具,用于显示当前用户所属的用户组。如果没有指定用户名,则 `groups` 命令将显示当前用户所属的用户组。 @@ -200,7 +200,7 @@ groups groups john ``` -#### gpasswd +#### Gpasswd `gpasswd` (Group Password)命令是 Linux 系统中的一个命令行工具,用于管理用户组的密码和成员列表。管理员用户(如 root 用户)可以使用 `gpasswd` 命令来添加或删除用户组的成员,或者设置或删除用户组的密码。 @@ -217,7 +217,7 @@ sudo gpasswd newgroup | `-r, --remove-password` | 从指定的用户组中删除密码。 | `sudo gpasswd -r newgroup` | | `-R, --restrict` | 启用限制模式。在此模式下,只有组的所有者和管理员才能更改组成员身份。 | `sudo gpasswd -R newgroup` | -#### groupmod +#### Groupmod `groupmod` (Group Modify)命令是 Linux 系统中的一个命令行工具,用于修改已有用户组的属性,例如组 ID、组名称和组密码等。管理员用户(如 root 用户)可以使用 `groupmod` 命令来更改用户组的属性。 @@ -230,7 +230,7 @@ sudo gpasswd newgroup ### 删除 -#### groupdel +#### Groupdel `groupdel` (Group Delete)是 Linux 系统中的一个命令行工具,用于删除一个用户组。删除用户组时,系统会自动将该组的所有成员从该组中删除,并将文件和目录中的组 ID 更改为其他组。 @@ -246,11 +246,11 @@ sudo groupdel newgroup | `-R, --root CHROOT_DIR` | 在指定的 chroot 环境中运行命令。 | `sudo groupdel --root /mnt/newroot newgroup` | | `-v, --verbose` | 显示命令详细输出。 | `sudo groupdel -v newgroup` | -## root 超级用户 +## Root 超级用户 在 Linux 系统中,root 是超级用户,具有完全的系统管理权限。root 用户可以执行任何命令,并访问系统中的所有文件和资源。在默认情况下,root 用户的密码是空的,因此在安全性方面需要额外注意。 -### su +### Su `su`(Switch User)命令是 Linux 系统中的一个命令行工具,它允许您在不注销当前用户的情况下切换到其他用户帐户。默认情况下,`su` 命令切换到超级用户帐户(root)。 @@ -268,7 +268,7 @@ su debian | `-s, --shell SHELL` | 指定要使用的 shell,而不是默认 shell。 | `su -s /bin/bash user1` | | `-l, --login` | 在切换用户时模拟完整的登录过程,包括加载环境变量、切换工作目录等。 | `su -l user` | -### sudo +### Sudo 在 Unix 和类 Unix 系统中,`sudo` 是一个强大的工具,允许普通用户以超级用户(root)的权限来执行特定的命令或访问受限资源。`sudo` 命令的行为是由一个配置文件来定义的,这个文件通常称为 `sudoers` 文件。 @@ -333,11 +333,11 @@ sudo -l -U username | `-h, --help` | 显示 `sudo` 命令的帮助信息。 | `sudo -h` | | `-V, --version` | 显示 `sudo` 命令的版本信息。 | `sudo -V` | -### newusers +### Newusers `newusers` 是一个 Linux 系统命令,用于批量创建新的用户账号。 -该命令可以从指定的文件中读取一组用户信息,每行包括用户名、密码、用户ID、主组ID、全名、主目录、默认 shell 等字段。`newusers` 会自动创建这些用户账号,并设置相应的密码、主目录和 shell。 +该命令可以从指定的文件中读取一组用户信息,每行包括用户名、密码、用户 ID、主组 ID、全名、主目录、默认 shell 等字段。`newusers` 会自动创建这些用户账号,并设置相应的密码、主目录和 shell。 ```shell -------------------- user.txt -------------------- @@ -352,14 +352,14 @@ newusers user.txt | 选项 | 描述 | 示例 | | ---------------------- | -------------------------- | ------------------------------------------------------------ | -| `-u, --uid` | 指定起始用户ID | `newusers -u 1000 users.txt` | -| `-g, --gid` | 指定起始组ID | `newusers -g 1000 users.txt` | +| `-u, --uid` | 指定起始用户 ID | `newusers -u 1000 users.txt` | +| `-g, --gid` | 指定起始组 ID | `newusers -g 1000 users.txt` | | `-c, --comment` | 指定用户的注释信息 | `newusers -c "User One" users.txt`, `newusers --comment "User One" users.txt` | | `-s, --shell` | 指定新用户的默认 shell | `newusers -s /bin/bash users.txt`, `newusers --shell /bin/bash users.txt` | | `-H, --no-create-home` | 禁止创建用户主目录 | `newusers -H users.txt`, `newusers --no-create-home users.txt` | | `-N, --no-user-group` | 禁止创建与用户名同名的主组 | `newusers -N users.txt`, `newusers --no-user-group users.txt` | -### chpasswd +### Chpasswd `chpasswd` 命令用于批量修改用户的密码,可以一次性修改多个用户的密码,而不需要逐个输入密码。它可以从标准输入、文件或命令行参数中读取用户密码信息,并将其应用于指定的用户账户。 @@ -427,7 +427,7 @@ sudo chpasswd -m < users.txt ## 其他 -### w +### W `w` 命令在 Unix 和 Unix 类操作系统中用于显示有关系统活动的信息。这个命令可以显示当前系统中登录的用户、他们所做的事情、从哪里登录、他们登录的时间以及系统负载等。 @@ -439,7 +439,7 @@ sevenwat tty1 - 二16 22:15m 0.16s 0.05s -bash sevenwat pts/0 172.17.0.100 13:55 0.00s 0.51s 0.13s sshd: sevenwate [priv] ``` -### id +### Id `id` 命令用于显示用户和用户组的标识信息。它可以用于查看当前用户或指定用户的 UID(用户标识符)、GID(组标识符)和所属用户组的名称。 @@ -448,7 +448,7 @@ sevenwate@LinuxTest:~$ id 用户id=1000(sevenwate) 组id=1000(sevenwate) 组=1000(sevenwate),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev),1001(grpdemo) ``` -### whoami +### Whoami `whoami` 命令用于显示当前登录用户的用户名。它是一个非常简单的命令,通常用于 shell 脚本和命令行中,以便在需要当前用户的用户名时快速获取它。 @@ -457,9 +457,9 @@ sevenwate@LinuxTest:~$ whoami sevenwate ``` -### last +### Last -`last` 命令在Linux中用于显示系统的登录记录。这个命令列出了系统登录和启动的详细信息,如登录用户、登录的 IP 地址、登录时间以及登录持续的时间。 +`last` 命令在 Linux 中用于显示系统的登录记录。这个命令列出了系统登录和启动的详细信息,如登录用户、登录的 IP 地址、登录时间以及登录持续的时间。 ```shell root@LinuxTest:~# last @@ -479,9 +479,9 @@ reboot system boot 5.10.0-23-amd64 Tue May 30 16:00 still running wtmp begins Tue May 30 16:00:47 2023 ``` -### lastlog +### Lastlog -`lastlog`命令用于查看所有用户最后一次登录的时间和登录的终端。这个命令检查 `/var/log/lastlog` 文件以确定每个用户的最后一次登录信息。此命令的输出包含用户名、最后登录的端口和最后登录的时间。 +`lastlog` 命令用于查看所有用户最后一次登录的时间和登录的终端。这个命令检查 `/var/log/lastlog` 文件以确定每个用户的最后一次登录信息。此命令的输出包含用户名、最后登录的端口和最后登录的时间。 ```shell root@LinuxTest:~# lastlog @@ -522,7 +522,7 @@ graph LR root@LinuxTest:~# useradd newuser ``` -4. **设置新用户的密码**:使用 `passwd` 命令和新用户的用户名来设置密码。 +1. **设置新用户的密码**:使用 `passwd` 命令和新用户的用户名来设置密码。 ```shell root@LinuxTest:~# passwd newuser @@ -531,7 +531,7 @@ root@LinuxTest:~# passwd newuser passwd:已成功更新密码 ``` -5. **更改新用户的信息**(可选):可以使用 `chfn` 命令更改新用户的全名、房间号、工作电话和家庭电话。 +1. **更改新用户的信息**(可选):可以使用 `chfn` 命令更改新用户的全名、房间号、工作电话和家庭电话。 ```shell root@LinuxTest:~# chfn newuser @@ -544,13 +544,13 @@ root@LinuxTest:~# chfn newuser 其它 []: ``` -6. **给新用户分配家目录**(可选):默认情况下 `useradd` 命令会为新用户创建一个在 `/home` 下的家目录。`usermod` 可以使用 `-d` 选项为新用户指定一个不同的家目录。例如,指定 `newuser` 的家目录是 `/opt/newuser`: +1. **给新用户分配家目录**(可选):默认情况下 `useradd` 命令会为新用户创建一个在 `/home` 下的家目录。`usermod` 可以使用 `-d` 选项为新用户指定一个不同的家目录。例如,指定 `newuser` 的家目录是 `/opt/newuser`: ```shell root@LinuxTest:~# usermod -d /opt/newuser -m newuser ``` -7. **指定不同的登录 shell**(可选):`usermod`可以使用 `-s` 选项指定一个不同的登录 shell。例如为 `newuser` 指定 `/bin/sbin/noligin` 作为登录 shell,你可以运行: +1. **指定不同的登录 shell**(可选):`usermod` 可以使用 `-s` 选项指定一个不同的登录 shell。例如为 `newuser` 指定 `/bin/sbin/noligin` 作为登录 shell,你可以运行: ```shell # 使用 usermod 命令 @@ -559,7 +559,7 @@ root@LinuxTest:~# usermod -s /usr/bin/nologin newuser root@LinuxTest:~# chsh -s /bin/bash newuser ``` -8. **将新用户添加到一个或多个额外的组**(可选):可以使用 `usermod` 命令的 `-G` 选项将新用户添加到一个或多个额外的组。例如将 `newuser` 添加到 `sudo` 和 `users` 组,你可以运行: +1. **将新用户添加到一个或多个额外的组**(可选):可以使用 `usermod` 命令的 `-G` 选项将新用户添加到一个或多个额外的组。例如将 `newuser` 添加到 `sudo` 和 `users` 组,你可以运行: ```shell root@LinuxTest:~# usermod -aG sudo,users newuser diff --git a/wiki/operating-system/Linux/基础/Linux 软件包管理器.md b/Tech/operating-system/Linux/基础/Linux 软件包管理器.md similarity index 97% rename from wiki/operating-system/Linux/基础/Linux 软件包管理器.md rename to Tech/operating-system/Linux/基础/Linux 软件包管理器.md index d76e7b16..68582921 100644 --- a/wiki/operating-system/Linux/基础/Linux 软件包管理器.md +++ b/Tech/operating-system/Linux/基础/Linux 软件包管理器.md @@ -2,10 +2,10 @@ title: Linux 软件包管理器 description: Linux 软件包管理器 keywords: -- Linux -- 软件包管理器 + - Linux + - 软件包管理器 tags: -- Linux + - Linux/基础 sidebar_position: 6 author: 7Wate date: 2023-03-30 @@ -25,7 +25,7 @@ date: 2023-03-30 总之,包管理器是一个自动化工具,负责处理操作系统上软件包的各种任务。它简化了软件安装、升级、配置和删除的过程,确保系统的稳定性和安全性。不同的操作系统和发行版可能使用不同的包管理器,但其核心概念和功能类似。 -## dpkg +## Dpkg dpkg(Debian Package Manager)是 Debian 操作系统及其衍生系统(如 Ubuntu)中的一个**底层软件包管理工具**。它负责处理安装、卸载、更新等软件包管理操作。**dpkg 并不处理依赖关系**,这是由更高层的工具(如 apt、apt-get、aptitude 等)完成的。 @@ -93,7 +93,7 @@ dpkg 的主要设计理念是简单、稳定、可扩展。它旨在为 Debian ## APT -APT(Advanced Package Tool)是一个用于管理 Debian 及其衍生系统(如Ubuntu)软件包的高级工具集。它提供了一个统一的方法来处理软件包的安装、升级、配置和卸载,以及管理系统上的依赖关系。APT包括多个子工具,如 apt-get、apt-cache、apt-config等。 +APT(Advanced Package Tool)是一个用于管理 Debian 及其衍生系统(如 Ubuntu)软件包的高级工具集。它提供了一个统一的方法来处理软件包的安装、升级、配置和卸载,以及管理系统上的依赖关系。APT 包括多个子工具,如 apt-get、apt-cache、apt-config 等。 APT 最早在 1998 年由 Debian 开发者 Ian Murdock 和其他开发者创建。当时,Debian 社区意识到需要一个更高级的软件包管理工具来简化系统维护,因此 APT 应运而生。随着时间的推移,APT 得到了持续的改进和扩展,逐渐成为 Debian 及其衍生系统的重要组成部分。 @@ -168,7 +168,7 @@ RPM 的设计理念主要集中在以下几点: 2. 与 Debian 系统的兼容性:RPM 主要针对基于 Red Hat 的 Linux 发行版,对于 Debian 系统的支持相对较弱。 3. 学习成本:RPM 的命令和工具相对繁琐,对于新手可能存在一定的学习成本。 -RPM未来发展方向主要包括提高与其他软件包管理系统的兼容性、优化用户界面、增强依赖关系处理能力以及提升性能和稳定性。这将有助于为用户提供更广泛的软件支持、更友好的操作体验,同时降低软件冲突和不兼容的风险。 +RPM 未来发展方向主要包括提高与其他软件包管理系统的兼容性、优化用户界面、增强依赖关系处理能力以及提升性能和稳定性。这将有助于为用户提供更广泛的软件支持、更友好的操作体验,同时降低软件冲突和不兼容的风险。 ### 命令 @@ -208,7 +208,7 @@ RPM未来发展方向主要包括提高与其他软件包管理系统的兼容 ## Yum -Yum(Yellowdog Updater Modified)是一种在Linux系统上自动更新、安装和卸载软件包的开源软件包管理器。它是Fedora和Red Hat Enterprise Linux(RHEL)等Linux发行版中的标准软件包管理器之一。 +Yum(Yellowdog Updater Modified)是一种在 Linux 系统上自动更新、安装和卸载软件包的开源软件包管理器。它是 Fedora 和 Red Hat Enterprise Linux(RHEL)等 Linux 发行版中的标准软件包管理器之一。 Yum 最初由 Seth Vidal 编写,2003 年首次在 Fedora Core 1 中引入。Yum 的设计理念是为了改进 Red Hat Linux 中的软件包管理器,使其更快、更易用和更灵活。目前,Yum 已成为 Red Hat Enterprise Linux(RHEL)和 CentOS 等 Linux 发行版中的标准软件包管理器。 @@ -305,7 +305,7 @@ DNF 的未来发展方向主要包括提高性能和稳定性、增强依赖关 | dnf download | 下载软件包 | | dnf autoremove | 自动删除已不需要的软件包及其依赖 | -## pacman +## Pacman Pacman 是 Arch Linux 发行版的官方软件包管理器,其名称缩写来自“Package Manager(软件包管理器)”。Pacman 能够管理本地软件包、从官方仓库中获取软件包、以及从第三方仓库中获取软件包,具有很高的灵活性。 diff --git a/wiki/operating-system/Linux/文化/GNU&Linux 历史与发展.md b/Tech/operating-system/Linux/文化/GNU&Linux 历史与发展.md similarity index 99% rename from wiki/operating-system/Linux/文化/GNU&Linux 历史与发展.md rename to Tech/operating-system/Linux/文化/GNU&Linux 历史与发展.md index cb099bdb..8a0360e5 100644 --- a/wiki/operating-system/Linux/文化/GNU&Linux 历史与发展.md +++ b/Tech/operating-system/Linux/文化/GNU&Linux 历史与发展.md @@ -2,12 +2,12 @@ title: GNU&Linux 历史与发展 description: GNU&Linux 历史与发展 keywords: -- GNU -- Linux -- 历史 -- 发展 + - GNU + - Linux + - 历史 + - 发展 tags: -- Linux + - Linux/文化 sidebar_position: 1 author: 7Wate date: 2023-03-15 diff --git a/wiki/operating-system/Linux/文化/GNU&Linux 社区与文化.md b/Tech/operating-system/Linux/文化/GNU&Linux 社区与文化.md similarity index 95% rename from wiki/operating-system/Linux/文化/GNU&Linux 社区与文化.md rename to Tech/operating-system/Linux/文化/GNU&Linux 社区与文化.md index 61a4c871..5cc270f4 100644 --- a/wiki/operating-system/Linux/文化/GNU&Linux 社区与文化.md +++ b/Tech/operating-system/Linux/文化/GNU&Linux 社区与文化.md @@ -2,12 +2,12 @@ title: GNU&Linux 社区与文化 description: GNU&Linux 社区与文化 keywords: -- GNU -- Linux -- 社区 -- 文化 + - GNU + - Linux + - 社区 + - 文化 tags: -- Linux + - Linux/文化 sidebar_position: 2 author: 7Wate date: 2023-06-21 @@ -51,7 +51,7 @@ Debian 项目最初是一个由自由软件爱好者组成的和谐小团体, #### 特色 -**Debian 以其坚守 Unix 和自由软件的理念,以及给用户提供的丰富选择而闻名。**至今,Debian 提供了超过 25,000个软件,超过 50,000 个软件包,并正式支持 10 个计算机系统架构。众多知名的 Linux 发行版,例如 Ubuntu、Knoppix 和 Deepin,也都基于 Debian GNU/Linux 构建。 +**Debian 以其坚守 Unix 和自由软件的理念,以及给用户提供的丰富选择而闻名。**至今,Debian 提供了超过 25,000 个软件,超过 50,000 个软件包,并正式支持 10 个计算机系统架构。众多知名的 Linux 发行版,例如 Ubuntu、Knoppix 和 Deepin,也都基于 Debian GNU/Linux 构建。 Debian 社区下设有多个**采用不同操作系统内核**的子项目: @@ -78,11 +78,12 @@ Debian Project 是一个**独立运作的项目,不受任何商业性质的影 ### Arch 社区 ![Arch_Linux_logo.svg](https://static.7wate.com/img/2022/08/08/fa7736b4dd8d1.png) + > [Arch](https://archlinux.org/) 之道:Keep It Simple, Stupid #### 概述 -由加拿大程序设计师兼吉他手 Judd Vinet 从 2001 年早期开始开发 Arch Linux,并在 2002 年 3月 11 日正式发行 0.1 版。2007 下半年,Vinet 退出了 Arch Linux 的开发,项目由 Aaron Griffin 接手并继续推进。 +由加拿大程序设计师兼吉他手 Judd Vinet 从 2001 年早期开始开发 Arch Linux,并在 2002 年 3 月 11 日正式发行 0.1 版。2007 下半年,Vinet 退出了 Arch Linux 的开发,项目由 Aaron Griffin 接手并继续推进。 #### 特色 @@ -151,7 +152,7 @@ openSUSE 是世界上最受欢迎的 Linux 发行版之一,它以其易用性 ![Fedora_logo_(2021).svg](https://static.7wate.com/img/2022/08/08/b742d2b21d59e.png) -[Fedora Linux](https://getfedora.org/)(第七版以前为Fedora Core)是较具知名度的 Linux 发行包之一,由 Fedora 项目社群开发,红帽公司赞助。其目标是创建一个新颖、多功能且自由(开放源代码)的操作系统。**Fedora 是商业化的 Red Hat Enterprise Linux 发行版的上游源码。** +[Fedora Linux](https://getfedora.org/)(第七版以前为 Fedora Core)是较具知名度的 Linux 发行包之一,由 Fedora 项目社群开发,红帽公司赞助。其目标是创建一个新颖、多功能且自由(开放源代码)的操作系统。**Fedora 是商业化的 Red Hat Enterprise Linux 发行版的上游源码。** 最早,Fedora Linux 社群的目标是为 Red Hat Linux 制作并发布第三方的软件包。然而,当免费的 Red Hat Linux 停止发行后,Fedora 社群整合到了 Red Hat 赞助的 Fedora 项目。新的目标是开发一个由社群支持的操作系统。Red Hat Enterprise Linux 则取代了 Red Hat Linux,成为官方支持的系统版本。 @@ -175,7 +176,7 @@ CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它 #### RHEL、CentOS 和 Fedora 的关系 -**RHEL、CentOS 和 Fedora 的相似之处都是基于 2004 年停产的 Red Hat Linux。**RHEL、CentOS和Fedora的区别在于:CentOS 是社区开发的 RHEL;Fedora 是面向社区、快节奏的 RHEL 上游贡献者;RHEL 则是基于 Fedora 的企业稳定版。 +**RHEL、CentOS 和 Fedora 的相似之处都是基于 2004 年停产的 Red Hat Linux。**RHEL、CentOS 和 Fedora 的区别在于:CentOS 是社区开发的 RHEL;Fedora 是面向社区、快节奏的 RHEL 上游贡献者;RHEL 则是基于 Fedora 的企业稳定版。 | | 免费下载 | 免费使用 | 技术支持 (商业) | | :----: | :------: | :------: | --------------- | @@ -275,9 +276,9 @@ Kali Linux 作为一个专注于网络安全的操作系统,在网络安全领 Tails 的核心理念是提供一个**全匿名的操作环境**,并通过使用 Tor 网络,使用户在浏览互联网时可以难以被追踪。它包含了众多预安装的隐私工具,如匿名浏览器 Tor Browser,加密邮件客户端 Thunderbird,文件加密和隐藏工具等。 -##### "遗忘性"系统 +##### " 遗忘性 " 系统 -Tails 是一个"遗忘性"的系统。这意味着,除非显式地保存,否则系统在关机后**不会保留任何用户数据**。这对于需要在不留下任何痕迹的情况下使用计算机的用户来说,是非常有用的。 +Tails 是一个 " 遗忘性 " 的系统。这意味着,除非显式地保存,否则系统在关机后**不会保留任何用户数据**。这对于需要在不留下任何痕迹的情况下使用计算机的用户来说,是非常有用的。 ##### 轻型系统 diff --git a/wiki/operating-system/Linux/文化/开源软件的概念与重要性.md b/Tech/operating-system/Linux/文化/开源软件的概念与重要性.md similarity index 99% rename from wiki/operating-system/Linux/文化/开源软件的概念与重要性.md rename to Tech/operating-system/Linux/文化/开源软件的概念与重要性.md index 8a7e3a10..068bfb28 100644 --- a/wiki/operating-system/Linux/文化/开源软件的概念与重要性.md +++ b/Tech/operating-system/Linux/文化/开源软件的概念与重要性.md @@ -2,11 +2,11 @@ title: 开源软件的概念与重要性 description: 开源软件的概念与重要性 keywords: -- 开源 -- 概念 -- 重要性 + - 开源 + - 概念 + - 重要性 tags: -- 开源 + - Linux/文化 sidebar_position: 3 author: 7Wate date: 2023-03-15 diff --git a/wiki/operating-system/Linux/进阶/Linux 文件系统.md b/Tech/operating-system/Linux/进阶/Linux 文件系统.md similarity index 80% rename from wiki/operating-system/Linux/进阶/Linux 文件系统.md rename to Tech/operating-system/Linux/进阶/Linux 文件系统.md index 926f9677..da53b93c 100644 --- a/wiki/operating-system/Linux/进阶/Linux 文件系统.md +++ b/Tech/operating-system/Linux/进阶/Linux 文件系统.md @@ -2,12 +2,12 @@ title: Linux 文件系统 description: Linux 文件系统管理 keywords: -- Linux -- 分区 -- 磁盘 -- 文件系统 + - Linux + - 分区 + - 磁盘 + - 文件系统 tags: -- Linux + - Linux/进阶 sidebar_position: 1.5 author: 7Wate date: 2023-04-10 @@ -21,13 +21,13 @@ date: 2023-04-10 - 文件配置表(File Allocation Table,FAT)系列:FAT12、FAT16、FAT32、exFAT - 新技术文件系统(New Technology File System,NTFS) -- 分层文件系统(Hierarchical File System,HFS)和HFS Plus +- 分层文件系统(Hierarchical File System,HFS)和 HFS Plus - 延伸文件系统(Extended File System,ext)系列:ext1、ext2、ext3、ext4 - 旧式数据系统(Old Data System,ODS) -- Btrfs(B-tree文件系统) -- XFS(SGI的高性能日志文件系统) -- UFS(Unix文件系统) -- ZFS(Zettabyte文件系统) +- Btrfs(B-tree 文件系统) +- XFS(SGI 的高性能日志文件系统) +- UFS(Unix 文件系统) +- ZFS(Zettabyte 文件系统) 在文件系统中,**文件名**是用于定位存储位置。大多数的文件系统对文件名的长度有限制。文件名可以是大小写不敏感的,也可以是大小写敏感的。现今的文件系统允许文件名包含非常多的 Unicode 字符集的字符,但某些特殊字符在文件名中受限。方便起见,一般不建议在文件名中包含特殊字符。 @@ -53,11 +53,11 @@ date: 2023-04-10 > 来源:[计算机组成原理](http://media4.open.com.cn/L603/fushi/0903/jisuanjzcyl/web/lesson/char4/j5.htm) -磁带存储的实现是通过将数据记录在磁带表面的磁性颗粒上,通过磁头读取磁带表面的磁性信号实现数据的读写。**磁带存储一般采用串行读写的方式,因此其读写速度相对较慢,但磁带存储的容量较大,可以达到数百TB的级别,且数据可靠性较高,可以长期保存数据。** +磁带存储的实现是通过将数据记录在磁带表面的磁性颗粒上,通过磁头读取磁带表面的磁性信号实现数据的读写。**磁带存储一般采用串行读写的方式,因此其读写速度相对较慢,但磁带存储的容量较大,可以达到数百 TB 的级别,且数据可靠性较高,可以长期保存数据。** #### 优点 -- 容量大,可达数百TB级别 +- 容量大,可达数百 TB 级别 - 成本低,适合大量数据备份和存储 - 数据可靠性高,不容易受到电磁干扰等因素的影响 @@ -119,7 +119,7 @@ date: 2023-04-10 - 1956 年,IBM 305 RAMAC 是现代硬盘的雏形,容量仅为 5MB。 - 1973 年,IBM 3340 推出,拥有“温彻斯特”绰号,其存储单元恰好是当时“温彻斯特来福枪”的口径和填弹量。 - 1980 年,希捷科技公司开发出 5.25 英寸的 5MB 硬盘 ST506,这是面向台式机的首款硬盘产品。 -- 1991 年,IBM 推出首款 3.5 英寸的 1GB 硬盘,应用了 MR(Magneto Resistive磁阻)技术,为硬盘容量的巨大提升奠定基础。 +- 1991 年,IBM 推出首款 3.5 英寸的 1GB 硬盘,应用了 MR(Magneto Resistive 磁阻)技术,为硬盘容量的巨大提升奠定基础。 - 1997 年,IBM 应用 GMR(Giant Magneto Resistive,巨磁阻)技术,使磁头灵敏度进一步提升,进而提高存储密度。 - 2005 年,日立环储和希捷都宣布将开始大量采用磁盘垂直写入技术(perpendicular recording)。 - 2011 年,机械硬盘逐渐被固态硬盘所取代,希捷宣布收购三星旗下的硬盘业务。 @@ -132,7 +132,7 @@ date: 2023-04-10 | 接口 | 传输速率 | 优点 | 缺点 | 适用场景 | | --------------------------------------- | ------------ | ------------------------------------ | ---------------------------- | ---------------------------- | -| IDE(Integrated Drive Electronics) | 最高133MB/s | 支持 PATA 和 SATA 接口,兼容性好 | 传输速率较慢,线缆长度受限 | 早期的个人电脑、低端工作站等 | +| IDE(Integrated Drive Electronics) | 最高 133MB/s | 支持 PATA 和 SATA 接口,兼容性好 | 传输速率较慢,线缆长度受限 | 早期的个人电脑、低端工作站等 | | SCSI(Small Computer System Interface) | 最高 640MB/s | 高速传输,支持多设备连接,可扩展性强 | 价格较高,设置和维护较为复杂 | 高端服务器、存储阵列等 | | SATA(Serial ATA) | 最高 6Gbps | 价格低廉,易于使用和安装 | 传输速率较慢,线缆长度受限 | 个人电脑、工作站、NAS 等 | | SAS(Serial Attached SCSI) | 最高 12Gbps | 高速传输,支持多设备连接 | 价格较高 | 服务器、存储阵列等高端应用 | @@ -142,9 +142,9 @@ date: 2023-04-10 | 尺寸 | 容量 | 转速 | 缓存 | 平均寻道时间 | 内部传输速度 | 适用场景 | | --------------- | ---------- | --------------- | --------- | ------------ | ------------ | ------------------------------------------ | -| 3.5英寸机械硬盘 | 160GB-16TB | 5400-15000转/分 | 8MB-256MB | 4-15ms | 最高300MB/s | 台式电脑,NAS,服务器,工作站等大型设备 | -| 2.5英寸机械硬盘 | 40GB-5TB | 4200-15000转/分 | 8MB-128MB | 10-15ms | 最高200MB/s | 笔记本电脑,便携式硬盘,智能电视,游戏机等 | -| 1.8英寸机械硬盘 | 30GB-320GB | 4200-5400转/分 | 2MB-16MB | 15-20ms | 最高100MB/s | 平板电脑,超极本,便携式媒体播放器等 | +| 3.5 英寸机械硬盘 | 160GB-16TB | 5400-15000 转/分 | 8MB-256MB | 4-15ms | 最高 300MB/s | 台式电脑,NAS,服务器,工作站等大型设备 | +| 2.5 英寸机械硬盘 | 40GB-5TB | 4200-15000 转/分 | 8MB-128MB | 10-15ms | 最高 200MB/s | 笔记本电脑,便携式硬盘,智能电视,游戏机等 | +| 1.8 英寸机械硬盘 | 30GB-320GB | 4200-5400 转/分 | 2MB-16MB | 15-20ms | 最高 100MB/s | 平板电脑,超极本,便携式媒体播放器等 | #### 实现原理 @@ -174,16 +174,16 @@ date: 2023-04-10 机械硬盘的逻辑结构主要包括两种格式:MBR(Master Boot Record,主引导记录)和 GPT(GUID Partition Table,全局唯一标识分区表)。 -MBR 是早期 PC 硬盘的标准分区方案,它将硬盘的分区信息保存在硬盘的第一个扇区中(即 0 号扇区),这个扇区的大小为 512 字节。MBR 可以分为两个部分:引导程序区和分区表。引导程序区存储了启动时需要加载的程序,分区表则记录了硬盘分区的信息,每个分区表项占用 16 字节,其中包括分区类型、起始扇区和分区大小等信息。MBR最多支持 4 个主分区或 3 个主分区和 1 个扩展分区。 +MBR 是早期 PC 硬盘的标准分区方案,它将硬盘的分区信息保存在硬盘的第一个扇区中(即 0 号扇区),这个扇区的大小为 512 字节。MBR 可以分为两个部分:引导程序区和分区表。引导程序区存储了启动时需要加载的程序,分区表则记录了硬盘分区的信息,每个分区表项占用 16 字节,其中包括分区类型、起始扇区和分区大小等信息。MBR 最多支持 4 个主分区或 3 个主分区和 1 个扩展分区。 -GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘的第一个和第二个 LBA(Logical Block Addressing,逻辑块寻址)扇区中,每个 LBA 扇区的大小为512字节。GPT 采用了一个 128 位的唯一标识符(GUID)来标识分区表,因此支持更多的分区。每个 GPT 分区表项占用 128 字节,其中包括分区类型、GUID、起始扇区和分区大小等信息。GPT 最多支持 128 个分区。 +GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘的第一个和第二个 LBA(Logical Block Addressing,逻辑块寻址)扇区中,每个 LBA 扇区的大小为 512 字节。GPT 采用了一个 128 位的唯一标识符(GUID)来标识分区表,因此支持更多的分区。每个 GPT 分区表项占用 128 字节,其中包括分区类型、GUID、起始扇区和分区大小等信息。GPT 最多支持 128 个分区。 | 特性 | MBR | GPT | | :------: | :------------------------: | :----------------------------------------------------------: | | 最大容量 | 2 TB | 9.4 ZB | -| 分区数 | 最多4个 | 最多128个 | -| 兼容性 | 较好,可用于BIOS和UEFI系统 | 较好,主要用于UEFI系统 | -| 系统要求 | 任何操作系统都支持 | Windows xp 64 位+、Mac OS X 10.6.5 及更高版本、Linux 和 UNIX | +| 分区数 | 最多 4 个 | 最多 128 个 | +| 兼容性 | 较好,可用于 BIOS 和 UEFI 系统 | 较好,主要用于 UEFI 系统 | +| 系统要求 | 任何操作系统都支持 | Windows xp 64 位 +、Mac OS X 10.6.5 及更高版本、Linux 和 UNIX | | 安全性 | 差 | 支持在分区表中存储磁盘分区信息的完整性校验和,可检测分区表是否被修改 | ### 固态硬盘 @@ -196,14 +196,14 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 固态硬盘的发展始于上世纪 50 年代,那时候的存储设备主要基于半导体技术。随着半导体技术的发展,SSD 逐渐成为计算机领域的一种主流存储设备。早期的 SSD 主要用于军事和航空领域,因为它们对性能和稳定性有很高的要求。随着技术的进步和成本的降低,SSD 已经成为消费者市场上的常见产品。 -- 1978年,Toshiba 的工程师 Fujio Masuoka 发明了闪存技术,这是固态硬盘的基础技术。 -- 1991年,SanDisk 推出首款基于 NAND 闪存的固态硬盘,容量为 20MB,主要应用于工业和军事领域。 -- 1995年,IBM 发布了第一款 PCI 接口的固态硬盘,提高了数据传输速度。 -- 2007年,Intel 推出了其首款主流固态硬盘——Intel X25-M,使用了 MLC(Multi-Level Cell)NAND 闪存技术,容量为 80GB,标志着固态硬盘开始进入消费者市场。 -- 2008年,OCZ 推出了第一款支持 SATA 接口的固态硬盘,使得 SSD 更容易与现有计算机系统兼容。 -- 2011年,高通和三星等公司联合制定了 UFS(Universal Flash Storage)标准,为移动设备提供了更高速度的存储解决方案。 -- 2013年,NVMe 1.0 规范正式发布,为固态硬盘提供了更高性能的数据传输接口。 -- 2015年,三星发布了其首款NVMe固态硬盘——Samsung 950 Pro,采用 M.2 接口和 V-NAND 技术,具有更高的读写速度和更小的尺寸。 +- 1978 年,Toshiba 的工程师 Fujio Masuoka 发明了闪存技术,这是固态硬盘的基础技术。 +- 1991 年,SanDisk 推出首款基于 NAND 闪存的固态硬盘,容量为 20MB,主要应用于工业和军事领域。 +- 1995 年,IBM 发布了第一款 PCI 接口的固态硬盘,提高了数据传输速度。 +- 2007 年,Intel 推出了其首款主流固态硬盘——Intel X25-M,使用了 MLC(Multi-Level Cell)NAND 闪存技术,容量为 80GB,标志着固态硬盘开始进入消费者市场。 +- 2008 年,OCZ 推出了第一款支持 SATA 接口的固态硬盘,使得 SSD 更容易与现有计算机系统兼容。 +- 2011 年,高通和三星等公司联合制定了 UFS(Universal Flash Storage)标准,为移动设备提供了更高速度的存储解决方案。 +- 2013 年,NVMe 1.0 规范正式发布,为固态硬盘提供了更高性能的数据传输接口。 +- 2015 年,三星发布了其首款 NVMe 固态硬盘——Samsung 950 Pro,采用 M.2 接口和 V-NAND 技术,具有更高的读写速度和更小的尺寸。 2020 年主流的 SSD 厂商包括**三星、英特尔、西部数据、东芝、海力士和金士顿**等。 @@ -212,7 +212,7 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 | 接口 | 传输速度 | 优点 | 缺点 | 适用场景 | | ----------------------------------- | ---------------------- | -------------------------------------- | -------------------------------- | ------------------------------ | | PATA(Parallel ATA) | 最高 133MB/s | 成本较低,向后兼容性好 | 速度较慢,数据线较粗,占用空间大 | 早期台式机和笔记本电脑 | -| SATA(Serial ATA) | 最高 6Gbps | 速度较快,数据线较细,易安装,兼容性好 | 速度相对于 NVMe仍较慢 | 台式机和笔记本电脑 | +| SATA(Serial ATA) | 最高 6Gbps | 速度较快,数据线较细,易安装,兼容性好 | 速度相对于 NVMe 仍较慢 | 台式机和笔记本电脑 | | NVMe(Non-Volatile Memory Express) | PCIe 3.0 x4:32 Gbit/s | 更高的传输速度,低延迟,可扩展性好 | 成本较高,需要主板支持 | 高性能台式机、笔记本、服务器等 | | | PCIe 4.0 x4:64 Gbit/s | | | | @@ -226,9 +226,9 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 固态硬盘(SSD)是一种非易失性的数据存储设备,它使用闪存(Flash Memory)作为存储介质。闪存具有较高的存储密度、较快的读取速度和较低的功耗,因此非常适合用于固态硬盘。与传统的机械硬盘(HDD)相比,固态硬盘没有机械运动部件,因此具有更高的读写速度、更低的延迟和更高的可靠性。 -固态硬盘的核心组件包括控制器和闪存。控制器负责管理数据的读写操作、通信接口(如SATA或NVMe)、错误检测和校正(ECC)以及其他高级功能,如垃圾回收和可穿戴平衡。闪存中的数据存储在称为存储单元的微小晶体管中,数据通过改变存储单元的电子电压来表示不同的状态。 +固态硬盘的核心组件包括控制器和闪存。控制器负责管理数据的读写操作、通信接口(如 SATA 或 NVMe)、错误检测和校正(ECC)以及其他高级功能,如垃圾回收和可穿戴平衡。闪存中的数据存储在称为存储单元的微小晶体管中,数据通过改变存储单元的电子电压来表示不同的状态。 -为了提高写入性能和延长硬盘寿命,固态硬盘采用了可穿戴平衡策略,并通过映射表将操作系统看到的逻辑地址映射到闪存中的物理地址。此外,固态硬盘还使用垃圾回收算法优化存储空间使用,以及接收操作系统的TRIM命令来提高写入性能。 +为了提高写入性能和延长硬盘寿命,固态硬盘采用了可穿戴平衡策略,并通过映射表将操作系统看到的逻辑地址映射到闪存中的物理地址。此外,固态硬盘还使用垃圾回收算法优化存储空间使用,以及接收操作系统的 TRIM 命令来提高写入性能。 #### 设计结构 @@ -236,19 +236,19 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 > 来源:[深入浅出SSD - 注册以后还能改吧 - 博客园](https://www.cnblogs.com/lmhyhblog/p/12508849.html);仅学术引用,著作权归作者所有。 -1. 闪存芯片(Flash Memory Chips):闪存是固态硬盘的核心存储介质,通常采用NAND型闪存。闪存具有较高的存储密度、较快的读取速度和较低的功耗。根据存储单元所存储的比特数,闪存可以分为SLC(单级单元)、MLC(多级单元)、TLC(三级单元)和QLC(四级单元)等类型。 +1. 闪存芯片(Flash Memory Chips):闪存是固态硬盘的核心存储介质,通常采用 NAND 型闪存。闪存具有较高的存储密度、较快的读取速度和较低的功耗。根据存储单元所存储的比特数,闪存可以分为 SLC(单级单元)、MLC(多级单元)、TLC(三级单元)和 QLC(四级单元)等类型。 | 类型 | 存储比特数 | 写入速度 | 寿命 | 容量密度 | 成本 | 适用场景 | | ---- | ----------- | -------- | ---------------- | -------- | ---- | ------------------------------------------------------------ | -| SLC | 1 比特/单元 | 最快 | 最高(约10万次) | 低 | 高 | 企业级存储、高性能应用、工业级存储等要求高可靠性和耐用性的场景 | -| MLC | 2 比特/单元 | 中等 | 高(约3万次) | 中 | 中等 | 主流消费级和企业级应用,平衡了性能、耐用性和成本 | -| TLC | 3 比特/单元 | 较慢 | 中等(约1万次) | 高 | 较低 | 主流消费级存储,适用于大容量、低成本的应用场景 | -| QLC | 4 比特/单元 | 最慢 | 最低(约1千次) | 最高 | 最低 | 面向大容量存储需求,以成本为主要考虑因素的应用场景 | +| SLC | 1 比特/单元 | 最快 | 最高(约 10 万次) | 低 | 高 | 企业级存储、高性能应用、工业级存储等要求高可靠性和耐用性的场景 | +| MLC | 2 比特/单元 | 中等 | 高(约 3 万次) | 中 | 中等 | 主流消费级和企业级应用,平衡了性能、耐用性和成本 | +| TLC | 3 比特/单元 | 较慢 | 中等(约 1 万次) | 高 | 较低 | 主流消费级存储,适用于大容量、低成本的应用场景 | +| QLC | 4 比特/单元 | 最慢 | 最低(约 1 千次) | 最高 | 最低 | 面向大容量存储需求,以成本为主要考虑因素的应用场景 | -1. 控制器(Controller):控制器是固态硬盘的大脑,负责管理数据的读写操作、通信接口(如 SATA 或NVMe)、错误检测和校正(ECC)以及其他高级功能,如垃圾回收、可穿戴平衡和 AES 加密。控制器的性能对固态硬盘的整体性能有很大影响。 +1. 控制器(Controller):控制器是固态硬盘的大脑,负责管理数据的读写操作、通信接口(如 SATA 或 NVMe)、错误检测和校正(ECC)以及其他高级功能,如垃圾回收、可穿戴平衡和 AES 加密。控制器的性能对固态硬盘的整体性能有很大影响。 2. 缓存(Cache):部分固态硬盘配置有 DRAM 或 SRAM 作为缓存,用于临时存储数据以提高数据传输速度。缓存还可以用于存储映射表(Mapping Table),用于记录逻辑地址和物理地址之间的映射关系。 3. 电源电路(Power Circuitry):固态硬盘的电源电路负责将来自主板的电源转换为适用于控制器和闪存芯片的电压。 -4. 接口(Interface):固态硬盘需要一个接口与主板相连,以便于数据传输和电源供应。常见的接口类型包括SATA、mSATA、M.2(支持SATA和NVMe协议)以及 U.2 等。 +4. 接口(Interface):固态硬盘需要一个接口与主板相连,以便于数据传输和电源供应。常见的接口类型包括 SATA、mSATA、M.2(支持 SATA 和 NVMe 协议)以及 U.2 等。 5. 固件(Firmware):固态硬盘的固件包含一组存储在控制器上的指令,用于控制和管理硬盘的各种功能。固件可以通过制造商发布的更新来优化性能和修复已知问题。 6. 散热(Thermal Management):高性能的固态硬盘在运行过程中可能会产生较高的热量,因此需要采取一定的散热措施。散热解决方案包括散热片、热导管以及与主板的热接触等。 @@ -271,18 +271,18 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 ### 长江存储 -长江存储(Yangtze Memory Technologies Co., Ltd.,YMTC)是一家中国领先的半导体存储产品制造商,总部位于武汉市东湖新技术开发区。长江存储成立于2016年,由中国国家集成电路产业投资基金、武汉市政府、合肥市政府和清华紫光集团共同投资成立。 +长江存储(Yangtze Memory Technologies Co., Ltd.,YMTC)是一家中国领先的半导体存储产品制造商,总部位于武汉市东湖新技术开发区。长江存储成立于 2016 年,由中国国家集成电路产业投资基金、武汉市政府、合肥市政府和清华紫光集团共同投资成立。 -- 2016年,长江存储正式成立。 -- 2017年,长江存储研发成功32层堆叠3D NAND闪存。 -- 2018年,公司成功研发64层堆叠3D NAND闪存,实现量产。 -- 2019年,长江存储发布128层3D NAND闪存。 -- 2020年,长江存储正式宣布128层3D NAND闪存量产。 -- 2021年,长江存储的128层闪存开始广泛应用于客户端SSD产品。 +- 2016 年,长江存储正式成立。 +- 2017 年,长江存储研发成功 32 层堆叠 3D NAND 闪存。 +- 2018 年,公司成功研发 64 层堆叠 3D NAND 闪存,实现量产。 +- 2019 年,长江存储发布 128 层 3D NAND 闪存。 +- 2020 年,长江存储正式宣布 128 层 3D NAND 闪存量产。 +- 2021 年,长江存储的 128 层闪存开始广泛应用于客户端 SSD 产品。 -长江存储的主要发展方向是提高闪存产品的性能和容量,降低生产成本,不断扩大市场份额。公司将继续专注于3D NAND闪存技术的研发和量产,努力实现更高层次的堆叠技术,以满足客户在各种应用场景的需求。此外,长江存储也将积极拓展国际市场,与全球半导体产业链深度合作,提高国产存储器在全球市场的竞争力。 +长江存储的主要发展方向是提高闪存产品的性能和容量,降低生产成本,不断扩大市场份额。公司将继续专注于 3D NAND 闪存技术的研发和量产,努力实现更高层次的堆叠技术,以满足客户在各种应用场景的需求。此外,长江存储也将积极拓展国际市场,与全球半导体产业链深度合作,提高国产存储器在全球市场的竞争力。 -长江存储是中国领先的半导体存储制造商,自成立以来,公司在3D NAND闪存技术领域取得了显著成果。通过不断提高产品性能、降低成本以及拓展国际市场,长江存储正努力在全球存储产业中树立中国品牌的地位,推动国产半导体产业的发展。 +长江存储是中国领先的半导体存储制造商,自成立以来,公司在 3D NAND 闪存技术领域取得了显著成果。通过不断提高产品性能、降低成本以及拓展国际市场,长江存储正努力在全球存储产业中树立中国品牌的地位,推动国产半导体产业的发展。 ***国产之光,冲冲冲!*** @@ -293,13 +293,13 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 | 系统 | 全拼 | 功能 | 优点 | 用途 | | -------- | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | --------------------------------------------------------- | | Ext2 | Second Extended File System | 提供基本的文件存储功能 | 简单,速度较快,可靠性高 | 适用于小型存储设备,如闪存卡 | -| Ext3 | Third Extended File System | 在Ext2基础上增加了日志功能 | 文件系统可靠性更高,具有较好的容错能力 | 适用于大多数Linux发行版,以及需要可靠数据存储的服务器环境 | -| Ext4 | Fourth Extended File System | 在Ext3基础上增加了更多的特性,如更大的文件系统和更高的性能 | 支持大容量文件和高性能文件系统访问 | 适用于大型服务器和高性能计算机 | +| Ext3 | Third Extended File System | 在 Ext2 基础上增加了日志功能 | 文件系统可靠性更高,具有较好的容错能力 | 适用于大多数 Linux 发行版,以及需要可靠数据存储的服务器环境 | +| Ext4 | Fourth Extended File System | 在 Ext3 基础上增加了更多的特性,如更大的文件系统和更高的性能 | 支持大容量文件和高性能文件系统访问 | 适用于大型服务器和高性能计算机 | | XFS | XFS File System | 高性能文件系统,支持大容量文件和高吞吐量应用 | 速度快,可靠性高,适合高性能计算和大型存储设备 | 适用于需要大容量和高性能访问的服务器环境 | | Btrfs | B-tree File System | 先进的文件系统,支持快照、数据压缩和多个设备的联合文件系统等功能 | 可靠性高,能够在多个设备之间提供容错性 | 适用于需要高效数据管理和可靠存储的服务器和桌面环境 | -| NTFS | New Technology File System | Windows操作系统上的文件系统,支持文件和目录的权限控制和加密等功能 | 可以处理很大的文件系统,能够在Windows和Linux之间进行数据传输 | 适用于需要与Windows系统交互的Linux系统 | -| FAT32 | File Allocation Table 32-bit | 一种老旧的文件系统,支持大容量的存储设备 | 可以在不同的操作系统之间进行数据传输,通常用于移动设备和便携式存储介质上 | 适用于小型存储设备,如USB闪存盘和SD卡 | -| ISO 9660 | International Standard Organization 9660 | 用于光盘文件系统 | 支持只读访问,可以在不同的操作系统之间进行数据传输 | 适用于在CD和DVD上发布数据的场景 | +| NTFS | New Technology File System | Windows 操作系统上的文件系统,支持文件和目录的权限控制和加密等功能 | 可以处理很大的文件系统,能够在 Windows 和 Linux 之间进行数据传输 | 适用于需要与 Windows 系统交互的 Linux 系统 | +| FAT32 | File Allocation Table 32-bit | 一种老旧的文件系统,支持大容量的存储设备 | 可以在不同的操作系统之间进行数据传输,通常用于移动设备和便携式存储介质上 | 适用于小型存储设备,如 USB 闪存盘和 SD 卡 | +| ISO 9660 | International Standard Organization 9660 | 用于光盘文件系统 | 支持只读访问,可以在不同的操作系统之间进行数据传输 | 适用于在 CD 和 DVD 上发布数据的场景 | | NFS | Network File System | 一种网络文件系统,可以让不同的机器上的用户共享文件系统 | 能够在不同的计算机之间共享文件和目录,提供高度的数据访问性能 | 适用于需要在多个计算机之间共享文件的网络环 | ### 层次结构 @@ -314,27 +314,27 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 | ------ | --------------------- | ---------------------------- | ------------------------------------------------------------ | | / | Root | 根目录 | 包含所有其他目录和文件的根目录 | | /bin | Binary | 存放系统二进制可执行文件 | 包含最基本的系统命令 | -| /boot | Boot | 存放启动加载程序和内核 | 包含启动Linux系统所必需的文件 | -| /dev | Device | 存放设备文件 | 包含Linux系统中所有的设备文件,如硬盘、键盘、鼠标等 | -| /etc | Etcetera | 存放系统配置文件 | 包含Linux系统中所有的系统配置文件,如网络配置文件、用户账号配置文件等 | +| /boot | Boot | 存放启动加载程序和内核 | 包含启动 Linux 系统所必需的文件 | +| /dev | Device | 存放设备文件 | 包含 Linux 系统中所有的设备文件,如硬盘、键盘、鼠标等 | +| /etc | Etcetera | 存放系统配置文件 | 包含 Linux 系统中所有的系统配置文件,如网络配置文件、用户账号配置文件等 | | /home | Home | 存放用户家目录 | 包含所有用户的家目录 | | /lib | Library | 存放系统共享库文件 | 包含系统运行时所需要的一些库函数 | -| /media | Media | 存放可移动介质挂载点 | 包含可移动介质的挂载点,如U盘、光盘等 | +| /media | Media | 存放可移动介质挂载点 | 包含可移动介质的挂载点,如 U 盘、光盘等 | | /mnt | Mount | 存放挂载点 | 包含文件系统挂载点,用于临时挂载其他文件系统 | | /opt | Optional | 存放第三方应用程序 | 包含安装在系统中的第三方应用程序 | -| /proc | Process | 存放进程相关信息 | 包含Linux系统中所有进程的相关信息 | -| /root | Root | root用户家目录 | 仅限root用户访问的家目录 | +| /proc | Process | 存放进程相关信息 | 包含 Linux 系统中所有进程的相关信息 | +| /root | Root | root 用户家目录 | 仅限 root 用户访问的家目录 | | /run | Run | 存放运行时信息 | 包含运行时所需要的各种信息,如进程号等 | | /sbin | System Binary | 存放系统管理二进制可执行文件 | 包含系统管理员使用的基本命令和系统管理工具 | -| /srv | Service | 存放服务相关数据 | 包含服务相关的数据,如Web服务的网站文件 | +| /srv | Service | 存放服务相关数据 | 包含服务相关的数据,如 Web 服务的网站文件 | | /sys | System | 存放系统设备文件 | 包含系统中所有设备的相关信息 | | /tmp | Temporary | 存放临时文件 | 包含系统中各种临时文件 | -| /usr | Unix Shared Resources | 存放Unix共享资源 | 包含系统中大多数应用程序、库文件和文档等 | +| /usr | Unix Shared Resources | 存放 Unix 共享资源 | 包含系统中大多数应用程序、库文件和文档等 | | /var | Variable | 存放经常变化的文件 | 包含系统中经常变化的文件,如日志文件、数据库文件等 | ### 文件元数据 -**在 Linux 系统中,每个文件都有其对应的元信息,也称为元数据(metadata)。**元数据包含了文件的基本属性,如文件的创建时间、访问时间、修改时间,文件大小,文件所有者和所属组,文件的权限等等。 +**在 Linux 系统中,每个文件都有其对应的元信息,也称为元数据 (metadata)。**元数据包含了文件的基本属性,如文件的创建时间、访问时间、修改时间,文件大小,文件所有者和所属组,文件的权限等等。 以下是一些常见的文件元数据: @@ -346,11 +346,11 @@ GPT 是新一代硬盘分区标准,它将硬盘的分区信息保存在硬盘 - 文件所有者和所属组:表示文件的所有者和所属组。 - 文件状态:如 inode 号码、硬链接数等。 -在 Unix 和类 Unix 操作系统中 文件系统中,每个文件或目录都有一个inode号码,它是唯一的,由文件系统分配,文件名只是 inode 的别名而已。当我们打开一个文件时,实际上是根据该文件名找到对应的 inode,然后通过 inode 读取文件的数据。 +在 Unix 和类 Unix 操作系统中 文件系统中,每个文件或目录都有一个 inode 号码,它是唯一的,由文件系统分配,文件名只是 inode 的别名而已。当我们打开一个文件时,实际上是根据该文件名找到对应的 inode,然后通过 inode 读取文件的数据。 index node (inode) 是 Unix 和类 Unix 操作系统中的一个重要概念,它是文件系统中用来存储文件或目录的元数据信息的一种数据结构,每个文件或目录都对应一个唯一的 inode。下面是一个示例 inode 表格: -| 文件类型 | inode号 | 大小 | 拥有者 | 权限 | 访问时间 | 修改时间 | 创建时间 | +| 文件类型 | inode 号 | 大小 | 拥有者 | 权限 | 访问时间 | 修改时间 | 创建时间 | | -------- | ------- | ---- | ------ | ---- | -------- | -------- | -------- | | 普通文件 | 12345 | 1KB | root | 644 | 2022/3/1 | 2022/3/2 | 2022/3/1 | @@ -358,7 +358,7 @@ index node (inode) 是 Unix 和类 Unix 操作系统中的一个重要概念, **在 Linux 系统中,一切都是文件**,包括硬件设备也不例外。这是因为在 Linux 中,硬件设备被抽象成了一种特殊的文件类型,称为设备文件(Device file)。设备文件用于对硬件设备进行读写操作,类似于普通文件的读写操作。设备文件分为两种类型: -- **块设备文件**:对应的硬件设备是以块为单位进行读写的设备,例如硬盘、U盘等; +- **块设备文件**:对应的硬件设备是以块为单位进行读写的设备,例如硬盘、U 盘等; - **字符设备文件**:对应的硬件设备是以字符为单位进行读写的设备,例如键盘、鼠标、打印机等。 在 Linux 系统中,每个设备文件都有一个对应的设备文件名,该文件名通常位于 /dev 目录下,不同的硬件设备会有不同的设备文件名。通过访问设备文件,用户可以对硬件设备进行操作。例如,如果想要读取硬盘的数据,用户可以通过访问对应的设备文件(如 /dev/sda)来读取数据,而不需要关心具体的物理硬盘是什么型号、连接方式等等。这种抽象的方式让用户更方便地使用硬件设备,并且使得操作系统能够更好地管理硬件设备。 @@ -366,7 +366,7 @@ index node (inode) 是 Unix 和类 Unix 操作系统中的一个重要概念, | 硬件设备 | 命名规则 | | -------------------------- | -------------------- | | IDE 接口硬盘 | /dev/hd[a-d] | -| SCSI、SATA、U盘 | /dev/sd[a-z] | +| SCSI、SATA、U 盘 | /dev/sd[a-z] | | KVM/QEMU 虚拟设备 | /dev/vd[a-z] | | 软盘 | /dev/fd[0-1] | | 打印机 | /dev/lp[0-15] | @@ -406,7 +406,7 @@ I/O 大小(最小/最佳):512 字节 / 512 字节 #### 2.创建分区 -如果新硬盘未被分区,则需要先创建分区。可以使用 `fdisk` 命令来创建分区,然后按照提示创建分区。 +如果新硬盘未被分区,则需要先创建分区。可以使用 `fdisk` 命令来创建分区,然后按照提示创建分区。 ```shell [root@rhel ~]# fdisk /dev/nvme0n2 @@ -437,7 +437,7 @@ I/O 大小(最小/最佳):512 字节 / 512 字节 #### 3.格式化分区 -分区创建完成后,需要将分区格式化为文件系统才能挂载。可以使用 `mkfs` 命令来格式化分区,比如可以使用 `mkfs.ext4 /dev/nvme0n2p1`命令将 `/dev/nvme0n2p1` 分区格式化为 ext4 文件系统。 +分区创建完成后,需要将分区格式化为文件系统才能挂载。可以使用 `mkfs` 命令来格式化分区,比如可以使用 `mkfs.ext4 /dev/nvme0n2p1` 命令将 `/dev/nvme0n2p1` 分区格式化为 ext4 文件系统。 ```shell [root@rhel ~]# lsblk @@ -653,42 +653,42 @@ Linux 系统中,隐藏权限通常指那些不容易被用户发现的权限 分区表的历史可以追溯到早期的操作系统,例如 MS-DOS、Windows 95 等。**早期的操作系统并没有支持硬盘分区的概念,所有的数据都存储在硬盘的同一个分区中。这样做有许多限制,例如数据管理和备份都不方便,硬盘容量也受到了限制。** -为了克服这些限制,早期的操作系统开始使用分区表来管理硬盘分区。早期的分区表格式包括 MBR 分区表和 APM(Apple Partition Map)分区表等。MBR 分区表是最早被广泛使用的分区表格式之一,最早出现于 1983年,可以管理硬盘上的最多 4 个主分区或 3 个主分区和 1 个扩展分区。APM 分区表是苹果公司开发的一种分区表格式,用于管理 Macintosh 计算机上的硬盘分区。 +为了克服这些限制,早期的操作系统开始使用分区表来管理硬盘分区。早期的分区表格式包括 MBR 分区表和 APM(Apple Partition Map)分区表等。MBR 分区表是最早被广泛使用的分区表格式之一,最早出现于 1983 年,可以管理硬盘上的最多 4 个主分区或 3 个主分区和 1 个扩展分区。APM 分区表是苹果公司开发的一种分区表格式,用于管理 Macintosh 计算机上的硬盘分区。 -随着计算机硬件的不断升级,MBR 分区表已经无法满足大容量硬盘的管理需求,因此新的分区表格式应运而生。GPT 分区表是一种较新的分区表格式,它使用全球唯一的 GUID 标识硬盘上的分区信息,支持的最大硬盘容量为EB(exabyte)级别,最多可以管理 128 个分区。GPT 分区表还支持热插拔、校验和、备份分区表等特性。同时,由于 GPT 分区表使用了 GUID 标识硬盘上的分区信息,因此 GPT 分区表比 MBR 分区表更加安全可靠。 +随着计算机硬件的不断升级,MBR 分区表已经无法满足大容量硬盘的管理需求,因此新的分区表格式应运而生。GPT 分区表是一种较新的分区表格式,它使用全球唯一的 GUID 标识硬盘上的分区信息,支持的最大硬盘容量为 EB(exabyte)级别,最多可以管理 128 个分区。GPT 分区表还支持热插拔、校验和、备份分区表等特性。同时,由于 GPT 分区表使用了 GUID 标识硬盘上的分区信息,因此 GPT 分区表比 MBR 分区表更加安全可靠。 #### MBR 分区 -MBR(Master Boot Record)是一种分区表结构,位于硬盘的第一个扇区(通常为磁盘的第一个物理扇区,即LBA 0)。MBR 包含了操作系统启动引导代码(Bootloader)和分区表信息。MBR 的主要作用是在计算机启动时加载操作系统。 +MBR(Master Boot Record)是一种分区表结构,位于硬盘的第一个扇区(通常为磁盘的第一个物理扇区,即 LBA 0)。MBR 包含了操作系统启动引导代码(Bootloader)和分区表信息。MBR 的主要作用是在计算机启动时加载操作系统。 MBR 分区方案的历史可以追溯到 1983 年,当时 IBM PC/AT 发布。当时的 PC/AT 使用 16 位 Intel 80286 处理器,最大寻址空间为 16 MB。随着硬盘容量的增长,MBR 分区方案逐渐显现出容量限制。因此,GPT(GUID Partition Table)分区方案应运而生,取代了 MBR。 -MBR分区表结构包括以下部分: +MBR 分区表结构包括以下部分: -1. Bootloader(446字节):存放引导加载程序,负责将操作系统从磁盘加载到内存。 -2. 分区表(64字节):记录了硬盘上分区的信息,如分区类型、分区大小、分区位置等。MBR支持最多四个主分区或三个主分区加一个扩展分区。扩展分区可进一步划分为多个逻辑分区。 -3. 签名(2字节):一个固定的值(0x55AA),表示这是一个有效的MBR分区表。 +1. Bootloader(446 字节):存放引导加载程序,负责将操作系统从磁盘加载到内存。 +2. 分区表(64 字节):记录了硬盘上分区的信息,如分区类型、分区大小、分区位置等。MBR 支持最多四个主分区或三个主分区加一个扩展分区。扩展分区可进一步划分为多个逻辑分区。 +3. 签名(2 字节):一个固定的值(0x55AA),表示这是一个有效的 MBR 分区表。 ##### 标准 MBR 结构 | 字节偏移 (Hex) | 字节偏移 (Oct) | 字节偏移 (Dec) | 长度 (Byte) | 描述 | | -------------- | -------------- | -------------- | ----------- | ----------------------------------- | | 0x000 | 0000 | 0 | 446 | Bootloader(引导加载程序) | -| 0x1BE | 0676 | 446 | 16 | 主分区1(分区表条目1) | -| 0x1CE | 0706 | 462 | 16 | 主分区2(分区表条目2) | -| 0x1DE | 0736 | 478 | 16 | 主分区3(分区表条目3) | -| 0x1EE | 0766 | 494 | 16 | 主分区4(分区表条目4) | -| 0x1FE | 0776 | 510 | 2 | 签名(0x55AA,表示有效的MBR分区表) | +| 0x1BE | 0676 | 446 | 16 | 主分区 1(分区表条目 1) | +| 0x1CE | 0706 | 462 | 16 | 主分区 2(分区表条目 2) | +| 0x1DE | 0736 | 478 | 16 | 主分区 3(分区表条目 3) | +| 0x1EE | 0766 | 494 | 16 | 主分区 4(分区表条目 4) | +| 0x1FE | 0776 | 510 | 2 | 签名(0x55AA,表示有效的 MBR 分区表) | ##### 分区表条目结构 | 字节偏移 (Hex) | 字节偏移 (Oct) | 字节偏移 (Dec) | 长度 (Byte) | 描述 | | -------------- | -------------- | -------------- | ----------- | ---------------------------- | -| 0x00 | 000 | 0 | 1 | 引导标识符(80h为活动分区) | +| 0x00 | 000 | 0 | 1 | 引导标识符(80h 为活动分区) | | 0x01 | 001 | 1 | 3 | 起始磁头(柱面、磁头、扇区) | | 0x04 | 004 | 4 | 1 | 分区类型 | | 0x05 | 005 | 5 | 3 | 结束磁头(柱面、磁头、扇区) | -| 0x08 | 010 | 8 | 4 | 起始LBA地址 | +| 0x08 | 010 | 8 | 4 | 起始 LBA 地址 | | 0x0C | 014 | 12 | 4 | 分区扇区数 | ##### MBR 优点 @@ -698,7 +698,7 @@ MBR分区表结构包括以下部分: ##### MBR 缺点 -1. 容量限制:MBR 分区方案最大支持 2TB(2^32扇区 * 512字节/扇区)的硬盘容量。 +1. 容量限制:MBR 分区方案最大支持 2TB(2^32 扇区 * 512 字节/扇区)的硬盘容量。 2. 分区数量限制:**MBR 最多支持四个主分区,或三个主分区加一个扩展分区。**对于现代计算机而言,这一限制可能较为局限。 3. 无备份机制:MBR 没有备份分区表的机制,一旦 MBR 损坏,可能导致数据丢失。 @@ -712,34 +712,34 @@ GPT(GUID Partition Table)是一种分区表结构,适用于新型磁盘和 **随着计算机技术的发展以及硬盘容量的增长,MBR 分区方案逐渐暴露出容量和分区数量的限制。**为解决这些问题,Intel 在 1999 年引入了 GPT 分区方案。GPT 随后被纳入 UEFI 规范,成为现代计算机系统的主流分区方案。 -GPT分区表结构包括以下部分: +GPT 分区表结构包括以下部分: -1. 保护性MBR(LBA 0):在 GPT 磁盘的第一个扇区,包含一个伪 MBR,以兼容旧式磁盘管理工具。 +1. 保护性 MBR(LBA 0):在 GPT 磁盘的第一个扇区,包含一个伪 MBR,以兼容旧式磁盘管理工具。 2. GPT Header(LBA 1):包含 GPT 分区表的元数据,如分区表大小、分区表位置等。 3. Partition Entry Array(LBA 2~33):存储分区条目信息。每个分区条目占用 128 字节,典型的 GPT 分区表支持最多 128 个分区。 4. 备份分区表:GPT 在磁盘的末尾备份了 Header 和 Partition Entry Array,以提高数据安全性。 ##### 标准 GPT 结构 -| 区域 | 起始LBA (Hex) | 起始LBA (Oct) | 起始LBA (Dec) | 长度(扇区) | 描述 | +| 区域 | 起始 LBA (Hex) | 起始 LBA (Oct) | 起始 LBA (Dec) | 长度(扇区) | 描述 | | -------------------------- | ------------- | ------------- | ------------- | ------------ | ------------------------------------------ | -| 保护性MBR (Protective MBR) | 0x0 | 00000 | 0 | 1 | 保护性主引导记录,用于兼容旧式磁盘管理工具 | -| GPT Header | 0x1 | 00001 | 1 | 1 | 包含GPT分区表的元数据 | -| Partition Entry Array | 0x2 | 00002 | 2 | 32 | 存储分区条目信息,每个分区条目占用128字节 | +| 保护性 MBR (Protective MBR) | 0x0 | 00000 | 0 | 1 | 保护性主引导记录,用于兼容旧式磁盘管理工具 | +| GPT Header | 0x1 | 00001 | 1 | 1 | 包含 GPT 分区表的元数据 | +| Partition Entry Array | 0x2 | 00002 | 2 | 32 | 存储分区条目信息,每个分区条目占用 128 字节 | | 主数据区 (Primary Data) | 0x22 | 00042 | 34 | 可变 | 磁盘的主要数据存储区域 | -| 备份Partition Entry Array | -0x21 | -00041 | -33 | 32 | 磁盘末尾的备份分区条目数组 | -| 备份GPT Header | -0x1 | -00001 | -1 | 1 | 磁盘末尾的备份GPT Header | +| 备份 Partition Entry Array | -0x21 | -00041 | -33 | 32 | 磁盘末尾的备份分区条目数组 | +| 备份 GPT Header | -0x1 | -00001 | -1 | 1 | 磁盘末尾的备份 GPT Header | ##### 分区条目结构 | 字节偏移 (Hex) | 字节偏移 (Oct) | 字节偏移 (Dec) | 长度 (Byte) | 描述 | | -------------- | -------------- | -------------- | ----------- | -------------------------- | -| 0x00 | 000 | 0 | 16 | 分区类型GUID | -| 0x10 | 020 | 16 | 16 | 唯一分区GUID | -| 0x20 | 040 | 32 | 8 | 起始LBA地址 | -| 0x28 | 050 | 40 | 8 | 结束LBA地址 | +| 0x00 | 000 | 0 | 16 | 分区类型 GUID | +| 0x10 | 020 | 16 | 16 | 唯一分区 GUID | +| 0x20 | 040 | 32 | 8 | 起始 LBA 地址 | +| 0x28 | 050 | 40 | 8 | 结束 LBA 地址 | | 0x30 | 060 | 48 | 8 | 分区属性(如只读、隐藏等) | -| 0x38 | 070 | 56 | 72 | 分区名称(UTF-16LE编码) | +| 0x38 | 070 | 56 | 72 | 分区名称(UTF-16LE 编码) | ##### 优点 @@ -751,7 +751,7 @@ GPT分区表结构包括以下部分: 1. 兼容性问题:虽然大多数现代操作系统和硬件都支持 GPT,**但在较旧的系统中可能存在兼容性问题。** -GPT 目前适用于以下场景:大容量硬盘(容量大于2TB)、需要创建超过 4 个分区、现代操作系统和硬件(支持UEFI)。 +GPT 目前适用于以下场景:大容量硬盘(容量大于 2TB)、需要创建超过 4 个分区、现代操作系统和硬件(支持 UEFI)。 随着计算机技术的发展以及硬盘容量的增长,GPT 分区方案将逐渐成为主流。GPT 在磁盘容量支持、分区数量和数据安全性等方面具有优势,已经成为现代操作系统和硬件的首选分区方案。随着旧式硬件和操作系统的逐渐淘汰,GPT 的普及程度将进一步提高。 @@ -776,7 +776,7 @@ GPT 目前适用于以下场景:大容量硬盘(容量大于2TB)、需要 ### 分区工具 -#### parted +#### Parted Parted(GNU Parted)是一个磁盘分区和管理的命令行工具,它的全称是“GNU Partition Editor”。Parted 是由 GNU 项目开发的自由软件,主要用于创建、修改和删除磁盘分区。它在 Linux 系统中广泛应用,并支持多种文件系统和磁盘标签,如 ext2/ext3/ext4、FAT16/FAT32、NTFS、HFS+、XFS、JFS 等。 @@ -822,7 +822,7 @@ Parted 适用于在 Linux 系统下进行磁盘分区管理的场景,包括创 Parted 将继续保持对新文件系统和磁盘技术的支持,以适应不断发展的硬件和软件环境。此外,开发者可能会继续改进其性能和稳定性,以满足用户在各种场景下的需求。随着技术的发展,Parted 也可能会支持新的存储介质,如固态硬盘、NVMe 等。同时,对于一些现有问题,如对特定文件系统支持的不完善,未来可能会有所改进。另外,随着图形界面工具的普及,Parted 可能会与这些工具更紧密地集成,以提供更友好的用户体验。 -#### gdisk +#### Gdisk gdisk(GUID Partition Table Disk)是一个用于操作 GPT 分区表的命令行工具。它与传统的 fdisk 工具类似,但是专门针对 GPT 分区表进行了优化。gdisk 是由 Rod Smith 开发的,随着大容量硬盘的普及以及对 UEFI(统一可扩展固件接口)支持的增加,GPT 分区表成为了越来越重要的一部分。 @@ -851,7 +851,7 @@ gdisk 支持 GPT 分区表,解决了 MBR 分区表的闲置,支持 UEFI 引 | | w | 保存更改,将修改写入磁盘,会提示是否确认 | | | q | 退出 gdisk,不保存修改 | -#### fdisk +#### Fdisk fdisk 是一个 Linux 系统下的磁盘分区管理工具。它可以用于创建、删除、修改分区表,以及设置分区启动标志。fdisk 支持 MBR(主引导记录)分区表,适用于 BIOS 分区表管理。 @@ -863,7 +863,7 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 ## 磁盘管理 -磁盘管理是计算机系统管理的重要部分,涉及到磁盘的格式化、检查、修复、清理、优化、监控和诊断等操作。在Linux 系统中,有许多命令行工具可以帮助我们完成这些任务。 +磁盘管理是计算机系统管理的重要部分,涉及到磁盘的格式化、检查、修复、清理、优化、监控和诊断等操作。在 Linux 系统中,有许多命令行工具可以帮助我们完成这些任务。 ### 磁盘格式化 @@ -872,15 +872,15 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 常用的磁盘格式化工具有: - mkfs:通用的文件系统格式化工具,支持多种文件系统。 -- mke2fs:专门用于创建ext2、ext3、ext4文件系统的工具。 +- mke2fs:专门用于创建 ext2、ext3、ext4 文件系统的工具。 常用命令及选项: | 命令 | 说明 | | ------------------------ | ----------------------------------------------------------- | -| mkfs -t ext4 /dev/sda1 | 将/dev/sda1分区格式化为ext4文件系统 | -| mke2fs -j /dev/sda1 | 将/dev/sda1分区格式化为ext3文件系统(带日志功能) | -| mke2fs -b 4096 /dev/sda1 | 将/dev/sda1分区格式化为ext2文件系统,并设置块大小为4096字节 | +| mkfs -t ext4 /dev/sda1 | 将/dev/sda1 分区格式化为 ext4 文件系统 | +| mke2fs -j /dev/sda1 | 将/dev/sda1 分区格式化为 ext3 文件系统(带日志功能) | +| mke2fs -b 4096 /dev/sda1 | 将/dev/sda1 分区格式化为 ext2 文件系统,并设置块大小为 4096 字节 | ### 磁盘检查与修复 @@ -888,22 +888,22 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 常用的磁盘检查与修复工具有: -- 文件系统检查:fsck、e2fsck(针对ext2、ext3、ext4) +- 文件系统检查:fsck、e2fsck(针对 ext2、ext3、ext4) - 坏扇区检测:badblocks - 数据恢复:testdisk、photorec -- 文件系统修复:xfs_repair(针对xfs)、btrfs-check(针对btrfs) +- 文件系统修复:xfs_repair(针对 xfs)、btrfs-check(针对 btrfs) 常用命令及选项: | 命令 | 说明 | | ------------------------------ | ------------------------------------------------------- | -| fsck /dev/sda1 | 检查并尝试修复/dev/sda1分区的文件系统 | -| e2fsck -f /dev/sda1 | 强制检查并尝试修复/dev/sda1分区的ext2/ext3/ext4文件系统 | -| badblocks -v /dev/sda1 | 以详细模式检查/dev/sda1分区的坏扇区 | -| testdisk /dev/sda | 检查并尝试恢复/dev/sda磁盘上的分区表、引导扇区等 | -| photorec /dev/sda1 | 从/dev/sda1分区中恢复丢失的文件 | -| xfs_repair /dev/sda1 | 检查并修复/dev/sda1分区的xfs文件系统 | -| btrfs-check --repair /dev/sda1 | 检查并修复/dev/sda1分区的btrfs文件系统 | +| fsck /dev/sda1 | 检查并尝试修复/dev/sda1 分区的文件系统 | +| e2fsck -f /dev/sda1 | 强制检查并尝试修复/dev/sda1 分区的 ext2/ext3/ext4 文件系统 | +| badblocks -v /dev/sda1 | 以详细模式检查/dev/sda1 分区的坏扇区 | +| testdisk /dev/sda | 检查并尝试恢复/dev/sda 磁盘上的分区表、引导扇区等 | +| photorec /dev/sda1 | 从/dev/sda1 分区中恢复丢失的文件 | +| xfs_repair /dev/sda1 | 检查并修复/dev/sda1 分区的 xfs 文件系统 | +| btrfs-check --repair /dev/sda1 | 检查并修复/dev/sda1 分区的 btrfs 文件系统 | ### 磁盘清理与优化 @@ -912,21 +912,21 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 常用的磁盘清理与优化工具有: - 清理临时文件:tmpwatch、systemd-tmpfiles -- 碎片整理:e2fsck(针对ext系列)、xfs_fsr(针对xfs) -- 磁盘压缩:btrfs filesystem defragment(针对btrfs) -- 磁盘加密:dm-crypt、LUKS、eCryptfs、VeraCrypt等 +- 碎片整理:e2fsck(针对 ext 系列)、xfs_fsr(针对 xfs) +- 磁盘压缩:btrfs filesystem defragment(针对 btrfs) +- 磁盘加密:dm-crypt、LUKS、eCryptfs、VeraCrypt 等 常用命令及选项: | 命令 | 说明 | | -------------------------------------- | ---------------------------------------------------- | -| tmpwatch --mtime 7 /tmp | 删除/tmp目录中超过7天未修改的临时文件 | +| tmpwatch --mtime 7 /tmp | 删除/tmp 目录中超过 7 天未修改的临时文件 | | systemd-tmpfiles --clean | 按照/tmpfiles.d/目录中的配置文件,清理过期的临时文件 | -| e2fsck -D /dev/sda1 | 对/dev/sda1分区的ext2/ext3/ext4文件系统进行碎片整理 | -| xfs_fsr /dev/sda1 | 对/dev/sda1分区的xfs文件系统进行碎片整理 | -| btrfs filesystem defragment /mnt/btrfs | 对挂载在/mnt/btrfs的btrfs文件系统进行压缩整理 | -| cryptsetup luksFormat /dev/sda1 | 使用LUKS对/dev/sda1分区进行加密 | -| veracrypt --create /dev/sda1 | 使用VeraCrypt对/dev/sda1分区进行加密 | +| e2fsck -D /dev/sda1 | 对/dev/sda1 分区的 ext2/ext3/ext4 文件系统进行碎片整理 | +| xfs_fsr /dev/sda1 | 对/dev/sda1 分区的 xfs 文件系统进行碎片整理 | +| btrfs filesystem defragment /mnt/btrfs | 对挂载在/mnt/btrfs 的 btrfs 文件系统进行压缩整理 | +| cryptsetup luksFormat /dev/sda1 | 使用 LUKS 对/dev/sda1 分区进行加密 | +| veracrypt --create /dev/sda1 | 使用 VeraCrypt 对/dev/sda1 分区进行加密 | ### 磁盘监控与诊断 @@ -935,28 +935,28 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 常用的磁盘清理与优化工具有: - 清理临时文件:tmpwatch、systemd-tmpfiles -- 碎片整理:e2fsck(针对ext系列)、xfs_fsr(针对xfs) -- 磁盘压缩:btrfs filesystem defragment(针对btrfs) -- 磁盘加密:dm-crypt、LUKS、eCryptfs、VeraCrypt等 +- 碎片整理:e2fsck(针对 ext 系列)、xfs_fsr(针对 xfs) +- 磁盘压缩:btrfs filesystem defragment(针对 btrfs) +- 磁盘加密:dm-crypt、LUKS、eCryptfs、VeraCrypt 等 常用命令及选项: | 命令 | 说明 | | -------------------------------------- | ---------------------------------------------------- | -| tmpwatch --mtime 7 /tmp | 删除/tmp目录中超过7天未修改的临时文件 | +| tmpwatch --mtime 7 /tmp | 删除/tmp 目录中超过 7 天未修改的临时文件 | | systemd-tmpfiles --clean | 按照/tmpfiles.d/目录中的配置文件,清理过期的临时文件 | -| e2fsck -D /dev/sda1 | 对/dev/sda1分区的ext2/ext3/ext4文件系统进行碎片整理 | -| xfs_fsr /dev/sda1 | 对/dev/sda1分区的xfs文件系统进行碎片整理 | -| btrfs filesystem defragment /mnt/btrfs | 对挂载在/mnt/btrfs的btrfs文件系统进行压缩整理 | -| cryptsetup luksFormat /dev/sda1 | 使用LUKS对/dev/sda1分区进行加密 | -| veracrypt --create /dev/sda1 | 使用VeraCrypt对/dev/sda1分区进行加密 | -| fio --name=test --rw=read --bs=4k --numjobs=4 --size=1G --runtime=60s --ioengine=libaio --iodepth=32 --time_based | 测试磁盘的I/O性能,以4K块大小、深度为32的顺序读取方式运行60秒的测试 | -| iozone -a -s 1G | 使用iozone工具对1GB文件进行自动性能测试 | +| e2fsck -D /dev/sda1 | 对/dev/sda1 分区的 ext2/ext3/ext4 文件系统进行碎片整理 | +| xfs_fsr /dev/sda1 | 对/dev/sda1 分区的 xfs 文件系统进行碎片整理 | +| btrfs filesystem defragment /mnt/btrfs | 对挂载在/mnt/btrfs 的 btrfs 文件系统进行压缩整理 | +| cryptsetup luksFormat /dev/sda1 | 使用 LUKS 对/dev/sda1 分区进行加密 | +| veracrypt --create /dev/sda1 | 使用 VeraCrypt 对/dev/sda1 分区进行加密 | +| fio --name=test --rw=read --bs=4k --numjobs=4 --size=1G --runtime=60s --ioengine=libaio --iodepth=32 --time_based | 测试磁盘的 I/O 性能,以 4K 块大小、深度为 32 的顺序读取方式运行 60 秒的测试 | +| iozone -a -s 1G | 使用 iozone 工具对 1GB 文件进行自动性能测试 | | df -h | 以人类可读的格式显示磁盘空间使用情况 | -| du -sh /home | 显示/home目录的磁盘空间占用情况 | -| ncdu /home | 以图形界面显示/home目录的磁盘空间占用情况 | -| iostat -xz 5 | 每隔5秒输出一次磁盘I/O统计信息 | -| iotop -o | 实时显示当前磁盘I/O活动的进程,只显示有I/O操作的进程 | +| du -sh /home | 显示/home 目录的磁盘空间占用情况 | +| ncdu /home | 以图形界面显示/home 目录的磁盘空间占用情况 | +| iostat -xz 5 | 每隔 5 秒输出一次磁盘 I/O 统计信息 | +| iotop -o | 实时显示当前磁盘 I/O 活动的进程,只显示有 I/O 操作的进程 | ## 备份恢复 @@ -1001,14 +1001,14 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 | 命令 | 说明 | | -------------------------------------------- | ------------------------------------------------------------ | -| rsync -avz /src/ /dst/ | 使用rsync工具将/src/目录下的文件同步到/dst/目录下 | -| tar czf backup.tar.gz /src/ | 使用tar工具将/src/目录下的文件打包成backup.tar.gz文件 | -| cpio -o > backup.cpio < filelist.txt | 使用cpio工具将filelist.txt中的文件打包成backup.cpio文件 | -| duplicity /src/ file:///dst/ | 使用duplicity工具将/src/目录下的文件加密并备份到/dst/目录下 | -| dd if=/dev/sda1 of=backup.img | 使用dd工具备份/dev/sda1分区到backup.img文件 | -| partclone.ext4 -c -s /dev/sda1 -o backup.img | 使用partclone工具备份ext4格式的/dev/sda1分区到backup.img文件 | -| mysqldump -u user -p dbname > backup.sql | 使用mysqldump工具备份MySQL数据库到backup.sql文件 | -| pg_dump -U user dbname > backup.sql | 使用pg_dump工具备份PostgreSQL数据库到backup.sql文件 | +| rsync -avz /src/ /dst/ | 使用 rsync 工具将/src/目录下的文件同步到/dst/目录下 | +| tar czf backup.tar.gz /src/ | 使用 tar 工具将/src/目录下的文件打包成 backup.tar.gz 文件 | +| cpio -o > backup.cpio < filelist.txt | 使用 cpio 工具将 filelist.txt 中的文件打包成 backup.cpio 文件 | +| duplicity /src/ file:///dst/ | 使用 duplicity 工具将/src/目录下的文件加密并备份到/dst/目录下 | +| dd if=/dev/sda1 of=backup.img | 使用 dd 工具备份/dev/sda1 分区到 backup.img 文件 | +| partclone.ext4 -c -s /dev/sda1 -o backup.img | 使用 partclone 工具备份 ext4 格式的/dev/sda1 分区到 backup.img 文件 | +| mysqldump -u user -p dbname > backup.sql | 使用 mysqldump 工具备份 MySQL 数据库到 backup.sql 文件 | +| pg_dump -U user dbname > backup.sql | 使用 pg_dump 工具备份 PostgreSQL 数据库到 backup.sql 文件 | ### 恢复操作 @@ -1023,14 +1023,14 @@ fdisk 虽然简单易用,功能全面,但是支支持 MBR 分区表,无法 | 命令 | 说明 | | -------------------------------------------- | ------------------------------------------------------------ | -| rsync -avz /src/ /dst/ | 使用rsync工具从/src/目录下恢复文件到/dst/目录下 | -| tar xzf backup.tar.gz -C /dst/ | 使用tar工具从backup.tar.gz文件恢复文件到/dst/目录下 | -| cpio -i < backup.cpio | 使用cpio工具从backup.cpio文件恢复文件 | -| duplicity restore file:///src/ /dst/ | 使用duplicity工具从/src/目录下的加密备份恢复文件到/dst/目录下 | -| dd if=backup.img of=/dev/sda1 | 使用dd工具从backup.img文件恢复/dev/sda1分区 | -| partclone.ext4 -r -s backup.img -o /dev/sda1 | 使用partclone工具从backup.img文件恢复ext4格式的/dev/sda1分区 | -| mysql -u user -p dbname < backup.sql | 使用mysql命令恢复MySQL数据库从backup.sql文件 | -| psql -U user dbname < backup.sql | 使用psql命令恢复PostgreSQL数据库从backup.sql文件 | +| rsync -avz /src/ /dst/ | 使用 rsync 工具从/src/目录下恢复文件到/dst/目录下 | +| tar xzf backup.tar.gz -C /dst/ | 使用 tar 工具从 backup.tar.gz 文件恢复文件到/dst/目录下 | +| cpio -i < backup.cpio | 使用 cpio 工具从 backup.cpio 文件恢复文件 | +| duplicity restore file:///src/ /dst/ | 使用 duplicity 工具从/src/目录下的加密备份恢复文件到/dst/目录下 | +| dd if=backup.img of=/dev/sda1 | 使用 dd 工具从 backup.img 文件恢复/dev/sda1 分区 | +| partclone.ext4 -r -s backup.img -o /dev/sda1 | 使用 partclone 工具从 backup.img 文件恢复 ext4 格式的/dev/sda1 分区 | +| mysql -u user -p dbname < backup.sql | 使用 mysql 命令恢复 MySQL 数据库从 backup.sql 文件 | +| psql -U user dbname < backup.sql | 使用 psql 命令恢复 PostgreSQL 数据库从 backup.sql 文件 | ## 高级特性 @@ -1052,30 +1052,30 @@ RAID 1(镜像)是通过在多个硬盘上保存完全相同的数据来提 ![RAID 5](https://static.7wate.com/img/2023/04/21/46b8ef22d0f89.png) -RAID 5(分布式奇偶校验)将数据块和校验块分别存储在多个硬盘上。校验块被计算为所有数据块的异或值,以提供数据冗余和容错能力。RAID 5可以通过使用奇偶校验的方式在一个硬盘故障时恢复数据,但是如果两个硬盘故障,则可能会导致数据无法恢复。 +RAID 5(分布式奇偶校验)将数据块和校验块分别存储在多个硬盘上。校验块被计算为所有数据块的异或值,以提供数据冗余和容错能力。RAID 5 可以通过使用奇偶校验的方式在一个硬盘故障时恢复数据,但是如果两个硬盘故障,则可能会导致数据无法恢复。 #### RAID 6(双奇偶校验) ![RAID 6](https://static.7wate.com/img/2023/04/21/3b1de1acc0ada.png) -RAID 6(双奇偶校验)与RAID 5类似,但是它使用两个校验块来提供更高的数据冗余和容错能力,可以在两个硬盘故障的情况下恢复数据。 +RAID 6(双奇偶校验)与 RAID 5 类似,但是它使用两个校验块来提供更高的数据冗余和容错能力,可以在两个硬盘故障的情况下恢复数据。 -#### RAID 10/01(镜像+条带化) +#### RAID 10/01(镜像 + 条带化) ![RAID 1+0](https://static.7wate.com/img/2023/04/21/8226c8415d5ab.png) ![RAID 0+1](https://static.7wate.com/img/2023/04/21/b0cc485a28a53.png) -RAID 10/01(镜像+条带化)都是将 RAID 0 和 RAID 1 组合而成的RAID级别,其中 RAID 10 是镜像+条带化,RAID 01 是条带化+镜像。它们的区别在于数据的条带化和镜像是先进行哪一个操作。 +RAID 10/01(镜像 + 条带化)都是将 RAID 0 和 RAID 1 组合而成的 RAID 级别,其中 RAID 10 是镜像 + 条带化,RAID 01 是条带化 + 镜像。它们的区别在于数据的条带化和镜像是先进行哪一个操作。 -- RAID 10:镜像+条带化 RAID 10 首先将多个磁盘分成两组,每一组中的磁盘都是相互镜像的,然后将这两组磁盘进行条带化。 -- RAID 01:条带化+镜像 RAID 01 首先将多个磁盘进行条带化,然后将这些条带进行镜像备份。 +- RAID 10:镜像 + 条带化 RAID 10 首先将多个磁盘分成两组,每一组中的磁盘都是相互镜像的,然后将这两组磁盘进行条带化。 +- RAID 01:条带化 + 镜像 RAID 01 首先将多个磁盘进行条带化,然后将这些条带进行镜像备份。 RAID 10 和 RAID 01 虽然都是将 RAID 0 和 RAID 1 进行组合,但它们的性能和可靠性并不相同。RAID 10 通常被认为比 RAID 01 更为可靠,因为它允许多个磁盘同时出现故障而不会导致数据丢失。另外,RAID 10 的写入性能也比 RAID 01 更好,因为 RAID 10 能够同时使用多个磁盘进行并行写入。 #### RAID 级别对比 -| RAID级别 | 优点 | 缺点 | 适用场景 | +| RAID 级别 | 优点 | 缺点 | 适用场景 | | -------- | ------------------------------------------------------ | ------------------------------------------ | ------------------------------------------------------------ | | RAID 0 | 高性能,读写速度快,性价比高 | 容错性差,一块硬盘出问题会导致全部数据丢失 | 需要高性能的应用场景,如视频编辑、大型数据库等 | | RAID 1 | 数据冗余,可靠性高,单盘故障不会影响数据 | 容量利用率低,需要成倍增加硬盘数量 | 对数据可靠性要求较高的应用场景,如企业数据中心等 | @@ -1091,7 +1091,7 @@ RAID 10 和 RAID 01 虽然都是将 RAID 0 和 RAID 1 进行组合,但它们 LVM 最初是由 Sistina Software 公司于 1998 年开发的,旨在提供一种动态分区管理技术,以替代传统的静态分区方式。在 2001 年,Red Hat 收购了 Sistina Software 公司,将 LVM 整合到 Red Hat Enterprise Linux 中,并在 2002 年的 Linux 内核 2.4.0 版本中首次亮相。此后,LVM 逐渐成为了 Linux 系统中的标准组件之一,并且得到了广泛的应用。 -LVM的实现原理是将物理存储设备(如磁盘、分区)分为若干个物理卷(PV),并将多个物理卷组成一个卷组(VG)。然后在卷组上创建一个或多个逻辑卷(LV),并将逻辑卷格式化为文件系统。当需要增加存储空间时,可以将一个或多个物理卷添加到卷组中,并将空间分配给逻辑卷。当需要缩小存储空间时,可以将逻辑卷缩小,并将空闲空间返回给卷组。 +LVM 的实现原理是将物理存储设备(如磁盘、分区)分为若干个物理卷(PV),并将多个物理卷组成一个卷组(VG)。然后在卷组上创建一个或多个逻辑卷(LV),并将逻辑卷格式化为文件系统。当需要增加存储空间时,可以将一个或多个物理卷添加到卷组中,并将空间分配给逻辑卷。当需要缩小存储空间时,可以将逻辑卷缩小,并将空闲空间返回给卷组。 ![LVM 构成](https://static.7wate.com/img/2023/04/21/2d92995f6ad28.png) @@ -1103,14 +1103,14 @@ LVM 由以下三个主要组件组成: #### 优点 -1. 动态分区调整:LVM可以在不重启系统的情况下动态地调整逻辑卷的大小,这意味着可以在运行时增加或减少逻辑卷的大小,而不需要对系统进行重启。 -2. 快照功能:LVM提供了快照功能,可以在不影响正在运行的系统的情况下创建逻辑卷的快照。这使得系统管理员可以在进行一些重要操作之前,为系统创建一个快照,以便在出现问题时可以回滚。 -3. 跨磁盘分区:LVM可以跨越多个物理卷创建逻辑卷,这使得可以将逻辑卷分配到多个磁盘上,提高了系统的可靠性和可用性。 +1. 动态分区调整:LVM 可以在不重启系统的情况下动态地调整逻辑卷的大小,这意味着可以在运行时增加或减少逻辑卷的大小,而不需要对系统进行重启。 +2. 快照功能:LVM 提供了快照功能,可以在不影响正在运行的系统的情况下创建逻辑卷的快照。这使得系统管理员可以在进行一些重要操作之前,为系统创建一个快照,以便在出现问题时可以回滚。 +3. 跨磁盘分区:LVM 可以跨越多个物理卷创建逻辑卷,这使得可以将逻辑卷分配到多个磁盘上,提高了系统的可靠性和可用性。 #### 缺点 -1. 额外的管理和学习成本:使用LVM需要学习额外的命令和管理技术,这会增加管理员的管理和学习成本。 -2. 性能损失:LVM在数据存储和检索时会引入一定的性能损失,这主要是因为需要对数据进行多次转换。 +1. 额外的管理和学习成本:使用 LVM 需要学习额外的命令和管理技术,这会增加管理员的管理和学习成本。 +2. 性能损失:LVM 在数据存储和检索时会引入一定的性能损失,这主要是因为需要对数据进行多次转换。 LVM 通常用于服务器环境中,因为它可以有效地处理大容量存储设备。特别是在云计算环境下,LVM 的优点更加明显,因为它可以动态地分配和管理存储空间。在虚拟化环境下,LVM 可以在多个虚拟机之间共享存储,并根据需要动态分配存储容量。此外,LVM 还支持快照功能,可以在不影响正在运行的系统的情况下创建逻辑卷的快照,这使得系统管理员可以在进行一些重要操作之前,为系统创建一个快照,以便在出现问题时可以回滚。 @@ -1159,9 +1159,9 @@ graph LR; ``` -1. ##### 创建物理卷(PV) +1. ##### 创建物理卷 (PV) -在实际操作中,我们需要首先查看系统中有哪些可用的物理卷,使用命令`lsblk`可以列出所有的物理磁盘及其分区信息。然后使用`pvcreate`命令将指定的物理卷初始化为 LVM 物理卷,例如: +在实际操作中,我们需要首先查看系统中有哪些可用的物理卷,使用命令 `lsblk` 可以列出所有的物理磁盘及其分区信息。然后使用 `pvcreate` 命令将指定的物理卷初始化为 LVM 物理卷,例如: ```shell [root@rhel ~]# lsblk @@ -1180,9 +1180,9 @@ nvme0n3 259:4 0 8G 0 disk Physical volume "/dev/nvme0n3" successfully created. ``` -2. ##### 创建卷组(VG) +1. ##### 创建卷组 (VG) -在物理卷初始化之后,我们需要将其添加到一个卷组中。使用`vgcreate`命令可以创建一个新的卷组,并将一个或多个物理卷添加到其中,例如: +在物理卷初始化之后,我们需要将其添加到一个卷组中。使用 `vgcreate` 命令可以创建一个新的卷组,并将一个或多个物理卷添加到其中,例如: ```shell [root@rhel ~]# vgcreate data_nvme_vg /dev/nvme0n2 /dev/nvme0n3 @@ -1210,9 +1210,9 @@ nvme0n3 259:4 0 8G 0 disk VG UUID MbZpcX-1H5P-RKBU-aEAM-9AE3-ums0-nQ2zVc ``` -3. ##### 创建逻辑卷(LV) +1. ##### 创建逻辑卷 (LV) -在卷组创建之后,我们可以使用`lvcreate`命令创建一个或多个逻辑卷,并指定它们的大小、名称、副本数等信息,例如: +在卷组创建之后,我们可以使用 `lvcreate` 命令创建一个或多个逻辑卷,并指定它们的大小、名称、副本数等信息,例如: ```shell [root@rhel ~]# lvcreate -L 8G -n data_nvme_lv1 data_nvme_vg @@ -1236,9 +1236,9 @@ nvme0n3 259:4 0 8G 0 disk Block device 253:3 ``` -4. ##### 格式化文件系统 +1. ##### 格式化文件系统 -在逻辑卷创建之后,我们需要格式化其文件系统以便进行挂载和使用。使用`mkfs`命令可以对逻辑卷上的文件系统进行格式化,例如: +在逻辑卷创建之后,我们需要格式化其文件系统以便进行挂载和使用。使用 `mkfs` 命令可以对逻辑卷上的文件系统进行格式化,例如: ```shell [root@rhel ~]# mkfs.ext4 /dev/data_nvme_vg/data_nvme_lv1 @@ -1254,16 +1254,16 @@ mke2fs 1.46.5 (30-Dec-2021) 写入超级块和文件系统账户统计信息: 已完成 ``` -5. ##### 挂载文件系统 +1. ##### 挂载文件系统 -在格式化文件系统之后,我们需要将其挂载到系统中的一个目录中,以便进行使用。使用`mount`命令可以将格式化后的文件系统挂载到指定的目录中,例如: +在格式化文件系统之后,我们需要将其挂载到系统中的一个目录中,以便进行使用。使用 `mount` 命令可以将格式化后的文件系统挂载到指定的目录中,例如: ```shell [root@rhel ~]# mkdir /mnt/data_nvme_lv1 [root@rhel ~]# mount /dev/data_nvme_vg/data_nvme_lv1 /mnt/data_nvme_lv1/ ``` -6. ##### 使用文件系统 +1. ##### 使用文件系统 最后,我们可以在挂载的文件系统上进行文件的读写和访问等操作,例如: @@ -1277,9 +1277,9 @@ drwx------. 2 root root 16384 4月 24 10:25 lost+found hello world! ``` -7. ##### 调整逻辑卷容量大小 +1. ##### 调整逻辑卷容量大小 -如果想调整 lv 逻辑卷的容量大小可以使用`lvextend`、`resize2fs`,例如为 `/dev/data_nvme_vg/data_nvme_lv1` 增加 2GB 容量。 +如果想调整 lv 逻辑卷的容量大小可以使用 `lvextend`、`resize2fs`,例如为 `/dev/data_nvme_vg/data_nvme_lv1` 增加 2GB 容量。 ```shell [root@rhel data_nvme_lv1]# lvextend -L +2G /dev/data_nvme_vg/data_nvme_lv1 @@ -1307,7 +1307,7 @@ old_desc_blocks = 1, new_desc_blocks = 2 iSCSI(Internet Small Computer System Interface)是一种网络存储技术,允许将存储设备(如磁盘阵列)共享给其他计算机。通过 iSCSI,计算机可以通过网络访问共享的存储设备,就像直接连接到本地硬盘一样。这大大简化了存储管理,并提高了存储资源的利用率。 -#### RAID透传 +#### RAID 透传 RAID 透传是一种将物理 RAID 卡的功能直接传递给虚拟机的技术。通过 PCIe 直通,虚拟机可以直接访问 RAID 卡,从而获得更好的存储性能和可靠性。这种方法允许虚拟机完全利用 RAID 卡的性能和冗余功能,提高数据保护和虚拟机性能。 @@ -1317,4 +1317,4 @@ RAID 透传是一种将物理 RAID 卡的功能直接传递给虚拟机的技术 #### 分布式存储 -分布式存储系统(如Ceph、GlusterFS)是一种将数据分散在多个存储节点上的技术,实现高可用、高扩展性的存储方案。分布式存储系统通常采用数据副本、纠删码等技术保证数据的可靠性,当部分存储节点发生故障时,系统仍然可以继续提供服务。此外,分布式存储系统具有良好的横向扩展性,可以通过添加更多节点来扩展存储容量和性能。 +分布式存储系统(如 Ceph、GlusterFS)是一种将数据分散在多个存储节点上的技术,实现高可用、高扩展性的存储方案。分布式存储系统通常采用数据副本、纠删码等技术保证数据的可靠性,当部分存储节点发生故障时,系统仍然可以继续提供服务。此外,分布式存储系统具有良好的横向扩展性,可以通过添加更多节点来扩展存储容量和性能。 diff --git a/wiki/operating-system/Linux/进阶/Linux 日志监控.md b/Tech/operating-system/Linux/进阶/Linux 日志监控.md similarity index 98% rename from wiki/operating-system/Linux/进阶/Linux 日志监控.md rename to Tech/operating-system/Linux/进阶/Linux 日志监控.md index 152764b1..eeb4b257 100644 --- a/wiki/operating-system/Linux/进阶/Linux 日志监控.md +++ b/Tech/operating-system/Linux/进阶/Linux 日志监控.md @@ -2,14 +2,15 @@ title: Linux 日志监控 description: Linux 日志监控 keywords: -- Linux -- 日志监控 + - Linux + - 日志监控 tags: -- Linux + - Linux/进阶 sidebar_position: 3 author: 7Wate date: 2023-04-10 --- + ## 引言 在 IT 领域,日志管理和监控是至关重要的技术,特别是在 Linux 系统中。日志提供了系统和应用程序行为的详细信息,可以帮助管理员诊断和解决问题,理解系统的运行情况,提供安全审计,并满足合规性要求。 @@ -20,7 +21,7 @@ date: 2023-04-10 在 Linux 中,日志系统是跟踪和记录系统活动的核心组件。系统日志提供了大量的信息,包括系统错误,操作警告,安全警告和其他重要事件。理解和管理这些日志是运维工作中的关键部分,可以帮助定位和解决各种系统问题。 -Linux 系统广泛采用 syslog 协议进行日志处理。syslog 协议最初由 Eric Allman 在1980年代早期开发,目的是为了 UNIX 系统提供一个日志处理框架,后来也成为了其他许多系统的标准。 +Linux 系统广泛采用 syslog 协议进行日志处理。syslog 协议最初由 Eric Allman 在 1980 年代早期开发,目的是为了 UNIX 系统提供一个日志处理框架,后来也成为了其他许多系统的标准。 Syslog 是一个分布式日志记录系统,可以从各种源收集日志,例如内核、守护进程或任何其他程序。它根据每个日志消息的优先级和设施(产生消息的系统部分),将其路由到适当的地方进行处理。这些地方可以是文件、控制台、远程服务器或其他目标。此外,syslog 还提供了消息缓冲,保证在系统繁忙或出现问题时,日志消息不会丢失。 @@ -50,7 +51,7 @@ Linux 系统中的日志文件通常存储在 `/var/log` 目录下。这个目 日志旋转是一种解决方法,它会定期将旧的日志条目移动到新的文件中,同时管理和删除过旧的日志文件。在 Linux 系统中,这通常由 logrotate 实现。 -#### logrotate +#### Logrotate `logrotate` 是一个用于管理日志文件的工具,它可以自动轮转、压缩、删除和邮件发送日志文件。在 Linux 系统中,许多程序都会生成日志文件,这些文件会随着时间的推移不断增长,`logrotate` 可以帮助系统管理员管理这些日志文件,防止它们占用过多的磁盘空间。 diff --git a/wiki/operating-system/Linux/进阶/Linux 系统安全与防护.md b/Tech/operating-system/Linux/进阶/Linux 系统安全与防护.md similarity index 89% rename from wiki/operating-system/Linux/进阶/Linux 系统安全与防护.md rename to Tech/operating-system/Linux/进阶/Linux 系统安全与防护.md index 029939d5..38e143a9 100644 --- a/wiki/operating-system/Linux/进阶/Linux 系统安全与防护.md +++ b/Tech/operating-system/Linux/进阶/Linux 系统安全与防护.md @@ -2,11 +2,11 @@ title: Linux 系统安全与防护 description: Linux 系统安全与防护 keywords: -- Linux -- 系统安全 -- 安全防护 + - Linux + - 系统安全 + - 安全防护 tags: -- Linux + - Linux/进阶 sidebar_position: 4 author: 7Wate date: 2023-04-10 @@ -230,11 +230,11 @@ tcpdmatch sshd 192.168.1.100 通过正确地配置和使用 TCP Wrappers,你可以大大提高你的服务器的安全性,并有能力追踪和控制对你的网络服务的访问。 -### auditd +### Auditd Auditd 是 Linux 审计框架的核心组件,用于收集来自内核中的审计记录。它允许系统管理员跟踪在系统上发生的活动,以便在系统安全出现问题时追溯和分析。 -Auditd 的起源可以追溯到 Linux 内核版本2.6的早期,当时引入了新的审计框架。该框架由内核部分(生成审计事件记录)和用户空间部分(接收和处理这些记录)组成。Auditd 就是用户空间部分的主要组件。 +Auditd 的起源可以追溯到 Linux 内核版本 2.6 的早期,当时引入了新的审计框架。该框架由内核部分(生成审计事件记录)和用户空间部分(接收和处理这些记录)组成。Auditd 就是用户空间部分的主要组件。 主要功能包括系统调用追踪、文件和目录访问监控、系统启动和关闭日志等。其主要用于帮助管理员诊断问题、满足合规性要求、并提高系统的安全性。 @@ -246,7 +246,7 @@ Auditd 可以通过 audit.rules 文件配置审计规则,这些规则定义了 #### 运行模式 -auditd 的运行模式主要是启动和停止,启动auditd后,它将开始收集审计事件并将其记录到日志文件中,通常是 /var/log/audit/audit.log。停止auditd后,系统将停止记录审计事件。 +auditd 的运行模式主要是启动和停止,启动 auditd 后,它将开始收集审计事件并将其记录到日志文件中,通常是 /var/log/audit/audit.log。停止 auditd 后,系统将停止记录审计事件。 #### 优缺点 @@ -288,18 +288,18 @@ aureport -x --summary 加密和认证技术对于确保系统安全至关重要。以下是一些常见的加密和认证技术: -1. **SSL和TLS**:SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于在网络通信中提供安全层的协议。它们用于保护数据的隐私和完整性。TLS是SSL的后续版本,目前更为常用。 -2. **SSH**:SSH(Secure Shell)是一种网络协议,用于安全地远程连接到服务器。SSH提供了强大的认证和安全通信功能,包括加密远程会话和传输文件。 -3. **PGP(Pretty Good Privacy)**:PGP是一种数据加密和解密程序,提供加密、解密和数字签名的服务。它常用于保护电子邮件的隐私和完整性,同时也可用于加密文件和存储设备。 -4. **公钥基础设施(PKI)和证书颁发机构(CA)**:PKI是一套基于公钥密码学的加密体系结构,用于生成、管理和分发数字证书。证书颁发机构是负责验证用户身份并颁发数字证书的可信实体。 -5. **一次性密码(OTP)和多因素认证(MFA)**:OTP是一种仅限单次使用的密码,用于增强身份验证的安全性。MFA要求用户提供两个或多个不同类型的身份验证因素,例如密码、指纹识别、硬件令牌或手机验证码。 -6. **IPSec(Internet Protocol Security)**:IPSec是一组协议和算法,用于在网络层提供数据的机密性、完整性和身份验证。它常用于虚拟私有网络(VPN)和远程访问连接的安全保护。 +1. **SSL 和 TLS**:SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是用于在网络通信中提供安全层的协议。它们用于保护数据的隐私和完整性。TLS 是 SSL 的后续版本,目前更为常用。 +2. **SSH**:SSH(Secure Shell)是一种网络协议,用于安全地远程连接到服务器。SSH 提供了强大的认证和安全通信功能,包括加密远程会话和传输文件。 +3. **PGP(Pretty Good Privacy)**:PGP 是一种数据加密和解密程序,提供加密、解密和数字签名的服务。它常用于保护电子邮件的隐私和完整性,同时也可用于加密文件和存储设备。 +4. **公钥基础设施(PKI)和证书颁发机构(CA)**:PKI 是一套基于公钥密码学的加密体系结构,用于生成、管理和分发数字证书。证书颁发机构是负责验证用户身份并颁发数字证书的可信实体。 +5. **一次性密码(OTP)和多因素认证(MFA)**:OTP 是一种仅限单次使用的密码,用于增强身份验证的安全性。MFA 要求用户提供两个或多个不同类型的身份验证因素,例如密码、指纹识别、硬件令牌或手机验证码。 +6. **IPSec(Internet Protocol Security)**:IPSec 是一组协议和算法,用于在网络层提供数据的机密性、完整性和身份验证。它常用于虚拟私有网络(VPN)和远程访问连接的安全保护。 7. **数字证书**:数字证书是由证书颁发机构颁发的电子文件,用于验证用户、服务器或组织的身份。数字证书使用公钥密码学来验证身份,并可用于安全通信和电子交易。 -8. **访问控制列表(ACL)**:ACL是一种用于控制网络设备上的流量的机制。它基于源IP地址、目标IP地址、协议和端口号等条件来决定数据包的接受或拒绝。 +8. **访问控制列表(ACL)**:ACL 是一种用于控制网络设备上的流量的机制。它基于源 IP 地址、目标 IP 地址、协议和端口号等条件来决定数据包的接受或拒绝。 9. **防火墙**:防火墙是一种网络安全设备,用于监控和控制进出网络的流量。它可以根据预定义的安全策略过滤流量,以阻止未经授权的访问和网络攻击。 -10. **单点登录(SSO)**:SSO是一种身份验证机制,允许用户使用单一的凭据(如用户名和密码)访问多个相关系统。这减少了用户需要记住多个凭据的负担,并提供了更方便的身份验证体验。 +10. **单点登录(SSO)**:SSO 是一种身份验证机制,允许用户使用单一的凭据(如用户名和密码)访问多个相关系统。这减少了用户需要记住多个凭据的负担,并提供了更方便的身份验证体验。 11. **加密硬件设备**:加密硬件设备(如硬件安全模块)提供了物理级别的安全性,用于存储和处理敏感数据、生成和管理密钥,并执行加密操作。这些设备通常具有更高的安全性和防护能力。 12. **双因素认证(2FA)**:双因素认证要求用户在登录过程中提供两个或多个不同类型的身份验证凭据,如密码、硬件令牌、指纹识别或短信验证码。这提供了更强的身份验证保护,即使密码被泄露也能降低风险。 -13. **安全套接层虚拟专用网(SSL VPN)**:SSL VPN是一种通过SSL/TLS协议提供远程访问安全性的技术。它允许用户通过加密通道连接到内部网络,并通过认证和授权机制进行访问控制。 +13. **安全套接层虚拟专用网(SSL VPN)**:SSL VPN 是一种通过 SSL/TLS 协议提供远程访问安全性的技术。它允许用户通过加密通道连接到内部网络,并通过认证和授权机制进行访问控制。 综上所述,系统安全涉及许多复杂的方面。了解和应用这些基本概念、原则以及正确使用相关工具和技术,对于有效保护信息系统免受威胁和攻击至关重要。 diff --git a/wiki/operating-system/Linux/进阶/Linux 系统管理.md b/Tech/operating-system/Linux/进阶/Linux 系统管理.md similarity index 91% rename from wiki/operating-system/Linux/进阶/Linux 系统管理.md rename to Tech/operating-system/Linux/进阶/Linux 系统管理.md index 6a28a8bc..ba7b64f4 100644 --- a/wiki/operating-system/Linux/进阶/Linux 系统管理.md +++ b/Tech/operating-system/Linux/进阶/Linux 系统管理.md @@ -2,10 +2,10 @@ title: Linux 系统管理 description: Linux 系统管理和配置 keywords: -- Linux -- 系统管理 + - Linux + - 系统管理 tags: -- Linux + - Linux/进阶 sidebar_position: 1 author: 7Wate date: 2023-06-30 @@ -49,7 +49,7 @@ graph LR 4. **硬件检查**:BIOS/UEFI 开始进行 POST,检查系统的基本硬件设备。这通常包括内存、硬盘驱动器、键盘、鼠标等设备。这个过程可能包括设备自我检测(如果设备支持的话),也可能包括读写测试(如对内存的读写测试)。 -5. **错误检查和报告**:如果在 POST 过程中检测到错误,BIOS/UEFI 会报告这个错误。这可能是通过屏幕上的错误消息,或者通过蜂鸣器的蜂鸣声(通常被称为"beep codes")。 +5. **错误检查和报告**:如果在 POST 过程中检测到错误,BIOS/UEFI 会报告这个错误。这可能是通过屏幕上的错误消息,或者通过蜂鸣器的蜂鸣声(通常被称为 "beep codes")。 6. **启动引导设备**:如果 POST 成功完成,BIOS/UEFI 会开始从引导设备(如硬盘、USB 设备等)加载操作系统。 @@ -81,7 +81,7 @@ graph LR #### 内核阶段 -**一旦启动加载程序(例如 GRUB)将操作系统内核加载到内存并将控制权移交给它,Linux内核就开始初始化。**在内核初始化过程中,它实际上是在设定一个基本的运行环境,这样用户空间的程序才能在这个环境中运行。在这个环境中,内核提供了许多基本的服务,例如设备驱动、文件系统、网络服务、进程调度等。所有这些服务在用户空间的程序看来就像是操作系统的一部分,但它们实际上都是由内核提供的。 +**一旦启动加载程序(例如 GRUB)将操作系统内核加载到内存并将控制权移交给它,Linux 内核就开始初始化。**在内核初始化过程中,它实际上是在设定一个基本的运行环境,这样用户空间的程序才能在这个环境中运行。在这个环境中,内核提供了许多基本的服务,例如设备驱动、文件系统、网络服务、进程调度等。所有这些服务在用户空间的程序看来就像是操作系统的一部分,但它们实际上都是由内核提供的。 以下是内核阶段的一些主要步骤: @@ -111,7 +111,7 @@ graph LR #### 系统初始化阶段 -**在 Linux 内核完成初始化并挂载了根文件系统后,它将启动第一个用户空间程序,这个进程通常被称为 init 进程。init 进程的进程 ID(PID)是1,它是所有其他用户空间进程的父进程。**init 进程在系统中有特殊的地位,它负责启动其他所有的系统服务和用户空间进程。 +**在 Linux 内核完成初始化并挂载了根文件系统后,它将启动第一个用户空间程序,这个进程通常被称为 init 进程。init 进程的进程 ID(PID)是 1,它是所有其他用户空间进程的父进程。**init 进程在系统中有特殊的地位,它负责启动其他所有的系统服务和用户空间进程。 常见的 init 系统包括 Systemd、Upstart、SysV init 等,它们各自的启动流程可能会有所不同。以下是使用 Systemd 作为 init 系统的一般流程: @@ -139,20 +139,20 @@ graph LR 1. **运行级别 0**:系统停机,通常用于正常关闭系统。 2. **运行级别 1**:单用户模式,通常用于系统维护。 3. **运行级别 2**:多用户模式,不包括网络服务。 -4. **运行级别 3**:完全的多用户模式,包括网络服务。这通常是Linux系统默认的运行级别。 +4. **运行级别 3**:完全的多用户模式,包括网络服务。这通常是 Linux 系统默认的运行级别。 5. **运行级别 4**:通常不使用,用户可以自定义。 -6. **运行级别 5**:图形用户模式,启动X Window图形界面。 +6. **运行级别 5**:图形用户模式,启动 X Window 图形界面。 7. **运行级别 6**:系统重启。 ### 管理运行级别 Linux 系统提供了一些工具和命令,使用户能够查看和更改当前的运行级别。 -- 使用`runlevel`命令可以查看当前的运行级别。该命令会输出两个数字,前一个代表前一个运行级别,后一个代表当前运行级别。 -- 使用`init`命令加上运行级别的数字,可以更改当前的运行级别。例如,执行`init 3`会将系统转换到多用户文本模式。 -- 另外,用户还可以通过编辑`/etc/inittab`文件来更改系统的默认运行级别。例如,`id:3:initdefault:`就设置了系统的默认运行级别为 3。 +- 使用 `runlevel` 命令可以查看当前的运行级别。该命令会输出两个数字,前一个代表前一个运行级别,后一个代表当前运行级别。 +- 使用 `init` 命令加上运行级别的数字,可以更改当前的运行级别。例如,执行 `init 3` 会将系统转换到多用户文本模式。 +- 另外,用户还可以通过编辑 `/etc/inittab` 文件来更改系统的默认运行级别。例如,`id:3:initdefault:` 就设置了系统的默认运行级别为 3。 -通过理解 Linux 系统的启动流程和运行级别,可以更好地理解和管理Linux系统的行为和状态。这些知识对于系统管理员来说尤其重要,因为它们直接影响到系统的性能和稳定性。 +通过理解 Linux 系统的启动流程和运行级别,可以更好地理解和管理 Linux 系统的行为和状态。这些知识对于系统管理员来说尤其重要,因为它们直接影响到系统的性能和稳定性。 ## 进程管理 @@ -208,7 +208,7 @@ renice -5 -p 5678 ### 进程管理命令 -Linux 系统中的进程管理命令非常多,包括但不限于`ps`、`top`、`htop`、`pgrep`、`pkill`、`kill`、`killall`等。这些命令用途广泛,可以帮助我们查看、控制和管理系统中的进程。 +Linux 系统中的进程管理命令非常多,包括但不限于 `ps`、`top`、`htop`、`pgrep`、`pkill`、`kill`、`killall` 等。这些命令用途广泛,可以帮助我们查看、控制和管理系统中的进程。 例如,`ps` 命令是用来查看系统中当前进程状态的命令,其 `-ef` 选项可以显示所有进程的详细信息,包括进程 ID、所属用户、CPU 占用率、进程启动时间等。 @@ -216,11 +216,11 @@ Linux 系统中的进程管理命令非常多,包括但不限于`ps`、`top` 如果你需要更图形化的界面,`htop` 是一个更好的选择,它是 `top` 命令的优化版,提供了一个全彩的,图形化的,交互式的系统监视界面。 -`pgrep` 和 `pkill` 是一对强大的工具,它们可以根据进程名查找或杀死进程,而无需知道进程ID。特别是在你需要批量操作同名进程时,这两个命令非常有用。 +`pgrep` 和 `pkill` 是一对强大的工具,它们可以根据进程名查找或杀死进程,而无需知道进程 ID。特别是在你需要批量操作同名进程时,这两个命令非常有用。 -当然,如果你知道要操作的进程 ID,`kill` 命令就是你的最佳选择。`kill`命令可以发送不同的信号给指定的进程,最常用的是 SIGTERM (15) 和 SIGKILL (9)。其中,`kill -9 pid` 命令可以强制终止指定的进程。 +当然,如果你知道要操作的进程 ID,`kill` 命令就是你的最佳选择。`kill` 命令可以发送不同的信号给指定的进程,最常用的是 SIGTERM (15) 和 SIGKILL (9)。其中,`kill -9 pid` 命令可以强制终止指定的进程。 -另外,`killall`命令也是一个根据进程名杀死进程的命令,与`pkill`命令功能类似。 +另外,`killall` 命令也是一个根据进程名杀死进程的命令,与 `pkill` 命令功能类似。 ```shell # 查看系统中所有的进程 @@ -252,7 +252,7 @@ killall bash ### 服务的概念 -在 Linux 环境中,服务(也被称为守护进程)是一个关键概念,指的是一种在后台运行的程序或一组程序,这些程序在用户的视觉范围之外,不断地提供某些特定的功能或服务。例如,web 服务器(如Apache),数据库服务器(如MySQL),邮件服务器,SSH,FTP 等都属于典型的服务。这些服务是操作系统正常运行的重要组成部分,负责处理各种系统任务和应用请求。 +在 Linux 环境中,服务(也被称为守护进程)是一个关键概念,指的是一种在后台运行的程序或一组程序,这些程序在用户的视觉范围之外,不断地提供某些特定的功能或服务。例如,web 服务器(如 Apache),数据库服务器(如 MySQL),邮件服务器,SSH,FTP 等都属于典型的服务。这些服务是操作系统正常运行的重要组成部分,负责处理各种系统任务和应用请求。 服务管理则是操作系统中的一项重要任务,其主要目标是保证服务能够稳定、高效地运行,同时,也能够便捷地进行服务的配置和维护。为了达到这个目标,人们设计了许多不同的服务管理系统,例如 SysV init,Upstart,以及现在广泛使用的 Systemd。 @@ -266,9 +266,9 @@ killall bash systemd 还提供了一种新的系统配置方法,即使用 systemd 单元(unit)文件。这些单元文件用于定义服务、设备、挂载点、套接字等对象的属性和行为。单元文件是纯文本文件,易于编辑,支持灵活的配置选项。 -除了基本的初始化服务,systemd 还提供了进程监控、日志管理、设备管理、网络配置、用户会话管理等多项功能。特别是通过日志管理工具 journald,实现了全面的日志管理功能。journald可以收集各种类型的日志信息,包括内核日志、系统服务日志、用户程序日志等,然后将它们统一存储在一个中央日志库中,便于用户查阅和管理。 +除了基本的初始化服务,systemd 还提供了进程监控、日志管理、设备管理、网络配置、用户会话管理等多项功能。特别是通过日志管理工具 journald,实现了全面的日志管理功能。journald 可以收集各种类型的日志信息,包括内核日志、系统服务日志、用户程序日志等,然后将它们统一存储在一个中央日志库中,便于用户查阅和管理。 -尽管 systemd 具有诸多优点,但由于其庞大和复杂,也引来了不少批评。一些人认为 systemd 违反了 Unix 哲学——"做一件事,并把它做好",它的功能太过全面,违反了模块化设计的原则。然而,也有很多人认为,对于现代Linux系统来说 systemd 是必不可少的。 +尽管 systemd 具有诸多优点,但由于其庞大和复杂,也引来了不少批评。一些人认为 systemd 违反了 Unix 哲学——" 做一件事,并把它做好 ",它的功能太过全面,违反了模块化设计的原则。然而,也有很多人认为,对于现代 Linux 系统来说 systemd 是必不可少的。 以下是一些 systemd 中常用的 `systemctl` 命令示例: @@ -304,7 +304,7 @@ systemctl disable [service_name] | `-H [user@]hostname` | 对远程主机上的服务进行操作 | | `--no-pager` | 不使用分页显示输出结果 | -总的来说,`systemd`是一种强大的初始化系统和服务管理器,它改变了Linux系统的启动方式和服务管理方式,带来了许多新的可能性和便利性。如果你正在使用的是一个现代的Linux发行版,那么你很可能已经在使用`systemd`了。 +总的来说,`systemd` 是一种强大的初始化系统和服务管理器,它改变了 Linux 系统的启动方式和服务管理方式,带来了许多新的可能性和便利性。如果你正在使用的是一个现代的 Linux 发行版,那么你很可能已经在使用 `systemd` 了。 #### Upstart @@ -343,7 +343,7 @@ initctl status [job_name] 尽管 Upstart 在其出现时提供了一种新颖和强大的初始化和服务管理方式,但由于其开发和维护的复杂性,以及后来 systemd 的出现,Upstart 在许多 Linux 发行版中被 systemd 替代。然而,了解 Upstart 仍然是有益的,因为有些旧的系统或特定的场景可能仍然在使用它。 -#### SysV init +#### SysV Init SysV init 是 Unix System V 中的初始化系统,长期以来在各种 Unix-like 系统中使用,包括早期的 Linux 发行版。它主要负责在系统启动时启动各种服务,以及在系统运行期间管理和维护各种服务。 diff --git a/wiki/operating-system/Linux/进阶/Linux 网络配置.md b/Tech/operating-system/Linux/进阶/Linux 网络配置.md similarity index 79% rename from wiki/operating-system/Linux/进阶/Linux 网络配置.md rename to Tech/operating-system/Linux/进阶/Linux 网络配置.md index 3462e69e..628e0e1d 100644 --- a/wiki/operating-system/Linux/进阶/Linux 网络配置.md +++ b/Tech/operating-system/Linux/进阶/Linux 网络配置.md @@ -2,11 +2,11 @@ title: Linux 网络配置 description: Linux 网络配置管理 keywords: -- Linux 网络 -- 配置 -- 管理 + - Linux 网络 + - 配置 + - 管理 tags: -- Linux + - Linux/进阶 sidebar_position: 2 author: 7Wate date: 2023-04-10 @@ -18,7 +18,7 @@ date: 2023-04-10 互联网的发展历史可以追溯到 20 世纪 60 年代初,当时美国国防部研究项目 ARPA(高级研究计划署)为了解决军用计算机之间的信息共享问题,开发了一种名为 ARPANET 的计算机网络。在此基础上,随着互联网技术的不断发展,越来越多的计算机网络加入了互联网,并形成了现在的全球互联网。 -- 20 世纪 60 年代:美国国防部高级研究计划局(ARPA)开展研究,设计出了一种分组交换网络的方案,称为ARPANET。 +- 20 世纪 60 年代:美国国防部高级研究计划局(ARPA)开展研究,设计出了一种分组交换网络的方案,称为 ARPANET。 - 20 世纪 70 年代:ARPANET 逐渐扩展到美国各地的大学和研究机构,并且开始出现了电子邮件和文件传输等应用。 - 20 世纪 80 年代:TCP/IP 协议成为互联网的标准协议,互联网的规模进一步扩大,并且开始商业化运营。 - 20 世纪 90 年代:Web 浏览器的出现,使得互联网的应用变得更加易用和普及,互联网的用户数量开始飞速增长。 @@ -29,13 +29,13 @@ date: 2023-04-10 - 传输控制协议(TCP):负责将数据包分解成若干个小数据包,并在接收端重新组装。 - 互联网协议(IP):负责将数据包从一个网络传输到另一个网络。 -在互联网中,每个设备都被分配了一个唯一的IP地址,用于标识该设备在网络中的位置。当设备发送数据包时,它会将数据包传送到本地网络上的路由器,然后路由器会根据IP地址将数据包传送到目标设备所在的网络上的路由器,直到数据包到达目标设备。 +在互联网中,每个设备都被分配了一个唯一的 IP 地址,用于标识该设备在网络中的位置。当设备发送数据包时,它会将数据包传送到本地网络上的路由器,然后路由器会根据 IP 地址将数据包传送到目标设备所在的网络上的路由器,直到数据包到达目标设备。 ## 网络基础 ### 网络协议 -| OSI模型层级 | 功能 | 协议/设备 | +| OSI 模型层级 | 功能 | 协议/设备 | | :---------------------- | ---------------------------------------------- | --------------------- | | 应用层(Application) | 提供高级服务,例如文件传输、电子邮件和虚拟终端 | HTTP、SMTP、FTP、SSH | | 表示层(Presentation) | 将数据转换为网络标准格式 | SSL/TLS、JPEG、ASCII | @@ -65,31 +65,31 @@ HTTP (Hypertext Transfer Protocol) 是一种用于在计算机网络上传输超 ##### DNS -DNS (Domain Name System) 是一种将域名映射到IP地址的分布式命名系统。DNS 是在互联网上执行名称解析的基本协议,使用户可以使用易于记忆的域名来访问网络资源。 +DNS (Domain Name System) 是一种将域名映射到 IP 地址的分布式命名系统。DNS 是在互联网上执行名称解析的基本协议,使用户可以使用易于记忆的域名来访问网络资源。 #### 传输层协议 ##### TCP -TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在网络上可靠地传输数据。TCP保证传输的数据的可靠性,使用三次握手来建立连接,四次握手来终止连接。 +TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在网络上可靠地传输数据。TCP 保证传输的数据的可靠性,使用三次握手来建立连接,四次握手来终止连接。 ##### UDP -UDP (User Datagram Protocol) 是一种面向无连接的协议,用于在网络上传输数据包。UDP不保证数据的可靠性,因此常用于传输实时数据,如音频和视频。 +UDP (User Datagram Protocol) 是一种面向无连接的协议,用于在网络上传输数据包。UDP 不保证数据的可靠性,因此常用于传输实时数据,如音频和视频。 #### 网络层协议 ##### IPv4 -IPv4 (Internet Protocol version 4) 是一种网络层协议,用于在网络上传输数据。IPv4定义了IP地址的格式和分配方式,并为互联网上的每个设备分配唯一的IP地址。 +IPv4 (Internet Protocol version 4) 是一种网络层协议,用于在网络上传输数据。IPv4 定义了 IP 地址的格式和分配方式,并为互联网上的每个设备分配唯一的 IP 地址。 ##### IPv6 -IPv6 (Internet Protocol version 6) 是IPv4的下一代协议,用于在网络上传输数据。IPv6地址长度更长,提供更多的地址空间,并支持更多的协议选项,使网络更加灵活和可扩展。 +IPv6 (Internet Protocol version 6) 是 IPv4 的下一代协议,用于在网络上传输数据。IPv6 地址长度更长,提供更多的地址空间,并支持更多的协议选项,使网络更加灵活和可扩展。 ##### ICMP -ICMP (Internet Control Message Protocol) 是一种在网络上传输控制消息的协议。ICMP用于发送诊断信息,如ping和traceroute命令所使用的信息。 +ICMP (Internet Control Message Protocol) 是一种在网络上传输控制消息的协议。ICMP 用于发送诊断信息,如 ping 和 traceroute 命令所使用的信息。 #### 数据链路层与物理层协议 @@ -121,7 +121,7 @@ BGP(Border Gateway Protocol)是一种外部网关协议(EGP),用于在 ##### IS-IS -IS-IS(Intermediate System to Intermediate System)是一种基于链路状态的内部网关协议(IGP),用于在大型网络中选择最佳路由。IS-IS 协议类似于 OSPF 协议,但使用的是双向链路,可以提供更高效的路由选择。IS-IS协议常用于 ISP 内部网络和数据中心网络。 +IS-IS(Intermediate System to Intermediate System)是一种基于链路状态的内部网关协议(IGP),用于在大型网络中选择最佳路由。IS-IS 协议类似于 OSPF 协议,但使用的是双向链路,可以提供更高效的路由选择。IS-IS 协议常用于 ISP 内部网络和数据中心网络。 #### 图例 @@ -170,7 +170,7 @@ graph TD; #### 无线接入点(Wireless Access Point,WAP) -无线接入点是用于将有线网络扩展到无线网络的设备。WAP在有线网络与无线网络设备之间建立一个桥接,允许无线设备通过无线信号与有线网络通信。它们通常用于扩展网络覆盖范围,提高无线设备的连接性能。 +无线接入点是用于将有线网络扩展到无线网络的设备。WAP 在有线网络与无线网络设备之间建立一个桥接,允许无线设备通过无线信号与有线网络通信。它们通常用于扩展网络覆盖范围,提高无线设备的连接性能。 #### 网络集线器(Hub) @@ -180,9 +180,9 @@ graph TD; 网络防火墙是一种用于保护网络安全的设备,它可以阻止未经授权的访问和数据包的传输。防火墙可以在硬件和软件层面实现,通过检查传入和传出的数据包,确定它们是否符合特定的安全规则。防火墙有助于保护网络中的设备免受恶意软件和攻击的侵害。 -#### VPN网关(VPN Gateway) +#### VPN 网关(VPN Gateway) -VPN网关是一种用于实现虚拟专用网络(VPN)的设备。它允许远程用户通过加密的通道访问内部网络资源,从而提高数据安全性。VPN网关可以实现企业内部资源的安全共享,以及保护远程办公用户的数据安全。 +VPN 网关是一种用于实现虚拟专用网络(VPN)的设备。它允许远程用户通过加密的通道访问内部网络资源,从而提高数据安全性。VPN 网关可以实现企业内部资源的安全共享,以及保护远程办公用户的数据安全。 ### 网络拓扑 @@ -193,7 +193,7 @@ VPN网关是一种用于实现虚拟专用网络(VPN)的设备。它允许 - 环型拓扑:所有设备连接成一个环形链路,数据包沿着环形链路进行传输,每个设备负责将数据包从一个端口传递到另一个端口。 - 树型拓扑:将多个星型拓扑连接起来,形成一个树状结构,中心节点可以是一个路由器或交换机,每个子节点连接到中心节点。 - 网状拓扑:所有设备之间都可以直接相互连接,没有中心节点,数据包可以通过多条路径进行传输,具有高度的冗余和可靠性。 -- 混合拓扑:不同拓扑结构的组合,如星型-总线拓扑、星型-环型拓扑等。 +- 混合拓扑:不同拓扑结构的组合,如星型 - 总线拓扑、星型 - 环型拓扑等。 ## 网络配置 @@ -213,7 +213,7 @@ VPN网关是一种用于实现虚拟专用网络(VPN)的设备。它允许 - 网关(GetWay):连接不同网络的设备,通常是路由器。 - 域名系统(DNS ):将域名解析为 IP 地址的服务。 -### ip +### Ip ip 命令是 Linux 系统中用于管理网络设备、地址、路由等网络设置的一个强大工具。它是 iproute2 软件包的一部分,由 Alexey N. Kuznetsov 开发,首次发布于 1999 年。ip 命令的设计目的是替代原有的 ifconfig、route 等传统网络配置工具,提供更灵活、功能强大的解决方案。 @@ -406,7 +406,7 @@ IP6.GATEWAY: -- IP6.ROUTE[1]: dst = ::1/128, nh = ::, mt = 256 ``` -##### 2. 配置静态IP地址 +##### 2. 配置静态 IP 地址 注意,如果当前已经有一个 DHCP 分配的 IP 地址,则需要首先释放该地址。可以使用以下命令释放 DHCP 分配的 IP 地址: @@ -446,22 +446,22 @@ nmcli connection up ens160 ## 网络管理 -### iptables +### Iptables iptables 是 Linux 系统中的一个命令行防火墙工具,它允许系统管理员配置内核防火墙(netfilter)规则。它主要用于数据包过滤、网络地址转换(NAT)和数据包改变,这是因为它在内核空间运行并能为内核提供强大的防火墙和网络处理功能。 iptables 由 Rusty Russell 在 1998 年创建,并最初作为 ipchains 的替代品发布。它是 netfilter 项目的一部分,该项目的目标是提供一套丰富且可靠的防火墙和路由工具。 -在 iptables 的规则体系中,存在一个重要的概念叫做 "四表五链"。这些 "表" 和 "链" 提供了 iptables 进行包过滤和处理的基础架构。 +在 iptables 的规则体系中,存在一个重要的概念叫做 " 四表五链 "。这些 " 表 " 和 " 链 " 提供了 iptables 进行包过滤和处理的基础架构。 -**"四表" 是指 iptables 的四个预定义的表:filter、nat、mangle 和 raw。**每个表有特定的用途和与之关联的预定义链。 +**" 四表 " 是指 iptables 的四个预定义的表:filter、nat、mangle 和 raw。**每个表有特定的用途和与之关联的预定义链。 1. **filter 表:**这是 iptables 默认的表,用于过滤数据包。这个表关联的链有 INPUT、FORWARD 和 OUTPUT。 2. **nat 表:**用于网络地址转换(NAT)。这个表关联的链有 PREROUTING、OUTPUT 和 POSTROUTING。 3. **mangle 表:**用于特殊的包修改。这个表关联的链有 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING。 4. **raw 表:**用于配置 exemptions from connection tracking。这个表关联的链有 PREROUTING 和 OUTPUT。 -**"五链" 是指 iptables 的五个预定义的链:INPUT、OUTPUT、FORWARD、PREROUTING 和 POSTROUTING。** +**" 五链 " 是指 iptables 的五个预定义的链:INPUT、OUTPUT、FORWARD、PREROUTING 和 POSTROUTING。** 1. **INPUT 链:**处理进入本机的数据包。 2. **OUTPUT 链:**处理本机产生的数据包。 @@ -530,7 +530,7 @@ sudo iptables-save > /etc/iptables/rules.v4 sudo iptables-restore < /etc/iptables/rules.v4 ``` -### nftables +### Nftables nftables 是一种 Linux 内核的包过滤框架,**它是 iptables,ip6tables,arptables,ebtables 等工具的替代品**,旨在提供单一、统一的解决方案,以简化包过滤和防火墙的配置。nftables 提供了一个新的、更高级的语法,用于更简洁、更直观地定义和管理规则。 @@ -655,9 +655,9 @@ sudo ufw reload sudo ufw reset ``` -### firewalld +### Firewalld -firewalld 是一个用于管理 Linux 发行版的防火墙的动态守护程序。主要用于IPv4、IPv6 防火墙规则以及以太网桥的管理,firewalld 基于 nftables 或 iptables 实现网络包过滤。 +firewalld 是一个用于管理 Linux 发行版的防火墙的动态守护程序。主要用于 IPv4、IPv6 防火墙规则以及以太网桥的管理,firewalld 基于 nftables 或 iptables 实现网络包过滤。 相较于传统的防火墙管理方式,firewalld 采用动态管理,能够让你在无需重启防火墙的情况下实时更新策略和规则。firewalld 提供了一种区分网络/防火墙区域并定义其行为的方法,这使你能够为信任的网络接口、设备和服务定义区域,实现更加灵活的防火墙管理。 @@ -719,7 +719,7 @@ firewall-cmd --reload ### iptables、nftables、UFW、firewalld 对比 -在Linux环境下,`iptables`,`nftables`,`ufw`和`firewalld`都是常用的防火墙工具,每种工具都有其独特的优点和使用场景: +在 Linux 环境下,`iptables`,`nftables`,`ufw` 和 `firewalld` 都是常用的防火墙工具,每种工具都有其独特的优点和使用场景: | iptables | nftables | ufw | firewalld | | | -------------- | ------------ | ------------ | ---------- | ----------------- | @@ -736,20 +736,20 @@ firewall-cmd --reload | 跨平台 | 是 | 是 | 是 | 是 | | 语法复杂度 | 高 | 低 | 低 | 中 | -- `iptables`是最早的防火墙工具之一,尽管其语法复杂,但提供了极高的灵活性和全面的控制,适合需要精细控制防火墙规则的用户或者服务器环境。 -- `nftables`是`iptables`的现代化替代品,提供了更简洁的语法和规则集合功能,使得配置更为简单。它保持了`iptables`的灵活性,同时大大简化了防火墙的配置。 -- `ufw`(Uncomplicated Firewall)是一个对初学者友好的防火墙前端,主要用于简化`iptables`规则的管理。尽管它的功能没有其他工具丰富,但对于只需要基本防火墙功能的用户来说,`ufw`是一个不错的选择。 -- `firewalld`是一个强大的防火墙工具,它可以在不中断网络连接的情况下动态修改防火墙规则。此外,`firewalld`的基于区域的过滤,图形用户界面,以及规则集合等功能使得管理规则更加简便。 +- `iptables` 是最早的防火墙工具之一,尽管其语法复杂,但提供了极高的灵活性和全面的控制,适合需要精细控制防火墙规则的用户或者服务器环境。 +- `nftables` 是 `iptables` 的现代化替代品,提供了更简洁的语法和规则集合功能,使得配置更为简单。它保持了 `iptables` 的灵活性,同时大大简化了防火墙的配置。 +- `ufw`(Uncomplicated Firewall)是一个对初学者友好的防火墙前端,主要用于简化 `iptables` 规则的管理。尽管它的功能没有其他工具丰富,但对于只需要基本防火墙功能的用户来说,`ufw` 是一个不错的选择。 +- `firewalld` 是一个强大的防火墙工具,它可以在不中断网络连接的情况下动态修改防火墙规则。此外,`firewalld` 的基于区域的过滤,图形用户界面,以及规则集合等功能使得管理规则更加简便。 -**总的来说,您应该根据您的特定需求和技能水平选择最适合的防火墙工具。**对于初学者和只需要基本防火墙功能的用户来说,`ufw`可能是最好的选择。对于需要进行精细控制和高级配置的用户,`iptables`和`nftables`可能更合适。如果您需要一种同时提供强大功能和易用性的防火墙工具,那么`firewalld`可能是最好的选择。 +**总的来说,您应该根据您的特定需求和技能水平选择最适合的防火墙工具。**对于初学者和只需要基本防火墙功能的用户来说,`ufw` 可能是最好的选择。对于需要进行精细控制和高级配置的用户,`iptables` 和 `nftables` 可能更合适。如果您需要一种同时提供强大功能和易用性的防火墙工具,那么 `firewalld` 可能是最好的选择。 ## 网络服务 -### Web服务 +### Web 服务 #### Apache -[Apache](https://httpd.apache.org/)(Apache HTTP Server)是一个开源的Web服务器软件。它由 [Apache 软件基金会](https://www.apache.org/)维护,起源于 1995 年。Apache 支持多种操作系统,如 Linux、Unix、Windows 等。Apache 使用模块化的架构,可以通过安装和配置不同的模块来扩展其功能。 +[Apache](https://httpd.apache.org/)(Apache HTTP Server)是一个开源的 Web 服务器软件。它由 [Apache 软件基金会](https://www.apache.org/) 维护,起源于 1995 年。Apache 支持多种操作系统,如 Linux、Unix、Windows 等。Apache 使用模块化的架构,可以通过安装和配置不同的模块来扩展其功能。 Apache 适用于各种规模的网站和应用;未来方向将继续优化性能,提高安全性,支持新的 Web 技术和标准。 @@ -765,41 +765,41 @@ Nginx 适用于高并发、高流量的网站和应用,以及作为反向代 IIS 适用于依赖于 Windows 平台和 Microsoft 技术的网站和应用。 -### DHCP服务 +### DHCP 服务 #### ISC DHCP -[ISC DHCP](https://www.isc.org/dhcp/)(Internet Systems Consortium Dynamic Host Configuration Protocol)是一款开源的、广泛使用的DHCP 服务器软件,起源于 1999 年。它支持 IPv4 和 IPv6 地址分配,适用于各种规模的网络环境。 +[ISC DHCP](https://www.isc.org/dhcp/)(Internet Systems Consortium Dynamic Host Configuration Protocol)是一款开源的、广泛使用的 DHCP 服务器软件,起源于 1999 年。它支持 IPv4 和 IPv6 地址分配,适用于各种规模的网络环境。 -ISC DHCP 适用于需要稳定可靠的DHCP服务的企业和数据中心。未来将继续优化性能,提高稳定性和安全性,增加新功能。 +ISC DHCP 适用于需要稳定可靠的 DHCP 服务的企业和数据中心。未来将继续优化性能,提高稳定性和安全性,增加新功能。 -#### dnsmasq +#### Dnsmasq dnsmasq 是一个轻量级的 DHCP 和 DNS 服务软件,起源于 2000 年。它的设计目标是为小型网络提供简单易用的服务。dnsmasq 支持 IPv4 和 IPv6 地址分配,以及 DNS 缓存功能。 dnsmasq 适用于家庭、小型企业和实验室等小型网络环境。未来将继续保持轻量级特点,优化性能,增加新功能。 -### DNS服务 +### DNS 服务 #### BIND [BIND](https://www.isc.org/bind/)(Berkeley Internet Name Domain)是一款开源的 DNS 服务器软件,起源于 1980 年代。它是目前最广泛使用的 DNS 服务器软件,支持各种操作系统,如 Linux、Unix、Windows 等。 -BIND 适用于需要完整功能的DNS服务的企业和数据中心。 +BIND 适用于需要完整功能的 DNS 服务的企业和数据中心。 #### Unbound [Unbound](https://nlnetlabs.nl/) 是一个开源的、专注于安全和高性能的 DNS 服务器软件,起源于 2004 年。它采用了模块化的设计,支持 DNSSEC 和其他安全相关功能。 -Unbound 适用于需要高性能和安全的DNS服务的企业和数据中心。 +Unbound 适用于需要高性能和安全的 DNS 服务的企业和数据中心。 #### PowerDNS -[PowerDNS](https://www.powerdns.com/)是一个开源的、功能强大的 DNS 服务器软件,起源于 2000 年。它支持多种后端数据库,如 MySQL、PostgreSQL、SQLite 等。PowerDNS 提供了灵活的 API,方便进行二次开发和集成。 +[PowerDNS](https://www.powerdns.com/) 是一个开源的、功能强大的 DNS 服务器软件,起源于 2000 年。它支持多种后端数据库,如 MySQL、PostgreSQL、SQLite 等。PowerDNS 提供了灵活的 API,方便进行二次开发和集成。 -PowerDNS 适用于需要与数据库集成、自定义开发和高度可配置的DNS服务的企业和数据中心。 +PowerDNS 适用于需要与数据库集成、自定义开发和高度可配置的 DNS 服务的企业和数据中心。 -### NTP服务 +### NTP 服务 #### Chrony @@ -809,11 +809,11 @@ Chrony 适用于需要精确时间同步服务的企业、数据中心和科研 #### NTPd -NTPd(Network Time Protocol daemon)是一款开源的NTP服务器和客户端软件,起源于1985年。它广泛应用于各种规模的网络环境,支持各种操作系统。 +NTPd(Network Time Protocol daemon)是一款开源的 NTP 服务器和客户端软件,起源于 1985 年。它广泛应用于各种规模的网络环境,支持各种操作系统。 NTPd 适用于各种规模的网络环境,需要可靠的时间同步服务。 -### VPN服务 +### VPN 服务 #### OpenVPN @@ -831,7 +831,7 @@ IPSec 适用于需要安全通信和网络互联的企业和数据中心。 [WireGuard](https://www.wireguard.com/) 是一个简单、高性能的 VPN 软件,起源于 2016 年。它使用现代加密技术,具有易于配置和部署的特点。 -WireGuard 适用于需要简单易用、高性能VPN的企业和个人用户。 +WireGuard 适用于需要简单易用、高性能 VPN 的企业和个人用户。 ### 负载均衡 @@ -843,7 +843,7 @@ HAProxy 适用于需要高性能、高可用性负载均衡服务的大型网站 #### LVS -LVS(Linux Virtual Server)是一个开源的、基于Linux内核的负载均衡软件,起源于1998年。它支持TCP和UDP协议,可以用于分发各种网络服务。 +LVS(Linux Virtual Server)是一个开源的、基于 Linux 内核的负载均衡软件,起源于 1998 年。它支持 TCP 和 UDP 协议,可以用于分发各种网络服务。 LVS 适用于需要高性能、高可用性负载均衡服务的大型网站和数据中心。 @@ -851,7 +851,7 @@ LVS 适用于需要高性能、高可用性负载均衡服务的大型网站和 #### Samba -[Samba](https://www.samba.org/) 是一个开源的文件共享服务软件,起源于 1992 年。它允许在不同操作系统(如 Linux、Windows 和macOS)之间共享文件和打印机。 +[Samba](https://www.samba.org/) 是一个开源的文件共享服务软件,起源于 1992 年。它允许在不同操作系统(如 Linux、Windows 和 macOS)之间共享文件和打印机。 Samba 适用于需要在不同操作系统之间共享文件和打印机的企业和家庭网络环境。 @@ -859,11 +859,11 @@ Samba 适用于需要在不同操作系统之间共享文件和打印机的企 NFS(Network File System)是一种分布式文件系统协议,起源于 1984 年。它允许在 UNIX/Linux 系统之间共享文件。 -NFS 适用于需要在UNIX/Linux系统之间共享文件的企业和数据中心。 +NFS 适用于需要在 UNIX/Linux 系统之间共享文件的企业和数据中心。 #### SFTP -SFTP(SSH File Transfer Protocol)是一种基于SSH协议的文件传输协议,起源于1990年代。它提供安全的、加密的文件传输服务。 +SFTP(SSH File Transfer Protocol)是一种基于 SSH 协议的文件传输协议,起源于 1990 年代。它提供安全的、加密的文件传输服务。 SFTP 适用于需要安全传输文件的企业和个人用户。 @@ -897,110 +897,110 @@ Exim 适用于需要灵活、可定制的邮件传输服务的企业和数据中 ### 网络带宽管理 -网络带宽管理是一种在Linux系统上优化网络性能和响应时间的方法。它允许管理员控制和分配网络带宽,从而为不同的应用程序和服务提供最佳性能。 +网络带宽管理是一种在 Linux 系统上优化网络性能和响应时间的方法。它允许管理员控制和分配网络带宽,从而为不同的应用程序和服务提供最佳性能。 常用工具: -- tc (Traffic Control):Linux内核的一部分,用于实现复杂的带宽管理和流量控制策略。 -- HTB (Hierarchical Token Bucket):一个基于tc的流量整形工具,允许管理员创建多层次的带宽限制和优先级分配策略。 +- tc (Traffic Control):Linux 内核的一部分,用于实现复杂的带宽管理和流量控制策略。 +- HTB (Hierarchical Token Bucket):一个基于 tc 的流量整形工具,允许管理员创建多层次的带宽限制和优先级分配策略。 ### 网络质量管理(QoS) -网络质量管理(Quality of Service,QoS)是一种用于分配网络带宽的技术,确保网络资源的公平使用和最佳利用。通过QoS,管理员可以根据应用程序的需求和优先级分配网络带宽,从而优化网络性能。 +网络质量管理(Quality of Service,QoS)是一种用于分配网络带宽的技术,确保网络资源的公平使用和最佳利用。通过 QoS,管理员可以根据应用程序的需求和优先级分配网络带宽,从而优化网络性能。 常用工具: -- tc (Traffic Control):用于实现复杂的QoS策略和流量控制。 -- Wondershaper:一个基于tc的简单QoS工具,允许管理员轻松设置带宽限制和优先级策略。 +- tc (Traffic Control):用于实现复杂的 QoS 策略和流量控制。 +- Wondershaper:一个基于 tc 的简单 QoS 工具,允许管理员轻松设置带宽限制和优先级策略。 ### 负载均衡 -负载均衡是在多个服务器之间分配负载的技术,以提高应用程序的性能和可靠性。在Linux系统上,可以使用软件负载均衡器和硬件负载均衡器来实现负载均衡。 +负载均衡是在多个服务器之间分配负载的技术,以提高应用程序的性能和可靠性。在 Linux 系统上,可以使用软件负载均衡器和硬件负载均衡器来实现负载均衡。 常用工具: -- HAProxy:一个高性能、高可用性的软件负载均衡器,支持TCP和HTTP协议。 -- Nginx:一个功能强大的Web服务器,也可以作为负载均衡器和反向代理服务器。 -- LVS (Linux Virtual Server):一个基于Linux内核的负载均衡解决方案,支持多种负载均衡算法。 +- HAProxy:一个高性能、高可用性的软件负载均衡器,支持 TCP 和 HTTP 协议。 +- Nginx:一个功能强大的 Web 服务器,也可以作为负载均衡器和反向代理服务器。 +- LVS (Linux Virtual Server):一个基于 Linux 内核的负载均衡解决方案,支持多种负载均衡算法。 ### 数据压缩 -数据压缩技术可以减少网络传输的数据量,从而提高网络带宽利用率和传输效率。Linux系统提供了多种压缩工具和库,支持不同的压缩算法。 +数据压缩技术可以减少网络传输的数据量,从而提高网络带宽利用率和传输效率。Linux 系统提供了多种压缩工具和库,支持不同的压缩算法。 常用工具: -- gzip:一种广泛使用的文件压缩工具,基于DEFLATE压缩算法。 -- bzip2:一个基于Burrows-Wheeler算法的文件压缩工具,提供较高的压缩率。 +- gzip:一种广泛使用的文件压缩工具,基于 DEFLATE 压缩算法。 +- bzip2:一个基于 Burrows-Wheeler 算法的文件压缩工具,提供较高的压缩率。 - lz4:一种快速的无损压缩算法,适用于实时场景和大数据处理。 ### 缓存服务 -缓存服务用于在网络上存储和提供数据,以提高访问速度和响应时间。Linux系统上有多种缓存服务可用,包括Web缓存、DNS缓存和内容分发网络(CDN)。 +缓存服务用于在网络上存储和提供数据,以提高访问速度和响应时间。Linux 系统上有多种缓存服务可用,包括 Web 缓存、DNS 缓存和内容分发网络(CDN)。 常用工具: -- Squid:一个成熟的Web缓存代理服务器,可以用来缓存网站内容和优化网络访问速度。 -- Unbound:一个轻量级的DNS缓存服务器,用于加速DNS解析请求和提高域名解析性能。 -- Varnish:一个高性能的HTTP加速器和缓存服务器,广泛用于Web应用程序的性能优化。 +- Squid:一个成熟的 Web 缓存代理服务器,可以用来缓存网站内容和优化网络访问速度。 +- Unbound:一个轻量级的 DNS 缓存服务器,用于加速 DNS 解析请求和提高域名解析性能。 +- Varnish:一个高性能的 HTTP 加速器和缓存服务器,广泛用于 Web 应用程序的性能优化。 -### TCP/IP优化 +### TCP/IP 优化 -TCP/IP优化包括调整TCP拥塞控制算法、修改最大传输单元(MTU)、调整Nagle算法等,以提高网络性能和传输速度。Linux系统提供了多种工具和设置来优化TCP/IP性能。 +TCP/IP 优化包括调整 TCP 拥塞控制算法、修改最大传输单元(MTU)、调整 Nagle 算法等,以提高网络性能和传输速度。Linux 系统提供了多种工具和设置来优化 TCP/IP 性能。 常用方法: -- 修改内核参数:通过调整/proc/sys/net/ipv4/目录下的内核参数,如tcp_wmem、tcp_rmem和tcp_congestion_control,以优化TCP性能。 -- 调整MTU:修改网卡的MTU设置,以适应网络环境和提高传输效率。 -- 禁用Nagle算法:通过设置TCP_NODELAY选项,关闭Nagle算法以减小传输延迟。 +- 修改内核参数:通过调整/proc/sys/net/ipv4/目录下的内核参数,如 tcp_wmem、tcp_rmem 和 tcp_congestion_control,以优化 TCP 性能。 +- 调整 MTU:修改网卡的 MTU 设置,以适应网络环境和提高传输效率。 +- 禁用 Nagle 算法:通过设置 TCP_NODELAY 选项,关闭 Nagle 算法以减小传输延迟。 ### CDN(内容分发网络) -内容分发网络(CDN)是一种用于分发静态内容的技术,通过在全球范围内部署多个数据中心,将内容缓存到离用户最近的节点,从而提高访问速度和减轻源服务器负担。CDN广泛应用于Web应用程序和大型网站,以提供优质的用户体验。 +内容分发网络(CDN)是一种用于分发静态内容的技术,通过在全球范围内部署多个数据中心,将内容缓存到离用户最近的节点,从而提高访问速度和减轻源服务器负担。CDN 广泛应用于 Web 应用程序和大型网站,以提供优质的用户体验。 -常用CDN服务商: +常用 CDN 服务商: -- Akamai:全球最大的CDN服务商,提供广泛的网络加速和安全解决方案。 -- Cloudflare:一家提供CDN和网络安全服务的公司,帮助网站加速和保护其内容。 -- Amazon CloudFront:亚马逊提供的全球内容分发服务,与其他AWS服务紧密集成。 +- Akamai:全球最大的 CDN 服务商,提供广泛的网络加速和安全解决方案。 +- Cloudflare:一家提供 CDN 和网络安全服务的公司,帮助网站加速和保护其内容。 +- Amazon CloudFront:亚马逊提供的全球内容分发服务,与其他 AWS 服务紧密集成。 ## 网络安全 ### 网络故障排查与诊断 -Linux系统提供了一系列工具来帮助用户进行网络故障排查与诊断,包括ping、traceroute、mtr、nslookup、dig和whois等。 +Linux 系统提供了一系列工具来帮助用户进行网络故障排查与诊断,包括 ping、traceroute、mtr、nslookup、dig 和 whois 等。 -- ping:用于检测网络连接和延迟,通过发送ICMP数据包来检测目标主机是否可达。 +- ping:用于检测网络连接和延迟,通过发送 ICMP 数据包来检测目标主机是否可达。 - traceroute:用于显示数据包从源主机到目标主机经过的路由路径。 -- mtr:结合了ping和traceroute功能的网络诊断工具,提供实时路由分析。 -- nslookup:用于查询DNS服务器以获取域名解析信息。 -- dig:功能强大的DNS查询工具,可以获取详细的DNS记录信息。 -- whois:用于查询域名注册信息和IP地址分配信息。 +- mtr:结合了 ping 和 traceroute 功能的网络诊断工具,提供实时路由分析。 +- nslookup:用于查询 DNS 服务器以获取域名解析信息。 +- dig:功能强大的 DNS 查询工具,可以获取详细的 DNS 记录信息。 +- whois:用于查询域名注册信息和 IP 地址分配信息。 ### 安全隔离 -安全隔离是网络安全的重要概念,可以防止潜在的网络攻击和数据泄露。主要实现技术包括VLAN、DMZ和容器网络隔离。 +安全隔离是网络安全的重要概念,可以防止潜在的网络攻击和数据泄露。主要实现技术包括 VLAN、DMZ 和容器网络隔离。 -- VLAN (Virtual Local Area Network):通过在网络交换机上配置VLAN,可以将物理网络划分为多个逻辑子网,实现网络资源的安全隔离。 +- VLAN (Virtual Local Area Network):通过在网络交换机上配置 VLAN,可以将物理网络划分为多个逻辑子网,实现网络资源的安全隔离。 - DMZ (Demilitarized Zone):一种网络安全策略,通过在内部网络和外部网络之间建立一个隔离区域,保护内部网络资源免受外部攻击。 -- 容器网络隔离:通过使用容器技术(如Docker、Kubernetes)和虚拟网络(如Calico、Flannel)来实现应用程序的安全隔离。 +- 容器网络隔离:通过使用容器技术(如 Docker、Kubernetes)和虚拟网络(如 Calico、Flannel)来实现应用程序的安全隔离。 -### SSH安全配置 +### SSH 安全配置 -SSH是远程登录和管理Linux系统的常用协议。正确配置SSH可以提高系统的安全性。 +SSH 是远程登录和管理 Linux 系统的常用协议。正确配置 SSH 可以提高系统的安全性。 - 密钥认证:使用公钥/私钥对进行身份验证,替代密码认证,提高安全性。 -- 端口改变:将SSH服务端口从默认的22更改为其他端口,降低被扫描和攻击的风险。 -- 禁止root登录:禁止直接通过SSH以root身份登录,减少被攻击者利用的可能性。 -- 防止暴力破解:通过限制登录尝试次数、使用防火墙规则或安装防暴力破解软件(如Fail2Ban)来防止暴力破解攻击。 +- 端口改变:将 SSH 服务端口从默认的 22 更改为其他端口,降低被扫描和攻击的风险。 +- 禁止 root 登录:禁止直接通过 SSH 以 root 身份登录,减少被攻击者利用的可能性。 +- 防止暴力破解:通过限制登录尝试次数、使用防火墙规则或安装防暴力破解软件(如 Fail2Ban)来防止暴力破解攻击。 和攻击的风险。 -- 禁止root登录:禁止直接通过SSH以root身份登录,减少被攻击者利用的可能性。 -- 防止暴力破解:通过限制登录尝试次数、使用防火墙规则或安装防暴力破解软件(如Fail2Ban)来防止暴力破解攻击。 +- 禁止 root 登录:禁止直接通过 SSH 以 root 身份登录,减少被攻击者利用的可能性。 +- 防止暴力破解:通过限制登录尝试次数、使用防火墙规则或安装防暴力破解软件(如 Fail2Ban)来防止暴力破解攻击。 ### 虚拟化网络 -虚拟化网络是在物理网络基础上创建虚拟网络资源的技术,包括虚拟网卡、虚拟交换机、网桥和SDN(软件定义网络)等。 +虚拟化网络是在物理网络基础上创建虚拟网络资源的技术,包括虚拟网卡、虚拟交换机、网桥和 SDN(软件定义网络)等。 - 虚拟网卡:在虚拟机和容器中模拟的网络接口,与物理网卡类似,可用于建立虚拟网络连接。 - 虚拟交换机:在虚拟环境中实现网络连接和数据包转发的虚拟设备。 @@ -1009,7 +1009,7 @@ SSH是远程登录和管理Linux系统的常用协议。正确配置SSH可以提 ### 网络监测和分析 -网络监测和分析工具可以帮助管理员实时监控网络状况、发现异常行为和安全威胁。常用工具包括tcpdump、wireshark、netstat、nmap、sniffing、IDS和NMS等。 +网络监测和分析工具可以帮助管理员实时监控网络状况、发现异常行为和安全威胁。常用工具包括 tcpdump、wireshark、netstat、nmap、sniffing、IDS 和 NMS 等。 - tcpdump:用于捕获和分析网络数据包的命令行工具。 - wireshark:一个图形界面的网络协议分析器。 @@ -1018,47 +1018,47 @@ SSH是远程登录和管理Linux系统的常用协议。正确配置SSH可以提 ### 网络入侵检测系统(IDS) -网络入侵检测系统(Intrusion Detection System,IDS)可以检测网络中的恶意行为和攻击活动。常见的IDS工具包括Snort、Suricata、OSSEC和Bro/Zeek。 +网络入侵检测系统(Intrusion Detection System,IDS)可以检测网络中的恶意行为和攻击活动。常见的 IDS 工具包括 Snort、Suricata、OSSEC 和 Bro/Zeek。 - Snort:一款开源的网络入侵检测和防御系统,基于规则匹配和异常检测来识别恶意流量。 -- Suricata:一个高性能的开源IDS/IPS/NSM(网络安全监控)引擎,支持实时流量分析和威胁防御。 +- Suricata:一个高性能的开源 IDS/IPS/NSM(网络安全监控)引擎,支持实时流量分析和威胁防御。 - OSSEC:一个开源的主机入侵检测系统,用于监控文件系统、日志文件和网络活动。 - Bro/Zeek:一款强大的网络安全监控平台,支持实时流量分析、协议解析和异常检测。 ### 网络安全监控系统(NMS) -网络安全监控系统(Network Monitoring System,NMS)用于实时监控网络设备和服务的运行状况,发现性能问题和安全威胁。常见的NMS工具包括Nagios、Zabbix、Cacti、Prometheus和Grafana。 +网络安全监控系统(Network Monitoring System,NMS)用于实时监控网络设备和服务的运行状况,发现性能问题和安全威胁。常见的 NMS 工具包括 Nagios、Zabbix、Cacti、Prometheus 和 Grafana。 - Nagios:一款功能强大的开源网络监控系统,支持多种插件和扩展,用于监控网络设备、服务和应用程序。 - Zabbix:一种企业级的开源监控解决方案,提供分布式监控、报警和报表功能。 -- Cacti:一个基于RRDtool的网络图形监控工具,用于绘制网络设备性能图表。 +- Cacti:一个基于 RRDtool 的网络图形监控工具,用于绘制网络设备性能图表。 - Prometheus:一个开源的监控和告警系统,广泛用于监控微服务和容器化应用程序。 -- Grafana:一个流行的开源监控数据可视化工具,支持多种数据源,如Prometheus、InfluxDB和Elasticsearch等。 +- Grafana:一个流行的开源监控数据可视化工具,支持多种数据源,如 Prometheus、InfluxDB 和 Elasticsearch 等。 ### 网络安全审计系统 -网络安全审计系统用于评估网络设备和应用程序的安全性,发现潜在的漏洞和配置问题。常见的安全审计工具包括OSSEC、Tripwire、AIDE、OpenSCAP和Lynis。 +网络安全审计系统用于评估网络设备和应用程序的安全性,发现潜在的漏洞和配置问题。常见的安全审计工具包括 OSSEC、Tripwire、AIDE、OpenSCAP 和 Lynis。 - OSSEC:一个开源的主机入侵检测系统,也可以用于安全审计和配置检查。 - Tripwire:一款用于文件完整性检查和安全审计的工具,可以检测文件的变更和潜在的安全问题。 - AIDE (Advanced Intrusion Detection Environment):一个用于文件完整性检查和入侵检测的开源工具。 -- OpenSCAP (Open Security Content Automation Protocol):一个开源的安全配置和漏洞管理框架,基于SCAP标准实现。 -- Lynis:一个开源的安全审计和硬化工具,用于检查Linux系统的配置和安全性。 +- OpenSCAP (Open Security Content Automation Protocol):一个开源的安全配置和漏洞管理框架,基于 SCAP 标准实现。 +- Lynis:一个开源的安全审计和硬化工具,用于检查 Linux 系统的配置和安全性。 ### 网络加密技术 -网络加密技术用于保护数据在传输过程中的隐私和完整性。主要的网络加密技术包括SSL/TLS、IPSec、SSH等。 +网络加密技术用于保护数据在传输过程中的隐私和完整性。主要的网络加密技术包括 SSL/TLS、IPSec、SSH 等。 -- SSL/TLS:安全套接层(Secure Sockets Layer,SSL)和传输层安全(Transport Layer Security,TLS)是应用于网络传输层的加密技术,用于保护Web浏览、电子邮件和其他应用程序的数据安全。 -- IPSec:Internet协议安全(IP Security,IPSec)是一个用于保护IP数据包传输安全的协议套件,提供加密、认证和完整性保护功能。IPSec广泛应用于VPN技术中。 +- SSL/TLS:安全套接层(Secure Sockets Layer,SSL)和传输层安全(Transport Layer Security,TLS)是应用于网络传输层的加密技术,用于保护 Web 浏览、电子邮件和其他应用程序的数据安全。 +- IPSec:Internet 协议安全(IP Security,IPSec)是一个用于保护 IP 数据包传输安全的协议套件,提供加密、认证和完整性保护功能。IPSec 广泛应用于 VPN 技术中。 - SSH:安全外壳(Secure Shell,SSH)是一种加密网络协议,用于在不安全的网络环境中实现安全的远程登录、文件传输和其他网络服务。 ### 安全认证和授权 -安全认证和授权技术用于验证用户身份和控制用户访问权限。主要技术包括RADIUS、TACACS+、LDAP、Kerberos等。 +安全认证和授权技术用于验证用户身份和控制用户访问权限。主要技术包括 RADIUS、TACACS+、LDAP、Kerberos 等。 -- RADIUS:远程认证拨号用户服务(Remote Authentication Dial-In User Service,RADIUS)是一个用于AAA(认证、授权和计费)的网络协议,广泛应用于网络接入和VPN服务中。 -- TACACS+:终端访问控制器访问控制系统+(Terminal Access Controller Access-Control System+,TACACS+)是一种用于网络设备管理的AAA协议,主要应用于路由器、交换机等网络设备的远程管理。 +- RADIUS:远程认证拨号用户服务(Remote Authentication Dial-In User Service,RADIUS)是一个用于 AAA(认证、授权和计费)的网络协议,广泛应用于网络接入和 VPN 服务中。 +- TACACS+:终端访问控制器访问控制系统 +(Terminal Access Controller Access-Control System+,TACACS+)是一种用于网络设备管理的 AAA 协议,主要应用于路由器、交换机等网络设备的远程管理。 - LDAP:轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)是一种用于访问和维护分布式目录信息服务的协议,常用于企业网络的用户认证和组织结构管理。 - Kerberos:一种基于票据的网络认证协议,用于实现单点登录(Single Sign-On,SSO)和安全的跨域认证。 diff --git a/wiki/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md b/Tech/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md similarity index 83% rename from wiki/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md rename to Tech/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md index bd7fc42c..9ff9be20 100644 --- a/wiki/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md +++ b/Tech/operating-system/Linux/高级/Linux 下源代码编译与安装实战指南.md @@ -5,8 +5,7 @@ keywords: - Linux - 源代码编译 tags: - - Linux - - 高级 + - Linux/高级 sidebar_position: 1 author: 7Wate date: 2023-09-09 @@ -14,7 +13,7 @@ date: 2023-09-09 ## 概述 -编译和安装源代码是 Unix 和 Unix-like 系统中一个非常重要且基本的技能。通过这种方法,你不仅可以获得软件的最新版本,而且还可以根据自己的需求和偏好定制软件。在本指南中,我们将通过一个具体实例(Nginx软件包)来详细讲解源代码编译和安装的全过程。 +编译和安装源代码是 Unix 和 Unix-like 系统中一个非常重要且基本的技能。通过这种方法,你不仅可以获得软件的最新版本,而且还可以根据自己的需求和偏好定制软件。在本指南中,我们将通过一个具体实例(Nginx 软件包)来详细讲解源代码编译和安装的全过程。 ```mermaid graph LR; @@ -36,7 +35,7 @@ graph LR; ### 1. 获取源代码 -在开始编译和安装过程之前,首先需要获取软件的源代码。这可以通过多种途径实现,例如直接从官方网站下载源代码压缩包,或使用版本控制系统(如git)来克隆源代码仓库。 +在开始编译和安装过程之前,首先需要获取软件的源代码。这可以通过多种途径实现,例如直接从官方网站下载源代码压缩包,或使用版本控制系统(如 git)来克隆源代码仓库。 ```shell # 使用 wget 命令下载源代码压缩包 @@ -48,7 +47,7 @@ git clone https://github.com/example/software.git ### 2. 安装编译依赖 -在编译源代码之前,通常需要安装一些依赖库和工具。这些依赖包括编译器(如gcc)和其他必要的库。 +在编译源代码之前,通常需要安装一些依赖库和工具。这些依赖包括编译器(如 gcc)和其他必要的库。 ```shell sudo apt update @@ -69,9 +68,9 @@ tar xvf software-x.y.z.tar.gz cd software-x.y.z ``` -### 2. configure 配置 +### 2. Configure 配置 -配置是准备编译的重要步骤,通常通过运行`configure`脚本来完成。这个脚本会检测你的系统环境和参数,并准备好编译过程。 +配置是准备编译的重要步骤,通常通过运行 `configure` 脚本来完成。这个脚本会检测你的系统环境和参数,并准备好编译过程。 ```shell # 运行 configure 脚本来配置软件包 @@ -92,7 +91,7 @@ cd software-x.y.z | `--quiet`, `--silent` | 禁止显示多余的输出 | | `--libdir=DIR` | 指定库文件的安装目录 | | `--includedir=DIR` | 指定头文件的安装目录 | -| `--mandir=DIR` | 指定man手册页面的安装目录 | +| `--mandir=DIR` | 指定 man 手册页面的安装目录 | | `--sysconfdir=DIR` | 指定系统配置文件的安装目录 | | `--localstatedir=DIR` | 指定本地状态数据(如日志文件)的安装目录 | | `--enable-shared` | 启用或禁用共享库的构建 | @@ -102,9 +101,9 @@ cd software-x.y.z | `--host=HOST` | 指定主机类型(用于交叉编译) | | `--build=BUILD` | 指定构建系统类型 | -### 3. make 编译 +### 3. Make 编译 -配置完成后,我们可以开始编译源代码了。这一步通常通过`make`命令来完成,它根据Makefile文件中的指令进行源代码编译。 +配置完成后,我们可以开始编译源代码了。这一步通常通过 `make` 命令来完成,它根据 Makefile 文件中的指令进行源代码编译。 ```shell # 使用 make 命令来编译源代码 @@ -126,7 +125,7 @@ make | 选项 | 描述 | | -------------------------- | ------------------------------------------------------------ | -| `-j [N]` | 允许同时执行 N 个作业(如果未指定 N,则自动选择基于可用CPU核心的数量) | +| `-j [N]` | 允许同时执行 N 个作业(如果未指定 N,则自动选择基于可用 CPU 核心的数量) | | `-k` 或 `--keep-going` | 即使有错误发生也继续尽可能多的编译 | | `--silent` 或 `-s` | 禁止显示执行的命令 | | `--always-make` 或 `-B` | 无论目标文件是否最新,都重新构建所有目标 | @@ -140,7 +139,7 @@ make ### 1. 安装 -编译完成后,下一步是将软件包安装到系统中。这也是通过运行`make`命令完成的,但常配合`install`目标来将文件安装到正确的位置。 +编译完成后,下一步是将软件包安装到系统中。这也是通过运行 `make` 命令完成的,但常配合 `install` 目标来将文件安装到正确的位置。 ```python # 使用 make 命令来安装软件包 @@ -160,7 +159,7 @@ make test ### 1. 运行和管理 -安装完成后,你可以使用相应的命令来启动、停止或重载服务。例如,在Nginx的情况下,你可以使用以下命令: +安装完成后,你可以使用相应的命令来启动、停止或重载服务。例如,在 Nginx 的情况下,你可以使用以下命令: ```shell # 启动 Nginx 服务 @@ -188,7 +187,7 @@ make clean ### 1. 创建 Systemd 服务单元文件 -首先,我们需要创建一个新的Systemd服务单元文件。打开一个文本编辑器并创建一个新文件,通常位于`/etc/systemd/system/`目录,并以`.service`扩展名结尾。 +首先,我们需要创建一个新的 Systemd 服务单元文件。打开一个文本编辑器并创建一个新文件,通常位于 `/etc/systemd/system/` 目录,并以 `.service` 扩展名结尾。 ```shell sudo nano /etc/systemd/system/nginx.service @@ -196,7 +195,7 @@ sudo nano /etc/systemd/system/nginx.service ### 2. 编辑服务单元文件 -在这个文件中,我们将定义服务的各种属性,包括如何启动和停止服务。以下是一个简单的Nginx Systemd服务单元文件示例: +在这个文件中,我们将定义服务的各种属性,包括如何启动和停止服务。以下是一个简单的 Nginx Systemd 服务单元文件示例: ```shell [Unit] @@ -218,7 +217,7 @@ WantedBy=multi-user.target ### 3. 重新加载 Systemd -创建或修改任何Systemd服务单元文件后,你需要运行以下命令来重新加载Systemd,使其识别新的或更改的服务单元文件: +创建或修改任何 Systemd 服务单元文件后,你需要运行以下命令来重新加载 Systemd,使其识别新的或更改的服务单元文件: ```shell sudo systemctl daemon-reload @@ -226,7 +225,7 @@ sudo systemctl daemon-reload ### 4. 启动和启用服务 -现在,你可以使用`systemctl`命令来启动Nginx服务,并将其设置为在系统启动时自动启动: +现在,你可以使用 `systemctl` 命令来启动 Nginx 服务,并将其设置为在系统启动时自动启动: ```shell sudo systemctl start nginx diff --git a/wiki/programming-language/Python/入门/_category_.json b/Tech/programming-language/Python/入门/_category_.json similarity index 100% rename from wiki/programming-language/Python/入门/_category_.json rename to Tech/programming-language/Python/入门/_category_.json diff --git a/wiki/programming-language/Python/入门/函数方法.md b/Tech/programming-language/Python/入门/函数方法.md similarity index 93% rename from wiki/programming-language/Python/入门/函数方法.md rename to Tech/programming-language/Python/入门/函数方法.md index 18073592..10fce401 100644 --- a/wiki/programming-language/Python/入门/函数方法.md +++ b/Tech/programming-language/Python/入门/函数方法.md @@ -2,10 +2,10 @@ title: 函数方法 description: Python 的函数方法 keywords: -- Python -- 函数方法 + - Python + - 函数方法 tags: -- Python + - Python/入门 sidebar_position: 4 author: 7Wate date: 2023-08-03 @@ -17,7 +17,7 @@ date: 2023-08-03 函数是通过白盒/黑盒封装多行代码的实现方式,通常具有输入和输出,目的是为了**简化代码**、**重复调用**和**模块化编程**。 -在 Python 中,`def`关键字用于定义函数,每个函数都具有一个唯一的名称,其命名规则与变量命名规则相同。函数体的第一条语句可以是一个字符串,该字符串被称为**文档字符串**或 docstring,用于提供关于函数的简要描述。 +在 Python 中,`def` 关键字用于定义函数,每个函数都具有一个唯一的名称,其命名规则与变量命名规则相同。函数体的第一条语句可以是一个字符串,该字符串被称为**文档字符串**或 docstring,用于提供关于函数的简要描述。 ```python # 语法 @@ -43,7 +43,7 @@ python 中类型属于对象,变量是没有类型的。**python 中一切都 在 python 中 strings,、tuples 和 numbers 是不可更改的对象,而 list、dict 等则是可以修改的对象。 - **不可变类型:**变量赋值 **a=5** 后再赋值 **a=10**,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。 -- **可变类型:**变量赋值 **la=[1,2,3,4]** 后再赋值 **la[2]=5** 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。 +- **可变类型:**变量赋值 **la=[1,2,3,4]** 后再赋值 **la[2]=5** 则是将 list la 的第三个元素值更改,本身 la 没有动,只是其内部的一部分值被修改了。 #### 参数传递 @@ -113,7 +113,7 @@ add2(name="halo") #### 限位置参数 / -`/`必须放在形参后面表示限制位置参数,实参必须按照形参位置输入。 +`/` 必须放在形参后面表示限制位置参数,实参必须按照形参位置输入。 ```python def pos_only_arg(arg, /): @@ -122,7 +122,7 @@ def pos_only_arg(arg, /): #### 限关键字参数 * -`*`必须放在形参前面表示限关键字参数,实参必须按键值参数输入。 +`*` 必须放在形参前面表示限关键字参数,实参必须按键值参数输入。 ```python def kwd_only_arg(*, arg): @@ -155,7 +155,7 @@ Traceback (most recent call last): TypeError: combined_example() got some positional-only arguments passed as keyword arguments: 'pos_only' ``` -### return +### Return **return [表达式]** 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。 @@ -221,7 +221,7 @@ def outer(): outer() ``` -## yield +## Yield `yield` 是 Python 中用于创建生成器(generator)的关键字。一个包含 `yield` 表达式的函数被称为一个生成器函数。这种函数在被调用时不会立即执行,而是返回一个迭代器,这个迭代器可以在其元素需要被处理时生成它们。这种延迟生成元素的方式使得生成器在处理大数据集或无限序列时非常有用,因为它们不需要一次性生成所有元素,从而节省内存。 diff --git a/wiki/programming-language/Python/入门/基础语法.md b/Tech/programming-language/Python/入门/基础语法.md similarity index 85% rename from wiki/programming-language/Python/入门/基础语法.md rename to Tech/programming-language/Python/入门/基础语法.md index 99cebf2a..410d586d 100644 --- a/wiki/programming-language/Python/入门/基础语法.md +++ b/Tech/programming-language/Python/入门/基础语法.md @@ -2,10 +2,10 @@ title: 基础语法 description: Python 基础语法 keywords: -- Python -- 基础语法 + - Python + - 基础语法 tags: -- Python + - Python/入门 sidebar_position: 1 author: 7Wate date: 2023-08-03 @@ -31,11 +31,11 @@ Python 官网还包含许多**免费丰富的第三方 Python 模块**、程序 ### 安装 -Python 官网:,可以在[官方文档](https://docs.python.org/)帮助下选择合适版本安装。 +Python 官网:,可以在 [官方文档](https://docs.python.org/) 帮助下选择合适版本安装。 ### 运行 -Python 安装后在 Shell 中输入 Python 既可运行交互解释器,在解释器内编写 Python 脚本既可以运行。如果需要退出,输入`quit()`。 +Python 安装后在 Shell 中输入 Python 既可运行交互解释器,在解释器内编写 Python 脚本既可以运行。如果需要退出,输入 `quit()`。 ## 编码 @@ -104,7 +104,7 @@ str = "hello" "world" "!" ## 复合语句 -Python 像 if、while、def 和 class 这样的复合语句,**首行以关键字开始,以冒号( : )结束**,该行之后的一行或多行代码构成代码组。首行及后面的代码组称为一个子句(clause)。 +Python 像 if、while、def 和 class 这样的复合语句,**首行以关键字开始,以冒号 ( : ) 结束**,该行之后的一行或多行代码构成代码组。首行及后面的代码组称为一个子句 (clause)。 ```python if expression : @@ -115,7 +115,7 @@ else : suite ``` -此外,Python还支持一些更高级的特性,如函数式编程、面向对象编程和元编程等。随着学习的深入,你会发现Python的世界越来越广阔。 +此外,Python 还支持一些更高级的特性,如函数式编程、面向对象编程和元编程等。随着学习的深入,你会发现 Python 的世界越来越广阔。 ## 关键字 @@ -133,10 +133,10 @@ $ print(keyword.kwlist) **硬性规则:** - 变量名由**字母**(广义的 Unicode 字符,不包括特殊字符)、**数字**和**下划线**构成,**数字不能开头**。 -- **大小写敏感**(大写的`a`和小写的`A`是两个不同的变量)。 +- **大小写敏感**(大写的 `a` 和小写的 `A` 是两个不同的变量)。 - 不要跟**关键字**(有特殊含义的单词)和系统保留字(如函数、模块等的名字)冲突。 -**PEP 8要求:** +**PEP 8 要求:** - 用小写字母拼写,多个单词用下划线连接。 - 受保护的实例属性用单个下划线开头。 diff --git a/wiki/programming-language/Python/入门/控制语句.md b/Tech/programming-language/Python/入门/控制语句.md similarity index 78% rename from wiki/programming-language/Python/入门/控制语句.md rename to Tech/programming-language/Python/入门/控制语句.md index d4871e7b..923e0aed 100644 --- a/wiki/programming-language/Python/入门/控制语句.md +++ b/Tech/programming-language/Python/入门/控制语句.md @@ -2,10 +2,10 @@ title: 控制语句 description: Python 控制语句 keywords: -- Python -- 控制语句 + - Python + - 控制语句 tags: -- Python + - Python/入门 sidebar_position: 3 author: 7Wate date: 2023-08-03 @@ -15,16 +15,16 @@ Python 中的控制语句有条件语句,循环语句,异常处理,以及 ## 条件语句 -Python中的条件语句是通过一条或多条语句的执行结果(即True或False)来决定执行的代码块。 +Python 中的条件语句是通过一条或多条语句的执行结果(即 True 或 False)来决定执行的代码块。 判断的值可以分为: - 假值 :None、空列表、空集合、空字典,空元组、空字符串、0、False 等。 - 真值 :非空列表、非空集合、非空字典,非空元组、非空字符串、非 0 数值、True 等。 -### if +### If -在Python中,要构造分支结构可以使用`if`、`elif`和`else`关键字。`elif`和`else`都是可选的,可以根据需要进行使用。 +在 Python 中,要构造分支结构可以使用 `if`、`elif` 和 `else` 关键字。`elif` 和 `else` 都是可选的,可以根据需要进行使用。 ```python # 示例 @@ -41,11 +41,11 @@ Please enter an integer: 42 print('More') ``` -当然如果要构造出更多的分支,可以使用`if...elif...else...`结构或者嵌套的`if...else...`结构。 +当然如果要构造出更多的分支,可以使用 `if...elif...else...` 结构或者嵌套的 `if...else...` 结构。 -### match +### Match -Python 3.10 引入了新的`match`语句,它是模式匹配的一种形式。`match`语句接受一个表达式并将它的值与一系列的模式进行比较。 每个模式都关联到一个代码块,当模式与表达式的值匹配时,该代码块将被执行。这在某种程度上类似于其他语言中的 switch 语句。 +Python 3.10 引入了新的 `match` 语句,它是模式匹配的一种形式。`match` 语句接受一个表达式并将它的值与一系列的模式进行比较。 每个模式都关联到一个代码块,当模式与表达式的值匹配时,该代码块将被执行。这在某种程度上类似于其他语言中的 switch 语句。 ```python def http_error(status): @@ -68,11 +68,11 @@ case 401 | 403 | 404: return "Not allowed" ``` -*注意,`match`语句和模式匹配的概念是Python 3.10中新增的特性,可能在更早版本的Python中无法使用。* +*注意,`match` 语句和模式匹配的概念是 Python 3.10 中新增的特性,可能在更早版本的 Python 中无法使用。* ## 循环语句 -### for +### For Python 的 for 语句用于遍历任何序列的项目,如列表或字符串。 @@ -91,17 +91,17 @@ print(sum) **内置函数 range() 表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。** -在 Python 中,`range()` 是一个内置函数,用于生成一个不可变的数字序列。通常,这个函数在 for 循环中使用,用于指定循环的次数。`range(101)`可以用来生成一个包含0到100(不包含101)的整数序列。 +在 Python 中,`range()` 是一个内置函数,用于生成一个不可变的数字序列。通常,这个函数在 for 循环中使用,用于指定循环的次数。`range(101)` 可以用来生成一个包含 0 到 100(不包含 101)的整数序列。 -你也可以根据需要更改`range()`函数的参数,例如: +你也可以根据需要更改 `range()` 函数的参数,例如: -- `range(1, 101)`:生成一个包含1到100(不包含101)的整数序列。 -- `range(1, 101, 2)`:生成一个包含1到100的奇数序列,其中2是步长。 -- `range(100, 0, -2)`:生成一个包含100到1的偶数序列,其中-2是步长。 +- `range(1, 101)`:生成一个包含 1 到 100(不包含 101)的整数序列。 +- `range(1, 101, 2)`:生成一个包含 1 到 100 的奇数序列,其中 2 是步长。 +- `range(100, 0, -2)`:生成一个包含 100 到 1 的偶数序列,其中 -2 是步长。 -### while +### While -`while` 循环语句用于在条件满足的情况下重复执行一个代码块。条件表达式的结果为`True`时,继续循环;结果为`False`时,结束循环。 +`while` 循环语句用于在条件满足的情况下重复执行一个代码块。条件表达式的结果为 `True` 时,继续循环;结果为 `False` 时,结束循环。 ```python """ @@ -126,15 +126,15 @@ if counter > 7: print('你的智商余额明显不足') ``` -### break +### Break `break` 语句可以提前退出循环。具体来说,**`break` 用于完全结束一个循环,并跳出该循环体。** -### continue +### Continue `continue` 语句用于**跳过当前循环的剩余语句,然后继续进行下一轮循环。** -### else +### Else 在 Python 中,`else` 子句可以与 `for` 循环和 `while` 循环一起使用。当循环正常完成(即没有碰到 `break` 语句)时,`else` 块的内容会被执行。这个特性在很多其他语言中都没有,因此对于初学者来说可能会感到有些不熟悉。 @@ -159,7 +159,7 @@ else: print("循环正常完成") ``` -在这个示例中,当 `i` 等于3时,`break` 语句就会被执行,所以循环没有正常完成,`else` 块的内容不会被打印出来。 +在这个示例中,当 `i` 等于 3 时,`break` 语句就会被执行,所以循环没有正常完成,`else` 块的内容不会被打印出来。 同样的,`else` 也可以与 `while` 循环一起使用,当 `while` 循环的条件变为 `False` 时,`else` 块的内容会被执行。 @@ -173,7 +173,7 @@ else: print("循环正常完成") ``` -在这个示例中,当 `i` 等于3时,`break` 语句就会被执行,所以循环没有正常完成,`else` 块的内容不会被打印出来。 +在这个示例中,当 `i` 等于 3 时,`break` 语句就会被执行,所以循环没有正常完成,`else` 块的内容不会被打印出来。 ## 异常语句 @@ -263,11 +263,11 @@ except: raise ``` -### with +### With Python 的 with 语句支持通过上下文管理器所定义的运行时上下文这一概念。 -`with`语句是一种处理上下文管理器的语句,上下文管理器通常包含`__enter__`和`__exit__`这两个方法。在`with`语句的代码块被执行前,会首先执行`__enter__`方法,在执行完毕后,会调用`__exit__`方法。这在你需要管理资源,如文件,网络连接或锁定等情况非常有用,因为它可以**保证在任何情况下都会执行必要的清理操作。** +`with` 语句是一种处理上下文管理器的语句,上下文管理器通常包含 `__enter__` 和 `__exit__` 这两个方法。在 `with` 语句的代码块被执行前,会首先执行 `__enter__` 方法,在执行完毕后,会调用 `__exit__` 方法。这在你需要管理资源,如文件,网络连接或锁定等情况非常有用,因为它可以**保证在任何情况下都会执行必要的清理操作。** ```python # 在这里,文件已经被关闭,无需再次手动关闭 @@ -298,15 +298,15 @@ with ManagedFile("file.txt") as file: print(file.read()) ``` -### raise +### Raise -`raise`语句用于引发特定的异常。你可以定义异常类型并附加一个错误消息: +`raise` 语句用于引发特定的异常。你可以定义异常类型并附加一个错误消息: ```python raise ValueError("这是一个无效的值!") ``` -如果你在`except`块中使用`raise`语句,而不提供任何参数,它将默认重新引发最近的异常。 +如果你在 `except` 块中使用 `raise` 语句,而不提供任何参数,它将默认重新引发最近的异常。 ```python try: @@ -318,7 +318,7 @@ except ZeroDivisionError as e: ## 其他语句 -### assert +### Assert `assert` 语句用于断言某个条件为真,如果条件为假,则会抛出 `AssertionError` 异常。它常常用于调试代码,确认代码的某些方面满足预期,例如: @@ -332,7 +332,7 @@ assert x == 2, "x should be 2 but is actually " + str(x) *注意,`assert` 语句在优化模式下(使用 `-O` 参数启动 Python 时)会被全局禁用。* -### pass +### Pass `pass` 语句是 Python 中的空语句,用于在需要语句的地方保持语法的完整性,但是**实际上不做任何事情**。通常,我们使用它作为未完成代码的占位符: @@ -344,7 +344,7 @@ class MyEmptyClass: pass ``` -### return +### Return `return` 语句用于从函数返回一个值。所有函数都会返回一个值:如果函数执行到结尾而没有遇到 `return` 语句,它将返回特殊值 `None`: diff --git a/wiki/programming-language/Python/入门/数据类型.md b/Tech/programming-language/Python/入门/数据类型.md similarity index 85% rename from wiki/programming-language/Python/入门/数据类型.md rename to Tech/programming-language/Python/入门/数据类型.md index 43413a1b..b02608bd 100644 --- a/wiki/programming-language/Python/入门/数据类型.md +++ b/Tech/programming-language/Python/入门/数据类型.md @@ -2,10 +2,10 @@ title: 数据类型 description: Python 的数据类型 keywords: -- Python -- 数据类型 + - Python + - 数据类型 tags: -- Python + - Python/入门 sidebar_position: 2 author: 7Wate date: 2023-08-03 @@ -13,7 +13,7 @@ date: 2023-08-03 在编程领域,理解和掌握各种数据类型是任何编程语言的基础,Python 也不例外。Python 3 提供了多种内置数据类型,包括但不限于数字(整型、浮点型、复数)、布尔型、列表、元组、字符串、集合、字典等,还有函数、模块等高级类型。每种数据类型都有其特定的特性和适用场景。 -> 在Python中,变量可以被理解为一个标签(tag)或者标记,它是附着在特定对象上的名字。你可以将这个理念理解为在超市里的商品标签,标签告诉你这是什么商品,而商品是具体的物品。同样的,Python的变量名就像是一个标签,它告诉我们这个变量指向的是什么对象,而对象是存储在内存中的具体数据。 +> 在 Python 中,变量可以被理解为一个标签(tag)或者标记,它是附着在特定对象上的名字。你可以将这个理念理解为在超市里的商品标签,标签告诉你这是什么商品,而商品是具体的物品。同样的,Python 的变量名就像是一个标签,它告诉我们这个变量指向的是什么对象,而对象是存储在内存中的具体数据。 ## 对象与类型 @@ -35,10 +35,10 @@ x = 'hello' # x 变成了一个字符串 print(type(x)) # ``` -Python中有两个内置函数`id`和`type`。 +Python 中有两个内置函数 `id` 和 `type`。 -- `id(obj)`函数:返回对象`obj`的唯一标识符,其实质上是该对象在内存中的地址。 -- `type(obj)`函数:返回对象`obj`的类型。 +- `id(obj)` 函数:返回对象 `obj` 的唯一标识符,其实质上是该对象在内存中的地址。 +- `type(obj)` 函数:返回对象 `obj` 的类型。 ### 引用计数和垃圾收集 @@ -72,7 +72,7 @@ Python 中的数据类型可以分为两大类:可变类型与不可变类型 - **可变类型**:值可以更改,如列表、字典和集合。 - **不可变类型**:值不可更改,如数字、字符串、元组等。 -不可变类型的变量如果改变值,实际上是生成了一个新的对象,并使变量引用新的对象。Python的赋值语句复制的是对象的引用,而不是对象的值。因此,Python中的“变量”与其他编程语言中的“变量”不完全相同,将其翻译为“引用”可能更加合适。 +不可变类型的变量如果改变值,实际上是生成了一个新的对象,并使变量引用新的对象。Python 的赋值语句复制的是对象的引用,而不是对象的值。因此,Python 中的“变量”与其他编程语言中的“变量”不完全相同,将其翻译为“引用”可能更加合适。 ```python # 在代码中,`list1`是一个列表,是可变类型。 @@ -94,7 +94,7 @@ print(id(x)) # id 改变了 ## Python3 内置类型 -Python 3内置了多种数据类型,同时还内建了许多其他类型,如上下文管理器类型、模块、方法、代码对象、类型对象、内部对象等。 +Python 3 内置了多种数据类型,同时还内建了许多其他类型,如上下文管理器类型、模块、方法、代码对象、类型对象、内部对象等。 ### 数字类型 @@ -143,16 +143,16 @@ Python 3内置了多种数据类型,同时还内建了许多其他类型,如 | 类型 | 描述 | 示例 | 可变性 | | ------------------ | ------------------------------------------------------ | ------------------- | ------ | -| NoneType | 表示None的特殊类型。 | `None` | 不可变 | -| EllipsisType | 表示省略的特殊类型,主要在切片和NumPy库中使用。 | `Ellipsis` 或 `...` | 不可变 | +| NoneType | 表示 None 的特殊类型。 | `None` | 不可变 | +| EllipsisType | 表示省略的特殊类型,主要在切片和 NumPy 库中使用。 | `Ellipsis` 或 `...` | 不可变 | | NotImplementedType | 表示未实现方法的特殊类型,主要在自定义比较方法中使用。 | `NotImplemented` | 不可变 | ### 二进制类型 | 类型 | 描述 | 示例 | 可变性 | | ---------- | ------------------------------------------------------------ | ------------------------- | -------------- | -| bytes | 字节,包含零个或多个范围为0<=x<256的整数的不可变序列。 | `b'hello'`, `b'\x01\x02'` | 不可变 | -| bytearray | 字节数组,包含零个或多个范围为0<=x<256的整数的可变序列。 | `bytearray(b'hello')` | 可变 | +| bytes | 字节,包含零个或多个范围为 0<=x<256 的整数的不可变序列。 | `b'hello'`, `b'\x01\x02'` | 不可变 | +| bytearray | 字节数组,包含零个或多个范围为 0<=x<256 的整数的可变序列。 | `bytearray(b'hello')` | 可变 | | memoryview | 内存查看,用于访问其他二进制序列、打包的数组和缓冲区的内部数据。 | `memoryview(b'hello')` | 依据所查看对象 | ### 类、实例和异常 @@ -172,7 +172,7 @@ Python 3内置了多种数据类型,同时还内建了许多其他类型,如 ## 类型转换 -Python提供了多种函数,用于在不同类型之间进行转换: +Python 提供了多种函数,用于在不同类型之间进行转换: ```Python x = "123" # 这是一个字符串 @@ -187,16 +187,16 @@ print(type(x)) # | 函数 | 描述 | | :-------------------- | :-------------------------------------------------- | -| int(x [,base]) | 将x转换为一个整数 | -| float(x) | 将x转换到一个浮点数 | +| int(x [,base]) | 将 x 转换为一个整数 | +| float(x) | 将 x 转换到一个浮点数 | | complex(real [,imag]) | 创建一个复数 | | str(x) | 将对象 x 转换为字符串 | | repr(x) | 将对象 x 转换为表达式字符串 | -| eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 | +| eval(str) | 用来计算在字符串中的有效 Python 表达式,并返回一个对象 | | tuple(s) | 将序列 s 转换为一个元组 | | list(s) | 将序列 s 转换为一个列表 | | set(s) | 转换为可变集合 | -| dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列 | +| dict(d) | 创建一个字典。d 必须是一个 (key, value) 元组序列 | | frozenset(s) | 转换为不可变集合 | | chr(x) | 将一个整数转换为一个字符 | | ord(x) | 将一个字符转换为它的整数值 | diff --git a/wiki/programming-language/Python/入门/数据结构.md b/Tech/programming-language/Python/入门/数据结构.md similarity index 93% rename from wiki/programming-language/Python/入门/数据结构.md rename to Tech/programming-language/Python/入门/数据结构.md index 424e350d..75c51bcf 100644 --- a/wiki/programming-language/Python/入门/数据结构.md +++ b/Tech/programming-language/Python/入门/数据结构.md @@ -2,10 +2,10 @@ title: 数据结构 description: Python 数据结构 keywords: -- Python -- 数据结构 + - Python + - 数据结构 tags: -- Python + - Python/入门 sidebar_position: 5 author: 7Wate date: 2023-08-03 @@ -13,11 +13,11 @@ date: 2023-08-03 ## 数值 -Python的数值数据类型是用来存储数值的。一旦创建,**数值对象的身份和类型是不可改变的**。如果你改变了数值对象的值,Python 将创建一个新的数值对象。Python 支持三种不同的数值类型: +Python 的数值数据类型是用来存储数值的。一旦创建,**数值对象的身份和类型是不可改变的**。如果你改变了数值对象的值,Python 将创建一个新的数值对象。Python 支持三种不同的数值类型: -- **整型(int)**:被用来表示整数,包括正整数和负整数,不带小数点。在Python 3中,整数的长度是无限的,可以视为 Python 2 中的 Long 类型。此外,布尔类型(bool)实际上是整型的一种特殊形式,其中 True 和 False 分别被表示为 1 和 0。 -- **浮点型(float)**:用来表示实数,由整数部分和小数部分组成。浮点型还可以使用科学计数法表示。例如,2.5e2 表示的是 2.5 乘以 10 的平方,等于 250。 -- **复数(complex)**:复数由实部和虚部构成,表示形式可以是 a + bj,或者 complex(a,b)。在这里,实部 a 和虚部 b 都是浮点型。 +- **整型 (int)**:被用来表示整数,包括正整数和负整数,不带小数点。在 Python 3 中,整数的长度是无限的,可以视为 Python 2 中的 Long 类型。此外,布尔类型(bool)实际上是整型的一种特殊形式,其中 True 和 False 分别被表示为 1 和 0。 +- **浮点型 (float)**:用来表示实数,由整数部分和小数部分组成。浮点型还可以使用科学计数法表示。例如,2.5e2 表示的是 2.5 乘以 10 的平方,等于 250。 +- **复数 (complex)**:复数由实部和虚部构成,表示形式可以是 a + bj,或者 complex(a,b)。在这里,实部 a 和虚部 b 都是浮点型。 ```python num1 = -100 # 整数 @@ -54,7 +54,7 @@ sin_val = math.sin(pi/2) ## 字符串 -字符串在计算机科学和编程中非常重要。在Python程序中,如果我们把单个或多个字符用单引号或者双引号包围起来,我们就创建了一个字符串。 +字符串在计算机科学和编程中非常重要。在 Python 程序中,如果我们把单个或多个字符用单引号或者双引号包围起来,我们就创建了一个字符串。 ### 定义 @@ -107,15 +107,15 @@ print(s1[0:5]) # 输出:hello | `\n` | 换行 | `print("\n")` 输出一个新行 | | `\r` | 回车 | `print("Hello\rWorld!")` 输出:`World!` | | `\t` | 横向制表符(Tab) | `print("Hello\tWorld!")` 输出:`Hello World!` | -| `\b` | 退格(Backspace) | `print("Hello \bWorld!")` 输出:`Hello World!` | +| `\b` | 退格 (Backspace) | `print("Hello \bWorld!")` 输出:`Hello World!` | | `\f` | 换页 | `print("Hello \fWorld!")` 输出:`Hello World!` | | `\a` | 响铃 | `print("\a")` 执行后电脑有响声 | | `\000` | 空 | `print("\000")` 输出:`` | | `\v` | 纵向制表符 | `print("Hello \vWorld!")` 输出:`Hello World!` | | `\other` | 其他的字符以普通格式输出 | | -| `\xhh` | 二进制数,代表一个ASCII字符 | `print("\x48\x65\x6c\x6c\x6f")` 输出:`Hello` | -| `\ooo` | 八进制数,代表一个ASCII字符 | `print("\141\142\143")` 输出:`abc` | -| `\uhhhh` | 16进制数,代表一个Unicode字符 | `print("\u6211\u4eec")` 输出:`我们` | +| `\xhh` | 二进制数,代表一个 ASCII 字符 | `print("\x48\x65\x6c\x6c\x6f")` 输出:`Hello` | +| `\ooo` | 八进制数,代表一个 ASCII 字符 | `print("\141\142\143")` 输出:`abc` | +| `\uhhhh` | 16 进制数,代表一个 Unicode 字符 | `print("\u6211\u4eec")` 输出:`我们` | ### 运算 @@ -201,7 +201,7 @@ print(result4) | str.capitalize() | 返回首字母大写的字符串 | `'hello, world!'.capitalize()` 输出结果:Hello, world! | | str.title() | 返回每个单词首字母大写的字符串 | `'hello, world!'.title()` 输出结果:Hello, World! | | str.upper() | 返回字符串变大写后的拷贝 | `'hello, world!'.upper()` 输出结果:HELLO, WORLD! | -| str.find(sub) | 查找子串在字符串中的起始位置,未找到返回-1 | `'hello, world!'.find('or')` 输出结果:8 | +| str.find(sub) | 查找子串在字符串中的起始位置,未找到返回 -1 | `'hello, world!'.find('or')` 输出结果:8 | | str.startswith(prefix) | 检查字符串是否以指定的前缀开头 | `'hello, world!'.startswith('He')` 输出结果:False | | str.endswith(suffix) | 检查字符串是否以指定的后缀结尾 | `'hello, world!'.endswith('!')` 输出结果:True | | str.center(width, fillchar) | 将字符串以指定宽度居中并在两侧填充指定字符 | `'hello'.center(10, '*')` 输出结果:***hello*** | @@ -213,7 +213,7 @@ print(result4) ## 列表 -列表(`list`)是一种结构化的、非标量类型,它是值的有序序列,每个值都可以通过索引进行标识,定义列表可以将列表的元素放在`[]`中,多个元素用`,`进行分隔,可以使用`for`循环对列表元素进行遍历,也可以使用`[]`或`[:]`运算符取出列表中的一个或多个元素。 +列表(`list`)是一种结构化的、非标量类型,它是值的有序序列,每个值都可以通过索引进行标识,定义列表可以将列表的元素放在 `[]` 中,多个元素用 `,` 进行分隔,可以使用 `for` 循环对列表元素进行遍历,也可以使用 `[]` 或 `[:]` 运算符取出列表中的一个或多个元素。 ### 定义 @@ -539,7 +539,7 @@ set1 >= set3 # False,set1 是 set3 的超集吗? ![img](https://static.7wate.com/img/2022/11/20/6f5d818eb8092.png) -字典是另一种可变容器模型,且**可存储任意类型对象**。字典与列表、集合不同的是,它是一种键-值(key-value)对应的数据结构。每个元素都是**由一个键和一个值组成的键值对**,键和值通过冒号分开。键必须是唯一的,但值则不必。 +字典是另一种可变容器模型,且**可存储任意类型对象**。字典与列表、集合不同的是,它是一种键 - 值(key-value)对应的数据结构。每个元素都是**由一个键和一个值组成的键值对**,键和值通过冒号分开。键必须是唯一的,但值则不必。 ![img](https://static.7wate.com/img/2022/11/20/0e8264c5acc5a.png) diff --git a/wiki/programming-language/Python/入门/模块和包.md b/Tech/programming-language/Python/入门/模块和包.md similarity index 86% rename from wiki/programming-language/Python/入门/模块和包.md rename to Tech/programming-language/Python/入门/模块和包.md index 692cd875..5446e5f9 100644 --- a/wiki/programming-language/Python/入门/模块和包.md +++ b/Tech/programming-language/Python/入门/模块和包.md @@ -2,10 +2,10 @@ title: 模块和包 description: Python 模块和包 keywords: -- Python -- 模块和包 + - Python + - 模块和包 tags: -- Python + - Python/入门 sidebar_position: 7 author: 7Wate date: 2023-08-03 @@ -69,7 +69,7 @@ Python 为了避免模块名冲突,又引入了按目录来组织模块的方 ### 标准包 -标准包就是文件夹下必须存在 `__init__.py` 文件,该文件的内容可以为空。如果没有该文件,Python 无法识别出标准包。Python 中导入包后会初始化并执行 `__init__.py` 进行初始化;在 `__init__.py` 中,如果将`__all__` 定义为列表,其中包含对象名称的字符串,程序就可以通过 * 的方式导入。 +标准包就是文件夹下必须存在 `__init__.py` 文件,该文件的内容可以为空。如果没有该文件,Python 无法识别出标准包。Python 中导入包后会初始化并执行 `__init__.py` 进行初始化;在 `__init__.py` 中,如果将 `__all__` 定义为列表,其中包含对象名称的字符串,程序就可以通过 * 的方式导入。 例如,我们有以下的目录结构: @@ -113,15 +113,15 @@ runoob2() ## 模块和包的导入 -Python 模块是一个包含 Python 定义和语句的文件,模块可以定义函数,类和变量。模块也可以包含可执行的代码。包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。 +Python 模块是一个包含 Python 定义和语句的文件,模块可以定义函数,类和变量。模块也可以包含可执行的代码。包是一种管理 Python 模块命名空间的形式,采用 " 点模块名称 "。 ### 导入方式 -在Python中,可以通过以下四种方式导入模块或包: +在 Python 中,可以通过以下四种方式导入模块或包: #### `import xx.xx` -这种方式将整个模块导入。如果模块中有函数、类或变量,我们需要以`module.xxx`的方式调用。 +这种方式将整个模块导入。如果模块中有函数、类或变量,我们需要以 `module.xxx` 的方式调用。 ```python # Module_a.py @@ -200,9 +200,9 @@ myproject/ import mypackage.module_a ``` -在这里,`mypackage`是项目的根目录,所以我们使用完整的路径来导入`module_a`。 +在这里,`mypackage` 是项目的根目录,所以我们使用完整的路径来导入 `module_a`。 -同样,在`module_b.py`中,我们可以使用绝对导入来导入`module_a.py`: +同样,在 `module_b.py` 中,我们可以使用绝对导入来导入 `module_a.py`: ```python # mypackage/subpackage/module_b.py @@ -219,23 +219,23 @@ import mypackage.module_a ### 相对导入 -相对导入是基于当前模块文件的目录结构的。使用`.`表示当前目录,`..`表示父目录,以此类推。相对导入通常用在包内部,当模块之间互相导入时。让我们通过示例来理解相对导入。 +相对导入是基于当前模块文件的目录结构的。使用 `.` 表示当前目录,`..` 表示父目录,以此类推。相对导入通常用在包内部,当模块之间互相导入时。让我们通过示例来理解相对导入。 -在`module_b.py`中,我们可以使用相对导入来导入同一包下的`module_a.py`: +在 `module_b.py` 中,我们可以使用相对导入来导入同一包下的 `module_a.py`: ```python # mypackage/subpackage/module_b.py from .. import module_a ``` -在这里,`..`表示上一级目录,即`mypackage`,然后我们导入了`module_a`。 +在这里,`..` 表示上一级目录,即 `mypackage`,然后我们导入了 `module_a`。 #### 注意事项 相对导入需要一些额外的注意事项: - 相对导入只能用于包内部模块之间的导入,不能用于顶级模块或脚本。 -- 如果直接运行一个包含相对导入的模块,可能会导致`ImportError`。 +- 如果直接运行一个包含相对导入的模块,可能会导致 `ImportError`。 #### 适用场景 @@ -252,7 +252,7 @@ from .. import module_a 2. 在环境变量 PYTHONPATH 中列出的所有目录 3. Python 的安装目录和其他默认目录 -模块搜索路径存储在`sys`模块的`sys.path`变量中。 +模块搜索路径存储在 `sys` 模块的 `sys.path` 变量中。 ```python import sys @@ -261,13 +261,13 @@ print(sys.path) ## 命名空间和作用域 -在Python中,命名空间(Namespace)是从名称到对象的映射,主要用于避免命名冲突。命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。 +在 Python 中,命名空间(Namespace)是从名称到对象的映射,主要用于避免命名冲突。命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。 ### 命名空间类型 -Python有三种命名空间: +Python 有三种命名空间: -- **内置名称(built-in names)**:Python语言内置的名称,如函数名`abs`、`char`和异常名称`BaseException`、`Exception`等。 +- **内置名称(built-in names)**:Python 语言内置的名称,如函数名 `abs`、`char` 和异常名称 `BaseException`、`Exception` 等。 - **全局名称(global names)**:模块中定义的名称,包括模块的函数、类、导入的模块、模块级别的变量和常量。 - **局部名称(local names)**:函数中定义的名称,包括函数的参数和局部定义的变量。 @@ -275,12 +275,12 @@ Python有三种命名空间: ### 作用域 -作用域定义了命名空间可以直接访问的代码段,决定了在哪一部分程序可以访问特定的变量名。Python 的作用域一共有4种,分别是: +作用域定义了命名空间可以直接访问的代码段,决定了在哪一部分程序可以访问特定的变量名。Python 的作用域一共有 4 种,分别是: ![img](https://static.7wate.com/img/2022/11/20/1e3af056f1ac0.png) - L(Local):最内层,包含局部变量,比如一个函数/方法内部。 -- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类)A里面又包含了一个函数 B,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。 +- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类)A 里面又包含了一个函数 B,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。 - G(Global):当前脚本的最外层,比如当前模块的全局变量。 - B(Built-in): 包含了内建的变量/关键字等,最后被搜索。 diff --git a/wiki/programming-language/Python/入门/面对对象.md b/Tech/programming-language/Python/入门/面对对象.md similarity index 79% rename from wiki/programming-language/Python/入门/面对对象.md rename to Tech/programming-language/Python/入门/面对对象.md index 6742b3b2..02d64dd4 100644 --- a/wiki/programming-language/Python/入门/面对对象.md +++ b/Tech/programming-language/Python/入门/面对对象.md @@ -2,10 +2,10 @@ title: 面对对象 description: Python 面对对象 keywords: -- Python -- 面对对象 + - Python + - 面对对象 tags: -- Python + - Python/入门 sidebar_position: 6 author: 7Wate date: 2023-08-03 @@ -34,11 +34,11 @@ date: 2023-08-03 ## Python 中的类和对象 -在 Python 中,我们使用`class`关键字来定义类。类是一种数据类型,它定义了一种新的对象,这种对象具有自己的属性和方法。 +在 Python 中,我们使用 `class` 关键字来定义类。类是一种数据类型,它定义了一种新的对象,这种对象具有自己的属性和方法。 ### 类和对象的概念 -- **类(Class)**: 类是对象的蓝图或原型。你可以想象成是创建对象的模板,它定义了特定类型的对象的属性和方法。 +- **类 (Class)**: 类是对象的蓝图或原型。你可以想象成是创建对象的模板,它定义了特定类型的对象的属性和方法。 ```python # 一个简单的 Python 类的例子 @@ -46,7 +46,7 @@ class Dog: pass ``` -- **对象(Object)**:对象是类的实例。具体来说,当我们根据类的定义创建了一个实例后,这个实例就是一个对象。每个对象都具有类定义的属性和方法。 +- **对象 (Object)**:对象是类的实例。具体来说,当我们根据类的定义创建了一个实例后,这个实例就是一个对象。每个对象都具有类定义的属性和方法。 ```python # 创建Dog类的一个实例 @@ -59,7 +59,7 @@ my_dog = Dog() 类的属性和方法是类的主要组成部分。属性用于描述类和其实例的状态,方法用于描述类和其实例可以进行的操作。 -在Python中,我们可以在类中定义两种类型的属性和方法: +在 Python 中,我们可以在类中定义两种类型的属性和方法: - **实例属性和方法**:实例属性和方法属于类的实例。每个实例都有自己的实例属性,这些属性与其他实例的属性互不影响。实例方法可以通过实例来调用,它可以访问和修改实例的属性。 @@ -89,9 +89,9 @@ class Dog: ### `__init__` -在Python中使用`__init__`方法来初始化类的实例。这个方法会在创建实例时自动调用,我们可以在这个方法中设置实例的初始状态,也就是定义实例的属性。 +在 Python 中使用 `__init__` 方法来初始化类的实例。这个方法会在创建实例时自动调用,我们可以在这个方法中设置实例的初始状态,也就是定义实例的属性。 -`__init__`方法的第一个参数始终是`self`,代表了实例本身。在`__init__`方法中,我们使用`self.属性名`来定义实例属性。 +`__init__` 方法的第一个参数始终是 `self`,代表了实例本身。在 `__init__` 方法中,我们使用 `self.属性名` 来定义实例属性。 ```python class Dog: @@ -115,7 +115,7 @@ class Dog: #### 数据封装 -在 Python 中,我们可以通过使用私有属性(私有变量)实现数据封装。**Python 中的私有属性名字前面带有两个下划线(例如`__name`)。**这些属性只能在类的内部被访问,不能在类的外部直接访问,从而实现了数据的封装。 +在 Python 中,我们可以通过使用私有属性(私有变量)实现数据封装。**Python 中的私有属性名字前面带有两个下划线(例如 `__name`)。**这些属性只能在类的内部被访问,不能在类的外部直接访问,从而实现了数据的封装。 ```python class Dog: @@ -140,7 +140,7 @@ class Dog: return f"{self.__name} says woof!" ``` -尽管私有属性和方法不能在类的外部直接访问,但是我们可以提供公共的getter和setter方法,让外部代码能够以受控的方式读写这些私有属性。这样我们就可以保证封装的安全性,同时也提供了一定的灵活性。 +尽管私有属性和方法不能在类的外部直接访问,但是我们可以提供公共的 getter 和 setter 方法,让外部代码能够以受控的方式读写这些私有属性。这样我们就可以保证封装的安全性,同时也提供了一定的灵活性。 ```python class Dog: @@ -223,7 +223,7 @@ print(duck.fly()) # Outputs: Flies! #### `super` 函数 -在 Python 中,`super`函数是一个内置函数,它可以用来调用父类的方法。这在你需要在子类中扩展父类的方法时特别有用。 +在 Python 中,`super` 函数是一个内置函数,它可以用来调用父类的方法。这在你需要在子类中扩展父类的方法时特别有用。 ```python class Animal: @@ -270,7 +270,7 @@ class Dog(Animal): #### Duck Typing -Python 支持一种编程概念叫做 duck typing,这也是实现多态的一种方法。Duck typing的核心思想是:如果一个对象能够像鸭子一样走路,像鸭子一样叫,那么我们就可以认为它是鸭子。对于Python来说,如果一个对象有我们需要的方法,我们就可以使用它,而不管它是什么类型的对象(运行时类型确定)。 +Python 支持一种编程概念叫做 duck typing,这也是实现多态的一种方法。Duck typing 的核心思想是:如果一个对象能够像鸭子一样走路,像鸭子一样叫,那么我们就可以认为它是鸭子。对于 Python 来说,如果一个对象有我们需要的方法,我们就可以使用它,而不管它是什么类型的对象(运行时类型确定)。 ```python def animal_sound(animal): @@ -289,15 +289,15 @@ print(animal_sound(Animal())) # 输出"Generic animal sound" 接口是一种特殊的抽象类,它只定义了一组方法的签名,没有提供任何实现。接口定义了一组行为,任何实现了这些行为的类都可以说是实现了这个接口。 -### Python 的 abc 模块 +### Python 的 Abc 模块 -在 Python 中,我们使用 abc 模块来创建抽象类和接口。abc 模块提供了`ABC`基类和`abstractmethod`装饰器,我们可以使用它们来定义抽象类和抽象方法。 +在 Python 中,我们使用 abc 模块来创建抽象类和接口。abc 模块提供了 `ABC` 基类和 `abstractmethod` 装饰器,我们可以使用它们来定义抽象类和抽象方法。 ### Python 中使用抽象类和接口 #### 创建抽象类 -我们可以使用`ABC`基类和`abstractmethod`装饰器来创建抽象类。 +我们可以使用 `ABC` 基类和 `abstractmethod` 装饰器来创建抽象类。 ```Python from abc import ABC, abstractmethod @@ -350,7 +350,7 @@ class Dog(AbstractAnimal, AnimalBehaviour): 在 Python 中,异常是程序运行期间发生的错误事件,它会中断常规程序的执行流程。当程序执行过程中遇到错误时,Python 解释器会自动引发(raise)一个异常。 -异常是一种特殊的对象,它包含了有关错误的详细信息,例如错误类型和错误发生时的程序状态。Python 内置了很多标准异常类型,如`ValueError`,`TypeError`,`IndexError`等,每种类型都对应了一类特定的错误。 +异常是一种特殊的对象,它包含了有关错误的详细信息,例如错误类型和错误发生时的程序状态。Python 内置了很多标准异常类型,如 `ValueError`,`TypeError`,`IndexError` 等,每种类型都对应了一类特定的错误。 我们可以使用异常处理机制来捕获(catch)异常。通过处理异常,我们可以决定在出现错误时程序如何响应,而不是让程序直接崩溃。这对于构建健壮和稳定的程序至关重要。 @@ -389,12 +389,12 @@ graph TB ### 异常处理关键字 -Python中处理异常的关键字主要有四个:`try`,`except`,`finally`,`else`。 +Python 中处理异常的关键字主要有四个:`try`,`except`,`finally`,`else`。 -- `try`: 你可以把可能会引发异常的代码放在`try`块中。 -- `except`: 当`try`块中的代码引发异常时,`except`块中的代码将被执行。你可以在`except`后面指定你想捕获的异常类型。一个`try`块后面可以跟随多个`except`块,用于捕获不同类型的异常。 -- `finally`: 无论`try`块中的代码是否引发异常,`finally`块中的代码都将被执行。这常用于执行一些无论异常是否发生都需要执行的清理操作,如关闭文件。 -- `else`: 如果`try`块中的代码没有引发异常,那么`else`块中的代码将被执行。`else`关键字是可选的。 +- `try`: 你可以把可能会引发异常的代码放在 `try` 块中。 +- `except`: 当 `try` 块中的代码引发异常时,`except` 块中的代码将被执行。你可以在 `except` 后面指定你想捕获的异常类型。一个 `try` 块后面可以跟随多个 `except` 块,用于捕获不同类型的异常。 +- `finally`: 无论 `try` 块中的代码是否引发异常,`finally` 块中的代码都将被执行。这常用于执行一些无论异常是否发生都需要执行的清理操作,如关闭文件。 +- `else`: 如果 `try` 块中的代码没有引发异常,那么 `else` 块中的代码将被执行。`else` 关键字是可选的。 ```Python try: @@ -417,14 +417,14 @@ finally: | --------------------- | ----------------------------------- | | `BaseException` | 所有异常的基类 | | `SystemExit` | 解释器请求退出 | -| `KeyboardInterrupt` | 用户中断执行(通常是输入^C) | +| `KeyboardInterrupt` | 用户中断执行 (通常是输入^C) | | `Exception` | 常规错误的基类 | | `StopIteration` | 迭代器没有更多的值 | -| `GeneratorExit` | 生成器(generator)发生异常来通知退出 | +| `GeneratorExit` | 生成器 (generator) 发生异常来通知退出 | | `SystemError` | 解释器发现内部错误 | -| `SyntaxError` | Python语法错误 | +| `SyntaxError` | Python 语法错误 | | `IndentationError` | 缩进错误 | -| `TabError` | Tab和空格混用 | +| `TabError` | Tab 和空格混用 | | `NameError` | 未声明/初始化对象 (没有属性) | | `UnboundLocalError` | 访问未初始化的本地变量 | | `AttributeError` | 对象没有这个属性 | @@ -433,27 +433,27 @@ finally: | `ImportError` | 导入模块/对象失败 | | `ModuleNotFoundError` | 找不到模块 | | `LookupError` | 无效数据查询的基类 | -| `IndexError` | 序列中没有此索引(index) | +| `IndexError` | 序列中没有此索引 (index) | | `KeyError` | 映射中没有这个键 | | `ValueError` | 传入无效的参数 | -| `UnicodeError` | Unicode相关的错误 | +| `UnicodeError` | Unicode 相关的错误 | | `ArithmeticError` | 数学运算基类 | | `FloatingPointError` | 浮点计算错误 | | `OverflowError` | 数值运算超出最大限制 | -| `ZeroDivisionError` | 除(或取模)零 (所有数据类型) | +| `ZeroDivisionError` | 除 (或取模) 零 (所有数据类型) | | `EnvironmentError` | 操作系统错误的基类 | | `IOError` | 输入/输出操作失败 | | `OSError` | 操作系统错误 | -| `EOFError` | 没有内建输入,到达EOF标记 | +| `EOFError` | 没有内建输入,到达 EOF 标记 | | `RuntimeError` | 一般的运行时错误 | | `NotImplementedError` | 尚未实现的方法 | | `RecursionError` | 超过最大递归深度 | ### 自定义异常的创建和抛出 -Python允许你创建自定义的异常类型。为了创建自定义的异常类型,你需要定义一个类,它继承自`Exception`类或者它的子类。在你的类中,你可以定义任何你需要的方法,但是通常,自定义的异常类型会非常简单,只提供一些基本的信息。 +Python 允许你创建自定义的异常类型。为了创建自定义的异常类型,你需要定义一个类,它继承自 `Exception` 类或者它的子类。在你的类中,你可以定义任何你需要的方法,但是通常,自定义的异常类型会非常简单,只提供一些基本的信息。 -要抛出你自定义的异常,你可以使用`raise`关键字。在`raise`语句后面,你可以指定要抛出的异常类型,以及一个可选的错误消息。 +要抛出你自定义的异常,你可以使用 `raise` 关键字。在 `raise` 语句后面,你可以指定要抛出的异常类型,以及一个可选的错误消息。 ```Python class CustomError(Exception): diff --git a/wiki/programming-language/Python/文化/_category_.json b/Tech/programming-language/Python/文化/_category_.json similarity index 100% rename from wiki/programming-language/Python/文化/_category_.json rename to Tech/programming-language/Python/文化/_category_.json diff --git a/wiki/programming-language/Python/文化/发展历史.md b/Tech/programming-language/Python/文化/发展历史.md similarity index 65% rename from wiki/programming-language/Python/文化/发展历史.md rename to Tech/programming-language/Python/文化/发展历史.md index b19a1acb..292c8710 100644 --- a/wiki/programming-language/Python/文化/发展历史.md +++ b/Tech/programming-language/Python/文化/发展历史.md @@ -2,10 +2,10 @@ title: 发展历史 description: Python的历史由来 keywords: -- Python -- 历史 + - Python + - 历史 tags: -- Python + - Python/文化 sidebar_position: 1 author: 7Wate date: 2022-10-18 @@ -15,18 +15,18 @@ date: 2022-10-18 Python 之父**吉多·范罗苏姆**(荷兰人 Guido van Rossum)于 1982 年从阿姆斯特丹大学取得了数学和计算机硕士学位。后来他在多个研究机构工作,包括在荷兰阿姆斯特丹的国家数学和计算机科学研究学会,在马里兰州 Gaithersburg 的国家标准暨技术研究院,和维珍尼亚州 Reston 的国家创新研究公司。 -20 世纪 80 年代中期,Python 之父 Guido van Rossum 还在 CWI(数学和理论计算机科学领域的研究中心,位于阿姆斯特丹)为 ABC 语言贡献代码。ABC 语言是一个为编程初学者打造的研究项目。ABC 语言给了 Python 之父Guido 很大影响,**Python 从 ABC 语言中继承了很多东西:比如字符串、列表和字节数列都支持索引、切片排序和拼接操作。**在 CWI 工作了一段时间后,Guido 构思了一门致力于解决问题的编程语言,他觉得现有的编程语言对非计算机专业的人十分不友好。 +20 世纪 80 年代中期,Python 之父 Guido van Rossum 还在 CWI(数学和理论计算机科学领域的研究中心,位于阿姆斯特丹)为 ABC 语言贡献代码。ABC 语言是一个为编程初学者打造的研究项目。ABC 语言给了 Python 之父 Guido 很大影响,**Python 从 ABC 语言中继承了很多东西:比如字符串、列表和字节数列都支持索引、切片排序和拼接操作。**在 CWI 工作了一段时间后,Guido 构思了一门致力于解决问题的编程语言,他觉得现有的编程语言对非计算机专业的人十分不友好。 于是 1989 年 12 月份,为了打发无聊的圣诞节假期,Guido 开始写 Python 的第一个版本。值得一提的是 Python 这个名字的由来,**Python 有蟒蛇的意思,但 Guido 起这个名字完全和蟒蛇没有关系。**当 Guido 在实现 Python 的时候,他还阅读了 Monty Python's Flying Circus 的剧本,这是来自一部来自 20 世纪 70 年代的 BBC 喜剧。Guido 认为他需要一个简短、独特且略显神秘的名字,因此他决定将该语言称为 Python。 -在 1991 年 2 月,范罗苏姆在 alt.sources 上发布了最初代码(标记为版本0.9.0),这时就已经存在了带继承的类、异常处理、函数和核心数据类型 list、dict、str 等。在这个最初发行中就有了从 Modula-3 引进的模块系统,它的异常模型也类似于 Modula-3。 +在 1991 年 2 月,范罗苏姆在 alt.sources 上发布了最初代码(标记为版本 0.9.0),这时就已经存在了带继承的类、异常处理、函数和核心数据类型 list、dict、str 等。在这个最初发行中就有了从 Modula-3 引进的模块系统,它的异常模型也类似于 Modula-3。 -在 **1994 年 1 月 Python 达到了版本 1.0**。这个发行版主要新特征是包括了由 Amrit Prem 提供的函数式编程工具lambda、map、filter和reduce。Python 1.4 增加了受 Modula-3 启发的关键字参数,和对复数的内建支持,还包含了采取名字修饰的一种基本形式的数据隐藏。 +在 **1994 年 1 月 Python 达到了版本 1.0**。这个发行版主要新特征是包括了由 Amrit Prem 提供的函数式编程工具 lambda、map、filter 和 reduce。Python 1.4 增加了受 Modula-3 启发的关键字参数,和对复数的内建支持,还包含了采取名字修饰的一种基本形式的数据隐藏。 -**Python 2.0 于 2000 年 10 月 16 日发布**,介入了列表推导式,这是从函数式编程语言 SETL 和 Haskell 中引入的。它还向垃圾收集系统增加了环检测算法,并且支持 Unicode。Python 2.1 支持了嵌套作用域,就像其他静态作用域语言一样。Python 2.2 的重大革新是将 Python 的类型(用 C 写成)和类(用 Python 写成)统一入一个层级,使得 Python 的对象模型成为纯粹和一致的面向对象的模型;还增加了迭代器,受 CLU 和 Icon 启发的生成器和描述器协议。Python 2.4加入了集合数据类型,和函数修饰器。Python 2.5 加入了 with 语句。 +**Python 2.0 于 2000 年 10 月 16 日发布**,介入了列表推导式,这是从函数式编程语言 SETL 和 Haskell 中引入的。它还向垃圾收集系统增加了环检测算法,并且支持 Unicode。Python 2.1 支持了嵌套作用域,就像其他静态作用域语言一样。Python 2.2 的重大革新是将 Python 的类型(用 C 写成)和类(用 Python 写成)统一入一个层级,使得 Python 的对象模型成为纯粹和一致的面向对象的模型;还增加了迭代器,受 CLU 和 Icon 启发的生成器和描述器协议。Python 2.4 加入了集合数据类型,和函数修饰器。Python 2.5 加入了 with 语句。 **Python 3.0 于 2008 年 12 月 3 日发布,它对语言做了较大修订而不能完全后向兼容。**Python 3 发行包括了 2 to 3 实用工具,它(至少部分的)自动将 Python 2 代码转换成 Python 3 代码。Python 3 的很多新特性后来也被移植到旧的 Python 2.6/2.7 版本中。 -罗苏姆作为 Python 的主要开发者,独自担负这个项目的发展决策者职责,直到2018年7月12日,他宣布从终身仁慈独裁者(BDFL)的职权上“永久休假”。他在 2019 年 1 月至 11 月参与了第一届五人掌控委员会继续领导项目发展。在 2021 年 12 月,活跃的 Python 核心开发者选举 Pablo Galindo Salgado、Petr Viktorin、Thomas Wouters、Gregory P. Smith 和 Brett Cannon 为 2022 年度《掌控委员会》的五位成员来领导这个项目。 +罗苏姆作为 Python 的主要开发者,独自担负这个项目的发展决策者职责,直到 2018 年 7 月 12 日,他宣布从终身仁慈独裁者(BDFL)的职权上“永久休假”。他在 2019 年 1 月至 11 月参与了第一届五人掌控委员会继续领导项目发展。在 2021 年 12 月,活跃的 Python 核心开发者选举 Pablo Galindo Salgado、Petr Viktorin、Thomas Wouters、Gregory P. Smith 和 Brett Cannon 为 2022 年度《掌控委员会》的五位成员来领导这个项目。 > 来源:[Python - 维基百科,自由的百科全书](https://zh.wikipedia.org/wiki/Python#%E6%AD%B7%E5%8F%B2);非商业引用,著作权归作者所有。 diff --git a/wiki/programming-language/Python/文化/生命周期.md b/Tech/programming-language/Python/文化/生命周期.md similarity index 88% rename from wiki/programming-language/Python/文化/生命周期.md rename to Tech/programming-language/Python/文化/生命周期.md index 57c6d0d9..53c270d8 100644 --- a/wiki/programming-language/Python/文化/生命周期.md +++ b/Tech/programming-language/Python/文化/生命周期.md @@ -2,10 +2,10 @@ title: 生命周期 description: Python 版本生命周期 keywords: -- Python -- 生命周期 + - Python + - 生命周期 tags: -- Python + - Python/文化 sidebar_position: 4 author: 7Wate date: 2022-10-18 @@ -13,7 +13,7 @@ date: 2022-10-18 ## 版本列表 -以下为官方目前支持的版本(2022年10月) +以下为官方目前支持的版本(2022 年 10 月) | 版本 | 最新微版本 | 发布日期 | 完全支持结束 | 安全修复结束 | | -------- | ---------- | ---------- | ------------ | ------------ | diff --git a/wiki/programming-language/Python/文化/社区文化.md b/Tech/programming-language/Python/文化/社区文化.md similarity index 93% rename from wiki/programming-language/Python/文化/社区文化.md rename to Tech/programming-language/Python/文化/社区文化.md index 6e888bda..3d48541a 100644 --- a/wiki/programming-language/Python/文化/社区文化.md +++ b/Tech/programming-language/Python/文化/社区文化.md @@ -2,10 +2,10 @@ title: 社区文化 description: Python 的社区文化 keywords: -- Python -- 社区文化 + - Python + - 社区文化 tags: -- Python + - Python/文化 sidebar_position: 5 author: 7Wate date: 2022-10-25 @@ -13,7 +13,7 @@ date: 2022-10-25 ## Python 增强提案(PEP 文档) -### PEP 是什么? +### PEP 是什么? PEP(Python Enhancement Proposal,Python 增强提案),它是 Python 记录 Python 变化的书面文档。PEP 文档对 Python 的作用非常重要,根据讨论的主题,PEP 主要有以下 3 种用途: @@ -26,7 +26,7 @@ PEP(Python Enhancement Proposal,Python 增强提案),它是 Python 记 - A 功能为什么要以这样的方式运行? - Python 为什么没有 B 功能? -大多数情况下,关于该功能的某个 PEP 文档已经该出了上述问题的详细答案。很多提交关于 Python 语言功能的PEP文档并没有通过。这些文档可以作为历史资料来参考。 +大多数情况下,关于该功能的某个 PEP 文档已经该出了上述问题的详细答案。很多提交关于 Python 语言功能的 PEP 文档并没有通过。这些文档可以作为历史资料来参考。 #### PEP 0 diff --git a/wiki/programming-language/Python/文化/设计哲学.md b/Tech/programming-language/Python/文化/设计哲学.md similarity index 97% rename from wiki/programming-language/Python/文化/设计哲学.md rename to Tech/programming-language/Python/文化/设计哲学.md index 50d27dc3..a0a242d4 100644 --- a/wiki/programming-language/Python/文化/设计哲学.md +++ b/Tech/programming-language/Python/文化/设计哲学.md @@ -2,10 +2,10 @@ title: 设计哲学 description: Python 的设计哲学 keywords: -- Python -- 设计哲学 + - Python + - 设计哲学 tags: -- Python + - Python/文化 sidebar_position: 2 author: 7Wate date: 2022-10-18 diff --git a/wiki/programming-language/Python/文化/语言特性.md b/Tech/programming-language/Python/文化/语言特性.md similarity index 95% rename from wiki/programming-language/Python/文化/语言特性.md rename to Tech/programming-language/Python/文化/语言特性.md index 9cb4c5d1..586bfbca 100644 --- a/wiki/programming-language/Python/文化/语言特性.md +++ b/Tech/programming-language/Python/文化/语言特性.md @@ -2,10 +2,10 @@ title: 语言特性 description: Python 的语言特性 keywords: -- Python -- 特征 + - Python + - 特征 tags: -- Python + - Python/文化 sidebar_position: 3 author: 7Wate date: 2022-10-18 @@ -21,7 +21,7 @@ Python 使用**动态类型**,在内存管理上采用引用计数和环检测 Python 对**遵循 LISP 传统的函数式编程提供了有限的支持**,它提供了 map、filter 和 reduce 函数;列表推导式、字典、集合和生成器表达式。标准库中的模块 functools 和 itertools,实现了从 Haskell 和 Standard ML 借鉴来的函数式工具。 -Python 的**设计理念是“优雅”、“明确”、“简单”**,它的一些重要准被合称为“Python之禅”。 +Python 的**设计理念是“优雅”、“明确”、“简单”**,它的一些重要准被合称为“Python 之禅”。 Python 开发者的方法论是“**用一种方法,最好是只有一种方法来做一件事**”,显著不同于以 Perl 语言为代表的“不止一种方法去做一件事”风格。Python 开发者在设计语言时,如果面临多种选择,一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。 diff --git a/wiki/programming-language/Python/资源/_category_.json b/Tech/programming-language/Python/资源/_category_.json similarity index 100% rename from wiki/programming-language/Python/资源/_category_.json rename to Tech/programming-language/Python/资源/_category_.json diff --git a/wiki/programming-language/Python/进阶/_category_.json b/Tech/programming-language/Python/进阶/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/_category_.json rename to Tech/programming-language/Python/进阶/_category_.json diff --git a/wiki/programming-language/Python/进阶/常用技巧/_category_.json b/Tech/programming-language/Python/进阶/常用技巧/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/常用技巧/_category_.json rename to Tech/programming-language/Python/进阶/常用技巧/_category_.json diff --git a/wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md b/Tech/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md similarity index 94% rename from wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md rename to Tech/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md index b31ed625..0be51d3b 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md +++ b/Tech/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md @@ -5,8 +5,8 @@ keywords: - Jinja - 教程 tags: - - Python - - WEB + - Python/进阶 + - Python/PyPI author: 7Wate date: 2023-10-18 --- @@ -291,7 +291,7 @@ if __name__ == "__main__": {% endmacro %} ``` -- 使用 include 和 extends :`include`和`extends`可以帮助你复用和组织模板。 +- 使用 include 和 extends :`include` 和 `extends` 可以帮助你复用和组织模板。 ```jinja {% extends base.html %} @@ -304,12 +304,12 @@ if __name__ == "__main__": ### 错误处理 -在 Jinja 中,错误处理是通过抛出异常实现的。Jinja 定义了一些自己的异常,如`TemplateNotFound`、`TemplateSyntaxError`等。主要异常类型有: +在 Jinja 中,错误处理是通过抛出异常实现的。Jinja 定义了一些自己的异常,如 `TemplateNotFound`、`TemplateSyntaxError` 等。主要异常类型有: - TemplateNotFound:模板文件不存在 - TemplateSyntaxError:模板语法错误 - UndefinedError:变量未定义 -- SecurityError:安全错误(如禁用标签) +- SecurityError:安全错误 (如禁用标签) 你可以通过捕捉这些异常来处理错误。 @@ -324,13 +324,13 @@ except TemplateNotFound: ### 测试和调试 -Jinja 提供了一个强大的模板调试器,可以帮助你查找和修复模板中的错误。你可以通过设置`Environment`的`debug`选项来启用调试器。 +Jinja 提供了一个强大的模板调试器,可以帮助你查找和修复模板中的错误。你可以通过设置 `Environment` 的 `debug` 选项来启用调试器。 ```python env = Environment(loader=... , debug=True) ``` -当`debug`选项设置为`True`时,Jinja 会在渲染模板时检查错误,并在发现错误时抛出异常。 +当 `debug` 选项设置为 `True` 时,Jinja 会在渲染模板时检查错误,并在发现错误时抛出异常。 ### 集成其他库 diff --git a/wiki/programming-language/Python/进阶/拓展模块/_category_.json b/Tech/programming-language/Python/进阶/拓展模块/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/拓展模块/_category_.json rename to Tech/programming-language/Python/进阶/拓展模块/_category_.json diff --git a/wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md b/Tech/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md similarity index 98% rename from wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md rename to Tech/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md index 4d5b0a0a..8508e022 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md +++ b/Tech/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md @@ -5,8 +5,8 @@ keywords: - python - configparser tags: - - python - - configparser + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-10-20 --- @@ -70,7 +70,7 @@ with open('example.ini', 'w') as configfile: config.write(configfile) ``` -## 深入理解 configparser +## 深入理解 Configparser `configparser` 还有一些更高级的用法。例如,每个 `ConfigParser` 对象都有一个默认的 section,名为 `DEFAULT`。`DEFAULT` section 中的值会作为其他 section 的默认值。这意味着,如果其他 section 中没有定义某个 option,那么 `configparser` 就会在 `DEFAULT` section 中寻找这个 option。 diff --git a/wiki/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md b/Tech/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md similarity index 99% rename from wiki/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md rename to Tech/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md index 24ea0e0d..025b38b7 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md +++ b/Tech/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md @@ -5,8 +5,8 @@ keywords: - Python - csv tags: - - Python - - csv + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-10-20 --- @@ -31,7 +31,7 @@ John,25,Engineer Alice,30,Doctor ``` -## Python csv 模块 +## Python Csv 模块 Python 的 `csv` 模块提供了一种方便的方式来操作 CSV 文件。它包括了用于读取和写入 CSV 数据的函数,以及用于处理 CSV 数据的类。 diff --git a/wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md b/Tech/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md similarity index 98% rename from wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md rename to Tech/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md index d32a6b66..a65198ae 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md +++ b/Tech/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md @@ -5,8 +5,8 @@ keywords: - Python - json tags: - - Python - - json + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-10-20 --- @@ -50,7 +50,7 @@ JSON 和 XML 都是数据存储和传输的格式。与 XML 相比,JSON 更小 Python 标准库中的 `json` 模块提供了 JSON 数据的编码和解码功能。它可以将 Python 对象转换为 JSON 字符串,也可以将 JSON 字符串解码为 Python 对象。 -### json 模块的主要函数和对象 +### Json 模块的主要函数和对象 `json` 模块的主要函数包括: @@ -143,7 +143,7 @@ with open('person.json', 'r') as f: print(person) ``` -## 自定义 JSON 编码和解码 +## 自定义 JSON 编码和解码 ### json.JSONEncoder 类进行自定义编码 diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md b/Tech/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md similarity index 97% rename from wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md rename to Tech/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md index 6619ad1f..76a30367 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md +++ b/Tech/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md @@ -6,9 +6,8 @@ keywords: - logging - 日志 tags: - - Python - - logging - - 日志处理 + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-10-20 --- @@ -38,7 +37,7 @@ logger2 = logging.getLogger('test') **Handler 用于指定 Logger 生成的日志消息应发送到哪个目标输出**,常用的 Handler 有两种: - **StreamHandler**:输出到流,如 sys.stdout、sys.stderr -- **FileHandler**:输出到文件 +- **FileHandler**:输出到文件 我们可以通过 Logger 对象的 addHandler 方法将 Handler 与 Logger 关联起来: @@ -52,7 +51,7 @@ fh = logging.FileHandler('test.log') logger.addHandler(fh) ``` -### Filter +### Filter **Filter 用于提供复杂的日志过滤功能,可以用来过滤 INFO、DEBUG 等不同级别的日志。**根据需求,我们可以通过 logger.addFilter 将过滤器加到 logger 或者 handler 里。 @@ -143,13 +142,13 @@ loggers 配置参数: | level | 日志器接收的日志级别 | | handlers | 绑定的日志处理器 | | filters | 绑定的日志过滤器 | -| propagate | 是否传递给父日志器,默认True | +| propagate | 是否传递给父日志器,默认 True | handlers 常用参数: | 参数 | 说明 | | :-------- | :------------------------------------------- | -| class | 指定处理器类,如FileHandler、StreamHandler等 | +| class | 指定处理器类,如 FileHandler、StreamHandler 等 | | level | 处理器的日志级别 | | formatter | 用于格式化日志的 Formatter | | args | 处理器初始化参数,如文件名等 | @@ -160,7 +159,7 @@ formatters 参数: | :------ | :--------------------- | | format | 指定日志输出格式的模板 | | datefmt | 格式化时间的格式字符串 | -| style | 输出样式,如'{'和'$'等 | +| style | 输出样式,如 '{' 和 '$' 等 | ## 模块用法 @@ -314,7 +313,7 @@ Formatter 使用的格式字符串类似于 C 语言的 printf 格式,可以 handler = RotatingFileHandler('test.log', maxBytes=1024, backupCount=5) ``` -#### 日志分割 +#### 日志分割 它可以设置最大字节数和备份文件的数量,超过这些限制之后就会生成新的日志文件。通过 TimedRotatingFileHandler 可以实现日志文件按时间分割。 @@ -326,7 +325,7 @@ handler = TimedRotatingFileHandler('test.log', when='D', interval=1) ## 最佳实践 -### 根据应用场景配置 logging 模块 +### 根据应用场景配置 Logging 模块 不同的 Python 应用场景需要不同的日志方案: @@ -346,7 +345,7 @@ logging 模块要与项目的架构设计相结合,比如: ### 可选的日志收集工具 -可以结合日志收集系统,实现可视化分析,如 ELK(ElasticSearch + Logstash + Kibana)组合。 +可以结合日志收集系统,实现可视化分析,如 ELK(ElasticSearch + Logstash + Kibana) 组合。 ### 日志的性能优化 @@ -467,7 +466,7 @@ logger.info('Starting myweb server...') ## 扩展学习 -### 其他日志框架的比较(Loguru、log4j 等) +### 其他日志框架的比较 (Loguru、log4j 等) logging 模块作为标准库,用法简单,但需要自行处理诸如异步、日志分割等额外功能。一些第三方日志库如 loguru、log4j 等提供了更多实用功能的封装,可以根据需求选择。 diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md b/Tech/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md similarity index 92% rename from wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md rename to Tech/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md index 37dbb76b..c3a40b64 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md +++ b/Tech/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md @@ -6,9 +6,8 @@ keywords: - loguru - 日志 tags: - - Python - - loguru - - 日志 + - Python/进阶 + - Python/PyPI sidebar_position: 5 date: 2023-10-20 --- @@ -25,7 +24,7 @@ pip install loguru ## 基本用法 -### 创建 logger 对象 +### 创建 Logger 对象 ```python from loguru import logger @@ -76,7 +75,7 @@ Loguru 支持非常丰富的参数格式设置,可以完全自定义日志内 | 进程 | `{process}` | `{process}` | | 线程 | `{thread}` | `{thread}` | | 文件名 | `{file}` | `{file}` | -| Logger名 | `{name}` | `{name}` | +| Logger 名 | `{name}` | `{name}` | | 异常 | `{exception}` | `{exception}` | | 嵌套 | `{time:{hour}}` | `{time:{hour}}` | | 条件表达式 | `{level:样式 if 条件}` | `{level:红色 if level=="ERROR"}` | @@ -100,7 +99,7 @@ Loguru 可以方便地对日志文件进行管理。 ### 设置日志文件大小 -通过`rotation`参数可以设置每个日志文件的最大大小: +通过 `rotation` 参数可以设置每个日志文件的最大大小: ```python logger.add("file.log", rotation="500 MB") # 设置日志文件最大500MB @@ -108,7 +107,7 @@ logger.add("file.log", rotation="500 MB") # 设置日志文件最大500MB ### 设置回滚日志文件个数 -通过`retention`参数可以设置保留的历史日志文件个数: +通过 `retention` 参数可以设置保留的历史日志文件个数: ```python logger.add("file.log", rotation="500 MB", retention="10") # 保留最近10个日志文件 @@ -116,7 +115,7 @@ logger.add("file.log", rotation="500 MB", retention="10") # 保留最近10个日 ### 滚动日志文件 -日志文件到达最大大小后会自动滚动,新的日志写入到新的文件。可以通过`rotate()`主动触发滚动。 +日志文件到达最大大小后会自动滚动,新的日志写入到新的文件。可以通过 `rotate()` 主动触发滚动。 ```python logger.rotate("file.log") # 手动滚动日志文件 @@ -128,7 +127,7 @@ Loguru 可以非常方便地记录异常信息。 ### 记录异常信息 -在`try except`中使用 logger.exception() 可以记录异常堆栈: +在 `try except` 中使用 logger.exception() 可以记录异常堆栈: ```python try: @@ -141,7 +140,7 @@ except: ### 格式化异常显示 -可以使用`format_exc`参数来格式化显示异常: +可以使用 `format_exc` 参数来格式化显示异常: ```python try: @@ -170,7 +169,7 @@ logger.remove() # 移除所有过滤器 ## 异步日志 -Loguru原生支持异步日志,可以通过`queue_size`参数开启。 +Loguru 原生支持异步日志,可以通过 `queue_size` 参数开启。 ```python logger.add("file.log", enqueue=True) # 异步队列大小为1万 diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md b/Tech/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md similarity index 99% rename from wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md rename to Tech/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md index a75780e0..c12e5e3b 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md +++ b/Tech/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md @@ -6,8 +6,8 @@ keywords: - os - 多种操作系统接口 tags: - - python - - 标准库 + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-08-04 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md b/Tech/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md similarity index 97% rename from wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md rename to Tech/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md index 2bec8aaf..99dd287f 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md +++ b/Tech/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md @@ -5,8 +5,8 @@ keywords: - Python - subprocess tags: - - Python - - 拓展模块 + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-09-07 --- @@ -52,7 +52,7 @@ subprocess.run("echo Hello, World!", shell=True) ## 深入探索 -### run 函数 +### Run 函数 `run` 函数是 `subprocess` 模块中的核心函数,它提供了丰富的参数来控制子进程的行为。以下是一些示例和参数的详细描述: @@ -98,7 +98,7 @@ print(result.stderr) | `stdin` | 用于指定子进程的标准输入流。可以是文件对象、`subprocess.PIPE`、`subprocess.DEVNULL`、或一个打开的文件描述符。 | | `stdout` | 用于指定子进程的标准输出流。可以是文件对象、`subprocess.PIPE`、`subprocess.DEVNULL`、或一个打开的文件描述符。 | | `stderr` | 用于指定子进程的标准错误流。可以是文件对象、`subprocess.PIPE`、`subprocess.DEVNULL`、或一个打开的文件描述符。 | -| `shell` | 如果为 `True`,则将命令传递给系统的shell执行,可以使用 shell 语法。默认为 `False`。 | +| `shell` | 如果为 `True`,则将命令传递给系统的 shell 执行,可以使用 shell 语法。默认为 `False`。 | | `cwd` | 子进程的工作目录,用于指定命令在哪个目录下执行。 | | `env` | 一个字典,包含自定义的环境变量。子进程将在这个环境中执行。 | | `universal_newlines` | 如果为 `True`,则标准输入和输出以文本模式打开,可以使用字符串而不是字节进行通信。默认为 `False`。 | diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md b/Tech/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md similarity index 93% rename from wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md rename to Tech/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md index 0e0bee77..f4292ff5 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md +++ b/Tech/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md @@ -6,9 +6,8 @@ keywords: - 拓展模块 - sys tags: - - Python - - 系统交互 - - sys + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-09-07 --- @@ -36,11 +35,11 @@ date: 2023-09-07 **缺点**: - 有些功能可能是平台相关的,不一定在所有系统上表现一致。 -- 高级功能需要一定的Python知识。 +- 高级功能需要一定的 Python 知识。 ## 基础操作 -`sys`是Python的标准库之一,无需额外安装。 +`sys` 是 Python 的标准库之一,无需额外安装。 ### 基本功能 @@ -59,7 +58,7 @@ print("系统平台:", sys.platform) ### 常用示例代码 -以下是一些`sys`模块的常用示例代码: +以下是一些 `sys` 模块的常用示例代码: ```python import sys diff --git a/wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md b/Tech/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md similarity index 95% rename from wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md rename to Tech/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md index 31e466dd..89ed872b 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md +++ b/Tech/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md @@ -6,19 +6,19 @@ keywords: - Python - 拓展模块 tags: - - requests - - Python + - Python/进阶 + - Python/PyPI author: 7Wate date: 2023-10-19 --- -Requests 是 Python 的一个非常流行和强大的 HTTP 库,使用 Requests 可以极其方便地发送 HTTP/HTTPS 请求,然后获取并解析响应。它的语法简洁而又优雅,出色地符合 Python 风格,相比起 Python自带的 urllib 来说,Requests 无疑更加人性化和易用。 +Requests 是 Python 的一个非常流行和强大的 HTTP 库,使用 Requests 可以极其方便地发送 HTTP/HTTPS 请求,然后获取并解析响应。它的语法简洁而又优雅,出色地符合 Python 风格,相比起 Python 自带的 urllib 来说,Requests 无疑更加人性化和易用。 ## 概述 **Requests 库的目标就是让 HTTP 请求变得简单而又 Pythonic。**它可以显著减少程序员发送 HTTP 请求的工作量。使用 Requests,你不必手动添加查询字符串到 URL 中,或 encode post 数据了。一切都自动完成。 -### Requests vs urllib +### Requests Vs Urllib Python 内置的 urllib 模块也可以发送网络请求,但其 API 不够优雅简洁。与 urllib 相比,Requests 更加 Pythonic,而且更简单易用。 @@ -136,14 +136,14 @@ payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get('https://httpbin.org/get', params=payload) ``` -2. 通过字典直接作为 params 参数传入 +1. 通过字典直接作为 params 参数传入 ```python params = {'key1': 'value1', 'key2': 'value2'} r = requests.get('https://httpbin.org/get', params) ``` -3. 通过 url 中的查询字符串传递参数 +1. 通过 url 中的查询字符串传递参数 ```python url = 'https://httpbin.org/get?key1=val1&key2=val2' @@ -251,7 +251,7 @@ requests.get("http://example.org", proxies=proxies) requests.get('https://github.com', timeout=0.001) ``` -分别为连接超时 connect timeou t和读取超时 read timeout: +分别为连接超时 connect timeou t 和读取超时 read timeout: ```python requests.get('https://github.com', timeout=(3.05, 10)) @@ -265,7 +265,7 @@ Requests 的异常类型主要分为以下几类: - **连接异常**:包括 RequestsConnectionError 和 ConnectTimeout,表示与远程服务器的连接发生错误。 - **超时异常**:RequestsTimeout 表示请求超时。可以分为连接超时和读取超时。 -- **TooManyRedirects**:表示重定向次数超过了最大限制(默认为30次)。 +- **TooManyRedirects**:表示重定向次数超过了最大限制(默认为 30 次)。 - **HTTP 错误**:HTTPError 表示 HTTP 错误响应,例如 404 或者 500 等。Requests 会自动为其封装异常。 - **请求异常**:RequestException 是 Requests 库自身的异常基类。 - **SSL 错误**:SSLError 表示 SSL 证书验证错误。 @@ -294,11 +294,11 @@ except requests.ConnectionError: | ConnectTimeout | 连接超时错误 | | RequestsTimeout | 请求超时错误 | | TooManyRedirects | 重定向次数超限 | -| HTTPError | HTTP错误响应 | +| HTTPError | HTTP 错误响应 | | RequestException | 请求异常基类 | -| SSLError | SSL证书验证错误 | +| SSLError | SSL 证书验证错误 | | ProxyError | 代理连接错误 | -| JSONDecodeError | JSON解析错误 | +| JSONDecodeError | JSON 解析错误 | | ConnectionError | 连接错误 | ### 流式下载 @@ -394,7 +394,7 @@ gevent.joinall(jobs) print([job.value.text for job in jobs]) ``` -### 基于 asyncio 的异步 +### 基于 Asyncio 的异步 ```python import asyncio diff --git a/wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md b/Tech/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md similarity index 94% rename from wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md rename to Tech/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md index 9168be9b..885c2d83 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md +++ b/Tech/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md @@ -5,8 +5,8 @@ keywords: - Python - socket tags: - - Python - - 标准库 + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-09-09 --- @@ -17,11 +17,11 @@ Socket 是计算机网络中用于实现进程间通信的一种技术。简而 `socket` 是 Python 中的一个标准库,它提供了低级的网络通信功能。基于该库,开发者可以实现 TCP、UDP 以及其他类型的网络协议的客户端和服务端程序。 -`socket` 库的历史可以追溯到 Unix 操作系统的早期。在 Unix 中,socket 被用作进程间通信(IPC)的一种方式。随着互联网的发展,socket 逐渐被应用于网络通信。Python 的 `socket` 库提供了对这一功能的高级封装,使得开发网络应用变得更为简单。 +`socket` 库的历史可以追溯到 Unix 操作系统的早期。在 Unix 中,socket 被用作进程间通信 (IPC) 的一种方式。随着互联网的发展,socket 逐渐被应用于网络通信。Python 的 `socket` 库提供了对这一功能的高级封装,使得开发网络应用变得更为简单。 ## 工作原理 -`socket`网络通信最常见的模型是客户端-服务器模型。客户端是请求服务的实体,而服务器是提供服务的实体。Socket 允许这两个实体进行通信。 +`socket` 网络通信最常见的模型是客户端 - 服务器模型。客户端是请求服务的实体,而服务器是提供服务的实体。Socket 允许这两个实体进行通信。 - **客户端**: 创建 Socket -> 连接到服务器 -> 交换数据 -> 关闭 Socket - **服务器**: 创建 Socket -> 绑定到特定地址和端口 -> 监听连接 -> 接受客户端连接 -> 交换数据 -> 关闭 Socket @@ -304,7 +304,7 @@ client_socket.close() ### 高级功能 -#### 非阻塞 sockets +#### 非阻塞 Sockets ```python import socket diff --git a/wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md b/Tech/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md similarity index 92% rename from wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md rename to Tech/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md index 1c7038b9..e06cdb3a 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md +++ b/Tech/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md @@ -5,22 +5,22 @@ keywords: - python - urllib tags: - - python - - 标准库 + - Python/进阶 + - Python/标准库 author: 7Wate date: 2023-08-29 --- ## 概述 -`urllib`是 Python 标准库中用于处理 URL(统一资源定位符)相关操作的模块,它提供了多个子模块,用于执行网络请求、解析 URL、处理错误以及解析 robots.txt 文件等。以下是`urllib`的子模块: +`urllib` 是 Python 标准库中用于处理 URL(统一资源定位符)相关操作的模块,它提供了多个子模块,用于执行网络请求、解析 URL、处理错误以及解析 robots.txt 文件等。以下是 `urllib` 的子模块: ### 子模块 -- **`urllib.request`**:提供打开和读取URL的功能。支持多种网络协议,如 HTTP、FTP 等。 +- **`urllib.request`**:提供打开和读取 URL 的功能。支持多种网络协议,如 HTTP、FTP 等。 - **`urllib.error`**:包含与网络请求相关的异常类,用于处理错误和异常情况。 - **`urllib.parse`**:用于解析和构建 URL,提供各种操作,如分割、组合、编码和解码。 -- **`urllib.robotparser`**:用于解析网站的`robots.txt`文件,确定哪些页面可以被爬取。 +- **`urllib.robotparser`**:用于解析网站的 `robots.txt` 文件,确定哪些页面可以被爬取。 ### 优点 @@ -30,8 +30,8 @@ date: 2023-08-29 ### 缺点 -- **较低层次的API**:与一些第三方库相比(如`requests`),`urllib`的API较为底层,可能需要编写更多的代码。 -- **繁琐的错误处理**:错误处理需要额外的代码,相比使用像`requests`这样的库可能更复杂。 +- **较低层次的 API**:与一些第三方库相比(如 `requests`),`urllib` 的 API 较为底层,可能需要编写更多的代码。 +- **繁琐的错误处理**:错误处理需要额外的代码,相比使用像 `requests` 这样的库可能更复杂。 ### 同类产品对比 @@ -118,7 +118,7 @@ opener = urllib.request.build_opener(auth_handler) urllib.request.install_opener(opener) ``` -### `HTTPCookieProcessor` 处理 cookies +### `HTTPCookieProcessor` 处理 Cookies ```python import urllib.request @@ -222,7 +222,7 @@ except urllib.error.ContentTooShortError as e: | `quote()` | 将字符串进行 URL 编码 | `urllib.parse.quote(string)` | | `unquote()` | 对 URL 编码的字符串进行解码 | `urllib.parse.unquote(encoded_string)` | -### 解析和构建URL +### 解析和构建 URL ```python from urllib.parse import urlparse, urlunparse, urlsplit, urlunsplit, urljoin @@ -255,7 +255,7 @@ query_string = urlencode(query_dict) ``` -### URL编码和解码 +### URL 编码和解码 ```python from urllib.parse import quote, unquote @@ -278,7 +278,7 @@ decoded = unquote(encoded) | `read()` | 从设置的 URL 读取 `robots.txt` 文件 | `rp.read()` | | `parse()` | 用于手动解析 `robots.txt` 文件的行 | `rp.parse(robots_txt_body.split("\n"))` | | `can_fetch()` | 检查指定的 User-Agent 是否可以访问某个路径 | `rp.can_fetch('*', 'http://www.example.com/page')` | -| `mtime()` | 获取最后一次获取 `robots.txt` 文件的时间(Unix时间戳) | `rp.mtime()` | +| `mtime()` | 获取最后一次获取 `robots.txt` 文件的时间(Unix 时间戳) | `rp.mtime()` | | `modified()` | 设置最后一次获取 `robots.txt` 文件的时间 | `rp.modified()` | ### 创建和设置 RobotFileParser diff --git a/wiki/programming-language/Python/进阶/语言参考/_category_.json b/Tech/programming-language/Python/进阶/语言参考/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/语言参考/_category_.json rename to Tech/programming-language/Python/进阶/语言参考/_category_.json diff --git a/wiki/programming-language/Python/进阶/语言参考/函数式编程.md b/Tech/programming-language/Python/进阶/语言参考/函数式编程.md similarity index 99% rename from wiki/programming-language/Python/进阶/语言参考/函数式编程.md rename to Tech/programming-language/Python/进阶/语言参考/函数式编程.md index 538ed7ac..642fb394 100644 --- a/wiki/programming-language/Python/进阶/语言参考/函数式编程.md +++ b/Tech/programming-language/Python/进阶/语言参考/函数式编程.md @@ -2,10 +2,11 @@ title: 函数式编程 description: Python 函数式编程 keywords: -- Python -- 函数式编程 + - Python + - 函数式编程 tags: -- Python + - Python/进阶 + - Python/语言参考 sidebar_position: 3 author: 7Wate date: 2023-08-11 diff --git a/wiki/programming-language/Python/进阶/语言参考/垃圾回收.md b/Tech/programming-language/Python/进阶/语言参考/垃圾回收.md similarity index 85% rename from wiki/programming-language/Python/进阶/语言参考/垃圾回收.md rename to Tech/programming-language/Python/进阶/语言参考/垃圾回收.md index e5463f66..13670941 100644 --- a/wiki/programming-language/Python/进阶/语言参考/垃圾回收.md +++ b/Tech/programming-language/Python/进阶/语言参考/垃圾回收.md @@ -5,8 +5,8 @@ keywords: - Python - 垃圾回收 tags: - - Python - - 垃圾回收 + - Python/进阶 + - Python/语言参考 sidebar_position: 4 author: 7Wate date: 2023-10-27 @@ -96,16 +96,16 @@ del b ### 垃圾回收算法的概述 -为了解决引用计数法不能处理循环引用的问题,Python 引入了两种垃圾回收算法:**标记-清除算法和分代回收算法。这两种算法都是为了检测和回收循环引用的对象。** +为了解决引用计数法不能处理循环引用的问题,Python 引入了两种垃圾回收算法:**标记 - 清除算法和分代回收算法。这两种算法都是为了检测和回收循环引用的对象。** -### 标记-清除算法的原理和流程 +### 标记 - 清除算法的原理和流程 -标记-清除算法是一种基础的垃圾回收算法。它的**基本原理是通过标记和清除两个步骤来回收垃圾对象。**在标记步骤中,从某些根对象(例如全局变量)出发,遍历所有可达的对象,将这些对象标记为活动。剩下的未被标记的对象(即不可达的对象)就被认为是垃圾。然后在“清除”步骤中,清除所有标记为“垃圾”的对象。 +标记 - 清除算法是一种基础的垃圾回收算法。它的**基本原理是通过标记和清除两个步骤来回收垃圾对象。**在标记步骤中,从某些根对象(例如全局变量)出发,遍历所有可达的对象,将这些对象标记为活动。剩下的未被标记的对象(即不可达的对象)就被认为是垃圾。然后在“清除”步骤中,清除所有标记为“垃圾”的对象。 -在 Python 中,标记-清除算法主要用于检测和清除循环引用对象。它的工作流程是这样的: +在 Python 中,标记 - 清除算法主要用于检测和清除循环引用对象。它的工作流程是这样的: 1. 从所有的容器对象(例如列表、字典和类实例等)出发,找出所有可能形成循环引用的对象。 -2. 对这些对象应用标记-清除算法,找出并清除真正的循环引用对象。 +2. 对这些对象应用标记 - 清除算法,找出并清除真正的循环引用对象。 ### 分代回收算法的原理和优化 @@ -143,11 +143,11 @@ sequenceDiagram GM-->>GC: 继续监视 ``` -Python 的垃圾回收机制是基于引用计数的,当对象的引用计数降到 0 时,该对象就会被立即回收。但是,对于循环引用的问题,Python 使用标记-清除和分代回收两种算法来解决。 +Python 的垃圾回收机制是基于引用计数的,当对象的引用计数降到 0 时,该对象就会被立即回收。但是,对于循环引用的问题,Python 使用标记 - 清除和分代回收两种算法来解决。 -首先,Python 使用标记-清除算法来检测和清除循环引用的对象。然后,为了优化垃圾回收的性能,Python 会根据对象的存活时间将它们分成三代,并分别进行回收。这样,Python 就能有效地管理内存,同时尽可能地降低垃圾回收的开销。 +首先,Python 使用标记 - 清除算法来检测和清除循环引用的对象。然后,为了优化垃圾回收的性能,Python 会根据对象的存活时间将它们分成三代,并分别进行回收。这样,Python 就能有效地管理内存,同时尽可能地降低垃圾回收的开销。 -## gc 模块 +## Gc 模块 Python 通过 `gc` 模块提供了对垃圾回收机制的直接控制。`gc` 模块提供了一些函数,让我们可以手动触发垃圾回收,查询垃圾回收的状态,或者调整垃圾回收的参数。 @@ -160,7 +160,7 @@ Python 通过 `gc` 模块提供了对垃圾回收机制的直接控制。`gc` | `gc.enable()` | 启用自动垃圾回收。 | | `gc.disable()` | 禁用自动垃圾回收。 | | `gc.isenabled()` | 查看自动垃圾回收是否被启用。 | -| `gc.collect(generation=2)` | 立即进行一次垃圾回收。可以通过 `generation` 参数指定要收集的代的编号(0代表最年轻的一代,2代表所有代)。 | +| `gc.collect(generation=2)` | 立即进行一次垃圾回收。可以通过 `generation` 参数指定要收集的代的编号(0 代表最年轻的一代,2 代表所有代)。 | | `gc.set_threshold(threshold0, threshold1=None, threshold2=None)` | 设置垃圾回收的阈值。当某一代的垃圾数量超过对应的阈值时,就会触发垃圾回收。 | | `gc.get_threshold()` | 获取当前的垃圾回收阈值。 | | `gc.get_count()` | 获取当前每一代的垃圾数量。 | @@ -218,6 +218,6 @@ gc.collect() ## 总结 -Python 的垃圾回收机制是基于引用计数的,它简单高效,但无法处理循环引用的问题。为了解决这个问题,Python 引入了标记-清除和分代回收两种垃圾回收算法。这两种算法可以有效地检测和清除循环引用的对象,同时优化垃圾回收的性能。 +Python 的垃圾回收机制是基于引用计数的,它简单高效,但无法处理循环引用的问题。为了解决这个问题,Python 引入了标记 - 清除和分代回收两种垃圾回收算法。这两种算法可以有效地检测和清除循环引用的对象,同时优化垃圾回收的性能。 Python 通过 `gc` 模块提供了对垃圾回收机制的直接控制。通过 `gc` 模块,我们可以手动触发垃圾回收,查询垃圾回收的状态,或者调整垃圾回收的参数。我们甚至可以注册自己的回调函数,以便在垃圾回收发生时获取通知。 diff --git a/wiki/programming-language/Python/进阶/语言参考/并行和并发.md b/Tech/programming-language/Python/进阶/语言参考/并行和并发.md similarity index 93% rename from wiki/programming-language/Python/进阶/语言参考/并行和并发.md rename to Tech/programming-language/Python/进阶/语言参考/并行和并发.md index 3eb91f9d..16ec17da 100644 --- a/wiki/programming-language/Python/进阶/语言参考/并行和并发.md +++ b/Tech/programming-language/Python/进阶/语言参考/并行和并发.md @@ -2,11 +2,12 @@ title: 并行和并发 description: Python 并行和并发 keywords: -- Python -- 并行 -- 并发 + - Python + - 并行 + - 并发 tags: -- Python + - Python/进阶 + - Python/语言参考 sidebar_position: 2 author: 7Wate date: 2023-08-11 @@ -31,7 +32,7 @@ graph TD **并发(Concurrency)指的是多个任务在近似同一时间内启动和运行的能力。**不同于并行,这些任务不一定在同一时间点真正地执行,但它们可能看起来似乎是同时进行的。这经常是**通过任务切换或调度来实现的**,使得每个任务都可以得到处理器的时间片,并轮流执行。 > 例子:一个银行柜台,只有一位出纳员,但有多位客户在排队等待服务。出纳员可能会处理第一个客户的部分业务,然后转向第二个客户处理其业务,之后再返回第一个客户,以此类推。 -> +> > 尽管在任何特定时刻只有一个客户正在得到服务,但因为切换得足够快,所有的客户可能都觉得自己几乎是在同一时间得到服务的。这就是并发。 ```mermaid @@ -50,7 +51,7 @@ graph TD **并行(Parallelism)指的是多个任务或多个处理单元在同一时刻真正地同时执行。**与并发不同,它不仅仅是任务准备同时运行或看似同时运行,而是真正地在同一时刻执行。这通常在具有多个处理器或多个核心的计算机系统中发生。 > 例子:一个快餐店,里面有三个员工。当三位顾客同时走进店内并分别点餐时,如果每位员工分别为每位顾客制作餐点,而且三位员工都在同一时刻开始并同时完成任务,那么这就是并行。 -> +> > 每位员工和他们分别服务的顾客可以看作是一个处理单元和一个任务。 ### 同步与异步 @@ -67,7 +68,7 @@ graph TD **同步(Synchronous)描述的是一个操作或任务需要等待另一个操作或任务完成之后才能开始或继续执行。**它通常涉及一种线性或顺序的流程,其中一个操作完全依赖于另一个操作的完成。 > 例子:在超市结账时,如果只有一个收银员,那么顾客需要按照顺序来结账。第一个顾客必须完成结账并离开,第二个顾客才能开始结账,以此类推。 -> +> > 这里的每个结账过程都是同步的,因为每个顾客的结账必须在前一个顾客完成后才能开始。 ```mermaid @@ -85,7 +86,7 @@ graph LR **异步(Asynchronous)描述的是一个操作开始后并不需要等待其完成,可以继续执行其他操作。**一旦异步操作完成,通常通过回调、事件、通知或其他机制来获取结果或进一步处理。 > 例子:你在一家咖啡店点了一杯咖啡。而不是站在柜台等待咖啡制作完成,你可以找个座位坐下,甚至看书或工作。当咖啡制作好,店员会叫你的名字或号码,此时你前去取杯。 -> +> > 在这个期间,你并没有闲置,而是进行了其他活动。 ### 阻塞与非阻塞 @@ -101,7 +102,7 @@ graph TD 阻塞(Blocking)描述的是当一个操作或任务等待某个条件(通常是某种资源)满足时,它会进入一个暂停或等待状态。在该条件被满足之前,操作或任务不会继续执行。 > 例子:你在电话上等待客服代表。在你等待的时候,你不能使用电话进行其他通话,也不能结束当前的通话,直到客服代表接听你的电话。 -> +> > 在这段时间里,你的电话线路被阻塞。 ```mermaid @@ -117,7 +118,7 @@ graph LR **非阻塞(Non-blocking)描述的是当一个操作或任务遇到必须等待的条件(如等待某种资源)时,它不会进入暂停或等待状态,而是立即返回,让程序可以继续执行其他操作。**当原始操作可以继续进行时,它会在适当的时间继续。 > 例子:一个自助餐厅。即使前面的人在选择食物并花费很长时间,你也可以选择跳过他们,去取你想要的食物,而不必等待。 -> +> > 这种情况下,你的选择流程是非阻塞的 ### 特性对比 @@ -159,7 +160,7 @@ graph LR #### `threading` 模块 -Python 的 `threading` 模块提供了低级线程API,使我们可以轻松创建和管理线程。以下是如何使用 `threading.Thread` 创建新线程的示例: +Python 的 `threading` 模块提供了低级线程 API,使我们可以轻松创建和管理线程。以下是如何使用 `threading.Thread` 创建新线程的示例: ```python import threading @@ -200,7 +201,7 @@ GIL 是 Python 解释器中的一个锁,它使得任何时候只有一个线 Python 由于 GIL(全局解释器锁)的存在,在多线程时并不能充分利用多核 CPU。为了避免 GIL 的限制,可以使用 `multiprocessing` 模块创建多个进程。 -- **优点**:可以充分利用多核CPU、进程间内存是隔离的,增加了安全性。 +- **优点**:可以充分利用多核 CPU、进程间内存是隔离的,增加了安全性。 - **缺点:**进程启动和通信相对较慢。 @@ -324,7 +325,7 @@ Tornado 是一个 Python Web 服务器软件的开放源码版本。由于其非 ### Twisted -Twisted 是一个事件驱动的网络引擎,用于构建各种网络应用。除了支持常见的网络协议如 HTTP、SMTP、POP3、FTP 等,Twisted 还提供了其它功能如身份验证、SSL和其他安全特性。Twisted 的设计理念是为开发者提供最大的灵活性,允许他们使用自己喜欢的工具和库。 +Twisted 是一个事件驱动的网络引擎,用于构建各种网络应用。除了支持常见的网络协议如 HTTP、SMTP、POP3、FTP 等,Twisted 还提供了其它功能如身份验证、SSL 和其他安全特性。Twisted 的设计理念是为开发者提供最大的灵活性,允许他们使用自己喜欢的工具和库。 ### Quart @@ -358,7 +359,7 @@ def update_data(): ### 读写锁 -读写锁是一种特殊的锁,针对读者-作者问题而设计。当资源经常被读取但很少被修改时,读写锁是很有用的。在这种情况下,多个读线程可以并发访问资源,但写线程会阻塞所有其他线程,确保在写操作期间资源的完整性。 +读写锁是一种特殊的锁,针对读者 - 作者问题而设计。当资源经常被读取但很少被修改时,读写锁是很有用的。在这种情况下,多个读线程可以并发访问资源,但写线程会阻塞所有其他线程,确保在写操作期间资源的完整性。 ```python from rwlock import RWLock @@ -426,9 +427,9 @@ def consume_item(): ## 设计模式与最佳实践 -### 生产者-消费者模式 +### 生产者 - 消费者模式 -生产者-消费者模式是一个并发模式,其中一个或多个生产者线程创建项目,而一个或多个消费者线程处理这些项目。这种模式可以有效地分离数据生产和数据处理,通常使用队列来传输数据。 +生产者 - 消费者模式是一个并发模式,其中一个或多个生产者线程创建项目,而一个或多个消费者线程处理这些项目。这种模式可以有效地分离数据生产和数据处理,通常使用队列来传输数据。 ```python import threading @@ -455,9 +456,9 @@ def process_item(item): pass ``` -### 发布者-订阅者模式 +### 发布者 - 订阅者模式 -发布者-订阅者模式是一种通知模式,其中发布者发送通知,而订阅者(可以有多个)接收通知。这种模式适用于需要广播信息的场景。 +发布者 - 订阅者模式是一种通知模式,其中发布者发送通知,而订阅者(可以有多个)接收通知。这种模式适用于需要广播信息的场景。 ```python class Publisher: @@ -511,7 +512,7 @@ cProfile.run('my_function()') #### `memory_profiler` -`memory_profiler` 是一个用于监控Python程序内存使用的工具,它可以为你提供关于对象的内存消耗等信息。 +`memory_profiler` 是一个用于监控 Python 程序内存使用的工具,它可以为你提供关于对象的内存消耗等信息。 ```python from memory_profiler import profile diff --git a/wiki/programming-language/Python/进阶/语言参考/面向对象进阶.md b/Tech/programming-language/Python/进阶/语言参考/面向对象进阶.md similarity index 65% rename from wiki/programming-language/Python/进阶/语言参考/面向对象进阶.md rename to Tech/programming-language/Python/进阶/语言参考/面向对象进阶.md index 391d13bd..3e6351b0 100644 --- a/wiki/programming-language/Python/进阶/语言参考/面向对象进阶.md +++ b/Tech/programming-language/Python/进阶/语言参考/面向对象进阶.md @@ -1,10 +1,11 @@ --- -title: 面向对象进阶 -description: 面向对象进阶 +title: 面向对象 +description: 面向对象 keywords: -- 面对对象 + - 面对对象 tags: -- Python + - Python/进阶 + - Python/语言参考 sidebar_position: 1 author: 7Wate date: 2023-08-10 @@ -37,15 +38,15 @@ G --> H[垃圾回收: Cleanup by Python GC] 1. **类定义阶段**:在这个阶段定义类的方法和属性。 2. **类对象创建**:当 Python 读取到类定义时,它会创建一个类对象。 3. **类属性访问**:在实例化之前,可以访问类的静态和类属性。 -4. **实例化阶段**:使用类名创建对象时,首先调用`__new__`方法来分配内存。 -5. **初始化阶段**:紧随其后,`__init__`方法会被调用,对新对象进行初始化。 -6. **属性的设置与获取**:在对象的生命周期中,你可以使用`__getattr__`, `__setattr__`, `__getattribute__`等特殊方法来控制属性的访问。 -7. **对象的表示**:当尝试显示对象时(例如,通过 print),`__str__`和`__repr__`方法可以被调用。 +4. **实例化阶段**:使用类名创建对象时,首先调用 `__new__` 方法来分配内存。 +5. **初始化阶段**:紧随其后,`__init__` 方法会被调用,对新对象进行初始化。 +6. **属性的设置与获取**:在对象的生命周期中,你可以使用 `__getattr__`, `__setattr__`, `__getattribute__` 等特殊方法来控制属性的访问。 +7. **对象的表示**:当尝试显示对象时(例如,通过 print),`__str__` 和 `__repr__` 方法可以被调用。 8. **方法调用**:可以调用对象的方法。 -9. **上下文管理**:使用`with`语句时,对象的`__enter__`和`__exit__`方法会被调用。 -10. **对象比较**:使用比较操作符时(如==或>),`__eq__`, `__lt__`, `__le__`等特殊方法会被调用。 -11. **对象的计算**:如加法或乘法等运算符,会调用`__add__`, `__mul__`等特殊方法。 -12. **对象销毁**:当对象的引用计数减少到零或者被明确销毁(使用`del`语句)时,`__del__`方法会被调用。 +9. **上下文管理**:使用 `with` 语句时,对象的 `__enter__` 和 `__exit__` 方法会被调用。 +10. **对象比较**:使用比较操作符时(如==或>),`__eq__`, `__lt__`, `__le__` 等特殊方法会被调用。 +11. **对象的计算**:如加法或乘法等运算符,会调用 `__add__`, `__mul__` 等特殊方法。 +12. **对象销毁**:当对象的引用计数减少到零或者被明确销毁(使用 `del` 语句)时,`__del__` 方法会被调用。 13. **垃圾回收**:Python 的垃圾回收器会识别循环引用,并在适当的时候销毁相关对象。 ## 特殊方法 @@ -58,7 +59,7 @@ Python 中的类包含了许多特殊方法,它们经常被称为**魔术方 #### `__init__` -`__init__`方法是类的构造函数,当我们创建类的实例时,`__init__`方法会被自动调用。我们可以在`__init__`方法中初始化实例的属性。 +`__init__` 方法是类的构造函数,当我们创建类的实例时,`__init__` 方法会被自动调用。我们可以在 `__init__` 方法中初始化实例的属性。 ```python class MyClass: @@ -72,7 +73,7 @@ print(mc.value) # 输出:10 #### `__del__` -`__del__`方法是类的析构函数,当一个实例被销毁时(例如被垃圾回收器回收时),`__del__`方法会被自动调用。注意,我们**通常不需要在`__del__`方法中做清理工作,Python的垃圾回收器会自动清理对象的资源。** +`__del__` 方法是类的析构函数,当一个实例被销毁时(例如被垃圾回收器回收时),`__del__` 方法会被自动调用。注意,我们**通常不需要在 `__del__` 方法中做清理工作,Python 的垃圾回收器会自动清理对象的资源。** ```python class MyClass: @@ -85,7 +86,7 @@ del mc # 销毁实例 #### `__str__` -`__str__`方法返回一个表示该对象的字符串,这个字符串通常用于给用户看。当我们调用`str()`或`print()`时,会使用`__str__`的返回值。 +`__str__` 方法返回一个表示该对象的字符串,这个字符串通常用于给用户看。当我们调用 `str()` 或 `print()` 时,会使用 `__str__` 的返回值。 ```python class MyClass: @@ -96,11 +97,11 @@ mc = MyClass() # 创建实例 print(mc) # 输出:This is a MyClass instance. ``` -*注意,`__repr__`和`__str__`的区别在于,**`__repr__`更侧重于开发,而`__str__`更侧重于用户。*** +*注意,`__repr__` 和 `__str__` 的区别在于,**`__repr__` 更侧重于开发,而 `__str__` 更侧重于用户。*** #### `__repr__` -`__repr__`方法返回一个表示该对象的官方字符串,这个字符串通常可以被`eval()`执行来重新得到这个对象。如果我们没有定义`__str__`方法,那么在调用`str()`或`print()`时也会使用`__repr__`的返回值。 +`__repr__` 方法返回一个表示该对象的官方字符串,这个字符串通常可以被 `eval()` 执行来重新得到这个对象。如果我们没有定义 `__str__` 方法,那么在调用 `str()` 或 `print()` 时也会使用 `__repr__` 的返回值。 ```python class MyClass: @@ -113,7 +114,7 @@ print(mc) # 输出:MyClass() #### `__format__` -`__format__`方法定义了当我们调用`format()`或使用格式化字符串(f-string)时的行为。`format_spec`是一个格式说明符,它是在格式化字符串中`:`后面的部分。 +`__format__` 方法定义了当我们调用 `format()` 或使用格式化字符串(f-string)时的行为。`format_spec` 是一个格式说明符,它是在格式化字符串中 `:` 后面的部分。 ```python class MyClass: @@ -128,7 +129,7 @@ print(f"{mc:fancy}") # 输出:This is a fancy MyClass instance. ### 数学运算 -比较运算的魔术方法允许类的实例之间进行比较。例如,`__eq__`定义了对象的等于操作。这些方法的使用可以使您的类实例支持标准的比较操作符,如`==`, `!=`, `+`, `-`, `%`, 和 `@`。类似地,可以为其他数学运算符定义其他魔术方法。 +比较运算的魔术方法允许类的实例之间进行比较。例如,`__eq__` 定义了对象的等于操作。这些方法的使用可以使您的类实例支持标准的比较操作符,如 `==`, `!=`, `+`, `-`, `%`, 和 `@`。类似地,可以为其他数学运算符定义其他魔术方法。 ```python class Book: @@ -190,7 +191,7 @@ print(v3.x, v3.y) # 输出:3 5 #### `__len__` -`__len__`方法定义了`len()`的返回值。它应该返回一个整数,表示对象包含的元素的个数。 +`__len__` 方法定义了 `len()` 的返回值。它应该返回一个整数,表示对象包含的元素的个数。 ```python class MyClass: @@ -206,7 +207,7 @@ print(len(mc)) # 输出:3 #### `__getitem__` -`__getitem__`方法定义了使用索引访问元素的行为。`key`是索引。 +`__getitem__` 方法定义了使用索引访问元素的行为。`key` 是索引。 ```python class MyClass: @@ -219,7 +220,7 @@ print(mc[10]) # 输出:You are trying to access key 10. #### `__setitem__` -`__setitem__`方法定义了使用索引设置元素的行为。`key`是索引,`value`是我们试图设置的值。 +`__setitem__` 方法定义了使用索引设置元素的行为。`key` 是索引,`value` 是我们试图设置的值。 ```python class MyClass: @@ -232,7 +233,7 @@ mc[10] = "value" # 输出:Set key 10 to value. #### `__delitem__` -`__delitem__`方法定义了使用索引删除元素的行为。`key`是索引。 +`__delitem__` 方法定义了使用索引删除元素的行为。`key` 是索引。 ```python class MyClass: @@ -245,11 +246,11 @@ del mc[10] # 输出:Deleted key 10. #### `__iter__`、`__next__` -迭代器协议的魔术方法允许对象支持迭代,这意味着您可以在对象上使用`for`循环。为了使一个对象可迭代,您需要定义`__iter__`和`__next__`两个魔术方法。 +迭代器协议的魔术方法允许对象支持迭代,这意味着您可以在对象上使用 `for` 循环。为了使一个对象可迭代,您需要定义 `__iter__` 和 `__next__` 两个魔术方法。 -- `__iter__`返回对象本身,它应该返回一个实现了`__next__`的迭代器对象。 +- `__iter__` 返回对象本身,它应该返回一个实现了 `__next__` 的迭代器对象。 -- `__next__`方法返回序列中的下一个值。如果所有项都返回了,那么它应该引发一个`StopIteration`异常来通知迭代的完成。 +- `__next__` 方法返回序列中的下一个值。如果所有项都返回了,那么它应该引发一个 `StopIteration` 异常来通知迭代的完成。 ```python class Counter: @@ -279,13 +280,13 @@ for number in counter: # 3 ``` -在上述`Counter`类中,我们定义了一个简单的迭代器,它从`start`开始,每次迭代增加1,直到`end`为止。`for`循环通过调用`__iter__`来获取迭代器对象,并在每次迭代中调用`__next__`,直到捕获`StopIteration`异常为止。 +在上述 `Counter` 类中,我们定义了一个简单的迭代器,它从 `start` 开始,每次迭代增加 1,直到 `end` 为止。`for` 循环通过调用 `__iter__` 来获取迭代器对象,并在每次迭代中调用 `__next__`,直到捕获 `StopIteration` 异常为止。 ### 属性访问 #### `__dir__` -`__dir__`方法返回类中定义的属性、方法等的列表。它对内置的`dir()`函数的行为进行重载。 +`__dir__` 方法返回类中定义的属性、方法等的列表。它对内置的 `dir()` 函数的行为进行重载。 ```python class MyClass: @@ -298,7 +299,7 @@ print(dir(mc)) # 输出:['custom_attr1', 'custom_attr2'] #### `__getattr__` -当尝试访问一个不存在的属性时,`__getattr__`方法会被调用。`name`是试图访问的属性名称。 +当尝试访问一个不存在的属性时,`__getattr__` 方法会被调用。`name` 是试图访问的属性名称。 ```python class MyClass: @@ -309,11 +310,11 @@ mc = MyClass() # 创建实例 print(mc.unknown_attr) # 输出:unknown_attr does not exist. ``` -*值得注意的是,**`__getattr__`只有在所请求的属性不存在时才会被调用。*** +*值得注意的是,**`__getattr__` 只有在所请求的属性不存在时才会被调用。*** #### `__setattr__` -每当尝试设置一个属性值时,`__setattr__`都会被调用,不论该属性是否存在。`name`是试图设置的属性的名称,而`value`是试图赋给该属性的值。 +每当尝试设置一个属性值时,`__setattr__` 都会被调用,不论该属性是否存在。`name` 是试图设置的属性的名称,而 `value` 是试图赋给该属性的值。 ```python class MyClass: @@ -327,7 +328,7 @@ mc.attr = 10 # 输出:Set attr to 10. #### `__delattr__` -当试图删除一个属性时,`__delattr__`方法会被调用。`name`是试图删除的属性的名称。 +当试图删除一个属性时,`__delattr__` 方法会被调用。`name` 是试图删除的属性的名称。 ```python class MyClass: @@ -343,7 +344,7 @@ del mc.attr # 输出:Deleted attr. #### `__getattribute__` -每次尝试访问一个属性时,`__getattribute__`方法都会被调用,无论该属性是否存在。 +每次尝试访问一个属性时,`__getattribute__` 方法都会被调用,无论该属性是否存在。 ```python class MyClass: @@ -354,15 +355,15 @@ mc = MyClass() # 创建实例 print(mc.attr) # 输出:You are trying to access attr. ``` -重要的是,**如果`__getattribute__`被定义,那么`__getattr__`不会被调用,因为`__getattribute__`的优先级更高。*** +重要的是,**如果 `__getattribute__` 被定义,那么 `__getattr__` 不会被调用,因为 `__getattribute__` 的优先级更高。*** ### 上下文管理 #### `__enter__`、`__exit__` -当使用`with`语句进入上下文管理时,`__enter__`方法会被调用。它应该返回上下文管理器对象本身或其他与上下文相关的对象。 +当使用 `with` 语句进入上下文管理时,`__enter__` 方法会被调用。它应该返回上下文管理器对象本身或其他与上下文相关的对象。 -当`with`语句块结束时,`__exit__`方法会被调用。它接收三个参数:`exc_type`、`exc_val`和`exc_tb`,分别代表异常类型、异常值和异常回溯。如果`with`语句块中没有发生异常,这三个参数的值都为`None`。 +当 `with` 语句块结束时,`__exit__` 方法会被调用。它接收三个参数:`exc_type`、`exc_val` 和 `exc_tb`,分别代表异常类型、异常值和异常回溯。如果 `with` 语句块中没有发生异常,这三个参数的值都为 `None`。 ```python class ContextManager: @@ -388,17 +389,17 @@ with ContextManager() as cm: # Exiting the context without any exception. ``` -如果在`with`语句块中引发了异常,`__exit__`方法可以选择处理这个异常(例如记录日志)并返回`True`来阻止异常向外传播,或者返回`False`(或`None`)让异常继续向外传播。 +如果在 `with` 语句块中引发了异常,`__exit__` 方法可以选择处理这个异常(例如记录日志)并返回 `True` 来阻止异常向外传播,或者返回 `False`(或 `None`)让异常继续向外传播。 -上下文管理器是一种非常强大的工具,特别是当涉及到需要设置和清理资源的任务时,例如文件I/O、网络连接或数据库连接。 +上下文管理器是一种非常强大的工具,特别是当涉及到需要设置和清理资源的任务时,例如文件 I/O、网络连接或数据库连接。 ### 描述符 -描述符是实现了描述符协议的对象。描述符协议由`__get__`、`__set__`和`__delete__`方法组成。描述符用于创建那些需要特殊行为的对象属性,例如类型检查或只读属性。 +描述符是实现了描述符协议的对象。描述符协议由 `__get__`、`__set__` 和 `__delete__` 方法组成。描述符用于创建那些需要特殊行为的对象属性,例如类型检查或只读属性。 #### `__get__` -`__get__`方法定义了在获取属性时应执行的行为。当试图获取属性值时,这个方法会被调用。 +`__get__` 方法定义了在获取属性时应执行的行为。当试图获取属性值时,这个方法会被调用。 ```python class Descriptor: @@ -416,7 +417,7 @@ mc.attr #### `__set__` -`__set__`方法定义了在设置属性值时应执行的行为。当试图给属性赋值时,这个方法会被调用。 +`__set__` 方法定义了在设置属性值时应执行的行为。当试图给属性赋值时,这个方法会被调用。 ```python class Descriptor: @@ -434,7 +435,7 @@ mc.attr = 10 #### `__delete__` -`__delete__`方法定义了当删除属性时应执行的行为。当试图删除属性时,这个方法会被调用。 +`__delete__` 方法定义了当删除属性时应执行的行为。当试图删除属性时,这个方法会被调用。 ```python class Descriptor: @@ -451,11 +452,11 @@ del mc.attr ### 使对象可调用 -**在 Python 中,函数是一类对象,可以调用它们。**但是,您知道您也可以使自己的对象表现得像函数一样吗?通过定义`__call__`魔术方法,您可以使类的实例表现得像函数,从而允许对它们进行调用。 +**在 Python 中,函数是一类对象,可以调用它们。**但是,您知道您也可以使自己的对象表现得像函数一样吗?通过定义 `__call__` 魔术方法,您可以使类的实例表现得像函数,从而允许对它们进行调用。 #### `__call__` -当实例作为函数被“调用”时,`__call__`方法就会被执行。这提供了一种优雅的方式来使用对象,同时保持其对象性质。通过这种方式,您的对象不仅可以表示数据,还可以表现得像函数,这增加了编码的灵活性和创造性。 +当实例作为函数被“调用”时,`__call__` 方法就会被执行。这提供了一种优雅的方式来使用对象,同时保持其对象性质。通过这种方式,您的对象不仅可以表示数据,还可以表现得像函数,这增加了编码的灵活性和创造性。 ```python class Greeter: @@ -477,7 +478,7 @@ print(bonjour_greeter("Pierre")) # 输出:Bonjour, Pierre! #### `__hash__` -`__hash__`方法返回对象的哈希值。哈希值通常用于字典的键值和其他需要快速查找的数据结构中。如果一个对象是可变的,通常最好不要实现此方法。如果对象定义了`__eq__`方法并且是不可变的,则通常也应定义此方法。 +`__hash__` 方法返回对象的哈希值。哈希值通常用于字典的键值和其他需要快速查找的数据结构中。如果一个对象是可变的,通常最好不要实现此方法。如果对象定义了 `__eq__` 方法并且是不可变的,则通常也应定义此方法。 ```python class MyClass: @@ -500,7 +501,7 @@ print(my_dict[obj2]) # 输出:a #### `__bool__` -`__bool__`方法用于实现`bool()`内置函数的调用。当我们调用`bool()`函数或使用对象在条件语句(例如`if obj:`)中作为条件时,会调用此方法。如果`__bool__`没有被定义,`__len__`会被调用(如果已定义)。如果两者都未定义,所有实例都默认为`True`。 +`__bool__` 方法用于实现 `bool()` 内置函数的调用。当我们调用 `bool()` 函数或使用对象在条件语句(例如 `if obj:`)中作为条件时,会调用此方法。如果 `__bool__` 没有被定义,`__len__` 会被调用(如果已定义)。如果两者都未定义,所有实例都默认为 `True`。 ```python class MyClass: @@ -520,7 +521,7 @@ print(bool(obj2)) # 输出:True #### `__int__` -`__int__`方法允许将一个对象转换为整数。当使用`int()`内置函数时,如果对象实现了此方法,会被调用。 +`__int__` 方法允许将一个对象转换为整数。当使用 `int()` 内置函数时,如果对象实现了此方法,会被调用。 ```python class MyClass: @@ -533,7 +534,7 @@ print(int(obj)) # 输出:42 #### `__float__` -`__float__`方法允许将一个对象转换为浮点数。当使用`float()`内置函数时,如果对象实现了此方法,会被调用。 +`__float__` 方法允许将一个对象转换为浮点数。当使用 `float()` 内置函数时,如果对象实现了此方法,会被调用。 ```python class MyClass: @@ -546,7 +547,7 @@ print(float(obj)) # 输出:42.0 #### `__complex__` -`__complex__`方法允许将一个对象转换为复数。当使用`complex()`内置函数时,如果对象实现了此方法,会被调用。 +`__complex__` 方法允许将一个对象转换为复数。当使用 `complex()` 内置函数时,如果对象实现了此方法,会被调用。 ```python class MyClass: @@ -559,7 +560,7 @@ print(complex(obj)) # 输出:(3+4j) #### `__bytes__` -`__bytes__`方法定义了当我们调用`bytes()`时的行为。它应该返回一个字节串。 +`__bytes__` 方法定义了当我们调用 `bytes()` 时的行为。它应该返回一个字节串。 ```python class MyClass: @@ -590,7 +591,7 @@ print(e.instance_method()) ### 类方法 -类方法使用 `@classmethod` 装饰器定义。其第一个参数是`cls`,代表类本身。类方法既可以由类直接调用,也可以被其实例调用。 +类方法使用 `@classmethod` 装饰器定义。其第一个参数是 `cls`,代表类本身。类方法既可以由类直接调用,也可以被其实例调用。 ```python class Example: @@ -606,7 +607,7 @@ print(Example.class_method()) ### 静态方法 -静态方法使用 `@staticmethod` 装饰器定义。它不需要传递`self`或`cls`参数。**静态方法不能访问或修改类或实例的属性和方法。它仅仅与它所在的类相关**,但不需要访问类的特性。 +静态方法使用 `@staticmethod` 装饰器定义。它不需要传递 `self` 或 `cls` 参数。**静态方法不能访问或修改类或实例的属性和方法。它仅仅与它所在的类相关**,但不需要访问类的特性。 ```python class Example: @@ -618,7 +619,7 @@ print(Example.static_method()) # 输出 This is a static method ``` -### 类方法 vs 静态方法 +### 类方法 Vs 静态方法 | 类型 | 用途 | 优点 | 缺点 | | ------------ | ----------------------------------------------------- | ----------------------------- | ---------------------------- | @@ -647,7 +648,7 @@ print(e.number) # 输出 5 ``` -### 使用 setter 和 getter 方法 +### 使用 Setter 和 Getter 方法 Setter 和 Getter 在 Python 中用于控制属性的访问和赋值。 @@ -698,10 +699,10 @@ del e.number ### 属性保护 -在Python中,我们通常**使用下划线来表示属性应该是私有的或受保护的。** +在 Python 中,我们通常**使用下划线来表示属性应该是私有的或受保护的。** -- **受保护的属性**: 通常使用单下划线前缀`_`来定义,例如`_name`。这只是一个约定,表示这个属性是为类内部使用的,但外部仍然可以访问。 -- **私有属性**: 使用双下划线前缀`__`来定义,例如`__name`。Python会对其进行名称修饰,使得在类的外部更难直接访问。 +- **受保护的属性**: 通常使用单下划线前缀 `_` 来定义,例如 `_name`。这只是一个约定,表示这个属性是为类内部使用的,但外部仍然可以访问。 +- **私有属性**: 使用双下划线前缀 `__` 来定义,例如 `__name`。Python 会对其进行名称修饰,使得在类的外部更难直接访问。 ```python class Example: @@ -720,7 +721,7 @@ e.reveal() # 正常工作 #### `__slots__` 限制动态属性的添加 -为了提高性能和内存效率,Python允许在类定义中使用`__slots__`来限制可以添加到对象的属性。这通常在需要创建大量对象时很有用。 +为了提高性能和内存效率,Python 允许在类定义中使用 `__slots__` 来限制可以添加到对象的属性。这通常在需要创建大量对象时很有用。 ```python class Example: diff --git a/wiki/programming-language/Python/进阶/项目实践/_category_.json b/Tech/programming-language/Python/进阶/项目实践/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/项目实践/_category_.json rename to Tech/programming-language/Python/进阶/项目实践/_category_.json diff --git a/wiki/programming-language/Python/进阶/项目实践/文档指南/_category_.json b/Tech/programming-language/Python/进阶/项目实践/文档指南/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/项目实践/文档指南/_category_.json rename to Tech/programming-language/Python/进阶/项目实践/文档指南/_category_.json diff --git a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/_category_.json b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/项目实践/虚拟环境/_category_.json rename to Tech/programming-language/Python/进阶/项目实践/虚拟环境/_category_.json diff --git a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/pip.md b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/pip.md similarity index 83% rename from wiki/programming-language/Python/进阶/项目实践/虚拟环境/pip.md rename to Tech/programming-language/Python/进阶/项目实践/虚拟环境/pip.md index 4e1c558a..0cb4f633 100644 --- a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/pip.md +++ b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/pip.md @@ -6,7 +6,7 @@ keywords: - pip - 软件包管理器 tags: - - Python + - Python/虚拟环境 sidebar_position: 2 author: 7Wate date: 2023-10-26 @@ -22,7 +22,7 @@ pip 是 Python 的包管理工具,用于安装和管理 Python 软件包。它 pip3 install --upgrade pip ``` -## 使用 pip 安装包 +## 使用 Pip 安装包 使用 pip 安装包非常简单,基本命令如下: @@ -58,7 +58,7 @@ pip uninstall package_name ## requirements.txt -在 Python 项目中,我们通常会有很多依赖,这些依赖会被写在一个名为`requirements.txt`的文件中。这个文件是一个文本文件,列出了项目所需的所有 Python 包及其对应的版本号。比如,一个`requirements.txt`可能是这样的: +在 Python 项目中,我们通常会有很多依赖,这些依赖会被写在一个名为 `requirements.txt` 的文件中。这个文件是一个文本文件,列出了项目所需的所有 Python 包及其对应的版本号。比如,一个 `requirements.txt` 可能是这样的: ```text numpy==1.18.5 @@ -66,15 +66,15 @@ pandas==1.2.3 scikit-learn==0.23.2 ``` -我们可以通过以下命令来安装`requirements.txt`中的所有包: +我们可以通过以下命令来安装 `requirements.txt` 中的所有包: ```shell pip install -r requirements.txt ``` -pip 并不是 Python 的唯一包管理工具。比如,conda 是一个同时处理 Python 和非 Python 包的工具,适合于科学计算和数据分析;pipenv和poetry则集成了包管理和虚拟环境管理,适合于开发Python应用。 +pip 并不是 Python 的唯一包管理工具。比如,conda 是一个同时处理 Python 和非 Python 包的工具,适合于科学计算和数据分析;pipenv 和 poetry 则集成了包管理和虚拟环境管理,适合于开发 Python 应用。 -## venv 虚拟环境 +## Venv 虚拟环境 venv 是 Python3 中自带的虚拟环境工具。它可以在单独的目录中创建独立的 Python 运行环境,使得项目所需的包和版本与其他项目隔离开来,避免版本冲突。 @@ -86,7 +86,7 @@ venv 是 Python3 中自带的虚拟环境工具。它可以在单独的目录中 python3 -m venv /path/to/new/virtual/env_name ``` -2. 激活虚拟环境: +1. 激活虚拟环境: | Shell | 用于激活虚拟环境的命令 | | :--------- | :------------------------------------ | diff --git a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md similarity index 98% rename from wiki/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md rename to Tech/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md index e8b14796..d720e070 100644 --- a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md +++ b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/pipenv.md @@ -2,11 +2,11 @@ title: pipenv description: Python pipenv 虚拟环境 keywords: -- Python -- pipenv -- 虚拟环境 + - Python + - pipenv + - 虚拟环境 tags: -- Python + - Python/虚拟环境 sidebar_position: 5 author: 7Wate date: 2023-01-18 diff --git a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md similarity index 96% rename from wiki/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md rename to Tech/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md index c90c1e5a..b1c4c331 100644 --- a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md +++ b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/poetry.md @@ -2,11 +2,11 @@ title: poetry description: Python poetry 虚拟环境 keywords: -- Python -- poetry -- 虚拟环境 + - Python + - poetry + - 虚拟环境 tags: -- Python + - Python/虚拟环境 sidebar_position: 4 author: 7Wate date: 2023-01-18 @@ -212,7 +212,7 @@ poetry add --source foo private-package ### 4. 命令 -poetry 的[常用命令](https://python-poetry.org/docs/cli),完整的命令可以在终端执行 poetry --help 查看。 +poetry 的 [常用命令](https://python-poetry.org/docs/cli),完整的命令可以在终端执行 poetry --help 查看。 | 命令 | 作用 | | ------- | -------------- | diff --git a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md similarity index 94% rename from wiki/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md rename to Tech/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md index 88d571ab..eea0f6d3 100644 --- a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md +++ b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/virtualenv.md @@ -2,11 +2,11 @@ title: Virtualenv description: Python Virtualenv 虚拟环境 keywords: -- Python -- Virtualenv -- 虚拟环境 + - Python + - Virtualenv + - 虚拟环境 tags: -- Python + - Python/虚拟环境 sidebar_position: 3 author: 7Wate date: 2023-01-17 @@ -36,13 +36,13 @@ virtualenv 是一个用于创建虚拟环境的库。它可以在其中安装 Py pip install virtualenv ``` -2. 创建虚拟环境: +1. 创建虚拟环境: ```shell virtualenv env_name ``` -3. 激活虚拟环境: +1. 激活虚拟环境: | Shell | 用于激活虚拟环境的命令 | | :--------- | :------------------------------------ | diff --git a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/概述.md b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/概述.md similarity index 97% rename from wiki/programming-language/Python/进阶/项目实践/虚拟环境/概述.md rename to Tech/programming-language/Python/进阶/项目实践/虚拟环境/概述.md index e109d691..17a69130 100644 --- a/wiki/programming-language/Python/进阶/项目实践/虚拟环境/概述.md +++ b/Tech/programming-language/Python/进阶/项目实践/虚拟环境/概述.md @@ -2,11 +2,11 @@ title: 概述 description: Python 虚拟环境概述 keywords: -- Python -- 虚拟环境 -- 概述 + - Python + - 虚拟环境 + - 概述 tags: -- Python + - Python/虚拟环境 sidebar_position: 1 author: 7Wate date: 2023-01-1 diff --git a/wiki/programming-language/Python/进阶/项目实践/项目指南/_category_.json b/Tech/programming-language/Python/进阶/项目实践/项目指南/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/项目实践/项目指南/_category_.json rename to Tech/programming-language/Python/进阶/项目实践/项目指南/_category_.json diff --git a/wiki/programming-language/Python/进阶/项目实践/风格指南/_category_.json b/Tech/programming-language/Python/进阶/项目实践/风格指南/_category_.json similarity index 100% rename from wiki/programming-language/Python/进阶/项目实践/风格指南/_category_.json rename to Tech/programming-language/Python/进阶/项目实践/风格指南/_category_.json diff --git a/wiki/programming-language/Python/进阶/项目实践/风格指南/风格指南.md b/Tech/programming-language/Python/进阶/项目实践/风格指南/风格指南.md similarity index 93% rename from wiki/programming-language/Python/进阶/项目实践/风格指南/风格指南.md rename to Tech/programming-language/Python/进阶/项目实践/风格指南/风格指南.md index 00aea11e..6ebb1654 100644 --- a/wiki/programming-language/Python/进阶/项目实践/风格指南/风格指南.md +++ b/Tech/programming-language/Python/进阶/项目实践/风格指南/风格指南.md @@ -2,10 +2,10 @@ title: Python 风格指南 description: Python 风格指南 keywords: -- Python -- 风格指南 + - Python + - 风格指南 tags: -- Python + - Python/项目 sidebar_position: 1 author: 7Wate date: 2022-11-19 diff --git a/wiki/programming-language/Python/高级/_category_.json b/Tech/programming-language/Python/高级/_category_.json similarity index 100% rename from wiki/programming-language/Python/高级/_category_.json rename to Tech/programming-language/Python/高级/_category_.json diff --git a/wiki/programming-language/Regex/常用正则大全.md b/Tech/programming-language/Regex/常用正则大全.md similarity index 100% rename from wiki/programming-language/Regex/常用正则大全.md rename to Tech/programming-language/Regex/常用正则大全.md diff --git a/wiki/programming-language/Regex/正则表达式入门.md b/Tech/programming-language/Regex/正则表达式入门.md similarity index 100% rename from wiki/programming-language/Regex/正则表达式入门.md rename to Tech/programming-language/Regex/正则表达式入门.md diff --git a/wiki/programming-language/home.md b/Tech/programming-language/home.md similarity index 99% rename from wiki/programming-language/home.md rename to Tech/programming-language/home.md index ad30d6cb..255eeeb0 100644 --- a/wiki/programming-language/home.md +++ b/Tech/programming-language/home.md @@ -1,9 +1,8 @@ --- -title: Home -slug: / -sidebar_position: 1 +title: 程序设计语言 --- + ## TIOBE 榜单 | Oct 2022 | Oct 2021 | Change | Programming Language | Ratings | Change | | diff --git a/wiki/getting-started/Git/高级/协作规范/_category_.json b/Tech/software-engineering/协作规范/_category_.json similarity index 100% rename from wiki/getting-started/Git/高级/协作规范/_category_.json rename to Tech/software-engineering/协作规范/_category_.json diff --git a/wiki/getting-started/Git/高级/协作规范/交流反馈(Issue).md b/Tech/software-engineering/协作规范/交流反馈(Issue).md similarity index 72% rename from wiki/getting-started/Git/高级/协作规范/交流反馈(Issue).md rename to Tech/software-engineering/协作规范/交流反馈(Issue).md index 939e64ea..221d3241 100644 --- a/wiki/getting-started/Git/高级/协作规范/交流反馈(Issue).md +++ b/Tech/software-engineering/协作规范/交流反馈(Issue).md @@ -2,22 +2,21 @@ title: 交流反馈(Issue) description: Git 协作交流反馈(Issue) keywords: -- Git -- 协作规范 -- 交流反馈 + - Git + - 协作规范 + - 交流反馈 tags: -- 协作规范 + - 软件工程/Git协作 sidebar_position: 5 author: 7Wate date: 2023-06-26 --- - 文件命名:**ISSUE.md**。 ## 新需求(Pull Request) -规范:使用`Pr:title`来命名。``表示需求涉及的模块或功能,`title`则表示具体需求的主题。 +规范:使用 `Pr:title` 来命名。`` 表示需求涉及的模块或功能,`title` 则表示具体需求的主题。 示例:`Pr(auth):role-based authorization` @@ -45,13 +44,13 @@ date: 2023-06-26 ## 反馈缺陷(Bug) -在提交Bug前,请务必先阅读**提问的智慧!** +在提交 Bug 前,请务必先阅读**提问的智慧!** -规范:使用`Bug:title`来命名。``表示Bug涉及的模块或功能,`title`则表示Bug的主要问题。 +规范:使用 `Bug:title` 来命名。`` 表示 Bug 涉及的模块或功能,`title` 则表示 Bug 的主要问题。 示例:`Bug(login):Admin password cannot be reset` -提交Bug反馈时,请遵循以下格式: +提交 Bug 反馈时,请遵循以下格式: ```markdown ## 运行环境 @@ -77,7 +76,7 @@ date: 2023-06-26 一般来说,我们更推荐使用社区自助交流方式。 -规范:使用`Usage:title`来命名。``表示问题涉及的模块或功能,`title`则表示问题的主要内容。 +规范:使用 `Usage:title` 来命名。`` 表示问题涉及的模块或功能,`title` 则表示问题的主要内容。 示例:`Usage(update):1.2.3 version update failed` diff --git a/wiki/getting-started/Git/高级/协作规范/关于(Readme).md b/Tech/software-engineering/协作规范/关于(Readme).md similarity index 97% rename from wiki/getting-started/Git/高级/协作规范/关于(Readme).md rename to Tech/software-engineering/协作规范/关于(Readme).md index 30d72301..67b578e3 100644 --- a/wiki/getting-started/Git/高级/协作规范/关于(Readme).md +++ b/Tech/software-engineering/协作规范/关于(Readme).md @@ -2,17 +2,16 @@ title: 关于(Readme) description: Git 协作关于(Readme) keywords: -- Git -- 协作规范 -- README + - Git + - 协作规范 + - README tags: -- 协作规范 + - 软件工程/Git协作 sidebar_position: 4 author: 7Wate date: 2023-06-26 --- - README 文件的命名应以项目的受众群体为依据。命名 README.md、README_EN.md、README_ZH.md。 ## 中文模板 diff --git a/wiki/getting-started/Git/高级/协作规范/分支(Branch).md b/Tech/software-engineering/协作规范/分支(Branch).md similarity index 91% rename from wiki/getting-started/Git/高级/协作规范/分支(Branch).md rename to Tech/software-engineering/协作规范/分支(Branch).md index 31c6c7d3..a72797b1 100644 --- a/wiki/getting-started/Git/高级/协作规范/分支(Branch).md +++ b/Tech/software-engineering/协作规范/分支(Branch).md @@ -2,17 +2,16 @@ title: 分支(Branch) description: 分支 keywords: -- Git -- 分支 -- 协作规范 + - Git + - 分支 + - 协作规范 tags: -- 协作规范 + - 软件工程/Git协作 sidebar_position: 1 author: 7Wate date: 2023-06-26 --- - ![git-flow](https://static.7wate.com/img/2022/10/09/a24754d19f904.png) | 分支类型 | 命名规则 | 备注 | @@ -38,7 +37,7 @@ date: 2023-06-26 ## 辅助分支 -为了协助平行开发,简化功能追踪,协助产品发布和快速修复线上版本的bug,我们采用了功能分支、预发布分支和热修复分支。 +为了协助平行开发,简化功能追踪,协助产品发布和快速修复线上版本的 bug,我们采用了功能分支、预发布分支和热修复分支。 - Feature branches (功能分支) - Release branches (预发布分支) @@ -50,7 +49,7 @@ date: 2023-06-26 ### 预发布分支 -预发布分支从 `develop` 创建,必须合并回 `develop` 和 `main`。这些分支用于准备新版本的发布,包括进行小的bug修复和准备发布数据。发布后,预发布分支可以删除。 +预发布分支从 `develop` 创建,必须合并回 `develop` 和 `main`。这些分支用于准备新版本的发布,包括进行小的 bug 修复和准备发布数据。发布后,预发布分支可以删除。 ### 热修复分支 diff --git a/wiki/getting-started/Git/高级/协作规范/开源协议(License).md b/Tech/software-engineering/协作规范/开源协议(License).md similarity index 83% rename from wiki/getting-started/Git/高级/协作规范/开源协议(License).md rename to Tech/software-engineering/协作规范/开源协议(License).md index ab4d7d04..aa965051 100644 --- a/wiki/getting-started/Git/高级/协作规范/开源协议(License).md +++ b/Tech/software-engineering/协作规范/开源协议(License).md @@ -2,11 +2,11 @@ title: 开源协议(License) description: Git 开源协议(License) keywords: -- Git -- 开源协议 -- 协作规范 + - Git + - 开源协议 + - 协作规范 tags: -- 协作规范 + - 软件工程/Git协作 sidebar_position: 7 author: 7Wate date: 2023-06-26 diff --git a/wiki/getting-started/Git/高级/协作规范/日志(Commit).md b/Tech/software-engineering/协作规范/日志(Commit).md similarity index 96% rename from wiki/getting-started/Git/高级/协作规范/日志(Commit).md rename to Tech/software-engineering/协作规范/日志(Commit).md index 23375ad6..4acde86c 100644 --- a/wiki/getting-started/Git/高级/协作规范/日志(Commit).md +++ b/Tech/software-engineering/协作规范/日志(Commit).md @@ -2,11 +2,11 @@ title: 日志(Commit) description: Git 协作日志 keywords: -- Git -- 协作 -- 日志 + - Git + - 协作 + - 日志 tags: -- Git + - 软件工程/Git协作 sidebar_position: 2 author: 7Wate date: 2023-06-26 @@ -76,4 +76,4 @@ error. 正文与脚注之间应有一个空行。 -脚注主要用于记录不兼容的更改和关闭问题的操作。对于不兼容的更改,需要在脚注中进行描述,同时还需要在主体部分进行详细描述。如果关闭的问题是在追踪系统(如 GitHub)中的问题,需要在脚注中使用 "Close #issue" 格式进行描述。 +脚注主要用于记录不兼容的更改和关闭问题的操作。对于不兼容的更改,需要在脚注中进行描述,同时还需要在主体部分进行详细描述。如果关闭的问题是在追踪系统(如 GitHub)中的问题,需要在脚注中使用 `Close #issue` 格式进行描述。 diff --git a/wiki/getting-started/Git/高级/协作规范/注释(Comments).md b/Tech/software-engineering/协作规范/注释(Comments).md similarity index 92% rename from wiki/getting-started/Git/高级/协作规范/注释(Comments).md rename to Tech/software-engineering/协作规范/注释(Comments).md index aff2348b..470e49be 100644 --- a/wiki/getting-started/Git/高级/协作规范/注释(Comments).md +++ b/Tech/software-engineering/协作规范/注释(Comments).md @@ -2,17 +2,16 @@ title: 注释(Comments) description: Git 协作注释 keywords: -- Git -- 协作 -- 注释 + - Git + - 协作 + - 注释 tags: -- Git + - 软件工程/Git协作 sidebar_position: 1.5 author: 7Wate date: 2023-06-26 --- - **代码**应视为**最好的注释**,因此应尽量使用**英文注释**,并坚决**避免滥用**注释。不必在代码中标明**作者、时间、或改动记录**,这些信息应放在 **Git** 的**提交日志**中! ## 行注释 @@ -71,7 +70,7 @@ function mkdirp(dir) { 代码··· ``` -上下分割线的长度应为描述文字长度的 1.1 倍。`/* */`不应与注释内容放在同一行,且描述文字前应保持 1 个空格。 +上下分割线的长度应为描述文字长度的 1.1 倍。`/* */` 不应与注释内容放在同一行,且描述文字前应保持 1 个空格。 示例: diff --git a/wiki/getting-started/Git/高级/协作规范/版本(Tag).md b/Tech/software-engineering/协作规范/版本(Tag).md similarity index 74% rename from wiki/getting-started/Git/高级/协作规范/版本(Tag).md rename to Tech/software-engineering/协作规范/版本(Tag).md index 3bc8c6af..bbb13f51 100644 --- a/wiki/getting-started/Git/高级/协作规范/版本(Tag).md +++ b/Tech/software-engineering/协作规范/版本(Tag).md @@ -2,17 +2,16 @@ title: 版本(Tag) description: Git 协作版本(Tag) keywords: -- Git -- 协作规范 -- 版本 + - Git + - 协作规范 + - 版本 tags: -- 协作规范 + - 软件工程/Git协作 sidebar_position: 3 author: 7Wate date: 2023-06-26 --- - ![语义化版本.png](https://static.7wate.com/img/2021/08/24/ad4999467e192.png) 首发版本以 **0.1.0** 开始,版本格式:主版本号.次版本号.修订号,递增规则如下: @@ -21,4 +20,4 @@ date: 2023-06-26 2. 次版本号:当你做了向下兼容的功能性新增, 3. 修订号:当你做了向下兼容的问题修正。 -参考[语义化版本 2.0.0](https://semver.org/lang/zh-CN/#%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC-200)。 +参考 [语义化版本 2.0.0](https://semver.org/lang/zh-CN/#%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC-200)。 diff --git a/wiki/getting-started/Git/高级/协作规范/贡献者协议(Contributing).md b/Tech/software-engineering/协作规范/贡献者协议(Contributing).md similarity index 88% rename from wiki/getting-started/Git/高级/协作规范/贡献者协议(Contributing).md rename to Tech/software-engineering/协作规范/贡献者协议(Contributing).md index e09ed1f7..6ad4094c 100644 --- a/wiki/getting-started/Git/高级/协作规范/贡献者协议(Contributing).md +++ b/Tech/software-engineering/协作规范/贡献者协议(Contributing).md @@ -2,20 +2,21 @@ title: 贡献者协议(Contributing) description: Git 协作贡献者协议(Contributing) keywords: -- Git -- 协作规范 -- 贡献者协议 + - Git + - 协作规范 + - 贡献者协议 tags: -- 协作规范 + - 软件工程/Git协作 sidebar_position: 6 author: 7Wate date: 2023-06-26 --- + 开源项目的成功在很大程度上取决于社区的参与和贡献。然而,这种参与经常涉及到一些复杂的法律问题,尤其是与知识产权有关的问题。为了解决这些问题,开源社区引入了两种主要的贡献者协议:CLA (Contributor License Agreement) 和 DCO (Developer Certificate of Origin)。这两种协议在法律义务和责任方面有着显著的不同。 ## CLA -CLA (Contributor License Agreement)是开源协议的补充,它明确了贡献者和项目所有者之间的法律关系。CLA 协议包括公司级别和个人级别的 CLA,公司级别的 CLA 允许一个公司代表其所有员工签署,而个人级别的 CLA 则只针对个人贡献者。 +CLA (Contributor License Agreement) 是开源协议的补充,它明确了贡献者和项目所有者之间的法律关系。CLA 协议包括公司级别和个人级别的 CLA,公司级别的 CLA 允许一个公司代表其所有员工签署,而个人级别的 CLA 则只针对个人贡献者。 CLA 协议主要涵盖以下几点: @@ -32,13 +33,13 @@ CLA 协议主要涵盖以下几点: ## DCO -DCO (Developer Certificate of Origin)是由 Linux Foundation 制定的,它并不是一个法律协议,而是一种证明。开源贡献者只需要在提交时签署邮件地址,就相当于确认了他们对提交的贡献拥有相应的权利,并同意该贡献在该项目或涉及的开源许可下公开发布。 +DCO (Developer Certificate of Origin) 是由 Linux Foundation 制定的,它并不是一个法律协议,而是一种证明。开源贡献者只需要在提交时签署邮件地址,就相当于确认了他们对提交的贡献拥有相应的权利,并同意该贡献在该项目或涉及的开源许可下公开发布。 DCO 包含以下四点保证: 1. 贡献全部或部分由我创建,我有权根据文件中指明的开源许可提交; 2. 贡献是基于以前的工作,这些工作属于适当的开源许可,无论这些工作全部还是部分由我完成,我有权根据相同的开源许可证(除非我被允许根据不同的许可证提交)提交修改后的工作; -3. 贡献由1、2、或 3 证明的其他人直接提供给我,而我没有对其进行修改。 +3. 贡献由 1、2、或 3 证明的其他人直接提供给我,而我没有对其进行修改。 4. 我理解并同意该项目和贡献是公开的,并且该贡献的记录(包括我随之提交的所有个人信息,包括我的签字)将无限期保留,并且可以与本项目或涉及的开源许可证保持一致或者重新分配。 ## CLA 与 DCO 的比较 diff --git a/wiki/getting-started/文档/命名约定.md b/Tech/software-engineering/技术文档/命名约定.md similarity index 98% rename from wiki/getting-started/文档/命名约定.md rename to Tech/software-engineering/技术文档/命名约定.md index 3f7b72da..1c9b85ba 100644 --- a/wiki/getting-started/文档/命名约定.md +++ b/Tech/software-engineering/技术文档/命名约定.md @@ -2,11 +2,11 @@ title: 命名约定 description: 文档命名约定 keywords: -- 文档 -- 命名 -- 约定 + - 文档 + - 命名 + - 约定 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 2 author: 7Wate date: 2023-06-26 diff --git a/wiki/getting-started/文档/文档内容.md b/Tech/software-engineering/技术文档/文档内容.md similarity index 97% rename from wiki/getting-started/文档/文档内容.md rename to Tech/software-engineering/技术文档/文档内容.md index fa45833a..70bc1981 100644 --- a/wiki/getting-started/文档/文档内容.md +++ b/Tech/software-engineering/技术文档/文档内容.md @@ -2,10 +2,10 @@ title: 文档内容 description: 文档内容 keywords: -- 文档 -- 内容 + - 文档 + - 内容 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 4 author: 7Wate date: 2023-06-26 @@ -20,9 +20,9 @@ date: 2023-06-26 - 使用半角空格,不使用全角空格;英文字符和阿拉伯数字用半角空格包围 > 这是一段□□□文本。❌ -> +> > 这是一段文本。 -> +> > 这是一段文本,包含中文、English□words□和□12345。 - 除缩进、列表级别、代码块和 Markdown 表格外,禁止连续使用半角空格。 @@ -291,7 +291,7 @@ date: 2023-06-26 汉语缩略语是通过缩短和省略较长的中文词语来形成的新词。例如,「人大」是「人民大会堂」的缩略,而「重启」则是「重启动」的缩略。 -**使用汉语缩略语时,我们要确保这些词在上下文中的含义清晰、准确,以避免产生歧义。**如果某个汉语缩略语并非大众常用或容易理解,我们在初次使用时应提供全称和相应的解释。例如,如果我们在文档中使用「绑核」作为「核心绑定」的缩略,我们需要在初次使用时指出:「本文将使用'绑核'作为'核心绑定'的缩略」。 +**使用汉语缩略语时,我们要确保这些词在上下文中的含义清晰、准确,以避免产生歧义。**如果某个汉语缩略语并非大众常用或容易理解,我们在初次使用时应提供全称和相应的解释。例如,如果我们在文档中使用「绑核」作为「核心绑定」的缩略,我们需要在初次使用时指出:「本文将使用 ' 绑核 ' 作为 ' 核心绑定 ' 的缩略」。 ### 英语缩略语 @@ -311,7 +311,7 @@ date: 2023-06-26 - 当使用缩略语代指某词时,必须在该词首次出现时告知读者,下文将以缩略语的形式称呼该词。 -- 不要使用非标准的或可能引起混淆的缩略语,例如,「16c32g」不能用来表示「16核、32GB」,「10w」也不能用来表示「10万」。 +- 不要使用非标准的或可能引起混淆的缩略语,例如,「16c32g」不能用来表示「16 核、32GB」,「10w」也不能用来表示「10 万」。 ## 数字 @@ -349,7 +349,7 @@ date: 2023-06-26 | ------------------------------------------------------------ | ------------------------------------------------------------ | | 用于计量(即用于加、减、乘、除等数学运算)的数字,如正负整数、小数、百分比、比例、分数等。 | -126、34.05%、63%~67%、1:500、87/90 | | 当数值伴随有计量单位,如长度、容积、面积、体积、质量、温度、经纬度、音量、频率等,特别是当计量单位以字母表达时 | 524.5 km(524.5 千米)、53 MB(53 兆字节)、12 h(12 小时) | -| 用于编号的数字 | - 电话号码:98888 - 邮政编码:100083 - 电子邮件地址:[xxx@163.com](mailto:xxx@163.com) - 网页地址:[http://127.0.0.1](http://127.0.0.1/) - 章节编号:4.1.2 - 产品型号:PH-3000 型计算机 - 产品序列号:C84XB-JYVFD-P7HC4-6XKRJ-7M6XH - 汽车号牌:京 A00001 - 公交车号: 302 路公交车 - 道路编号:101 国道 - 公文编号:国办发[1987]9 号 - 图书编号:ISBN 978-7-80184-224-4 - 刊物编号:CN11-1389 - 单位注册号:02050214 - 行政许可登记编号:0684D10004-828 | +| 用于编号的数字 | - 电话号码:98888 - 邮政编码:100083 - 电子邮件地址:[xxx@163.com](mailto:xxx@163.com) - 网页地址:[http://127.0.0.1](http://127.0.0.1/) - 章节编号:4.1.2 - 产品型号:PH-3000 型计算机 - 产品序列号:C84XB-JYVFD-P7HC4-6XKRJ-7M6XH - 汽车号牌:京 A00001 - 公交车号: 302 路公交车 - 道路编号:101 国道 - 公文编号:国办发 [1987]9 号 - 图书编号:ISBN 978-7-80184-224-4 - 刊物编号:CN11-1389 - 单位注册号:02050214 - 行政许可登记编号:0684D10004-828 | | 现代社会生活中出现的事物、现象、事件,其名称的书写形式中包含阿拉伯数字,已经广泛使用而稳定下来 | 4G 手机、MP4 播放器、维生素 B12、「5·27」事件 | | 希望突出简洁醒目的表达效果时 | 北京时间 2020 年 10 月 1 日 12 点整 | @@ -377,13 +377,13 @@ date: 2023-06-26 - 禁止简体中文和繁体中文的混用。 > 这款软件的颜色设计很独特,它的界面顏色是由用户自己选择的。❌ -> +> > 正确示例:这款软件的颜色设计很独特,它的界面颜色是由用户自己选择的。 - 禁止出现中英文错别字。错别字包括错字和别字。 > 这款软件使用 MySOL 数据库存储数据。❌ -> +> > 这款软件使用 MySQL 数据库存储数据。 ### 英文的大小写形式 @@ -391,19 +391,19 @@ date: 2023-06-26 - 英文大小写形式不能写错。 > 用户可以在 mysql 数据库中创建新的表。❌ -> +> > 用户可以在 MySQL 数据库中创建新的表。 - 当中文句子中夹有英文单词或词组时,无论该英文单词或词组位于中文句子的开头、中间还是末尾,普通单词、词组必须小写;专有名词等在英文中必须大写的单词或词组,保留其大写形式。 > 在 SQL 语句中,你可以使用 "SELECT" 语句获取数据。❌ -> +> > 在 SQL 语句中,你可以使用 "select" 语句获取数据。 - 当中文句子中夹有完整的英文句子时,无论该英文句子位于中文句子的开头、中间还是末尾,其首字母均保留大写形式。 > 如需更多信息,请参阅 "in this chapter, we will learn how to create tables."❌ -> +> > 如需更多信息,请参阅 "In this chapter, we will learn how to create tables." ## 语法 @@ -413,7 +413,7 @@ date: 2023-06-26 在编写技术文档时,务必确保语句的成分完整。每个句子都应该有一个明确的主语和谓语,以及必要的宾语和定语。 > 会话保持:在应用程序没有提供会话保持的功能下,HAProxy 可以提供该项功能。❌ -> +> > 会话保持:在应用程序没有提供会话保持功能的情况下,HAProxy 可以提供该项功能。 ### 搭配不当 @@ -421,7 +421,7 @@ date: 2023-06-26 确保你的句子中使用的词汇是搭配恰当的。不正确的词汇搭配可能会让读者混淆,影响他们对你的文档的理解。 > HAProxy 是由 Linux 内核的核心贡献者 Willy Tarreau 于 2000 年编写,并仍然负责该项目的维护,该在开源社区提供免费和版本迭代。❌ -> +> > HAProxy 是由 Linux 内核的核心贡献者 Willy Tarreau 于 2000 年编写,他现在仍然负责该项目的维护,并在开源社区免费提供版本迭代。 ### 倍数表达 @@ -439,14 +439,14 @@ date: 2023-06-26 | 增加到 | 处理速度增加到两倍。 | ✔ | | 只用增加 | 处理速度增加两倍。 | ❌ | | 降低了 | 处理速度降低了五十百分点。 | ✔ | -| 降低N倍 | 处理速度降低两倍。 | ❌ | +| 降低 N 倍 | 处理速度降低两倍。 | ❌ | ### 成分多余 避免在句子中使用不必要的词汇或短语,这可能会使句子变得冗长和复杂,影响其清晰度和可读性。 > 根据官方建议,目前稳定版本的 HAProxy 为稳定版 2.0 特性。❌ -> +> > 官方目前建议使用 HAProxy 稳定版本 2.0。 ### 句式杂糅 @@ -454,5 +454,5 @@ date: 2023-06-26 避免在一个句子中混合使用多种句式。尽量保持句子简洁明了,如果需要表达的信息较多,可以考虑分解为多个句子。 > 当部署多个 DM-master 节点时,所有 DM-master 节点将使用内部嵌入的 etcd 组成集群并用于存储集群节点信息、任务配置等元数据,同时通过 etcd 选举出 leader 节点用于提供集群管理、数据迁移任务管理相关的各类服务。因此,若 DM-master 可用节点数超过部署节点的半数,即可正常提供服务。❌ -> +> > 当部署多个 DM-master 节点时,所有 DM-master 节点将使用内部嵌入的 etcd 组成集群。该 DM-master 集群用于存储集群节点信息、任务配置等元数据,同时通过 etcd 选举出 leader 节点。该 leader 节点用于提供集群管理、数据迁移任务管理相关的各类服务。因此,若可用的 DM-master 节点数超过部署节点的半数,即可正常提供服务。 diff --git a/wiki/getting-started/文档/文档结构.md b/Tech/software-engineering/技术文档/文档结构.md similarity index 81% rename from wiki/getting-started/文档/文档结构.md rename to Tech/software-engineering/技术文档/文档结构.md index f50e9560..1f23ea56 100644 --- a/wiki/getting-started/文档/文档结构.md +++ b/Tech/software-engineering/技术文档/文档结构.md @@ -2,10 +2,10 @@ title: 文档结构 description: 文档结构 keywords: -- 文档 -- 结构 + - 文档 + - 结构 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 3 author: 7Wate date: 2023-06-26 @@ -28,13 +28,13 @@ date: 2023-06-26 ### 描述 -标题的描述应简洁明确,可以采用:名词词组、主题词+动词、动词+主题词、定语+主题词、介词+定语+主题词等形式。它们应能概括反映本章节的中心内容。为了保持标题的一致性,同级别的标题应尽量使用相同的结构。 +标题的描述应简洁明确,可以采用:名词词组、主题词 + 动词、动词 + 主题词、定语 + 主题词、介词 + 定语 + 主题词等形式。它们应能概括反映本章节的中心内容。为了保持标题的一致性,同级别的标题应尽量使用相同的结构。 1. **名词词组:** 例如「数据结构」、「网络安全」等。 -2. **主题词+动词:** 这种形式更加动态,例如「电池充电」、「程序执行」等。 -3. **动词+主题词:** 这种形式可以清晰地指示一个操作或行动,例如「安装软件」、「编写代码」等。 -4. **定语+主题词:** 这种形式可以给出更多的描述性信息,例如「高效的算法」、「重要的更新」等。 -5. **介词+定语+主题词:** 这种形式更加详细,例如「对数据结构的理解」、「在网络安全中的防御」等。 +2. **主题词 + 动词:** 这种形式更加动态,例如「电池充电」、「程序执行」等。 +3. **动词 + 主题词:** 这种形式可以清晰地指示一个操作或行动,例如「安装软件」、「编写代码」等。 +4. **定语 + 主题词:** 这种形式可以给出更多的描述性信息,例如「高效的算法」、「重要的更新」等。 +5. **介词 + 定语 + 主题词:** 这种形式更加详细,例如「对数据结构的理解」、「在网络安全中的防御」等。 ### 注意事项 @@ -49,7 +49,7 @@ date: 2023-06-26 段落是正文部分的基本构成单元,由多个句子组成。**每个段落应只有一个主题或中心句子,并且中心句子建议放在段落的开头,对全段内容进行概述。段落长度建议在 50~250 字之间,避免超过 300 字。**为提高可读性,段落之间应设置适当的间距。同时,技术描述类主题应考虑先图表、后句子的原则,避免仅依赖段落陈述。 -另外,**句子应避免过长,建议不超过100字。**使用简单句和并列句,避免复杂的复合句,可以适当地断句,防止句子过长。 +另外,**句子应避免过长,建议不超过 100 字。**使用简单句和并列句,避免复杂的复合句,可以适当地断句,防止句子过长。 ### 示例 diff --git a/wiki/getting-started/文档/标点符号.md b/Tech/software-engineering/技术文档/标点符号.md similarity index 99% rename from wiki/getting-started/文档/标点符号.md rename to Tech/software-engineering/技术文档/标点符号.md index cee85a40..4b2fb24d 100644 --- a/wiki/getting-started/文档/标点符号.md +++ b/Tech/software-engineering/技术文档/标点符号.md @@ -2,11 +2,11 @@ title: 标点符号 description: 标点符号 keywords: -- 文档 -- 标点 -- 符号 + - 文档 + - 标点 + - 符号 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 5 author: 7Wate date: 2023-06-26 diff --git a/wiki/getting-started/文档/简介.md b/Tech/software-engineering/技术文档/简介.md similarity index 96% rename from wiki/getting-started/文档/简介.md rename to Tech/software-engineering/技术文档/简介.md index 287b9866..77b11620 100644 --- a/wiki/getting-started/文档/简介.md +++ b/Tech/software-engineering/技术文档/简介.md @@ -2,11 +2,11 @@ title: 简介 description: 中文文档写作指南简介 keywords: -- 中文 -- 文档 -- 写作指南 + - 中文 + - 文档 + - 写作指南 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 1 author: 7Wate date: 2023-06-26 diff --git a/wiki/getting-started/文档/语言风格.md b/Tech/software-engineering/技术文档/语言风格.md similarity index 97% rename from wiki/getting-started/文档/语言风格.md rename to Tech/software-engineering/技术文档/语言风格.md index de6cb0fd..28f018a6 100644 --- a/wiki/getting-started/文档/语言风格.md +++ b/Tech/software-engineering/技术文档/语言风格.md @@ -2,11 +2,11 @@ title: 语言风格 description: 语言风格 keywords: -- 文档 -- 语言 -- 风格 + - 文档 + - 语言 + - 风格 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 6 author: 7Wate date: 2023-06-26 @@ -19,7 +19,7 @@ date: 2023-06-26 技术文档的语言风格应该采用**平易近人、直截了当**的语气,比如使用「你可以…」这样的表达方式,避免过于正式或冗长的句子。 > 请使用下面的按钮来完成操作。❌ -> +> > 你可以使用下面的按钮来完成操作。 ## 客观礼貌的语气 @@ -27,7 +27,7 @@ date: 2023-06-26 技术文档的语气应客观并保持礼貌,不进行产品推销,**主要目的是传达技术信息**。应该使用友好而有礼貌的措辞,避免强硬或粗鲁的语气。在指导性文档中,尽量保持语气冷静、客观且简洁。 > 你一定要按照这样做,否则会失败。❌ -> +> > 按照以下步骤操作,可以成功完成。 ## 简洁清晰地表达 @@ -35,7 +35,7 @@ date: 2023-06-26 简洁明了是技术文档的重要原则。**建议作者在完成初稿后,通读整篇文档**,删去没有明显作用的字、词、句,将文档长度缩短,但同时确保信息传递效果不受影响。避免使用冗长的句子和逻辑混乱的段落,尽量使用主动语态,明确阐述主语和宾语。 > 如果在配置过程中出现问题,那么需要查看日志文件,然后分析日志文件中的错误信息,最后采取适当的措施来解决问题。❌ -> +> > 配置过程中出现问题时,查看日志文件,分析错误信息,并采取适当措施解决问题。 ## 通俗易懂的语词 @@ -43,7 +43,7 @@ date: 2023-06-26 **使用通俗易懂的词语是技术文档的基本要求。**避免使用行话、俚语或网络流行语,或故意使用谐音错别字。应使用标准的技术术语,避免过度使用缩略语或专业术语,尽量用简单明了的表达方式。 > 这个软件有魔改功能,能让你的计算机跑得飞快!❌ -> +> > 这个软件有优化功能,可以提升计算机的运行速度。 ## 以用户为导向 @@ -51,7 +51,7 @@ date: 2023-06-26 **技术文档应以用户为导向,从用户的角度思考问题,提供有用的信息。**在撰写文档时,考虑文档的目标读者可能的技术水平和实际操作中可能遇到的问题,尽可能全面且清晰地解释技术信息,并提供更多的详细信息和解决方案。建议进行文档可用性测试,让无技术背景的测试人员参照文档进行操作,以确保文档的易用性。 > 在设置菜单中,选择适当的选项以进行配置。❌ -> +> > 在设置菜单中,选择相关选项,以便进行配置。 ## 用词恰当和统一 @@ -59,15 +59,15 @@ date: 2023-06-26 **在技术文档中,使用正确和一致的词汇非常重要。**你应避免使用可能引发冲突的词汇,并在同一篇或同一系列的技术文档中,保持一致的用词,避免造成混淆或阅读困难。 > 我们强烈推荐使用最新版本的软件。❌ -> +> > 建议使用最新版本的软件。 ## 正确使用“的”、“地”、“得” > 调度系统会将数据迁移到其他的存储节点上。(形容词+的+名词) -> +> > 数据库可以显式地使用事务。(副词+地+动词) -> +> > 这个值不宜调得过大。(动词+得+副词) ## 明确代词指代 @@ -75,5 +75,5 @@ date: 2023-06-26 你应确保代词的指代对象明确,避免造成读者的困惑。 > 如果希望从本地已编译好的二进制文件构建 PD、TiKV 或 TiDB 的镜像,需要将其 `image` 字段留空。❌ -> +> > 如果希望从本地已编译好的二进制文件构建 PD、TiKV 或 TiDB 的镜像,需要将相应镜像的 `image` 字段留空。 diff --git a/wiki/getting-started/文档/附录资料.md b/Tech/software-engineering/技术文档/附录资料.md similarity index 97% rename from wiki/getting-started/文档/附录资料.md rename to Tech/software-engineering/技术文档/附录资料.md index ed0ed24c..846bc3c2 100644 --- a/wiki/getting-started/文档/附录资料.md +++ b/Tech/software-engineering/技术文档/附录资料.md @@ -2,14 +2,13 @@ title: 附录资料 description: 中文文档指南附录资料 keywords: -- 中文文档指南 -- 附录资料 + - 中文文档指南 + - 附录资料 tags: -- 中文文档写作指南 + - 软件工程/技术文档 sidebar_position: 7 author: 7Wate date: 2023-06-26 - --- 针对编写的一系列技术文档,应提供相应的**术语表**和**缩略语表**作为附录资料,方便读者查阅。 diff --git a/group/organization/Google/谷歌开源项目风格指南.md b/Tech/software-engineering/谷歌开源项目风格指南.md similarity index 100% rename from group/organization/Google/谷歌开源项目风格指南.md rename to Tech/software-engineering/谷歌开源项目风格指南.md diff --git a/wiki/structures-algorithms/home.md b/Tech/structures-algorithms/home.md similarity index 55% rename from wiki/structures-algorithms/home.md rename to Tech/structures-algorithms/home.md index 80db5e0f..579bb976 100644 --- a/wiki/structures-algorithms/home.md +++ b/Tech/structures-algorithms/home.md @@ -1,11 +1,7 @@ --- -slug: / -sidebar_position: 1 +title: 数据结构与算法 --- -# Home +## Home 数据结构与算法 ~ 🤩🤩🤩 - - - diff --git a/wiki/structures-algorithms/数据结构.md b/Tech/structures-algorithms/数据结构.md similarity index 100% rename from wiki/structures-algorithms/数据结构.md rename to Tech/structures-algorithms/数据结构.md diff --git a/wiki/structures-algorithms/算法.md b/Tech/structures-algorithms/算法.md similarity index 98% rename from wiki/structures-algorithms/算法.md rename to Tech/structures-algorithms/算法.md index 2be7ad93..a032b746 100644 --- a/wiki/structures-algorithms/算法.md +++ b/Tech/structures-algorithms/算法.md @@ -2,14 +2,15 @@ title: 算法 description: 算法的定义和设计 keywords: -- 算法 + - 算法 tags: -- 算法 + - 数据结构 author: 7Wate date: 2022-08-25 --- ## 概述 + 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限步骤或序列。 ## 特性 diff --git a/templates/博客模板.md b/Templates/博客模板.md similarity index 100% rename from templates/博客模板.md rename to Templates/博客模板.md diff --git a/templates/文档模板.md b/Templates/文档模板.md similarity index 100% rename from templates/文档模板.md rename to Templates/文档模板.md diff --git a/templates/日志 - 周记模板.md b/Templates/日志 - 周记模板.md similarity index 100% rename from templates/日志 - 周记模板.md rename to Templates/日志 - 周记模板.md diff --git a/templates/日志 - 季度模板.md b/Templates/日志 - 季度模板.md similarity index 100% rename from templates/日志 - 季度模板.md rename to Templates/日志 - 季度模板.md diff --git a/templates/日志 - 日记模板.md b/Templates/日志 - 日记模板.md similarity index 100% rename from templates/日志 - 日记模板.md rename to Templates/日志 - 日记模板.md diff --git a/templates/阅读模板.md b/Templates/阅读模板.md similarity index 100% rename from templates/阅读模板.md rename to Templates/阅读模板.md diff --git a/work/data-engineer/home.md b/Work/data-engineer/home.md similarity index 97% rename from work/data-engineer/home.md rename to Work/data-engineer/home.md index 428ecc39..8fc856f5 100644 --- a/work/data-engineer/home.md +++ b/Work/data-engineer/home.md @@ -1,6 +1,5 @@ --- -slug: / -sidebar_position: 1 +title: 数据工程师(data-engineer) --- ## 数据工程师(data-engineer) diff --git a/work/front-end-engineer/home.md b/Work/full-stack/home.md similarity index 97% rename from work/front-end-engineer/home.md rename to Work/full-stack/home.md index 0e6de6ac..88518510 100644 --- a/work/front-end-engineer/home.md +++ b/Work/full-stack/home.md @@ -1,6 +1,5 @@ --- -slug: / -sidebar_position: 1 +title: 前端工程师(Front-End Engineer) --- ## 前端工程师(Front-End Engineer) diff --git a/work/front-end-engineer/基础/CSS.md b/Work/full-stack/基础/CSS.md similarity index 98% rename from work/front-end-engineer/基础/CSS.md rename to Work/full-stack/基础/CSS.md index 53da3cfb..491b502b 100644 --- a/work/front-end-engineer/基础/CSS.md +++ b/Work/full-stack/基础/CSS.md @@ -4,7 +4,7 @@ description: CSS 样式表 keywords: - CSS tags: - - CSS + - FullStack/基础 sidebar_position: 2 author: 7Wate date: 2023-10-13 @@ -18,7 +18,7 @@ CSS,全称为层叠样式表(Cascading Style Sheets),是**一种用于 ## 选择器 -**CSS 的选择器是绑定样式到 HTML 元素的关键。**CSS选择器大致可以分为以下几类: +**CSS 的选择器是绑定样式到 HTML 元素的关键。**CSS 选择器大致可以分为以下几类: - **简单选择器**:包括元素选择器、类选择器、ID 选择器。 - **属性选择器**:根据元素的属性选择元素。例如,`[attr=value]` 选择具有特定值的特定属性的元素,`[attr^=value]` 选择属性值以特定值开始的元素,`[attr$=value]` 选择属性值以特定值结束的元素,`[attr*=value]` 选择属性值中包含特定值的元素。 @@ -31,8 +31,8 @@ CSS,全称为层叠样式表(Cascading Style Sheets),是**一种用于 | 选择器类型 | 作用 | 示例 | | :------------- | :--------------------------------------------------- | :----------------------------------------- | | 元素选择器 | 根据元素名称选择元素 | `p { color: red; }` | -| 类选择器 | 根据元素的class属性选择元素 | `.intro { font-size: 20px; }` | -| ID选择器 | 根据元素的id属性选择元素 | `#first-paragraph { text-align: center; }` | +| 类选择器 | 根据元素的 class 属性选择元素 | `.intro { font-size: 20px; }` | +| ID 选择器 | 根据元素的 id 属性选择元素 | `#first-paragraph { text-align: center; }` | | 属性选择器 | 根据元素的属性选择元素 | `a[target="_blank"] { color: red; }` | | 伪类选择器 | 根据元素的特定状态选择元素 | `a:hover { color: red; }` | | 伪元素选择器 | 选择元素的特定部分 | `p::first-line { color: blue; }` | @@ -453,7 +453,7 @@ Grid 布局中的一些常用属性: CSS 定位(Position)非常强大,它可以用于创建各种复杂的布局。**但是,请注意,过度使用 `absolute` 或 `fixed` 定位可能会导致布局难以管理,尤其是在响应式设计中。**在可能的情况下,使用 Flexbox 或 Grid 通常是更好的选择。 -#### static +#### Static **`static` 是元素的默认定位方式。**这种定位方式下,元素会按照正常的文档流进行布局。`static` 定位的元素不会受到 `top`、`bottom`、`left` 或 `right` 属性的影响。 @@ -463,7 +463,7 @@ div { } ``` -#### relative +#### Relative **`relative` 定位的元素会相对于它在正常文档流中的位置进行定位。**例如,设置 `left: 20px` 会使元素向右移动 20px。 @@ -474,7 +474,7 @@ div { } ``` -#### absolute +#### Absolute **`absolute` 定位的元素会相对于最近的非 `static` 定位的祖先元素(如果存在的话)进行定位。**如果没有这样的祖先元素,那么它会相对于 `initial containing block` 进行定位。`absolute` 定位的元素会从正常的文档流中移除,并不会影响到其他元素的布局。 @@ -486,7 +486,7 @@ div { } ``` -#### fixed +#### Fixed **`fixed` 定位的元素会相对于浏览器窗口进行定位,即使页面滚动,它也始终保持在同一位置。**`fixed` 定位的元素会从正常的文档流中移除,并不会影响到其他元素的布局。 @@ -498,7 +498,7 @@ div { } ``` -#### sticky +#### Sticky **`sticky` 定位是相对定位和固定定位的混合类型。**元素在滚动到某个位置前为相对定位,之后为固定定位。 @@ -513,7 +513,7 @@ div { 在 CSS 中,动画和过渡都是创建动态效果的重要工具,它们可以在提升用户体验和增强网页视觉效果方面发挥重要作用。 -### transition +### Transition **过渡是当元素从一个样式逐渐改变为另一个样式时产生的效果。** @@ -539,7 +539,7 @@ button:hover { | `transition-timing-function` | 规定过渡效果的速度曲线。可选值有 `linear`,`ease`,`ease-in`,`ease-out`,`ease-in-out`,`cubic-bezier(n,n,n,n)`。 | `ease-in` | | `transition-delay` | 指定过渡效果何时开始。时间以秒(s)或毫秒(ms)为单位。 | `1s` | -### animation +### Animation 动画是元素从一系列样式中逐渐改变的过程,可以使用 `@keyframes` 规则和 `animation` 属性来创建动画。`@keyframes` 本身并没有属性,但是你可以在 **`@keyframes` 规则中定义动画的各个阶段(关键帧)**和它们的样式。 @@ -590,7 +590,7 @@ div { } ``` -- `media-type` 是可选的,表示媒体类型,如 `screen`、`print`等。 +- `media-type` 是可选的,表示媒体类型,如 `screen`、`print` 等。 - `media-feature` 表示要查询的设备特性,如 `width`、`height` 等。 例如,我们可以写一个媒体查询,当浏览器窗口的宽度小于 600 像素时,让主要内容的字体大小增大,以便于在小屏幕设备上阅读。 diff --git a/work/front-end-engineer/基础/HTML.md b/Work/full-stack/基础/HTML.md similarity index 86% rename from work/front-end-engineer/基础/HTML.md rename to Work/full-stack/基础/HTML.md index 0c66565b..5869e206 100644 --- a/work/front-end-engineer/基础/HTML.md +++ b/Work/full-stack/基础/HTML.md @@ -2,9 +2,9 @@ title: HTML description: HTML 超文本标记语言 keywords: -- HTML + - HTML tags: -- HTML + - FullStack/基础 sidebar_position: 1 author: 7Wate date: 2023-10-13 @@ -56,7 +56,7 @@ HTML 是用来描述网页的一种语言,它不是一种编程语言,而是 ### 元信息 -**HTML 的元信息(metadata)是关于 HTML 文档的数据,它们不会显示给用户,而是提供给浏览器和搜索引擎。**元信息通常在 HTML 文档的``部分定义。 +**HTML 的元信息(metadata)是关于 HTML 文档的数据,它们不会显示给用户,而是提供给浏览器和搜索引擎。**元信息通常在 HTML 文档的 `` 部分定义。 ```html @@ -81,20 +81,20 @@ HTML 是用来描述网页的一种语言,它不是一种编程语言,而是 ``` -1. **``**: 这定义了文档的字符编码。常用的字符编码是UTF-8,因为它包含了大多数已知的字符和符号。 -2. **``**: 这个``标签定义了网页的作者。 +1. **``**: 这定义了文档的字符编码。常用的字符编码是 UTF-8,因为它包含了大多数已知的字符和符号。 +2. **``**: 这个 `` 标签定义了网页的作者。 3. **``**: 网页的标题,这在浏览器的标签页中显示,并被搜索引擎用于索引页面。 -4. **`<meta name="viewport" content="width=device-width, initial-scale=1.0">`**: 这是移动端优化的元标签。它让网页的宽度等于设备的宽度,初始缩放比例为1。 -5. **`<meta name="description" content="Page description. No longer than 155 characters.">`**: 这提供了页面的简洁描述,这在搜索引擎结果页(SERP)中显示,可以提高页面的可点率(CTR)。 -6. **`<meta name="keywords" content="your, tags">`**: 这定义了网页的关键词。虽然现在搜索引擎很少使用这个元标签,但在SEO中还是有一些应用。 -7. **`<link rel="icon" href="favicon.ico" type="image/x-icon">`**: 这个`<link>`标签定义了网站的favicon(收藏夹图标)。它在浏览器的标签页或地址栏中显示,也可以在用户的书签中显示。 -8. **`<link rel="stylesheet" href="styles.css">`**: 这链接了一个外部的CSS文件。虽然`<link>`标签不是`<meta>`,但它在`<head>`中定义,也提供了一些元信息。 -9. **`<script src="script.js"></script>`**: 这链接了一个外部的JavaScript文件。与`<link>`标签类似,`<script>`标签也提供了一些元信息。 -10. **`<meta http-equiv="refresh" content="30">`**: 这可以让页面在特定的时间后自动刷新。在这个例子中,页面会在30秒后自动刷新。 -11. **`<meta name="robots" content="noindex, nofollow">`**: 这可以控制搜索引擎爬虫的行为。在这个例子中,"noindex"告诉爬虫不要索引这个页面,"nofollow"告诉爬虫不要追踪页面上的链接。 -12. **`<link rel="canonical" href="http://example.com/"/>`**: 这告诉搜索引擎此页面是其URL的最佳表现形式,用于防止重复内容问题。 +4. **`<meta name="viewport" content="width=device-width, initial-scale=1.0">`**: 这是移动端优化的元标签。它让网页的宽度等于设备的宽度,初始缩放比例为 1。 +5. **`<meta name="description" content="Page description. No longer than 155 characters.">`**: 这提供了页面的简洁描述,这在搜索引擎结果页 (SERP) 中显示,可以提高页面的可点率(CTR)。 +6. **`<meta name="keywords" content="your, tags">`**: 这定义了网页的关键词。虽然现在搜索引擎很少使用这个元标签,但在 SEO 中还是有一些应用。 +7. **`<link rel="icon" href="favicon.ico" type="image/x-icon">`**: 这个 `<link>` 标签定义了网站的 favicon(收藏夹图标)。它在浏览器的标签页或地址栏中显示,也可以在用户的书签中显示。 +8. **`<link rel="stylesheet" href="styles.css">`**: 这链接了一个外部的 CSS 文件。虽然 `<link>` 标签不是 `<meta>`,但它在 `<head>` 中定义,也提供了一些元信息。 +9. **`<script src="script.js"></script>`**: 这链接了一个外部的 JavaScript 文件。与 `<link>` 标签类似,`<script>` 标签也提供了一些元信息。 +10. **`<meta http-equiv="refresh" content="30">`**: 这可以让页面在特定的时间后自动刷新。在这个例子中,页面会在 30 秒后自动刷新。 +11. **`<meta name="robots" content="noindex, nofollow">`**: 这可以控制搜索引擎爬虫的行为。在这个例子中,"noindex" 告诉爬虫不要索引这个页面,"nofollow" 告诉爬虫不要追踪页面上的链接。 +12. **`<link rel="canonical" href="http://example.com/"/>`**: 这告诉搜索引擎此页面是其 URL 的最佳表现形式,用于防止重复内容问题。 -这些是HTML元信息的一些常见形式,但还有更多的可能性。一般情况下,你应该根据你的**需要选择合适的元信息来优化网站的性能和搜索引擎优化(SEO)。** +这些是 HTML 元信息的一些常见形式,但还有更多的可能性。一般情况下,你应该根据你的**需要选择合适的元信息来优化网站的性能和搜索引擎优化(SEO)。** ### 基础标签 @@ -140,7 +140,7 @@ HTML 属性是 HTML 元素提供的附加信息。它们定义了元素的一些 ![grumpy-cat-attribute-small.png](https://static.7wate.com/img/2023/10/13/28f67550b8e32.png) -属性总是在 HTML 元素的开始标签中指定,通常是以 `name="value"` 的形式出现。这里的 `class` 是属性名,`editor-note`是属性值。 +属性总是在 HTML 元素的开始标签中指定,通常是以 `name="value"` 的形式出现。这里的 `class` 是属性名,`editor-note` 是属性值。 属性必须包含: @@ -151,12 +151,12 @@ HTML 属性是 HTML 元素提供的附加信息。它们定义了元素的一些 | 属性 | 描述 | 常用在的标签 | | --------------- | ------------------------------ | ------------------------------------------------------------ | | class | 定义元素的一种或多种类名 | 所有标签 | -| id | 为元素定义唯一的ID | 所有标签 | -| style | 为元素定义内联CSS样式 | 所有标签 | -| src | 定义引用的资源URL | `<img>`, `<script>`, `<iframe>`, `<source>`, `<audio>`, `<video>` | +| id | 为元素定义唯一的 ID | 所有标签 | +| style | 为元素定义内联 CSS 样式 | 所有标签 | +| src | 定义引用的资源 URL | `<img>`, `<script>`, `<iframe>`, `<source>`, `<audio>`, `<video>` | | alt | 定义图像的替代文本 | `<img>` | | width 和 height | 定义元素的宽度和高度 | `<img>`, `<canvas>`, `<iframe>`, `<video>`, `<object>` | -| href | 定义链接的URL | `<a>`, `<link>`, `<base>`, `<area>` | +| href | 定义链接的 URL | `<a>`, `<link>`, `<base>`, `<area>` | | target | 定义链接打开的位置 | `<a>`, `<base>`, `<form>` | | disabled | 定义元素为禁用状态 | `<button>`, `<fieldset>`, `<input>`, `<optgroup>`, `<option>`, `<select>`, `<textarea>` | | placeholder | 定义输入字段的占位符文本 | `<input>`, `<textarea>` | @@ -195,7 +195,7 @@ HTML5 是 HTML 的最新演进,它引入了一系列新的元素和属性, #### 语义元素 -HTML5 引入了一系列新的语义元素,以更准确地描述内容。例如,`<article>`,`<section>`,`<nav>`,`<header>`,`<footer>`,`<aside>`,`<figure>`,`<figcaption>`等。 +HTML5 引入了一系列新的语义元素,以更准确地描述内容。例如,`<article>`,`<section>`,`<nav>`,`<header>`,`<footer>`,`<aside>`,`<figure>`,`<figcaption>` 等。 ```html <article> @@ -289,7 +289,7 @@ worker.postMessage("Hello Worker"); #### 离线存储 -HTML5 引入了应用程序缓存(AppCache)和本地存储(localStorage和sessionStorage),使得网页可以在离线状态下工作,以及保存用户数据在本地。 +HTML5 引入了应用程序缓存(AppCache)和本地存储(localStorage 和 sessionStorage),使得网页可以在离线状态下工作,以及保存用户数据在本地。 ```java // Check if a new cache is available on page load. @@ -329,13 +329,13 @@ HTML 文档的基本结构通常包含以下几个主要部分: 在进行网页布局时,有一些关键的细节需要考虑。以下是一些常见的布局细节,可以帮助你创建具有良好用户体验和吸引力的网页布局。 -- **响应式设计:**确保你的网页能够适应不同屏幕尺寸和设备类型。使用CSS媒体查询和弹性布局来实现响应式设计,以便在桌面电脑、平板电脑和移动设备上都能提供良好的用户体验。 +- **响应式设计:**确保你的网页能够适应不同屏幕尺寸和设备类型。使用 CSS 媒体查询和弹性布局来实现响应式设计,以便在桌面电脑、平板电脑和移动设备上都能提供良好的用户体验。 - **网格布局:**使用网格系统来创建整齐的网页布局。将页面划分为网格列和行,以便在不同屏幕尺寸上灵活地排列和对齐内容。 -- **盒子模型:**了解CSS盒子模型的概念,包括内容区域、填充、边框和外边距。正确地设置和管理盒子模型属性可以影响元素的大小、间距和布局。 +- **盒子模型:**了解 CSS 盒子模型的概念,包括内容区域、填充、边框和外边距。正确地设置和管理盒子模型属性可以影响元素的大小、间距和布局。 - **流动布局:**使用流动布局使元素按照自然流动方式排列。避免使用固定宽度和高度,而是使用百分比或自适应单位来设置元素的尺寸。 -- **定位:**使用CSS定位属性(如相对定位、绝对定位和固定定位)来精确控制元素在页面中的位置。这可以用于创建重叠效果、浮动元素或固定位置的元素。 +- **定位:**使用 CSS 定位属性(如相对定位、绝对定位和固定定位)来精确控制元素在页面中的位置。这可以用于创建重叠效果、浮动元素或固定位置的元素。 - **色彩和对比度:**选择适合你网站主题和品牌的配色方案。确保文本和背景之间有足够的对比度,以确保可读性和可访问性。 @@ -369,7 +369,7 @@ HTML 文档的基本结构通常包含以下几个主要部分: | `autoplay` | 视频就绪后立即开始播放。注意,因为用户体验的问题,一些浏览器可能会忽略这个属性 | `<video src="movie.mp4" autoplay>` | | `loop` | 视频播放结束后从头开始 | `<video src="movie.mp4" loop>` | | `muted` | 将视频的声音默认设置为静音 | `<video src="movie.mp4" muted>` | -| `poster` | 在视频下载期间或用户在点击播放按钮之前,显示一个图像。图像的URL在 `poster` 属性中指定 | `<video src="movie.mp4" poster="poster.jpg">` | +| `poster` | 在视频下载期间或用户在点击播放按钮之前,显示一个图像。图像的 URL 在 `poster` 属性中指定 | `<video src="movie.mp4" poster="poster.jpg">` | | `preload` | 规定页面加载后立即加载视频。可以设置为 "auto"、"metadata" 或 "none" | `<video src="movie.mp4" preload="auto">` | | `width` 和 `height` | 定义视频播放器的高度和宽度 | `<video src="movie.mp4" width="320" height="240">` | | `src` | 规定媒介源的 URL | `<video src="movie.mp4">` | @@ -386,9 +386,9 @@ HTML 文档的基本结构通常包含以下几个主要部分: </audio> ``` -`<audio>` 标签的常用属性也包括 controls、autoplay、loop和 muted 等。 +`<audio>` 标签的常用属性也包括 controls、autoplay、loop 和 muted 等。 -### iframe +### Iframe `<iframe>` 是一个 HTML 标签,它允许我们在当前的 HTML 文档中嵌入另一个 HTML 文档。`<iframe>` 标签通常被用于嵌入来自不同源的内容,例如嵌入 Google 地图,YouTube 视频,或者其他网站的页面。 @@ -402,11 +402,11 @@ HTML 文档的基本结构通常包含以下几个主要部分: | 属性名 | 描述 | 示例 | | :------------------ | :----------------------------------------------------------- | :-------------------------------------------------- | -| `src` | 规定在 `<iframe>`中显示的文档的 URL | `<iframe src="https://www.example.com">` | -| `height` 和 `width` | 规定 `<iframe>`的高度和宽度,单位可以是像素(px)或百分比(%) | `<iframe src="demo.html" height="200" width="300">` | -| `frameborder` | 规定是否显示 `<iframe>`的边框。在 HTML5 中,这个属性已经废弃,应使用 CSS 来控制边框 | `<iframe src="demo.html" frameborder="0">` | -| `sandbox` | 允许对于 `<iframe>`中内容的一些限制,如阻止脚本执行,限制表单提交等 | `<iframe src="demo.html" sandbox>` | -| `allowfullscreen` | 允许 `<iframe>`的内容全屏显示,这对于嵌入视频特别有用 | `<iframe src="video.html" allowfullscreen>` | +| `src` | 规定在 `<iframe>` 中显示的文档的 URL | `<iframe src="https://www.example.com">` | +| `height` 和 `width` | 规定 `<iframe>` 的高度和宽度,单位可以是像素(px)或百分比(%) | `<iframe src="demo.html" height="200" width="300">` | +| `frameborder` | 规定是否显示 `<iframe>` 的边框。在 HTML5 中,这个属性已经废弃,应使用 CSS 来控制边框 | `<iframe src="demo.html" frameborder="0">` | +| `sandbox` | 允许对于 `<iframe>` 中内容的一些限制,如阻止脚本执行,限制表单提交等 | `<iframe src="demo.html" sandbox>` | +| `allowfullscreen` | 允许 `<iframe>` 的内容全屏显示,这对于嵌入视频特别有用 | `<iframe src="video.html" allowfullscreen>` | ### 兼容性 diff --git a/work/front-end-engineer/基础/JavaScript.md b/Work/full-stack/基础/JavaScript.md similarity index 96% rename from work/front-end-engineer/基础/JavaScript.md rename to Work/full-stack/基础/JavaScript.md index 655ab634..eadb4b71 100644 --- a/work/front-end-engineer/基础/JavaScript.md +++ b/Work/full-stack/基础/JavaScript.md @@ -5,7 +5,7 @@ keywords: - JavaScript - ES6 tags: - - JavaScript + - FullStack/基础 sidebar_position: 3 author: 7Wate date: 2023-10-13 @@ -13,7 +13,7 @@ date: 2023-10-13 **网页的心跳,使静态的网页获得了动态的脉搏。** -# JavaScript +## JavaScript JavaScript 是一种动态的、解释的编程语言,广泛应用于 Web 开发中。JavaScript 通过 BOM(浏览器对象模型)和 DOM(文档对象模型)与浏览器进行交互。 @@ -31,18 +31,18 @@ graph TB 这个图展示了 JavaScript、BOM、DOM 之间的关系。**其中,JavaScript 与 BOM 和 DOM 进行交互,BOM 管理浏览器窗口,DOM 管理网页内容。** -## 基础语法 +### 基础语法 JavaScript 的基础语法相对简单,主要包含变量、数据类型、运算符、语句与注释等。 -### 变量 +#### 变量 -JavaScript 通过`var`、`let` 和 `const` 关键词来声明变量,它们之间存在明显的区别: +JavaScript 通过 `var`、`let` 和 `const` 关键词来声明变量,它们之间存在明显的区别: - **`var` 是函数作用域的变量**,也就是说,如果你在一个函数内部声明了一个 `var` 变量,那么它只能在这个函数内部被访问。 - **`let` 和 `const` 都是块级作用域的变量**,它们只能在声明它们的代码块或者更小的作用域内被访问。 -`var`存在变量提升的特性,即在声明之前使用变量不会报错,但是值为`undefined`。而`let` 和 `const` 不存在变量提升,它们具有所谓的暂时性死区特性。 +`var` 存在变量提升的特性,即在声明之前使用变量不会报错,但是值为 `undefined`。而 `let` 和 `const` 不存在变量提升,它们具有所谓的暂时性死区特性。 ```js // var 声明的变量可以重复声明,会发生变量提升 @@ -58,7 +58,7 @@ const pi = 3.14; pi = 3; // 报错 ``` -### 数据类型 +#### 数据类型 JavaScript 中有七种数据类型: @@ -84,7 +84,7 @@ typeof s; // 'string' typeof b; // 'boolean' ``` -### 运算符 +#### 运算符 JavaScript 支持多种运算符,包括: @@ -107,11 +107,11 @@ console.log(a != b); // true console.log(a > 0 && b.includes('Hello')); // true ``` -### 语句 +#### 语句 JavaScript 提供了多种控制结构,包括条件语句、循环语句、分支语句和跳转语句。 -#### 条件语句 +##### 条件语句 使用 `if/else` 语句进行条件判断: @@ -135,7 +135,7 @@ if (n > 0) { } ``` -#### 循环语句 +##### 循环语句 使用 `for` 循环和 `while` 循环进行迭代操作: @@ -153,7 +153,7 @@ while (j < 5) { } ``` -#### 分支语句 +##### 分支语句 使用 `switch` 语句进行多分支判断: @@ -170,7 +170,7 @@ switch(fruit) { } ``` -#### 跳转语句 +##### 跳转语句 `break` 用于退出循环,`continue` 用于跳过当前循环: @@ -197,7 +197,7 @@ for (let i = 0; i < 10; i++) { */ ``` -### 函数 +#### 函数 函数是 JavaScript 中组织代码的基本单元,可以封装一段可以重复执行的代码块: @@ -220,7 +220,7 @@ const multiply = (x, y) => { 函数可以有参数,也可以有返回值。在 JavaScript 中,函数也是一种对象,可以被赋值给变量,也可以作为其他函数的参数或返回值。 -### 数组 +#### 数组 数组是一种特殊的对象,用于存储一系列的值: @@ -235,7 +235,7 @@ nums.includes(2); // 检查是否包含某个元素 在 JavaScript 中,数组是动态的,可以随时添加或删除元素。数组的长度可以通过其 `length` 属性获取。 -### 对象 +#### 对象 对象是 JavaScript 的核心概念,它是由一组键值对构成的数据集合: @@ -254,11 +254,11 @@ person.sayHi(); // 调用方法 **在 JavaScript 中,几乎所有的东西都是对象。**函数、数组、日期和正则表达式等都是特殊的对象。对象的属性和方法可以被动态创建和删除,非常灵活。 -### 其他特性 +#### 其他特性 JavaScript 还有许多其他高级特性,例如原型和继承、闭包、异步处理和模块等。 -#### 原型和继承 +##### 原型和继承 JavaScript 是基于原型的语言,每个对象都有一个指向它的原型(prototype)的链接。当试图访问一个对象的属性时,JavaScript 会首先在对象本身的属性中搜索,如果找不到,就会在它的原型对象中搜索。 @@ -292,7 +292,7 @@ console.log(student1.grade); // 5 student1.sayName(); // Tom ``` -#### 闭包 +##### 闭包 闭包(closure)是 JavaScript 中一个重要的概念。在 JavaScript 中,函数可以形成闭包。闭包是指有权访问另一个函数作用域中的变量的函数。 @@ -311,7 +311,7 @@ console.log(counter()); // 2 闭包的一个常见应用是使函数有私有变量。在上面的例子中,变量 `count` 就像 `createCounter` 函数的私有变量,外部无法访问,只能通过闭包来操作。 -#### 异步处理 +##### 异步处理 JavaScript 是单线程的,但是它可以通过事件和回调函数来处理异步操作。例如,我们可以使用 `setTimeout` 函数来延迟执行一段代码: @@ -327,7 +327,7 @@ console.log('!'); 在 ES6 中,JavaScript 引入了 Promise 和 async/await,使得异步编程更加方便和强大。 -#### 模块 +##### 模块 在现代的 JavaScript 开发中,我们通常会把代码分成多个模块(module),每个模块负责一部分功能。模块可以导入(import)其他模块,也可以导出(export)自己的接口给其他模块使用。 @@ -344,7 +344,7 @@ console.log(add(1, 2)); // 3 模块可以使我们的代码更加结构化和可维护。 -## BOM 模型 +### BOM 模型 **浏览器对象模型(Browser Object Model,BOM)是用于与浏览器交互的模型。**它提供了一种方式,使开发者能够通过 JavaScript 访问和操作浏览器的窗口。 @@ -451,7 +451,7 @@ classDiagram 需要注意的是,**BOM 并没有一个标准的定义,不同的浏览器可能实现了不同的 BOM。**但是,现代的浏览器已经在很大程度上实现了 BOM 的兼容性。 -### 窗口对象 +#### 窗口对象 窗口对象(Window Object)是 BOM 的核心对象,它代表了浏览器的窗口。所有的全局变量,函数都是它的方法和属性。例如,我们可以获取窗口的尺寸: @@ -492,7 +492,7 @@ window.setTimeout(function() { | 方法 | `window.clearTimeout()` | 清除由 `setTimeout` 设置的定时器 | | 方法 | `window.clearInterval()` | 清除由 `setInterval` 设置的定时器 | -### 文档对象 +#### 文档对象 文档对象(Document Object)是 HTML 文档的根节点,用于访问和操作网页内容。`document` 对象允许你访问和操作页面的内容,包括元素节点、属性节点和文本节点。 @@ -526,7 +526,7 @@ newElement.textContent = "This is a new paragraph."; document.body.appendChild(newElement); ``` -### 导航对象 +#### 导航对象 导航对象(Navigator Object)提供了关于浏览器的信息。下面是一些常见的 `navigator` 对象的属性: @@ -551,7 +551,7 @@ document.body.appendChild(newElement); console.log(navigator.userAgent); ``` -### 历史对象 +#### 历史对象 历史对象(History Object)提供了浏览器历史记录的操作方法。然而,由于隐私原因,您不能获取到用户的浏览历史具体细节,但可以用 `history` 对象来操作当前窗口的浏览历史。 @@ -579,7 +579,7 @@ history.back(); history.forward(); ``` -### 位置对象 +#### 位置对象 位置对象(Location Object)提供了当前窗口或标签的 URL 信息,以及一些方法来操作 URL。 @@ -599,7 +599,7 @@ history.forward(); | 方法 | `location.assign(URL)` | 加载新的页面 | | 方法 | `location.replace(URL)` | 替换当前页面 | -这些属性和方法使我们可以从 JavaScript 中读取和操作 URL 的各个部分。例如,我们可以使用 `location.href` 来获取当前页面的 URL,或者使用 `location.assign()` 来加载一个新的页面。还要注意的是,使用 `location.replace()` 方法不会在历史记录中留下记录,所以用户不能使用 "后退" 按钮返回。 +这些属性和方法使我们可以从 JavaScript 中读取和操作 URL 的各个部分。例如,我们可以使用 `location.href` 来获取当前页面的 URL,或者使用 `location.assign()` 来加载一个新的页面。还要注意的是,使用 `location.replace()` 方法不会在历史记录中留下记录,所以用户不能使用 " 后退 " 按钮返回。 例如,我们可以使用 `location.href` 来获取或设置当前页面的 URL,或者使用 `location.reload()` 来重载当前页面: @@ -611,14 +611,14 @@ console.log(location.href); location.reload(); ``` -### 屏幕对象 +#### 屏幕对象 屏幕对象(Screen Object)提供了关于用户的屏幕信息。这些信息包括屏幕的宽度、高度、颜色深度和像素深度等。以下是 `screen` 对象的一些常见属性: | 类型 | 名称 | 描述 | | ---- | -------------------- | ------------------------------------------------------------ | -| 属性 | `screen.availWidth` | 返回屏幕的可用宽度,以像素为单位(减去界面特性,如Windows任务栏) | -| 属性 | `screen.availHeight` | 返回屏幕的可用高度,以像素为单位(减去界面特性,如Windows任务栏) | +| 属性 | `screen.availWidth` | 返回屏幕的可用宽度,以像素为单位(减去界面特性,如 Windows 任务栏) | +| 属性 | `screen.availHeight` | 返回屏幕的可用高度,以像素为单位(减去界面特性,如 Windows 任务栏) | | 属性 | `screen.width` | 返回屏幕的总宽度,以像素为单位 | | 属性 | `screen.height` | 返回屏幕的总高度,以像素为单位 | | 属性 | `screen.colorDepth` | 返回目标设备或缓冲器上的颜色深度,以位为单位 | @@ -633,7 +633,7 @@ console.log("Screen width: " + screen.width); console.log("Screen height: " + screen.height); ``` -## DOM 模型 +### DOM 模型 **文档对象模型(Document Object Model,DOM)是一种编程接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。**DOM 将文档解析为一个由节点和对象(包括属性和方法)构成的结构集合,这样就可以使用脚本语言(如 JavaScript)来操作这些节点和对象。 @@ -712,13 +712,13 @@ classDiagram 开发者可以使用 DOM API 来获取、创建、修改或删除这些节点,从而实现对网页内容和结构的动态控制。这是现代网页交互性的基础。 -### 获取元素 +#### 获取元素 | 方法 | 描述 | 示例 | | :-------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| `document.getElementById(id)` | 通过元素ID获取元素。此方法返回一个对象,表示带有指定 ID 的元素。 | `document.getElementById('myId')` | +| `document.getElementById(id)` | 通过元素 ID 获取元素。此方法返回一个对象,表示带有指定 ID 的元素。 | `document.getElementById('myId')` | | `document.getElementsByClassName(name)` | 通过类名获取元素。此方法返回一个 HTMLCollection 对象,包含了文档中所有具有指定类名的元素。 | `document.getElementsByClassName('myClass')` | -| `document.getElementsByTagName(name)` | 通过标签名获取元素。此方法返回一个HTMLCollection对象,包含了文档中所有具有指定标签名的元素。 | `document.getElementsByTagName('div')` | +| `document.getElementsByTagName(name)` | 通过标签名获取元素。此方法返回一个 HTMLCollection 对象,包含了文档中所有具有指定标签名的元素。 | `document.getElementsByTagName('div')` | | `document.querySelector(selector)` | 返回文档中匹配指定 CSS 选择器的第一个元素。 | `document.querySelector('.myClass')` | | `document.querySelectorAll(selector)` | 返回文档中匹配指定 CSS 选择器的所有元素。此方法返回一个 NodeList 对象。 | `document.querySelectorAll('.myClass')` | | `document.getElementsByName(name)` | 通过元素的 Name 属性获取元素。此方法返回一个 NodeList 对象,包含了文档中所有具有指定 Name 属性的元素。 | `document.getElementsByName('myName')` | @@ -743,7 +743,7 @@ const contents = document.getElementsByClassName('content'); const content = document.querySelector('.content'); ``` -### 改变元素 +#### 改变元素 | 方法 | 描述 | 示例 | | ----------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------- | @@ -778,7 +778,7 @@ content.classList.add('hidden'); content.classList.remove('hidden'); ``` -### 创建元素 +#### 创建元素 | 方法 | 描述 | 示例 | | -------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | @@ -806,7 +806,7 @@ div.style.color = 'blue'; document.body.appendChild(div); ``` -### 事件处理 +#### 事件处理 | 方法 | 描述 | 示例 | | ---------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------------------------- | @@ -834,11 +834,11 @@ window.addEventListener('load', () => { }); ``` -## 事件处理 +### 事件处理 JavaScript 可以对各种事件做出响应。 -### 鼠标事件 +#### 鼠标事件 常见的鼠标事件: @@ -872,7 +872,7 @@ window.addEventListener('mousemove', (event) => { }) ``` -### 键盘事件 +#### 键盘事件 常见的键盘事件: @@ -902,7 +902,7 @@ document.addEventListener('keydown', (event) => { }); ``` -### 其他事件 +#### 其他事件 还有一些其他常用的事件: @@ -924,16 +924,16 @@ document.addEventListener('keydown', (event) => { 这只是可能发生的事件类型的一部分。实际上,HTML DOM API 定义了很多不同的事件类型,可以用来处理各种各样的用户交互和页面生命周期事件。 -## ES6+ 新特性 +### ES6+ 新特性 ES6 开始 JavaScript 引入了许多新特性,极大地丰富了语言本身。 -### let 和 const +#### Let 和 Const - let 声明的变量有块级作用域,这意味着 let 声明的变量只在其声明的块或子块中可用,而在外部不可访问。这与 var 不同,var 声明的变量是函数作用域或全局作用域。 - const 声明的是不可修改的常量,一旦声明,其值就不能改变。这并不意味着它指向的对象不可改变,例如,const 声明的对象,我们仍然可以修改其属性。 -### 箭头函数 +#### 箭头函数 箭头函数提供了一种更简洁的函数定义方式,它有几个特点: @@ -952,16 +952,16 @@ function add(a, b) { const add = (a, b) => a + b; ``` -### 模板字符串 +#### 模板字符串 -模板字符串使用反引号(``),可以内嵌变量和表达式,也支持多行字符串。 +模板字符串使用反引号 (``),可以内嵌变量和表达式,也支持多行字符串。 ```js const name = 'John'; console.log(`Hello ${name}!`) // Hello John! ``` -### 对象解构 +#### 对象解构 对象解构允许我们从对象中提取属性作为变量,这使得从对象中获取数据变得非常方便。解构也可以用于数组,可以让我们更快速地获取数组中的元素。 @@ -975,7 +975,7 @@ const person = { const { name, age } = person; ``` -### 模块化 +#### 模块化 ES6 引入了模块化的概念,可以使用 import 和 export 实现模块的导入和导出。这个特性使得 JavaScript 代码更加模块化,便于组织和管理。 @@ -989,11 +989,11 @@ import { name } from './foo.js'; 等等众多特性,极大地推动了 JavaScript 的发展。 -## 异步编程 +### 异步编程 JavaScript 的异步编程主要基于 Promise 和 async/await。 -### Promise +#### Promise Promise 是 JavaScript 中处理异步操作的一种方式,是一种代表未来将要发生事件的对象。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise 的状态一旦改变,就不会再变。 @@ -1016,7 +1016,7 @@ fetchData().then(data => { }); ``` -### async/await +#### async/await async/await 是基于 Promise 实现的,它是一种更人性化的处理异步的方式。它让异步代码看起来更像同步代码,大大提高了代码的可读性和可维护性。 diff --git a/work/front-end-engineer/工具/PM2 工具.md b/Work/full-stack/工具/PM2 工具.md similarity index 90% rename from work/front-end-engineer/工具/PM2 工具.md rename to Work/full-stack/工具/PM2 工具.md index c88dd2b8..be557f70 100644 --- a/work/front-end-engineer/工具/PM2 工具.md +++ b/Work/full-stack/工具/PM2 工具.md @@ -5,7 +5,7 @@ keywords: - Node - PM2 tags: - - Node + - FullStack/工具 sidebar_position: 3 author: 7Wate date: 2023-10-12 @@ -31,14 +31,14 @@ npm install -g pm2 安装 PM2 后,它会自动创建一些目录,这些目录对于管理和运行应用程序非常重要。以下是这些目录的简要介绍: -- `$HOME/.pm2`:包含所有与PM2相关的文件。 +- `$HOME/.pm2`:包含所有与 PM2 相关的文件。 - `$HOME/.pm2/logs`:包含所有应用程序的日志文件。 -- `$HOME/.pm2/pids`:包含所有应用程序的进程ID文件。 -- `$HOME/.pm2/pm2.log`:PM2的日志文件。 -- `$HOME/.pm2/pm2.pid`:PM2的进程ID文件。 -- `$HOME/.pm2/rpc.sock`:用于远程命令的Socket文件。 -- `$HOME/.pm2/pub.sock`:用于发布事件的Socket文件。 -- `$HOME/.pm2/conf.js`:PM2的配置文件。 +- `$HOME/.pm2/pids`:包含所有应用程序的进程 ID 文件。 +- `$HOME/.pm2/pm2.log`:PM2 的日志文件。 +- `$HOME/.pm2/pm2.pid`:PM2 的进程 ID 文件。 +- `$HOME/.pm2/rpc.sock`:用于远程命令的 Socket 文件。 +- `$HOME/.pm2/pub.sock`:用于发布事件的 Socket 文件。 +- `$HOME/.pm2/conf.js`:PM2 的配置文件。 ### 常用命令 @@ -51,7 +51,7 @@ PM2 提供了许多常用的命令,用于管理和操作应用程序。以下 - `pm2 list/l/ls`:查看所有运行中的应用程序的状态和详细信息。 - `pm2 describe app.js`:查看特定应用程序的详细信息。 - `pm2 logs`:显示所有应用程序的日志。 -- `pm2 monit`:启动一个终端仪表板,显示每个应用程序的CPU和内存使用情况。 +- `pm2 monit`:启动一个终端仪表板,显示每个应用程序的 CPU 和内存使用情况。 ## 使用 diff --git a/work/front-end-engineer/工具/Webpack.md b/Work/full-stack/工具/Webpack.md similarity index 99% rename from work/front-end-engineer/工具/Webpack.md rename to Work/full-stack/工具/Webpack.md index 1b72581f..e7c5f923 100644 --- a/work/front-end-engineer/工具/Webpack.md +++ b/Work/full-stack/工具/Webpack.md @@ -6,7 +6,7 @@ keywords: - JavaScript - 打包 tags: - - JavaScript + - FullStack/工具 sidebar_position: 2 author: 7Wate date: 2023-10-17 diff --git a/work/front-end-engineer/工具/包管理工具.md b/Work/full-stack/工具/包管理工具.md similarity index 97% rename from work/front-end-engineer/工具/包管理工具.md rename to Work/full-stack/工具/包管理工具.md index 956c341f..6c1bec20 100644 --- a/work/front-end-engineer/工具/包管理工具.md +++ b/Work/full-stack/工具/包管理工具.md @@ -2,19 +2,19 @@ title: 包管理器 description: JavaScript 包管理工具 keywords: -- JavaScript -- 包管理 -- npm -- yarn -- pnpm + - JavaScript + - 包管理 + - npm + - yarn + - pnpm tags: -- JavaScript + - FullStack/工具 sidebar_position: 1 author: 7Wate date: 2023-10-17 --- -## npm +## Npm **[npm](https://www.npmjs.com/) 是 JavaScript 编写的软件包管理工具,同时也是 node.js 的默认包管理工具。** @@ -97,7 +97,7 @@ node_modules ### 安装方式 -可以通过 [node.js 官网](https://nodejs.org/zh-cn/)下载安装,或者直接使用如下脚本。 +可以通过 [node.js 官网](https://nodejs.org/zh-cn/) 下载安装,或者直接使用如下脚本。 ```shell curl -qL https://www.npmjs.com/install.sh | sh @@ -120,7 +120,7 @@ curl -qL https://www.npmjs.com/install.sh | sh | npm update <模块> [-g] | 升级局部模块或全局的指定模块 | | npm run <脚本> | 运行 package.json 脚本 | -## yarn +## Yarn **[yarn](https://yarnpkg.com/) 同样采用扁平结构,它的出现是为了解决 npm V3 依赖安装速度慢和不确定性。** @@ -128,7 +128,7 @@ curl -qL https://www.npmjs.com/install.sh | sh yarn 采用**并行模式**替代 npm **串行模式**安装包,并且利用全局缓存可以提升较大安装速度。 -### lockfile 解决不确定性 +### Lockfile 解决不确定性 安装依赖时,根据 package.josn 生成一份 yarn.lock 文件。因为 lockfile 里记录了依赖,以及依赖的子依赖、依赖的版本、获取地址、验证模块完整性的 hash;所以即使是不同的安装顺序,相同的依赖关系在任何的环境和容器中,都能得到统一的 node_modules 目录结构,保证了依赖安装的确定性。 @@ -157,7 +157,7 @@ npm install --global yarn | yarn up [package]@[version \| tag] | 升级指定版本依赖 | | yarn remove [package] | 删除指定依赖 | -## pnpm +## Pnpm ![img](https://static.7wate.com/img/2022/09/06/962148e0d436e.jpg) @@ -206,13 +206,13 @@ pnpm 这套全新的机制设计地十分巧妙,不仅兼容 node 的依赖解 ### 安装方式 -#### npm +#### Npm ```shell npm install -g pnpm ``` -#### curl +#### Curl ```shell curl -fsSL https://get.pnpm.io/install.sh | sh - diff --git a/work/front-end-engineer/文化/历史发展.md b/Work/full-stack/文化/历史发展.md similarity index 81% rename from work/front-end-engineer/文化/历史发展.md rename to Work/full-stack/文化/历史发展.md index 597012e2..df20494b 100644 --- a/work/front-end-engineer/文化/历史发展.md +++ b/Work/full-stack/文化/历史发展.md @@ -5,7 +5,7 @@ keywords: - 前端开发 - 历史发展 tags: - - HTML5 + - FullStack/文化 sidebar_position: 2 author: 7Wate date: 2023-10-16 @@ -13,35 +13,35 @@ date: 2023-10-16 前端开发已经经历了长达几十年的发展历程,从最初的静态网页到现在的复杂的 Web 交互应用,前端开发的技术和工具都发生了巨大的变化。下面是前端开发的一些主要发展阶段: -## 1990年代:静态网页时代 +## 1990 年代:静态网页时代 在 1990 年,Tim Berners-Lee 发明了万维网,也就标志着网页的诞生。在这个阶段,网页主要由纯文本构成,使用 HTML(HyperText Markup Language)进行标记。这些网页被称为静态网页,因为它们的内容在服务器端生成,用户端不能交互和修改。 -## 1995年:JavaScript 的诞生 +## 1995 年:JavaScript 的诞生 1995 年,JavaScript 语言在 Netscape 浏览器上首次亮相,由 Brendan Eich 发明。最初,JavaScript 被用作一种客户端的脚本语言,用于实现网页上的简单交互效果,如表单验证等。 -## 1996年: CSS 的诞生 +## 1996 年: CSS 的诞生 1996 年,W3C(万维网联盟)发布了 CSS(Cascading Style Sheets)的第一版规范,标志着样式表的诞生。CSS 的出现使得开发者可以更加方便地控制网页的样式和布局。 -## 2000年代初:动态网页和 AJAX +## 2000 年代初:动态网页和 AJAX 2000 年代初,随着 JavaScript 和服务端技术的发展,网页开始从静态向动态转变。AJAX(Asynchronous JavaScript and XML)技术的出现,使得网页可以在不刷新页面的情况下与服务器进行交互,极大地提高了用户体验。 -## 2006年:jQuery 的出现 +## 2006 年:jQuery 的出现 -2006年,jQuery 库发布,提供了一种简洁易用的 API 来操作 HTML 文档、处理事件、创建动画以及进行 AJAX 交互。jQuery 的出现极大地简化了前端开发,使得开发者可以用更少的代码完成更多的功能。 +2006 年,jQuery 库发布,提供了一种简洁易用的 API 来操作 HTML 文档、处理事件、创建动画以及进行 AJAX 交互。jQuery 的出现极大地简化了前端开发,使得开发者可以用更少的代码完成更多的功能。 -## 2008年:Chrome 浏览器和 V8 引擎 +## 2008 年:Chrome 浏览器和 V8 引擎 2008 年,Google 发布了 Chrome 浏览器和 V8 JavaScript 引擎。V8 引擎的出现极大地提升了 JavaScript 的运行速度,使得 JavaScript 能够用于更复杂的应用。 -## 2010年代:前端框架和工具的崛起 +## 2010 年代:前端框架和工具的崛起 2010 年代,前端开发进入了一个新的时代。一方面,出现了大量的前端框架和库,如 Angular、React 和 Vue.js,使得开发者可以更容易地构建复杂的前端应用。另一方面,前端开发工具和生态系统也得到了极大的发展,如 Node.js、webpack、Babel、ESLint 等。 -## 2015年至今:现代前端开发 +## 2015 年至今:现代前端开发 2015 年,ECMAScript 6(也称为 ES2015)的发布,为 JavaScript 带来了许多新的语言特性,如类、模块、箭头函数、Promises、生成器等。同时,随着 Web Components 和 Progressive Web Apps(PWA)的出现,前端开发正在朝着更加模块化、组件化和原生应用化的方向发展。 diff --git a/work/front-end-engineer/文化/概述.md b/Work/full-stack/文化/概述.md similarity index 99% rename from work/front-end-engineer/文化/概述.md rename to Work/full-stack/文化/概述.md index 91b32fe2..36fc1d7c 100644 --- a/work/front-end-engineer/文化/概述.md +++ b/Work/full-stack/文化/概述.md @@ -5,7 +5,7 @@ keywords: - 前端开发 - HTML5 tags: - - HTML5 + - FullStack/文化 sidebar_position: 1 author: 7Wate date: 2023-10-13 diff --git a/work/front-end-engineer/文化/现代化开发工具链.md b/Work/full-stack/文化/现代化开发工具链.md similarity index 96% rename from work/front-end-engineer/文化/现代化开发工具链.md rename to Work/full-stack/文化/现代化开发工具链.md index 944213e9..b1b4a0d5 100644 --- a/work/front-end-engineer/文化/现代化开发工具链.md +++ b/Work/full-stack/文化/现代化开发工具链.md @@ -5,7 +5,7 @@ keywords: - 前端开发 - 工具 tags: - - HTML5 + - FullStack/文化 sidebar_position: 3 author: 7Wate date: 2023-10-16 @@ -17,7 +17,7 @@ date: 2023-10-16 [Git](https://git-scm.com/) 是一个开源的分布式版本控制系统,用于跟踪和记录项目文件的更改历史。[GitHub](https://github.com/) 是一个基于 Git 的代码托管平台, 提供了代码审查、项目管理、版本控制等功能。使用 GitFlow 可以实现更规范的分支管理,Pull Request 允许代码审查,是团队协作的重要方式。 -## 包管理器:npm、yarn 和 pnpm +## 包管理器:npm、yarn 和 Pnpm 包管理器用于自动处理项目的依赖关系。[npm](https://www.npmjs.com/)(Node Package Manager) 是 Node.js 的默认包管理器,[yarn](https://yarnpkg.com/) 由 Facebook 开发,提供更快速度。[pnpm](https://pnpm.io/) 结合了两者优点,也越来越受欢迎。 @@ -83,7 +83,7 @@ date: 2023-10-16 [Lighthouse](https://developers.google.com/web/tools/lighthouse) 是一种开源工具,可以对网页进行性能、可访问性、最佳实践、SEO 等方面的评估。[Webpack Bundle Analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer) 是一个插件,可以帮助开发者理解 webpack 打包的输出文件,找出优化的机会。 -## API Mocking:Mirage JS 和 json-server +## API Mocking:Mirage JS 和 Json-server [json-server](https://github.com/typicode/json-server) 和 [Mirage JS](https://miragejs.com/) 可以用于生成模拟的 RESTful API,帮助前端开发者在后端 API 还没准备好的情况下进行开发和测试。 @@ -93,4 +93,4 @@ date: 2023-10-16 ## 调试工具:DevTools、VS Code 调试 -[Chrome DevTools](https://developer.chrome.com/docs/devtools/)和VS Code的调试功能用于前端代码调试。 +[Chrome DevTools](https://developer.chrome.com/docs/devtools/) 和 VS Code 的调试功能用于前端代码调试。 diff --git a/work/roadmap/home.md b/Work/roadmap/home.md similarity index 91% rename from work/roadmap/home.md rename to Work/roadmap/home.md index f714deac..38bdc760 100644 --- a/work/roadmap/home.md +++ b/Work/roadmap/home.md @@ -1,7 +1,5 @@ --- -slug: / title: 求职之路 -sidebar_position: 1 --- ![无产阶级](https://static.7wate.com/img/2022/07/11/3d7269b20b6e3.png) diff --git a/work/roadmap/求职经验/互联网行业-郑州.md b/Work/roadmap/求职经验/互联网行业-郑州.md similarity index 88% rename from work/roadmap/求职经验/互联网行业-郑州.md rename to Work/roadmap/求职经验/互联网行业-郑州.md index 407ba443..f9ad6781 100644 --- a/work/roadmap/求职经验/互联网行业-郑州.md +++ b/Work/roadmap/求职经验/互联网行业-郑州.md @@ -2,6 +2,8 @@ id: 互联网行业-郑州 title: 互联网行业-郑州 data: 2022年2月15日 +tags: + - 工作/面试 --- 大家好呀,我是大白,在我咨询了一些朋友并且经过好几位郑州当地读者补充后,终于整理出来一篇比较全面的介绍郑州互联网环境的文章,希望大家支持呀! @@ -28,13 +30,13 @@ data: 2022年2月15日 ### 浪潮 -浪潮在郑州的研发中心法定节假日加班是有加班费的,但平时加班就没有加班费了,每月要求加够50个小时的班。薪资水平大家也可以参考下 Boss 上放出的招聘薪资水平。 +浪潮在郑州的研发中心法定节假日加班是有加班费的,但平时加班就没有加班费了,每月要求加够 50 个小时的班。薪资水平大家也可以参考下 Boss 上放出的招聘薪资水平。 ![v2-87a21b57bd792c3a89457c1f01815acd_1440w](https://static.7wate.com/img/2022/02/15/323e889b94c86.jpg) ### 新华三 -新华三大部分情况下能双休,周末加班也有加班费,不过涨薪很缓慢。在网上看到一个帖子,有人问 offer 选西安中兴还算郑州新华三,中兴和华三的职工都在互相劝退,说这是一个送命题。薪资水平大家还是参考下Boss上的招聘薪资水平吧。 +新华三大部分情况下能双休,周末加班也有加班费,不过涨薪很缓慢。在网上看到一个帖子,有人问 offer 选西安中兴还算郑州新华三,中兴和华三的职工都在互相劝退,说这是一个送命题。薪资水平大家还是参考下 Boss 上的招聘薪资水平吧。 ![v2-49b9acae899af615681b482f45e141f3_1440w](https://static.7wate.com/img/2022/02/15/53d8a41694a07.jpg) @@ -46,7 +48,7 @@ UU 跑腿的工作环境以及各种福利都还算不错! 面试的话,总体体验还不错,技术面试一般问的还比较全面。拿 Java 后端开发来说,像 SQL 优化、分布式、缓存这些一般都会问到。 -薪资的话,看准网上的平均薪资是 10k 附近,其中后端开发的薪资在 14k 附近,前端开发的薪资在 10k 附近,软件测试的薪资在 10k 附近(薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 +薪资的话,看准网上的平均薪资是 10k 附近,其中后端开发的薪资在 14k 附近,前端开发的薪资在 10k 附近,软件测试的薪资在 10k 附近 (薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 ![v2-f743389a55553b401e6ece31a3fe9283_1440w](https://static.7wate.com/img/2022/02/15/ed76d4ea629fb.jpg) @@ -58,7 +60,7 @@ UU 跑腿的工作环境以及各种福利都还算不错! 整体面试体验不错,效率也非常高,像技术面试的话一般是三轮或者四轮。不过,中原消费金融比较看重学历,985/211 上岸的几率比较大。 -薪资的话,看准网上的平均薪资是 16k 附近,其中后端开发的薪资在 17k 附近,前端开发的薪资在 16k 附近,软件测试的薪资在 14k 附近(薪资水平仅供参考,实际情况因人和岗位或许会有一些出入,应该到不了这么高)。 +薪资的话,看准网上的平均薪资是 16k 附近,其中后端开发的薪资在 17k 附近,前端开发的薪资在 16k 附近,软件测试的薪资在 14k 附近 (薪资水平仅供参考,实际情况因人和岗位或许会有一些出入,应该到不了这么高)。 注意:大家注意一个情况,中原消费的软件研发岗位大部分都搬迁到上海了,目前在郑州的大部分是行政岗位,只有少部分研发岗位。 @@ -66,13 +68,13 @@ UU 跑腿的工作环境以及各种福利都还算不错! ### 刀锋互娱 -刀锋互娱是一家专注游戏服务市场的互联网公司,2019 年完成 A+轮融资,平台注册用户量突破千万。 +刀锋互娱是一家专注游戏服务市场的互联网公司,2019 年完成 A+ 轮融资,平台注册用户量突破千万。 旗下比较出名的产品有租号玩、一派陪玩,都是和游戏领域相关的产品。相信比较喜欢玩游戏的小伙伴应该对这个两个产品有了解。 整体面试不是很难,薪资相对来说也还可以。 -薪资的话,看准网上的平均薪资是 16k 附近,其中后端开发(C++)的薪资在 20k 附近,前端开发的薪资在 8.5k 附近,软件测试的薪资在 9.5k 附近(薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 +薪资的话,看准网上的平均薪资是 16k 附近,其中后端开发(C++)的薪资在 20k 附近,前端开发的薪资在 8.5k 附近,软件测试的薪资在 9.5k 附近 (薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 ![v2-26b8d6c546d343dbedaaa28808c24c77_1440w](https://static.7wate.com/img/2022/02/15/9bc84efa4f1f4.jpg) @@ -84,7 +86,7 @@ UU 跑腿的工作环境以及各种福利都还算不错! 技术面试的话,一般第一面是笔试,笔试之后会再问你一些相关的技术问题。 -薪资的话,看准网上的平均薪资是 7.6k 附近,其中后端开发(Java)的薪资在 9k 附近,前端开发的薪资在 9k 附近,软件测试的薪资在 5.5k 附近(薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 +薪资的话,看准网上的平均薪资是 7.6k 附近,其中后端开发(Java)的薪资在 9k 附近,前端开发的薪资在 9k 附近,软件测试的薪资在 5.5k 附近 (薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 ![v2-43560cba2194c580f7309a29d34cab99_1440w](https://static.7wate.com/img/2022/02/15/f28ab45fb730d.jpg) @@ -106,7 +108,7 @@ UU 跑腿的工作环境以及各种福利都还算不错! 另外,根据大部分面试求职者的反馈来看,这家公司的整体面试体验比较差。 -薪资的话,看准网上的平均薪资是 12k 附近,其中后端开发(Java)的薪资在 14k 附近,前端开发的薪资在 8k 附近,软件测试的薪资在 10k 附近(薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 +薪资的话,看准网上的平均薪资是 12k 附近,其中后端开发(Java)的薪资在 14k 附近,前端开发的薪资在 8k 附近,软件测试的薪资在 10k 附近 (薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 ![v2-f1cc7546f8da1ab963659cb9e7e72b66_1440w](https://static.7wate.com/img/2022/02/15/10330e9ba4129.jpg) @@ -114,11 +116,11 @@ UU 跑腿的工作环境以及各种福利都还算不错! 妙优车主要做的是汽车方面的业务,涵盖整车销售、汽车金融、汽车保险、汽车用品、汽车美容等方面。 -公司发展一般,网上也有一些黑历史(可以自己查一下)。 +公司发展一般,网上也有一些黑历史 (可以自己查一下)。 不过,根据大部分面试求职者的反馈来看,这家公司的整体面试体验还是可以的。 -薪资这块的一般偏上,看准网上的平均薪资是 11k 附近,其中后端开发(Java)的薪资在 12k 附近,前端开发的薪资在 10k 附近(薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 +薪资这块的一般偏上,看准网上的平均薪资是 11k 附近,其中后端开发(Java)的薪资在 12k 附近,前端开发的薪资在 10k 附近 (薪资水平仅供参考,实际情况因人和岗位或许会有一些出入)。 ![v2-e15a24e4a0abe58864aa4ccde35c0de5_1440w](https://static.7wate.com/img/2022/02/15/a02b34e77e2e4.jpg) diff --git a/work/roadmap/求职经验/写给软件工程师的建议.md b/Work/roadmap/求职经验/写给软件工程师的建议.md similarity index 95% rename from work/roadmap/求职经验/写给软件工程师的建议.md rename to Work/roadmap/求职经验/写给软件工程师的建议.md index 9e51ecd7..4ab3c0f9 100644 --- a/work/roadmap/求职经验/写给软件工程师的建议.md +++ b/Work/roadmap/求职经验/写给软件工程师的建议.md @@ -2,6 +2,8 @@ id: 写给软件工程师的建议 title: 写给软件工程师的建议 data: 2022 年 3 月 21 日 +tags: + - 工作/面试 --- ## 前言 @@ -33,11 +35,14 @@ data: 2022 年 3 月 21 日 人非圣贤,是人都会犯错,尤其是对软件开发者来说,犯错更是一件再正常不过的事。之前听公司里一位前辈分享,他说现在的年轻人越来越谨慎,不敢犯错,怕承担责任,但其实犯错有它的积极意义。 刚参加工作那会儿,记得是一个周五的下午。我匆忙提完代码,准备上完线早早下班。结果一个操作失误,把测试环境的代码发布到了线上。没过多久,办公室开始炸了,所有人都发现我们的首页白屏了,因为线上请求全打到了测试环境的一台机器上,整个事故持续了半小时。事后做了参加工作以来第一次 case study,总结出了几点,让我到现在也受用: +   1. 不要在周五下午上线。因为一旦出事,可能也会连累你的同事跟你一起加班。减少上线频率肯定是可以减少事故发生概率的。 +   2. 对上线保持敬畏之心,做好各个环节的线上验证。这样就算不能拦截问题,也可以早一点发现问题。 +   3. 机器比人可靠。对于上线这种高危操作,应该将过程尽量自动化,交给机器来完成,而不是人手动的操作。机器要比人可靠得多。这其实就涉及到一个公司的基础技术设施的建设,大公司在这方面做的要比小公司好很多。 -这种可以让人铭记终身的case,对个人的成长是很有帮助的。所以我想说,不要害怕犯错,犯错后积极总结经验,避免同样的错误发生第二次,才是最重要的。顺便还想说一下,找工作时,团队对于新人的宽容度或者说容错率,我觉得也是求职者需要考虑的一个因素,**好的团队氛围会给予新人充足的试错空间**,这对于新人成长是很重要的。 +这种可以让人铭记终身的 case,对个人的成长是很有帮助的。所以我想说,不要害怕犯错,犯错后积极总结经验,避免同样的错误发生第二次,才是最重要的。顺便还想说一下,找工作时,团队对于新人的宽容度或者说容错率,我觉得也是求职者需要考虑的一个因素,**好的团队氛围会给予新人充足的试错空间**,这对于新人成长是很重要的。 ## 不要设限 @@ -64,5 +69,5 @@ data: 2022 年 3 月 21 日 以上是我认为工程师成长路上很重要的几点。有些想法可能会随着年龄的增长、阅历的提升而改变,也希望最好会变化,毕竟如果一成不变,意味着也就没有成长了。 > 转载《写给软件工程师的几条成长建议》 -> +> > 作者:FrankXiong 地址:[点击打开](https://blog.skrskrskrskr.com/article/%E5%86%99%E7%BB%99%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%9A%84%E5%87%A0%E6%9D%A1%E6%88%90%E9%95%BF%E5%BB%BA%E8%AE%AE/) diff --git a/work/roadmap/简历攻略/IT 类简历.md b/Work/roadmap/简历攻略/IT 类简历.md similarity index 92% rename from work/roadmap/简历攻略/IT 类简历.md rename to Work/roadmap/简历攻略/IT 类简历.md index f11ae710..ade2025b 100644 --- a/work/roadmap/简历攻略/IT 类简历.md +++ b/Work/roadmap/简历攻略/IT 类简历.md @@ -2,7 +2,10 @@ id: IT 类简历 title: IT 类简历 data: 2022年6月24日 +tags: + - 工作/面试 --- + ## 思维导图 ![IT 类简历.png](https://static.7wate.com/img/2022/06/24/c2c633771a848.png) diff --git a/work/roadmap/简历攻略/简历原则.md b/Work/roadmap/简历攻略/简历原则.md similarity index 91% rename from work/roadmap/简历攻略/简历原则.md rename to Work/roadmap/简历攻略/简历原则.md index 0905bbe0..875201db 100644 --- a/work/roadmap/简历攻略/简历原则.md +++ b/Work/roadmap/简历攻略/简历原则.md @@ -3,7 +3,10 @@ id: 简历原则 title: 简历原则 sidebar_position: 1 data: 2022年6月24日 +tags: + - 工作/面试 --- + ## 思维导图 ![简历原则.png](https://static.7wate.com/img/2022/06/24/cdcf5838a909b.png) diff --git a/work/roadmap/职业规划/开发者职业路线图.md b/Work/roadmap/职业规划/开发者职业路线图.md similarity index 94% rename from work/roadmap/职业规划/开发者职业路线图.md rename to Work/roadmap/职业规划/开发者职业路线图.md index eb0177e9..8f093e87 100644 --- a/work/roadmap/职业规划/开发者职业路线图.md +++ b/Work/roadmap/职业规划/开发者职业路线图.md @@ -2,10 +2,10 @@ title: 开发者职业路线图 description: 开发者职业路线图 keywords: -- 开发者 -- 路线图 + - 开发者 + - 路线图 tags: -- 职业规划 + - 工作/规划 sidebar_position: 3 author: 7Wate date: 2022-09-29 diff --git a/work/roadmap/职业规划/职业宏观规划图.md b/Work/roadmap/职业规划/职业宏观规划图.md similarity index 93% rename from work/roadmap/职业规划/职业宏观规划图.md rename to Work/roadmap/职业规划/职业宏观规划图.md index 2221c75d..7534dadc 100644 --- a/work/roadmap/职业规划/职业宏观规划图.md +++ b/Work/roadmap/职业规划/职业宏观规划图.md @@ -2,14 +2,15 @@ title: 职业宏观规划图 description: 职业宏观规划图 keywords: -- 职业 -- 规划图 + - 职业 + - 规划图 tags: -- 职业规划 + - 工作/规划 sidebar_position: 1 author: 7Wate date: 2022-09-29 --- + ## 职业选择 ![职业规划](https://static.7wate.com/img/2022/01/21/217de37a34568.png) diff --git a/work/roadmap/职业规划/职业宏观路线图.md b/Work/roadmap/职业规划/职业宏观路线图.md similarity index 99% rename from work/roadmap/职业规划/职业宏观路线图.md rename to Work/roadmap/职业规划/职业宏观路线图.md index dbcb25d6..f693f1ab 100644 --- a/work/roadmap/职业规划/职业宏观路线图.md +++ b/Work/roadmap/职业规划/职业宏观路线图.md @@ -2,14 +2,15 @@ title: 职业宏观路线图 description: 职业宏观路线图 keywords: -- 职业 -- 路线图 + - 职业 + - 路线图 tags: -- 职业规划 + - 工作/规划 sidebar_position: 2 author: 7Wate date: 2022-09-29 --- + 从整体上看,程序员的职业发展可以分为 4 条路线,分别是工作、SOHO、创业和投资,它们的难度逐次递增,人生阶层也逐次递增。当然这个路线也不是固定的,可能随时切换,比如你放弃了工作可以 SOHO,你创业失败了可以继续工作。 ## 路线图 diff --git a/work/roadmap/职场心得/华为新员工的 8 个阶段.md b/Work/roadmap/职场心得/华为新员工的 8 个阶段.md similarity index 99% rename from work/roadmap/职场心得/华为新员工的 8 个阶段.md rename to Work/roadmap/职场心得/华为新员工的 8 个阶段.md index b561fc42..fcdc4e3c 100644 --- a/work/roadmap/职场心得/华为新员工的 8 个阶段.md +++ b/Work/roadmap/职场心得/华为新员工的 8 个阶段.md @@ -2,10 +2,10 @@ title: 华为新员工的 8 个阶段 description: 华为新员工的 8 个阶段 keywords: -- 华为 -- 新员工 + - 华为 + - 新员工 tags: -- 职场心得 + - 工作/经验 sidebar_position: 1.5 author: 7Wate date: 2023-08-28 diff --git a/work/roadmap/职场心得/如何平衡工作和生活.md b/Work/roadmap/职场心得/如何平衡工作和生活.md similarity index 98% rename from work/roadmap/职场心得/如何平衡工作和生活.md rename to Work/roadmap/职场心得/如何平衡工作和生活.md index 04bc9740..e87cac8e 100644 --- a/work/roadmap/职场心得/如何平衡工作和生活.md +++ b/Work/roadmap/职场心得/如何平衡工作和生活.md @@ -3,6 +3,8 @@ id: 如何平衡工作和生活 title: 如何平衡工作和生活 sidebar_position: 2 data: 2022年7月19日 +tags: + - 工作/经验 --- 这个问题让我想起可口可乐曾经的首席执行官布莱恩·戴森 (Brian Dyson) 在 1996 年乔治亚理工学院的毕业致词: @@ -95,6 +97,7 @@ data: 2022年7月19日 很多人解决事情的方式是堆时间,所谓堆时间,把其他事情的时间都尽力挤压掉,留出大量的时间专门用于一件事情的完成,颇有一种牺牲一切没必要的事情只为一件事情完成的魄力,但真到具体做这件事情的时候,则会各种分神,找个借口休息一下,查点相关的资料结果越查越远,不自觉地拿起手机点开了微信消息,事情还没干多少,无论是内部打断,还是外部打断,都打断了几十回。这样的事情,即便完成了,享受过短暂的成就感之后,心理上依然感到十分疲惫。 所以对于这种较大时间块,一定要明确的划分出做事和休息的时间,否则就会自己主动陷入 996 的陷阱之中。 + 而做具体的活动之时,可以采用比如番茄工作法。 关于番茄工作法也多说一句,这个名字想必大家都听过很多遍,本身并不复杂,但是,也没有大家了解的那么简单,什么“每工作 25 分钟,然后休息 5 分钟,第 4 个休息的时候,休息 30 分钟”,那这其中,为什么番茄工作法很有效,背后的原理是什么?对于干扰的情况如何处理?每天结束时统计和处理哪些内容?对于这些问题,大家可能都没有了解过,更多的是看一两篇二手的文章大致的了解了下。 @@ -114,7 +117,7 @@ data: 2022年7月19日 所以日常生活中,在你察觉到负面情绪的时候,及时的反思背后导致的原因,当断不断,反受其乱,但也不用一直的断,加加减减,才是人生的常态。 > 原作者:冴羽答 - 读者问:怎么平衡工作与生活 -> +> > 文章地址:[https://github.com/mqyqingfeng/Blog/issues/298](https://github.com/mqyqingfeng/Blog/issues/298) -> -> 文章采用[知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/)进行许可。 \ No newline at end of file +> +> 文章采用 [知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 进行许可。 diff --git a/work/roadmap/职场心得/如何度过新手村.md b/Work/roadmap/职场心得/如何度过新手村.md similarity index 99% rename from work/roadmap/职场心得/如何度过新手村.md rename to Work/roadmap/职场心得/如何度过新手村.md index d9962a55..4f653d75 100644 --- a/work/roadmap/职场心得/如何度过新手村.md +++ b/Work/roadmap/职场心得/如何度过新手村.md @@ -3,6 +3,8 @@ id: 如何度过新手村 title: 如何度过新手村 sidebar_position: 1 data: 2022年7月19日 +tags: + - 工作/经验 --- 最近在带新员工,也是在记录总结一下,我们应该如何度过新手村?想想去年这个时候俺也是小白,没想到今年就开始带新员工了。内容主要偏向于技术岗位,各抒己见欢迎来怼,不说废话,赶紧上车。😏 diff --git a/work/roadmap/职场心得/如何有效应对职场政治.md b/Work/roadmap/职场心得/如何有效应对职场政治.md similarity index 69% rename from work/roadmap/职场心得/如何有效应对职场政治.md rename to Work/roadmap/职场心得/如何有效应对职场政治.md index 3a1f8480..f7965d7a 100644 --- a/work/roadmap/职场心得/如何有效应对职场政治.md +++ b/Work/roadmap/职场心得/如何有效应对职场政治.md @@ -2,10 +2,10 @@ title: 如何有效应对职场政治 description: 如何有效应对职场政治 keywords: -- 职场 -- 政治 + - 职场 + - 政治 tags: -- 职场心得 + - 工作/经验 sidebar_position: 3 author: 7Wate date: 2023-08-28 @@ -55,34 +55,34 @@ Emma 首先确保自己的工作质量,然后收集所有可能证明自己能 ## 明智地挑选战场 -Frank在一个内容丰富但资源有限的出版公司工作。公司有多个项目和团队,各自都在争夺有限的资金和人力。 +Frank 在一个内容丰富但资源有限的出版公司工作。公司有多个项目和团队,各自都在争夺有限的资金和人力。 > 兵之情主速,乘敌不及准备,出其不意,此兵之胜,不可常也。 -Frank意识到,如果他试图参与每一个可能的竞争和争论,他将很快耗尽自己的精力。于是他决定聚焦在几个最能体现他专业技能和兴趣的项目上。这样,他不仅提高了工作效率,也更容易获得资源和支持。 +Frank 意识到,如果他试图参与每一个可能的竞争和争论,他将很快耗尽自己的精力。于是他决定聚焦在几个最能体现他专业技能和兴趣的项目上。这样,他不仅提高了工作效率,也更容易获得资源和支持。 ## 倾听和观察 -Grace在一个全球化的制造公司工作,这里有多种文化和工作风格。 +Grace 在一个全球化的制造公司工作,这里有多种文化和工作风格。 > 因其具来制胜,故兵变化如水,水因地制壁,兵因敌制胜 -Grace采用了一个观察者的角度,努力了解各个团队或地区办公室的政治和文化动态。她注意到,不同的文化和环境有着不同的权力结构和决策方式。通过倾听和观察,她能够更加灵活地适应不同的工作环境,从而更有效地推进她的项目和职业生涯。 +Grace 采用了一个观察者的角度,努力了解各个团队或地区办公室的政治和文化动态。她注意到,不同的文化和环境有着不同的权力结构和决策方式。通过倾听和观察,她能够更加灵活地适应不同的工作环境,从而更有效地推进她的项目和职业生涯。 ## 寻求外部指导 -Harry觉得自己陷入了职场的政治漩涡,不知所措。于是,他开始寻找一个行业内有经验的导师。 +Harry 觉得自己陷入了职场的政治漩涡,不知所措。于是,他开始寻找一个行业内有经验的导师。 > 凡战者以地生死。故地或可走,或不可走;或可战,或不可战;或可居,或不可居;或可击,或不可击;或可取,或不可取 -通过这种外部的视角和建议,Harry得以更全面地理解他所面临的挑战和机会。导师的经验教训也帮助他避开一些潜在的陷阱,为他提供了在复杂环境中取得成功的策略。 +通过这种外部的视角和建议,Harry 得以更全面地理解他所面临的挑战和机会。导师的经验教训也帮助他避开一些潜在的陷阱,为他提供了在复杂环境中取得成功的策略。 ## 维持真实性 -Irene在一个创意产业工作,发现自己常常需要平衡自己的价值观和职场政治。 +Irene 在一个创意产业工作,发现自己常常需要平衡自己的价值观和职场政治。 > 故火攻有五:一曰火人,二曰火财,三曰火粮,四曰火仓,五曰火队。 -Irene决定,尽管职场政治是必不可少的,但她不会因此而妥协自己的核心价值观。她坚持真实自我,并在与人交往时保持一致性。长远看来,这种真诚和一致性让她赢得了同事和上司的尊重,也让她在公司中建立了积极和健康的影响力。 +Irene 决定,尽管职场政治是必不可少的,但她不会因此而妥协自己的核心价值观。她坚持真实自我,并在与人交往时保持一致性。长远看来,这种真诚和一致性让她赢得了同事和上司的尊重,也让她在公司中建立了积极和健康的影响力。 总结而言,成功地应对职场政治需要策略性思维、观察力、和人际交往能力。最重要的是,你需要明确自己的目标和价值观,并根据这些来制定和调整你的行动计划。这样,不仅可以保护自己不受负面影响,还可以在复杂的职场环境中找到成功和满足。 diff --git a/work/roadmap/薪酬攻略/社会保障.md b/Work/roadmap/薪酬攻略/社会保障.md similarity index 90% rename from work/roadmap/薪酬攻略/社会保障.md rename to Work/roadmap/薪酬攻略/社会保障.md index ffbab58e..a6083ee3 100644 --- a/work/roadmap/薪酬攻略/社会保障.md +++ b/Work/roadmap/薪酬攻略/社会保障.md @@ -2,15 +2,16 @@ title: 社会保障 description: 工作的社会保障,五险一金、六险二金 keywords: -- 社会保障 -- 五险一金 -- 六险二金 + - 社会保障 + - 五险一金 + - 六险二金 tags: -- 职场攻略 + - 工作/面试 sidebar_position: 1 author: 7Wate date: 2022-09-21 --- + ## 五险一金 五险一金是指中国大陆地区劳动者所享有的社会保险福利的一种通俗化称呼,其中五险是指包括**养老保险、医疗保险、工伤保险、失业保险、生育保险**在内的五种社会保险,一金是指**住房公积金**,是中国政府为保障职工权利而采取的一项基本措施。五险一金中的**工伤保险与生育保险全部由用人单位缴纳**,其他由用人单位与劳动者共同缴纳的四种也被称为四金。 @@ -21,7 +22,7 @@ date: 2022-09-21 基本养老金,也称退休金、退休费,是一种最主要的养老保险待遇;分**社会统筹**和**个人缴纳**两类,由基础养老金、过渡性养老金、调节金和个人账户等部分组成。 -职工达到**法定退休年龄(男性60周岁,女性55周岁)**,个人累计**社保缴费满 15 年**,且工龄(包括缴费年限)满10年,可按月领取养老金;达到法定退休年龄时累计缴费不足十五年的,可以补缴费至满十五年。 +职工达到**法定退休年龄(男性 60 周岁,女性 55 周岁)**,个人累计**社保缴费满 15 年**,且工龄(包括缴费年限)满 10 年,可按月领取养老金;达到法定退休年龄时累计缴费不足十五年的,可以补缴费至满十五年。 ### 医疗保险 @@ -60,4 +61,4 @@ date: 2022-09-21 ### 企业年金 -企业年金是指企业及其职工在依法参加基本养老保险的基础上,自愿建立的补充养老保险制度,是多层次养老保险体系的组成部分,由国家宏观指导、企业内部决策执行。 \ No newline at end of file +企业年金是指企业及其职工在依法参加基本养老保险的基础上,自愿建立的补充养老保险制度,是多层次养老保险体系的组成部分,由国家宏观指导、企业内部决策执行。 diff --git a/work/roadmap/薪酬攻略/绩效考核.md b/Work/roadmap/薪酬攻略/绩效考核.md similarity index 98% rename from work/roadmap/薪酬攻略/绩效考核.md rename to Work/roadmap/薪酬攻略/绩效考核.md index f65033ed..277cd3d9 100644 --- a/work/roadmap/薪酬攻略/绩效考核.md +++ b/Work/roadmap/薪酬攻略/绩效考核.md @@ -2,11 +2,11 @@ title: 绩效考核 description: 常见绩效考核 keywords: -- 绩效考核 -- KPI -- OKR + - 绩效考核 + - KPI + - OKR tags: -- 职场攻略 + - 工作/面试 sidebar_position: 2 author: 7Wate date: 2022-09-21 @@ -60,4 +60,3 @@ date: 2022-09-21 1. **OKRs 要是可量化的**(时间&数量),比如不能说使 gmail 达到成功,而是在 9 月上线 gmail 并在 11 月有 100 万用户。 2. **目标要是有野心的,有一些挑战的**,有些让你不舒服的。一般来说,**1 为总分的评分**,达到 0.6-0.7 是较好的了,这样你才会不断为你的目标而奋斗,而不会出现期限不到就完成目标的情况。 3. 每个人的 OKRs 在全公司都是**公开透明的**。比如每个人的介绍页里面就放着他们的 OKRs 的记录,包括内容和评分。 - diff --git a/work/roadmap/薪酬攻略/薪酬制度.md b/Work/roadmap/薪酬攻略/薪酬制度.md similarity index 79% rename from work/roadmap/薪酬攻略/薪酬制度.md rename to Work/roadmap/薪酬攻略/薪酬制度.md index d1f803aa..1657f529 100644 --- a/work/roadmap/薪酬攻略/薪酬制度.md +++ b/Work/roadmap/薪酬攻略/薪酬制度.md @@ -2,14 +2,15 @@ title: 薪酬制度 description: 工资、薪酬制度 keywords: -- 工资 -- 薪酬 + - 工资 + - 薪酬 tags: -- 职场攻略 + - 工作/面试 sidebar_position: 3 author: 7Wate date: 2022-09-21 --- + ![薪酬福利体系](https://static.7wate.com/img/2022/09/21/5dfe6d1a738c6.png) -[薪酬福利体系思维导图](https://static.7wate.com/img/2022/09/21/9504f78536cbe.xmind) \ No newline at end of file +[薪酬福利体系思维导图](https://static.7wate.com/img/2022/09/21/9504f78536cbe.xmind) diff --git a/work/roadmap/面试法则/反向面试.md b/Work/roadmap/面试法则/反向面试.md similarity index 98% rename from work/roadmap/面试法则/反向面试.md rename to Work/roadmap/面试法则/反向面试.md index 985fecb6..fdaa95ae 100644 --- a/work/roadmap/面试法则/反向面试.md +++ b/Work/roadmap/面试法则/反向面试.md @@ -2,10 +2,12 @@ id: 反向面试 title: 反向面试 data: 2022年1月22日 +tags: + - 工作/面试 --- > 大部分翻译自:<https://github.com/viraptor/reverse-interview> ,亦有其他网友补充。 -> 译者总结的一份适合突击记忆的简洁版 LeetCode 题解和面试问题,也欢迎 Star。<https://github.com/yifeikong/interview> +> 译者总结的一份适合突击记忆的简洁版 LeetCode 题解和面试问题,也欢迎 Star。<https://github.com/yifeikong/interview> 下面列表里的问题对于参加技术面试的人来说可能有些用。 列表里的问题并不一定适用于某个特定的职位或者工作类型,也没有排序 最开始的时候这只是我自己的问题列表,但是慢慢地添加了一些我觉得可能让我对这家公司亮红牌的问题。 @@ -16,7 +18,9 @@ data: 2022年1月22日 翻译: [English](https://github.com/viraptor/reverse-interview) + [Korean](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/blob/master/Reverse_Interview/README.md) + [Portuguese](https://github.com/viraptor/reverse-interview/blob/master/translations/PORTUGUESE.md) ## 预期使用方式 @@ -26,9 +30,11 @@ data: 2022年1月22日 - 找不到的话就向面试官提问 绝对不要想把这个列表里的每个问题都问一遍。(尊重面试官的时间,而且你可以通过查找已经发布的答案来显示 + 你的主动性) 请记住事情总是灵活的,组织的结构调整也会经常发生。拥有一个 bug 追踪系统并不会保证高效处理 bug。 + CI/CD (持续集成系统) 也不一定保证交付时间会很短。 ### 职责 @@ -192,8 +198,8 @@ CI/CD (持续集成系统) 也不一定保证交付时间会很短。 - 如果有奖金计划的话,奖金如何分配? - 如果有奖金计划的话,过去的几年里通常会发百分之多少的奖金? -- 有五险一金(zh)/401k(us)或者其他退休养老金等福利吗? -- 五险一金中,补充公积金一般交多少比例?/401k一般交多少比例?我可以自己选择这一比例吗? +- 有五险一金 (zh)/401k(us) 或者其他退休养老金等福利吗? +- 五险一金中,补充公积金一般交多少比例?/401k 一般交多少比例?我可以自己选择这一比例吗? - 有什么医疗保险吗?如果有的话何时开始? - 有额外商业保险吗?例如人寿保险和额外的养老/医疗保险? - 更换工作地点,公司付费吗? diff --git a/work/roadmap/面试法则/面试 10 大常见问题.md b/Work/roadmap/面试法则/面试 10 大常见问题.md similarity index 87% rename from work/roadmap/面试法则/面试 10 大常见问题.md rename to Work/roadmap/面试法则/面试 10 大常见问题.md index 69697b9f..3b8dbf6c 100644 --- a/work/roadmap/面试法则/面试 10 大常见问题.md +++ b/Work/roadmap/面试法则/面试 10 大常见问题.md @@ -2,10 +2,10 @@ title: 面试 10 大常见问题 description: 面试 10 大常见问题 keywords: -- 面试 -- 问题 + - 面试 + - 问题 tags: -- 面试 + - 工作/面试 sidebar_position: 1 author: 7Wate date: 2023-03-08 @@ -29,11 +29,11 @@ date: 2023-03-08 加油! -> 这份文档,配合鹅姐B站“面试常见问题系列”讲解,使用效果更好([戳>>> 鹅姐职场@B站](https://www.bilibili.com/video/BV1XL41147pL?spm_id_from=333.999.0.0&accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NzgyNTc3ODQsImZpbGVHVUlEIjoiemRreUIxbXZYSlM2dzBBNiIsImlhdCI6MTY3ODI1NzQ4NCwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjotNzc2MDYyNDgxMn0.bOhAsu0fKD8O8bpjW--wbF6tZQulcMP1m4RA4vU2qL8)) -> +> 这份文档,配合鹅姐 B 站“面试常见问题系列”讲解,使用效果更好([戳> > > 鹅姐职场@B站](https://www.bilibili.com/video/BV1XL41147pL?spm_id_from=333.999.0.0&accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NzgyNTc3ODQsImZpbGVHVUlEIjoiemRreUIxbXZYSlM2dzBBNiIsImlhdCI6MTY3ODI1NzQ4NCwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjotNzc2MDYyNDgxMn0.bOhAsu0fKD8O8bpjW--wbF6tZQulcMP1m4RA4vU2qL8)) +> > 来源:[【鹅姐出品】10大面试常见问题解析&参考答案](https://shimo.im/docs/zdkyB1mvXJS6w0A6/read);仅学术引用,著作权归作者所有。 -## 面试10大常见问题 +## 面试 10 大常见问题 ### 1. 请你自我介绍一下 @@ -59,7 +59,7 @@ date: 2023-03-08 **回答示例** -背景:某应届同学,面试某500强企业销售的岗位。同学只有一段与销售不相关的客服实习经历和一段不算特别成功的校内创业经历 +背景:某应届同学,面试某 500 强企业销售的岗位。同学只有一段与销售不相关的客服实习经历和一段不算特别成功的校内创业经历 ```markdown 面试官您好,我叫xx。我毕业于xx大学xx专业,GPAxx,排名前20%。 @@ -87,18 +87,18 @@ date: 2023-03-08 8. “你工作中遇到过什么困难挑战,怎么解决的?” 9. **请你描述某个项目的具体情况?** 10. “给我举一个你上份工作做的项目的例子,讲一个比较能体现你能力的?” -11. “你xx项目,具体是怎么做的?” +11. “你 xx 项目,具体是怎么做的?” **回答注意事项** 1. 讲和所应聘的岗位相关度高的经历。 2. 从听众的角度思考,降低面试官的理解难度(尤其是跨行业、跨岗位的面试,要主动想到补充必要的背景信息,让面试官更轻松地理解自己所做的事及其意义) -3. 主动争取讲出能体现自己价值、能力的信息,即使面试官没有直接问(面试官问有没有xx经验技能,即使自己没有,最好也不要干巴巴地回复说“没做过”。想一想,自己有没有一些可迁移的经验拿来讲) -4. 用STAR法则回答问题:situation(背景情形) + task(你的任务或者目标)+ 具体描述action(你做了什么)+ result(取得的结果) +3. 主动争取讲出能体现自己价值、能力的信息,即使面试官没有直接问(面试官问有没有 xx 经验技能,即使自己没有,最好也不要干巴巴地回复说“没做过”。想一想,自己有没有一些可迁移的经验拿来讲) +4. 用 STAR 法则回答问题:situation(背景情形) + task(你的任务或者目标)+ 具体描述 action(你做了什么)+ result(取得的结果) **回答示例** -背景:某应届同学面试市场营销岗位,给面试官介绍自己过去在音乐APP做频道运营的经历 +背景:某应届同学面试市场营销岗位,给面试官介绍自己过去在音乐 APP 做频道运营的经历 **错误示范** @@ -126,14 +126,14 @@ date: 2023-03-08 **常见错误** 1. 把重心放在了对成就大小的描述渲染上,却没有讲出为什么它让自己骄傲(即,没有讲出“克服了多大的困难” “这个成就为什么来之不易”) -2. 讲出的案例离现在太远(e.g. 工作5年了,分享的最大成就却是工作第1年的成就,会让面试官担心最近几年工作成绩都不好) +2. 讲出的案例离现在太远(e.g. 工作 5 年了,分享的最大成就却是工作第 1 年的成就,会让面试官担心最近几年工作成绩都不好) 3. 个人相关度低(如鹅姐视频中举的例子,“产品经理分享了一个自己做秒杀功能的案例。那个秒杀活动确实很成功,但活动实际是由运营团队策划的,产品经理实现这个功能的难度并不大,并不能体现产品经理在自身职能上的能力有多强。”) **回答注意事项** 1. 提供必要的背景信息,让面试官理解你所做的事情的重要度 / 难度 / 对业务的价值等等。 -2. 用STAR法则回答问题:situation(背景情形) + task(你的任务或者目标)+ 具体描述action(你做了什么)+ result(取得的结果) -3. 有余力时,可以再增加一个自己的心得和收获,说明这样的经历对于自己未来做xxx也有帮助,以及自己思考了可以怎么样做得更好。 +2. 用 STAR 法则回答问题:situation(背景情形) + task(你的任务或者目标)+ 具体描述 action(你做了什么)+ result(取得的结果) +3. 有余力时,可以再增加一个自己的心得和收获,说明这样的经历对于自己未来做 xxx 也有帮助,以及自己思考了可以怎么样做得更好。 **回答示例** @@ -165,11 +165,11 @@ date: 2023-03-08 3. (销售岗位为例)“你觉得提高成交率,有哪些方法?” 4. **请你提出对公司业务的具体改进意见。** 5. (共享出行运营为例)“如果我们想提高日订单量,你觉得有哪些机会点?” -6. (APP投放为例)“如果我们想维持CAC相对稳定、同时提升20%的日消耗金额,你觉得有什么办法?” +6. (APP 投放为例)“如果我们想维持 CAC 相对稳定、同时提升 20% 的日消耗金额,你觉得有什么办法?” **常见错误** -1. 回答时只能背诵或引用JD(职位描述)中的用词,没有反映出自己对行业的关注或理解。 +1. 回答时只能背诵或引用 JD(职位描述)中的用词,没有反映出自己对行业的关注或理解。 2. 缺乏事先对行业、公司、岗位的调研,导致说不出任何具体想法或建议。 **回答注意事项** @@ -248,7 +248,7 @@ date: 2023-03-08 1. 建议回答结构:缺点是什么 + 缺点具体的体现 + (加分项)现在采取了什么改善措施 + (加分项)改善措施目前产生的效果。 2. 选取真实、同时对于目标岗位不构成重大影响的点。 -3. 缺点可以是 “个人特质型”(如:性格内向,沟通不太主动)或者 “客观经验型”(如:之前没有管理5人及以上团队的经验) +3. 缺点可以是 “个人特质型”(如:性格内向,沟通不太主动)或者 “客观经验型”(如:之前没有管理 5 人及以上团队的经验) **回答示例** @@ -269,7 +269,7 @@ date: 2023-03-08 1. 评估求职者的职业规划是否合理 2. 判断求职者对岗位的预期,以及预期是否和实际情况匹配 -3. 让求职者给自己提供“为什么要选择ta”的理由 +3. 让求职者给自己提供“为什么要选择 ta”的理由 **常见错误** @@ -327,12 +327,12 @@ date: 2023-03-08 1. 建议回答结构: -- 表明对上一份工作的感激和认可 + 强调个人职业发展,在意xxx方面 + 说明前司在xxx方面无法满足自己 +- 表明对上一份工作的感激和认可 + 强调个人职业发展,在意 xxx 方面 + 说明前司在 xxx 方面无法满足自己 -- 肯定自己在上一份工作中自己的收获 + xxx客观因素对自己很重要(客观因素如工作地点等) + 前司无法在xxx上满足自己的需求 +- 肯定自己在上一份工作中自己的收获 + xxx 客观因素对自己很重要(客观因素如工作地点等) + 前司无法在 xxx 上满足自己的需求 -2. 不要让面试官觉得是自己的问题,而是客观匹配度的问题 -3. 从正面的视角解读这个问题,更多展现自己对更好机会和更多成长的期待,而非对过去种种问题的不爽 +1. 不要让面试官觉得是自己的问题,而是客观匹配度的问题 +2. 从正面的视角解读这个问题,更多展现自己对更好机会和更多成长的期待,而非对过去种种问题的不爽 **回答示例** @@ -362,13 +362,13 @@ date: 2023-03-08 2. 说自己很灵活、考虑多个相关性并不大的职业方向,导致面试官担心同学没有规划、对自己的职业发展不上心 -3. 只谈自己对职级的野心(想做到xx岗位,想承担xx角色),没有体现对专业度的追求 +3. 只谈自己对职级的野心(想做到 xx 岗位,想承担 xx 角色),没有体现对专业度的追求 **回答注意事项** -1. 想发展的岗位方向 + 原因 + 3年后预期自己具备的职业能力 +1. 想发展的岗位方向 + 原因 + 3 年后预期自己具备的职业能力 -2. 虽然客观上一个人的职业路径很可能会变(尤其对于刚毕业不久的同学),但这也不能成为我们不去思考“职业规划”的理由。一定要思考职业规划,哪怕只是未来3年、不是长期的 +2. 虽然客观上一个人的职业路径很可能会变(尤其对于刚毕业不久的同学),但这也不能成为我们不去思考“职业规划”的理由。一定要思考职业规划,哪怕只是未来 3 年、不是长期的 3. 结合自己的兴趣、能力、特长等,说明自己对什么行业、岗位感兴趣 @@ -376,7 +376,7 @@ date: 2023-03-08 **回答示例** - 背景:某应届生面试快消市场岗位,被问“长期职业规划是什么,预期自己3年后是什么样的状态”。 + 背景:某应届生面试快消市场岗位,被问“长期职业规划是什么,预期自己 3 年后是什么样的状态”。 ```markdown 我长期希望从事消费品市场岗位的工作,因为我非常喜欢快消行业,喜欢生产和营销这种看得见、摸得着的商品的感觉。 @@ -400,15 +400,15 @@ date: 2023-03-08 1. 过早开启对薪资的讨论,模糊了“面试中双方对彼此了解”这个重点 -2. 过早亮底牌(e.g. “我最低要求是xxx”),导致招聘方比着底线给offer +2. 过早亮底牌(e.g. “我最低要求是 xxx”),导致招聘方比着底线给 offer -3. 给出一个薪资预期期间(e.g. “我希望自己的薪资在15k-20k之间”),然后希望对方取个【中间值】。但事实上招聘方只会关注【最低值】(e.g. 会比着15k谈)。 +3. 给出一个薪资预期期间(e.g. “我希望自己的薪资在 15k-20k 之间”),然后希望对方取个【中间值】。但事实上招聘方只会关注【最低值】(e.g. 会比着 15k 谈)。 -4. 预期过于不切实际、缺乏支撑(e.g. 预期相较于上一份工作涨幅100%),导致招聘方认为自己没诚意 +4. 预期过于不切实际、缺乏支撑(e.g. 预期相较于上一份工作涨幅 100%),导致招聘方认为自己没诚意 **回答注意事项** -1. 如果还在面试过程中、对方尚未明确表示会给自己发offer,可以直接用委婉的话术拒绝现在谈薪资。e.g. “我理解目前咱们双方还在彼此了解的过程中,公司对我的价值判断,可以在走完面试流程之后,再综合我的能力情况来给到;我也可以在那个时候根据自己对公司各方面的了解,具体沟通我的薪资预期,您看可以吗?” +1. 如果还在面试过程中、对方尚未明确表示会给自己发 offer,可以直接用委婉的话术拒绝现在谈薪资。e.g. “我理解目前咱们双方还在彼此了解的过程中,公司对我的价值判断,可以在走完面试流程之后,再综合我的能力情况来给到;我也可以在那个时候根据自己对公司各方面的了解,具体沟通我的薪资预期,您看可以吗?” 2. 尽量避免自己先量底牌,把问题抛给对方。 @@ -418,11 +418,11 @@ date: 2023-03-08 - e.g. “我可以先了解下咱们薪酬的构成吗,比如基础薪资是多少、有无绩效奖金、年终奖构成、五险一金如何缴纳等等?” -3. 可以适当利用“其他家的offer更高” “其他家五险一金缴纳比例更高” “(若未离职)目前公司有计划给自己涨薪” 等事实,给自己争取更高薪资。 +1. 可以适当利用“其他家的 offer 更高” “其他家五险一金缴纳比例更高” “(若未离职)目前公司有计划给自己涨薪” 等事实,给自己争取更高薪资。 **谈薪示范** -背景:HR已经向候选人确认面试通过,进入薪资沟通阶段。 +背景:HR 已经向候选人确认面试通过,进入薪资沟通阶段。 ```markdown HR:你的薪资预期是怎样的? diff --git a/work/sre-engineer/home.md b/Work/sre-engineer/home.md similarity index 98% rename from work/sre-engineer/home.md rename to Work/sre-engineer/home.md index c6036309..24ebbb88 100644 --- a/work/sre-engineer/home.md +++ b/Work/sre-engineer/home.md @@ -1,6 +1,5 @@ --- -slug: / -sidebar_position: 1 +title: SRE (站点可靠性工程师) --- ## SRE (站点可靠性工程师) diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index e00595da..00000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/blog/11月28日晚 星期三 霾.md b/blog/11月28日晚 星期三 霾.md deleted file mode 100644 index d5840991..00000000 --- a/blog/11月28日晚 星期三 霾.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 11月28日 晚 星期三 霾 -description: 11月28日 晚 星期三 霾 -keywords: -- 日记 -tags: -- 日记 -authors: -- 7Wate -date: 2018-11-28 ---- - -总是很想写一些东西,却又不知从何下笔。 - - -前阵子在学习 Git,也是博客自打建设以来的第一篇的学习笔记。感觉写的很拖沓,就跟小时候写日记打流水账一样。今天早上吃了饭然后上了学然后放学又吃饭然后又上学哈哈。感觉一直在重复搞一些事情,对博客写笔记的定义理解的还不够透彻。一直在做前人做过的东西,Git 相关的笔记,命令一搜一大堆。应该改变一下自己记录学习博客的方式。要秉承着宁要好梨一个,不要烂梨一筐的想法。多写一些更有营养的东西,少做重复的事情。多吸取前辈们的笔记作品书籍,领悟作者的思想,站在作者的角度去思考问题。读一本书就是跟作者对话。更要有会当凌绝顶的感悟。 - -最近也在看计算机文化丛译,Git 这两方面的书。计算机文化丛译系列的书籍,真的超级无敌崇拜计算机的先辈们。上个世纪我国还处于吃饱饭是第一要令的地方,而他们已经开始搞人工智能,算法,个人计算机,互联网等等。确实还是有很多需要学习的地方,不过吃饱饭确实是搞任何事情的前提。 - -同时也是感觉很浮躁,个人很浮躁,环境很浮躁,整个社会都很浮躁。到处充斥着快餐文化,都想一夜暴富,只关乎结果,不在乎过程及质量。看了阮一峰前辈的一些散文,以及平时生活感觉感觉有的国人要走的路还很长。抗战打了十四年,改革开放搞了四十多年,感觉有的国人的思想可能要走八十年。无论需要走的路有多远多长,我还是无比热爱我的国! - -坚信自己能够不忘初心,善始善终! - -加油! - ---- - -此文著于 2018 年 11 月 28 日,仅供留存。 \ No newline at end of file diff --git a/blog/2022.md b/blog/2022.md deleted file mode 100644 index 2ceb1bee..00000000 --- a/blog/2022.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 2022 -description: 2022 年终总结 -keywords: -- 2022 -- 年终总结 -tags: -- 纪念 -authors: -- 7Wate -date: 2022-02-03 ---- - -感觉时间过的好快呀,新的一年又要开始了。去年的目标完成了 2/3,今年新的目标也需要制定了。 -## 工作 - - 今年争取全年工作日无请假 - - **年中可以谈一次绩效** - - 同事关系融洽愉快哈 - - **存 1 万块钱** -## 生活 - - 今年大家不要扎堆来结婚好嘛,给我一点时间挣份子钱 - - 处理好自己的朋友圈,抛弃无关紧要的社交 - - **需要更好的去处理,收纳家里亲戚的关系!!!这个超级重要!!!** - - 今年会忙一点累一点,生活质量暂不放在第一位! -## 学习 - - **5 月程序员初级职业资格** - - 5 月初级会计师资格证 - - PAT 乙级证书 - - **PAT 甲级证书** - - **11 月软件设计师中级职业资格** - - 腾讯云云架构师 - - 阿里云安全工程师 - - **RHCE 工程师**(结合物质基础,因为需要花好多钱呀) - - 华为路由方面认证工程师(同上,这些证书好贵呀) -## 摄影 - - 希望,真得超级希望,真得巨希望今年可以拍到星空好嘛 - - 可以去青岛一趟 ~ - - 可以积攒一些入会河南省摄影家协会的积分 - - 提高自己的摄影基本功 - - 学习 PR & PS 技术 -## 钢琴 - - 学好最基础的乐理知识哈(这个必须有) - - 争取报一个老师领进门,教一些基础知识 ~ -## 感情 - - 希望自己可以给自己一个情感支柱 -## 支出 - - 70-300 镜头,如果可以的话,虽然虽然需求不大,但是谁又嫌多呢。 - - 无人机,这个更多只能期盼于中彩票了…… - - gopro 好吧,这个同上 - -**今年注定是要自给自足的一年,严格的控制好支出。今年务必要养活住自己不问家里张嘴要一分钱。** -去年没有完成的一些硬性要求更多的局限于 GitHub 上面了,今年不再做更多的硬性要求了。 -今年物质基础方面更多注重的是自给自足,不再着重于大的开支。如果物质基础充足,更希望可以出去玩几趟 ~ -今年不再为自己增加不确定性的工作,生活。首先是工作,今年无论如何工作不会有一丝一毫的变动,其次是生活方面将更注重学习,其次是生活。 -主要就是弃繁就简,提高质量,让自己更加的成长!!! - - - diff --git a/blog/Git 规范.md b/blog/Git 规范.md deleted file mode 100644 index 78b096e9..00000000 --- a/blog/Git 规范.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Git 规范 -description: Git 规范 -keywords: -- Git -- 规范 -tags: -- 开源 -authors: -- 7Wate -date: 2021-08-24 ---- - - -统一团队的 Git 工作流,包括分支工作流、Git commit 日志、tag 规范、README 模板、issue 模板,便于后续代码 review,版本发布以及日志自动化生成等等。 - -## 分支工作流 - -![Git 分支工作流.png](https://static.7wate.com/img/2021/08/24/c5a50e99dde5f.png) - -**根据项目实际情况安排分支工作流!** - -## Commit 日志 - -日志所有内容务必使用 **ASCII** 字符,不要使用中文或 emoji,要求**最大化兼容**,便于程序处理。 - -commit 包括三个部分:**Header**、**Body**、**Footer**。 - -commit 格式如下: - -``` -<type>([scope]): <subject> - -[body] - -[footer] -``` - -示例: - -``` -feature(auth): increase length of new API key - -the length is increased from 24 to 32 for new API keys - -close #12 -``` - -### 头部(Header) - -标题部分只有一行,包括三个字段:类型、说明、标题。 - -![commit-tag.png](https://static.7wate.com/img/2021/08/24/a26a82a44ce2e.png) - -- 破坏兼容性的改动,影响到依赖本项目的其它系统,请在类型后面加上**半角感叹号**「**!**」。 -- 标题务必不超过 **72** 个字符,务必精炼易懂。如无法限制在 **72** 个字符内,请拆分提交。 -- 描写部分**小写字母开头**、专有名词首字母大写、缩略语大写、结尾不用句号。 - -### 主体(Body) - -标题与正文间隔一个空行。 - -如果内容简单,请按照标题格式。超过一行,按照常规的段落格式。 - -**首字母大写,正确使用标点。可以多行、多段、每行不超过 72 个字符、行尾不出现空格、段落用空行隔开。** - -示例 - -``` -feature!(api): limit array length to 256 elements - -BREAKING: Array length limit is added to further limit request size. A -small number of existing apps may receive HTTP 413 "Payload too Large" -error. -``` - -### 脚注(Footer) - -正文与脚注间隔一个空行。 - -## Tag 规范 - -![语义化版本.png](https://static.7wate.com/img/2021/08/24/ad4999467e192.png) - -## Issue 模板 - -![Issue.png](https://static.7wate.com/img/2021/08/24/0e572570b1f3f.png) - -## README 模板 - -![Issue.png](https://static.7wate.com/img/2021/08/24/bdbf509e6b414.png) diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index f240423e..00000000 --- a/blog/authors.yml +++ /dev/null @@ -1,5 +0,0 @@ -7Wate: - name: Seven Wate - title: For Freedom - url: https://blog.7wate.com - image_url: https://www.7wate.com/logo.png \ No newline at end of file diff --git a/blog/我还在…….md b/blog/我还在…….md deleted file mode 100644 index 776020be..00000000 --- a/blog/我还在…….md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 我还在…… -description: 我还在…… -keywords: -- 日记 -tags: -- 日记 -authors: -- 7Wate -date: 2021-06-10 ---- - - -最近现实生活比较充实、也就没有太多闲暇时光写博客了……放几张最近生活照,期待下一篇博客。 - - -![开封][1] -![开封][3] - -> ## 二十三岁你好! - - [1]: https://static.7wate.com/img/2021/06/10/90216348e950a.jpg - [2]: https://static.7wate.com/img/2021/06/10/06c84fa05998f.jpg - [3]: https://static.7wate.com/img/2021/06/10/9dc96bf2ba208.jpg - [4]: https://static.7wate.com/img/2021/06/10/f81c48b8a8e45.jpg \ No newline at end of file diff --git a/docs/Docker/Dockerfile 文件详解.md b/docs/Docker/Dockerfile 文件详解.md deleted file mode 100644 index cc52061f..00000000 --- a/docs/Docker/Dockerfile 文件详解.md +++ /dev/null @@ -1,279 +0,0 @@ ---- -id: Dockerfile 文件详解 -title: Dockerfile 文件详解 -data: 2022年1月13日 ---- - - -Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。 Dockerfile 是一个文本文档,其中包含了用户创建镜像的所有命令和说明。 - -## 一、 变量 - -变量用 **$variable_name** 或者 **${variable_name}** 表示 - -- `${variable:-word}`表示如果`variable`设置,则结果将是该值。如果`variable`未设置,`word`则将是结果。 -- `${variable:+word}`表示如果`variable`设置则为`word`结果,否则为空字符串。 - -变量前加 `\` 可以转义成普通字符串:``\$foo` or `\${foo}`,表示转换为`$foo`和`${foo}`文本字符串。 - -## 二、FROM - -初始化一个新的构建阶段,并设置基础映像: - -```text -FROM [--platform=<platform>] <image> [AS <name>] -FROM [--platform=<platform>] <image>[:<tag>] [AS <name>] -FROM [--platform=<platform>] <image>[@<digest>] [AS <name>] -``` - -- 单个 dockfile 可以多次出现 **FROM ,**以使用之前的构建阶段作为另一个构建阶段的依赖项。 -- `AS name`表示为构建阶段命名,在后续`FROM`和`COPY --from=<name>`说明中可以使用这个名词,引用此阶段构建的映像。 -- `digest`其实就是就是根据镜像内容产生的一个 ID,只要镜像的内容不变 **digest** 也不会变。 -- `tag`或`digest`值是可选的。如果您省略其中任何一个,构建器默认使用一个`latest`标签。如果找不到该`tag`值,构建器将返回错误。 -- `--platform`标志可用于在`FROM`引用多平台镜像的情况下指定平台。例如:`linux/amd64`、`linux/arm64`、 或`windows/amd64` - -## 三、RUN - -将在当前镜像之上的新层中执行命令,在 docker build 时运行。 - -```text -RUN /bin/bash -c 'source $HOME/.bashrc; \ -echo $HOME' -``` - -RUN 有两种形式: - -- `RUN <command>`(shell 形式,命令在 shell 中运行,默认`/bin/sh -c`在 Linux 或`cmd /S /C`Windows 上)。 -- `RUN ["executable", "param1", "param2"]`(执行形式)。 - -说明: - -- 可以使用`\`(反斜杠)将单个 RUN 指令延续到下一行。 -- `RUN`在下一次构建期间,指令缓存不会自动失效。可以使用`--no-cache`标志使指令缓存无效。 -- Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大,可以使用 **&&** 符号连接命令,这样执行后,只会创建 **1层** 镜像。 - -## 四、CMD - -运行程序,在 docker run 时运行,但是和 run 命令不同,RUN 是在 docker build 时运行。 - -```text -FROM ubuntu -CMD ["/usr/bin/wc","--help"] -``` - -支持三种格式: - -- `CMD ["executable","param1","param2"]` 使用 `exec` 执行,推荐方式。 -- `CMD command param1 param2` 在 `/bin/sh` 中执行,提供给需要交互的应用。 -- `CMD ["param1","param2"]` 提供给 `ENTRYPOINT` 的默认参数。 - -指定启动容器时执行的命令,每个 Dockerfile 只能有一条 `CMD` 命令。如果指定了多条命令,只有最后一条会被执行。 - -如果用户启动容器时候指定了运行的命令,则会覆盖掉 `CMD` 指定的命令。 - -## 五、LABEL - -添加元数据: - -```text -LABEL multi.label1="value1" \ - multi.label2="value2" \ - other="value3" -``` - -## 六、EXPOSE - -```text -EXPOSE <port> [<port>/<protocol>...] -``` - -Docker 容器在运行时侦听指定的网络端口。可以指定端口是监听 TCP 还是 UDP ,如果不指定协议,默认为 TCP。 - -该`EXPOSE`指令实际上并未发布端口。要在运行容器时实际发布端口,`docker run` -P 来发布和映射一个或多个端口。 - -默认情况下,`EXPOSE`假定 TCP。您还可以指定 UDP: - -```text -EXPOSE 80/udp -``` - -## 七、ENV - -设置环境变量: - -```text -ENV <key>=<value> ... -``` - -设置的环境变量将持续存在,您可以使用`docker inspect`来查看。使用`docker run --env <key>=<value>`来更改环境变量的值。 - -如果环境变量只在构建期间需要,请考虑为单个命令设置一个值。 - -```text -RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y ... -``` - -或者使用`ARG`,它不会保留在最终镜像中。 - -```text -ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y ... -``` - -## 八、ADD - -复制新文件、目录或远程文件 URL `<src>` ,并将它们添加到`<dest>`中。 - -`<src>`可以指定多个资源,但如果它们是文件或目录,则它们的路径被解释为相对于构建上下文的源,也就是 **WORKDIR**。 - -每个都`<src>`可能包含通配符,匹配将使用 Go 的 [filepath.Match](https://link.zhihu.com/?target=http%3A//golang.org/pkg/path/filepath%23Match)规则。例如:添加所有以 "hom" 开头的文件: - -```text -ADD hom* /mydir/ -``` - -在下面的示例中,`?`被替换为任何单个字符,例如:"home.txt"。 - -```text -ADD hom?.txt /mydir/ -``` - -`<dest>`是一个绝对路径,或相对`WORKDIR`的相对路径。 - -## 九、COPY - -语法同 ADD 一致,复制拷贝文件。 - -COPY 指令和 ADD 指令的唯一区别在于:是否支持从远程 URL 获取资源。COPY 指令只能从执行 docker build 所在的主机上读取资源并复制到镜像中。而 ADD 指令还支持通过 URL 从远程服务器读取资源并复制到镜像中。 - -相同需求时,推荐使用 COPY 指令。ADD 指令更擅长读取本地 tar 文件并解压缩。 - -## 十、ENTRYPOINT - -**ENTRYPOINT** 和 **CMD** 一样,都是在指定容器启动程序及参数,不过它不会被 docker run 的命令行参数指定的指令所覆盖。如果要覆盖的话,需要通过 docker run --entrypoint 来指定。 - -它有 2 种格式: - -```text -ENTRYPOINT ["executable", "param1", "param2"] -ENTRYPOINT command param1 param2 -``` - -当指定了 ENTRYPOINT 后, CMD 的内容作为参数传给 ENTRYPOINT 指令,实际执行时,将变为: - -```text -<ENTRYPOINT> <CMD> -``` - -## 十一、VOLUME - -创建一个具有指定名称的挂载数据卷。 - -```text -VOLUME ["/var/log/"] -VOLUME /var/log -``` - -它的主要作用是: - -- 避免重要的数据,因容器重启而丢失 -- 避免容器不断变大 - -## 十二、ARG - -定义变量,与 **ENV** 作用相同,不过`ARG`变量不会像`ENV`变量那样持久化到构建好的镜像中。 - -```text -ARG <name>[=<default value>] -``` - -Docker 有一组预定义的`ARG`变量,您可以在 Dockerfile 中没有相应指令的情况下使用这些变量。 - -- `HTTP_PROXY` -- `http_proxy` -- `HTTPS_PROXY` -- `https_proxy` -- `FTP_PROXY` -- `ftp_proxy` -- `NO_PROXY` -- `no_proxy` - -要使用这些,请使用`--build-arg`标志在命令行上传递它们,例如: - -```text - docker build --build-arg HTTPS_PROXY=https://my-proxy.example.com . -``` - -## 十三、ONBUILD - -将一个触发指令添加到镜像中,以便稍后在该镜像用作另一个构建的基础时执行。也就是另外一个 dockerfile FROM 了这个镜像的时候执行。 - -```text -ONBUILD ADD . /app/src -ONBUILD RUN /usr/local/bin/python-build --dir /app/src -``` - -## 十四、STOPSIGNAL - -设置将发送到容器退出的系统调用信号。该信号可以是与内核系统调用表中的位置匹配的有效无符号数,例如 9,或格式为 SIGNAME 的信号名称,例如 SIGKILL。 - -```text -STOPSIGNAL signal -``` - -默认的 stop-signal 是 **SIGTERM**,在 docker stop 的时候会给容器内 PID 为 1 的进程发送这个 signal,通过 --stop-signal 可以设置自己需要的 signal,主要目的是为了让容器内的应用程序在接收到 signal 之后可以先处理一些事物,实现容器的平滑退出,如果不做任何处理,容器将在一段时间之后强制退出,会造成业务的强制中断,默认时间是 10s。 - -## 十五、HEALTHCHECK - -用于指定某个程序或者指令来监控 docker 容器服务的运行状态。该`HEALTHCHECK`指令有两种形式: - -- `HEALTHCHECK [OPTIONS] CMD command` (通过在容器内运行命令来检查容器健康状况) -- `HEALTHCHECK NONE` (禁用从基础镜像继承的任何健康检查) - -## 十六、SHELL - -覆盖用于命令的 **shell** 形式的默认 shell。Linux 上的默认 shell 是`["/bin/sh", "-c"]`,Windows 上是`["cmd", "/S", "/C"]` - -```text -SHELL ["executable", "parameters"] -``` - -该`SHELL`指令在 Windows 上特别有用,因为 Windows 有两种常用且截然不同的本机 shell:`cmd`和`powershell`,以及可用的备用 shell,包括`sh`。该 SHELL 指令可以出现多次。每条 SHELL 指令都会覆盖所有先前的 SHELL 指令,并影响所有后续指令。 - -## 十七、WORKDIR - -工作目录,如果`WORKDIR`不存在,即使它没有在后续`Dockerfile`指令中使用,它也会被创建。 - -docker build 构建镜像过程中,每一个 RUN 命令都会新建一层。只有通过 WORKDIR 创建的目录才会一直存在。 - -可以设置多个 WORKDIR,如果提供了相对路径,它将相对于前一条`WORKDIR`指令的路径。例如: - -```text -WORKDIR /a -WORKDIR b -WORKDIR c -RUN pwd -``` - -最终`pwd`命令的输出是`/a/b/c`. - -该`WORKDIR`指令可以解析先前使用 `ENV`,例如: - -```text -ENV DIRPATH=/path -WORKDIR $DIRPATH/$DIRNAME -RUN pwd -``` - -最终`pwd`命令的输出是`/path/$DIRNAME`。 - -## 十八、USER - -设置用户名(或 UID)和可选的用户组(或 GID) - -```text -USER <user>[:<group>] -USER <UID>[:<GID>] -``` - -> Dockerfile文件全面详解 - 青火的文章 - 知乎 <https://zhuanlan.zhihu.com/p/387855002> diff --git a/docs/Nginx/Nginx 常用配置.md b/docs/Nginx/Nginx 常用配置.md deleted file mode 100644 index 2a9a3fdc..00000000 --- a/docs/Nginx/Nginx 常用配置.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -id: Nginx 常用配置 -title: Nginx 常用配置 -data: 2022年08月08日 ---- - - -在线配置网站:<https://nginxconfig.io/> - -## 侦听端口 - -```nginx -server { -# Standard HTTP Protocol -listen 80; -# Standard HTTPS Protocol -listen 443 ssl; -# For http2 -listen 443 ssl http2; -# Listen on 80 using IPv6 -listen [::]:80; -# Listen only on using IPv6 -listen [::]:80 ipv6only=on; -} -``` - -## 访问日志 - -```nginx -server { -# Relative or full path to log file -access_log /path/to/file.log; -# Turn 'on' or 'off' -access_log on; -} -``` - -## 域名 - -```nginx -server { -# Listen to yourdomain.com -server_name yourdomain.com; -# Listen to multiple domains server_name yourdomain.com www.yourdomain.com; -# Listen to all domains -server_name *.yourdomain.com; -# Listen to all top-level domains -server_name yourdomain.*; -# Listen to unspecified Hostnames (Listens to IP address itself) -server_name ""; -} -``` - -## 静态资产 - -```nginx -server { -listen 80; -server_name yourdomain.com; -location / { -root /path/to/website; -} -} -``` - -## 重定向 - -```nginx -server { -listen 80; -server_name www.yourdomain.com; -return 301 http://yourdomain.com$request_uri; -} -server { -listen 80; -server_name www.yourdomain.com; -location /redirect-url { -return 301 http://otherdomain.com; -} -} -``` - -## 反向代理 - -```nginx -server { -listen 80; -server_name yourdomain.com; -location / { -proxy_pass http://0.0.0.0:3000; -# where 0.0.0.0:3000 is your application server (Ex: node.js) bound on 0.0.0.0 listening on port 3000 -} -} -``` - -## 负载均衡 - -```nginx -upstream node_js { -server 0.0.0.0:3000; -server 0.0.0.0:4000; -server 123.131.121.122; -} -server { -listen 80; -server_name yourdomain.com; -location / { -proxy_pass http://node_js; -} -} -``` - -## SSL 协议 - -```nginx -server { -listen 443 ssl; -server_name yourdomain.com; -ssl on; -ssl_certificate /path/to/cert.pem; -ssl_certificate_key /path/to/privatekey.pem; -ssl_stapling on; -ssl_stapling_verify on; -ssl_trusted_certificate /path/to/fullchain.pem; -ssl_protocols TLSv1 TLSv1.1 TLSv1.2; -ssl_session_timeout 1h; -ssl_session_cache shared:SSL:50m; -add_header Strict-Transport-Security max-age=15768000; -} -# Permanent Redirect for HTTP to HTTPS -server -{ -listen 80; -server_name yourdomain.com; -return 301 https://$host$request_uri; -} -``` - diff --git a/docs/OpenSSH/rsync 命令.md b/docs/OpenSSH/rsync 命令.md deleted file mode 100644 index 469e01eb..00000000 --- a/docs/OpenSSH/rsync 命令.md +++ /dev/null @@ -1,321 +0,0 @@ ---- -id: rsync 命令 -title: rsync 命令 -sidebar_position: 8 -data: 2022年4月13日 ---- - -## 简介 - -rsync 是一个常用的 Linux 应用程序,用于文件同步。 - -它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代`cp`和`mv`命令。 - -它名称里面的`r`指的是 remote,rsync 其实就是“远程同步”(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。 - -虽然 rsync 不是 SSH 工具集的一部分,但因为也涉及到远程操作,所以放在这里一起介绍。 - -## 安装 - -如果本机或者远程计算机没有安装 rsync,可以用下面的命令安装。 - -```bash -# Debian -$ sudo apt-get install rsync - -# Red Hat -$ sudo yum install rsync - -# Arch Linux -$ sudo pacman -S rsync -``` - -注意,传输的双方都必须安装 rsync。 - -## 基本用法 - -rsync 可以用于本地计算机的两个目录之间的同步。下面就用本地同步举例,顺便讲解 rsync 几个主要参数的用法。 - -### `-r`参数 - -本机使用 rsync 命令时,可以作为`cp`和`mv`命令的替代方法,将源目录拷贝到目标目录。 - -```bash -rsync -r source destination -``` - -上面命令中,`-r`表示递归,即包含子目录。注意,`-r`是必须的,否则 rsync 运行不会成功。`source`目录表示源目录,`destination`表示目标目录。上面命令执行以后,目标目录下就会出现`destination/source`这个子目录。 - -如果有多个文件或目录需要同步,可以写成下面这样。 - -```bash -rsync -r source1 source2 destination -``` - -上面命令中,`source1`、`source2`都会被同步到`destination`目录。 - -### `-a`参数 - -`-a`参数可以替代`-r`,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以`-a`比`-r`更有用。下面的用法才是常见的写法。 - -```bash -rsync -a source destination -``` - -目标目录`destination`如果不存在,rsync 会自动创建。执行上面的命令后,源目录`source`被完整地复制到了目标目录`destination`下面,即形成了`destination/source`的目录结构。 - -如果只想同步源目录`source`里面的内容到目标目录`destination`,则需要在源目录后面加上斜杠。 - -```bash -rsync -a source/ destination -``` - -上面命令执行后,`source`目录里面的内容,就都被复制到了`destination`目录里面,并不会在`destination`下面创建一个`source`子目录。 - -### `-n`参数 - -如果不确定 rsync 执行后会产生什么结果,可以先用`-n`或`--dry-run`参数模拟执行的结果。 - -```bash -rsync -anv source/ destination -``` - -上面命令中,`-n`参数模拟命令执行的结果,并不真的执行命令。`-v`参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。 - -### `--delete`参数 - -默认情况下,rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用`--delete`参数,这将删除只存在于目标目录、不存在于源目录的文件。 - -```bash -rsync -av --delete source/ destination -``` - -上面命令中,`--delete`参数会使得`destination`成为`source`的一个镜像。 - -## 排除文件 - -### `--exclude`参数 - -有时,我们希望同步时排除某些文件或目录,这时可以用`--exclude`参数指定排除模式。 - -```bash -$ rsync -av --exclude='*.txt' source/ destination -# 或者 -$ rsync -av --exclude '*.txt' source/ destination -``` - -上面命令排除了所有 TXT 文件。 - -注意,rsync 会同步以“点”开头的隐藏文件,如果要排除隐藏文件,可以这样写`--exclude=".*"`。 - -如果要排除某个目录里面的所有文件,但不希望排除目录本身,可以写成下面这样。 - -```bash -rsync -av --exclude 'dir1/*' source/ destination -``` - -多个排除模式,可以用多个`--exclude`参数。 - -```bash -rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination -``` - -多个排除模式也可以利用 Bash 的大扩号的扩展功能,只用一个`--exclude`参数。 - -```bash -rsync -av --exclude={'file1.txt','dir1/*'} source/ destination -``` - -如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用`--exclude-from`参数指定这个文件。 - -```bash -rsync -av --exclude-from='exclude-file.txt' source/ destination -``` - -### `--include`参数 - -`--include`参数用来指定必须同步的文件模式,往往与`--exclude`结合使用。 - -```bash -rsync -av --include="*.txt" --exclude='*' source/ destination -``` - -上面命令指定同步时,排除所有文件,但是会包括 TXT 文件。 - -## 远程同步 - -### SSH 协议 - -rsync 除了支持本地两个目录之间的同步,也支持远程同步。它可以将本地内容,同步到远程服务器。 - -```bash -rsync -av source/ username@remote_host:destination -``` - -也可以将远程内容同步到本地。 - -```bash -rsync -av username@remote_host:source/ destination -``` - -rsync 默认使用 SSH 进行远程登录和数据传输。 - -由于早期 rsync 不使用 SSH 协议,需要用`-e`参数指定协议,后来才改的。所以,下面`-e ssh`可以省略。 - -```bash -rsync -av -e ssh source/ user@remote_host:/destination -``` - -但是,如果 ssh 命令有附加的参数,则必须使用`-e`参数指定所要执行的 SSH 命令。 - -```bash -rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination -``` - -上面命令中,`-e`参数指定 SSH 使用2234端口。 - -### rsync 协议 - -除了使用 SSH,如果另一台服务器安装并运行了 rsync 守护程序,则也可以用`rsync://`协议(默认端口873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔`::`。 - -```bash -rsync -av source/ 192.168.122.32::module/destination -``` - -注意,上面地址中的`module`并不是实际路径名,而是 rsync 守护程序指定的一个资源名,由管理员分配。 - -如果想知道 rsync 守护程序分配的所有 module 列表,可以执行下面命令。 - -```bash -rsync rsync://192.168.122.32 -``` - -rsync 协议除了使用双冒号,也可以直接用`rsync://`协议指定地址。 - -```bash -rsync -av source/ rsync://192.168.122.32/module/destination -``` - -## 增量备份 - -rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。 - -除了源目录与目标目录直接比较,rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录。 - -具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。 - -`--link-dest`参数用来指定同步时的基准目录。 - -```bash -rsync -a --delete --link-dest /compare/path /source/path /target/path -``` - -上面命令中,`--link-dest`参数指定基准目录`/compare/path`,然后源目录`/source/path`跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录`/target/path`。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。 - -下面是一个脚本示例,备份用户的主目录。 - -```bash -#!/bin/bash - -# A script to perform incremental backups using rsync - -set -o errexit -set -o nounset -set -o pipefail - -readonly SOURCE_DIR="${HOME}" -readonly BACKUP_DIR="/mnt/data/backups" -readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')" -readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}" -readonly LATEST_LINK="${BACKUP_DIR}/latest" - -mkdir -p "${BACKUP_DIR}" - -rsync -av --delete \ - "${SOURCE_DIR}/" \ - --link-dest "${LATEST_LINK}" \ - --exclude=".cache" \ - "${BACKUP_PATH}" - -rm -rf "${LATEST_LINK}" -ln -s "${BACKUP_PATH}" "${LATEST_LINK}" -``` - -上面脚本中,每一次同步都会生成一个新目录`${BACKUP_DIR}/${DATETIME}`,并将软链接`${BACKUP_DIR}/latest`指向这个目录。下一次备份时,就将`${BACKUP_DIR}/latest`作为基准目录,生成新的备份目录。最后,再将软链接`${BACKUP_DIR}/latest`指向新的备份目录。 - -## 配置项 - -`-a`、`--archive`参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。 - -`--append`参数指定文件接着上次中断的地方,继续传输。 - -`--append-verify`参数跟`--append`参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。 - -`-b`、`--backup`参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由`--suffix`参数指定的文件后缀名,默认是`~`。 - -`--backup-dir`参数指定文件备份时存放的目录,比如`--backup-dir=/path/to/backups`。 - -`--bwlimit`参数指定带宽限制,默认单位是 KB/s,比如`--bwlimit=100`。 - -`-c`、`--checksum`参数改变`rsync`的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。 - -`--delete`参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。 - -`-e`参数指定使用 SSH 协议传输数据。 - -`--exclude`参数指定排除不进行同步的文件,比如`--exclude="*.iso"`。 - -`--exclude-from`参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。 - -`--existing`、`--ignore-non-existing`参数表示不同步目标目录中不存在的文件和目录。 - -`-h`参数表示以人类可读的格式输出。 - -`-h`、`--help`参数返回帮助信息。 - -`-i`参数表示输出源目录与目标目录之间文件差异的详细情况。 - -`--ignore-existing`参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。 - -`--include`参数指定同步时要包括的文件,一般与`--exclude`结合使用。 - -`--link-dest`参数指定增量备份的基准目录。 - -`-m`参数指定不同步空目录。 - -`--max-size`参数设置传输的最大文件的大小限制,比如不超过200KB(`--max-size='200k'`)。 - -`--min-size`参数设置传输的最小文件的大小限制,比如不小于10KB(`--min-size=10k`)。 - -`-n`参数或`--dry-run`参数模拟将要执行的操作,而并不真的执行。配合`-v`参数使用,可以看到哪些内容会被同步过去。 - -`-P`参数是`--progress`和`--partial`这两个参数的结合。 - -`--partial`参数允许恢复中断的传输。不使用该参数时,`rsync`会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与`--append`或`--append-verify`配合使用。 - -`--partial-dir`参数指定将传输到一半的文件保存到一个临时目录,比如`--partial-dir=.rsync-partial`。一般需要与`--append`或`--append-verify`配合使用。 - -`--progress`参数表示显示进展。 - -`-r`参数表示递归,即包含子目录。 - -`--remove-source-files`参数表示传输成功后,删除发送方的文件。 - -`--size-only`参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。 - -`--suffix`参数指定文件名备份时,对文件名添加的后缀,默认是`~`。 - -`-u`、`--update`参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。 - -`-v`参数表示输出细节。`-vv`表示输出更详细的信息,`-vvv`表示输出最详细的信息。 - -`--version`参数返回 rsync 的版本。 - -`-z`参数指定同步时压缩数据。 - -## 参考链接 - -- [How To Use Rsync to Sync Local and Remote Directories on a VPS](https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps), Justin Ellingwood -- [Mirror Your Web Site With rsync](https://www.howtoforge.com/mirroring_with_rsync), Falko Timme -- [Examples on how to use Rsync](https://linuxconfig.org/examples-on-how-to-use-rsync-for-local-and-remote-data-backups-and-synchonization), Egidio Docile -- [How to create incremental backups using rsync on Linux](https://linuxconfig.org/how-to-create-incremental-backups-using-rsync-on-linux), Egidio Docile diff --git a/docs/OpenSSH/scp 命令.md b/docs/OpenSSH/scp 命令.md deleted file mode 100644 index 98b0231e..00000000 --- a/docs/OpenSSH/scp 命令.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -id: scp 命令 -title: scp 命令 -sidebar_position: 7 -data: 2022年4月13日 ---- - -`scp`是 SSH 提供的一个客户端程序,用来在两台主机之间加密传送文件(即复制文件)。 - -## 简介 - -`scp`是 secure copy 的缩写,相当于`cp`命令 + SSH。它的底层是 SSH 协议,默认端口是22,相当于先使用`ssh`命令登录远程主机,然后再执行拷贝操作。 - -`scp`主要用于以下三种复制操作。 - -- 本地复制到远程。 -- 远程复制到本地。 -- 两个远程系统之间的复制。 - -使用`scp`传输数据时,文件和密码都是加密的,不会泄漏敏感信息。 - -## 基本语法 - -`scp`的语法类似`cp`的语法。 - -```bash -scp source destination -``` - -上面命令中,`source`是文件当前的位置,`destination`是文件所要复制到的位置。它们都可以包含用户名和主机名。 - -```bash -scp user@host:foo.txt bar.txt -``` - -上面命令将远程主机(`user@host`)用户主目录下的`foo.txt`,复制为本机当前目录的`bar.txt`。可以看到,主机与文件之间要使用冒号(`:`)分隔。 - -`scp`会先用 SSH 登录到远程主机,然后在加密连接之中复制文件。客户端发起连接后,会提示用户输入密码,这部分是跟 SSH 的用法一致的。 - -用户名和主机名都是可以省略的。用户名的默认值是本机的当前用户名,主机名默认为当前主机。注意,`scp`会使用 SSH 客户端的配置文件`.ssh/config`,如果配置文件里面定义了主机的别名,这里也可以使用别名连接。 - -`scp`支持一次复制多个文件。 - -```bash -scp source1 source2 destination -``` - -上面命令会将`source1`和`source2`两个文件,复制到`destination`。 - -注意,如果所要复制的文件,在目标位置已经存在同名文件,`scp`会在没有警告的情况下覆盖同名文件。 - -## 用法示例 - -**(1)本地文件复制到远程** - -复制本机文件到远程系统的用法如下。 - -```bash -# 语法 -$ scp SourceFile user@host:directory/TargetFile - -# 示例 -$ scp file.txt remote_username@10.10.0.2:/remote/directory -``` - -下面是复制整个目录的例子。 - -```bash -# 将本机的 documents 目录拷贝到远程主机, -# 会在远程主机创建 documents 目录 -$ scp -r documents username@server_ip:/path_to_remote_directory - -# 将本机整个目录拷贝到远程目录下 -$ scp -r localmachine/path_to_the_directory username@server_ip:/path_to_remote_directory/ - -# 将本机目录下的所有内容拷贝到远程目录下 -$ scp -r localmachine/path_to_the_directory/* username@server_ip:/path_to_remote_directory/ -``` - -**(2)远程文件复制到本地** - -从远程主机复制文件到本地的用法如下。 - -```bash -# 语法 -$ scp user@host:directory/SourceFile TargetFile - -# 示例 -$ scp remote_username@10.10.0.2:/remote/file.txt /local/directory -``` - -下面是复制整个目录的例子。 - -```bash -# 拷贝一个远程目录到本机目录下 -$ scp -r username@server_ip:/path_to_remote_directory local-machine/path_to_the_directory/ - -# 拷贝远程目录下的所有内容,到本机目录下 -$ scp -r username@server_ip:/path_to_remote_directory/* local-machine/path_to_the_directory/ -$ scp -r user@host:directory/SourceFolder TargetFolder -``` - -**(3)两个远程系统之间的复制** - -本机发出指令,从远程主机 A 拷贝到远程主机 B 的用法如下。 - -```bash -# 语法 -$ scp user@host1:directory/SourceFile user@host2:directory/SourceFile - -# 示例 -$ scp user1@host1.com:/files/file.txt user2@host2.com:/files -``` - -系统将提示你输入两个远程帐户的密码。数据将直接从一个远程主机传输到另一个远程主机。 - -## 配置项 - -**(1)`-c`** - -`-c`参数用来指定文件拷贝数据传输的加密算法。 - -```bash -scp -c blowfish some_file your_username@remotehost.edu:~ -``` - -上面代码指定加密算法为`blowfish`。 - -**(2)`-C`** - -`-C`参数表示是否在传输时压缩文件。 - -```bash -scp -c blowfish -C local_file your_username@remotehost.edu:~ -``` - -**(3)`-F`** - -`-F`参数用来指定 ssh_config 文件,供 ssh 使用。 - -```bash -scp -F /home/pungki/proxy_ssh_config Label.pdf root@172.20.10.8:/root -``` - -**(4)`-i`** - -`-i`参数用来指定密钥。 - -```bash -scp -vCq -i private_key.pem ~/test.txt root@192.168.1.3:/some/path/test.txt -``` - -**(5)`-l`** - -`-l`参数用来限制传输数据的带宽速率,单位是 Kbit/sec。对于多人分享的带宽,这个参数可以留出一部分带宽供其他人使用。 - -```bash -scp -l 80 yourusername@yourserver:/home/yourusername/* . -``` - -上面代码中,`scp`命令占用的带宽限制为每秒 80K 比特位,即每秒 10K 字节。 - -**(6)`-p`** - -`-p`参数用来保留修改时间(modification time)、访问时间(access time)、文件状态(mode)等原始文件的信息。 - -```bash -scp -p ~/test.txt root@192.168.1.3:/some/path/test.txt -``` - -**(7)`-P`** - -`-P`参数用来指定远程主机的 SSH 端口。如果远程主机使用默认端口22,可以不用指定,否则需要用`-P`参数在命令中指定。 - -```bash -scp -P 2222 user@host:directory/SourceFile TargetFile -``` - -**(8)`-q`** - -`-q`参数用来关闭显示拷贝的进度条。 - -```bash -scp -q Label.pdf mrarianto@202.x.x.x:. -``` - -**(9)`-r`** - -`-r`参数表示是否以递归方式复制目录。 - -**(10)`-v`** - -`-v`参数用来显示详细的输出。 - -```bash -scp -v ~/test.txt root@192.168.1.3:/root/help2356.txt -``` diff --git a/docs/OpenSSH/sftp 命令.md b/docs/OpenSSH/sftp 命令.md deleted file mode 100644 index 0218782e..00000000 --- a/docs/OpenSSH/sftp 命令.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: sftp 命令 -title: sftp 命令 -sidebar_position: 9 -data: 2022年4月13日 ---- - - -`sftp`是 SSH 提供的一个客户端应用程序,主要用来安全地访问 FTP。因为 FTP 是不加密协议,很不安全,`sftp`就相当于将 FTP 放入了 SSH。 - -下面的命令连接 FTP 主机。 - -```bash -sftp username@hostname -``` - -执行上面的命令,会要求输入 FTP 的密码。密码验证成功以后,就会出现 FTP 的提示符`sftp>`,下面是一个例子。 - -```bash -$ sftp USER@penguin.example.com -USER@penguin.example.com's password: -Connected to penguin.example.com. -sftp> -``` - -FTP 的提示符下面,就可以输入各种 FTP 命令了,这部分完全跟传统的 FTP 用法完全一样。 - -- `ls [directory]`:列出一个远程目录的内容。如果没有指定目标目录,则默认列出当前目录。 -- `cd directory`:从当前目录改到指定目录。 -- `mkdir directory`:创建一个远程目录。 -- `rmdir path`:删除一个远程目录。 -- `put localfile [remotefile]`:本地文件传输到远程主机。 -- `get remotefile [localfile]`:远程文件传输到本地。 -- `help`:显示帮助信息。 -- `bye`:退出 sftp。 -- `quit`:退出 sftp。 -- `exit`:退出 sftp。 diff --git a/docs/OpenSSH/客户端.md b/docs/OpenSSH/客户端.md deleted file mode 100644 index 90c22b78..00000000 --- a/docs/OpenSSH/客户端.md +++ /dev/null @@ -1,542 +0,0 @@ ---- -id: 客户端 -title: 客户端 -sidebar_position: 2 -data: 2022年4月13日 ---- - - -## 简介 - -OpenSSH 的客户端是二进制程序 ssh。它在 Linux/Unix 系统的位置是`/usr/local/bin/ssh`,Windows 系统的位置是`\Program Files\OpenSSH\bin\ssh.exe`。 - -Linux 系统一般都自带 ssh,如果没有就需要安装。 - -```bash -# Ubuntu 和 Debian -$ sudo apt install openssh-client - -# CentOS 和 Fedora -$ sudo dnf install openssh-clients -``` - -安装以后,可以使用`-V`参数输出版本号,查看一下是否安装成功。 - -```bash -ssh -V -``` - -## 基本用法 - -ssh 最常见的用途就是登录服务器,这要求服务器安装并正在运行 SSH 服务器软件。 - -ssh 登录服务器的命令如下。 - -```bash -ssh hostname -``` - -上面命令中,`hostname`是主机名,它可以是域名,也可能是 IP 地址或局域网内部的主机名。不指定用户名的情况下,将使用客户端的当前用户名,作为远程服务器的登录用户名。如果要指定用户名,可以采用下面的语法。 - -```bash -ssh user@hostname -``` - -上面的命令中,用户名和主机名写在一起了,之间使用`@`分隔。 - -用户名也可以使用`ssh`的`-l`参数指定,这样的话,用户名和主机名就不用写在一起了。 - -```bash -ssh -l username host -``` - -ssh 默认连接服务器的22端口,`-p`参数可以指定其他端口。 - -```bash -ssh -p 8821 foo.com -``` - -上面命令连接服务器`foo.com`的8821端口。 - -## 连接流程 - -ssh 连接远程服务器后,首先有一个验证过程,验证远程服务器是否为陌生地址。 - -如果是第一次连接某一台服务器,命令行会显示一段文字,表示不认识这台机器,提醒用户确认是否需要连接。 - -```bash -The authenticity of host 'foo.com (192.168.121.111)' can't be established. -ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY. -Are you sure you want to continue connecting (yes/no)? -``` - -上面这段文字告诉用户,`foo.com`这台服务器的指纹是陌生的,让用户选择是否要继续连接(输入 yes 或 no)。 - -所谓“服务器指纹”,指的是 SSH 服务器公钥的哈希值。每台 SSH 服务器都有唯一一对密钥,用于跟客户端通信,其中公钥的哈希值就可以用来识别服务器。 - -下面的命令可以查看某个公钥的指纹。 - -```bash -$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub -256 da:24:43:0b:2e:c1:3f:a1:84:13:92:01:52:b4:84:ff (ECDSA) -``` - -上面的例子中,`ssh-keygen -l -f`命令会输出公钥`/etc/ssh/ssh_host_ecdsa_key.pub`的指纹。 - -ssh 会将本机连接过的所有服务器公钥的指纹,都储存在本机的`~/.ssh/known_hosts`文件中。每次连接服务器时,通过该文件判断是否为陌生主机(陌生公钥)。 - -在上面这段文字后面,输入`yes`,就可以将当前服务器的指纹也储存在本机`~/.ssh/known_hosts`文件中,并显示下面的提示。以后再连接的时候,就不会再出现警告了。 - -```bash -Warning: Permanently added 'foo.com (192.168.121.111)' (RSA) to the list of known hosts -``` - -然后,客户端就会跟服务器建立连接。接着,ssh 就会要求用户输入所要登录账户的密码。用户输入并验证密码正确以后,就能登录远程服务器的 Shell 了。 - -## 服务器密钥变更 - -服务器指纹可以防止有人恶意冒充远程主机。如果服务器的密钥发生变更(比如重装了 SSH 服务器),客户端再次连接时,就会发生公钥指纹不吻合的情况。这时,客户端就会中断连接,并显示一段警告信息。 - -```bash -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! -Someone could be eavesdropping on you right now (man-in-the-middle attack)! -It is also possible that the RSA host key has just been changed. -The fingerprint for the RSA key sent by the remote host is -77:a5:69:81:9b:eb:40:76:7b:13:04:a9:6c:f4:9c:5d. -Please contact your system administrator. -Add correct host key in /home/me/.ssh/known_hosts to get rid of this message. -Offending key in /home/me/.ssh/known_hosts:36 -``` - -上面这段文字的意思是,该主机的公钥指纹跟`~/.ssh/known_hosts`文件储存的不一样,必须处理以后才能连接。这时,你需要确认是什么原因,使得公钥指纹发生变更,到底是恶意劫持,还是管理员变更了 SSH 服务器公钥。 - -如果新的公钥确认可以信任,需要继续执行连接,你可以执行下面的命令,将原来的公钥指纹从`~/.ssh/known_hosts`文件删除。 - -```bash -ssh-keygen -R hostname -``` - -上面命令中,`hostname`是发生公钥变更的主机名。 - -除了使用上面的命令,你也可以手工修改`known_hosts`文件,将公钥指纹删除。 - -删除了原来的公钥指纹以后,重新执行 ssh 命令连接远程服务器,将新的指纹加入`known_hosts`文件,就可以顺利连接了。 - -## 执行远程命令 - -SSH 登录成功后,用户就进入了远程主机的命令行环境,所看到的提示符,就是远程主机的提示符。这时,你就可以输入想要在远程主机执行的命令。 - -另一种执行远程命令的方法,是将命令直接写在`ssh`命令的后面。 - -```bash -ssh username@hostname command -``` - -上面的命令会使得 SSH 在登录成功后,立刻在远程主机上执行命令`command`。 - -下面是一个例子。 - -```bash -ssh foo@server.example.com cat /etc/hosts -``` - -上面的命令会在登录成功后,立即远程执行命令`cat /etc/hosts`。 - -采用这种语法执行命令时,ssh 客户端不会提供互动式的 Shell 环境,而是直接将远程命令的执行结果输出在命令行。但是,有些命令需要互动式的 Shell 环境,这时就要使用`-t`参数。 - -```bash -# 报错 -$ ssh remote.server.com emacs -emacs: standard input is not a tty - -# 不报错 -$ ssh -t server.example.com emacs -``` - -上面代码中,`emacs`命令需要一个互动式 Shell,所以报错。只有加上`-t`参数,ssh 才会分配一个互动式 Shell。 - -## 加密参数 - -SSH 连接的握手阶段,客户端必须跟服务端约定加密参数集(cipher suite)。 - -加密参数集包含了若干不同的加密参数,它们之间使用下划线连接在一起,下面是一个例子。 - -```bash -TLS_RSA_WITH_AES_128_CBC_SHA -``` - -它的含义如下。 - -- TLS:加密通信协议 -- RSA:密钥交换算法 -- AES:加密算法 -- 128:加密算法的强度 -- CBC:加密算法的模式 -- SHA:数字签名的 Hash 函数 - -下面是一个例子,客户端向服务器发出的握手信息。 - -```http -Handshake protocol: ClientHello - Version: TLS 1.2 - Random - Client time: May 22, 2030 02:43:46 GMT - Random bytes: b76b0e61829557eb4c611adfd2d36eb232dc1332fe29802e321ee871 - Session ID: (empty) - Cipher Suites - Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256” - Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 - Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA - Suite: TLS_RSA_WITH_AES_128_CBC_SHA - Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA - Suite: TLS_RSA_WITH_RC4_128_SHA - Compression methods - Method: null - Extensions - Extension: server_name - Hostname: www.feistyduck.com - Extension: renegotiation_info - Extension: elliptic_curves - Named curve: secp256r1 - Named curve: secp384r1 - Extension: signature_algorithms - Algorithm: sha1/rsa - Algorithm: sha256/rsa - Algorithm: sha1/ecdsa - Algorithm: sha256/ecdsa” -``` - -上面的握手信息(ClientHello)之中,`Cipher Suites`字段就是客户端列出可选的加密参数集,服务器在其中选择一个自己支持的参数集。 - -服务器选择完毕之后,向客户端发出回应。 - -```http -Handshake protocol: ServerHello - Version: TLS 1.2 - Random - Server time: Mar 10, 2059 02:35:57 GMT” - Random bytes: 8469b09b480c1978182ce1b59290487609f41132312ca22aacaf5012 - Session ID: 4cae75c91cf5adf55f93c9fb5dd36d19903b1182029af3d527b7a42ef1c32c80 - Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - Compression method: null - Extensions - Extension: server_name - Extension: renegotiation_info” -``` - -上面的回应信息(ServerHello)中,`Cipher Suite`字段就是服务器最终选定的加密参数。 - -## ssh 命令行配置项 - -ssh 命令有很多配置项,修改它的默认行为。 - -**-c** - -`-c`参数指定加密算法。 - -```bash -$ ssh -c blowfish,3des server.example.com -# 或者 -$ ssh -c blowfish -c 3des server.example.com -``` - -上面命令指定使用加密算法`blowfish`或`3des`。 - -**-C** - -`-C`参数表示压缩数据传输。 - -```bash -ssh -C server.example.com -``` - -**-D** - -`-D`参数指定本机的 Socks 监听端口,该端口收到的请求,都将转发到远程的 SSH 主机,又称动态端口转发,详见《端口转发》一章。 - -```bash -ssh -D 1080 server -``` - -上面命令将本机 1080 端口收到的请求,都转发到服务器`server`。 - -**-f** - -`-f`参数表示 SSH 连接在后台运行。 - -**-F** - -`-F`参数指定配置文件。 - -```bash -ssh -F /usr/local/ssh/other_config -``` - -上面命令指定使用配置文件`other_config`。 - -**-i** - -`-i`参数用于指定私钥,意为“identity_file”,默认值为`~/.ssh/id_dsa`(DSA 算法)和`~/.ssh/id_rsa`(RSA 算法)。注意,对应的公钥必须存放到服务器,详见《密钥登录》一章。 - -```bash -ssh -i my-key server.example.com -``` - -**-l** - -`-l`参数指定远程登录的账户名。 - -```bash -$ ssh -l sally server.example.com -# 等同于 -$ ssh sally@server.example.com -``` - -**-L** - -`-L`参数设置本地端口转发,详见《端口转发》一章。 - -```bash -ssh -L 9999:targetServer:80 user@remoteserver -``` - -上面命令中,所有发向本地`9999`端口的请求,都会经过`remoteserver`发往 targetServer 的 80 端口,这就相当于直接连上了 targetServer 的 80 端口。 - -**-m** - -`-m`参数指定校验数据完整性的算法(message authentication code,简称 MAC)。 - -```bash -ssh -m hmac-sha1,hmac-md5 server.example.com -``` - -上面命令指定数据校验算法为`hmac-sha1`或`hmac-md5`。 - -**-N** - -`-N`参数用于端口转发,表示建立的 SSH 只用于端口转发,不能执行远程命令,这样可以提供安全性,详见《端口转发》一章。 - -**-o** - -`-o`参数用来指定一个配置命令。 - -```bash -ssh -o "Keyword Value" -``` - -举例来说,配置文件里面有如下内容。 - -```bash -User sally -Port 220 -``` - -通过`-o`参数,可以把上面两个配置命令从命令行传入。 - -```bash -ssh -o "User sally" -o "Port 220" server.example.com -``` - -使用等号时,配置命令可以不用写在引号里面,但是等号前后不能有空格。 - -```bash -ssh -o User=sally -o Port=220 server.example.com -``` - -**-p** - -`-p`参数指定 SSH 客户端连接的服务器端口。 - -```bash -ssh -p 2035 server.example.com -``` - -上面命令连接服务器的2035端口。 - -**-q** - -`-q`参数表示安静模式(quiet),不向用户输出任何警告信息。 - -```bash -$ ssh –q foo.com -root’s password: -``` - -上面命令使用`-q`参数,只输出要求用户输入密码的提示。 - -**-R** - -`-R`参数指定远程端口转发,详见《端口转发》一章。 - -```bash -ssh -R 9999:targetServer:902 local -``` - -上面命令需在跳板服务器执行,指定本地计算机`local`监听自己的 9999 端口,所有发向这个端口的请求,都会转向 targetServer 的 902 端口。 - -**-t** - -`-t`参数在 ssh 直接运行远端命令时,提供一个互动式 Shell。 - -```bash -ssh -t server.example.com emacs -``` - -**-v** - -`-v`参数显示详细信息。 - -```bash -ssh -v server.example.com -``` - -`-v`可以重复多次,表示信息的详细程度,比如`-vv`和`-vvv`。 - -```bash -$ ssh -vvv server.example.com -# 或者 -$ ssh -v -v -v server.example.com -``` - -上面命令会输出最详细的连接信息。 - -**-V** - -`-V`参数输出 ssh 客户端的版本。 - -```bash -$ ssh –V -ssh: SSH Secure Shell 3.2.3 (non-commercial version) on i686-pc-linux-gnu -``` - -上面命令输出本机 ssh 客户端版本是`SSH Secure Shell 3.2.3`。 - -**-X** - -`-X`参数表示打开 X 窗口转发。 - -```bash -ssh -X server.example.com -``` - -**-1,-2** - -`-1`参数指定使用 SSH 1 协议。 - -`-2`参数指定使用 SSH 2 协议。 - -```ssh -ssh -2 server.example.com -``` - -**-4,-6** - -`-4`指定使用 IPv4 协议,这是默认值。 - -```bash -ssh -4 server.example.com -``` - -`-6`指定使用 IPv6 协议。 - -```bash -ssh -6 server.example.com -``` - -## 客户端配置文件 - -### 位置 - -SSH 客户端的全局配置文件是`/etc/ssh/ssh_config`,用户个人的配置文件在`~/.ssh/config`,优先级高于全局配置文件。 - -除了配置文件,`~/.ssh`目录还有一些用户个人的密钥文件和其他文件。下面是其中一些常见的文件。 - -- `~/.ssh/id_ecdsa`:用户的 ECDSA 私钥。 -- `~/.ssh/id_ecdsa.pub`:用户的 ECDSA 公钥。 -- `~/.ssh/id_rsa`:用于 SSH 协议版本2 的 RSA 私钥。 -- `~/.ssh/id_rsa.pub`:用于SSH 协议版本2 的 RSA 公钥。 -- `~/.ssh/identity`:用于 SSH 协议版本1 的 RSA 私钥。 -- `~/.ssh/identity.pub`:用于 SSH 协议版本1 的 RSA 公钥。 -- `~/.ssh/known_hosts`:包含 SSH 服务器的公钥指纹。 - -### 主机设置 - -用户个人的配置文件`~/.ssh/config`,可以按照不同服务器,列出各自的连接参数,从而不必每一次登录都输入重复的参数。下面是一个例子。 - -```bash -Host * - Port 2222 - -Host remoteserver - HostName remote.example.com - User neo - Port 2112 -``` - -上面代码中,`Host *`表示对所有主机生效,后面的`Port 2222`表示所有主机的默认连接端口都是2222,这样就不用在登录时特别指定端口了。这里的缩进并不是必需的,只是为了视觉上,易于识别针对不同主机的设置。 - -后面的`Host remoteserver`表示,下面的设置只对主机`remoteserver`生效。`remoteserver`只是一个别名,具体的主机由`HostName`命令指定,`User`和`Port`这两项分别表示用户名和端口。这里的`Port`会覆盖上面`Host *`部分的`Port`设置。 - -以后,登录`remote.example.com`时,只要执行`ssh remoteserver`命令,就会自动套用 config 文件里面指定的参数。 -单个主机的配置格式如下。 - -```bash -$ ssh remoteserver -# 等同于 -$ ssh -p 2112 neo@remote.example.com -``` - -`Host`命令的值可以使用通配符,比如`Host *`表示对所有主机都有效的设置,`Host *.edu`表示只对一级域名为`.edu`的主机有效的设置。它们的设置都可以被单个主机的设置覆盖。 - -### 配置命令的语法 - -ssh 客户端配置文件的每一行,就是一个配置命令。配置命令与对应的值之间,可以使用空格,也可以使用等号。 - -```bash -Compression yes -# 等同于 -Compression = yes -``` - -`#`开头的行表示注释,会被忽略。空行等同于注释。 - -### 主要配置命令 - -下面是 ssh 客户端的一些主要配置命令,以及它们的范例值。 - -- `AddressFamily inet`:表示只使用 IPv4 协议。如果设为`inet6`,表示只使用 IPv6 协议。 -- `BindAddress 192.168.10.235`:指定本机的 IP 地址(如果本机有多个 IP 地址)。 -- `CheckHostIP yes`:检查 SSH 服务器的 IP 地址是否跟公钥数据库吻合。 -- `Ciphers blowfish,3des`:指定加密算法。 -- `Compression yes`:是否压缩传输信号。 -- `ConnectionAttempts 10`:客户端进行连接时,最大的尝试次数。 -- `ConnectTimeout 60`:客户端进行连接时,服务器在指定秒数内没有回复,则中断连接尝试。 -- `DynamicForward 1080`:指定动态转发端口。 -- `GlobalKnownHostsFile /users/smith/.ssh/my_global_hosts_file`:指定全局的公钥数据库文件的位置。 -- `Host server.example.com`:指定连接的域名或 IP 地址,也可以是别名,支持通配符。`Host`命令后面的所有配置,都是针对该主机的,直到下一个`Host`命令为止。 -- `HostKeyAlgorithms ssh-dss,ssh-rsa`:指定密钥算法,优先级从高到低排列。 -- `HostName myserver.example.com`:在`Host`命令使用别名的情况下,`HostName`指定域名或 IP 地址。 -- `IdentityFile keyfile`:指定私钥文件。 -- `LocalForward 2001 localhost:143`:指定本地端口转发。 -- `LogLevel QUIET`:指定日志详细程度。如果设为`QUIET`,将不输出大部分的警告和提示。 -- `MACs hmac-sha1,hmac-md5`:指定数据校验算法。 -- `NumberOfPasswordPrompts 2`:密码登录时,用户输错密码的最大尝试次数。 -- `PasswordAuthentication no`:指定是否支持密码登录。不过,这里只是客户端禁止,真正的禁止需要在 SSH 服务器设置。 -- `Port 2035`:指定客户端连接的 SSH 服务器端口。 -- `PreferredAuthentications publickey,hostbased,password`:指定各种登录方法的优先级。 -- `Protocol 2`:支持的 SSH 协议版本,多个版本之间使用逗号分隔。 -- `PubKeyAuthentication yes`:是否支持密钥登录。这里只是客户端设置,还需要在 SSH 服务器进行相应设置。 -- `RemoteForward 2001 server:143`:指定远程端口转发。 -- `SendEnv COLOR`:SSH 客户端向服务器发送的环境变量名,多个环境变量之间使用空格分隔。环境变量的值从客户端当前环境中拷贝。 -- `ServerAliveCountMax 3`:如果没有收到服务器的回应,客户端连续发送多少次`keepalive`信号,才断开连接。该项默认值为3。 -- `ServerAliveInterval 300`:客户端建立连接后,如果在给定秒数内,没有收到服务器发来的消息,客户端向服务器发送`keepalive`消息。如果不希望客户端发送,这一项设为`0`。 -- `StrictHostKeyChecking yes`:`yes`表示严格检查,服务器公钥为未知或发生变化,则拒绝连接。`no`表示如果服务器公钥未知,则加入客户端公钥数据库,如果公钥发生变化,不改变客户端公钥数据库,输出一条警告,依然允许连接继续进行。`ask`(默认值)表示询问用户是否继续进行。 -- `TCPKeepAlive yes`:客户端是否定期向服务器发送`keepalive`信息。 -- `User userName`:指定远程登录的账户名。 -- `UserKnownHostsFile /users/smith/.ssh/my_local_hosts_file`:指定当前用户的`known_hosts`文件(服务器公钥指纹列表)的位置。 -- `VerifyHostKeyDNS yes`:是否通过检查 SSH 服务器的 DNS 记录,确认公钥指纹是否与`known_hosts`文件保存的一致。 diff --git a/docs/OpenSSH/密钥登录.md b/docs/OpenSSH/密钥登录.md deleted file mode 100644 index e1b50152..00000000 --- a/docs/OpenSSH/密钥登录.md +++ /dev/null @@ -1,323 +0,0 @@ ---- -id: 密钥登录 -title: 密钥登录 -sidebar_position: 3 -data: 2022年4月13日 ---- - -SSH 默认采用密码登录,这种方法有很多缺点,简单的密码不安全,复杂的密码不容易记忆,每次手动输入也很麻烦。密钥登录是比密码登录更好的解决方案。 - -## 密钥是什么 - -密钥(key)是一个非常大的数字,通过加密算法得到。对称加密只需要一个密钥,非对称加密需要两个密钥成对使用,分为公钥(public key)和私钥(private key)。 - -SSH 密钥登录采用的是非对称加密,每个用户通过自己的密钥登录。其中,私钥必须私密保存,不能泄漏;公钥则是公开的,可以对外发送。它们的关系是,公钥和私钥是一一对应的,每一个私钥都有且仅有一个对应的公钥,反之亦然。 - -如果数据使用公钥加密,那么只有使用对应的私钥才能解密,其他密钥都不行;反过来,如果使用私钥加密(这个过程一般称为“签名”),也只有使用对应的公钥解密。 - -## 密钥登录的过程 - -SSH 密钥登录分为以下的步骤。 - -预备步骤,客户端通过`ssh-keygen`生成自己的公钥和私钥。 - -第一步,手动将客户端的公钥放入远程服务器的指定位置。 - -第二步,客户端向服务器发起 SSH 登录的请求。 - -第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。 - -第四步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。 - -第五步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。 - -## `ssh-keygen`命令:生成密钥 - -密钥登录时,首先需要生成公钥和私钥。OpenSSH 提供了一个工具程序`ssh-keygen`命令,用来生成密钥。 - -直接输入`ssh-keygen`,程序会询问一系列问题,然后生成密钥。 - -```bash -ssh-keygen -``` - -通常做法是使用`-t`参数,指定密钥的加密算法。 - -```bash -ssh-keygen -t dsa -``` - -上面示例中,`-t`参数用来指定密钥的加密算法,一般会选择 DSA 算法或 RSA 算法。如果省略该参数,默认使用 RSA 算法。 - -输入上面的命令以后,`ssh-keygen`会要求用户回答一些问题。 - -```bash -$ ssh-keygen -t dsa -Generating public/private dsa key pair. -Enter file in which to save the key (/home/username/.ssh/id_dsa): press ENTER -Enter passphrase (empty for no passphrase): ******** -Enter same passphrase again: ******** -Your identification has been saved in /home/username/.ssh/id_dsa. -Your public key has been saved in /home/username/.ssh/id_dsa.pub. -The key fingerprint is: -14:ba:06:98:a8:98:ad:27:b5:ce:55:85:ec:64:37:19 username@shell.isp.com -``` - -上面示例中,执行`ssh-keygen`命令以后,会出现第一个问题,询问密钥保存的文件名,默认是`~/.ssh/id_dsa`文件,这个是私钥的文件名,对应的公钥文件`~/.ssh/id_dsa.pub`是自动生成的。用户的密钥一般都放在主目录的`.ssh`目录里面。 - -如果选择`rsa`算法,生成的密钥文件默认就会是`~/.ssh/id_rsa`(私钥)和`~/.ssh/id_rsa.pub`(公钥)。 - -接着,就会是第二个问题,询问是否要为私钥文件设定密码保护(passphrase)。这样的话,即使入侵者拿到私钥,还是需要破解密码。如果为了方便,不想设定密码保护,可以直接按回车键,密码就会为空。后面还会让你再输入一次密码,两次输入必须一致。注意,这里“密码”的英文单词是 passphrase,这是为了避免与 Linux 账户的密码单词 password 混淆,表示这不是用户系统账户的密码。 - -最后,就会生成私钥和公钥,屏幕上还会给出公钥的指纹,以及当前的用户名和主机名作为注释,用来识别密钥的来源。 - -公钥文件和私钥文件都是文本文件,可以用文本编辑器看一下它们的内容。公钥文件的内容类似下面这样。 - -```bash -ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvpB4lUbAaEbh9u6HLig7amsfywD4fqSZq2ikACIUBn3GyRPfeF93l/ -weQh702ofXbDydZAKMcDvBJqRhUotQUwqV6HJxqoqPDlPGUUyo8RDIkLUIPRyq -ypZxmK9aCXokFiHoGCXfQ9imUP/w/jfqb9ByDtG97tUJF6nFMP5WzhM= username@shell.isp.com -``` - -上面示例中,末尾的`username@shell.isp.com`是公钥的注释,用来识别不同的公钥,表示这是哪台主机(`shell.isp.com`)的哪个用户(`username`)的公钥,不是必需项。 - -注意,公钥只有一行。因为它太长了,所以上面分成三行显示。 - -下面的命令可以列出用户所有的公钥。 - -```bash -ls -l ~/.ssh/id_*.pub -``` - -生成密钥以后,建议修改它们的权限,防止其他人读取。 - -```bash -chmod 600 ~/.ssh/id_rsa -chmod 600 ~/.ssh/id_rsa.pub -``` - -### 配置项 - -`ssh-keygen`的命令行配置项,主要有下面这些。 - -**(1)`-b`** - -`-b`参数指定密钥的二进制位数。这个参数值越大,密钥就越不容易破解,但是加密解密的计算开销也会加大。 - -一般来说,`-b`至少应该是`1024`,更安全一些可以设为`2048`或者更高。 - -**(2)`-C`** - -`-C`参数可以为密钥文件指定新的注释,格式为`username@host`。 - -下面命令生成一个4096位 RSA 加密算法的密钥对,并且给出了用户名和主机名。 - -```bash -ssh-keygen -t rsa -b 4096 -C "your_email@domain.com" -``` - -**(3)`-f`** - -`-f`参数指定生成的私钥文件。 - -```bash -ssh-keygen -t dsa -f mykey -``` - -上面命令会在当前目录生成私钥文件`mykey`和公钥文件`mykey.pub`。 - -**(4)`-F`** - -`-F`参数检查某个主机名是否在`known_hosts`文件里面。 - -```bash -ssh-keygen -F example.com -``` - -**(5)`-N`** - -`-N`参数用于指定私钥的密码(passphrase)。 - -```bash -ssh-keygen -t dsa -N secretword -``` - -**(6)`-p`** - -`-p`参数用于重新指定私钥的密码(passphrase)。它与`-N`的不同之处在于,新密码不在命令中指定,而是执行后再输入。ssh 先要求输入旧密码,然后要求输入两遍新密码。 - -**(7)`-R`** - -`-R`参数将指定的主机公钥指纹移出`known_hosts`文件。 - -```bash -ssh-keygen -R example.com -``` - -**(8)`-t`** - -`-t`参数用于指定生成密钥的加密算法,一般为`dsa`或`rsa` - -## 手动上传公钥 - -生成密钥以后,公钥必须上传到服务器,才能使用公钥登录。 - -OpenSSH 规定,用户公钥保存在服务器的`~/.ssh/authorized_keys`文件。你要以哪个用户的身份登录到服务器,密钥就必须保存在该用户主目录的`~/.ssh/authorized_keys`文件。只要把公钥添加到这个文件之中,就相当于公钥上传到服务器了。每个公钥占据一行。如果该文件不存在,可以手动创建。 - -用户可以手动编辑该文件,把公钥粘贴进去,也可以在本机计算机上,执行下面的命令。 - -```bash -cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" -``` - -上面示例中,`user@host`要替换成你所要登录的用户名和主机名。 - -注意,`authorized_keys`文件的权限要设为`644`,即只有文件所有者才能写。如果权限设置不对,SSH 服务器可能会拒绝读取该文件。 - -```bash -chmod 644 ~/.ssh/authorized_keys -``` - -只要公钥上传到服务器,下次登录时,OpenSSH 就会自动采用密钥登录,不再提示输入密码。 - -```bash -$ ssh -l username shell.isp.com -Enter passphrase for key '/home/you/.ssh/id_dsa': ************ -Last login: Mon Mar 24 02:17:27 2014 from ex.ample.com -shell.isp.com> -``` - -上面例子中,SSH 客户端使用私钥之前,会要求用户输入密码(passphrase),用来解开私钥。 - -## ssh-copy-id 命令:自动上传公钥 - -OpenSSH 自带一个`ssh-copy-id`命令,可以自动将公钥拷贝到远程服务器的`~/.ssh/authorized_keys`文件。如果`~/.ssh/authorized_keys`文件不存在,`ssh-copy-id`命令会自动创建该文件。 - -用户在本地计算机执行下面的命令,就可以把本地的公钥拷贝到服务器。 - -```bash -ssh-copy-id -i key_file user@host -``` - -上面命令中,`-i`参数用来指定公钥文件,`user`是所要登录的账户名,`host`是服务器地址。如果省略用户名,默认为当前的本机用户名。执行完该命令,公钥就会拷贝到服务器。 - -注意,公钥文件可以不指定路径和`.pub`后缀名,`ssh-copy-id`会自动在`~/.ssh`目录里面寻找。 - -```bash -ssh-copy-id -i id_rsa user@host -``` - -上面命令中,公钥文件会自动匹配到`~/.ssh/id_rsa.pub`。 - -`ssh-copy-id`会采用密码登录,系统会提示输入远程服务器的密码。 - -注意,`ssh-copy-id`是直接将公钥添加到`authorized_keys`文件的末尾。如果`authorized_keys`文件的末尾不是一个换行符,会导致新的公钥添加到前一个公钥的末尾,两个公钥连在一起,使得它们都无法生效。所以,如果`authorized_keys`文件已经存在,使用`ssh-copy-id`命令之前,务必保证`authorized_keys`文件的末尾是换行符(假设该文件已经存在)。 - -## ssh-agent 命令,ssh-add 命令 - -私钥设置了密码以后,每次使用都必须输入密码,有时让人感觉非常麻烦。比如,连续使用`scp`命令远程拷贝文件时,每次都要求输入密码。 - -`ssh-agent`命令就是为了解决这个问题而设计的,它让用户在整个 Bash 对话(session)之中,只在第一次使用 SSH 命令时输入密码,然后将私钥保存在内存中,后面都不需要再输入私钥的密码了。 - -第一步,使用下面的命令新建一次命令行对话。 - -```bash -ssh-agent bash -``` - -上面命令中,如果你使用的命令行环境不是 Bash,可以用其他的 Shell 命令代替。比如`zsh`和`fish`。 - -如果想在当前对话启用`ssh-agent`,可以使用下面的命令。 - -```bash -eval `ssh-agent` -``` - -上面命令中,`ssh-agent`会先自动在后台运行,并将需要设置的环境变量输出在屏幕上,类似下面这样。 - -```bash -$ ssh-agent -SSH_AUTH_SOCK=/tmp/ssh-barrett/ssh-22841-agent; export SSH_AUTH_SOCK; -SSH_AGENT_PID=22842; export SSH_AGENT_PID; -echo Agent pid 22842; -``` - -`eval`命令的作用,就是运行上面的`ssh-agent`命令的输出,设置环境变量。 - -第二步,在新建的 Shell 对话里面,使用`ssh-add`命令添加默认的私钥(比如`~/.ssh/id_rsa`,或`~/.ssh/id_dsa`,或`~/.ssh/id_ecdsa`,或`~/.ssh/id_ed25519`)。 - -```bash -$ ssh-add -Enter passphrase for /home/you/.ssh/id_dsa: ******** -Identity added: /home/you/.ssh/id_dsa (/home/you/.ssh/id_dsa) -``` - -上面例子中,添加私钥时,会要求输入密码。以后,在这个对话里面再使用密钥时,就不需要输入私钥的密码了,因为私钥已经加载到内存里面了。 - -如果添加的不是默认私钥,`ssh-add`命令需要显式指定私钥文件。 - -```bash -ssh-add my-other-key-file -``` - -上面的命令中,`my-other-key-file`就是用户指定的私钥文件。 - -第三步,使用 ssh 命令正常登录远程服务器。 - -```bash -ssh remoteHost -``` - -上面命令中,`remoteHost`是远程服务器的地址,ssh 使用的是默认的私钥。这时如果私钥设有密码,ssh 将不再询问密码,而是直接取出内存里面的私钥。 - -如果要使用其他私钥登录服务器,需要使用 ssh 命令的`-i`参数指定私钥文件。 - -```bash -ssh –i OpenSSHPrivateKey remoteHost -``` - -最后,如果要退出`ssh-agent`,可以直接退出子 Shell(按下 Ctrl + d),也可以使用下面的命令。 - -```bash -ssh-agent -k -``` - -### `ssh-add`命令 - -`ssh-add`命令用来将私钥加入`ssh-agent`,它有如下的参数。 - -**(1)`-d`** - -`-d`参数从内存中删除指定的私钥。 - -```bash -ssh-add -d name-of-key-file -``` - -**(2)`-D`** - -`-D`参数从内存中删除所有已经添加的私钥。 - -```bash -ssh-add -D -``` - -**(3)`-l`** - -`-l`参数列出所有已经添加的私钥。 - -```bash -ssh-add -l -``` - -## 关闭密码登录 - -为了安全性,启用密钥登录之后,最好关闭服务器的密码登录。 - -对于 OpenSSH,具体方法就是打开服务器 sshd 的配置文件`/etc/ssh/sshd_config`,将`PasswordAuthentication`这一项设为`no`。 - -```bash -PasswordAuthentication no -``` - -修改配置文件以后,不要忘了重新启动 sshd,否则不会生效。 diff --git a/docs/OpenSSH/服务器.md b/docs/OpenSSH/服务器.md deleted file mode 100644 index f7293783..00000000 --- a/docs/OpenSSH/服务器.md +++ /dev/null @@ -1,435 +0,0 @@ ---- -id: 服务器 -title: 服务器 -sidebar_position: 4 -data: 2022年4月13日 ---- -## 简介 - -SSH 的架构是服务器/客户端模式,两端运行的软件是不一样的。OpenSSH 的客户端软件是 ssh,服务器软件是 sshd。本章介绍 sshd 的各种知识。 - -如果没有安装 sshd,可以用下面的命令安装。 - -```bash -# Debian -$ sudo aptitude install openssh-server - -# Red Hat -$ sudo yum install openssh-server -``` - -一般来说,sshd 安装后会跟着系统一起启动。如果当前 sshd 没有启动,可以用下面的命令启动。 - -```bash -sshd -``` - -上面的命令运行后,如果提示“sshd re-exec requires execution with an absolute path”,就需要使用绝对路径来启动。这是为了防止有人出于各种目的,放置同名软件在`$PATH`变量指向的目录中,代替真正的 sshd。 - -```bash -# Centos、Ubuntu、OS X -$ /usr/sbin/sshd -``` - -上面的命令运行以后,sshd 自动进入后台,所以命令后面不需要加上`&`。 - -除了直接运行可执行文件,也可以通过 Systemd 启动 sshd。 - -```bash -# 启动 -$ sudo systemctl start sshd.service - -# 停止 -$ sudo systemctl stop sshd.service - -# 重启 -$ sudo systemctl restart sshd.service -``` - -下面的命令让 sshd 在计算机下次启动时自动运行。 - -```bash -sudo systemctl enable sshd.service -``` - -## sshd 配置文件 - -sshd 的配置文件在`/etc/ssh`目录,主配置文件是`sshd_config`,此外还有一些安装时生成的密钥。 - -- `/etc/ssh/sshd_config`:配置文件 -- `/etc/ssh/ssh_host_ecdsa_key`:ECDSA 私钥。 -- `/etc/ssh/ssh_host_ecdsa_key.pub`:ECDSA 公钥。 -- `/etc/ssh/ssh_host_key`:用于 SSH 1 协议版本的 RSA 私钥。 -- `/etc/ssh/ssh_host_key.pub`:用于 SSH 1 协议版本的 RSA 公钥。 -- `/etc/ssh/ssh_host_rsa_key`:用于 SSH 2 协议版本的 RSA 私钥。 -- `/etc/ssh/ssh_host_rsa_key.pub`:用于 SSH 2 协议版本的 RSA 公钥。 -- `/etc/pam.d/sshd`:PAM 配置文件。 - -注意,如果重装 sshd,上面这些密钥都会重新生成,导致客户端重新连接 ssh 服务器时,会跳出警告,拒绝连接。为了避免这种情况,可以在重装 sshd 时,先备份`/etc/ssh`目录,重装后再恢复这个目录。 - -配置文件`sshd_config`的格式是,每个命令占据一行。每行都是配置项和对应的值,配置项的大小写不敏感,与值之间使用空格分隔。 - -```bash -Port 2034 -``` - -上面的配置命令指定,配置项`Port`的值是`2034`。`Port`写成`port`也可。 - -配置文件还有另一种格式,就是配置项与值之间有一个等号,等号前后的空格可选。 - -```bash -Port = 2034 -``` - -配置文件里面,`#`开头的行表示注释。 - -```bash -# 这是一行注释 -``` - -注意,注释只能放在一行的开头,不能放在一行的结尾。 - -```bash -Port 2034 # 此处不允许注释 -``` - -上面的写法是错误的。 - -另外,空行等同于注释。 - -sshd 启动时会自动读取默认的配置文件。如果希望使用其他的配置文件,可以用 sshd 命令的`-f`参数指定。 - -```bash -sshd -f /usr/local/ssh/my_config -``` - -上面的命令指定 sshd 使用另一个配置文件`my_config`。 - -修改配置文件以后,可以用 sshd 命令的`-t`(test)检查有没有语法错误。 - -```bash -sshd -t -``` - -配置文件修改以后,并不会自动生效,必须重新启动 sshd。 - -```bash -sudo systemctl restart sshd.service -``` - -## sshd 密钥 - -sshd 有自己的一对或多对密钥。它使用密钥向客户端证明自己的身份。所有密钥都是公钥和私钥成对出现,公钥的文件名一般是私钥文件名加上后缀`.pub`。 - -DSA 格式的密钥文件默认为`/etc/ssh/ssh_host_dsa_key`(公钥为`ssh_host_dsa_key.pub`),RSA 格式的密钥为`/etc/ssh/ssh_host_rsa_key`(公钥为`ssh_host_rsa_key.pub`)。如果需要支持 SSH 1 协议,则必须有密钥`/etc/ssh/ssh_host_key`。 - -如果密钥不是默认文件,那么可以通过配置文件`sshd_config`的`HostKey`配置项指定。默认密钥的`HostKey`设置如下。 - -```bash -# HostKey for protocol version 1 -# HostKey /etc/ssh/ssh_host_key - -# HostKeys for protocol version 2 -# HostKey /etc/ssh/ssh_host_rsa_key -# HostKey /etc/ssh/ssh_host_dsa_ke -``` - -上面命令前面的`#`表示这些行都是注释,因为这是默认值,有没有这几行都一样。 - -如果要修改密钥,就要去掉行首的`#`,指定其他密钥。 - -```bash -HostKey /usr/local/ssh/my_dsa_key -HostKey /usr/local/ssh/my_rsa_key -HostKey /usr/local/ssh/my_old_ssh1_key -``` - -## sshd 配置项 - -以下是`/etc/ssh/sshd_config`文件里面的配置项。 - -**AcceptEnv** - -`AcceptEnv`指定允许接受客户端通过`SendEnv`命令发来的哪些环境变量,即允许客户端设置服务器的环境变量清单,变量名之间使用空格分隔(`AcceptEnv PATH TERM`)。 - -**AllowGroups** - -`AllowGroups`指定允许登录的用户组(`AllowGroups groupName`,多个组之间用空格分隔。如果不使用该项,则允许所有用户组登录。 - -**AllowUsers** - -`AllowUsers`指定允许登录的用户,用户名之间使用空格分隔(`AllowUsers user1 user2`),也可以使用多行`AllowUsers`命令指定,用户名支持使用通配符。如果不使用该项,则允许所有用户登录。该项也可以使用`用户名@域名`的格式(比如`AllowUsers jones@example.com`)。 - -**AllowTcpForwarding** - -`AllowTcpForwarding`指定是否允许端口转发,默认值为`yes`(`AllowTcpForwarding yes`),`local`表示只允许本地端口转发,`remote`表示只允许远程端口转发。 - -**AuthorizedKeysFile** - -`AuthorizedKeysFile`指定储存用户公钥的目录,默认是用户主目录的`ssh/authorized_keys`目录(`AuthorizedKeysFile .ssh/authorized_keys`)。 - -**Banner** - -`Banner`指定用户登录后,sshd 向其展示的信息文件(`Banner /usr/local/etc/warning.txt`),默认不展示任何内容。 - -**ChallengeResponseAuthentication** - -`ChallengeResponseAuthentication`指定是否使用“键盘交互”身份验证方案,默认值为`yes`(`ChallengeResponseAuthentication yes`)。 - -从理论上讲,“键盘交互”身份验证方案可以向用户询问多重问题,但是实践中,通常仅询问用户密码。如果要完全禁用基于密码的身份验证,请将`PasswordAuthentication`和`ChallengeResponseAuthentication`都设置为`no`。 - -**Ciphers** - -`Ciphers`指定 sshd 可以接受的加密算法(`Ciphers 3des-cbc`),多个算法之间使用逗号分隔。 - -**ClientAliveCountMax** - -`ClientAliveCountMax`指定建立连接后,客户端失去响应时,服务器尝试连接的次数(`ClientAliveCountMax 8`)。 - -**ClientAliveInterval** - -`ClientAliveInterval`指定允许客户端发呆的时间,单位为秒(`ClientAliveInterval 180`)。如果这段时间里面,客户端没有发送任何信号,SSH 连接将关闭。 - -**Compression** - -`Compression`指定客户端与服务器之间的数据传输是否压缩。默认值为`yes`(`Compression yes`) - -**DenyGroups** - -`DenyGroups`指定不允许登录的用户组(`DenyGroups groupName`)。 - -**DenyUsers** - -`DenyUsers`指定不允许登录的用户(`DenyUsers user1`),用户名之间使用空格分隔,也可以使用多行`DenyUsers`命令指定。 - -**FascistLogging** - -SSH 1 版本专用,指定日志输出全部 Debug 信息(`FascistLogging yes`)。 - -**HostKey** - -`HostKey`指定 sshd 服务器的密钥,详见前文。 - -**KeyRegenerationInterval** - -`KeyRegenerationInterval`指定 SSH 1 版本的密钥重新生成时间间隔,单位为秒,默认是3600秒(`KeyRegenerationInterval 3600`)。 - -**ListenAddress** - -`ListenAddress`指定 sshd 监听的本机 IP 地址,即 sshd 启用的 IP 地址,默认是 0.0.0.0(`ListenAddress 0.0.0.0`)表示在本机所有网络接口启用。可以改成只在某个网络接口启用(比如`ListenAddress 192.168.10.23`),也可以指定某个域名启用(比如`ListenAddress server.example.com`)。 - -如果要监听多个指定的 IP 地址,可以使用多行`ListenAddress`命令。 - -```bash -ListenAddress 172.16.1.1 -ListenAddress 192.168.0.1 -``` - -**LoginGraceTime** - -`LoginGraceTime`指定允许客户端登录时发呆的最长时间,比如用户迟迟不输入密码,连接就会自动断开,单位为秒(`LoginGraceTime 60`)。如果设为`0`,就表示没有限制。 - -**LogLevel** - -`LogLevel`指定日志的详细程度,可能的值依次为`QUIET`、`FATAL`、`ERROR`、`INFO`、`VERBOSE`、`DEBUG`、`DEBUG1`、`DEBUG2`、`DEBUG3`,默认为`INFO`(`LogLevel INFO`)。 - -**MACs** - -`MACs`指定sshd 可以接受的数据校验算法(`MACs hmac-sha1`),多个算法之间使用逗号分隔。 - -**MaxAuthTries** - -`MaxAuthTries`指定允许 SSH 登录的最大尝试次数(`MaxAuthTries 3`),如果密码输入错误达到指定次数,SSH 连接将关闭。 - -**MaxStartups** - -`MaxStartups`指定允许同时并发的 SSH 连接数量(MaxStartups)。如果设为`0`,就表示没有限制。 - -这个属性也可以设为`A:B:C`的形式,比如`MaxStartups 10:50:20`,表示如果达到10个并发连接,后面的连接将有50%的概率被拒绝;如果达到20个并发连接,则后面的连接将100%被拒绝。 - -**PasswordAuthentication** - -`PasswordAuthentication`指定是否允许密码登录,默认值为`yes`(`PasswordAuthentication yes`),建议改成`no`(禁止密码登录,只允许密钥登录)。 - -**PermitEmptyPasswords** - -`PermitEmptyPasswords`指定是否允许空密码登录,即用户的密码是否可以为空,默认为`yes`(`PermitEmptyPasswords yes`),建议改成`no`(禁止无密码登录)。 - -**PermitRootLogin** - -`PermitRootLogin`指定是否允许根用户登录,默认为`yes`(`PermitRootLogin yes`),建议改成`no`(禁止根用户登录)。 - -还有一种写法是写成`prohibit-password`,表示 root 用户不能用密码登录,但是可以用密钥登录。 - -```bash -PermitRootLogin prohibit-password -``` - -**PermitUserEnvironment** - -`PermitUserEnvironment`指定是否允许 sshd 加载客户端的`~/.ssh/environment`文件和`~/.ssh/authorized_keys`文件里面的`environment= options`环境变量设置。默认值为`no`(`PermitUserEnvironment no`)。 - -**Port** - -`Port`指定 sshd 监听的端口,即客户端连接的端口,默认是22(`Port 22`)。出于安全考虑,可以改掉这个端口(比如`Port 8822`)。 - -配置文件可以使用多个`Port`命令,同时监听多个端口。 - -```bash -Port 22 -Port 80 -Port 443 -Port 8080 -``` - -上面的示例表示同时监听4个端口。 - -**PrintMotd** - -`PrintMotd`指定用户登录后,是否向其展示系统的 motd(Message of the day)的信息文件`/etc/motd`。该文件用于通知所有用户一些重要事项,比如系统维护时间、安全问题等等。默认值为`yes`(`PrintMotd yes`),由于 Shell 一般会展示这个信息文件,所以这里可以改为`no`。 - -**PrintLastLog** - -`PrintLastLog`指定是否打印上一次用户登录时间,默认值为`yes`(`PrintLastLog yes`)。 - -**Protocol** - -`Protocol`指定 sshd 使用的协议。`Protocol 1`表示使用 SSH 1 协议,建议改成`Protocol 2`(使用 SSH 2 协议)。`Protocol 2,1`表示同时支持两个版本的协议。 - -**PubKeyAuthentication** - -`PubKeyAuthentication`指定是否允许公钥登录,默认值为`yes`(`PubKeyAuthentication yes`)。 - -**QuietMode** - -SSH 1 版本专用,指定日志只输出致命的错误信息(`QuietMode yes`)。 - -**RSAAuthentication** - -`RSAAuthentication`指定允许 RSA 认证,默认值为`yes`(`RSAAuthentication yes`)。 - -**ServerKeyBits** - -`ServerKeyBits`指定 SSH 1 版本的密钥重新生成时的位数,默认是768(`ServerKeyBits 768`)。 - -**StrictModes** - -`StrictModes`指定 sshd 是否检查用户的一些重要文件和目录的权限。默认为`yes`(`StrictModes yes`),即对于用户的 SSH 配置文件、密钥文件和所在目录,SSH 要求拥有者必须是根用户或用户本人,用户组和其他人的写权限必须关闭。 - -**SyslogFacility** - -`SyslogFacility`指定 Syslog 如何处理 sshd 的日志,默认是 Auth(`SyslogFacility AUTH`)。 - -**TCPKeepAlive** - -`TCPKeepAlive`指定打开 sshd 跟客户端 TCP 连接的 keepalive 参数(`TCPKeepAlive yes`)。 - -**UseDNS** - -`UseDNS`指定用户 SSH 登录一个域名时,服务器是否使用 DNS,确认该域名对应的 IP 地址包含本机(`UseDNS yes`)。打开该选项意义不大,而且如果 DNS 更新不及时,还有可能误判,建议关闭。 - -**UseLogin** - -`UseLogin`指定用户认证内部是否使用`/usr/bin/login`替代 SSH 工具,默认为`no`(`UseLogin no`)。 - -**UserPrivilegeSeparation** - -`UserPrivilegeSeparation`指定用户认证通过以后,使用另一个子线程处理用户权限相关的操作,这样有利于提高安全性。默认值为`yes`(`UsePrivilegeSeparation yes`)。 - -**VerboseMode** - -SSH 2 版本专用,指定日志输出详细的 Debug 信息(`VerboseMode yes`)。 - -**X11Forwarding** - -`X11Forwarding`指定是否打开 X window 的转发,默认值为 no(`X11Forwarding no`)。 - -修改配置文件以后,可以使用下面的命令验证,配置文件是否有语法错误。 - -```bash -sshd -t -``` - -新的配置文件生效,必须重启 sshd。 - -```bash -sudo systemctl restart sshd -``` - -## sshd 的命令行配置项 - -sshd 命令有一些配置项。这些配置项在调用时指定,可以覆盖配置文件的设置。 - -(1)`-d` - -`-d`参数用于显示 debug 信息。 - -```bash -sshd -d -``` - -(2)`-D` - -`-D`参数指定 sshd 不作为后台守护进程运行。 - -```bash -sshd -D -``` - -(3)`-e` - -`-e`参数将 sshd 写入系统日志 syslog 的内容导向标准错误(standard error)。 - -(4)`-f` - -`-f`参数指定配置文件的位置。 - -(5)`-h` - -`-h`参数用于指定密钥。 - -```bash -sshd -h /usr/local/ssh/my_rsa_key -``` - -(6)`-o` - -`-o`参数指定配置文件的一个配置项和对应的值。 - -```bash -sshd -o "Port 2034" -``` - -配置项和对应值之间,可以使用等号。 - -```bash -sshd -o "Port = 2034" -``` - -如果省略等号前后的空格,也可以不使用引号。 - -```bash -sshd -o Port=2034 -``` - -`-o`参数可以多个一起使用,用来指定多个配置关键字。 - -(7)`-p` - -`-p`参数指定 sshd 的服务端口。 - -```bash -sshd -p 2034 -``` - -上面命令指定 sshd 在`2034`端口启动。 - -`-p`参数可以指定多个端口。 - -```bash -sshd -p 2222 -p 3333 -``` - -(8)`-t` - -`-t`参数检查配置文件的语法是否正确。 diff --git a/docs/OpenSSH/端口转发.md b/docs/OpenSSH/端口转发.md deleted file mode 100644 index fac8023a..00000000 --- a/docs/OpenSSH/端口转发.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -id: 端口转发 -title: 端口转发 -sidebar_position: 5 -data: 2022年4月13日 ---- -## 简介 - -SSH 除了登录服务器,还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板,使得原本不加密的通信变成加密通信。这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel)。 - -端口转发有两个主要作用: - -(1)将不加密的数据放在 SSH 安全连接里面传输,使得原本不安全的网络服务增加了安全性,比如通过端口转发访问 Telnet、FTP 等明文服务,数据传输就都会加密。 - -(2)作为数据通信的加密跳板,绕过网络防火墙。 - -端口转发有三种使用方法:动态转发,本地转发,远程转发。下面逐一介绍。 - -## 动态转发 - -动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。它的一个使用场景就是,访问所有外部网站,都通过 SSH 转发。 - -动态转发需要把本地端口绑定到 SSH 服务器。至于 SSH 服务器要去访问哪一个网站,完全是动态的,取决于原始通信,所以叫做动态转发。 - -```bash -ssh -D local-port tunnel-host -N -``` - -上面命令中,`-D`表示动态转发,`local-port`是本地端口,`tunnel-host`是 SSH 服务器,`-N`表示这个 SSH 连接只进行端口转发,不登录远程 Shell,不能执行远程命令,只能充当隧道。 - -举例来说,如果本地端口是`2121`,那么动态转发的命令就是下面这样。 - -```bash -ssh -D 2121 tunnel-host -N -``` - -注意,这种转发采用了 SOCKS5 协议。访问外部网站时,需要把 HTTP 请求转成 SOCKS5 协议,才能把本地端口的请求转发出去。 - -下面是 SSH 隧道建立后的一个使用实例。 - -```bash -curl -x socks5://localhost:2121 http://www.example.com -``` - -上面命令中,curl 的`-x`参数指定代理服务器,即通过 SOCKS5 协议的本地`2121`端口,访问`http://www.example.com`。 - -如果经常使用动态转发,可以将设置写入 SSH 客户端的用户个人配置文件(`~/.ssh/config`)。 - -```bash -DynamicForward tunnel-host:local-port -``` - -## 本地转发 - -本地转发(local forwarding)指的是,SSH 服务器作为中介的跳板机,建立本地计算机与特定目标网站之间的加密连接。本地转发是在本地计算机的 SSH 客户端建立的转发规则。 - -它会指定一个本地端口(local-port),所有发向那个端口的请求,都会转发到 SSH 跳板机(tunnel-host),然后 SSH 跳板机作为中介,将收到的请求发到目标服务器(target-host)的目标端口(target-port)。 - -```html -ssh -L local-port:target-host:target-port tunnel-host -``` - -上面命令中,`-L`参数表示本地转发,`local-port`是本地端口,`target-host`是你想要访问的目标服务器,`target-port`是目标服务器的端口,`tunnel-host`是 SSH 跳板机。 - -举例来说,现在有一台 SSH 跳板机`tunnel-host`,我们想要通过这台机器,在本地`2121`端口与目标网站`www.example.com`的80端口之间建立 SSH 隧道,就可以写成下面这样。 - -```bash -ssh -L 2121:www.example.com:80 tunnel-host -N -``` - -然后,访问本机的`2121`端口,就是访问`www.example.com`的80端口。 - -```bash -curl http://localhost:2121 -``` - -注意,本地端口转发采用 HTTP 协议,不用转成 SOCKS5 协议。 - -另一个例子是加密访问邮件获取协议 POP3。 - -```bash -ssh -L 1100:mail.example.com:110 mail.example.com -``` - -上面命令将本机的1100端口,绑定邮件服务器`mail.example.com`的110端口(POP3 协议的默认端口)。端口转发建立以后,POP3 邮件客户端只需要访问本机的1100端口,请求就会通过 SSH 跳板机(这里是`mail.example.com`),自动转发到`mail.example.com`的110端口。 - -上面这种情况有一个前提条件,就是`mail.example.com`必须运行 SSH 服务器。否则,就必须通过另一台 SSH 服务器中介,执行的命令要改成下面这样。 - -```bash -ssh -L 1100:mail.example.com:110 other.example.com -``` - -上面命令中,本机的1100端口还是绑定`mail.example.com`的110端口,但是由于`mail.example.com`没有运行 SSH 服务器,所以必须通过`other.example.com`中介。本机的 POP3 请求通过1100端口,先发给`other.example.com`的22端口(sshd 默认端口),再由后者转给`mail.example.com`,得到数据以后再原路返回。 - -注意,采用上面的中介方式,只有本机到`other.example.com`的这一段是加密的,`other.example.com`到`mail.example.com`的这一段并不加密。 - -这个命令最好加上`-N`参数,表示不在 SSH 跳板机执行远程命令,让 SSH 只充当隧道。另外还有一个`-f`参数表示 SSH 连接在后台运行。 - -如果经常使用本地转发,可以将设置写入 SSH 客户端的用户个人配置文件(`~/.ssh/config`)。 - -```bash -Host test.example.com -LocalForward client-IP:client-port server-IP:server-port -``` - -## 远程转发 - -远程转发指的是在远程 SSH 服务器建立的转发规则。 - -它跟本地转发正好反过来。建立本地计算机到远程计算机的 SSH 隧道以后,本地转发是通过本地计算机访问远程计算机,而远程转发则是通过远程计算机访问本地计算机。它的命令格式如下。 - -```bash -ssh -R remote-port:target-host:target-port -N remotehost -``` - -上面命令中,`-R`参数表示远程端口转发,`remote-port`是远程计算机的端口,`target-host`和`target-port`是目标服务器及其端口,`remotehost`是远程计算机。 - -远程转发主要针对内网的情况。下面举两个例子。 - -第一个例子是内网某台服务器`localhost`在 80 端口开了一个服务,可以通过远程转发将这个 80 端口,映射到具有公网 IP 地址的`my.public.server`服务器的 8080 端口,使得访问`my.public.server:8080`这个地址,就可以访问到那台内网服务器的 80 端口。 - -```bash -ssh -R 8080:localhost:80 -N my.public.server -``` - -上面命令是在内网`localhost`服务器上执行,建立从`localhost`到`my.public.server`的 SSH 隧道。运行以后,用户访问`my.public.server:8080`,就会自动映射到`localhost:80`。 - -第二个例子是本地计算机`local`在外网,SSH 跳板机和目标服务器`my.private.server`都在内网,必须通过 SSH 跳板机才能访问目标服务器。但是,本地计算机`local`无法访问内网之中的 SSH 跳板机,而 SSH 跳板机可以访问本机计算机。 - -由于本机无法访问内网 SSH 跳板机,就无法从外网发起 SSH 隧道,建立端口转发。必须反过来,从 SSH 跳板机发起隧道,建立端口转发,这时就形成了远程端口转发。跳板机执行下面的命令,绑定本地计算机`local`的`2121`端口,去访问`my.private.server:80`。 - -```bash -ssh -R 2121:my.private.server:80 -N local -``` - -上面命令是在 SSH 跳板机上执行的,建立跳板机到`local`的隧道,并且这条隧道的出口映射到`my.private.server:80`。 - -显然,远程转发要求本地计算机`local`也安装了 SSH 服务器,这样才能接受 SSH 跳板机的远程登录。 - -执行上面的命令以后,跳板机到`local`的隧道已经建立了。然后,就可以从本地计算机访问目标服务器了,即在本机执行下面的命令。 - -```bash -curl http://localhost:2121 -``` - -本机执行上面的命令以后,就会输出服务器`my.private.server`的 80 端口返回的内容。 - -如果经常执行远程端口转发,可以将设置写入 SSH 客户端的用户个人配置文件(`~/.ssh/config`)。 - -```bash -Host remote-forward - HostName test.example.com - RemoteForward remote-port target-host:target-port -``` - -完成上面的设置后,执行下面的命令就会建立远程转发。 - -```bash -$ ssh -N remote-forward - -# 等同于 -$ ssh -R remote-port:target-host:target-port -N test.example.com -``` - -## 实例 - -下面看两个端口转发的实例。 - -### 简易 VPN - -VPN 用来在外网与内网之间建立一条加密通道。内网的服务器不能从外网直接访问,必须通过一个跳板机,如果本机可以访问跳板机,就可以使用 SSH 本地转发,简单实现一个 VPN。 - -```bash -ssh -L 2080:corp-server:80 -L 2443:corp-server:443 tunnel-host -N -``` - -上面命令通过 SSH 跳板机,将本机的`2080`端口绑定内网服务器的`80`端口,本机的`2443`端口绑定内网服务器的`443`端口。 - -### 两级跳板 - -端口转发可以有多级,比如新建两个 SSH 隧道,第一个隧道转发给第二个隧道,第二个隧道才能访问目标服务器。 - -首先,在本机新建第一级隧道。 - -```bash -ssh -L 7999:localhost:2999 tunnel1-host -``` - -上面命令在本地`7999`端口与`tunnel1-host`之间建立一条隧道,隧道的出口是`tunnel1-host`的`localhost:2999`,也就是`tunnel1-host`收到本机的请求以后,转发给自己的`2999`端口。 - -然后,在第一台跳板机(`tunnel1-host`)执行下面的命令,新建第二级隧道。 - -```bash -ssh -L 2999:target-host:7999 tunnel2-host -N -``` - -上面命令将第一台跳板机`tunnel1-host`的`2999`端口,通过第二台跳板机`tunnel2-host`,连接到目标服务器`target-host`的`7999`端口。 - -最终效果就是,访问本机的`7999`端口,就会转发到`target-host`的`7999`端口。 - -## 参考链接 - -- [An Illustrated Guide to SSH Tunnels](https://solitum.net/posts/an-illustrated-guide-to-ssh-tunnels/), Scott Wiersdorf diff --git a/docs/OpenSSH/简介.md b/docs/OpenSSH/简介.md deleted file mode 100644 index 7643a3e4..00000000 --- a/docs/OpenSSH/简介.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: 简介 -title: 简介 -sidebar_position: 1 -data: 2022年4月13日 ---- - -## SSH 是什么 - -历史上,网络主机之间的通信是不加密的,属于明文通信。这使得通信很不安全,一个典型的例子就是服务器登录。登录远程服务器的时候,需要将用户输入的密码传给服务器,如果这个过程是明文通信,就意味着传递过程中,线路经过的中间计算机都能看到密码,这是很可怕的。 - -SSH 就是为了解决这个问题而诞生的,它能够加密计算机之间的通信,保证不被窃听或篡改。它还能对操作者进行认证(authentication)和授权(authorization)。明文的网络协议可以套用在它里面,从而实现加密。 - -## 历史 - -1995年,芬兰赫尔辛基工业大学的研究员 Tatu Ylönen 设计了 SSH 协议的第一个版本(现称为 SSH 1),同时写出了第一个实现(称为 SSH1)。 - -当时,他所在的大学网络一直发生密码嗅探攻击,他不得不为服务器设计一个更安全的登录方式。写完以后,他就把这个工具公开了,允许其他人免费使用。 - -SSH 可以替换 rlogin、TELNET、FTP 和 rsh 这些不安全的协议,所以大受欢迎,用户快速增长,1995年底已经发展到五十个国家的20,000个用户。SSH 1 协议也变成 IETF 的标准文档。 - -1995年12月,由于客服需求越来越大,Tatu Ylönen 就成立了一家公司 SCS,专门销售和开发 SSH。这个软件的后续版本,逐渐从免费软件变成了专有的商业软件。 - -SSH 1 协议存在一些安全漏洞,所以1996年又提出了 SSH 2 协议(或者称为 SSH 2.0)。这个协议与1.0版不兼容,在1997年进行了标准化,1998年推出了软件实现 SSH2。但是,官方的 SSH2 软件是一个专有软件,不能免费使用,而且 SSH1 的有些功能也没有提供。 - -1999年,OpenBSD 的开发人员决定写一个 SSH 2 协议的开源实现,这就是 OpenSSH 项目。该项目最初是基于 SSH 1.2.12 版本,那是当时 SSH1 最后一个开源版本。但是,OpenSSH 很快就完全摆脱了原始的官方代码,在许多开发者的参与下,按照自己的路线发展。OpenSSH 随 OpenBSD 2.6 版本一起提供,以后又移植到其他操作系统,成为最流行的 SSH 实现。目前,Linux 的所有发行版几乎都自带 OpenSSH。 - -现在,SSH-2 有多种实现,既有免费的,也有收费的。本书的内容主要是针对 OpenSSH。 - -## SSH 架构 - -SSH 的软件架构是服务器-客户端模式(Server - Client)。在这个架构中,SSH 软件分成两个部分:向服务器发出请求的部分,称为客户端(client),OpenSSH 的实现为 ssh;接收客户端发出的请求的部分,称为服务器(server),OpenSSH 的实现为 sshd。 - -本教程约定,大写的 SSH 表示协议,小写的 ssh 表示客户端软件。 - -另外,OpenSSH 还提供一些辅助工具软件(比如 ssh-keygen 、ssh-agent)和专门的客户端工具(比如 scp 和 sftp),这个教程也会予以介绍。 diff --git a/docs/OpenSSH/证书登录.md b/docs/OpenSSH/证书登录.md deleted file mode 100644 index bd3f50a4..00000000 --- a/docs/OpenSSH/证书登录.md +++ /dev/null @@ -1,271 +0,0 @@ ---- -id: 证书登录 -title: 证书登录 -sidebar_position: 6 -data: 2022年4月13日 ---- - -SSH 是服务器登录工具,一般情况下都采用密码登录或密钥登录。 - -但是,SSH 还有第三种登录方法,那就是证书登录。某些情况下,它是更合理、更安全的登录方法,本文就介绍这种登录方法。 - -## 非证书登录的缺点 - -密码登录和密钥登录,都有各自的缺点。 - -密码登录需要输入服务器密码,这非常麻烦,也不安全,存在被暴力破解的风险。 - -密钥登录需要服务器保存用户的公钥,也需要用户保存服务器公钥的指纹。这对于多用户、多服务器的大型机构很不方便,如果有员工离职,需要将他的公钥从每台服务器删除。 - -## 证书登录是什么? - -证书登录就是为了解决上面的缺点而设计的。它引入了一个证书颁发机构(Certificate Authority,简称 CA),对信任的服务器颁发服务器证书,对信任的用户颁发用户证书。 - -登录时,用户和服务器不需要提前知道彼此的公钥,只需要交换各自的证书,验证是否可信即可。 - -证书登录的主要优点有两个:(1)用户和服务器不用交换公钥,这更容易管理,也具有更好的可扩展性。(2)证书可以设置到期时间,而公钥没有到期时间。针对不同的情况,可以设置有效期很短的证书,进一步提高安全性。 - -## 证书登录的流程 - -SSH 证书登录之前,如果还没有证书,需要生成证书。具体方法是:(1)用户和服务器都将自己的公钥,发给 CA;(2)CA 使用服务器公钥,生成服务器证书,发给服务器;(3)CA 使用用户的公钥,生成用户证书,发给用户。 - -有了证书以后,用户就可以登录服务器了。整个过程都是 SSH 自动处理,用户无感知。 - -第一步,用户登录服务器时,SSH 自动将用户证书发给服务器。 - -第二步,服务器检查用户证书是否有效,以及是否由可信的 CA 颁发。证实以后,就可以信任用户。 - -第三步,SSH 自动将服务器证书发给用户。 - -第四步,用户检查服务器证书是否有效,以及是否由信任的 CA 颁发。证实以后,就可以信任服务器。 - -第五步,双方建立连接,服务器允许用户登录。 - -## 生成 CA 的密钥 - -证书登录的前提是,必须有一个 CA,而 CA 本质上就是一对密钥,跟其他密钥没有不同,CA 就用这对密钥去签发证书。 - -虽然 CA 可以用同一对密钥签发用户证书和服务器证书,但是出于安全性和灵活性,最好用不同的密钥分别签发。所以,CA 至少需要两对密钥,一对是签发用户证书的密钥,假设叫做`user_ca`,另一对是签发服务器证书的密钥,假设叫做`host_ca`。 - -使用下面的命令,生成`user_ca`。 - -```bash -# 生成 CA 签发用户证书的密钥 -$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/user_ca -C user_ca -``` - -上面的命令会在`~/.ssh`目录生成一对密钥:`user_ca`(私钥)和`user_ca.pub`(公钥)。 - -这个命令的各个参数含义如下。 - -- `-t rsa`:指定密钥算法 RSA。 -- `-b 4096`:指定密钥的位数是4096位。安全性要求不高的场合,这个值可以小一点,但是不应小于1024。 -- `-f ~/.ssh/user_ca`:指定生成密钥的位置和文件名。 -- `-C user_ca`:指定密钥的识别字符串,相当于注释,可以随意设置。 - -使用下面的命令,生成`host_ca`。 - -```bash -# 生成 CA 签发服务器证书的密钥 -$ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca -``` - -上面的命令会在`~/.ssh`目录生成一对密钥:`host_ca`(私钥)和`host_ca.pub`(公钥)。 - -现在,`~/.ssh`目录应该至少有四把密钥。 - -- `~/.ssh/user_ca` -- `~/.ssh/user_ca.pub` -- `~/.ssh/host_ca` -- `~/.ssh/host_ca.pub` - -## CA 签发服务器证书 - -有了 CA 以后,就可以签发服务器证书了。 - -签发证书,除了 CA 的密钥以外,还需要服务器的公钥。一般来说,SSH 服务器(通常是`sshd`)安装时,已经生成密钥`/etc/ssh/ssh_host_rsa_key`了。如果没有的话,可以用下面的命令生成。 - -```bash -sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -b 4096 -t rsa -``` - -上面命令会在`/etc/ssh`目录,生成`ssh_host_rsa_key`(私钥)和`ssh_host_rsa_key.pub`(公钥)。然后,需要把服务器公钥`ssh_host_rsa_key.pub`,复制或上传到 CA 所在的服务器。 - -上传以后,CA 就可以使用密钥`host_ca`为服务器的公钥`ssh_host_rsa_key.pub`签发服务器证书。 - -```bash -ssh-keygen -s host_ca -I host.example.com -h -n host.example.com -V +52w ssh_host_rsa_key.pub -``` - -上面的命令会生成服务器证书`ssh_host_rsa_key-cert.pub`(服务器公钥名字加后缀`-cert`)。这个命令各个参数的含义如下。 - -- `-s`:指定 CA 签发证书的密钥。 -- `-I`:身份字符串,可以随便设置,相当于注释,方便区分证书,将来可以使用这个字符串撤销证书。 -- `-h`:指定该证书是服务器证书,而不是用户证书。 -- `-n host.example.com`:指定服务器的域名,表示证书仅对该域名有效。如果有多个域名,则使用逗号分隔。用户登录该域名服务器时,SSH 通过证书的这个值,分辨应该使用哪张证书发给用户,用来证明服务器的可信性。 -- `-V +52w`:指定证书的有效期,这里为52周(一年)。默认情况下,证书是永远有效的。建议使用该参数指定有效期,并且有效期最好短一点,最长不超过52周。 -- `ssh_host_rsa_key.pub`:服务器公钥。 - -生成证书以后,可以使用下面的命令,查看证书的细节。 - -```bash -ssh-keygen -L -f ssh_host_rsa_key-cert.pub -``` - -最后,为证书设置权限。 - -```bash -chmod 600 ssh_host_rsa_key-cert.pub -``` - -## CA 签发用户证书 - -下面,再用 CA 签发用户证书。这时需要用户的公钥,如果没有的话,客户端可以用下面的命令生成一对密钥。 - -```bash -ssh-keygen -f ~/.ssh/user_key -b 4096 -t rsa -``` - -上面命令会在`~/.ssh`目录,生成`user_key`(私钥)和`user_key.pub`(公钥)。 - -然后,将用户公钥`user_key.pub`,上传或复制到 CA 服务器。接下来,就可以使用 CA 的密钥`user_ca`为用户公钥`user_key.pub`签发用户证书。 - -```bash -ssh-keygen -s user_ca -I user@example.com -n user -V +1d user_key.pub -``` - -上面的命令会生成用户证书`user_key-cert.pub`(用户公钥名字加后缀`-cert`)。这个命令各个参数的含义如下。 - -- `-s`:指定 CA 签发证书的密钥 -- `-I`:身份字符串,可以随便设置,相当于注释,方便区分证书,将来可以使用这个字符串撤销证书。 -- `-n user`:指定用户名,表示证书仅对该用户名有效。如果有多个用户名,使用逗号分隔。用户以该用户名登录服务器时,SSH 通过这个值,分辨应该使用哪张证书,证明自己的身份,发给服务器。 -- `-V +1d`:指定证书的有效期,这里为1天,强制用户每天都申请一次证书,提高安全性。默认情况下,证书是永远有效的。 -- `user_key.pub`:用户公钥。 - -生成证书以后,可以使用下面的命令,查看证书的细节。 - -```bash -ssh-keygen -L -f user_key-cert.pub -``` - -最后,为证书设置权限。 - -```bash -chmod 600 user_key-cert.pub -``` - -## 服务器安装证书 - -CA 生成服务器证书`ssh_host_rsa_key-cert.pub`以后,需要将该证书发回服务器,可以使用下面的`scp`命令,将证书拷贝过去。 - -```bash -scp ~/.ssh/ssh_host_rsa_key-cert.pub root@host.example.com:/etc/ssh/ -``` - -然后,将下面一行添加到服务器配置文件`/etc/ssh/sshd_config`。 - -```bash -HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub -``` - -上面的代码告诉 sshd,服务器证书是哪一个文件。 - -重新启动 sshd。 - -```bash -$ sudo systemctl restart sshd.service -# 或者 -$ sudo service sshd restart -``` - -## 服务器安装 CA 公钥 - -为了让服务器信任用户证书,必须将 CA 签发用户证书的公钥`user_ca.pub`,拷贝到服务器。 - -```bash -scp ~/.ssh/user_ca.pub root@host.example.com:/etc/ssh/ -``` - -上面的命令,将 CA 签发用户证书的公钥`user_ca.pub`,拷贝到 SSH 服务器的`/etc/ssh`目录。 - -然后,将下面一行添加到服务器配置文件`/etc/ssh/sshd_config`。 - -```bash -TrustedUserCAKeys /etc/ssh/user_ca.pub -``` - -上面的做法是将`user_ca.pub`加到`/etc/ssh/sshd_config`,这会产生全局效果,即服务器的所有账户都会信任`user_ca`签发的所有用户证书。 - -另一种做法是将`user_ca.pub`加到服务器某个账户的`~/.ssh/authorized_keys`文件,只让该账户信任`user_ca`签发的用户证书。具体方法是打开`~/.ssh/authorized_keys`,追加一行,开头是`@cert-authority principals="..."`,然后后面加上`user_ca.pub`的内容,大概是下面这个样子。 - -```bash -@cert-authority principals="user" ssh-rsa AAAAB3Nz...XNRM1EX2gQ== -``` - -上面代码中,`principals="user"`指定用户登录的服务器账户名,一般就是`authorized_keys`文件所在的账户。 - -重新启动 sshd。 - -```bash -$ sudo systemctl restart sshd.service -# 或者 -$ sudo service sshd restart -``` - -至此,SSH 服务器已配置为信任`user_ca`签发的证书。 - -## 客户端安装证书 - -客户端安装用户证书很简单,就是从 CA 将用户证书`user_key-cert.pub`复制到客户端,与用户的密钥`user_key`保存在同一个目录即可。 - -## 客户端安装 CA 公钥 - -为了让客户端信任服务器证书,必须将 CA 签发服务器证书的公钥`host_ca.pub`,加到客户端的`/etc/ssh/ssh_known_hosts`文件(全局级别)或者`~/.ssh/known_hosts`文件(用户级别)。 - -具体做法是打开`ssh_known_hosts`或`known_hosts`文件,追加一行,开头为`@cert-authority *.example.com`,然后将`host_ca.pub`文件的内容(即公钥)粘贴在后面,大概是下面这个样子。 - -```bash -@cert-authority *.example.com ssh-rsa AAAAB3Nz...XNRM1EX2gQ== -``` - -上面代码中,`*.example.com`是域名的模式匹配,表示只要服务器符合该模式的域名,且签发服务器证书的 CA 匹配后面给出的公钥,就都可以信任。如果没有域名限制,这里可以写成`*`。如果有多个域名模式,可以使用逗号分隔;如果服务器没有域名,可以用主机名(比如`host1,host2,host3`)或者 IP 地址(比如`11.12.13.14,21.22.23.24`)。 - -然后,就可以使用证书,登录远程服务器了。 - -```bash -ssh -i ~/.ssh/user_key user@host.example.com -``` - -上面命令的`-i`参数用来指定用户的密钥。如果证书与密钥在同一个目录,则连接服务器时将自动使用该证书。 - -## 废除证书 - -废除证书的操作,分成用户证书的废除和服务器证书的废除两种。 - -服务器证书的废除,用户需要在`known_hosts`文件里面,修改或删除对应的`@cert-authority`命令的那一行。 - -用户证书的废除,需要在服务器新建一个`/etc/ssh/revoked_keys`文件,然后在配置文件`sshd_config`添加一行,内容如下。 - -```bash -RevokedKeys /etc/ssh/revoked_keys -``` - -`revoked_keys`文件保存不再信任的用户公钥,由下面的命令生成。 - -```bash -ssh-keygen -kf /etc/ssh/revoked_keys -z 1 ~/.ssh/user1_key.pub -``` - -上面命令中,`-z`参数用来指定用户公钥保存在`revoked_keys`文件的哪一行,这个例子是保存在第1行。 - -如果以后需要废除其他的用户公钥,可以用下面的命令保存在第2行。 - -```bash -ssh-keygen -ukf /etc/ssh/revoked_keys -z 2 ~/.ssh/user2_key.pub -``` - -## 参考链接 - -- [SSH Emergency Access](https://smallstep.com/blog/ssh-emergency-access/), Carl Tashian -- [Using OpenSSH Certificate Authentication](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/sec-using_openssh_certificate_authentication), Red Hat Enterprise Linux Deployment Guide -- [How to SSH Properly](https://gravitational.com/blog/how-to-ssh-properly/), Gus Luxton diff --git a/docs/home.md b/docs/home.md deleted file mode 100644 index 7195abef..00000000 --- a/docs/home.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -id: home -slug: / -sidebar_position: 1 ---- - -# Home - -记录整理归纳平时学习笔记 ✍✍✍ - diff --git a/docs/云服务/Azure/核心体系.md b/docs/云服务/Azure/核心体系.md deleted file mode 100644 index 1c9a7b7f..00000000 --- a/docs/云服务/Azure/核心体系.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -id: 核心体系 -title: 核心体系 -sidebar_position: 1 -data: 2022年4月14日 ---- - -## 订阅、管理组和资源概述 - -![Screenshot of the hierarchy for objects in Azure.](https://static.7wate.com/img/2022/04/14/a3efa41c4629a.png) - -- **资源**:资源是你创建的服务的实例,如虚拟机、存储或 SQL 数据库。 -- **资源组**:资源合并成为资源组,资源组充当在其中部署和管理 Azure 资源(如 Web 应用、数据库和存储帐户)的逻辑容器。 -- **订阅**:订阅将用户帐户和这些用户帐户创建的资源组合在一起。 对于每个订阅,你可以创建和使用的资源量有限制或配额。 组织可以使用订阅来管理成本,或者由用户、团队或项目创建的资源。 -- **管理组**:这些组有助于你管理多个订阅的访问、策略和合规性。 管理组中的所有订阅都会自动继承应用于管理组的条件。 - -## 区域、可用性区域和区域对 - -资源是在“区域”中创建的,这些区域是指包含 Azure 数据中心的全球不同地理位置。 - -Azure 由遍布全球的数据中心组成。 使用服务或创建资源(如 SQL 数据库或虚拟机 (VM))时,会使用其中一个或多个位置的物理设备。 这些特定数据中心不会直接向用户公开。 Azure 会将它们组织到区域中。 - -### 区域 - -![Global map of available Azure regions as of June 2020.](https://static.7wate.com/img/2022/04/14/f1896fab6d486.png) - -区域是指地球上的某个地理区域,包含至少一个(但很可能是多个)数据中心,这些数据中心彼此相邻并通过一个低延迟的网络相互连接。 Azure 智能地分配和控制每个区域内的资源,以确保适当平衡工作负载。 - -某些服务或 VM 功能(例如特定的 VM 大小或存储类型)仅在特定区域提供。 也有一些全球性 Azure 服务不需要用户选择特定的区域,例如 Azure Active Directory、Azure 流量管理器和 Azure DNS。 - -### 区域的重要性 - -Azure 拥有的全球区域数量比其他任何云提供商都要多。 通过这些区域,无论用户身在何处,你都能够有效灵活地缩短应用程序与用户之间的距离。 全球区域提供更好的可伸缩性和冗余。 它们还为服务保留数据驻留。 - -### 特殊区域 - -- **US DoD 中部、US Gov 弗吉尼亚州、US Gov 爱荷华州等区域:**这些区域是适用于美国政府机构和合作伙伴的 Azure 物理和逻辑网络隔离实例。 这些数据中心由甄选出来的美国公民运作,并包括其他合规性认证。 -- **中国东部、中国北部等区域:**这些区域在 Microsoft 和 21Vianet 达成唯一合作关系之后可供用户使用,通过这种合作关系,Microsoft 就无需直接维护相关数据中心。 - -## 可用性区域 - -为确保服务和数据是冗余的,以便在发生故障时能够保护信息。 托管基础结构时,设置自己的冗余需要创建重复的硬件环境。 Azure 可以通过可用性区域帮助实现应用的高可用性。 - -### 什么是可用性区域? - -可用性区域是 Azure 区域中的物理上独立的数据中心。 每个可用性区域都由一个或多个数据中心组成,这些数据中心都配置了独立电源、冷却和网络。 可用性区域被设置为隔离边界。 如果一个区域出现故障,其他区域会继续正常工作。 可用性区域通过高速专用光纤网络相连。 - -![Diagram showing three datacenters connected in a single Azure region representing an availability zone.](https://static.7wate.com/img/2022/04/14/e0484447281c8.png) - -### 支持的区域 - -并非每个区域都支持可用性区域。 有关更新列表,请参阅 [Azure 中支持可用性区域的区域](https://docs.microsoft.com/zh-CN/azure/availability-zones/az-region)。 - -### 在应用中使用可用性区域 - -可以使用可用性区域运行任务关键型应用程序,并在应用程序体系结构中内置高可用性,方法为:将计算、存储、网络和数据资源共置在一个区域并将其复制到其他区域。 请记住,在区域之间复制服务和传输数据可能会产生费用。 - -可用性区域主要用于 VM、托管磁盘、负载均衡器和 SQL 数据库。 支持可用性区域的 Azure 服务分为两类: - -- **区域性服务**:将资源(例如 VM、托管磁盘和 IP 地址)固定到特定的区域。 -- **区域冗余服务**:平台自动跨区域复制(例如区域冗余存储和 SQL 数据库)。 -- 非地理区域服务:服务始终从 Azure 地理位置提供,可以灵活应对局部区域和地理区域范围的服务中断。 - -## 区域对 - -可用性区域是使用一个或多个数据中心创建的。 单个区域内最少有三个地区。 一场大灾难可能会引发足够严重的中断,甚至影响到两个数据汇中心。 这就是 Azure 还要创建区域对的原因。 - -### 什么是区域对? - -在同一地域内,每个 Azure 区域始终与至少距其 300 英里外的(例如美国、欧洲或亚洲)另一区域配对。 此方法适用于跨地域复制资源(例如 VM 存储),有助于减少因自然灾害、社会动乱、电力中断或物理网络中断等事件(同时影响两个区域)造成服务中断的可能性。 例如,如果一个区域对中的某个区域受到自然灾害,则服务会自动故障转移到其区域对中的其他区域。 - -![Diagram showing relationship between geography, region pair, region, and datacenter.](https://static.7wate.com/img/2022/04/14/8e91b10f8f0ef.png) - -由于区域对是直接相连的,并且距离足够远,能够与区域性灾难相隔离,因此可以使用它们来提供可靠的服务和数据冗余。 某些服务使用区域对提供自动异地冗余存储。 - -区域对的其他优点: - -- 如果发生大规模 Azure 服务中断,则优先考虑每个区域对中的一个区域,确保针对该区域对中托管的应用程序尽快恢复至少一个区域。 -- 对配对区域逐一进行计划内 Azure 更新,以尽量减少停机时间并降低应用程序中断风险。 -- 出于税务和执法管辖权方面的考虑,数据仍以配对的形式驻留在同一地域内(巴西南部除外)。 diff --git a/docs/云服务/_category_.json b/docs/云服务/_category_.json deleted file mode 100644 index 1e7787d1..00000000 --- a/docs/云服务/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "云服务", - "position": 1, - "link": { - "type": "generated-index", - "title": "云服务" - } -} \ No newline at end of file diff --git a/docs/云服务/基本概念.md b/docs/云服务/基本概念.md deleted file mode 100644 index e060ae33..00000000 --- a/docs/云服务/基本概念.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -id: 基本概念 -title: 基本概念 -sidebar_position: 1 -data: 2022年4月14日 ---- - -## 云计算优势 - -- **高可用性**:根据你选择的服务级别协议 (SLA),基于云的应用可以提供持续的用户体验,即使在出现故障时也不会有明显的停机时间。 -- **可伸缩性**:云中的应用可以垂直或水平缩放: - - 垂直缩放可以通过向虚拟机添加 RAM 或 CPU 增加计算容量。 - - 水平缩放可以通过添加资源实例(例如将 VM 添加到配置中)来增加计算能力。 -- **弹性**:可以将基于云的应用配置根据需要自动缩放,使应用始终具有所需的资源。 -- **敏捷性**:根据应用需求的变化,快速部署和配置基于云的资源。 -- **地区分发**:可以将应用和数据部署到全球各地的区域数据中心,从而确保客户在其区域中始终具有最佳性能。 -- **灾难恢复**:通过利用基于云的备份服务、数据复制和地理分布,你可以放心地部署应用,因为你知道在发生灾难时数据是安全的。 - -## 云模型 - -### 公有云 - -通过公共 Internet 提供服务,可供任何想要购买的人使用。 云资源(如服务器和存储)为第三方云服务提供商所有并且由其运营,并通过 Internet 提供。 - -### 私有云 - -私有云由计算资源组成,这些资源专供某个企业或组织的用户使用。 私有云可实际位于组织的现场(本地)数据中心,也可由第三方服务提供商托管。 - -### 混合云 - -混合云是一种计算环境,允许数据和应用程序相互进行共享,融合了公有云和私有云。 - -## 云模型比较 - -### 公有云 - -- 不需要资本支出即可扩大规模。 -- 可以快速地预配和取消预配应用程序。 -- 组织只需为其使用的内容付费。 - -### 私有云 - -- 必须购买硬件才能启动和维护。 -- 组织可全面控制资源和安全性。 -- 组织负责硬件维护和更新。 - -### 混合云 - -- 提供最大的灵活性。 -- 组织确定运行应用程序的位置。 -- 组织控制安全性、符合性或法律要求。 - -## 云服务模型 - -### IaaS - 基础结构即服务 - -此云服务模型是最接近于管理物理服务器的;云提供商将保持硬件是最新的,但是操作系统维护和网络配置则需要作为云租户的你完成。 例如,Azure 虚拟机是在 Microsoft 数据中心中运行的完全可操作的虚拟计算设备。 这种云服务模型的优点是快速部署新的计算设备。 设置新虚拟机比采购、安装和配置物理服务器快得多。 - -### PaaS - 平台即服务 - -这种云服务模型是一种托管主机环境。 云提供商管理虚拟机和网络资源,云租户将其应用程序部署到托管主机环境中。 例如,Azure 应用服务提供托管的主机环境,开发人员可在其中上传其 Web 应用程序而无需担心物理硬件和软件要求。 - -### SaaS - 软件即服务 - -在这种云服务模型中,云提供商管理应用程序环境的所有方面,如虚拟机、网络资源、数据存储和应用程序。 云租户只需向由云提供商管理的应用程序提供数据。 例如,Microsoft Office 365 提供在云中运行的 Microsoft Office 的完全可用版本。 你只需创建内容,Office 365 会处理其他所有事项。 - -![Diagram of services separated by cloud service models.](https://static.7wate.com/img/2022/04/14/5264a26cb5d28.png) - -### IaaS - -IaaS 是最灵活的云服务类别。 它旨在让你完全控制运行应用程序的硬件。 使用 IaaS 时,你是租用硬件,而不是购买硬件。 - -#### 优点 - -- **无 CapEx**:用户没有前期成本。 - -- **敏捷性**:可以快速访问应用程序,并在需要时取消配置。 - -- **管理**: 共担责任模式适用;用户管理和维护其已预配的服务,云提供商管理和维护云基础结构。 - -- **基于使用的模型**: 组织只需为他们在运营费用 (OpEx) 模式下使用和运营的产品付费。 - -- **技能**: 部署、使用和获取公有云的优势不需要深厚的技术技能。 组织可以利用云提供商的技能和专业知识来确保工作负载的安全性和高可用性。 - -- **云优势**: 组织可以利用云提供商的技能和专业知识来确保工作负载的安全性和高可用性。 - -- **灵活性**: IaaS 是最灵活的云服务,因为你可以控制配置和管理运行应用程序的硬件。 - -### PaaS - -PaaS 具有与 IaaS 相同的优势和注意事项,但还有一些其他优势值得注意。 - -#### 优点 - -- **无 CapEx**: 用户没有前期成本。 - -- **敏捷性**: PaaS 比 IaaS 更敏捷,用户无需为运行应用程序配置服务器。 - -- **基于使用的模型**:用户只需为他们在 OpEx 模式下使用和运营的产品付费。 - -- **技能**:部署、使用和获得 PaaS 的优势不需要深厚的技术技能。 - -- **云优势**:用户可以利用云提供商的技能和专业知识来确保其工作负载的安全性和高可用性。 此外,用户还可以访问更多尖端的开发工具。 然后,他们可以在应用程序的整个生命周期内应用这些工具。 - -- **工作效率**: 由于云提供商会处理所有平台管理,因此用户可以专注于应用程序开发。 与分散式团队(以服务形式)合作更容易,因为可以通过 Internet 访问该平台。 可以更轻松地在全球范围内使用该平台。 - -#### 缺点 - -- **平台限制**:云平台可能存在一些限制,可能会影响应用程序的运行。 评估哪种 PaaS 平台最适合某个工作负载时,请确保考虑这方面的所有限制。 - -### SaaS - -SaaS 是为你和你的用户或客户集中托管和管理的软件。 通常,应用程序的同一个版本用于所有客户,并通过月度或年度订阅授予许可。 - -SaaS 具有与 IaaS 相同的优势,但还有一些其他优势值得注意。 - -#### 优点 - -- **无 CapEx**: 用户没有前期成本。 - -- **敏捷性**: 用户可以快速轻松地使员工访问最新软件。 - -- **即用即付定价模型**: 用户以订阅模式为其使用的软件付费(通常为按月或按年付费),而不管他们使用软件的次数。 - -- **技能**: 部署、使用和获得 SaaS 的优势不需要深厚的技术技能。 - -- **灵活性**: 用户可以从任何位置访问相同的应用程序数据。 - -#### 缺点 - -- **软件限制**:软件应用程序可能存在一些限制,可能会影响用户的工作。 由于你使用的是原样软件,因此你不能直接控制功能。 评估哪种 PaaS 平台最适合某个工作负载时,请确保考虑所有业务需求和软件限制。 - -## 云服务模型比较 - -![Illustration showing the cloud responsibility model.](https://static.7wate.com/img/2022/04/14/dc0db18d3789c.png) - -## 无服务器计算 - -与 PaaS 类似,无服务器计算使开发人员无需管理基础结构,从而能够更快地构建应用程序。 借助无服务器应用程序,云服务提供商自动预配、缩放和管理运行代码所需的基础结构。 无服务器体系结构具有高度可缩放性和事件驱动性,只在出现特定函数或触发器时使用资源。 - -请注意,服务器仍会运行代码。 “无服务器”这一名称源于一个事实,即与基础结构预配和管理相关的任务对开发人员不可见。 此方法使开发人员能够将精力集中在业务逻辑上,并为业务核心提供更多价值。 无服务器计算可帮助团队提高工作效率,更快地将产品推向市场,使组织能够更好地优化资源并专注于创新。 diff --git a/docs/其他文章/_category_.json b/docs/其他文章/_category_.json deleted file mode 100644 index 4cfb0233..00000000 --- a/docs/其他文章/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "其他文章", - "position": 99, - "link": { - "type": "generated-index", - "title": "其他文章" - } -} \ No newline at end of file diff --git a/docs/其他文章/资源/_category_.json b/docs/其他文章/资源/_category_.json deleted file mode 100644 index 80f72d60..00000000 --- a/docs/其他文章/资源/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "资源", - "position": 3, - "link": { - "type": "generated-index", - "title": "资源" - } -} \ No newline at end of file diff --git a/docs/其他文章/资源/计算机教育中缺失的一课.md b/docs/其他文章/资源/计算机教育中缺失的一课.md deleted file mode 100644 index ea88902d..00000000 --- a/docs/其他文章/资源/计算机教育中缺失的一课.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 计算机教育中缺失的一课 -description: 计算机教育中缺失的一课 -keywords: -- 计算机教育中缺失的一课 -tags: -- 资源 -sidebar_position: 1 -author: 7Wate -date: 2023-01-05 ---- -# 计算机教育中缺失的一课 -> The Missing Semester of Your CS Education 中文版 - -大学里的计算机课程通常专注于讲授从操作系统到机器学习这些学院派的课程或主题,而对于如何精通工具这一主题则往往会留给学生自行探索。在这个系列课程中,我们讲授命令行、强大的文本编辑器的使用、使用版本控制系统提供的多种特性等等。学生在他们受教育阶段就会和这些工具朝夕相处(在他们的职业生涯中更是这样)。 - -因此,花时间打磨使用这些工具的能力并能够最终熟练地、流畅地使用它们是非常有必要的。 - -精通这些工具不仅可以帮助您更快的使用工具完成任务,并且可以帮助您解决在之前看来似乎无比复杂的问题。 - -- **1/13**: [课程概览与 shell](https://missing-semester-cn.github.io/2020/course-shell/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//course-shell-solution) -- **1/14**: [Shell 工具和脚本](https://missing-semester-cn.github.io/2020/shell-tools/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//shell-tools-solution) -- **1/15**: [编辑器 (Vim)](https://missing-semester-cn.github.io/2020/editors/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//editors-solution) -- **1/16**: [数据整理](https://missing-semester-cn.github.io/2020/data-wrangling/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//data-wrangling-solution) -- **1/21**: [命令行环境](https://missing-semester-cn.github.io/2020/command-line/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//command-line-solution) -- **1/22**: [版本控制(Git)](https://missing-semester-cn.github.io/2020/version-control/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//version-control-solution) -- **1/23**: [调试及性能分析](https://missing-semester-cn.github.io/2020/debugging-profiling/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//debugging-profiling-solution) -- **1/27**: [元编程](https://missing-semester-cn.github.io/2020/metaprogramming/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//metaprogramming-solution) -- **1/28**: [安全和密码学](https://missing-semester-cn.github.io/2020/security/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)[![](https://img.shields.io/badge/Solution-%E2%9C%94-green)](https://missing-semester-cn.github.io/missing-notes-and-solutions/2020/solutions//security-solution) -- **1/29**: [大杂烩](https://missing-semester-cn.github.io/2020/potpourri/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)![](https://img.shields.io/badge/Solution-%E2%9C%98-orange) -- **1/30**: [提问&回答](https://missing-semester-cn.github.io/2020/qa/)![](https://img.shields.io/badge/Chinese-%E2%9C%94-green)![](https://img.shields.io/badge/Update-%E2%9C%94-green)![](https://img.shields.io/badge/Solution-%E2%9C%98-orange) - -讲座视频可以在 [YouTube](https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J) 上找到。 \ No newline at end of file diff --git a/docs/其他文章/远程协助工具对比.md b/docs/其他文章/远程协助工具对比.md deleted file mode 100644 index 4f0587bb..00000000 --- a/docs/其他文章/远程协助工具对比.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: 远程协助工具对比 -title: 远程协助工具对比 -sidebar_position: 1 -data: 2022年7月26日 ---- - -![远程协助工具对比](https://static.7wate.com/img/2022/07/26/8ad9d41b8969f.jpg) - -## 官网地址 - -- [向日葵](https://sunlogin.oray.com/) -- [ToDesk](https://www.todesk.com/) -- [AnyDesk](https://anydesk.com/zhs) -- [RustDesk](https://rustdesk.com/zh/) -- [GotoHTTP](https://gotohttp.com/) -- [Splashtop](https://www.splashtop.cn/cn/) -- [TeamViewer](https://www.teamviewer.cn/cn/) -- [JumpDesktop](https://www.jumpdesktop.com/) diff --git a/docusaurus.config.js b/docusaurus.config.js deleted file mode 100644 index 1e9f1725..00000000 --- a/docusaurus.config.js +++ /dev/null @@ -1,480 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const lightCodeTheme = require("prism-react-renderer/themes/github"); -const darkCodeTheme = require("prism-react-renderer/themes/dracula"); - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "7Wate", - tagline: "For Freedom", - url: "https://wiki.7wate.com", - baseUrl: "/", - onBrokenLinks: "log", - onBrokenMarkdownLinks: "log", - favicon: "img/favicon.ico", - - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - // organizationName: '7wate', // Usually your GitHub org/user name. - // projectName: 'wiki', // Usually your repo name. - - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "zh-Hans", - locales: ["zh-Hans"], - }, - - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - blog: { - blogTitle: "7Wate`s Blog", - blogDescription: "7Wate 的个人生活和工作记录", - blogSidebarCount: 7, - blogSidebarTitle: "近期文章", - showReadingTime: true, - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - feedOptions: { - title: "7Wate`s Blog", - description: "7Wate 的个人生活和工作记录", - type: 'all', - copyright: `Copyright © ${new Date().getFullYear()} 7Wate, Inc.`, - }, - }, - theme: { - customCss: require.resolve("./src/css/custom.css"), - }, - sitemap: { - changefreq: "weekly", - priority: 0.5, - filename: 'sitemap.xml', - }, - googleAnalytics: { - trackingID: "G-MHMEL0F832", - anonymizeIP: true, - }, - gtag: { - trackingID: 'G-MHMEL0F832', - anonymizeIP: true, - }, - }), - ], - ], - plugins: [ - [ - "@docusaurus/plugin-content-docs", - { - id: "getting-started", - path: "wiki/getting-started", - routeBasePath: "getting-started", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "programming-language", - path: "wiki/programming-language", - routeBasePath: "programming-language", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "structures-algorithms", - path: "wiki/structures-algorithms", - routeBasePath: "structures-algorithms", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "computer-composition", - path: "wiki/computer-composition", - routeBasePath: "computer-composition", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "computer-network", - path: "wiki/computer-network", - routeBasePath: "computer-network", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "operating-system", - path: "wiki/operating-system", - routeBasePath: "operating-system", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "database-system", - path: "wiki/database-system", - routeBasePath: "database-system", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "computer-security", - path: "wiki/computer-security", - routeBasePath: "computer-security", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "software-engineering", - path: "wiki/software-engineering", - routeBasePath: "software-engineering", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "compilation-principle", - path: "wiki/compilation-principle", - routeBasePath: "compilation-principle", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], -// ----------------------------------------------------------------------------------- - [ - "@docusaurus/plugin-content-docs", - { - id: "org", - path: "group/organization", - routeBasePath: "org", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "com", - path: "group/company", - routeBasePath: "com", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "gov", - path: "group/government", - routeBasePath: "gov", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], -// ----------------------------------------------------------------------------------- - [ - "@docusaurus/plugin-content-docs", - { - id: "roadmap", - path: "work/roadmap", - routeBasePath: "roadmap", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "data-engineer", - path: "work/data-engineer", - routeBasePath: "data-engineer", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "front-end-engineer", - path: "work/front-end-engineer", - routeBasePath: "front-end-engineer", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "sre-engineer", - path: "work/sre-engineer", - routeBasePath: "sre-engineer", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], -// ----------------------------------------------------------------------------------- - [ - "@docusaurus/plugin-content-docs", - { - id: "life", - path: "life", - routeBasePath: "life", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], -// ----------------------------------------------------------------------------------- - [ - "@docusaurus/plugin-content-docs", - { - id: "journal", - path: "journal", - routeBasePath: "journal", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://git.7wate.org/zhouzhongping/wiki/src/branch/master", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - breadcrumbs: false, - }, - ], - - "docusaurus-plugin-umami", - ], - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - // announcementBar: { - // id: 'support_us', - // content: - // 'Always For Freedom. The site by 7Wate.', - // backgroundColor: '#fafbfc', - // textColor: '#091E42', - // isCloseable: false, - // }, - metadata: [ - { - name: "keywords", - content: "7wate, wiki, blog, python, linux", - }, - ], - navbar: { - title: "📚 7Wate's Wiki", - hideOnScroll: true, - // logo: { - // alt: 'Site Logo', - // src: 'img/logo.svg', - // srcDark: 'img/logo_dark.svg', - // href: 'https://docusaurus.io/', - // target: '_self', - // width: 32, - // height: 32, - // }, - items: [ - { to: "/blog", label: "👨🏻‍🌾 博客", position: "right" }, - { - position: "right", - label: "👨🏻‍🎓 维基", - items: [ - { - label: "基础入门", - to: "/getting-started", - }, - { - label: "程序设计语言", - to: "/programming-language", - }, - { - label: "数据结构与算法", - to: "/structures-algorithms", - }, - { - label: "计算机组成", - to: "/computer-composition", - }, - { - label: "计算机网络", - to: "/computer-network", - }, - { - label: "计算机安全", - to: "/computer-security", - }, - { - label: "操作系统", - to: "/operating-system", - }, - { - label: "数据库系统", - to: "/database-system", - }, - { - label: "软件工程", - to: "/software-engineering", - }, - { - label: "编译原理", - to: "/compilation-principle", - }, - ], - }, - { - position: "right", - label: "👨‍💻 职业", - items: [ - { - label: "求职之路", - to: "/roadmap", - }, - { - label: "SRE 工程师", - to: "/sre-engineer", - }, - { - label: "Data 工程师", - to: "/data-engineer", - }, - { - label: "Front-End 工程师", - to: "/front-end-engineer", - }, - ] - }, - { - position: "right", - label: "💼 组织", - items: [ - { - label: "自由社区", - to: "/org", - }, - { - label: "现代企业", - to: "/com", - }, - { - label: "国家政府", - to: "/gov", - }, - ] - }, - { to: "/life", label: "🚴🏻‍♀️ 生活", position: "right" }, - { to: "/journal", label: "📽️ 日志", position: "right" }, - ], - }, - algolia: { - apiKey: "5d5a02bdf02df700355c8ccd84b78d13", - appId: "8W3YJXJGF2", - indexName: "wiki", - }, - umami: { - websiteid: "7efcd733-c232-43db-9f17-10a00c53b152", - src: "https://umami.7wate.org/script.js", - }, - footer: { - style: "dark", - copyright: `Copyright © ${new Date().getFullYear()} 7Wate, Inc. Built with <a href="https://www.docusaurus.cn/" target="_blank" rel="noopener noreferrer">Docusaurus</a>.<br>Powered by <a href="https://webify.cloudbase.net/" target="_blank" rel="noopener noreferrer">CloudBase Webify</a>`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - defaultLanguage: "markdown", - additionalLanguages: ["java", "git","nginx","http"], - }, - mermaid: { - theme: {light: 'neutral', dark: 'forest'}, - }, - }), - markdown: { - mermaid: true, - }, - themes: ['@docusaurus/theme-mermaid'], -}; - -module.exports = config; diff --git a/group/company/home.md b/group/company/home.md deleted file mode 100644 index f670ab33..00000000 --- a/group/company/home.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -slug: / -sidebar_position: 1 -id: home -title: 现代企业 ---- - - -现代化企业规范 diff --git a/group/company/入门/_category_.json b/group/company/入门/_category_.json deleted file mode 100644 index 899087c7..00000000 --- a/group/company/入门/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "入门", - "position": 1, - "link": { - "type": "generated-index", - "title": "入门" - } -} \ No newline at end of file diff --git a/group/company/入门/应用系统/BPM(业务流程管理).md b/group/company/入门/应用系统/BPM(业务流程管理).md deleted file mode 100644 index 58e9e37e..00000000 --- a/group/company/入门/应用系统/BPM(业务流程管理).md +++ /dev/null @@ -1,27 +0,0 @@ ---- -id: BPM(业务流程管理) -title: BPM(业务流程管理) -data: 2022年8月2日 ---- - -## 概述 - -业务流程管理(Business Process Management, BPM)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(BPI)、业务流程重组(BPR)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、EAI、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。 - -业务流程管理是将生产流程、业务流程、各类行政申请流程、财务审批流程、人事处理流程、质量控制及客服流程等 70% 以上需要两人以上协作实施的任务全部或部分由计算机处理,并使其简单化、自动化的业务过程。 - -## BPMN(业务流程模型和标记法) - -它最初由业务流程管理倡议组织(BPMI, Business Process Management Initiative)开发,名称为"Business Process Modeling Notation",即“业务流程建模标记法”。BPMI于2005年与对象管理组织(OMG, Object Management Group)合并。2011年1月OMG发布2.0版本,同时改为现在的名称。 - -### BPMN 2.0 - -BPMN 2.0为新的业务流程模型和标记法创建单一规范,对标记法、元模型和交换格式做出界定。2.0版的名称有所修改,但仍会维持“BPMN”这个标志。特征包括: - -- 结合BPMN和业务流程定义元模型(BPDM),形成单纯一致的语言 -- 使能在建模工具间交换业务流程模型及其布局,以保持语义完整性 -- 扩充BPMN以允许将模型配置与编排成独立或集成的模型 -- 支持模型上不同透视法的显示和交替,令用户可以聚焦于特定的关注点 -- 串行化BPMN,为模型转换提供XML方案(schemes),向执行决策支持方向扩展业务模型。 - BPMN 2.0在2011年1月发布。 - diff --git a/group/company/入门/应用系统/CMS(内容管理系统).md b/group/company/入门/应用系统/CMS(内容管理系统).md deleted file mode 100644 index 4e3881ed..00000000 --- a/group/company/入门/应用系统/CMS(内容管理系统).md +++ /dev/null @@ -1,18 +0,0 @@ ---- -id: CMS(内容管理系统) -title: CMS(内容管理系统) -data: 2022年8月1日 ---- - -## 概述 - -内容管理系统(Content Management System,缩写 CMS)是协助组织和个人,借助信息技术,实现内容的创建、储存、分享、应用、检索,并在企业个人、组织、业务、战略等诸方面产生价值的过程。而内容管理系统就是能够支撑内容管理的一种工具或一套工具的软件系统。 - -目的是为了使“内容”能够在正确的时间、以正确的形式传递到正确的地点和人,常见表现形式:公司官网、博客、新闻网站、 - -## CMS 常见平台 - -- [WordPress](https://wordpress.com/zh-cn/)(开源):以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。 -- [Halo](https://halo.run/)(开源):一款现代化的开源博客/CMS系统 -- [SSCMS](https://sscms.com/)(商业):开源、跨平台、企业级的CMS内容管理系统。 -- [DedeCMS](https://www.dedecms.com/)(商业):国产PHP网站内容管理系统。 diff --git a/group/company/入门/应用系统/CRM(客户关系管理).md b/group/company/入门/应用系统/CRM(客户关系管理).md deleted file mode 100644 index 2e9b18de..00000000 --- a/group/company/入门/应用系统/CRM(客户关系管理).md +++ /dev/null @@ -1,31 +0,0 @@ ---- -id: CRM(客户关系管理) -title: CRM(客户关系管理) -data: 2022年8月1日 ---- -## 概述 - -客户关系管理(Customer Relationship Management,缩写 CRM)是一种企业与现有客户及潜在客户之间关系互动的管理系统。通过对客户数据的历史积累和分析,CRM可以增进企业与客户之间的关系,从而最大化增加企业销售收入和提高客户留存。 - -客户关系管理系统(CRM 系统)为企业从各种不同的角度来了解及区别顾客,以发展出适合顾客个别需要之产品/服务(P/S)的一种企业程序与信息技术的组合模式,其目的在于管理企业与顾客的关系,以使他们达到最高的满意度、忠诚度、维系率及利润贡献度,并同时有效率、选择性地找出与吸引好的新顾客。 - -## CRM 系统分类 - -### 应用功能 - -CRM系统若依照其应用功能的不同,则可以分为下列三大类,操作型CRM系统、分析型CRM系统以及协同型CRM系统。 - -- 操作型CRM:帮助企业集成前、后台所有业务流程时,用套装方式,提供各种直接面对顾客需求的自动化服务功能与应用。主要业者包括过去协助企业后台集成,进而提供订单承诺与订单追踪等管理功能的企业资源规划系统与供应链管理系统的业者,以及致力于前端的销售、营销与顾客服务自动化、套装化的业者。 -- 分析型CRM:根据借由上述各种沟通管道所搜集到的顾客资料,进而分析顾客行为,作为企业决策判断依据的功能。目前资料分析型CRM业者主要是以传统的数据库、从事数据仓库与资料挖矿的业者为主。 -- 协同型CRM:企业与其顾客不同的接触方式与沟通的管道,促使彼此间更易于交流交互的功能。目前通路交互型CRM业者主要是以提供电脑化电话语音客户服务中心(computer telephony integration center,CTI call center),及提供网页、电子邮件、传真、面对面等沟通管道集成方案的业者为主。 - -### 客户类别 - -CRM系统亦可按客户的类别进行区分,比如B2B的CRM与B2C的CRM。我们在市场上常见的一般是B2C的CRM,这个是面向消费者的客户关系管理系统。B2B的CRM,则面对渠道或终端客户,而非直接购买企业产品或服务的直接消费者。 - -### 业务架构 - -CRM系统还可分为传统型CRM和在线CRM两种。随着CRM的逐渐完善,在开发过程中,成熟的CRM系统根据系统的架构设计的不同被拆分成两个系统,则可以分为业务架构系统和平台化架构系统。 - -- CRM业务架构系统:针对行业的通用基本业务架构。 -- CRM平台化架构系统:对系统的业务架构系统配置,更好的适应使用系统的企业的个性化需求。 diff --git a/group/company/入门/应用系统/ERP(企业资源计划).md b/group/company/入门/应用系统/ERP(企业资源计划).md deleted file mode 100644 index f7aa7cde..00000000 --- a/group/company/入门/应用系统/ERP(企业资源计划).md +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: ERP(企业资源计划) -title: ERP(企业资源计划) -data: 2022年8月1日 ---- -## 概述 - -企业资源计划或称企业资源规划简称 ERP(Enterprise Resource Planning),由美国著名管理咨询公司 Gartner Group Inc.于1990年提出来的,最初被定义为应用软件,但迅速为全世界商业企业所接受,现已经发展成为现代企业管理理论之一。企业资源计划系统,是指建立在资讯技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。企业资源计划也是实施企业流程再造的重要工具之一,是个属于大型制造业所使用的公司资源管理系统。世界 500 强企业中有 80% 的企业都在用 ERP 软件作为其决策的工具和管理日常工作流程,其功效可见一斑。 - -  ERP 是整合了企业管理理念、业务流程、基础数据、人力物力、计算机硬件和软件于一体的企业资源管理系统。ERP 是先进的企业管理模式,是提高企业经济效益的解决方案。其主要宗旨是对企业所拥有的人、财、物、客户、信息、时间和空间等综合资源进行综合平衡和优化管理,协调企业内外各管理部门,围绕市场导向开展业务活动,提高企业的核心竞争力,从而取得最好的经济效益。所以,ERP 首先是一个软件,同时是一个管理工具。它是IT技术与管理思想的融合体,也就是先进的管理思想借助电脑,来达成企业的管理目标。 - -## ERP 的六大核心思想 - -![ERP的六大核心思想](https://static.7wate.com/img/2022/08/02/02b8a1797c133.gif) - -- Engineering Data Management: 工程数据管理 -- Production Management: 生产管理 -- Project Management: 项目管理 -- Customer Service Management: 客户服务管理 -- Materials Management: 物资管理 -- Financial Management: 财务管理 - -## ERP 的管理理念 - -  1. 体现了对整个供应链资料进行有效管理的思想,实现了对整个企业供应链上的人财物等所有资源及其流程的管理; -  1. 体现了精益生产,同步工程和敏捷制造的思想,面对激烈的竞争,企业需要运用同步工程组织生产和敏捷制造,保持产品高质量,多样化,灵活性,实现精益生产; -  1. 体现事先计划与事中控制的思想,ERP系统中的计划体系主要包括生产计划,物料需求计划,能力需求计划等; -  1. 体现业务流程管理的思想,为提高企业供应链的竞争优势,必然带来企业业务流程的改革,而系统应用程序的使用也必须随业务流程的变化而相应调整。 - -## ERP 的优点 - -### 即时性 - -在当今信息社会里,不仅要知己知彼,还要贵在“即时”,能否如此,其效果迥异。以外汇市场为例,国际化经营面临汇率变动的风险,如不能对各种汇率变化、各国客户订单、各种交易,包括应收账、应付帐、总账等进行即时运作,那么,即使到手的企业利润,也会因汇率的波动或缓慢的作业而缩水。在ERP状态下,资料是联动而且是随时更新的,每个有关人员都可以随时掌握即时的资讯。 - -### 集成性 - -在ERP状态下,各种信息的集成,将为决策科学化提供必要条件。ERP把局部的、片面的信息集成起来,轻松地进行衔接,就使预算、规划更为精确,控制更为落空,也使得实际发生的数字与预算之间的差异分析、管理控制更为容易与快速。 - -### 远见型 - -ERP系统的会计子系统,集财务会计、管理会计、成本会计于一体,又与其他子系统融合在一起,这种系统整合,及其系统的信息供给,有利于财务做前瞻性分析与预测。 diff --git a/group/company/入门/应用系统/HCM(人力资本管理).md b/group/company/入门/应用系统/HCM(人力资本管理).md deleted file mode 100644 index 6b89654b..00000000 --- a/group/company/入门/应用系统/HCM(人力资本管理).md +++ /dev/null @@ -1,93 +0,0 @@ ---- -id: HCM(人力资本管理) -title: HCM(人力资本管理) -data: 2022年8月2日 ---- - -## 概述 - -人力资本管理 (Human Capital Management,HCM) 是一套用于吸引、招聘、培训、培养、管理和留住员工以实现业务目标的实践和工具。 依靠员工实现目标的组织会分配一些资源来培养员工,使其获得实现成果所需的核心技能。 人力资本管理有助于识别员工能力方面的欠缺,并将招聘工作重点放在满足这些需求上。 - -利用 HCM 实践有助于塑造强大的企业文化,从而促进员工发展并加快公司目标的实现。 员工可以对自己的职业有更多的控制权,自发地将自己的技能和才能长期奉献给雇主。 - -## HCM 的组成部分 - -人力资本管理侧重于提升员工价值,让他们能够提供最佳成果。 它涵盖了人力资源职能、薪酬和其他对公司愿景和使命至关重要的关键领域。 HCM 提供了一个优化公司员工绩效和效率的流程 - 提供整体战略来指导人才吸引、招聘、入职和培训、福利管理和报告。 - -### 人才管理 - -人才管理可以培养员工,让他们可以获得新技能并提高工作绩效。 它从求职者第一次与公司互动开始,永远不会真正结束。 - -### 招聘和聘用 - -人力资本管理最重要的一个方面是吸引和雇用有助于组织实现目标的人才。 它为人力资源部门提供了一些工具,可用于将组织打造成员工理想的工作场所并简化招聘流程。 - -### 入职和培训 - -管理人力资本的前提是新员工已完成入职流程。 这会向他们介绍企业文化、工作要求和期望,并创造一个可帮助他们适应自己角色的环境。 HCM 的另一项功能是培训员工,让他们可以为组织提供最佳绩效。 - -### 福利管理 - -HCM 有助于简化管理员工福利的复杂任务,让员工可以更轻松地进行规划和决策。 一次性设置福利方案,促进整个系统的注册和扣除流程。 - -### 考勤和工资单 - -管理时间表、工作时间和休假对于工资单的准确性和合规性至关重要。 合适的 HCM 流程可以更轻松地跟踪和管理在职时间、请假申请和安全要求,并自动生成工资单。 - -### 员工服务和自助服务 - -HCM 可以提供用于考勤和服务交付的自助服务应用程序和跟踪系统,包括 HR 服务台、内部网门户网站、员工自助服务和经理自助服务。 - -### 报告和分析 - -人力资本管理提供了一个包含可行洞察的数据库,可帮助组织提升员工价值。 来自绩效评估、员工福利管理、技能、离职率和其他统计信息的数据可帮助他们调整做法,以改善工作环境并实现目标。 - -## HCM 管理的优势 - -人力资本管理的最大优势在于可以最大限度地提高企业员工的价值。 HCM 可以简化人力资源职责,同时还提供了其他一些好处,包括将合适的员工与合适的工作相匹配、提高员工生产力、降低成本和提高投资回报率,以及促进员工发展。 - -### 聘请合适的人担任合适的角色 - -组织可以将员工与可以发挥其技能和才能的职位相匹配。 HCM 提供的流程可以识别员工的个人优势和能力,从而将其与最合适的角色相匹配。 - -### 提高员工生产力和效率 - -人力资本管理通过投资员工培训,让员工获得组织实现目标所需的特定能力,从而提高生产力。 它还提高了员工效率,因为系统会将员工放在可以发挥其才能的职位上。 - -### 精简 HR 职能 - -HCM 可通过整合不同的 HR 系统、利用分析进行更智能的员工决策以及在全球和本地自动执行手动流程来加快人力资源流程。 - -### 降低成本并提高投资回报率 - -有效的人力资本管理系统可以增强绩效管理,从而简化流程、降低成本、增加收入并提高投资回报率 (ROI)。 - -加强员工发展和职业规划 - -人力资本管理的另一项功能是提供足够的培训,帮助员工实现最佳绩效并规划未来。 它可以通过培训、调查、绩效评估和其他反馈来源来确定员工的能力欠缺。 - -## HCM 软件 - -HCM(人力资本管理)软件有时也称为 HRIS(人力资源信息系统)或 HRMS(人力资源管理系统),它是一种可帮助雇主管理和培养员工的技术应用程序。 该软件可以将人才规划、管理和分析整合到一个系统中。 - -HCM 软件可以处理全公司的 HR 流程,旨在提高人力资本的投资回报率。 HRIS 专注于单个员工的数据和流程,而不是整个员工队伍,而 HRMS 可以提供一套全面的人力资源软件功能。 该套件可包括完整的 HRIS 以及 HCM 功能、考勤和工资单 - 可选择将所有人力资源流程和 HCM 流程集成到 HRMS 中。 - -### 实现 HR 职能的集成系统 - -合适的软件使企业能够简化任务、提高整体效率、按需访问 HR 相关信息、增加员工福利并减少关键记录保存方面的人为错误。 - -### 数据驱动的决策 - -HCM 软件可以集成不同的功能并提供对数据的实时访问。 它利用云来提高效率并提供移动性 - 允许您访问要在决策中使用的正确数据分析。 - -### 增强的合规性 - -遵守合规性法规以避免处罚和巨额罚款对于组织而言非常重要。 HCM 合规软件可自动执行工作流程、核对表、报告、存档和记录工作,从而帮助企业保持合规。 - -### 数据安全和隐私 - -HCM 解决方案可通过减少文书工作量和相关安全风险来提高企业安全性。 这些系统可包括严格的安全协议,并根据组织需求精心定制访问权限。 - -### 增强的报告 - -借助集成解决方案,您可以跟踪员工信息并创建报告,从而为决策提供可行的信息。 通常,可使用多种文件类型选项来导出报告。 diff --git a/group/company/入门/应用系统/OA(办公自动化).md b/group/company/入门/应用系统/OA(办公自动化).md deleted file mode 100644 index bfc815d6..00000000 --- a/group/company/入门/应用系统/OA(办公自动化).md +++ /dev/null @@ -1,41 +0,0 @@ ---- -id: OA(办公自动化) -title: OA(办公自动化) -data: 2022年8月3日 ---- - -## 概述 - -办公自动化(Office Automation,简称OA)是指办公人员利用现代科学技术的最新成果,借助先进的办公设备,实现办公活动科学化、自动化,其目的是通过实现办公处理业务的自动化,最大限度地提高办公效率,改进办公质量,改善办公环境和条件,辅助决策,减少或避免各种差错和弊端,缩短办公处理周期,并用科学的管理方法,借助各种先进技术,提高管理和决策的科学化水平。 - -## OA 系统的层次 - -一般来说,一个较完整的办公自动化系统,应当包括信息采集、信息加工、信息转输、信息保存四个环节。办公自动化一般可分为三个层次:**事务型、管理型、决策型。** - -### 事务型 - -  事务工作是整个办公活动的基础,也是研究办公活动的切入点,包括文字处理、个人日程管理、行文管理、邮件处理、人事管理、资源管理,以及其他有关机关行政事务处理等等。 - -  管理层办公自动化(M1S:ManagementlnformationSystem)。管理层办公自动化除具有办公事务处理的功能外,还具有办公业务处理和管理的功能。从信息处理的角度来看,MIS是满足基于整个业务系统的信息处理一体化的需求,合理地改善信息处理的组织方式和技术手段,可达到提高信息处理效率和管理水平的目的。将办公系统的业务活动和管理活动构成一个整体的自动化功能模块。 - -### 管理型 - -  管理型为中间层,它包含事务型,管理型系统是支持各种办公事务处理活动的办公系统与支持管理控制活动的管理信息系统相结合的办公系统 - -### 决策型 - -  决策型为最高层,它以事务型和管理型办公系统的大量数据为基础,同时又以其自有的决策模型为支持,决策层办公系统是上述系统的再结合,具有决策或辅助决策功能的最高级系统。 - -  决策支持层的办公自动化,除具有办公事务处理功能和管理功能外还具有决策支持功能。具体而言,DSS是一种基于计算机的交互式系统,用来帮助决策者在决策过程中利用数据和模型求解问题作出判断。所以,DSS是能支持专门的数据分析和决策模型建立过程的、以未来计划为目标的、不定型的可扩充的系统。它由三个互相联系的部分构成:语言子系统,在用户和DSS之间的通讯机构和交互界面;知识子系统,由数据和过程组成的领域知识;问题处理子系统,连接上述两个部分的控制和推理机制。 - -  网络计算模式的群体办公系统将成为主流模式。办公自动化是从WWW上获取各类信息,如文本、语言、图形图像、影视、电子表格等,在Internet上进行多层次的工作,包括基础层:对数据信息的浏览、查询、检索;管理层:对系统的集成、综合、归纳、组织、模拟等;高层决策:对业务目标和组织活动的创意、创作、构思、设计与决策。 - -## OA 系统的基本功能 - -1. 文件阅读、文件批示、文件处理、文件存档等事务。 - -2. 草拟文件、制订计划、起草报告、编制报表、资料整理、记录、拍照、文件打印等事务。 - -3. 文件收发、保存、复制、检索、电报、电传、传真等事务。 - -4. 会议、汇报、报告、讨论、命令、指示、谈话等事务。 diff --git a/group/company/入门/应用系统/SCM(供应链管理系统).md b/group/company/入门/应用系统/SCM(供应链管理系统).md deleted file mode 100644 index f7e09dcd..00000000 --- a/group/company/入门/应用系统/SCM(供应链管理系统).md +++ /dev/null @@ -1,83 +0,0 @@ ---- -id: SCM(供应链管理系统) -title: SCM(供应链管理系统) -data: 2022年8月2日 ---- - -## 概述 - -从基本层面上来说,供应链管理 (SCM) 是指从原料采购到产品交付至最终目的地的整个过程中,对与产品或服务有关的商品、数据和资金的流动进行的管理。 - -许多人将供应链与物流混为一谈,但实际上物流只是供应链的一部分。当今的数字化 SCM 系统提供物料处理和各种软件来帮助供应链中的所有相关方(包括供应商、制造商、批发商、运输和物流提供商以及零售商)创建产品或服务、履行订单和跟踪信息。 - -供应链活动无所不包,涵盖了采购、产品生命周期管理、供应链计划(包括库存计划以及企业资产和生产线维护)、物流(包括运输和车队管理)以及订单管理。SCM 还可以延伸到围绕全球贸易开展的活动,例如全球供应商和跨国生产流程的管理。 - -## OMS(订单管理系统) - -订单管理系统(Order Management System,OMS)是一款计算机软件系统,用于自动跟踪销售、订单、库存和履行的数量。 - -### OMS 分步流程 - -大多数订单管理系统都遵循六步流程,以帮助准确且快速地处理和履行客户订单。此流程适用于确保您满足客户的所有需求,同时为客户提供一种普遍而又个性化的用户体验。这六个步骤是: - -#### **1.发现** - -订单管理流程的第一步来自客户。无论客户通过在线商店、第三方网站还是通过电话下达产品订单,产品都将进入在线购物车中,并立即调整当前库存。如果产品项目仅仅位于购物车中,或者客户取消了订单,系统还可以向您发出提示。 - -#### **2.下达订单** - -客户决定购买产品后,OMS 会与您的会计或财务团队通信,以验证信用卡付款信息并处理订单。订单获批准后,将会传递以进行履行。 - -批发或企业对企业销售人员可以选择发票模型,选择先接收批量购买的报价。然后,将向他们发送要在特定截止时间前付款的发票。 - -#### **3.订单履行** - -订单到达仓库后,您的 OMS 将选择距离订单目的地最近或者最易于获取产品的位置,然后计算发运成本和最快的承运商。OMS 或许能够帮助打印发货标签、装箱单和收据。 - -#### **4.仓库管理** - -在这一步中,每个产品都拥有 SKU 和条形码非常重要。如果产品同时具有这两项,则会提高履行准确性,并且您的仓库能够更轻松地扫描您的产品并将产品添加到订单中。从仓库中拣货有四种方法: - -**单个订单。**拣取单个订单中的产品并送往包装工作站。 - -**批量拣货。**将在一轮中为一个拣货员分配特定数量的订单,以便拣取并送往装箱工作站。 - -**区域拣货。**每个拣货员都会获取指定的一个仓库区域,当这些区域中的产品在通过每个区域时,将会添加到订单中。 - -**波次拣货。**所有区域将会同时拣货并送往单个位置以进行整合。 - -如果产品库存不足,您的 OMS 会与您的供应商联系,以便提前向仓库发送补货供应。创建再订购点可以确保一直保持适量库存。当库存达到较低阈值时,系统将会自动下达新的采购订单,同时向仓库管理员发出履行可能会延迟的提醒。 - -订单也会发送到您的会计部门,或通知您的会计软件有新的购买。利用可靠的[财务管理](https://dynamics.microsoft.com/zh-cn/finance/financial-management-software/)解决方案,可以轻松地进行每月和年终的审计、纳税等。 - -#### **5.发运** - -在从仓库中为订单选择产品后,您的包装团队将从仓库中检索这些项目,并扫描这些项目以进行库存处理。接下来,他们将根据 OMS 所提供的详细信息来拣货、打包和发运您的产品。要在包装工作中考虑的三方面内容包括: - -**订单准确性。**确保每个项目都包含于正确的订单中。 - -**包装盒大小。** 计划将产品尺寸纳入价格中。准备三到五个标准尺寸的包装盒有助于降低成本,而又不会使流程过于复杂。 - -**合适的包装。**某些包装材料可能能够为您的产品提供更好的保护,但成本可能更高。选择合适的包装类型,既要具有成本效益,又可确保发运旅程安全。 - -**跟踪。**您的 OMS 还可以向客户发送通知,说明其产品已发货和估计的到达时间。您和客户都可以对产品发运旅程进行跟踪,包括从仓库初始发运直至到达目的地。 - -#### **6.售后跟进** - -在产品离开仓库后以及发运到达目的地后的指定时间,OMS 会自动向客户发送电子邮件,要求客户对产品进行评价,并确保客户已收到其订单中包含的所有项目。此跟进还会包含有关如何联系客户服务的详细说明。 - -如果您的客户对产品不满意,能够轻松地找到和遵循有关高效地进行退货和退款的政策和说明。OMS 可以快速地处理退款请求,并与会计团队联系以处理退款。OMS 还可以连接到退货提供商,以确保您的所有数据均准确且已更新。 - -## TMS(运输管理系统) - -运输管理系统(Transportation Management System,TMS)是一种物流平台,旨在利用技术来帮助企业计划、执行和优化进出货物的物理移动,确保货运合规,并建立适当的归档。此类系统通常是更大的供应链管理 (SCM) 系统的一部分。 - -TMS 有时又被称为**运输管理解决方案**或**运输管理软件**,它不仅能提供关于日常运输运营、贸易合规信息和文档的可见性视图,确保及时交付货物,还有助于理顺货运流程,帮助企业更加轻松地管理和优化运输运营,包括陆运、空运和海运。 - -## WMS(仓库管理系统) - -仓库管理系统 (Warehouse Management System,WMS)是一种软件解决方案,它提供对企业整个库存的可见性,可管理从配送中心到商店货架的整个供应链履行运营。 - -此外,仓库管理(Warehouse Management System,WMS)解决方案通过协调和优化资源使用和物料流动,助力企业充分利用劳动力、空间和所投资的设备。具体而言,WMS 系统旨在满足整个全球供应链的需求,包括分销、制造、资产密集型和服务业务。 - -在当今动态、全渠道的履行经济中,网购消费者希望随时随地都能进行购买、订单履行和退货。为了满足这一需求,企业需要通过可优化履行能力的仓库管理软件来实现快速响应。基于云的 Oracle 仓库管理系统可帮助您满足未来的供应链需求。WMS 云扩展了供应链,将库存管理和履行服务与现代采购方法相匹配,并提供对整个库存的实时可见性。 diff --git a/group/company/入门/应用系统/_category_.json b/group/company/入门/应用系统/_category_.json deleted file mode 100644 index a088b5f0..00000000 --- a/group/company/入门/应用系统/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "应用系统", - "position": 2, - "link": { - "type": "generated-index", - "title": "数字化" - } -} \ No newline at end of file diff --git a/group/company/入门/数字化/_category_.json b/group/company/入门/数字化/_category_.json deleted file mode 100644 index acc2248e..00000000 --- a/group/company/入门/数字化/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "数字化", - "position": 1, - "link": { - "type": "generated-index", - "title": "数字化" - } -} \ No newline at end of file diff --git a/group/company/入门/标准参考/_category_.json b/group/company/入门/标准参考/_category_.json deleted file mode 100644 index 42d4d0ac..00000000 --- a/group/company/入门/标准参考/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "标准参考", - "position": 5, - "link": { - "type": "generated-index", - "title": "标准参考" - } -} \ No newline at end of file diff --git a/group/company/入门/管理文化/_category_.json b/group/company/入门/管理文化/_category_.json deleted file mode 100644 index 8d59dc5b..00000000 --- a/group/company/入门/管理文化/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "管理文化", - "position": 4, - "link": { - "type": "generated-index", - "title": "管理文化" - } -} \ No newline at end of file diff --git a/group/company/入门/管理文化/概述.md b/group/company/入门/管理文化/概述.md deleted file mode 100644 index a7e0d04d..00000000 --- a/group/company/入门/管理文化/概述.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 概述 -description: 管理文化概述 -keywords: -- 管理文化 -tags: -- 管理文化 -sidebar_position: 1 -author: 7Wate -date: 2023-01-16 ---- - -## 管理文化是什么 - -管理文化是指将一个组织的全体人员结合在一起的标准和行为方式。管理文化代表组织的目标、信念、哲学伦理及价值观,是管理精神中最核心、最本质的成分。 - -管理和文化有着紧密的联系。管理活动是以人类本身一定程度的文化发展总和为存在基础的。整个管理发展史证明了文化是管理科学和管理实践生存和发展的生命之源。文化是管理活动的客观基础,是管理主体的精神核心,也是管理科学生存的土壤。反过来,管理对文化的发展具有巨大的推动作用,又是文化的延伸和发展形态。在任何组织中,其管理方法都受到文化的影响,同时也是管理文化的生动体现。因此,脱离管理谈文化的发展、脱离文化谈管理的发展都是不可能的。 - -## 管理文化与文化管理的对比 - -文化管理是一种管理模式,管理文化则是一种文化样式。管理文化主要是指管理思想、管理哲学和管理风貌,其核心是管理的价值观念。一定的社会、民族和文化圈的文化,必然会渗透和反映在一定的管理过程中,管理文化其实就是一定文化特征在管理中的体现。 - -管理是一种文化,管理模式的更迭暗示着人类文化的演进。经验管理时代有经验管理时代的管理文化,科学管理时代有科学管理时代的管理文化,但不能说有了管理文化就有了文化管理。 diff --git a/group/company/入门/组织结构/_category_.json b/group/company/入门/组织结构/_category_.json deleted file mode 100644 index e861cbfe..00000000 --- a/group/company/入门/组织结构/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "组织结构", - "position": 3, - "link": { - "type": "generated-index", - "title": "组织结构" - } -} \ No newline at end of file diff --git a/group/company/入门/组织结构/体系.md b/group/company/入门/组织结构/体系.md deleted file mode 100644 index e7fcb508..00000000 --- a/group/company/入门/组织结构/体系.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 体系 -description: 组织结构体系 -keywords: -- 组织结构 -- 体系 -tags: -- 组织结构 -sidebar_position: 4 -author: 7Wate -date: 2023-01-16 ---- - -## 组织结构的体系 - -在管理学意义上,组织结构实质上是一种职权-职责关系结构。一个现代化的、健全的组织机构一般包括如下关系子系统: - -### 1. 决策子系统 - -组织的领导体系和各级决策机构及其决策者组成决策子系统。各级决策机构和决策者是组织决策的核心。 - -### 2. 指挥子系统 - -指挥子系统是组织活动的指令中心,在各职能单位或部门,其负责人或行政首脑与其成员组成垂直形态的系统。行政首脑的主要任务是实施决策机构的决定,负责指挥组织的各项活动,保证各项活动顺利而有效地进行。指挥子系统的设计应从组织的实际出发,合理确定管理层次,并根据授权原则,把指挥权逐级下授,建立多层次、有权威的指挥系统,来行使对组织各项活动的统一指挥。 - -### 3. 参谋-职能子系统 - -参谋-职能子系统是参谋或职能部门组成的水平形态的系统。各参谋或职能部门,是行政首脑的参谋和助手,分别负责某一方面的业务活动。设计参谋-职能子系统,要根据实际需要,按照专业分工原则,设置必要的参谋或职能机构,并规定其职责范围和工作要求,以保证有效地开展各方面的管理工作。 - -### 4. 执行子系统、监督子系统和反馈子系统 - -决策中心决定组织的大政方针,指挥中心是实施计划的起点,而执行子系统、监督子系统和反馈子系统是使计划得以正确无误地推行的机构。 - -指挥中心发出指令,这个指令一方面通向执行机构,同时又发向监督机构,让其监督执行的情况。反馈机构通过对信息系统的处理,比较效果与指令的差距后,返回指挥中心。这样,指挥中心便可以根据情况发出新的指令。 - -执行机构必须确切无误地贯彻执行指挥中心的指令。为了保证这一点,就应有监督机构监督执行情况,而反馈子系统是反映执行的效果。执行子系统、监督子系统和反馈子系统必须互相独立,不能合而为一。 diff --git a/group/company/入门/组织结构/实例.md b/group/company/入门/组织结构/实例.md deleted file mode 100644 index 7d22ae4e..00000000 --- a/group/company/入门/组织结构/实例.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: 实例 -description: 组织架构实例 -keywords: -- 组织架构 -- 实例 -tags: -- 组织架构 -sidebar_position: 5 -author: 7Wate -date: 2023-01-16 ---- - -## 组织结构的案例分析 - -### 案例一:海尔集团的成功 - -一个亏损147万元的小厂,17年之后成为一个国际知名的大型企业集团,年销售额从1984年的384万元到2001年的600亿元,业绩增长了1万多倍,并保持年80%的平均增长速度。并且在美国、欧洲、亚太及中东建立了生产、销售中心。 - -海尔的成功之路堪称中国企业发展史上一个罕见的成功案例。那么,海尔为什么如此成功?海尔25年来的发展,经历了四次重大的战略转变期,分别是:1名牌战略阶段(1984年一1991年);II多元化战略阶段(1992年一l998年);III国际化战略阶段(1998年一2o05年);IV全球化品牌战略阶段(2006年一)。每一次成功的战略调整需要的是有效合理的组织结构调整作支撑。 - -1. 名牌战略阶段(1984年一l991年):海尔的名牌之路始于质量管理,其采取日清管理法,就是对每人、每天做的事进行控制和清理,使整个质量保证是优质。在保证产品质量的同时,时刻关注员工素质及消费者偏好。在此期间,始终只做冰箱一种产品。这一时期的组织结构注重各职能划分,体现集权思想,所以主要还是直线一职能制组织模式。 - -2. 多元化战略阶段(1992年一l998年)1992年,在邓小平南巡讲话鼓舞下,海尔转向多样化发展战略。以吃休克鱼、海尔管理模式、低成本扩张方式,迅速构建起国际化大公司的规模。为适合多元化企业战略要求,海尔在武汉、重庆等地建立工业园,建立以产品为基础的事业部制结构。总部负责集中筹划集团发展目标,各分部负责相应区域产品的生产、销售,实行独立经营、独立核算。总部与分部间权责明确,体现权力的下放,组织结构不断趋向于扁平化。 - -3. 国际化战略阶段(1998年一2005年)作为中国企业国际化先行者,海尔“国际化即本土化”的做法是,当地设计、当地制造、当地销售,以及当地融资、当地融智。这一阶段的企业组织结构形式是事业分部数量的增加,企业组织结构更加趋向于扁平化、网络化、多样化。 - -4. 全球化品牌战略阶段(2006年一)2006年,海尔把“全球化品牌战略”做为自己新的战略方向1。品牌不光是质量保证,同时需满足消费者差异化需求及个性化服务需求,为此海尔选择以市场链为基础面向顾客需求的生产流程再造,并确立相应报酬激励制度,以提高企业活力。在“零库存”以及“差异化生产服务”思想下,体现企业组织结构的柔性化、多样化、网络化。 - -#### 启示 - -一个企业集团成长与发展,主要取决于在适应变环境中所采用的“战略”和实施战略的“组织”。战略的实施需要一定的组织结构来完成,而组织结构最终还是为战略的实施服务的。海尔的四阶段发展验证了一个企业组织结构在企业战略以及外部环境双重影响下的调整,体现由简单一复杂,由集权一分权的演变过程,表现扁平化、网络化、柔性化和多样化特征。海尔集团的成功经验对其它企业实施国际化战略及国际化经营有着积极的借鉴作用。 - -### 案例二:美的集团的组织结构的案例分析 - -#### 一、案例背景 - -美的集团由成立之初的街道小厂,经过30多年的不断调整、发展与壮大,经历了数次的战略和组织结构的变革,如今已成为以家电业为主的大型综合性现代化企业集团,美的从最初的被动地进行组织结构的变革发展到为强化竞争力而主动地、有意识地去让组织结构适应环境的发展,正是其不断发展壮大的动力之一。 - -#### 二、直线职能制结构 - -这种组织结构的特点是:以直线为基础,在各级行政主管之下设置相应的职能部门(如计划、销售、供应、财务等部门)从事专业管理,作为该级行政主管的参谋,实行主管统一指挥与职能部门参谋-指导相结合。在直线职能型结构下,下级机构既受上级部门的管理,又受同级职能管理部门的业务指导和监督。各级行政领导人逐级负责,高度集权。因而,这是一种按经营管理职能划分部门,并由最高经营者直接指挥各职能部门的体制。它既保持了直线型结构集中统一指挥的优点,又吸收了职能型结构分工细密、注重专业化直线-职能型组织结构的内在缺陷具体如下: - -1. 属于典型的“集权式”结构,权力集中于最高管理层,下级缺乏必要的自主权; -2. 各职能部门之间的横向联系较差,容易产生脱节和矛盾; -3. 直线-职能型组织结构建立在高度的“职权分裂”基础上,各职能部门与直线部门之间如果目标不统一,则容易产生矛盾。特别是对于需要多部门合作的事项,往往难以确定责任的归属; -4. 信息传递路线较长,反馈较慢,难以适应环境的迅速变化。 - -组织学大师弗莱蒙特?E?卡斯特认为当组织“环境相对稳定而确定;目标明确而持久;技术相对统一而稳定;决策可以程序化时。”以采用直线职能型的组织结构为宜,美的在公司发展早期,当时产品线单一、部门简单,所以易采取直线职能制结构。 - -#### 三、事业部制组织结构 - -按企业的产出将业务活动组合起来,成立专业化的生产经营管理部门,即事业部。每个事业部都主要负责一个或者几个产品。凡与该产品有关的设计、生产、技术、销售、服务等业务活动,均组织在这个产品事业部之中,由该事业部总管;在销售地区广、工厂分散的情况下,企业可按地区划分事业部;如果顾客类型和市场不同,还可按顾客(市场)成立事业部。这样,每个事业部都有自己的产品或服务的生产经营全过程,为企业贡献出一份利润。 - -实行事业部组织结构可让企业最高领导摆脱日常的行政事务,集中力量研究和制定企业发展的各种经营战略和经营方针而把最大限度的管理权限下放到各事业部,使他们能够依据企业的经营目标、政策和制度,完全自主经营,充分发挥各自的积极性和主动性。 各事业部均为利润中心,实行独立核算。这就是说,实行事业部制,则意味着把市场机制引入到企业内部,各事业部间的经济往来将遵循等价交换原则,结成商品货币关系。 - -美的公司内部实行事业部对公司是有着重大的积极意义的。在企业发展壮大的时期,企业的高速成长会使企业短期内营业额大幅上涨,公司抓住时机进入不同的领域开发新的产品,这样企业就要面对对多个产品进行经营的任务,美的公司传统的直线职能结构明显不能很好的完成这个任务,产品具有差异性,同时对多个产品进行管理必然不能达到使每种产品最好销售的效果。因此采用事业部组织结构可以让不同产品分离开来进行有针对性的管理经营,有很多优点: - -1. 每个事业部都有自己的产品和市场,能够规划其未来发展,也能灵活自主的适应市场出现的新情况迅速做出反应,所以,事业部组织结构有高度稳定性和适应性。 -2. 能让高层有更多的时间实行决策职能,同时使各事业部发挥经营管理的积极性和创造性,最大限度的提高各个管理层的效率和发挥其各自的职能。 -3. 事业部需要独立经营,因此能够让事业部的管理者得到很好的锻炼,有利于培养人才,为企业的未来发展储备干部。 -4. 事业部的出现使得公司更好的了解各个产品的情况,从而也更有利于公司评价每种产品对公司总利润的贡献大小,利于高层制定未来的发展战略规划。 -5. 事业部的成立利于其对各自产品的研发、生产和销售 -6. 事业部自主管理,增强了其自主性,权利的下放使得事业部有很大的责任,有利于激励事业部管理者进行更好的管理。 -7. 事业部成立后各事业部之间能形成良性竞争,使企业更有活力。 - -#### 四、美的组织结构的变化给我们的启示 - -美的现已成为以家电业为主的大型综合性现代化企业集团,这与它的组织结构发生变化是密不可分的。美的从最初的被动地进行结构的变革到到为强化竞争力而主动地、有意识地去让组织结构适应环境的发展,正是其不断发展壮大的动力之一。 - -企业要随着社会经济环境、企业发展远景、市场的需求、外部效益、员工群体素质等多方面原因不断进行调整,这样才能让企业能够在变化多端的商业环境下生存下去,并有机会得到发展。 良好的企业组织结构形式是提高经营活动的效率、培育竞争优势的保证。 在不断变动的经济、技术与文化环境中,企业只有通过对其内、外组织形式进行持续的适应性调整。 - -在企业组织调整中,企业不应该局限于某一基本的组织形式,应从实践出发,对自身的组织结构进行有效地调整,让其既能满足战略的要求又非常简单可行。 - -企业的组织结构是实施战略的一项重要工具,一个好的企业战略要通过与企业相适应的组织结构去完成才能起作用。实践证明,一个不适宜的组织结构必将对企业战略产生巨大的损害作用,它会使良好的战略设计变得无济于事。因此,企业组织结构是随着战略而定的,它必须按战略目标的变化而及时调整。 diff --git a/group/company/入门/组织结构/概述.md b/group/company/入门/组织结构/概述.md deleted file mode 100644 index 8943d69f..00000000 --- a/group/company/入门/组织结构/概述.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 概述 -description: 组织结构的概述 -keywords: -- 组织架构 -- 概述 -tags: -- 组织架构 -sidebar_position: 1 -author: 7Wate -date: 2023-01-16 ---- - -## 组织结构是什么 - -组织结构的概念有广义和狭义之分。 - -- 狭义的组织结构:指为了实现组织的目标,在组织理论指导下,经过组织设计形成的组织内部各个部门、各个层次之间固定的排列方式,即组织内部的构成方式。 - -- 广义的组织结构:除了包含狭义的组织结构内容外,还包括组织之间的相互关系类型,如专业化协作、经济联合体、企业集团等。 - -### 通俗点说 - -组织结构(组织架构)是一个组织是否实现内部高效运转、是否能够取得良好绩效的先决条件。组织结构通常表现为一个组织的人力资源、职权、职责、工作内容、目标、工作关系等要素的组合形式,是组织在“软层面”的基本形态,其本质是实现某一组织的各种目标的一种手段。 - -现代管理学之父彼得·德鲁克对的组织架构的认知是: - -1. **组织架构不是“自发演变”的**,在一个组织中,自发演变的只有混乱、摩擦和不良绩效,所以组织设计组织架构需要思考、分析和系统的研究。 -2. **设计组织架构并不是第一步,而是最后一步。**第一步是对组织架构的基本构成单位进行识别和组织。其中,组织结构的基本构成单位是指那些必须包含在最后的结构之中,并承担整个组织的“结构负荷”的那些业务活动。并且,基本构成单位是由它们所做贡献的种类来决定的。 -3. **战略决定结构。**结构是实现某一机构的各种目标的一种手段,为了确保效率和合理性,必须使组织结构与战略相适应,即战略决定结构。战略就是对“我们的业务是什么、应该是什么和将来会是什么”这些问题的解答,它决定着组织结构的宗旨,并因此决定着在某一企业或服务机构中哪些是最关键的活动。有效的组织结构,就是使这些关键活动能够正常工作并取得杰出绩效的组织设计。因此,有关结构的任何工作,都必须从目标和战略出发。 -4. 日常的经营管理、创新和高层管理这三种不同的工作必须组合在同一组织结构之中,**组织结构必须一方面以任务为中心,另一方面以人为中心,并且既有一条权力的轴线,又有一条责任的轴线。** - -## 组织结构的正式规范 - -组织结构是一些“形式”,而形式必须满足一些正式的规范。组织结构特别要满足以下一些最低要求:**清晰性、经济性、愿景的方向、对个人任务和共同任务的理解、决策、稳定性和适应性以及永存性与自我更新。** - -## 组织结构的基本构成单位 - -### 如何识别和组织? - -组织者在设计组织的基本构成单位时,需要发现组织结构中“承担重任”的部分,即各项关键活动。组织设计可以从以下问题开始: - -1. **为了达到公司的目标,必须在哪个领域有出色的表现?** -2. **哪些领域的绩效不佳会影响到企业的成果,甚至会影响到企业的存在?** -3. **在本组织中,真正具有重要性的价值是什么?** - -上述三个问题有助于识别出关键活动,管理者必须识别和界定这些关键活动,并把它们配置在组织的核心地位。以此为基础,接下来就是按照各种活动所做出贡献的类别来归类。 - -首先,是产生成果的活动。即产生与整个企业绩效直接或间接相关的成果的各种活动。在这些活动中,有些直接产生收益,其他一些则贡献出可以衡量的成果。主要如创新活动、销售活动、人员的招募与培训以及信息活动等等。 - -第二类活动是支持性活动。这些活动本身并不产生成果,而只有企业中的其他单位利用了它们的“输出”以后才能产生成果。如“道德”活动、咨询、教育及顾问等等。 - -第三类活动是同企业成果没有直接或间接关系的纯粹的辅助性活动。如保健和厂务活动等。 - -最后一类在性质上同以上各类都不相同,是高层管理活动。 - -为什么要对活动进行分类呢?这一问题的答案是:需要以不同的方式来对待在贡献上各不相同的活动。各种活动的贡献,决定了它们的地位和配置:关键活动绝不应该排在非关键活动之后;产生收益的活动绝不应该排在不产生收益的活动之后;支持性活动绝不应该同产生收益的活动和为成果做出贡献的活动混淆起来,而应该予以区分。 - -### 如何把结构单位“配置”起来? - -要把构成组织的各种结构单位“配置”起来,搭建起一个组织架构,还需要另外两项工作:**决策分析和关系分析。** - -关于决策分析。取得实现目标所必须的绩效,需要一些什么决策呢?它们是一些什么类型的决策呢?它们应该在组织的哪一层次上做出呢?它们涉及或影响到哪些活动呢?哪些管理人员因此必须参与决策,或至少应该在事先征求一下意见呢?哪些管理人员必须在决策之后予以通知呢?有关上述这些问题的答案,在很大程度上决定着某种工作应该归属在哪里。 - -在设计组织的基本构成单位的过程中,最后一个步骤是关系分析。关系分析能够表明组织的某一项构成要素应该归属在哪里。负责某项活动的管理人员应该同哪些人一同工作,他必须对负责其他活动的管理人员做出什么贡献,而那些管理人员又应该对他做出哪些贡献? - -在组织结构中,把一项活动放在适当位置的基本原则,是使影响它的各种关系尽可能少。同时,这项活动应该放在决定性的关系上,即决定其成功与贡献效果的关系上,并且应该相对简单、易于接近并成为该单位的中心。规则是:使关系尽可能少,但每一项关系都要发挥作用。 diff --git a/group/company/入门/组织结构/规范.md b/group/company/入门/组织结构/规范.md deleted file mode 100644 index fd471838..00000000 --- a/group/company/入门/组织结构/规范.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: 规范 -description: 组织结构的规范 -keywords: -- 组织结构 -- 规范 -tags: -- 组织结构 -sidebar_position: 3 -author: 7Wate -date: 2023-01-16 ---- - -## 设计规范方法 - -企业组织架构设计规范方法——**目标功能树系统分析模型** - -**如何解决组织架构设计规范化的四个方面的问题?** - -专门探索解决组织架构设计的科学方法,到目前为止,还很少有人进行探索,也没有见诸书刊的文献。在这种情况下,对组织架构设计规范化的讨论,就仅仅变成了一种讨论者个人在组织架构上的主观偏好的陈述。 - -我们说规范与否,在这里并不是一种简单的价值判断,不是由自己的主观偏好来认定什么是好、什么是坏,而是要把握所规范的对象本身的性质,用所要规范的对象自身的内在逻辑联系和发展规律,来定义规范。也就是说,不是从外部向要规范的对象强加一个什么,而是让要规范的对象本身按照它应有的形式和规律运行和发展。只有这样,才能使规范化管理这一工作达到应该有的提升企业价值的目的。企业规范化管理,必须在企业价值的提升——管理效率和管理效益的改善上有充分体现。我们在探索对企业规范化管理问题时,一再强调要寻求一个科学的方法,其最根本的一点就是如何解决管理的效率和效益问题。 - -**规范企业组织架构设计的科学方法是什么?**在回答这一问题之前,首先必须明白企业组织本身是什么这一问题。 - -前面已作过分析,企业组织是一个有机系统,是存在于一个更大系统之中的有机系统,其内部又可以细分为很多子系统。而企业组织作为一个由人构成的社会组织,本身是具有目的性的,也就是说它的存在是服务于人的特定目的的,它是人为达到特定目的而创建的。企业组织与自然存在物不一样,它是由人创造的,它必须服务于创造它的人的意志和目的。从这个意义上讲,可以说它是人们为达到一种特定目的而由人自己创造的一个工具。 - -企业作为由人创建的一个工具性的社会组织,其目的和目标是显然的,其内部架构必须服务于这特定的目的和目标,也是显而易见的。它的这种目的性和功能性特征,为我们寻找到对它进行规范的科学方法提供了线索。这方法就是与它的目标功能特性直接对应的目标功能树系统分析模型。 - -所谓目标功能树系统分析模型,也就是通过对分析对象本身所存在的目标功能结构进行系统分析,以分析确定分析对象的内在结构和发展运行的规律。 - -由人所创造的存在物有一个共同的特点,这就是它们具有目标和功能这样一种多层次的结构。山水草木本身的存在没有任何目的性,在它的内部也就无法对它区别出目标和功能这样的层次结构来。草木本身没有意志,当它被人选做达成某一特定目的的特殊工具时,也就是人赋予了它特定的目的性。能够实现这一目的的作用也就成了它的功能。当这种自然存在物被选为人的特定工具的时候,它也就不再是完整意义上的自然存在物,而是被注入了人的意志目标的手段和工具。在这里的目标,实际上是人的目标,其功能是它相对于这种目标的作用和性质。 - -而目标和功能并不是截然对立的,而是相互依存的。相对于功能作用,目标才成其为目标。功能作用只有相对于一定目标,它才成其为功能。呼吸是肺的功能作用,但它只有相对于需要呼吸的动物才有这种功能作用。需要就是一种特定的目的或目标。并且目标和功能本身的定义也是相对的,在一个复杂的系统结构中,目标和功能是在多重层次上存在的。为实现一定的目标,必须有相应的功能;为保证一定功能的正常发挥,又必须有一系列细小的功能。上一层次的功能相对于下一层次的功能,也就成了目标。 - -通过这种目标功能树分析,可很方便有效地理清系统内部的层次结构。就企业组织这一特定系统而言,通过运用目标功能树系统分析模型对它进行分析,就可准确地为企业组织架构的设计提供一个框架性工具。这种分析,不仅有助于我们确定企业不同时段上要达成的目标,而且有助于我们一层一层地选择确定为达成企业目标而必须采取的具体措施办法。 - -就企业系统进行分析,**企业的目标就是要赚钱。企业通过什么途径赚钱?如何才能赚钱?稍加分析就会发现企业系统,是由信息(信息流)、组织(人流)、营销(物流)、财务(资金流)四大系统构成的。**这是就第一个层次的目标功能作用进行的分析。如果要进一步地细分,进入第三和第四个层次的目标功能作用关系的分析,就可得到61个小的子系统。下面就企业的“四流”形成的系统分别进行分析,以明确其内部结构,及其各个层次上的子系统的目标功能作用。 - -## 设计规范化实施 - -前面已经分析了组织架构的标准以及要规范组织架构必须运用的方法——目标功能树系统分析模型。但究竟如何实施组织架构的规范化,在此略做分析。 - -第一步,选择确定组织架构的基础模式。这一步工作要求根据自己企业的实际,选择确定一个典型的组织模式,作为企业的组织架构的基础模式。在当代企业的实践中,选择直线职能式和矩阵式结构的较普遍,并有越来越多的企业选择增加弹性模式的相应特征予以补充其基本模式的局限。 - -第二步,分析确定担负各子系统目标功能作用的工作量。这一步工作要求根据目标功能树系统分析模型,分析确定自己企业内部各个子系统目标功能作用的担负工作量。要考虑的变量有二:一是企业的规模;二是企业的行业性质。 - -第三步,确定职能部门。这一步工作要求根据自己企业内部各个子系统的工作量大小和不同子系统之间的关系,来确定企业职能管理部门。即把关联关系和独立关系,并且工作量不大的子系统的目标功能作用合并起来,由一个职能管理部门作为主承担单位,负责所合并子系统的目标功能作用工作的协调和汇总。把制衡关系的子系统的目标功能作用分别交由不同单位、部门或岗位角色承担。 - -第四步,平衡工作量。这一步工作要求对所拟定的各个单位、部门的工作量进行大体的平衡。因为工作量过大的单位、部门往往会造成管理跨度过大,工作量过小的单位、部门,往往会造成管理跨度过小。所以,需要通过单位、部门之间的工作量平衡来使管理跨度实现合理化。在这里,要注意的一点是:存在制衡关系的子系统,要避免将其目标功能作用划归为同一单位承担,即要优先保证制衡关系子系统的目标功能作用的分开承担。 - -第五步,确立下级对口单位、部门或岗位的设置。如果企业下属的子公司、独立公司、分公司规模仍然比较大,上级职能管理部门无法完全承担其相应子系统目标功能作用的工作协调和汇总,就有必要在这个层次上设置对口的职能部门或者专员岗位。 - -第六步,绘制组织架构图。这一步工作要求直观地构画出整个企业的单位、部门和岗位之间的关系,及所承担的子系统目标功能作用的相应工作。 - -第七步,拟定企业系统分析文件。这一步工作也就是为企业组织架构确立规范。企业系统分析文件是具体描绘企业内部各个子系统的目标功能作用,该由哪些单位、部门或者岗位来具体承担,以及所承担的内容,并对职责和权力进行界定。 - -第八步,根据企业系统分析文件撰写组织说明书。这一步工作就是在组织构图的基础上,分析界定各个单位、部门组织和岗位的具体工作职责、所享有的权力、信息传递路线、资源流转路线等。 - -第九步,拟定单位、部门和岗位工作标准。明确界定各个单位、部门和岗位的工作职责、工作目标、工作要求。 - -第十步,根据企业系统分析文件、组织说明书及单位、部门和岗位工作标准进行工作分析,并撰写工作说明书。除了界定前述内容外,还要明确界定任职的条件和资格。 - -第十一步,就上述文件进行汇总讨论,通过后正式颁布,组织架构调整改造工作完成。 - -## 设计中的常见误区 - -1. 在工作设计和组织结构中,是以工作为中心,还是以人为中心?是人们常争论却没有意义的一个问题。实际情况是结构和作业设计必须以工作为中心,但工作任务则必须既要适合于人,又要适合于情况的需要。 -2. 是科层式组织,还是自由式组织?一种组织结构对工作、权力和相互关系规定得越明确,则对个人的自我服从和自我约束的要求就越少;一种组织越是富于弹性,其成员必须越是坚强,他们必须承担的工作量也就越重。在任何一种组织结构中,无论是各个成员还是整个组织都需要有等级层次。必须有人做出决定,否则组织就会陷入无休止的自由讨论。所以,合理的组织结构既需要有关权威和决策的金字塔式的科层结构,也需要可以把小组、团队和个人长期和临时组织起来的能力。 -3. **我们必须抛弃的最后一种观点是:“必须存在着一种最终答案。”**凡是能够使人取得杰出绩效和做出贡献的结构,就是正确答案。 diff --git a/group/company/入门/组织结构/设计.md b/group/company/入门/组织结构/设计.md deleted file mode 100644 index 75492379..00000000 --- a/group/company/入门/组织结构/设计.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: 设计 -description: 组织结构设计的六要素 -keywords: -- 组织结构 -- 设计 -tags: -- 组织结构 -sidebar_position: 2 -author: 7Wate -date: 2023-01-16 ---- - -## 组织结构设计的六要素 - -管理者在进行组织结构设计时,必须考虑6个关键因素:**工作专门化、部门化、命令链、控制跨度、集权与分权、正规化。** - -### 工作专门化 - -20世纪初,亨利·福特(Henry Ford)通过建立汽车生产线而富甲天下,享誉全球。他的做法是,给公司每一位员工分配特定的、重复性的工作,例如,有的员工只负责装配汽车的右前轮,有的则只负责安装右前门。通过把工作分化成较小的、标准化的任务,使工人能够反复地进行同一种操作,福特利用技能相对有限的员工,每10秒钟就能生产出一辆汽车。 - -福特的经验表明,让员工从事专门化的工作,他们的生产效率会提高。今天,我们用工作专门化(work specialization)这个术语或劳动分工这类词汇来描述组织中把工作任务划分成若干步骤来完成的细化程度。 - -工作专门化的实质是:**一个人不是完成一项工作的全部,分解成若干步骤,每一步骤由一个人独立去做。就其实质来讲,只负责整个工作活动的一部分,而不是全部活动。** - -20世纪40年代后期,工业化国家大多数生产领域的工作都是通过工作专门化来完成的。管理人员认为,这是一种最有效地利用员工技能的方式。在大多数组织中,有些工作需要技能很高的员工来完成,有些则不经过训练就可以做好。如果所有的员工都参与组织制造过程的每一个步骤,那么,就要求所有的人不仅具备完成最复杂的任务所需要的技能,而且具备完成最简单的任务所需要的技能。结果,除了从事需要较高的技能或较复杂的任务以外,员工有部分时间花费在完成低技能的工作上。由于高技能员工的报酬比低技能的员工高,而工资一般是反映一个人最高的技能水平的,因此,付给高技能员工高薪,却让他们做简单的工作,这无疑是对组织资源的浪费。 - -通过实行工作专门化,管理层还寻求提高组织在其他方面的运行效率。通过重复性的工作,员工的技能会有所提高,在改变工作任务或在工作过程中安装、拆卸工具及设备所用的时间会减少。同样重要的是,从组织角度来看,实行工作专门化,有利于提高组织的培训效率。挑选并训练从事具体的、重复性工作的员工比较容易,成本也较低。对于高度精细和复杂的操作工作尤其是这样。例如,如果让一个员工去生产一整架飞机,波音公司一年能造出一架大型波音客机吗?最后,通过鼓励专门领域中进行发明创造,改进机器,工作专门化有助于提高效率和生产率。 - -20世纪50年代以前,管理人员把工作专门化看作是提高生产率的不竭之源,或许他们是正确的,因为那时工作专门化的应用尚不够广泛,只要引入它,几乎总是能提高生产率。但到了60年代以后,越来越多的证据表明,好事做过了头就成了坏事。在某些工作领域,达到了这样一个顶点:由于工作专门化,人的非经济性因素的影响(表现为厌烦情绪、疲劳感、压力感、低生产率、低质量、缺勤率上升、流动率上升等)超过了其经济性影响的优势. - -现在,大多数管理人员并不认为工作专门化已经过时,也不认为它还是提高生产率的不竭之源。他们认识到了在某些类型的工作中工作专门化所起到的作用,以及使用过头可能带来的问题。例如,在麦当劳快餐店,管理人员们运用工作专门化来提高生产和售卖汉堡包、炸鸡的效率。大多数卫生保健组织中的医学专家也使用工作专门化。但是,像奥帝康公司和土星公司则通过丰富员工的工作内容,降低工作专门化程度而获得了成功。 - -### 部门化 - -一旦通过**工作专门化完成任务细分之后,就需要按照类别对它们进行分组以便使共同的工作可以进行协调**。工作分类的基础是部门化(departmenta—lization)。 - -对工作活动进行分类主要是根据活动的职能。制造业的经理通过把工程、会计、制造、人事、采购等方面的专家划分成共同的部门来组织其工厂。当然,根据职能进行部门的划分适用于所有的组织。只有职能的变化可以反映组织的目标和活动。一个医院的主要职能部门可能有研究部、护理部、财会部等;而一个职业足球队则可能设球员人事部、售票部门、旅行及后勤部门等。这种职能分组法的主要优点在于,把同类专家集中在一起,能够提高工作效率。职能部门化通过把专业技术、研究方向接近的人分配到同一个部门中,来实现规模经济。 - -工作任务也可以根据组织生产的产品类型进行产品部门化,例如,在太阳石油产品公司(Sun Petroleum Products)中,其三大主要领域(原油、润滑油和蜡制品、化工产品)分别置于一位副总裁统辖之下,这位副总裁是本领域的专家,对与他的生产线有关的一切问题负责,每一位副总裁都有自己的生产和营销部门。这种分组方法的主要优点在于:提高产品绩效的稳定性,因为公司中与某一特定产品有关的所有活动都由同一主管指挥。如果一个组织的活动是与服务而不是产品有关,每一种服务活动就可以自然地进行分工。比如,一个财会服务公司多半会设有税务部门、管理咨询部门、审计部等等,每个部门都会在一个产品或服务经理的指导下,提供一系列服务项目。 - -还有一种部门化方法,即根据地域来进行地区部门化。例如,就营销工作来说,根据地域,可分为东、西、南、北4个区域,分片负责。实际上,每个地域是围绕这个地区而形成的一个部门。如果一个公司的顾客分布地域较宽,这种部门化方法就有其独特的价值。 - -位于纽约州北部的雷诺兹金属公司(Reynolds Metals)铝试管厂,生产过程由5个部门组成:铸造部、锻压部、制管部、成品部、检验包装运输部。这是一个根据生产过程来进行部门化的例子。公司这样做的主要原因在于,在铝 试管生产过程中, 由每个部门负责一个特定生产环节的工作。金属首先被铸造成巨大的胚料;然后送到锻压部,被挤压成铝管;再把铝管转送到试管部,由试管部负责把它们做成体积各异、形状不同的试管;然后把这些试管送给成品部,由它负责切割、清洗工作;最后,产品进入检验、包装、运输部。由于不同的环节需要不同的技术,因此这种部门化方法对于在生产过程中进行同类活动的归并提供了基础。 - -过程部门化方法适用于产品的生产,也适用于顾客的服务。例如,如果你到一家州属机动车辆管理办公室去办驾驶执照,你必须跑好几个部门。在某个州,办理驾照必须经过3个步骤,每个步骤由一个独立部门负责:(1)负责核查工作的机动车辆分部;(2)负责办理驾照具体工作的驾照部;(3)负责收费的财务部。 - -最后一种部门化方法是根据顾客的类型来进行顾客部门化。例如,一家销售办公设备的公司可下设3个部门:零售服务部、批发服务部、政府部门服务部比较大的法律事务所可根据其服务对象是公司还是个人来分设部门。 - -根据顾客;类型来划分部门的理论假设是,每个部门的顾客存在共同的问题和要求,因此;通过为他们分别配置有关专家,能够满足他们的需要。 - -大型组织进行部门化时,可能综合利用上述各种方法,以取得较好的效果。例如,一家大型的日本电子公司在进行部门化时,根据职能类型来组织其各分部;根据生产过程来组织其制造部门;把销售部门分为7个地区的工作单位;又在每个地区根据其顾客类型分为4个顾客小组。但是,90年代有两个倾向较为普遍:第一,以顾客为基础进行部门化越来越受到青睐。为了更好地掌握顾客的需要,并有效地对顾客需要的变化作出反应,许多组织更多地强调以顾客为基础划分部门的方法。例如,施乐公司已取消了公司市场部的设置,把市场研究的专家排除在这个领域之外。这样使得公司能更好地了解谁是它的顾客,并更快地满足他们的需要。第二个倾向是,坚固的职能性部门被跨越传统部门界限的工作团队所替代。 - -### 命令链 - -20年前,命令链的概念是组织设计的基石,但今天它的重要性大大降低不过在决定如何更好地设计组织结构时,管理者仍需考虑命令链的意义。 - -**命令链(chain of command)是一种不间断的权力路线,从组织最高层扩展到最基层,澄清谁向谁报告工作。它能够回答员工提出的这种问题:“我有问题时,去找谁?”“我对谁负责?”** - -在讨论命令链之前,应先讨论两个辅助性概念:权威和命令统一性。权威(authority)是指管理职位所固有的发布命令并期望命令被执行的权力。为了促进协作,每个管理职位在命令链中都有自己的位置,每位管理者为完成自己的职责任务,都要被授予一定的权威。命令统一性(unity of command)原则有助于保持权威链条的连续性。它意味着,一个人应该对一个主管,且只对一个主管直接负责。如果命令链的统一性遭到破坏,一个下属可能就不得不穷于应付多个主管不同命令之间的冲突或优先次序的选择。 - -时代在变化,组织设计的基本原则也在变化。随着电脑技术的发展和给下属充分授权的潮流的冲击,现在,命令链、权威、命令统一性等概念的重要性大大降低了。《商业周刊》〈Business Week〉最近的一篇文章中有两段话为这种变化提供了很好的例证: - -3月中旬一个星期三的上午, 查尔斯·凯瑟困惑地扫视了一眼从公司配送中心送来的存货报告。根据电脑打印出来的报告, 玫瑰牌上光油只能保证3天的供货了, 远远低于公司要求的3周半的库存要求。但凯瑟知道, 公司设在密苏里州杰弗逊城的工厂两天前刚运来346箱(每箱12瓶)上光油, 玫瑰牌上光油一定是被抢购一空了。他便打开自己与生产线相联的计算机, 把批示输进去:在周四上午再生产400箱上光油。 - -这是一位计划经理工作日程中的一段小插曲, 对不对?但事实上凯瑟不是管理人员,他只是生产线上的一名工人, 官方的头衔是“生产线协调员”, 是公司上百名工作于电脑网络上的工人中的一员。他们有权检查核对货物运送情况, 安排自己的工作负荷, 并经常从事以前属于管理人员领域的工作。 - -现在一个基层雇员能在几秒钟内得到20年前只有高层管理人员才能得到的信息。同样,随着计算机技术的发展, 日益使组织中任何位置的员工都能同任何人进行交流,而不需通过正式渠道。而且,权威的概念和命令链的维持越来越无关紧要,因为过去只能由管理层作出的决策现在已授权给操作员工自己作决策。除此之外,随着自我管理团队、多功能团队和包含多个上司的新型组织设计思想的盛行,命令统一性的概念越来越无关紧要了。当然,许多组织仍然认为通过强化命令链可以使组织的生产率最高,但今天这种组织越来越少了。 - -### 控制跨度 - -一个主管可以有效地指导多少个下属?这种有关控制跨度(span of control)的问题非常重要,因为在很大程度上,它决定着组织要设置多少层次,配备多少管理人员。**在其他条件相同时,控制跨度越宽,组织效率越高**,这一点可以举例证明。 - -假设有两个组织,基层操作员工都是4096名,如果一个控制跨度为4,另一个为8,那么控制跨度宽的组织比控制跨度窄的组织在管理层次上少两层,可以少配备800人左右的管理人员。如果每名管理人员年均薪水为40 000美元,则控制跨度宽的组织每年在管理人员薪水上就可节省3 200万美元。显然,在成本方面,控制跨度宽的组织效率更高。但是,在某些方面宽跨度可能会降低组织的有效性,也就是说,如果控制跨度过宽,由于主管人员没有足够的时间为下属提供必要的领导和支持,员工的绩效会受到不良影响。 - -控制跨度窄也有其好处,把控制跨度保持在5人一6人, 管理者就可以对员工实行严密的控制。但控制跨度窄主要有3个缺点:第一,正如前面S指出的,管理层次会因此而增多,管理成本会大大增加。第二,使组织的垂直沟通更加复杂。管理层次增多也会减慢决策速度,并使高层管理人员趋于孤立。第三,控制跨度过窄易造成对下属监督过严,妨碍下属的自主性。 - -近几年的趋势是加宽控制跨度。例如,在通用电气公司和雷诺金属公司这样的大公司中,控制跨度已达10人一12人,是15年前的2倍。汤姆·斯密斯是卡伯利恩公司(Carboline Co.)的一名地区经理,直接管辖27人,如果是在20年前,处于他这种职位的人,通常只有12名下属。 - -加宽控制跨度,与各个公司努力降低成本、削减企业一般管理费用、加速决策过程、增加灵活性、缩短与顾客的距离、授权给下属等的趋势是一致的。但是,为了避免因控制跨度加宽而使员工绩效降低,各公司都大大加强了员工培训的力度和投入。管理人员已认识到, 自己的下属充分了解了工作之后,或者有问题能够从同事那儿得到帮助时,他们就可以驾驭宽跨度的控制问题。 - -### 集权与分权 - -在有些组织中,高层管理者制定所有的决策,低层管理人员只管执行高层管理者的指示。另一种极端情况是,组织把决策权下放到最基层管理人员手中。前者是高度集权式的组织,而后者则是高度分权式的。 - -**集权化(centralization)是指组织中的决策权集中于一点的程度。**这个概念只包括正式权威,也就是说,某个位置固有的权力。一般来讲,如果组织的高层管理者不考虑或很少考虑基层人员的意见就决定组织的主要事宜,则这个组织的集权化程度较高。相反,基层人员参与程度越高,或他们能够自主地作出决策,组织的分权化(decentralization)程度就越高。 - -**集权式与分权式组织在本质上是不同的**。在分权式组织中,采取行动、解决问题的速度较快,更多的人为决策提供建议,所以,员工与那些能够影响他们的工作生活的决策者隔膜较少,或几乎没有。 - -近年来,分权式决策的趋势比较突出,这与使组织更加灵活和主动地作出反应的管理思想是一致的。在大公司中,基层管理人员更贴近生产实际,对有关问题的了解比高层管理者更详实。因此,像西尔斯和盘尼(J.C.Penny)这样的大型零售公司,在库存货物的选择上,就对他们的商店管理人员授予了较大的决策权。这使得他们的商店可以更有效地与当地商店展开竞争。与之相似,蒙特利尔银行把它在加拿大的1 164家分行组合成236个社区,即在一个有限地域内的一组分行,每个社区设一名经理,他在自己所辖各行之间可以自由巡视,各个分行之间最长距离不过20分钟的路程。他对自己辖区内的问题反应远远快于公司总部的高级主管,处理方式也会更得当。IBM的欧洲总监瑞纳托·瑞沃索采取类似的办法把欧洲大陆的公司分成200个独立自主的商业单位,每个单位都有自己的利润目标、员工激励方式、重点顾客。“以前我们习惯于自上而下的管理,像在军队中一样。”瑞沃索说,“现在,我们尽力使员工学会自我管理。 - -### 正规化 - -正规化(formalization)是指组织中的工作实行标准化的程度。如果一种工作的正规化程度较高,就意味着做这项工作的人对工作内容、工作时间、工作手段没有多大自主权。人们总是期望员工以同样的方式投入工作,能够保证稳定一致的产出结果。在高度正规化的组织中,有明确的工作说明书,有繁杂的组织规章制度,对于工作过程有详尽的规定。而正规化程度较低的工作,相对来说,工作执行者和日程安排就不是那么僵硬,员工对自己工作的处理权限就比较宽。由于个人权限与组织对员工行为的规定成反比,因此**工作标准化程度越高,员工决定自己工作方式的权力就越小。**工作标准化不仅减少了员工选择工作行为的可能性,而且使员工无需考虑其他行为选择。 - -组织之间或组织内部不同工作之间正规化程度差别很大。一种极端情况是,众所周知,某些工作正规化程度很低,如大学书商(向大学教授推销公司新书的出版商代理人)工作自由权限就比较大,他们的推销用语不要求标准划一。在行为约束上,不过就是每周交一次推销报告,并对新书出版提出建议。另一种极端情况是那些处于同一出版公司的职员与编辑位置的人。他们上午8点要准时上班,否则会被扣掉半小时工资,而且,他们必须遵守管理人员制定的一系列详尽的规章制度。 - -## 企业组织结构的形式 - -### 直线制 [Linear Structure] - -直线制是一种最早也是最简单的组织形式。它的特点是企业各级行政单位从上到下实行垂直领导,下属部门只接受一个上级的指令,各级主管负责人对所属单位的一切问题负责。厂部不另设职能机构(可设职能人员协助主管人工作),一切管理职能基本上都由行政主管自己执行。直线制组织结构的优点是:结构比较简单,责任分明,命令统一。缺点是:它要求行政负责人通晓多种知识和技能,亲自处理各种业务。这在业务比较复杂、企业规模比较大的情况下,把所有管理职能都集中到最高主管一人身上,显然是难以胜任的。因此,直线制只适用于规模较小,生产技术比较简单的企业,对生产技术和经营管理比较复杂的企业并不适宜。 - -### 职能制 [Functional Structure] - -职能制组织结构,是各级行政单位除主管负责人外,还相应地设立一些职能机构。如在厂长下面设立职能机构和人员,协助厂长从事职能管理工作。这种结构要求行政主管把相应的管理职责和权力交给相关的职能机构,各职能机构就有权在自己业务范围内向下级行政单位发号施令。因此,下级行政负责人除了接受上级行政主管人指挥外,还必须接受上级各职能机构的领导。 - -职能制的优点是能适应现代化工业企业生产技术比较复杂,管理工作比较精细的特点;能充分发挥职能机构的专业管理作用,减轻直线领导人员的工作负担.但缺点也很明显:它妨碍了必要的集中领导和统一指挥,形成了多头领导;不利于建立和健全各级行政负责人和职能科室的责任制,在中间管理层往往会出现有功大家抢,有过大家推的现象;另外,在上级行政领导和职能机构的指导和命令发生矛盾时,下级就无所适从,影响工作的正常进行,容易造成纪律松弛,生产管理秩序混乱。由于这种组织结构形式的明显的缺陷,现代企业一般都不采用职能制。 - -### 直线-职能制 - -直线-职能制,也叫生产区域制,或直线参谋制。它是在直线制和职能制的基础上,取长补短,吸取这两种形式的优点而建立起来的。目前,我们绝大多数企业都采用这种组织结构形式。这种组织结构形式是把企业管理机构和人员分为两类,一类是直线领导机构和人员,按命令统一原则对各级组织行使指挥权;另一类是职能机构和人员,按专业化原则,从事组织的各项职能管理工作。直线领导机构和人员在自己的职责范围内有一定的决定权和对所属下级的指挥权,并对自己部门的工作负全部责任。而职能机构和人员,则是直线指挥人员的参谋,不能对直接部门发号施令,只能进行业务指导。 - -直线-职能制的优点是:既保证了企业管理体系的集中统一,又可以在各级行政负责人的领导下,充分发挥各专业管理机构的作用。其缺点是:职能部门之间的协作和配合性较差,职能部门的许多工作要直接向上层领导报告请示才能处理,这一方面加重了上层领导的工作负担;另一方面也造成办事效率低。为了克服这些缺点,可以设立各种综合委员会,或建立各种会议制度,以协调各方面的工作,起到沟通作用,帮助高层领导出谋划策。 - -### 事业部制 [Divisional Structure] - -这是一种介于直线职能制和事业部制之间的结构形式。 - -许多大型企业,如连续生产的钢铁、化工企业由于产品品种或生产工艺过程所限,难以分解成几个独立的事业部。又由于企业的规模庞大,以致高层管理者感到采用其他组织形态都不容易管理,这时就出现了模拟分权组织结构形式。所谓模拟,就是要模拟事业部制的独立经营,单独核算,而不是真正的事业部,实际上是一个个“生产单位”。这些生产单位有自己的职能机构,享有尽可能大的自主权,负有“模拟性”的盈亏责任,目的是要调动他们的生产经营积极性,达到改善企业生产经营管理的目的。需要指出的是,各生产单位由于生产上的连续性,很难将它们截然分开,就以连续生产的石油化工为例,甲单位生产出来的"产品"直接就成为乙生产单位的原料,这当中无需停顿和中转。因此,它们之间的经济核算,只能依据企业内部的价格,而不是市场价格,也就是说这些生产单位没有自己独立的外部市场,这也是与事业部的差别所在。 - -模拟分权制的优点除了调动各生产单位的积极性外,就是解决企业规模过大不易管理的问题。高层管理人员将部分权力分给生产单位,减少了自己的行政事务,从而把精力集中到战略问题上来。其缺点是,不易为模拟的生产单位明确任务,造成考核上的困难;各生产单位领导人不易了解企业的全貌,在信息沟通和决策权力方面也存在着明显的缺陷。 - -### 矩阵制 [Matrix Structure] - -在组织结构上,把既有按职能划分的垂直领导系统,又有按产品(项目)划分的横向领导关系的结构,称为矩阵组织结构。 - -矩阵制组织是为了改进直线职能制横向联系差,缺乏弹性的缺点而形成的一种组织形式。它的特点表现在围绕某项专门任务成立跨职能部门的专门机构上,例如组成一个专门的产品(项目)小组去从事新产品开发工作,在研究、设计、试验、制造各个不同阶段,由有关部门派人参加,力图做到条块结合,以协调有关部门的活动,保证任务的完成。这种组织结构形式是固定的,人员却是变动的,需要谁,谁就来,任务完成后就可以离开。项目小组和负责人也是临时组织和委任的。任务完成后就解散,有关人员回原单位工作。因此,这种组织结构非常适用于横向协作和攻关项目。 - -矩阵结构的优点是:机动、灵活,可随项目的开发与结束进行组织或解散;由于这种结构是根据项目组织的,任务清楚,目的明确,各方面有专长的人都是有备而来。因此在新的工作小组里,能沟通、融合,能把自己的工作同整体工作联系在一起,为攻克难关,解决问题而献计献策,由于从各方面抽调来的人员有信任感、荣誉感,使他们增加了责任感,激发了工作热情,促进了项目的实现;它还加强了不同部门之间的配合和信息交流,克服了直线职能结构中各部门互相脱节的现象。 - -矩阵结构的缺点是:项目负责人的责任大于权力,因为参加项目的人员都来自不同部门,隶属关系仍在原单位,只是为"会战"而来,所以项目负责人对他们管理困难,没有足够的激励手段与惩治手段,这种人员上的双重管理是矩阵结构的先天缺陷;由于项目组成人员来自各个职能部门,当任务完成以后,仍要回原单位,因而容易产生临时观念,对工作有一定影响。 - -矩阵结构适用于一些重大攻关项目。企业可用来完成涉及面广的、临时性的、复杂的重大工程项目或管理改革任务。特别适用于以开发与实验为主的单位,例如科学研究,尤其是应用性研究单位等。 - -## 企业组织结构设计的影响因素 - -### 运用AHP和权变理论分析的理论依据 - -首先,从权变的观点来看,**不存在一个普遍适用的、理想的组织结构。恰当而有效的组织结构决定于一定时期内企业所处的具体环境和多种影响因素,而环境和因素是变化的,即使同一个企业在不同时期的组织结构也不同。**各企业应根据自己的特点和条件,以往和将来国内外企业业务的相对比重,企业的历史背景、业务性质以及经营战略和所处的环境来决定采用何种组织形式。因此,组织结构的设计与管理实际上是一个动态过程,实践表明,组织结构的大变动虽不一定,但是小变动却是经常的,企业组织结构的变化同样遵循“尝试错误”的规律,它必须与偶然事件相联系,而不是纯粹的合理产物。组织权变管理的任务即是要在弄清组织所在环境及变化的基础上,调整企业组织结构,建立有效的组织结构,促进企业快速发展。 - -其次, 应用AHP进行数据处理。层次分析法(AHP)是美国匹兹堡大学教授、著名运筹学家T.LSatty于20世纪70年代中期提出的一种定性与定量相结合的分析方法。它能将难以定量的总目标进一步分解,利用可精确化、定量化的子目标系统解决问题,并且能有效地测度子目标定量判断的一致性。一般情况下,影响组织结构的因素是多方面的,如仅仅依靠评价者的定性分析和逻辑判断,缺乏定量分析依据来评价各影响因素的重要性,显然十分困难,因此,为了不遗漏任何一项影响因素,提高组织结构设计的有效性,应当发挥AHP的优选作用,引入定量分析。利用层次分析法建立模型,采用两两比较判断的输入方式,将组织结构各影响因素排出优劣次序,作为组织结构设计的依据。 - -### 根据权变理论确定影响组织结构设计的因素 - -由权变理论可知,企业所处的环境是复杂多变的,复杂的企业环境意味着多种影响组织结构的因素并存,企业在进行组织机构设计时可根据权变理论确定影响组织结构设计的因素。一般来说,影响组织结构设计的因素可归纳为两方面:外部环境,包括技术、具体制度等。组织的任何活动都需要利用一定的技术和反映一定技术水平的特殊手段来进行,技术以及技术设备的水平,不仅影响组织活动的效果和效率,而且会对组织的职务和设置与部门划分、组织问的关系,以及组织结构的形式和总体特征等产生相当程度的影响。另外,社会上不断出现的新体制、新政策、新制度、新组织以及新的管理原理和方法,也必然要影响到个人、组织以及地区性环境的变化。 - -内部环境,包括组织战略、组织规模、组织文化、成员状况等方面。由于组织战略决定了企业的任务,从而从根本上影响到组织结构的设计与调整。企业的主要任务是取得产量规模经济效益,因此,组织结构将以保证企业生产率和效率的提高为首要目标。组织的规模往往与组织的成长或发展阶段相关联,伴随着组织的发展,组织活动的内容会日益复杂,人数会逐渐增多,活动的规模和范围会越来越大,这样,组织的结构也必须随之调整,才能适应成长后的组织的新情况。组织文化是一种内化控制,组织成员将组织的目标当作个人目标,将组织利益看作是个人的利益,把组织目标实现看作是个人目标的实现,员工的态度、经验、地位、教育程度、文化水平、对工作的兴趣等都会对企业组织结构的模式产生影响。 - -### 运用AHP分析影响组织结构设计的因素 - -运用AHP将影响企业组织结构设计与调整的因素当作由多种因素作用的大系统,按照~定的隶属关系将这些相互制约、相互关联的因素排成从高到低的若干层次,即构造阶递层次结构,然后由专家、学者、权威人士对各因素两两比较重要性,再利用数学方法,对各因素层层排序,从中选出有较大影响的因素进行两两比较,从而得出其重要程度的排序并对此进行分析。 - -建立层次结构模型。AHP通过建立组织结构影响因素的层次结构模型{见图1),根据备选组织结构形式对目标层影响程度的大小来选择最适合的组织结构形式。 - -![组织结构图1](https://static.7wate.com/img/2023/01/16/fd9179ed9e07a.jpg) - -构造判断矩阵。判断矩阵表示层次结构模型中,针对上一层次某因素来说,本层次有关因素相对重要性的比较。假定A层中元素*A**k*与下层*B*1,*B*2,...B_n有联系构造的判断矩阵形式如下: - -![组织结构1](https://static.7wate.com/img/2023/01/16/d5c0cbdf3404d.jpg) - -搜集相关资料,通过征集专家意见,运用实验心理学的Bipolar标度(即1—9标度),表示同一层级间两两因素对上一层因素的相对重要程度,从而判断矩阵可表示为: - -![组织结构2](https://static.7wate.com/img/2023/01/16/063c94ee742c9.jpg) - -上式n是B的特征值,W是B的特征向量。这就是提示可以利用求重量比判断矩阵之特征向量的方法来求得物品的实际重量W 如果B是精确比值矩阵,则其特征值λmax=n,即Aw=λmax W。但一般情况下,B是近似估计值,故有λmax≥n,因此可以利用λmax与n的误差来判断B的准确性。 - -最优组织结构形式的选择。判断矩阵构造好之后,就可以计算出矩阵中层次单排序结果,通过一致性检验之后进行层次总排序,并进行整体一致性检验。通过整体一致性检验的层次总排序结果就是各种方案针对目标层的相对影响程度。根据层次总排序结果对各种方案的影响程度,可以得出影响组织结构各因素的排序结果,以选择最优的组织结构设计方案。 - -综上所述,本文利用权变理论和AHP构造了一个实际操作性较强的企业组织结构设计方案选择的评价模型,将有助于企业调整自身的组织结构,根据实际情况,选择适合自己的组织结构,使企业具有较强的适应能力、创新能力、学习能力,以在更为激烈的竞争中处于有利地位。 diff --git a/group/government/home.md b/group/government/home.md deleted file mode 100644 index c50451fe..00000000 --- a/group/government/home.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -slug: / -sidebar_position: 1 -id: home -title: 概述 ---- - - -国家政府 diff --git a/group/government/中国国家标准/_category_.json b/group/government/中国国家标准/_category_.json deleted file mode 100644 index 3a500d0f..00000000 --- a/group/government/中国国家标准/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "中国", - "position": 1, - "link": { - "type": "generated-index", - "title": "中国" - } -} \ No newline at end of file diff --git a/group/government/中国国家标准/标准组织.md b/group/government/中国国家标准/标准组织.md deleted file mode 100644 index 32a35281..00000000 --- a/group/government/中国国家标准/标准组织.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -id: 标准组织 -title: 标准组织 -data: 2022年4月21日 ---- - -## 机构 - -[中国标准化研究院官网](https://www.cnis.ac.cn/) - -[中国标准化杂志社官网](http://www.cspress.com.cn/) - -[国家标准化管理委员会](http://www.sac.gov.cn/) - -[国家认证认可监督管理委员会](http://www.cnca.gov.cn/) - -[中国标准在线服务网](https://www.spc.org.cn/login) - -[国家标准全文公开系统](https://openstd.samr.gov.cn/bzgk/gb/index) - -## 平台 - -[行业标准信息服务平台](https://hbba.sacinfo.org.cn/) - -[全国团体标准信息平台](http://www.ttbz.org.cn/) - -[企业信息标准服务平台](https://www.qybz.org.cn/) diff --git a/group/government/中国国家标准/法律合同.md b/group/government/中国国家标准/法律合同.md deleted file mode 100644 index 1b5f28c3..00000000 --- a/group/government/中国国家标准/法律合同.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -id: 法律合同 -title: 法律合同 -data: 2022年7月11日 ---- - -## 官方 - -[合同示范文本库(市场监督总局)](https://cont.12315.cn/) - -## 三方 - -[法天使合同库](https://www.fatianshi.cn/) - -[中国法律快查手册](https://lawrefbook.github.io/) - [Github 地址](https://github.com/RanKKI/LawRefBook) diff --git a/group/organization/Tencent/腾讯代码安全指南/C,C++安全指南.md b/group/organization/Tencent/腾讯代码安全指南/C,C++安全指南.md deleted file mode 100644 index 917c1410..00000000 --- a/group/organization/Tencent/腾讯代码安全指南/C,C++安全指南.md +++ /dev/null @@ -1,1770 +0,0 @@ ---- -id: C,C++ 安全指南 -title: C,C++ 安全指南 -sidebar_position: 2 -data: 2022年5月30日 ---- -## 1. C/C++使用错误 - -### 1.1 不得直接使用无长度限制的字符拷贝函数 - -不应直接使用legacy的字符串拷贝、输入函数,如strcpy、strcat、sprintf、wcscpy、mbscpy等,这些函数的特征是:可以输出一长串字符串,而不限制长度。如果环境允许,应当使用其_s安全版本替代,或者使用n版本函数(如:snprintf,vsnprintf)。 - -若使用形如sscanf之类的函数时,在处理字符串输入时应当通过%10s这样的方式来严格限制字符串长度,同时确保字符串末尾有\0。如果环境允许,应当使用_s安全版本。 - -但是注意,虽然MSVC 2015时默认引入结尾为0版本的`snprintf`(行为等同于C99定义的`snprintf`)。但更早期的版本中,MSVC的`snprintf`可能是`_snprintf`的宏。而`_snprintf`是不保证\0结尾的(见本节后半部分)。 - -```cpp -(MSVC) -Beginning with the UCRT in Visual Studio 2015 and Windows 10, snprintf is no longer identical to _snprintf. The snprintf function behavior is now C99 standard compliant. - -从Visual Studio 2015和Windows 10中的UCRT开始,snprintf不再与_snprintf相同。snprintf函数行为现在符合C99标准。 - -请参考:https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l?redirectedfrom=MSDN&view=vs-2019 -``` - -因此,在使用n系列拷贝函数时,要确保正确计算缓冲区长度,同时,如果你不确定是否代码在各个编译器下都能确保末尾有0时,建议可以适当增加1字节输入缓冲区,并将其置为\0,以保证输出的字符串结尾一定有\0。 - -```cpp -// Good -char buf[101] = {0}; -snprintf(buf, sizeof(buf) - 1, "foobar ...", ...); -``` - -一些需要注意的函数,例如`strncpy`和`_snprintf`是不安全的。 `strncpy`不应当被视为`strcpy`的n系列函数,它只是恰巧与其他n系列函数名字很像而已。`strncpy`在复制时,如果复制的长度超过n,不会在结尾补\0。 - -同样,MSVC `_snprintf`系列函数在超过或等于n时也不会以0结尾。如果后续使用非0结尾的字符串,可能泄露相邻的内容或者导致程序崩溃。 - -```cpp -// Bad -char a[4] = {0}; -_snprintf(a, 4, "%s", "AAAA"); -foo = strlen(a); -``` - -上述代码在MSVC中执行后, a[4] == 'A',因此字符串未以0结尾。a的内容是"AAAA",调用`strlen(a)`则会越界访问。因此,正确的操作举例如下: - -```cpp -// Good -char a[4] = {0}; -_snprintf(a, sizeof(a), "%s", "AAAA"); -a[sizeof(a) - 1] = '\0'; -foo = strlen(a); -``` - -在 C++ 中,强烈建议用 `string`、`vector` 等更高封装层次的基础组件代替原始指针和动态数组,对提高代码的可读性和安全性都有很大的帮助。 - -关联漏洞: - -`中风险-信息泄露` - -`低风险-拒绝服务` - -`高风险-缓冲区溢出` - -### 1.2 创建进程类的函数的安全规范 - -system、WinExec、CreateProcess、ShellExecute等启动进程类的函数,需要严格检查其参数。 - -启动进程需要加上双引号,错误例子: - -```cpp -// Bad -WinExec("D:\\program files\\my folder\\foobar.exe", SW_SHOW); -``` - -当存在`D:\program files\my.exe`的时候,my.exe会被启动。而foobar.exe不会启动。 - -```cpp -// Good -WinExec("\"D:\\program files\\my folder\\foobar.exe\"", SW_SHOW); -``` - -另外,如果启动时从用户输入、环境变量读取组合命令行时,还需要注意是否可能存在命令注入。 - -```cpp -// Bad -std::string cmdline = "calc "; -cmdline += user_input; -system(cmdline.c_str()); -``` - -比如,当用户输入`1+1 && ls`时,执行的实际上是calc 1+1和ls 两个命令,导致命令注入。 - -需要检查用户输入是否含有非法数据。 - -```cpp -// Good -std::string cmdline = "ls "; -cmdline += user_input; - -if(cmdline.find_first_not_of("1234567890.+-*/e ") == std::string::npos) - system(cmdline.c_str()); -else - warning(...); -``` - -关联漏洞: - -`高风险-代码执行` - -`高风险-权限提升` - -### 1.3 尽量减少使用 _alloca 和可变长度数组 - -_alloca 和[可变长度数组](https://zh.wikipedia.org/wiki/%E5%8F%AF%E5%8F%98%E9%95%BF%E6%95%B0%E7%BB%84)使用的内存量在编译期间不可知。尤其是在循环中使用时,根据编译器的实现不同,可能会导致:(1)栈溢出,即拒绝服务; (2)缺少栈内存测试的编译器实现可能导致申请到非栈内存,并导致内存损坏。这在栈比较小的程序上,例如IoT设备固件上影响尤为大。对于 C++,可变长度数组也属于非标准扩展,在代码规范中禁止使用。 - -错误示例: - -```cpp -// Bad -for (int i = 0; i < 100000; i++) { - char* foo = (char *)_alloca(0x10000); - ..do something with foo ..; -} - -void Foo(int size) { - char msg[size]; // 不可控的栈溢出风险! -} -``` - -正确示例: - -```cpp -// Good -// 改用动态分配的堆内存 -for (int i = 0; i < 100000; i++) { - char * foo = (char *)malloc(0x10000); - ..do something with foo ..; - if (foo_is_no_longer_needed) { - free(foo); - foo = NULL; - } -} - -void Foo(int size) { - std::string msg(size, '\0'); // C++ - char* msg = malloc(size); // C -} -``` - -关联漏洞: - -`低风险-拒绝服务` - -`高风险-内存破坏` - -### 1.4 printf系列参数必须对应 - -所有printf系列函数,如sprintf,snprintf,vprintf等必须对应控制符号和参数。 - -错误示例: - -```cpp -// Bad -const int buf_size = 1000; -char buffer_send_to_remote_client[buf_size] = {0}; - -snprintf(buffer_send_to_remote_client, buf_size, "%d: %p", id, some_string); // %p 应为 %s - -buffer_send_to_remote_client[buf_size - 1] = '\0'; -send_to_remote(buffer_send_to_remote_client); -``` - -正确示例: - -```cpp -// Good -const int buf_size = 1000; -char buffer_send_to_remote_client[buf_size] = {0}; - -snprintf(buffer_send_to_remote_client, buf_size, "%d: %s", id, some_string); - -buffer_send_to_remote_client[buf_size - 1] = '\0'; -send_to_remote(buffer_send_to_remote_client); -``` - -前者可能会让client的攻击者获取部分服务器的原始指针地址,可以用于破坏ASLR保护。 - -关联漏洞: - -`中风险-信息泄露` - -### 1.5 防止泄露指针(包括%p)的值 - -所有printf系列函数,要防止格式化完的字符串泄露程序布局信息。例如,如果将带有%p的字符串泄露给程序,则可能会破坏ASLR的防护效果。使得攻击者更容易攻破程序。 - -%p的值只应当在程序内使用,而不应当输出到外部或被外部以某种方式获取。 - -错误示例: - -```cpp -// Bad -// 如果这是暴露给客户的一个API: -uint64_t GetUniqueObjectId(const Foo* pobject) { - return (uint64_t)pobject; -} -``` - -正确示例: - -```cpp -// Good -uint64_t g_object_id = 0; - -void Foo::Foo() { - this->object_id_ = g_object_id++; -} - -// 如果这是暴露给客户的一个API: -uint64_t GetUniqueObjectId(const Foo* object) { - if (object) - return object->object_id_; - else - error(...); -} -``` - -关联漏洞: - -`中风险-信息泄露` - -### 1.6 不应当把用户可修改的字符串作为printf系列函数的“format”参数 - -如果用户可以控制字符串,则通过 %n %p 等内容,最坏情况下可以直接执行任意恶意代码。 - -在以下情况尤其需要注意: WIFI名,设备名…… - -错误: - -```cpp -snprintf(buf, sizeof(buf), wifi_name); -``` - -正确: - -```cpp -snprinf(buf, sizeof(buf), "%s", wifi_name); -``` - -关联漏洞: - -`高风险-代码执行` - -`高风险-内存破坏` - -`中风险-信息泄露` - -`低风险-拒绝服务` - -### 1.7 对数组delete时需要使用delete[] - -delete []操作符用于删除数组。delete操作符用于删除非数组对象。它们分别调用operator delete[]和operator delete。 - -```cpp -// Bad -Foo* b = new Foo[5]; -delete b; // trigger assert in DEBUG mode -``` - -在new[]返回的指针上调用delete将是取决于编译器的未定义行为。代码中存在对未定义行为的依赖是错误的。 - -```cpp -// Good -Foo* b = new Foo[5]; -delete[] b; -``` - -在 C++ 代码中,使用 `string`、`vector`、智能指针(比如[std::unique_ptr<T[]>](https://zh.cppreference.com/w/cpp/memory/unique_ptr))等可以消除绝大多数 `delete[]` 的使用场景,并且代码更清晰。 - -关联漏洞: - -`高风险-内存破坏` - -`中风险-逻辑漏洞` - -`低风险-内存泄漏` - -`低风险-拒绝服务` - -### 1.8 注意隐式符号转换 - -两个无符号数相减为负数时,结果应当为一个很大的无符号数,但是小于int的无符号数在运算时可能会有预期外的隐式符号转换。 - -```cpp -// 1 -unsigned char a = 1; -unsigned char b = 2; - -if (a - b < 0) // a - b = -1 (signed int) - a = 6; -else - a = 8; - -// 2 -unsigned char a = 1; -unsigned short b = 2; - -if (a - b < 0) // a - b = -1 (signed int) - a = 6; -else - a = 8; -``` - -上述结果均为a=6 - -```cpp -// 3 -unsigned int a = 1; -unsigned short b = 2; - -if (a - b < 0) // a - b = 0xffffffff (unsigned int) - a = 6; -else - a = 8; - -// 4 -unsigned int a = 1; -unsigned int b = 2; - -if (a - b < 0) // a - b = 0xffffffff (unsigned int) - a = 6; -else - a = 8; -``` - -上述结果均为a=8 - -如果预期为8,则错误代码: - -```cpp -// Bad -unsigned short a = 1; -unsigned short b = 2; - -if (a - b < 0) // a - b = -1 (signed int) - a = 6; -else - a = 8; -``` - -正确代码: - -```cpp -// Good -unsigned short a = 1; -unsigned short b = 2; - -if ((unsigned int)a - (unsigned int)b < 0) // a - b = 0xffff (unsigned short) - a = 6; -else - a = 8; -``` - -关联漏洞: - -`中风险-逻辑漏洞` - -### 1.9 注意八进制问题 - -代码对齐时应当使用空格或者编辑器自带的对齐功能,谨慎在数字前使用0来对齐代码,以免不当将某些内容转换为八进制。 - -例如,如果预期为20字节长度的缓冲区,则下列代码存在错误。buf2为020(OCT)长度,实际只有16(DEC)长度,在memcpy后越界: - -```cpp -// Bad -char buf1[1024] = {0}; -char buf2[0020] = {0}; - -memcpy(buf2, somebuf, 19); -``` - -应当在使用8进制时明确注明这是八进制。 - -```cpp -// Good -int access_mask = 0777; // oct, rwxrwxrwx -``` - -关联漏洞: - -`中风险-逻辑漏洞` - -## 2. 不推荐的编程习惯 - -### 2.1 switch中应有default - -switch中应该有default,以处理各种预期外的情况。这可以确保switch接受用户输入,或者后期在其他开发者修改函数后确保switch仍可以覆盖到所有情况,并确保逻辑正常运行。 - -```cpp -// Bad -int Foo(int bar) { - switch (bar & 7) { - case 0: - return Foobar(bar); - break; - case 1: - return Foobar(bar * 2); - break; - } -} -``` - -例如上述代码switch的取值可能从0~7,所以应当有default: - -```cpp -// Good -int Foo(int bar) { - switch (bar & 7) { - case 0: - return Foobar(bar); - break; - case 1: - return Foobar(bar * 2); - break; - default: - return -1; - } -} -``` - -关联漏洞: - -`中风险-逻辑漏洞` - -`中风险-内存泄漏` - -### 2.2 不应当在Debug或错误信息中提供过多内容 - -包含过多信息的Debug消息不应当被用户获取到。Debug信息可能会泄露一些值,例如内存数据、内存地址等内容,这些内容可以帮助攻击者在初步控制程序后,更容易地攻击程序。 - -```cpp -// Bad -int Foo(int* bar) { - if (bar && *bar == 5) { - OutputDebugInfoToUser("Wrong value for bar %p = %d\n", bar, *bar); - } -} -``` - -而应该: - -```cpp -// Good -int foo(int* bar) { - -#ifdef DEBUG - if (bar && *bar == 5) { - OutputDebugInfo("Wrong value for bar.\n"); - } -#endif - -} -``` - -关联漏洞: - -`中风险-信息泄漏` - -### 2.3 不应该在客户端代码中硬编码对称加密秘钥 - -不应该在客户端代码中硬编码对称加密秘钥。例如:不应在客户端代码使用硬编码的 AES/ChaCha20-Poly1305/SM1 密钥,使用固定密钥的程序基本和没有加密一样。 - -如果业务需求是认证加密数据传输,应优先考虑直接用 HTTPS 协议。 - -如果是其它业务需求,可考虑由服务器端生成对称秘钥,客户端通过 HTTPS 等认证加密通信渠道从服务器拉取。 - -或者根据用户特定的会话信息,比如登录认证过程可以根据用户名用户密码业务上下文等信息,使用 HKDF 等算法衍生出对称秘钥。 - -又或者使用 RSA/ECDSA + ECDHE 等进行认证秘钥协商,生成对称秘钥。 - -```cpp -// Bad -char g_aes_key[] = {...}; - -void Foo() { - .... - AES_func(g_aes_key, input_data, output_data); -} -``` - -可以考虑在线为每个用户获取不同的密钥: - -```cpp -// Good -char* g_aes_key; - -void Foo() { - .... - AES_encrypt(g_aes_key, input_data, output_data); -} - -void Init() { - g_aes_key = get_key_from_https(user_id, ...); -} -``` - -关联漏洞: - -`中风险-信息泄露` - -### 2.4 返回栈上变量的地址 - -函数不可以返回栈上的变量的地址,其内容在函数返回后就会失效。 - -```cpp -// Bad -char* Foo(char* sz, int len){ - char a[300] = {0}; - if (len > 100) { - memcpy(a, sz, 100); - } - a[len] = '\0'; - return a; // WRONG -} -``` - -而应当使用堆来传递非简单类型变量。 - -```cpp -// Good -char* Foo(char* sz, int len) { - char* a = new char[300]; - if (len > 100) { - memcpy(a, sz, 100); - } - a[len] = '\0'; - return a; // OK -} -``` - -对于 C++ 程序来说,强烈建议返回 `string`、`vector` 等类型,会让代码更加简单和安全。 - -关联漏洞: - -`高风险-内存破坏` - -### 2.5 有逻辑联系的数组必须仔细检查 - -例如下列程序将字符串转换为week day,但是两个数组并不一样长,导致程序可能会越界读一个int。 - -```cpp -// Bad -int nWeekdays[] = {1, 2, 3, 4, 5, 6}; -const char* sWeekdays[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; -for (int x = 0; x < ARRAY_SIZE(sWeekdays); x++) { - if (strcmp(sWeekdays[x], input) == 0) - return nWeekdays[x]; -} -``` - -应当确保有关联的nWeekdays和sWeekdays数据统一。 - -```cpp -// Good -const int nWeekdays[] = {1, 2, 3, 4, 5, 6, 7}; -const char* sWeekdays[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; -assert(ARRAY_SIZE(nWeekdays) == ARRAY_SIZE(sWeekdays)); -for (int x = 0; x < ARRAY_SIZE(sWeekdays); x++) { - if (strcmp(sWeekdays[x], input) == 0) { - return nWeekdays[x]; - } -} -``` - -关联漏洞: - -`高风险-内存破坏` - -### 2.6 避免函数的声明和实现不同 - -在头文件、源代码、文档中列举的函数声明应当一致,不应当出现定义内容错位的情况。 - -错误: - -foo.h - -```cpp -int CalcArea(int width, int height); -``` - -foo.cc - -```cpp -int CalcArea(int height, int width) { // Different from foo.h - if (height > real_height) { - return 0; - } - return height * width; -} -``` - -正确: -foo.h - -```cpp -int CalcArea(int height, int width); -``` - -foo.cc - -```cpp -int CalcArea (int height, int width) { - if (height > real_height) { - return 0; - } - return height * width; -} -``` - -关联漏洞: - -`中风险-逻辑问题` - -### 2.7 检查复制粘贴的重复代码(相同代码通常代表错误) - -当开发中遇到较长的句子时,如果你选择了复制粘贴语句,请记得检查每一行代码,不要出现上下两句一模一样的情况,这通常代表代码哪里出现了错误: - -```cpp -// Bad -void Foobar(SomeStruct& foobase, SomeStruct& foo1, SomeStruct& foo2) { - foo1.bar = (foo1.bar & 0xffff) | (foobase.base & 0xffff0000); - foo1.bar = (foo1.bar & 0xffff) | (foobase.base & 0xffff0000); -} -``` - -如上例,通常可能是: - -```cpp -// Good -void Foobar(SomeStruct& foobase, SomeStruct& foo1, SomeStruct& foo2) { - foo1.bar = (foo1.bar & 0xffff) | (foobase.base & 0xffff0000); - foo2.bar = (foo2.bar & 0xffff) | (foobase.base & 0xffff0000); -} - -``` - -最好是把重复的代码片段提取成函数,如果函数比较短,可以考虑定义为 `inline` 函数,在减少冗余的同时也能确保不会影响性能。 - -关联漏洞: - -`中风险-逻辑问题` - -### 2.8 左右一致的重复判断/永远为真或假的判断(通常代表错误) - -这通常是由于自动完成或例如Visual Assistant X之类的补全插件导致的问题。 - -```cpp -// Bad -if (foo1.bar == foo1.bar) { - … -} -``` - -可能是: - -```cpp -// Good -if (foo1.bar == foo2.bar) { - … -} -``` - -关联漏洞: - -`中风险-逻辑问题` - -### 2.9 函数每个分支都应有返回值 - -函数的每个分支都应该有返回值,否则如果函数走到无返回值的分支,其结果是未知的。 - -```cpp -// Bad -int Foo(int bar) { - if (bar > 100) { - return 10; - } else if (bar > 10) { - return 1; - } -} -``` - -上述例子当bar<10时,其结果是未知的值。 - -```cpp -// Good -int Foo(int bar) { - if (bar > 100) { - return 10; - } else if (bar > 10) { - return 1; - } - return 0; -} -``` - -开启适当级别的警告(GCC 中为 `-Wreturn-type` 并已包含在 `-Wall` 中)并设置为错误,可以在编译阶段发现这类错误。 - -关联漏洞: - -`中风险-逻辑问题` - -`中风险-信息泄漏` - -### 2.10 不得使用栈上未初始化的变量 - -在栈上声明的变量要注意是否在使用它之前已经初始化了 - -```cpp -// Bad -void Foo() { - int foo; - if (Bar()) { - foo = 1; - } - Foobar(foo); // foo可能没有初始化 -} -``` - -最好在声明的时候就立刻初始化变量,或者确保每个分支都初始化它。开启相应的编译器警告(GCC 中为 `-Wuninitialized`),并把设置为错误级别,可以在编译阶段发现这类错误。 - -```cpp -// Good -void Foo() { - int foo = 0; - if (Bar()) { - foo = 1; - } - Foobar(foo); -} -``` - -关联漏洞: - -`中风险-逻辑问题` - -`中风险-信息泄漏` - -### 2.11 【建议】不得直接使用刚分配的未初始化的内存(如realloc) - -一些刚申请的内存通常是直接从堆上分配的,可能包含有旧数据的,直接使用它们而不初始化,可能会导致安全问题。例如,CVE-2019-13751。应确保初始化变量,或者确保未初始化的值不会泄露给用户。 - -```cpp -// Bad -char* Foo() { - char* a = new char[100]; - a[99] = '\0'; - memcpy(a, "char", 4); - return a; -} -``` - -```cpp -// Good -char* Foo() { - char* a = new char[100]; - memcpy(a, "char", 4); - a[4] = '\0'; - return a; -} -``` - -在 C++ 中,再次强烈推荐用 `string`、`vector` 代替手动内存分配。 - -关联漏洞: - -`中风险-逻辑问题` - -`中风险-信息泄漏` - -### 2.12 校验内存相关函数的返回值 - -与内存分配相关的函数需要检查其返回值是否正确,以防导致程序崩溃或逻辑错误。 - -```cpp -// Bad -void Foo() { - char* bar = mmap(0, 0x800000, .....); - *(bar + 0x400000) = '\x88'; // Wrong -} - -``` - -如上例mmap如果失败,bar的值将是0xffffffff (ffffffff),第二行将会往0x3ffffff写入字符,导致越界写。 - -```cpp -// Good -void Foo() { - char* bar = mmap(0, 0x800000, .....); - if(bar == MAP_FAILED) { - return; - } - - *(bar + 0x400000) = '\x88'; -} -``` - -关联漏洞: - -`中风险-逻辑问题` - -`高风险-越界操作` - -### 2.13 不要在if里面赋值 - -if里赋值通常代表代码存在错误。 - -```cpp -// Bad -void Foo() { - if (bar = 0x99) ... -} -``` - -通常应该是: - -```cpp -// Good -void Foo() { - if (bar == 0x99) ... -} -``` - -建议在构建系统中开启足够的编译器警告(GCC 中为 `-Wparentheses` 并已包含在 `-Wall` 中),并把该警告设置为错误。 - -关联漏洞: - -`中风险-逻辑问题` - -### 2.14【建议】确认if里面的按位操作 - -if里,非bool类型和非bool类型的按位操作可能代表代码存在错误。 - -```cpp -// Bad -void Foo() { - int bar = 0x1; // binary 01 - int foobar = 0x2; // binary 10 - - if (foobar & bar) // result = 00, false - ... -} -``` - -上述代码可能应该是: - -```cpp -// Good -void foo() { - int bar = 0x1; - int foobar = 0x2; - - if (foobar && bar) // result : true - ... -} -``` - -关联漏洞: - -`中风险-逻辑问题` - -## 3. 多线程 - -### 3.1 变量应确保线程安全性 - -当一个变量可能被多个线程使用时,应当使用原子操作或加锁操作。 - -```cpp -// Bad -char g_somechar; -void foo_thread1() { - g_somechar += 3; -} - -void foo_thread2() { - g_somechar += 1; -} -``` - -对于可以使用原子操作的,应当使用一些可以确保内存安全的操作,如: - -```cpp -// Good -volatile char g_somechar; -void foo_thread1() { - __sync_fetch_and_add(&g_somechar, 3); -} - -void foo_thread2() { - __sync_fetch_and_add(&g_somechar, 1); -} -``` - -对于 C 代码,`C11` 后推荐使用 [atomic](https://en.cppreference.com/w/c/atomic) 标准库。 -对于 C++代码,`C++11` 后,推荐使用 [`std::atomic`](https://zh.cppreference.com/w/cpp/atomic/atomic)。 - -关联漏洞: - -`高风险-内存破坏` - -`中风险-逻辑问题` - -### 3.2 注意signal handler导致的条件竞争 - -竞争条件经常出现在信号处理程序中,因为信号处理程序支持异步操作。攻击者能够利用信号处理程序争用条件导致软件状态损坏,从而可能导致拒绝服务甚至代码执行。 - -1. 当信号处理程序中发生不可重入函数或状态敏感操作时,就会出现这些问题。因为信号处理程序中随时可以被调用。比如,当在信号处理程序中调用`free`时,通常会出现另一个信号争用条件,从而导致双重释放。即使给定指针在释放后设置为`NULL`,在释放内存和将指针设置为`NULL`之间仍然存在竞争的可能。 -2. 为多个信号设置了相同的信号处理程序,这尤其有问题——因为这意味着信号处理程序本身可能会重新进入。例如,malloc()和free()是不可重入的,因为它们可能使用全局或静态数据结构来管理内存,并且它们被syslog()等看似无害的函数间接使用;这些函数可能会导致内存损坏和代码执行。 - -```cpp -// Bad -char *log_message; - -void Handler(int signum) { - syslog(LOG_NOTICE, "%s\n", log_m_essage); - free(log_message); - sleep(10); - exit(0); -} - -int main (int argc, char* argv[]) { - log_message = strdup(argv[1]); - signal(SIGHUP, Handler); - signal(SIGTERM, Handler); - sleep(10); -} -``` - -可以借由下列操作规避问题: - -1. 避免在多个处理函数中共享某些变量。 -2. 在信号处理程序中使用同步操作。 -3. 屏蔽不相关的信号,从而提供原子性。 -4. 避免在信号处理函数中调用不满足[异步信号安全](https://www.man7.org/linux/man-pages/man7/signal-safety.7.html)的函数。 - -关联漏洞: - -`高风险-内存破坏` - -`中风险-逻辑问题` - -### 3.3 注意Time-of-check Time-of-use (TOCTOU) 条件竞争 - -TOCTOU: 软件在使用某个资源之前检查该资源的状态,但是该资源的状态可以在检查和使用之间更改,从而使检查结果无效。当资源处于这种意外状态时,这可能会导致软件执行错误操作。 - -当攻击者可以影响检查和使用之间的资源状态时,此问题可能与安全相关。这可能发生在共享资源(如**文件、内存**,甚至多线程程序中的**变量**)上。在编程时需要注意避免出现TOCTOU问题。 - -例如,下面的例子中,该文件可能已经在检查和lstat之间进行了更新,特别是因为printf有延迟。 - -```cpp -struct stat *st; - -lstat("...", st); - -printf("foo"); - -if (st->st_mtimespec == ...) { - printf("Now updating things\n"); - UpdateThings(); -} -``` - -TOCTOU难以修复,但是有以下缓解方案: - -1. 限制对来自多个进程的文件的交叉操作。 -2. 如果必须在多个进程或线程之间共享对资源的访问,那么请尝试限制”检查“(CHECK)和”使用“(USE)资源之间的时间量,使他们相距尽量不要太远。这不会从根本上解决问题,但可能会使攻击更难成功。 -3. 在Use调用之后重新检查资源,以验证是否正确执行了操作。 -4. 确保一些环境锁定机制能够被用来有效保护资源。但要确保锁定是检查之前进行的,而不是在检查之后进行的,以便检查时的资源与使用时的资源相同。 - -关联漏洞: - -`高风险-内存破坏` - -`中风险-逻辑问题` - -## 4. 加密解密 - -### 4.1 不得明文存储用户密码等敏感数据 - -用户密码应该使用 Argon2, scrypt, bcrypt, pbkdf2 等算法做哈希之后再存入存储系统, <https://password-hashing.net/> - -<https://libsodium.gitbook.io/doc/password_hashing/default_phf#example-2-password-storage> - -用户敏感数据,应该做到传输过程中加密,存储状态下加密 -传输过程中加密,可以使用 HTTPS 等认证加密通信协议 - -存储状态下加密,可以使用 SQLCipher 等类似方案。 - -### 4.2 内存中的用户密码等敏感数据应该安全抹除 - -例如用户密码等,即使是临时使用,也应在使用完成后应当将内容彻底清空。 - -错误: - -```cpp -#include <openssl/crypto.h> -#include <unistd.h> - - { - ... - string user_password(100, '\0'); - snprintf(&user_password, "password: %s", user_password.size(), password_from_input); - ... - } -``` - -正确: - -```cpp - { - ... - string user_password(100, '\0'); - snprintf(&user_password, "password: %s", user_password.size(), password_from_input); - ... - OPENSSL_cleanse(&user_password[0], user_password.size()); - } - -``` - -关联漏洞: - -`高风险-敏感信息泄露` - -### 4.3 rand() 类函数应正确初始化 - -rand类函数的随机性并不高。而且在使用前需要使用srand()来初始化。未初始化的随机数可能导致某些内容可预测。 - -```cpp -// Bad -int main() { - int foo = rand(); - return 0; -} -``` - -上述代码执行完成后,foo的值是固定的。它等效于 `srand(1); rand();`。 - -```cpp -// Good - -int main() { - srand(time(0)); - int foo = rand(); - return 0; -} -``` - -关联漏洞: - -`高风险-逻辑漏洞` - -### 4.4 在需要高强度安全加密时不应使用弱PRNG函数 - -在需要生成 AES/SM1/HMAC 等算法的密钥/IV/Nonce, RSA/ECDSA/ECDH 等算法的私钥,这类需要高安全性的业务场景,必须使用密码学安全的随机数生成器 (Cryptographically Secure PseudoRandom Number Generator (CSPRNG) ), 不得使用 `rand()` 等无密码学安全性保证的普通随机数生成器。 - -推荐使用的 CSPRNG 有: - -1. OpenSSL 中的 `RAND_bytes()` 函数, <https://www.openssl.org/docs/man1.1.1/man3/RAND_bytes.html> - -1. libsodium 中的 `randombytes_buf()` 函数 - -1. Linux kernel 的 `getrandom()` 系统调用, <https://man7.org/linux/man-pages/man2/getrandom.2.html> . - 或者读 /dev/urandom 文件, 或者 /dev/random 文件。 - -1. Apple IOS 的 `SecRandomCopyBytes()`, <https://developer.apple.com/documentation/security/1399291-secrandomcopybytes> - -1. Windows 下的 `BCryptGenRandom()`, `CryptGenRandom()`, `RtlGenRandom()` - -```cpp -#include <openssl/aes.h> -#include <openssl/crypto.h> -#include <openssl/rand.h> -#include <unistd.h> - - { - unsigned char key[16]; - if (1 != RAND_bytes(&key[0], sizeof(key))) { //... 错误处理 - return -1; - } - - AES_KEY aes_key; - if (0 != AES_set_encrypt_key(&key[0], sizeof(key) * 8, &aes_key)) { - // ... 错误处理 - return -1; - } - - ... - - OPENSSL_cleanse(&key[0], sizeof(key)); - } - -``` - -`rand()`类函数的随机性并不高。敏感操作时,如设计加密算法时,不得使用rand()或者类似的简单线性同余伪随机数生成器来作为随机数发生器。符合该定义的比特序列的特点是,序列中“1”的数量约等于“0”的数量;同理,“01”、“00”、“10”、“11”的数量大致相同,以此类推。 - -例如 C 标准库中的 `rand()` 的实现只是简单的[线性同余算法](https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/random_r.c;hb=glibc-2.28#l353),生成的伪随机数具有较强的可预测性。 - -当需要实现高强度加密,例如涉及通信安全时,不应当使用 `rand()` 作为随机数发生器。 - -实际应用中,[C++11 标准提供的random_device保证加密的安全性和随机性](https://docs.microsoft.com/en-us/cpp/standard-library/random-device-class?redirectedfrom=MSDN&view=vs-2019#remarks) -但是 [C++ 标准并不保证这一点](https://stackoverflow.com/questions/44867500/is-stdrandom-device-cryptographic-secure)。跨平台的代码可以考虑用 [OpenSSL](https://wiki.openssl.org/index.php/Random_Numbers) 等保证密码学安全的库里的随机数发生器。 - -关联漏洞: - -`高风险-敏感数据泄露` - -### 4.5 自己实现的rand范围不应过小 - -如果在弱安全场景相关的算法中自己实现了PRNG,请确保rand出来的随机数不会很小或可预测。 - -```cpp -// Bad -int32_t val = ((state[0] * 1103515245U) + 12345U) & 999999; -``` - -上述例子可能想生成0~999999共100万种可能的随机数,但是999999的二进制是11110100001000111111,与&运算后,0位一直是0,所以生成出的范围明显会小于100万种。 - -```cpp -// Good -int32_t val = ((state[0] * 1103515245U) + 12345U) % 1000000; - -// Good -int32_t val = ((state[0] * 1103515245U) + 12345U) & 0x7fffffff; -``` - -关联漏洞: - -`高风险-逻辑漏洞` - -## 5. 文件操作 - -### 5.1 避免路径穿越问题 - -在进行文件操作时,需要判断外部传入的文件名是否合法,如果文件名中包含 `../` 等特殊字符,则会造成路径穿越,导致任意文件的读写。 - -错误: - -```cpp -void Foo() { - char file_path[PATH_MAX] = "/home/user/code/"; - // 如果传入的文件名包含../可导致路径穿越 - // 例如"../file.txt",则可以读取到上层目录的file.txt文件 - char name[20] = "../file.txt"; - memcpy(file_path + strlen(file_path), name, sizeof(name)); - int fd = open(file_path, O_RDONLY); - if (fd != -1) { - char data[100] = {0}; - int num = 0; - memset(data, 0, sizeof(data)); - num = read(fd, data, sizeof(data)); - if (num > 0) { - write(STDOUT_FILENO, data, num); - } - close(fd); - } -} -``` - -正确: - -```cpp -void Foo() { - char file_path[PATH_MAX] = "/home/user/code/"; - char name[20] = "../file.txt"; - // 判断传入的文件名是否非法,例如"../file.txt"中包含非法字符../,直接返回 - if (strstr(name, "..") != NULL){ - // 包含非法字符 - return; - } - memcpy(file_path + strlen(file_path), name, sizeof(name)); - int fd = open(file_path, O_RDONLY); - if (fd != -1) { - char data[100] = {0}; - int num = 0; - memset(data, 0, sizeof(data)); - num = read(fd, data, sizeof(data)); - if (num > 0) { - write(STDOUT_FILENO, data, num); - } - close(fd); - } -} -``` - -关联漏洞: - -`高风险-逻辑漏洞` - -### 5.2 避免相对路径导致的安全问题(DLL、EXE劫持等问题) - -在程序中,使用相对路径可能导致一些安全风险,例如DLL、EXE劫持等问题。 - -例如以下代码,可能存在劫持问题: - -```cpp -int Foo() { - // 传入的是dll文件名,如果当前目录下被写入了恶意的同名dll,则可能导致dll劫持 - HINSTANCE hinst = ::LoadLibrary("dll_nolib.dll"); - if (hinst != NULL) { - cout<<"dll loaded!" << endl; - } - return 0; -} -``` - -针对DLL劫持的安全编码的规范: - - 1)调用LoadLibrary,LoadLibraryEx,CreateProcess,ShellExecute等进行模块加载的函数时,指明模块的完整(全)路径,禁止使用相对路径,这样就可避免从其它目录加载DLL。 - 2)在应用程序的开头调用SetDllDirectory(TEXT("")); 从而将当前目录从DLL的搜索列表中删除。结合SetDefaultDllDirectories,AddDllDirectory,RemoveDllDirectory这几个API配合使用,可以有效的规避DLL劫持问题。这些API只能在打了KB2533623补丁的Windows7,2008上使用。 - -关联漏洞: - -`中风险-逻辑漏洞` - -### 5.3 文件权限控制 - -在创建文件时,需要根据文件的敏感级别设置不同的访问权限,以防止敏感数据被其他恶意程序读取或写入。 - -错误: - -```cpp -int Foo() { - // 不要设置为777权限,以防止被其他恶意程序操作 - if (creat("file.txt", 0777) < 0) { - printf("文件创建失败!\n"); - } else { - printf("文件创建成功!\n"); - } - return 0; -} -``` - -关联漏洞: - - `中风险-逻辑漏洞` - -## 6. 内存操作 - -### 6.1 防止各种越界写(向前/向后) - -错误1: - -```cpp -int a[5]; -a[5] = 0; -``` - -错误2: - -```cpp -int a[5]; -int b = user_controlled_value; -a[b] = 3; -``` - -关联漏洞: - -`高风险-内存破坏` - -### 6.2 防止任意地址写 - -任意地址写会导致严重的安全隐患,可能导致代码执行。因此,在编码时必须校验写入的地址。 - -错误: - -```cpp -void Write(MyStruct dst_struct) { - char payload[10] = { 0 }; - memcpy(dst_struct.buf, payload, sizeof(payload)); -} - -int main() { - MyStruct dst_stuct; - dst_stuct.buf = (char*)user_controlled_value; - Write(dst_stuct); - return 0; -} -``` - -关联漏洞: - -`高风险-内存破坏` - -## 7. 数字操作 - -### 7.1 防止整数溢出 - -在计算时需要考虑整数溢出的可能,尤其在进行内存操作时,需要对分配、拷贝等大小进行合法校验,防止整数溢出导致的漏洞。 - -错误(该例子在计算时产生整数溢出) - -```cpp -const int kMicLen = 4; -// 整数溢出 -void Foo() { - int len = 1; - char payload[10] = { 0 }; - char dst[10] = { 0 }; - // Bad, 由于len小于4,导致计算拷贝长度时,整数溢出 - // len - kMicLen == 0xfffffffd - memcpy(dst, payload, len - kMicLen); -} -``` - -正确例子 - -```cpp -void Foo() { - int len = 1; - char payload[10] = { 0 }; - char dst[10] = { 0 }; - int size = len - kMicLen; - // 拷贝前对长度进行判断 - if (size > 0 && size < 10) { - memcpy(dst, payload, size); - printf("memcpy good\n"); - } -} -``` - -关联漏洞: - -`高风险-内存破坏` - -### 7.2 防止Off-By-One - -在进行计算或者操作时,如果使用的最大值或最小值不正确,使得该值比正确值多1或少1,可能导致安全风险。 - -错误: - -```cpp -char firstname[20]; -char lastname[20]; -char fullname[40]; - -fullname[0] = '\0'; - -strncat(fullname, firstname, 20); -// 第二次调用strncat()可能会追加另外20个字符。如果这20个字符没有终止空字符,则存在安全问题 -strncat(fullname, lastname, 20); -``` - -正确: - -```cpp -char firstname[20]; -char lastname[20]; -char fullname[40]; - -fullname[0] = '\0'; - -// 当使用像strncat()函数时,必须在缓冲区的末尾为终止空字符留下一个空字节,避免off-by-one -strncat(fullname, firstname, sizeof(fullname) - strlen(fullname) - 1); -strncat(fullname, lastname, sizeof(fullname) - strlen(fullname) - 1); -``` - -对于 C++ 代码,再次强烈建议使用 `string`、`vector` 等组件代替原始指针和数组操作。 - -关联漏洞: - -`高风险-内存破坏` - -### 7.3 避免大小端错误 - -在一些涉及大小端数据处理的场景,需要进行大小端判断,例如从大端设备取出的值,要以大端进行处理,避免端序错误使用。 - -关联漏洞: - -`中风险-逻辑漏洞` - -### 7.4 检查除以零异常 - -在进行除法运算时,需要判断被除数是否为零,以防导致程序不符合预期或者崩溃。 - -错误: - -```cpp -int divide(int x, int y) { - return x / y; -} -``` - -正确: - -```cpp -int divide(int x, int y) { - if (y == 0) { - throw DivideByZero; - } - return x / y; -} -``` - -关联漏洞: - -`低风险-拒绝服务` - -### 7.5 防止数字类型的错误强转 - -在有符号和无符号数字参与的运算中,需要注意类型强转可能导致的逻辑错误,建议指定参与计算时数字的类型或者统一类型参与计算。 - -错误例子 - -```cpp -int Foo() { - int len = 1; - unsigned int size = 9; - // 1 < 9 - 10 ? 由于运算中无符号和有符号混用,导致计算结果以无符号计算 - if (len < size - 10) { - printf("Bad\n"); - } else { - printf("Good\n"); - } -} -``` - -正确例子 - -```cpp -void Foo() { - // 统一两者计算类型为有符号 - int len = 1; - int size = 9; - if (len < size - 10) { - printf("Bad\n"); - } else { - printf("Good\n"); - } -} -``` - -关联漏洞: - -`高风险-内存破坏` - -`中风险-逻辑漏洞` - -### 7.6 比较数据大小时加上最小/最大值的校验 - -在进行数据大小比较时,要合理地校验数据的区间范围,建议根据数字类型,对其进行最大和最小值的判断,以防止非预期错误。 - -错误: - -```cpp -void Foo(int index) { - int a[30] = {0}; - // 此处index是int型,只考虑了index小于数组大小,但是并未判断是否大于等于0 - if (index < 30) { - // 如果index为负数,则越界 - a[index] = 1; - } -} -``` - -正确: - -```cpp -void Foo(int index) { - int a[30] = {0}; - // 判断index的最大最小值 - if (index >= 0 && index < 30) { - a[index] = 1; - } -} -``` - -关联漏洞: - -`高风险-内存破坏` - -## 8. 指针操作 - -### 8.1 【建议】检查在pointer上使用sizeof - -除了测试当前指针长度,否则一般不会在pointer上使用sizeof。 - -正确: - -```cpp -size_t pointer_length = sizeof(void*); -``` - -可能错误: - -```cpp -size_t structure_length = sizeof(Foo*); -``` - -可能是: - -```cpp -size_t structure_length = sizeof(Foo); -``` - -关联漏洞: - -`中风险-逻辑漏洞` - -### 8.2 检查直接将数组和0比较的代码 - -错误: - -```cpp -int a[3]; -...; - -if (a > 0) - ...; -``` - -该判断永远为真,等价于: - -```cpp -int a[3]; -...; - -if (&a[0]) - ...; -``` - -可能是: - -```cpp -int a[3]; -...; - -if(a[0] > 0) - ...; -``` - -开启足够的编译器警告(GCC 中为 `-Waddress`,并已包含在 `-Wall` 中),并设置为错误,可以在编译期间发现该问题。 - -关联漏洞: - -`中风险-逻辑漏洞` - -### 8.3 不应当向指针赋予写死的地址 - -特殊情况需要特殊对待(比如开发硬件固件时可能需要写死) - -但是如果是系统驱动开发之类的,写死可能会导致后续的问题。 - -关联漏洞: - -`高风险-内存破坏` - -### 8.4 检查空指针 - -错误: - -```cpp -*foo = 100; - -if (!foo) { - ERROR("foobar"); -} -``` - -正确: - -```cpp -if (!foo) { - ERROR("foobar"); -} - -*foo = 100; -``` - -错误: - -```cpp -void Foo(char* bar) { - *bar = '\0'; -} -``` - -正确: - -```cpp -void Foo(char* bar) { - if(bar) - *bar = '\0'; - else - ...; -} -``` - -关联漏洞: - -`低风险-拒绝服务` - -### 8.5 释放完后置空指针 - -在对指针进行释放后,需要将该指针设置为NULL,以防止后续free指针的误用,导致UAF等其他内存破坏问题。尤其是在结构体、类里面存储的原始指针。 - -错误: - -```cpp -void foo() { - char* p = (char*)malloc(100); - memcpy(p, "hello", 6); - printf("%s\n", p); - free(p); // 此时p所指向的内存已被释放,但是p所指的地址仍然不变 - // 未设置为NULL,可能导致UAF等内存错误 - - if (p != NULL) { // 没有起到防错作用 - printf("%s\n", p); // 错误使用已经释放的内存 - } -} -``` - -正确: - -```cpp -void foo() { - char* p = (char*)malloc(100); - memcpy(p, "hello", 6); - // 此时p所指向的内存已被释放,但是p所指的地址仍然不变 - printf("%s\n", p); - free(p); - //释放后将指针赋值为空 - p = NULL; - if (p != NULL) { // 没有起到防错作用 - printf("%s\n", p); // 错误使用已经释放的内存 - } -} -``` - -对于 C++ 代码,使用 string、vector、智能指针等代替原始内存管理机制,可以大量减少这类错误。 - -关联漏洞: - -`高风险-内存破坏` - -### 8.6 防止错误的类型转换(type confusion) - -在对指针、对象或变量进行操作时,需要能够正确判断所操作对象的原始类型。如果使用了与原始类型不兼容的类型进行访问,则存在安全隐患。 - -错误: - -```cpp -const int NAME_TYPE = 1; -const int ID_TYPE = 2; - -// 该类型根据 msg_type 进行区分,如果在对MessageBuffer进行操作时没有判断目标对象,则存在类型混淆 -struct MessageBuffer { - int msg_type; - union { - const char *name; - int name_id; - }; -}; - -void Foo() { - struct MessageBuffer buf; - const char* default_message = "Hello World"; - // 设置该消息类型为 NAME_TYPE,因此buf预期的类型为 msg_type + name - buf.msg_type = NAME_TYPE; - buf.name = default_message; - printf("Pointer of buf.name is %p\n", buf.name); - - // 没有判断目标消息类型是否为ID_TYPE,直接修改nameID,导致类型混淆 - buf.name_id = user_controlled_value; - - if (buf.msg_type == NAME_TYPE) { - printf("Pointer of buf.name is now %p\n", buf.name); - // 以NAME_TYPE作为类型操作,可能导致非法内存读写 - printf("Message: %s\n", buf.name); - } else { - printf("Message: Use ID %d\n", buf.name_id); - } -} -``` - -正确(判断操作的目标是否是预期类型): - -```cpp -void Foo() { - struct MessageBuffer buf; - const char* default_message = "Hello World"; - // 设置该消息类型为 NAME_TYPE,因此buf预期的类型为 msg_type + name - buf.msg_type = NAME_TYPE; - buf.name = default_msessage; - printf("Pointer of buf.name is %p\n", buf.name); - - // 判断目标消息类型是否为 ID_TYPE,不是预期类型则做对应操作 - if (buf.msg_type == ID_TYPE) - buf.name_id = user_controlled_value; - - if (buf.msg_type == NAME_TYPE) { - printf("Pointer of buf.name is now %p\n", buf.name); - printf("Message: %s\n", buf.name); - } else { - printf("Message: Use ID %d\n", buf.name_id); - } -} -``` - -关联漏洞: - -`高风险-内存破坏` - -### 8.7 智能指针使用安全 - -在使用智能指针时,防止其和原始指针的混用,否则可能导致对象生命周期问题,例如 UAF 等安全风险。 - -错误例子: - -```cpp -class Foo { - public: - explicit Foo(int num) { data_ = num; }; - void Function() { printf("Obj is %p, data = %d\n", this, data_); }; - private: - int data_; -}; - -std::unique_ptr<Foo> fool_u_ptr = nullptr; -Foo* pfool_raw_ptr = nullptr; - -void Risk() { - fool_u_ptr = make_unique<Foo>(1); - - // 从独占智能指针中获取原始指针,<Foo>(1) - pfool_raw_ptr = fool_u_ptr.get(); - // 调用<Foo>(1)的函数 - pfool_raw_ptr->Function(); - - // 独占智能指针重新赋值后会释放内存 - fool_u_ptr = make_unique<Foo>(2); - // 通过原始指针操作会导致UAF,pfool_raw_ptr指向的对象已经释放 - pfool_raw_ptr->Function(); -} - - -// 输出: -// Obj is 0000027943087B80, data = 1 -// Obj is 0000027943087B80, data = -572662307 -``` - -正确,通过智能指针操作: - -```cpp -void Safe() { - fool_u_ptr = make_unique<Foo>(1); - // 调用<Foo>(1)的函数 - fool_u_ptr->Function(); - - fool_u_ptr = make_unique<Foo>(2); - // 调用<Foo>(2)的函数 - fool_u_ptr->Function(); -} - -// 输出: -// Obj is 000002C7BB550830, data = 1 -// Obj is 000002C7BB557AF0, data = 2 -``` - -关联漏洞: - -`高风险-内存破坏` diff --git a/group/organization/Tencent/腾讯代码安全指南/Go安全指南.md b/group/organization/Tencent/腾讯代码安全指南/Go安全指南.md deleted file mode 100644 index a65ed8c5..00000000 --- a/group/organization/Tencent/腾讯代码安全指南/Go安全指南.md +++ /dev/null @@ -1,1079 +0,0 @@ ---- -id: Go 安全指南 -title: Go 安全指南 -sidebar_position: 4 -data: 2022年5月30日 ---- -## 1. 代码实现类 - -### 1.1 内存管理 - -#### 1.1.1 切片长度校验 - -- 在对slice进行操作时,必须判断长度是否合法,防止程序panic - -```go -// bad: 未判断data的长度,可导致 index out of range -func decode(data []byte) bool { - if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'E' && data[5] == 'R' { - fmt.Println("Bad") - return true - } - return false -} - -// bad: slice bounds out of range -func foo() { - var slice = []int{0, 1, 2, 3, 4, 5, 6} - fmt.Println(slice[:10]) -} - -// good: 使用data前应判断长度是否合法 -func decode(data []byte) bool { - if len(data) == 6 { - if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'E' && data[5] == 'R' { - fmt.Println("Good") - return true - } - } - return false -} -``` - -#### 1.1.2 nil指针判断 - -- 进行指针操作时,必须判断该指针是否为nil,防止程序panic,尤其在进行结构体Unmarshal时 - -```go -type Packet struct { - PackeyType uint8 - PackeyVersion uint8 - Data *Data -} - -type Data struct { - Stat uint8 - Len uint8 - Buf [8]byte -} - -func (p *Packet) UnmarshalBinary(b []byte) error { - if len(b) < 2 { - return io.EOF - } - - p.PackeyType = b[0] - p.PackeyVersion = b[1] - - // 若长度等于2,那么不会new Data - if len(b) > 2 { - p.Data = new(Data) - } - return nil -} - -// bad: 未判断指针是否为nil -func main() { - packet := new(Packet) - data := make([]byte, 2) - if err := packet.UnmarshalBinary(data); err != nil { - fmt.Println("Failed to unmarshal packet") - return - } - - fmt.Printf("Stat: %v\n", packet.Data.Stat) -} - -// good: 判断Data指针是否为nil -func main() { - packet := new(Packet) - data := make([]byte, 2) - - if err := packet.UnmarshalBinary(data); err != nil { - fmt.Println("Failed to unmarshal packet") - return - } - - if packet.Data == nil { - return - } - - fmt.Printf("Stat: %v\n", packet.Data.Stat) -} -``` - -#### 1.1.3 整数安全 - -- 在进行数字运算操作时,需要做好长度限制,防止外部输入运算导致异常: - - 确保无符号整数运算时不会反转 - - 确保有符号整数运算时不会出现溢出 - - 确保整型转换时不会出现截断错误 - - 确保整型转换时不会出现符号错误 - -- 以下场景必须严格进行长度限制: - - 作为数组索引 - - 作为对象的长度或者大小 - - 作为数组的边界(如作为循环计数器) - -```go -// bad: 未限制长度,导致整数溢出 -func overflow(numControlByUser int32) { - var numInt int32 = 0 - numInt = numControlByUser + 1 - // 对长度限制不当,导致整数溢出 - fmt.Printf("%d\n", numInt) - // 使用numInt,可能导致其他错误 -} - -func main() { - overflow(2147483647) -} - -// good -func overflow(numControlByUser int32) { - var numInt int32 = 0 - numInt = numControlByUser + 1 - if numInt < 0 { - fmt.Println("integer overflow") - return - } - fmt.Println("integer ok") -} - -func main() { - overflow(2147483647) -} -``` - -#### 1.1.4 make分配长度验证 - -- 在进行make分配内存时,需要对外部可控的长度进行校验,防止程序panic。 - -```go -// bad -func parse(lenControlByUser int, data []byte) { - size := lenControlByUser - // 对外部传入的size,进行长度判断以免导致panic - buffer := make([]byte, size) - copy(buffer, data) -} - -// good -func parse(lenControlByUser int, data []byte) ([]byte, error) { - size := lenControlByUser - // 限制外部可控的长度大小范围 - if size > 64*1024*1024 { - return nil, errors.New("value too large") - } - buffer := make([]byte, size) - copy(buffer, data) - return buffer, nil -} -``` - -#### 1.1.5 禁止SetFinalizer和指针循环引用同时使用 - -- 当一个对象从被GC选中到移除内存之前,runtime.SetFinalizer()都不会执行,即使程序正常结束或者发生错误。由指针构成的“循环引用”虽然能被GC正确处理,但由于无法确定Finalizer依赖顺序,从而无法调用runtime.SetFinalizer(),导致目标对象无法变成可达状态,从而造成内存无法被回收。 - -```go -// bad -func foo() { - var a, b Data - a.o = &b - b.o = &a - - // 指针循环引用,SetFinalizer()无法正常调用 - runtime.SetFinalizer(&a, func(d *Data) { - fmt.Printf("a %p final.\n", d) - }) - runtime.SetFinalizer(&b, func(d *Data) { - fmt.Printf("b %p final.\n", d) - }) -} - -func main() { - for { - foo() - time.Sleep(time.Millisecond) - } -} - -``` - -#### 1.1.6 禁止重复释放channel - -- 重复释放一般存在于异常流程判断中,如果恶意攻击者构造出异常条件使程序重复释放channel,则会触发运行时panic,从而造成DoS攻击。 - -```go -// bad -func foo(c chan int) { - defer close(c) - err := processBusiness() - if err != nil { - c <- 0 - close(c) // 重复释放channel - return - } - c <- 1 -} - -// good -func foo(c chan int) { - defer close(c) // 使用defer延迟关闭channel - err := processBusiness() - if err != nil { - c <- 0 - return - } - c <- 1 -} -``` - -#### 1.1.7 确保每个协程都能退出 - -- 启动一个协程就会做一个入栈操作,在系统不退出的情况下,协程也没有设置退出条件,则相当于协程失去了控制,它占用的资源无法回收,可能会导致内存泄露。 - -```go -// bad: 协程没有设置退出条件 -func doWaiter(name string, second int) { - for { - time.Sleep(time.Duration(second) * time.Second) - fmt.Println(name, " is ready!") - } -} -``` - -#### 1.1.8【推荐】不使用unsafe包 - -- 由于unsafe包绕过了 Golang 的内存安全原则,一般来说使用该库是不安全的,可导致内存破坏,尽量避免使用该包。若必须要使用unsafe操作指针,必须做好安全校验。 - -```go -// bad: 通过unsafe操作原始指针 -func unsafePointer() { - b := make([]byte, 1) - foo := (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&b[0])) + uintptr(0xfffffffe))) - fmt.Print(*foo + 1) -} - -// [signal SIGSEGV: segmentation violation code=0x1 addr=0xc100068f55 pc=0x49142b] - -``` - -#### 1.1.9【推荐】不使用slice作为函数入参 - -- slice在作为函数入参时,函数内对slice的修改可能会影响原始数据 - -```go - // bad - // slice作为函数入参时包含原始数组指针 - func modify(array []int) { - array[0] = 10 // 对入参slice的元素修改会影响原始数据 - } - - func main() { - array := []int{1, 2, 3, 4, 5} - - modify(array) - fmt.Println(array) // output:[10 2 3 4 5] - } - - // good - // 数组作为函数入参,而不是slice - func modify(array [5]int) { - array[0] = 10 - } - - func main() { - // 传入数组,注意数组与slice的区别 - array := [5]int{1, 2, 3, 4, 5} - - modify(array) - fmt.Println(array) - } - -``` - -### 1.2 文件操作 - -#### 1.2.1 路径穿越检查 - -- 在进行文件操作时,如果对外部传入的文件名未做限制,可能导致任意文件读取或者任意文件写入,严重可能导致代码执行。 - -```go -// bad: 任意文件读取 -func handler(w http.ResponseWriter, r *http.Request) { - path := r.URL.Query()["path"][0] - - // 未过滤文件路径,可能导致任意文件读取 - data, _ := ioutil.ReadFile(path) - w.Write(data) - - // 对外部传入的文件名变量,还需要验证是否存在../等路径穿越的文件名 - data, _ = ioutil.ReadFile(filepath.Join("/home/user/", path)) - w.Write(data) -} - -// bad: 任意文件写入 -func unzip(f string) { - r, _ := zip.OpenReader(f) - for _, f := range r.File { - p, _ := filepath.Abs(f.Name) - // 未验证压缩文件名,可能导致../等路径穿越,任意文件路径写入 - ioutil.WriteFile(p, []byte("present"), 0640) - } -} - -// good: 检查压缩的文件名是否包含..路径穿越特征字符,防止任意写入 -func unzipGood(f string) bool { - r, err := zip.OpenReader(f) - if err != nil { - fmt.Println("read zip file fail") - return false - } - for _, f := range r.File { - if !strings.Contains(f.Name, "..") { - p, _ := filepath.Abs(f.Name) - ioutil.WriteFile(p, []byte("present"), 0640) - } else { - return false - } - } - return true -} -``` - -#### 1.2.2 文件访问权限 - -- 根据创建文件的敏感性设置不同级别的访问权限,以防止敏感数据被任意权限用户读取。例如,设置文件权限为:`-rw-r-----` - -```go -ioutil.WriteFile(p, []byte("present"), 0640) -``` - -### 1.3 系统接口 - -#### 1.3.1【必须】命令执行检查 - -- 使用`exec.Command`、`exec.CommandContext`、`syscall.StartProcess`、`os.StartProcess`等函数时,第一个参数(path)直接取外部输入值时,应使用白名单限定可执行的命令范围,不允许传入`bash`、`cmd`、`sh`等命令; -- 使用`exec.Command`、`exec.CommandContext`等函数时,通过`bash`、`cmd`、`sh`等创建shell,-c后的参数(arg)拼接外部输入,应过滤\n $ & ; | ' " ( ) `等潜在恶意字符; - -```go -// bad -func foo() { - userInputedVal := "&& echo 'hello'" // 假设外部传入该变量值 - cmdName := "ping " + userInputedVal - - // 未判断外部输入是否存在命令注入字符,结合sh可造成命令注入 - cmd := exec.Command("sh", "-c", cmdName) - output, _ := cmd.CombinedOutput() - fmt.Println(string(output)) - - cmdName := "ls" - // 未判断外部输入是否是预期命令 - cmd := exec.Command(cmdName) - output, _ := cmd.CombinedOutput() - fmt.Println(string(output)) -} - -// good -func checkIllegal(cmdName string) bool { - if strings.Contains(cmdName, "&") || strings.Contains(cmdName, "|") || strings.Contains(cmdName, ";") || - strings.Contains(cmdName, "$") || strings.Contains(cmdName, "'") || strings.Contains(cmdName, "`") || - strings.Contains(cmdName, "(") || strings.Contains(cmdName, ")") || strings.Contains(cmdName, "\"") { - return true - } - return false -} - -func main() { - userInputedVal := "&& echo 'hello'" - cmdName := "ping " + userInputedVal - - if checkIllegal(cmdName) { // 检查传给sh的命令是否有特殊字符 - return // 存在特殊字符直接return - } - - cmd := exec.Command("sh", "-c", cmdName) - output, _ := cmd.CombinedOutput() - fmt.Println(string(output)) -} -``` - -### 1.4 通信安全 - -#### 1.4.1 网络通信采用TLS方式 - -- 明文传输的通信协议目前已被验证存在较大安全风险,被中间人劫持后可能导致许多安全风险,因此必须采用至少TLS的安全通信方式保证通信安全,例如gRPC/Websocket都使用TLS1.3。 - -```go -// good -func main() { - http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { - w.Header().Add("Strict-Transport-Security", "max-age=63072000; includeSubDomains") - w.Write([]byte("This is an example server.\n")) - }) - - // 服务器配置证书与私钥 - log.Fatal(http.ListenAndServeTLS(":443", "yourCert.pem", "yourKey.pem", nil)) -} -``` - -#### 1.4.2【推荐】TLS启用证书验证 - -- TLS证书应当是有效的、未过期的,且配置正确的域名,生产环境的服务端应启用证书验证。 - -```go -// bad -import ( - "crypto/tls" - "net/http" -) - -func doAuthReq(authReq *http.Request) *http.Response { - tr := &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - } - client := &http.Client{Transport: tr} - res, _ := client.Do(authReq) - return res -} - -// good -import ( - "crypto/tls" - "net/http" -) - -func doAuthReq(authReq *http.Request) *http.Response { - tr := &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: false}, - } - client := &http.Client{Transport: tr} - res, _ := client.Do(authReq) - return res -} -``` - -### 1.5 敏感数据保护 - -#### 1.5.1 敏感信息访问 - -- 禁止将敏感信息硬编码在程序中,既可能会将敏感信息暴露给攻击者,也会增加代码管理和维护的难度 -- 使用配置中心系统统一托管密钥等敏感信息 - -#### 1.5.2 敏感数据输出 - -- 只输出必要的最小数据集,避免多余字段暴露引起敏感信息泄露 -- 不能在日志保存密码(包括明文密码和密文密码)、密钥和其它敏感信息 -- 对于必须输出的敏感信息,必须进行合理脱敏展示 - -```go -// bad -func serve() { - http.HandleFunc("/register", func(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - user := r.Form.Get("user") - pw := r.Form.Get("password") - - log.Printf("Registering new user %s with password %s.\n", user, pw) - }) - http.ListenAndServe(":80", nil) -} - -// good -func serve1() { - http.HandleFunc("/register", func(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - user := r.Form.Get("user") - pw := r.Form.Get("password") - - log.Printf("Registering new user %s.\n", user) - - // ... - use(pw) - }) - http.ListenAndServe(":80", nil) -} -``` - -- 避免通过GET方法、代码注释、自动填充、缓存等方式泄露敏感信息 - -#### 1.5.3 敏感数据存储 - -- 敏感数据应使用SHA2、RSA等算法进行加密存储 -- 敏感数据应使用独立的存储层,并在访问层开启访问控制 -- 包含敏感信息的临时文件或缓存一旦不再需要应立刻删除 - -#### 1.5.4 异常处理和日志记录 - -- 应合理使用panic、recover、defer处理系统异常,避免出错信息输出到前端 - -```go -defer func () { - if r := recover(); r != nil { - fmt.Println("Recovered in start()") - } -}() -``` - -- 对外环境禁止开启debug模式,或将程序运行日志输出到前端 - -```bash -// bad -dlv --listen=:2345 --headless=true --api-version=2 debug test.go -// good -dlv debug test.go -``` - -### 1.6 加密解密 - -#### 1.6.1 不得硬编码密码/密钥 - -- 在进行用户登陆,加解密算法等操作时,不得在代码里硬编码密钥或密码,可通过变换算法或者配置等方式设置密码或者密钥。 - -```go -// bad -const ( - user = "dbuser" - password = "s3cretp4ssword" -) - -func connect() *sql.DB { - connStr := fmt.Sprintf("postgres://%s:%s@localhost/pqgotest", user, password) - db, err := sql.Open("postgres", connStr) - if err != nil { - return nil - } - return db -} - -// bad -var ( - commonkey = []byte("0123456789abcdef") -) - -func AesEncrypt(plaintext string) (string, error) { - block, err := aes.NewCipher(commonkey) - if err != nil { - return "", err - } -} -``` - -#### 1.6.2 密钥存储安全 - -- 在使用对称密码算法时,需要保护好加密密钥。当算法涉及敏感、业务数据时,可通过非对称算法协商加密密钥。其他较为不敏感的数据加密,可以通过变换算法等方式保护密钥。 - -#### 1.6.3 不使用弱密码算法 - -- 在使用加密算法时,不建议使用加密强度较弱的算法。 - -```text -// bad -crypto/des,crypto/md5,crypto/sha1,crypto/rc4等。 - -// good -crypto/rsa,crypto/aes等。 -``` - -### 1.7 正则表达式 - -#### 1.7.1【推荐】使用regexp进行正则表达式匹配 - -- 正则表达式编写不恰当可被用于DoS攻击,造成服务不可用,推荐使用regexp包进行正则表达式匹配。regexp保证了线性时间性能和优雅的失败:对解析器、编译器和执行引擎都进行了内存限制。但regexp不支持以下正则表达式特性,如业务依赖这些特性,则regexp不适合使用。 - - 回溯引用[Backreferences](https://www.regular-expressions.info/backref.html) - - 查看[Lookaround](https://www.regular-expressions.info/lookaround.html) - -```go -// good -matched, err := regexp.MatchString(`a.b`, "aaxbb") -fmt.Println(matched) // true -fmt.Println(err) // nil -``` - -# 后台类 - -## 1 代码实现类 - -### 1.1 输入校验 - -#### 1.1.1 按类型进行数据校验 - -- 所有外部输入的参数,应使用`validator`进行白名单校验,校验内容包括但不限于数据长度、数据范围、数据类型与格式,校验不通过的应当拒绝 - -```go -// good -import ( - "fmt" - "github.com/go-playground/validator/v10" -) - -var validate *validator.Validate - -func validateVariable() { - myEmail := "abc@tencent.com" - errs := validate.Var(myEmail, "required,email") - if errs != nil { - fmt.Println(errs) - return - //停止执行 - } - // 验证通过,继续执行 - ... -} - -func main() { - validate = validator.New() - validateVariable() -} -``` - -- 无法通过白名单校验的应使用`html.EscapeString`、`text/template`或`bluemonday`对`<, >, &, ',"`等字符进行过滤或编码 - -```go -import ( - "text/template" -) - -// TestHTMLEscapeString HTML特殊字符转义 -func main(inputValue string) string { - escapedResult := template.HTMLEscapeString(inputValue) - return escapedResult -} -``` - -### 1.2 SQL操作 - -#### 1.2.1 SQL语句默认使用预编译并绑定变量 - -- 使用`database/sql`的prepare、Query或使用GORM等ORM执行SQL操作 - -```go -import ( - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/sqlite" -) - -type Product struct { - gorm.Model - Code string - Price uint -} - -... -var product Product -... -db.First(&product, 1) -``` - -- 使用参数化查询,禁止拼接SQL语句,另外对于传入参数用于order by或表名的需要通过校验 - -```go -// bad -import ( - "database/sql" - "fmt" - "net/http" -) - -func handler(db *sql.DB, req *http.Request) { - q := fmt.Sprintf("SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='%s' ORDER BY PRICE", - req.URL.Query()["category"]) - db.Query(q) -} - -// good -func handlerGood(db *sql.DB, req *http.Request) { - // 使用?占位符 - q := "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='?' ORDER BY PRICE" - db.Query(q, req.URL.Query()["category"]) -} -``` - -### 1.3 网络请求 - -#### 1.3.1 资源请求过滤验证 - -- 使用`"net/http"`下的方法`http.Get(url)`、`http.Post(url, contentType, body)`、`http.Head(url)`、`http.PostForm(url, data)`、`http.Do(req)`时,如变量值外部可控(指从参数中动态获取),应对请求目标进行严格的安全校验。 - -- 如请求资源域名归属固定的范围,如只允许`a.qq.com`和`b.qq.com`,应做白名单限制。如不适用白名单,则推荐的校验逻辑步骤是: - - - 第 1 步、只允许HTTP或HTTPS协议 - - - 第 2 步、解析目标URL,获取其HOST - - - 第 3 步、解析HOST,获取HOST指向的IP地址转换成Long型 - - - 第 4 步、检查IP地址是否为内网IP,网段有: - - ```text - // 以RFC定义的专有网络为例,如有自定义私有网段亦应加入禁止访问列表。 - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - 127.0.0.0/8 - ``` - - - 第 5 步、请求URL - - - 第 6 步、如有跳转,跳转后执行1,否则绑定经校验的ip和域名,对URL发起请求 - -- 官方库`encoding/xml`不支持外部实体引用,使用该库可避免xxe漏洞 - -```go -import ( - "encoding/xml" - "fmt" - "os" -) - -func main() { - type Person struct { - XMLName xml.Name `xml:"person"` - Id int `xml:"id,attr"` - UserName string `xml:"name>first"` - Comment string `xml:",comment"` - } - - v := &Person{Id: 13, UserName: "John"} - v.Comment = " Need more details. " - - enc := xml.NewEncoder(os.Stdout) - enc.Indent(" ", " ") - if err := enc.Encode(v); err != nil { - fmt.Printf("error: %v\n", err) - } - -} -``` - -### 1.4 服务器端渲染 - -#### 1.4.1 模板渲染过滤验证 - -- 使用`text/template`或者`html/template`渲染模板时禁止将外部输入参数引入模板,或仅允许引入白名单内字符。 - -```go -// bad -func handler(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - x := r.Form.Get("name") - - var tmpl = `<!DOCTYPE html><html><body> - <form action="/" method="post"> - First name:<br> - <input type="text" name="name" value=""> - <input type="submit" value="Submit"> - </form><p>` + x + ` </p></body></html>` - - t := template.New("main") - t, _ = t.Parse(tmpl) - t.Execute(w, "Hello") -} - -// good -import ( - "fmt" - "github.com/go-playground/validator/v10" -) - -var validate *validator.Validate -validate = validator.New() - -func validateVariable(val) { - errs := validate.Var(val, "gte=1,lte=100") // 限制必须是1-100的正整数 - if errs != nil { - fmt.Println(errs) - return false - } - return true -} - -func handler(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - x := r.Form.Get("name") - - if validateVariable(x) { - var tmpl = `<!DOCTYPE html><html><body> - <form action="/" method="post"> - First name:<br> - <input type="text" name="name" value=""> - <input type="submit" value="Submit"> - </form><p>` + x + ` </p></body></html>` - t := template.New("main") - t, _ = t.Parse(tmpl) - t.Execute(w, "Hello") - } else { - // ... - } -} - -``` - -### 1.5 Web跨域 - -#### 1.5.1 跨域资源共享CORS限制请求来源 - -- CORS请求保护不当可导致敏感信息泄漏,因此应当严格设置Access-Control-Allow-Origin使用同源策略进行保护。 - -```go -// good -c := cors.New(cors.Options{ - AllowedOrigins: []string{"http://qq.com", "https://qq.com"}, - AllowCredentials: true, - Debug: false, -}) - -// 引入中间件 -handler = c.Handler(handler) -``` - -### 1.6 响应输出 - -#### 1.6.1 设置正确的HTTP响应包类型 - -- 响应头Content-Type与实际响应内容,应保持一致。如:API响应数据类型是json,则响应头使用`application/json`;若为xml,则设置为`text/xml`。 - -#### 1.6.2 添加安全响应头 - -- 所有接口、页面,添加响应头 `X-Content-Type-Options: nosniff`。 -- 所有接口、页面,添加响应头`X-Frame-Options`。按需合理设置其允许范围,包括:`DENY`、`SAMEORIGIN`、`ALLOW-FROM origin`。用法参考:[MDN文档](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options) - -#### 1.6.3 外部输入拼接到HTTP响应头中需进行过滤 - -- 应尽量避免外部可控参数拼接到HTTP响应头中,如业务需要则需要过滤掉`\r`、`\n`等换行符,或者拒绝携带换行符号的外部输入。 - -#### 1.6.4 外部输入拼接到response页面前进行编码处理 - -- 直出html页面或使用模板生成html页面的,推荐使用`text/template`自动编码,或者使用`html.EscapeString`或`text/template`对`<, >, &, ',"`等字符进行编码。 - -```go -import ( - "html/template" -) - -func outtemplate(w http.ResponseWriter, r *http.Request) { - param1 := r.URL.Query().Get("param1") - tmpl := template.New("hello") - tmpl, _ = tmpl.Parse(`{{define "T"}}{{.}}{{end}}`) - tmpl.ExecuteTemplate(w, "T", param1) -} -``` - -### 1.7 会话管理 - -#### 1.7.1 安全维护session信息 - -- 用户登录时应重新生成session,退出登录后应清理session。 - -```go -import ( - "github.com/gorilla/handlers" - "github.com/gorilla/mux" - "net/http" -) - -// 创建cookie -func setToken(res http.ResponseWriter, req *http.Request) { - expireToken := time.Now().Add(time.Minute * 30).Unix() - expireCookie := time.Now().Add(time.Minute * 30) - - //... - - cookie := http.Cookie{ - Name: "Auth", - Value: signedToken, - Expires: expireCookie, // 过期失效 - HttpOnly: true, - Path: "/", - Domain: "127.0.0.1", - Secure: true, - } - - http.SetCookie(res, &cookie) - http.Redirect(res, req, "/profile", 307) -} - -// 删除cookie -func logout(res http.ResponseWriter, req *http.Request) { - deleteCookie := http.Cookie{ - Name: "Auth", - Value: "none", - Expires: time.Now(), - } - http.SetCookie(res, &deleteCookie) - return -} -``` - -#### 1.7.2 CSRF防护 - -- 涉及系统敏感操作或可读取敏感信息的接口应校验`Referer`或添加`csrf_token`。 - -```go -// good -import ( - "github.com/gorilla/csrf" - "github.com/gorilla/mux" - "net/http" -) - -func main() { - r := mux.NewRouter() - r.HandleFunc("/signup", ShowSignupForm) - r.HandleFunc("/signup/post", SubmitSignupForm) - // 使用csrf_token验证 - http.ListenAndServe(":8000", - csrf.Protect([]byte("32-byte-long-auth-key"))(r)) -} -``` - -### 1.8 访问控制 - -#### 1.8.1 默认鉴权 - -- 除非资源完全可对外开放,否则系统默认进行身份认证,使用白名单的方式放开不需要认证的接口或页面。 - -- 根据资源的机密程度和用户角色,以最小权限原则,设置不同级别的权限,如完全公开、登录可读、登录可写、特定用户可读、特定用户可写等 - -- 涉及用户自身相关的数据的读写必须验证登录态用户身份及其权限,避免越权操作 - - ```sql - -- 伪代码 - select id from table where id=:id and userid=session.userid - ``` - -- 没有独立账号体系的外网服务使用`QQ`或`微信`登录,内网服务使用`统一登录服务`登录,其他使用账号密码登录的服务需要增加验证码等二次验证 - -### 1.9 并发保护 - -#### 1.9.1 禁止在闭包中直接调用循环变量 - -- 在循环中启动协程,当协程中使用到了循环的索引值,由于多个协程同时使用同一个变量会产生数据竞争,造成执行结果异常。 - -```go -// bad -func main() { - runtime.GOMAXPROCS(runtime.NumCPU()) - var group sync.WaitGroup - - for i := 0; i < 5; i++ { - group.Add(1) - go func() { - defer group.Done() - fmt.Printf("%-2d", i) // 这里打印的i不是所期望的 - }() - } - group.Wait() -} - -// good -func main() { - runtime.GOMAXPROCS(runtime.NumCPU()) - var group sync.WaitGroup - - for i := 0; i < 5; i++ { - group.Add(1) - go func(j int) { - defer func() { - if r := recover(); r != nil { - fmt.Println("Recovered in start()") - } - group.Done() - }() - fmt.Printf("%-2d", j) // 闭包内部使用局部变量 - }(i) // 把循环变量显式地传给协程 - } - group.Wait() -} -``` - -#### 1.9.2 禁止并发写map - -- 并发写map容易造成程序崩溃并异常退出,建议加锁保护 - -```go -// bad -func main() { - m := make(map[int]int) - // 并发读写 - go func() { - for { - _ = m[1] - } - }() - go func() { - for { - m[2] = 1 - } - }() - select {} -} -``` - -#### 1.9.3 确保并发安全 - -敏感操作如果未作并发安全限制,可导致数据读写异常,造成业务逻辑限制被绕过。可通过同步锁或者原子操作进行防护。 - -通过同步锁共享内存 - -```go -// good -var count int - -func Count(lock *sync.Mutex) { - lock.Lock() // 加写锁 - count++ - fmt.Println(count) - lock.Unlock() // 解写锁,任何一个Lock()或RLock()均需要保证对应有Unlock()或RUnlock() -} - -func main() { - lock := &sync.Mutex{} - for i := 0; i < 10; i++ { - go Count(lock) // 传递指针是为了防止函数内的锁和调用锁不一致 - } - for { - lock.Lock() - c := count - lock.Unlock() - runtime.Gosched() // 交出时间片给协程 - if c > 10 { - break - } - } -} -``` - -- 使用`sync/atomic`执行原子操作 - -```go -// good -import ( - "sync" - "sync/atomic" -) - -func main() { - type Map map[string]string - var m atomic.Value - m.Store(make(Map)) - var mu sync.Mutex // used only by writers - read := func(key string) (val string) { - m1 := m.Load().(Map) - return m1[key] - } - insert := func(key, val string) { - mu.Lock() // 与潜在写入同步 - defer mu.Unlock() - m1 := m.Load().(Map) // 导入struct当前数据 - m2 := make(Map) // 创建新值 - for k, v := range m1 { - m2[k] = v - } - m2[key] = val - m.Store(m2) // 用新的替代当前对象 - } - _, _ = read, insert -} -``` diff --git a/group/organization/Tencent/腾讯代码安全指南/JavaScript安全指南.md b/group/organization/Tencent/腾讯代码安全指南/JavaScript安全指南.md deleted file mode 100644 index e0fda588..00000000 --- a/group/organization/Tencent/腾讯代码安全指南/JavaScript安全指南.md +++ /dev/null @@ -1,877 +0,0 @@ ---- -id: JavaScript 安全指南 -title: JavaScript 安全指南 -sidebar_position: 3 -data: 2022年5月30日 ---- -## JavaScript页面类 - -### 1. 代码实现 - -#### 1.1 原生DOM API的安全操作 - -##### 1.1.1 HTML标签操作,限定/过滤传入变量值 - -- 使用`innerHTML=`、`outerHTML=`、`document.write()`、`document.writeln()`时,如变量值外部可控,应对特殊字符(`&, <, >, ", '`)做编码转义,或使用安全的DOM API替代,包括:`innerText=` - -```javascript -// 假设 params 为用户输入, text 为 DOM 节点 -// bad:将不可信内容带入HTML标签操作 -const { user } = params; -// ... -text.innerHTML = `Follow @${user}`; - -// good: innerHTML操作前,对特殊字符编码转义 -function htmlEncode(iStr) { - let sStr = iStr; - sStr = sStr.replace(/&/g, "&"); - sStr = sStr.replace(/>/g, ">"); - sStr = sStr.replace(/</g, "<"); - sStr = sStr.replace(/"/g, """); - sStr = sStr.replace(/'/g, "'"); - return sStr; -} - -let { user } = params; -user = htmlEncode(user); -// ... -text.innerHTML = `Follow @${user}`; - -// good: 使用安全的DOM API替代innerHTML -const { user } = params; -// ... -text.innerText = `Follow @${user}`; -``` - -##### 1.1.2 HTML属性操作,限定/过滤传入变量值 - -- 使用`element.setAttribute(name, value);`时,如第一个参数值`name`外部可控,应用白名单限定允许操作的属性范围。 - -- 使用`element.setAttribute(name, value);`时,操作`a.href`、`ifame.src`、`form.action`、`embed.src`、`object.data`、`link.href`、`area.href`、`input.formaction`、`button.formaction`属性时,如第二个参数值`value`外部可控,应参考*JavaScript页面类规范1.3.1*部分,限定页面重定向或引入资源的目标地址。 - -```javascript -// good: setAttribute操作前,限定引入资源的目标地址 -function addExternalCss(e) { - const t = document.createElement('link'); - t.setAttribute('href', e), - t.setAttribute('rel', 'stylesheet'), - t.setAttribute('type', 'text/css'), - document.head.appendChild(t) -} - -function validURL(sUrl) { - return !!((/^(https?:\/\/)?[\w\-.]+\.(qq|tencent)\.com($|\/|\\)/i).test(sUrl) || (/^[\w][\w/.\-_%]+$/i).test(sUrl) || (/^[/\\][^/\\]/i).test(sUrl)); -} - -let sUrl = "https://evil.com/1.css" -if (validURL(sUrl)) { - addExternalCss(sUrl); -} -``` - -#### 1.2 流行框架/库的安全操作 - -##### 1.2.1 限定/过滤传入jQuery不安全函数的变量值 - -- 使用`.html()`、`.append()`、`.prepend()`、`.wrap()`、`.replaceWith()`、`.wrapAll()`、`.wrapInner()`、`.after()`、`.before()`时,如变量值外部可控,应对特殊字符(`&, <, >, ", '`)做编码转义。 -- 引入`jQuery 1.x(等于或低于1.12)、jQuery2.x(等于或低于2.2)`,且使用`$()`时,应优先考虑替换为最新版本。如一定需要使用,应对传入参数值中的特殊字符(`&, <, >, ", '`)做编码转义。 - -```javascript -// bad:将不可信内容,带入jQuery不安全函数.after()操作 -const { user } = params; -// ... -$("p").after(user); - -// good: jQuery不安全函数.html()操作前,对特殊字符编码转义 -function htmlEncode(iStr) { - let sStr = iStr; - sStr = sStr.replace(/&/g, "&"); - sStr = sStr.replace(/>/g, ">"); - sStr = sStr.replace(/</g, "<"); - sStr = sStr.replace(/"/g, """); - sStr = sStr.replace(/'/g, "'"); - return sStr; -} - -// const user = params.user; -user = htmlEncode(user); -// ... -$("p").html(user); -``` - -- 使用`.attr()`操作`a.href`、`ifame.src`、`form.action`、`embed.src`、`object.data`、`link.href`、`area.href`、`input.formaction`、`button.formaction`属性时,应参考*JavaScript页面类规范1.3.1*部分,限定重定向的资源目标地址。 - -- 使用`.attr(attributeName, value)`时,如第一个参数值`attributeName`外部可控,应用白名单限定允许操作的属性范围。 - -- 使用`$.getScript(url [, success ])`时,如第一个参数值`url`外部可控(如:从URL取值拼接,请求jsonp接口),应限定可控变量值的字符集范围为:`[a-zA-Z0-9_-]+`。 - -##### 1.2.2 限定/过滤传入Vue.js不安全函数的变量值 - -- 使用`v-html`时,不允许对用户提供的内容使用HTML插值。如业务需要,应先对不可信内容做富文本过滤。 - -```html -// bad:直接渲染外部传入的不可信内容 -<div v-html="userProvidedHtml"></div> - -// good:使用富文本过滤库处理不可信内容后渲染 -<!-- 使用 --> -<div v-xss-html="{'mode': 'whitelist', dirty: html, options: options}" ></div> - -<!-- 配置 --> -<script> - new Vue({ - el: "#app", - data: { - options: { - whiteList: { - a: ["href", "title", "target", "class", "id"], - div: ["class", "id"], - span: ["class", "id"], - img: ["src", "alt"], - }, - }, - }, -}); -</script> -``` - -- 使用`v-bind`操作`a.href`、`ifame.src`、`form.action`、`embed.src`、`object.data`、`link.href`、`area.href`、`input.formaction`、`button.formaction`时,应确保后端已参考*JavaScript页面类规范1.3.1*部分,限定了供前端调用的重定向目标地址。 - -- 使用`v-bind`操作`style`属性时,应只允许外部控制特定、可控的CSS属性值 - -```html -// bad:v-bind允许外部可控值,自定义CSS属性及数值 -<a v-bind:href="sanitizedUrl" v-bind:style="userProvidedStyles"> -click me -</a> - -// good:v-bind只允许外部提供特性、可控的CSS属性值 -<a v-bind:href="sanitizedUrl" v-bind:style="{ -color: userProvidedColor, -background: userProvidedBackground -}" > -click me -</a> -``` - -#### 1.3 页面重定向 - -##### 1.3.1 限定跳转目标地址 - -- 使用白名单,限定重定向地址的协议前缀(默认只允许HTTP、HTTPS)、域名(默认只允许公司根域),或指定为固定值; - -- 适用场景包括,使用函数方法:`location.href`、`window.open()`、`location.assign()`、`location.replace()`;赋值或更新HTML属性:`a.href`、`ifame.src`、`form.action`、`embed.src`、`object.data`、`link.href`、`area.href`、`input.formaction`、`button.formaction`; - -```javascript -// bad: 跳转至外部可控的不可信地址 -const sTargetUrl = getURLParam("target"); -location.replace(sTargetUrl); - -// good: 白名单限定重定向地址 -function validURL(sUrl) { - return !!((/^(https?:\/\/)?[\w\-.]+\.(qq|tencent)\.com($|\/|\\)/i).test(sUrl) || (/^[\w][\w/.\-_%]+$/i).test(sUrl) || (/^[/\\][^/\\]/i).test(sUrl)); -} - -const sTargetUrl = getURLParam("target"); -if (validURL(sTargetUrl)) { - location.replace(sTargetUrl); -} - -// good: 制定重定向地址为固定值 -const sTargetUrl = "http://www.qq.com"; -location.replace(sTargetUrl); -``` - -#### 1.4 JSON解析/动态执行 - -##### 1.4.1 使用安全的JSON解析方式 - -- 应使用`JSON.parse()`解析JSON字符串。低版本浏览器,应使用安全的[Polyfill封装](https://github.com/douglascrockford/JSON-js/blob/master/json2.js) - -```javascript -// bad: 直接调用eval解析json -const sUserInput = getURLParam("json_val"); -const jsonstr1 = `{"name":"a","company":"b","value":"${sUserInput}"}`; -const json1 = eval(`(${jsonstr1})`); - -// good: 使用JSON.parse解析 -const sUserInput = getURLParam("json_val"); -JSON.parse(sUserInput, (k, v) => { - if (k === "") return v; - return v * 2; -}); - -// good: 低版本浏览器,使用安全的Polyfill封装(基于eval) -<script src="https://github.com/douglascrockford/JSON-js/blob/master/json2.js"></script>; -const sUserInput = getURLParam("json_val"); -JSON.parse(sUserInput); -``` - -#### 1.5 跨域通讯 - -##### 1.5.1 使用安全的前端跨域通信方式 - -- 具有隔离登录态(如:p_skey)、涉及用户高敏感信息的业务(如:微信网页版、QQ空间、QQ邮箱、公众平台),禁止通过`document.domain`降域,实现前端跨域通讯,应使用postMessage替代。 - -##### 1.5.2 使用postMessage应限定Origin - -- 在message事件监听回调中,应先使用`event.origin`校验来源,再执行具体操作。 - -- 校验来源时,应使用`===`判断,禁止使用`indexOf()` - -```javascript -// bad: 使用indexOf校验Origin值 -window.addEventListener("message", (e) => { - if (~e.origin.indexOf("https://a.qq.com")) { - // ... - } else { - // ... - } -}); - -// good: 使用postMessage时,限定Origin,且使用===判断 -window.addEventListener("message", (e) => { - if (e.origin === "https://a.qq.com") { - // ... - } -}); -``` - -### 2. 配置&环境 - -#### 2.1 敏感/配置信息 - -##### 2.1.1 禁止明文硬编码AK/SK - -- 禁止前端页面的JS明文硬编码AK/SK类密钥,应封装成后台接口,AK/SK保存在后端配置中心或密钥管理系统 - -#### 2.2 第三方组件/资源 - -##### 2.2.1 使用可信范围内的统计组件 - -##### 2.2.2 禁止引入非可信来源的第三方JS - -#### 2.3 纵深安全防护 - -##### 2.3.1 部署CSP,并启用严格模式 - -## Node.js后台类 - -### 1. 代码实现 - -#### 1.1 输入验证 - -##### 1.1.1 按类型进行数据校验 - -- 所有程序外部输入的参数值,应进行数据校验。校验内容包括但不限于:数据长度、数据范围、数据类型与格式。校验不通过,应拒绝。 - -```javascript -// bad:未进行输入验证 -Router.get("/vulxss", (req, res) => { - const { txt } = req.query; - res.set("Content-Type", "text/html"); - res.send({ - data: txt, - }); -}); - -// good:按数据类型,进行输入验证 -const Router = require("express").Router(); -const validator = require("validator"); - -Router.get("/email_with_validator", (req, res) => { - const txt = req.query.txt || ""; - if (validator.isEmail(txt)) { - res.send({ - data: txt, - }); - } else { - res.send({ err: 1 }); - } -}); -``` - -关联漏洞:*纵深防护措施 - 安全性增强特性* - -#### 1.2 执行命令 - -##### 1.2.1 使用child_process执行系统命令,应限定或校验命令和参数的内容 - -- 适用场景包括:`child_process.exec`, `child_process.execSync`, `child_process.spawn`, `child_process.spawnSync`, `child_process.execFile`, `child_process.execFileSync` - -- 调用上述函数,应首先考虑限定范围,供用户选择。 - -- 使用`child_process.exec`或`child_process.execSync`时,如果可枚举输入的参数内容或者格式,则应限定白名单。如果无法枚举命令或参数,则必须过滤或者转义指定符号,包括:```|;&$()><`!``` - -- 使用`child_process.spawn` 或`child_process.execFile`时,应校验传入的命令和参数在可控列表内。 - -```js -const Router = require("express").Router(); -const validator = require("validator"); -const { exec } = require('child_process'); - -// bad:未限定或过滤,直接执行命令 -Router.get("/vul_cmd_inject", (req, res) => { - const txt = req.query.txt || "echo 1"; - exec(txt, (err, stdout, stderr) => { - if (err) { res.send({ err: 1 }) } - res.send({stdout, stderr}); - }); -}); - -// good:通过白名单,限定外部可执行命令范围 -Router.get("/not_vul_cmd_inject", (req, res) => { - const txt = req.query.txt || "echo 1"; - const phone = req.query.phone || ""; - const cmdList = { - sendmsg: "./sendmsg " - }; - if (txt in cmdList && validator.isMobilePhone(phone)) { - exec(cmdList[txt] + phone, (err, stdout, stderr) => { - if (err) { res.send({ err: 1 }) }; - res.send({stdout, stderr}); - }); - } else { - res.send({ - err: 1, - tips: `you can use '${Object.keys(cmdList)}'`, - }); - } -}); - -// good:执行命令前,过滤/转义指定符号 -Router.get("/not_vul_cmd_inject", (req, res) => { - const txt = req.query.txt || "echo 1"; - let phone = req.query.phone || ""; - const cmdList = { - sendmsg: "./sendmsg " - }; - phone = phone.replace(/(\||;|&|\$\(|\(|\)|>|<|\`|!)/gi,""); - if (txt in cmdList) { - exec(cmdList[txt] + phone, (err, stdout, stderr) => { - if (err) { res.send({ err: 1 }) }; - res.send({stdout, stderr}); - }); - } else { - res.send({ - err: 1, - tips: `you can use '${Object.keys(cmdList)}'`, - }); - } -}); - -``` - -关联漏洞:高风险 - 任意命令执行 - -#### 1.3 文件操作 - -##### 1.3.1 限定文件操作的后缀范围 - -- 按业务需求,使用白名单限定后缀范围。 - -##### 1.3.2 校验并限定文件路径范围 - -- 应固定上传、访问文件的路径。若需要拼接外部可控变量值,检查是否包含`..`、`.`路径穿越字符。如存在,应拒绝。 -- 使用`fs`模块下的函数方法时,应对第一个参数即路径部分做校验,检查是否包含路径穿越字符`.`或`..`。涉及方法包括但不限于:`fs.truncate`、`fs.truncateSync`、`fs.chown`、`fs.chownSync`、`fs.lchown`、`fs.lchownSync`、`fs.stat`、`fs.lchmodSync`、`fs.lstat`、`fs.statSync`、`fs.lstatSync`、`fs.readlink`、`fs.unlink`、`fs.unlinkSync`、`fs.rmdir`、`fs.rmdirSync`、`fs.mkdir`、`fs.mkdirSync`、`fs.readdir`、`fs.readdirSync`、`fs.openSync`、`fs.open`、`fs.createReadStream`、`fs.createWriteStream` -- 使用express框架的`sendFile`方法时,应对第一个参数即路径部分做校验,检查是否包含路径穿越字符`.`或`..` -- 校验时,应使用`path`模块处理前的路径参数值,或判断处理过后的路径是否穿越出了当前工作目录。涉及方法包括但不限于:`path.resolve`、`path.join`、`path.normalize`等 - -```javascript -const fs = require("fs"); -const path = require("path"); -let filename = req.query.ufile; -let root = '/data/ufile'; - -// bad:未检查文件名/路径 -fs.readFile(root + filename, (err, data) => { - if (err) { - return console.error(err); - } - console.log(`异步读取: ${data.toString()}`); -}); - -// bad:使用path处理过后的路径参数值做校验,仍可能有路径穿越风险 -filename = path.join(root, filename); -if (filename.indexOf("..") < 0) { - fs.readFile(filename, (err, data) => { - if (err) { - return console.error(err); - } - console.log(data.toString()); - }); -}; - -// good:检查了文件名/路径,是否包含路径穿越字符 -if (filename.indexOf("..") < 0) { - filename = path.join(root, filename); - fs.readFile(filename, (err, data) => { - if (err) { - return console.error(err); - } - console.log(data.toString()); - }); -}; -``` - -##### 1.3.3 安全地处理上传文件名 - -- 将上传文件重命名为16位以上的随机字符串保存。 -- 如需原样保留文件名,应检查是否包含`..`、`.`路径穿越字符。如存在,应拒绝。 - -##### 1.3.4 敏感资源文件,应有加密、鉴权和水印等加固措施 - -- 用户上传的`身份证`、`银行卡`等图片,属敏感资源文件,应采取安全加固。 -- 指向此类文件的URL,应保证不可预测性;同时,确保无接口会批量展示此类资源的URL。 -- 访问敏感资源文件时,应进行权限控制。默认情况下,仅用户可查看、操作自身敏感资源文件。 -- 图片类文件应添加业务水印,表明该图片仅可用于当前业务使用。 - -#### 1.4 网络请求 - -##### 1.4.1 限定访问网络资源地址范围 - -- 应固定程序访问网络资源地址的`协议`、`域名`、`路径`范围。 - -- 若业务需要,外部可指定访问网络资源地址,应禁止访问内网私有地址段及域名。 - -```text -// 以RFC定义的专有网络为例,如有自定义私有网段亦应加入禁止访问列表。 -10.0.0.0/8 -172.16.0.0/12 -192.168.0.0/16 -127.0.0.0/8 -``` - -##### 1.4.2 【推荐】请求网络资源,应加密传输 - -- 应优先选用https协议请求网络资源 - -关联漏洞:*高风险 - SSRF,高风险 - HTTP劫持* - -#### 1.5 数据输出 - -##### 1.5.1 高敏感信息禁止存储、展示 - -- 口令、密保答案、生理标识等鉴权信息禁止展示 -- 非金融类业务,信用卡cvv码及日志禁止存储 - -##### 1.5.2 一般敏感信息脱敏展示 - -- 身份证只显示第一位和最后一位字符,如:`3*********************1` -- 移动电话号码隐藏中间6位字符,如:`134***************48` -- 工作地址/家庭地址最多显示到`区`一级 -- 银行卡号仅显示最后4位字符,如:`*********************8639` - -##### 1.5.3 【推荐】返回的字段按业务需要输出 - -- 按需输出,避免不必要的用户信息泄露 -- 用户敏感数据应在服务器后台处理后输出,不可以先输出到客户端,再通过客户端代码来处理展示 - -关联漏洞:*高风险 - 用户敏感信息泄露* - -#### 1.6 响应输出 - -##### 1.6.1 设置正确的HTTP响应包类型 - -- 响应头Content-Type与实际响应内容,应保持一致。如:API响应数据类型是json,则响应头使用`application/json`;若为xml,则设置为`text/xml`。 - -##### 1.6.2 添加安全响应头 - -- 所有接口、页面,添加响应头 `X-Content-Type-Options: nosniff`。 -- 所有接口、页面,添加响应头`X-Frame-Options`。按需合理设置其允许范围,包括:`DENY`、`SAMEORIGIN`、`ALLOW-FROM origin`。用法参考:[MDN文档](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options) -- 推荐使用组件: [helmet](https://www.npmjs.com/package/helmet) - -##### 1.6.3 外部输入拼接到响应页面前,进行编码处理 - -| 场景 | 编码规则 | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| 输出点在HTML标签之间 | 需要对以下6个特殊字符进行HTML实体编码(&, <, >, ", ',/)。<br/>示例:<br/>& --> &amp;<br/>< --> &lt;<br/>>--> &gt;<br/>" --> &quot;<br/>' --> &#x27; <br/>/ --> &#x2F; | -| 输出点在HTML标签普通属性内(如href、src、style等,on事件除外) | 要对数据进行HTML属性编码。<br/>编码规则:除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为&#xHH;(以&#x开头,HH则是指该字符对应的十六进制数字,分号作为结束符) | -| 输出点在JS内的数据中 | 需要进行js编码<br/>编码规则:<br/>除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \xHH (以 \x 开头,HH则是指该字符对应的十六进制数字)<br/>Tips:这种场景仅限于外部数据拼接在js里被引号括起来的变量值中。除此之外禁止直接将代码拼接在js代码中。 | -| 输出点在CSS中(Style属性) | 需要进行CSS编码<br/>编码规则:<br/>除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \HH (以 \ 开头,HH则是指该字符对应的十六进制数字) | -| 输出点在URL属性中 | 对这些数据进行URL编码<br/>Tips:除此之外,所有链接类属性应该校验其协议。禁止JavaScript、data和Vb伪协议。 | - -##### 1.6.4 响应禁止展示物理资源、程序内部代码逻辑等敏感信息 - -- 业务生产(正式)环境,应用异常时,响应内容禁止展示敏感信息。包括但不限于:`物理路径`、`程序内部源代码`、`调试日志`、`内部账号名`、`内网ip地址`等。 - -```text -// bad -Access denied for user 'xxx'@'xx.xxx.xxx.162' (using password: NO)" -``` - -##### 1.6.5 添加安全纵深防御措施 - -- 部署CSP,规则中应引入最新的严格模式特性`nonce-` - -```javascript -// good:使用helmet组件安全地配置响应头 -const express = require("express"); -const helmet = require("helmet"); -const app = express(); -app.use(helmet()); - -// good:正确配置Content-Type、添加了安全响应头,引入了CSP -Router.get("/", (req, res) => { - res.header("Content-Type", "application/json"); - res.header("X-Content-Type-Options", "nosniff"); - res.header("X-Frame-Options", "SAMEORIGIN"); - res.header("Content-Security-Policy", "script-src 'self'"); -}); -``` - -关联漏洞:*中风险 - XSS、中风险 - 跳转漏洞* - -#### 1.7 执行代码 - -##### 1.7.1 安全的代码执行方式 - -- 禁止使用 `eval` 函数 -- 禁止使用`new Function("input")()` 来创建函数 -- 使用 `setInteval`,`setTimeout`,应校验传入的参数 - -关联漏洞:*高风险 - 代码执行漏洞* - -#### 1.8 Web跨域 - -##### 1.8.1 限定JSONP接口的callback字符集范围 - -- JSONP接口的callback函数名为固定白名单。如callback函数名可用户自定义,应限制函数名仅包含 字母、数字和下划线。如:`[a-zA-Z0-9_-]+` - -##### 1.8.2 安全的CORS配置 - -- 使用CORS,应对请求头Origin值做严格过滤、校验。具体来说,可以使用“全等于”判断,或使用严格的正则进行判断。如:`^https://domain\.qq\.com$` - -```javascript -// good:使用全等于,校验请求的Origin -if (req.headers.origin === 'https://domain.qq.com') { - res.setHeader('Access-Control-Allow-Origin', req.headers.origin); - res.setHeader('Access-Control-Allow-Credentials', true); -} -``` - -关联漏洞:*中风险 - XSS,中风险 - CSRF,中风险 - CORS配置不当* - -#### 1.9 SQL操作 - -##### 1.9.1 SQL语句默认使用预编译并绑定变量 - -- 应使用预编译绑定变量的形式编写sql语句,保持查询语句和数据相分离 - - ```javascript - // bad:拼接SQL语句查询,存在安全风险 - const mysql = require("mysql"); - const connection = mysql.createConnection(options); - connection.connect(); - - const sql = util.format("SELECT * from some_table WHERE Id = %s and Name = %s", req.body.id, req.body.name); - connection.query(sql, (err, result) => { - // handle err.. - }); - - // good:使用预编译绑定变量构造SQL语句 - const mysql = require("mysql"); - const connection = mysql.createConnection(options); - connection.connect(); - - const sql = "SELECT * from some_table WHERE Id = ? and Name = ?"; - const sqlParams = [req.body.id, req.body.name]; - connection.query(sql, sqlParams, (err, result) => { - // handle err.. - }); - ``` - -- 对于表名、列名等无法进行预编译的场景,如:`__user_input__` 拼接到比如 `limit`, `order by`, `group by` , `from tablename`语句中。请使用以下方法: - - *方案1:使用白名单校验表名/列名* - - ```javascript - // good - const tableSuffix = req.body.type; - if (["expected1", "expected2"].indexOf(tableSuffix) < 0) { - // 不在表名白名单中,拒绝请求 - return ; - } - const sql = `SELECT * from t_business_${tableSuffix}`; - connection.query(sql, (err, result) => { - // handle err.. - }); - ``` - - *方案2:使用反引号包裹表名/列名,并过滤 `__user_input__` 中的反引号* - - ```javascript - // good - let { orderType } = req.body; - // 过滤掉__user_input__中的反引号 - orderType = orderType.replace("`", ""); - const sql = util.format("SELECT * from t_business_feeds order by `%s`", orderType); - connection.query(sql, (err, result) => { - // handle err.. - }); - ``` - - *方案3:将 `__user_input__` 转换为整数* - - ```javascript - // good - let { orderType } = req.body; - // 强制转换为整数 - orderType = parseInt(orderType, 10); - const sql = `SELECT * from t_business_feeds order by ${orderType}`; - connection.query(sql, (err, result) => { - // handle err.. - }); - ``` - -##### 1.9.2 安全的ORM操作 - -- 使用安全的ORM组件进行数据库操作。如 `sequelize` 等 - -- 禁止`__user_input__`以拼接的方式直接传入ORM的各类raw方法 - -```javascript -//bad: adonisjs ORM -//参考:https://adonisjs.com/docs/3.2/security-introduction#_sql_injection -const username = request.param("username"); -const users = yield Database - .table("users") - .where(Database.raw(`username = ${username}`)); - -//good: adonisjs ORM -const username = request.param("username"); -const users = yield Database - .table('users') - .where(Database.raw("username = ?", [username])); -``` - -- 使用ORM进行Update/Insert操作时,应限制操作字段范围 - -```javascript -/* -good -假设该api用于插入用户的基本信息,使用传入的req.body通过Sequelize的create方法实现 -假设User包含字段:username,email,isAdmin, -其中,isAdmin将会用于是否系统管理员的鉴权,默认值为false -*/ -// Sequelize: 只允许变更username、email字段值 -User.create(req.body, { fields: ["username", "email"] }).then((user) => { - // handle the rest.. -}); -``` - -> **为什么要这么做?** -> 在上述案例中,若不限定fields值,攻击者将可传入`{"username":"boo","email":"foo@boo.com","isAdmin":true}`将自己变为`Admin`,产生垂直越权漏洞。 - -关联漏洞:*高风险 - SQL注入,中风险 - Mass Assignment 逻辑漏洞* - -#### 1.10 NoSQL操作 - -##### 1.10.1 校验参数值类型 - -- 将HTTP参数值代入NoSQL操作前,应校验类型。如非功能需要,禁止对象(Object)类型传入。 - -```javascript -// bad:执行NOSQL操作前,未作任何判断 -app.post("/", (req, res) => { - db.users.find({ username: req.body.username, password: req.body.password }, (err, users) => { - // **TODO:** handle the rest - }); -}); - -// good:在进入nosql前先判断`__USER_INPUT__`是否为字符串。 -app.post("/", (req, res) => { - if (req.body.username && typeof req.body.username !== "string") { - return new Error("username must be a string"); - } - if (req.body.password && typeof req.body.password !== "string") { - return new Error("password must be a string"); - } - db.users.find({ username: req.body.username, password: req.body.password }, (err, users) => { - // **TODO:** handle the rest - }); -}); -``` - -> **为什么要这么做?** -> -> JavaScript中,从http或socket接收的数据可能不是单纯的字符串,而是被黑客精心构造的对象(Object)。在本例中: -> -> - 期望接收的POST数据:`username=foo&password=bar` -> - 期望的等价条件查询sql语句:`select * from users where username = 'foo' and password = 'bar'` -> - 黑客的精心构造的攻击POST数据:`username[$ne]=null&password[$ne]=null`或JSON格式:`{"username": {"$ne": null},"password": {"$ne": null}}` -> - 黑客篡改后的等价条件查询sql语句:`select * from users where username != null & password != null` -> - 黑客攻击结果:绕过正常逻辑,在不知道他人的username/password的情况登录他人账号。 - -##### 1.10.2 NoSQL操作前,应校验权限/角色 - -- 执行NoSQL增、删、改、查逻辑前,应校验权限 - -```javascript -// 使用express、mongodb(mongoose)实现的删除文章demo -// bad:在删除文章前未做权限校验 -app.post("/deleteArticle", (req, res) => { - db.articles.deleteOne({ article_id: req.body.article_id }, (err, users) => { - // TODO: handle the rest - }); -}); - -// good:进入nosql语句前先进行权限校验 -app.post("/deleteArticle", (req, res) => { - checkPriviledge(ctx.uin, req.body.article_id); - db.articles.deleteOne({ article_id: req.body.article_id }, (err, users) => { - // TODO: handle the rest - }); -}); -``` - -关联漏洞:*高风险 - 越权操作,高风险 - NoSQL注入* - -#### 1.11 服务器端渲染(SSR) - -##### 1.11.1 安全的Vue服务器端渲染(Vue SSR) - -- 禁止直接将不受信的外部内容传入`{{{ data }}}`表达式中 - -- 模板内容禁止被污染 - -```javascript -// bad: 将用户输入替换进模板 -const app = new Vue({ - template: appTemplate.replace("word", __USER_INPUT__), -}); -renderer.renderToString(app); -``` - -- 对已渲染的HTML文本内容(renderToString后的html内容)。如需再拼不受信的外部输入,应先进行安全过滤,具体请参考**1.6.3** - -```javascript -// bad: 渲染后的html再拼接不受信的外部输入 -return new Promise(((resolve) => { - renderer.renderToString(component, (err, html) => { - let htmlOutput = html; - htmlOutput += `${__USER_INPUT__}`; - resolve(htmlOutput); - }); -})); -``` - -##### 1.11.2 安全地使用EJS、LoDash、UnderScore进行服务器端渲染 - -- 使用render函数时,模板内容禁止被污染 - - lodash.Template: - - ```js - // bad: 将用户输入送进模板 - const compiled = _.template(`<b>${__USER_INPUT__}<%- value %></b>`); - compiled({ value: "hello" }); - ``` - - ejs: - - ```javascript - // bad: 将用户输入送进模板 - const ejs = require("ejs"); - const people = ["geddy", "neil", "alex"]; - const html = ejs.render(`<%= people.join(", "); %>${__USER_INPUT__}`, { people }); - ``` - -- Ejs、LoDash、UnderScore提供的HTML插值模板默认形似`<%= data %>`,尽管在默认情况下`<%= data %>`存在过滤,在编写HTML插值模板时需注意: - - 1. 用户输入流入html属性值时,必须使用双引号包裹:`<base data-id = "<%= __USER_INPUT__ %>">` - 2. 用户输入流入`<script></script>`标签或on*的html属性中时,如`<script>var id = <%= __USER_INPUT__ %></script>` ,须按照1.6.3中的做法或白名单方法进行过滤,框架/组件的过滤在此处不起作用 - -##### 1.11.3 在自行实现状态存储容器并将其JSON.Stringify序列化后注入到HTML时,必须进行安全过滤 - -#### 1.12 URL跳转 - -##### 1.12.1 限定跳转目标地址 - -- 适用场景包括: - -1. 使用30x返回码并在Header中设置Location进行跳转 -2. 在返回页面中打印`<script>location.href=__Redirection_URL__</script>` - -- 使用白名单,限定重定向地址的协议前缀(默认只允许HTTP、HTTPS)、域名(默认只允许公司根域),或指定为固定值; - -```javascript -// 使用express实现的登录成功后的回调跳转页面 - -// bad: 未校验页面重定向地址 -app.get("/login", (req, res) => { - // 若未登录用户访问其他页面,则让用户导向到该处理函数进行登录 - // 使用参数loginCallbackUrl记录先前尝试访问的url,在登录成功后跳转回loginCallbackUrl: - const { loginCallbackUrl } = req.query; - if (loginCallbackUrl) { - res.redirect(loginCallbackUrl); - } -}); - -// good: 白名单限定重定向地址 -function isValidURL(sUrl) { - return !!((/^(https?:\/\/)?[\w\-.]+\.(qq|tencent)\.com($|\/|\\)/i).test(sUrl) || (/^[\w][\w/.\-_%]+$/i).test(sUrl) || (/^[/\\][^/\\]/i).test(sUrl)); -} -app.get("/login", (req, res) => { - // 若未登录用户访问其他页面,则让用户导向到该处理函数进行登录 - // 使用参数loginCallbackUrl记录先前尝试访问的url,在登录成功后跳转回loginCallbackUrl: - const { loginCallbackUrl } = req.query; - if (loginCallbackUrl && isValidUrl(loginCallbackUrl)) { - res.redirect(loginCallbackUrl); - } -}); - -// good: 白名单限定重定向地址,通过返回html实现 -function isValidURL(sUrl) { - return !!((/^(https?:\/\/)?[\w\-.]+\.(qq|tencent)\.com($|\/|\\)/i).test(sUrl) || (/^[\w][\w/.\-_%]+$/i).test(sUrl) || (/^[/\\][^/\\]/i).test(sUrl)); -} -app.get("/login", (req, res) => { - // 若未登录用户访问其他页面,则让用户导向到该处理函数进行登录 - // 使用参数loginCallbackUrl记录先前尝试访问的url,在登录成功后跳转回loginCallbackUrl: - const { loginCallbackUrl } = req.query; - if (loginCallbackUrl && isValidUrl(loginCallbackUrl)) { - // 使用encodeURI,过滤左右尖括号与双引号,防止逃逸出包裹的双引号 - const redirectHtml = `<script>location.href = "${encodeURI(loginCallbackUrl)}";</script>`; - res.end(redirectHtml); - } -}); -``` - -*关联漏洞:中风险 - 任意URL跳转漏洞* - -#### 1.13 Cookie与登录态 - -##### 1.13.1【推荐】为Cookies中存储的关键登录态信息添加http-only保护 - -关联漏洞:*纵深防护措施 - 安全性增强特性* - -### 2. 配置&环境 - -#### 2.1 依赖库 - -##### 2.1.1 使用安全的依赖库 - -- 使用自动工具,检查依赖库是否存在后门/漏洞,保持最新版本 - -#### 2.2 运行环境 - -##### 2.2.1 使用非root用户运行Node.js - -#### 2.3 配置信息 - -##### 2.3.1 禁止硬编码认证凭证 - -- 禁止在源码中硬编码`AK/SK`、`数据库账密`、`私钥证书`等配置信息 -- 应使用配置系统或KMS密钥管理系统。 - -##### 2.3.2 禁止硬编码IP配置 - -- 禁止在源码中硬编码`IP`信息 - -> **为什么要这么做?** -> -> 硬编码IP可能会导致后续机器裁撤或变更时产生额外的工作量,影响系统的可靠性。 - -##### 2.3.3 禁止硬编码员工敏感信息 - -- 禁止在源代码中含员工敏感信息,包括但不限于:`员工ID`、`手机号`、`微信/QQ号`等。 diff --git a/group/organization/Tencent/腾讯代码安全指南/Java安全指南.md b/group/organization/Tencent/腾讯代码安全指南/Java安全指南.md deleted file mode 100644 index 753f0dc4..00000000 --- a/group/organization/Tencent/腾讯代码安全指南/Java安全指南.md +++ /dev/null @@ -1,709 +0,0 @@ ---- -id: Java 安全指南 -title: Java 安全指南 -sidebar_position: 5 -data: 2022年5月30日 ---- -## 安卓类 - -### 1. 代码实现 - -#### 1.1 异常捕获处理 - -##### 1.1.1 序列化异常捕获 - -对于通过导出组件 intent 传递的序列化对象,必须进行 try...catch 处理,以避免数据非法导致应用崩溃。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - try { - Intent mIntent = getIntent(); - //String msg = intent.getStringExtra("data"); - Person mPerson = (Person)mIntent.getSerializableExtra(ObjectDemo.SER_KEY) - //textView.setText(msg); - } catch (ClassNotFoundException exp) { - // ...... - } - } -} -``` - -##### 1.1.2 NullPointerException 异常捕获 - -对于通过 intent getAction 方法获取数据时,必须进行 try...catch 处理,以避免空指针异常导致应用崩溃。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - try { - Intent mIntent = getIntent(); - if mIntent.getAction().equals("StartNewWorld") { - // ...... - } - // ...... - } catch (NullPointerException exp) { - // ...... - } - } -} -``` - -##### 1.1.3 ClassCastException 异常捕获 - -对于通过 intent getSerializableExtra 方法获取数据时,必须进行 try...catch 处理,以避免类型转换异常导致应用崩溃。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - try { - Intent mIntent = getIntent(); - Person mPerson = (Person)mIntent.getSerializableExtra(ObjectDemo.SER_KEY) - // ...... - } catch (ClassCastException exp) { - // ...... - } - } -} -``` - -##### 1.1.4 ClassNotFoundException 异常捕获 - -同 1.1.3 - -#### 1.2 数据泄露 - -##### 1.2.1 logcat 输出限制 - -release 版本禁止在 logcat 输出信息。 - -```java -public class MainActivity extends Activity { - String DEBUG = "debug_version"; - - protected void onCreate(Bundle savedInstanceState) { - // ...... - if (DEBUG == "debug_version") { - Log.d("writelog", "start activity"); - } - // ...... - } -} -``` - -#### 1.3 webview 组件安全 - -##### 1.3.1 addJavaScriptInterface 方法调用 - -对于设置 minsdk <= 18 的应用,禁止调用 addJavaScriptInterface 方法。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - mWebView = new WebView(this); - if (Build.VERSION.SDK_INT > 18) { - mWebView.addJavascriptInterface(new wPayActivity.InJavaScriptLocalObj(this), "local_obj"); - } - // ...... - } -} -``` - -##### 1.3.2 setJavaScriptEnabled 方法调用 - -如非必要,setJavaScriptEnabled 应设置为 false 。加载本地 html ,应校验 html 页面完整性,以避免 xss 攻击。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - mWebView = new WebView(this); - mWebView.getSettings().setJavaScriptEnabled(false); - // ...... - } -} -``` - -##### 1.3.3 setAllowFileAccess 方法调用 - -建议禁止使用 File 域协议,以避免过滤不当导致敏感信息泄露。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - mWebView = new WebView(this); - mWebView.getSettings().setAllowFileAccess(false); - // ...... - } -} -``` - -##### 1.3.4 setSavePassword 方法调用 - -建议 setSavePassword 的设置为 false ,避免明文保存网站密码。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - mWebView = new WebView(this); - mWebView.getSettings().setSavePassword(false); - // ...... - } -} -``` - -##### 1.3.5 onReceivedSslError 方法调用 - -webview 组件加载网页发生证书认证错误时,不能直接调用 handler.proceed() 忽略错误,应当处理当前场景是否符合业务预期,以避免中间人攻击劫持。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - mWebView = new WebView(this); - mWebView.setWebViewClient(new WebViewClient() { - @Override - public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { - // must check error - check_error(); - handler.proceed(); - } - } - // ...... - } -} -``` - -#### 1.4 传输安全 - -##### 1.4.1 自定义 HostnameVerifier 类 - -自定义 HostnameVerifier 类后,必须实现 verify 方法校验域名,以避免中间人攻击劫持。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - HostnameVerifier hnv = new HostnameVerifier() { - @Override - public boolean verify(String hostname, SSLSession session) { - // must to do - isValid = checkHostName(hostname); - return isValid; - } - }; - // ...... - } -} -``` - -##### 1.4.2 自定义 X509TrustManager 类 - -自定义 X509TrustManager 类后,必须实现 checkServerTrusted 方法校验服务器证书,以避免中间人攻击劫持。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - TrustManager tm = new X509TrustManager() { - public void checkServerTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - // must to do - check_server_valid(); - } - }; - // ...... - } -} -``` - -##### 1.4.3 setHostnameVerifier 方法调用 - -禁止调用 setHostnameVerifier 方法设置 ALLOW_ALL_HOSTNAME_VERIFIER 属性,以避免中间人攻击劫持。 - -```java -public class MainActivity extends Activity { - - protected void onCreate(Bundle savedInstanceState) { - // ...... - SchemeRegistry schemeregistry = new SchemeRegistry(); - SSLSocketFactory sslsocketfactory = SSLSocketFactory.getSocketFactory(); - // set STRICT_HOSTNAME_VERIFIER - sslsocketfactory.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER); - // ...... - } -} -``` - -### 2. 配置&环境 - -#### 2.1 AndroidManifest.xml 配置 - -##### 2.1.1 PermissionGroup 属性设置 - -禁止设置 PermissionGroup 属性为空。 - -##### 2.1.2 protectionLevel 属性设置 - -对于自定义权限的 protectionLevel 属性设置,建议设置为 signature 或 signatureOrSystem。 - -##### 2.1.3 【建议】sharedUserId 权限设置 - -最小范围和最小权限使用 sharedUserId 设置。 - -##### 2.1.4 【建议】allowBackup 备份设置 - -如非产品功能需要,建议设置 allowBackup 为 false。 - -```java -<application android:allowBackup="false"> -</application> -``` - -##### 2.1.5 debuggable 调试设置 - -release 版本禁止设置 debuggable 为 true。 - -```java -<application android:debuggable="false"> -</application> -``` - -## 后台类 - -### 1. 代码实现 - -#### 1.1 数据持久化 - -##### 1.1.1 SQL语句默认使用预编译并绑定变量 - -Web后台系统应默认使用预编译绑定变量的形式创建sql语句,保持查询语句和数据相分离。以从本质上避免SQL注入风险。 - -如使用Mybatis作为持久层框架,应通过\#{}语法进行参数绑定,MyBatis 会创建 `PreparedStatement` 参数占位符,并通过占位符安全地设置参数。 - -示例:JDBC - -```java -String custname = request.getParameter("name"); -String query = "SELECT * FROM user_data WHERE user_name = ? "; -PreparedStatement pstmt = connection.prepareStatement( query ); -pstmt.setString( 1, custname); -ResultSet results = pstmt.executeQuery( ); -``` - -Mybatis - -```java -<select id="queryRuleIdByApplicationId" parameterType="java.lang.String" resultType="java.lang.String"> - select rule_id from scan_rule_sqlmap_tab where application_id=#{applicationId} -</select> - -``` - -应避免外部输入未经过滤直接拼接到SQL语句中,或者通过Mybatis中的${}传入SQL语句(即使使用PreparedStatement,SQL语句直接拼接外部输入也同样有风险。例如Mybatis中部分参数通过${}传入SQL语句后实际执行时调用的是PreparedStatement.execute(),同样存在注入风险)。 - -##### 1.1.2 白名单过滤 - -对于表名、列名等无法进行预编译的场景,比如外部数据拼接到order by, group by语句中,需通过白名单的形式对数据进行校验,例如判断传入列名是否存在、升降序仅允许输入“ASC”和“DESC”、表名列名仅允许输入字符、数字、下划线等。参考示例: - -```java -public String someMethod(boolean sortOrder) { - String SQLquery = "some SQL ... order by Salary " + (sortOrder ? "ASC" : "DESC");` - ... -``` - -#### 1.2 文件操作 - -##### 1.2.1 文件类型限制 - -须在服务器端采用白名单方式对上传或下载的文件类型、大小进行严格的限制。仅允许业务所需文件类型上传,避免上传.jsp、.jspx、.class、.java等可执行文件。参考示例: - -```java - String file_name = file.getOriginalFilename(); - String[] parts = file_name.split("\\."); - String suffix = parts[parts.length - 1]; - switch (suffix){ - case "jpeg": - suffix = ".jpeg"; - break; - case "jpg": - suffix = ".jpg"; - break; - case "bmp": - suffix = ".bmp"; - break; - case "png": - suffix = ".png"; - break; - default: - //handle error - return "error"; - } -``` - -##### 1.2.2 禁止外部文件存储于可执行目录 - -禁止外部文件存储于WEB容器的可执行目录(appBase)。建议保存在专门的文件服务器中。 - -##### 1.2.3【建议】避免路径拼接 - -文件目录避免外部参数拼接。保存文件目录建议后台写死并对文件名进行校验(字符类型、长度)。建议文件保存时,将文件名替换为随机字符串。 - -##### 1.2.4 避免路径穿越 - -如因业务需要不能满足1.2.3的要求,文件路径、文件命中拼接了不可行数据,需判断请求文件名和文件路径参数中是否存在../或..\\(仅windows), 如存在应判定路径非法并拒绝请求。 - -#### 1.3 网络访问 - -##### 1.3.1 避免直接访问不可信地址 - -服务器访问不可信地址时,禁止访问私有地址段及内网域名。 - -```text -// 以RFC定义的专有网络为例,如有自定义私有网段亦应加入禁止访问列表。 -10.0.0.0/8 -172.16.0.0/12 -192.168.0.0/16 -127.0.0.0/8 -``` - -建议通过URL解析函数进行解析,获取host或者domain后通过DNS获取其IP,然后和内网地址进行比较。 - -对已校验通过地址进行访问时,应关闭跟进跳转功能。 - -参考示例: - -```java - httpConnection = (HttpURLConnection) Url.openConnection(); - - httpConnection.setFollowRedirects(false); -``` - -#### 1.4 XML读写 - -##### 1.4.1 XML解析器关闭DTD解析 - -读取外部传入XML文件时,XML解析器初始化过程中设置关闭DTD解析。 - -参考示例: - -javax.xml.parsers.DocumentBuilderFactory - -```java -DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); -try { - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); - dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - dbf.setXIncludeAware(false); - dbf.setExpandEntityReferences(false); - …… -} -``` - -org.dom4j.io.SAXReader - -```java -saxReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); -saxReader.setFeature("http://xml.org/sax/features/external-general-entities", false); -saxReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); -``` - -org.jdom2.input.SAXBuilder - -```java -SAXBuilder builder = new SAXBuilder(); -builder.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true); -builder.setFeature("http://xml.org/sax/features/external-general-entities", false); -builder.setFeature("http://xml.org/sax/features/external-parameter-entities", false); -Document doc = builder.build(new File(fileName)); -``` - -org.xml.sax.XMLReader - -```java -XMLReader reader = XMLReaderFactory.createXMLReader(); -reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); -reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); -reader.setFeature("http://xml.org/sax/features/external-general-entities", false); -reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); -``` - -#### 1.5 响应输出 - -##### 1.5.1 设置正确的HTTP响应包类型 - -响应包的HTTP头“Content-Type”必须正确配置响应包的类型,禁止非HTML类型的响应包设置为“text/html”。此举会使浏览器在直接访问链接时,将非HTML格式的返回报文当做HTML解析,增加反射型XSS的触发几率。 - -##### 1.5.2【建议】设置安全的HTTP响应头 - -- X-Content-Type-Options: - -​ 建议添加“X-Content-Type-Options”响应头并将其值设置为“nosniff”,可避免部分浏览器根据其“Content-Sniff”特性,将一些非“text/html”类型的响应作为HTML解析,增加反射型XSS的触发几率。 - -- HttpOnly: - -​ 控制用户登录鉴权的Cookie字段 应当设置HttpOnly属性以防止被XSS漏洞/JavaScript操纵泄漏。 - -- X-Frame-Options: - -​ 设置X-Frame-Options响应头,并根据需求合理设置其允许范围。该头用于指示浏览器禁止当前页面在frame、iframe、embed等标签中展现。从而避免点击劫持问题。它有三个可选的值: -​ DENY: 浏览器会拒绝当前页面加载任何frame页面; -​ SAMEORIGIN:则frame页面的地址只能为同源域名下的页面 -​ ALLOW-FROM origin:可以定义允许frame加载的页面地址。 - -- Access-Control-Allow-Origin - - 当需要配置CORS跨域时,应对请求头的Origin值做严格过滤。 - - ```java - ... - String currentOrigin = request.getHeader("Origin"); - if (currentOrigin.equals("https://domain.qq.com")) { - response.setHeader("Access-Control-Allow-Origin", currentOrigin); - } - ... - ``` - -##### 1.5.3 外部输入拼接到response页面前进行编码处理 - -当响应“content-type”为“html”类型时,外部输入拼接到响应包中,需根据输出位置进行编码处理。编码规则: - -| 场景 | 编码规则 | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| 输出点在HTML标签之间 | 需要对以下6个特殊字符进行HTML实体编码(&, <, >, ", ',/)。<br/>示例:<br/>& --> &amp;<br/>< --> &lt;<br/>>--> &gt;<br/>" --> &quot;<br/>' --> &#x27; <br/>/ --> &#x2F; | -| 输出点在HTML标签普通属性内(如href、src、style等,on事件除外) | 要对数据进行HTML属性编码。<br/>编码规则:除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为&#xHH;(以&#x开头,HH则是指该字符对应的十六进制数字,分号作为结束符) | -| 输出点在JS内的数据中 | 需要进行js编码<br/>编码规则:<br/>除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \xHH (以 \x 开头,HH则是指该字符对应的十六进制数字)<br/>Tips:这种场景仅限于外部数据拼接在js里被引号括起来的变量值中。除此之外禁止直接将代码拼接在js代码中。 | -| 输出点在CSS中(Style属性) | 需要进行CSS编码<br/>编码规则:<br/>除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \HH (以 \ 开头,HH则是指该字符对应的十六进制数字) | -| 输出点在URL属性中 | 对这些数据进行URL编码<br/>Tips:除此之外,所有链接类属性应该校验其协议。禁止JavaScript、data和Vb伪协议。 | - -以上编码规则相对较为繁琐,可参考或直接使用业界已有成熟第三方库如ESAPI.其提供以下函数对象上表中的编码规则: - -```java -ESAPI.encoder().encodeForHTML(); -ESAPI.encoder().encodeForHTMLAttribute(); -ESAPI.encoder().encodeForJavaScript(); -ESAPI.encoder().encodeForCSS(); -ESAPI.encoder().encodeForURL(); -``` - -##### 1.5.4 外部输入拼接到HTTP响应头中需进行过滤 - -应尽量避免外部可控参数拼接到HTTP响应头中,如业务需要则需要过滤掉“\r”、"\n"等换行符,或者拒绝携带换行符号的外部输入。 - -##### 1.5.5 避免不可信域名的302跳转 - -如果对外部传入域名进行302跳转,必须设置可信域名列表并对传入域名进行校验。 - -为避免校验被绕过,应避免直接对URL进行字符串匹配。应通过通过URL解析函数进行解析,获取host或者domain后和白名单进行比较。 - -需要注意的是,由于浏览器的容错机制,域名`https://www.qq.com\www.bbb.com`中的`\`会被替换成`/`,最终跳转到`www.qq.com`。而Java的域名解析函数则无此特性。为避免解析不一致导致绕过,建议对host中的`/`和`#`进行替换。 - -参考代码: - -```java -String host=""; - try { - url = url.replaceAll("[\\\\#]","/"); //替换掉反斜线和井号 - host = new URL(url).getHost(); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - if (host.endsWith(".qq.com")){ - //跳转操作 - }else{ - return; - } -``` - -##### 1.5.6 避免通过Jsonp传输非公开敏感信息 - -jsonp请求再被CSRF攻击时,其响应包可被攻击方劫持导致信息泄露。应避免通过jsonp传输非公开的敏感信息,例如用户隐私信息、身份凭证等。 - -##### 1.5.7 限定JSONP接口的callback字符集范围 - -JSONP接口的callback函数名为固定白名单。如callback函数名可用户自定义,应限制函数名仅包含 字母、数字和下划线。如:`[a-zA-Z0-9_-]+` - -##### 1.5.8 屏蔽异常栈 - -应用程序出现异常时,禁止将数据库版本、数据库结构、操作系统版本、堆栈跟踪、文件名和路径信息、SQL 查询字符串等对攻击者有用的信息返回给客户端。建议重定向到一个统一、默认的错误提示页面,进行信息过滤。 - -##### 1.5.9 模板&表达式 - -web view层通常通过模板技术或者表达式引擎来实现界面与业务数据分离,比如jsp中的EL表达式。这些引擎通常可执行敏感操作,如果外部不可信数据未经过滤拼接到表达式中进行解析。则可能造成严重漏洞。 - -下列是基于EL表达式注入漏洞的演示demo: - -```java - @RequestMapping("/ELdemo") - @ResponseBody - public String ELdemo(RepeatDTO repeat) { - ExpressionFactory expressionFactory = new ExpressionFactoryImpl(); - SimpleContext simpleContext = new SimpleContext(); - String exp = "${"+repeat.getel()+"}"; - ValueExpression valueExpression = expressionFactory.createValueExpression(simpleContext, exp, String.class); - return valueExpression.getValue(simpleContext).toString(); - } -``` - -外部可通过el参数,将不可信输入拼接到EL表达式中并解析。 - -此时外部访问:x.x.x.x/ELdemo?el=”''.getClass().forName('java.lang.Runtime').getMethod('exec',''.getClass()).invoke(''.getClass().forName('java.lang.Runtime').getMethod('getRuntime').invoke(null),'open /Applications/Calculator.app')“ 可执行操作系统命令调出计算器。 - - 基于以上风险: - -- 应避免外部输入的内容拼接到EL表达式或其他表达式引起、模板引擎进行解析。 -- 白名单过滤外部输入,仅允许字符、数字、下划线等。 - -#### 1.6 OS命令执行 - -##### 1.6.1【建议】避免不可信数据拼接操作系统命令 - -当不可信数据存在时,应尽量避免外部数据拼接到操作系统命令使用 `Runtime` 和 `ProcessBuilder` 来执行。优先使用其他同类操作进行代替,比如通过文件系统API进行文件操作而非直接调用操作系统命令。 - -##### 1.6.2 避免创建SHELL操作 - -如无法避免直接访问操作系统命令,需要严格管理外部传入参数,使不可信数据仅作为执行命令的参数而非命令。 - -- 禁止外部数据直接直接作为操作系统命令执行。 - -- 避免通过"cmd"、“bash”、“sh”等命令创建shell后拼接外部数据来执行操作系统命令。 - -- 对外部传入数据进行过滤。可通过白名单限制字符类型,仅允许字符、数字、下划线;或过滤转义以下符号:|;&$><`(反引号)\! - - 白名单示例: - - ```java - private static final Pattern FILTER_PATTERN = Pattern.compile("[0-9A-Za-z_]+"); - if (!FILTER_PATTERN.matcher(input).matches()) { - // 终止当前请求的处理 - } - ``` - -#### 1.7 会话管理 - -##### 1.7.1 非一次有效身份凭证禁止在URL中传输 - -身份凭证禁止在URL中传输,一次有效的身份凭证除外(如CAS中的st)。 - -##### 1.7.2 避免未经校验的数据直接给会话赋值 - -防止会话信息被篡改,如恶意用户通过URL篡改手机号码等。 - -#### 1.8 加解密 - -##### 1.8.1【建议】对称加密 - -建议使用AES,秘钥长度128位以上。禁止使用DES算法,由于秘钥太短,其为目前已知不安全加密算法。使用AES加密算法请参考以下注意事项: - -- AES算法如果采用CBC模式:每次加密时IV必须采用密码学安全的伪随机发生器(如/dev/urandom),禁止填充全0等固定值。 -- AES算法如采用GCM模式,nonce须采用密码学安全的伪随机数 -- AES算法避免使用ECB模式,推荐使用GCM模式。 - -##### 1.8.2【建议】非对称加密 - -建议使用RSA算法,秘钥2048及以上。 - -##### 1.8.3【建议】哈希算法 - -哈希算法推荐使用SHA-2及以上。对于签名场景,应使用HMAC算法。如果采用字符串拼接盐值后哈希的方式,禁止将盐值置于字符串开头,以避免哈希长度拓展攻击。 - -##### 1.8.4【建议】密码存储策略 - -建议采用随机盐+明文密码进行多轮哈希后存储密码。 - -#### 1.9 查询业务 - -##### 1.9.1 返回信息最小化 - -返回用户信息应遵循最小化原则,避免将业务需求之外的用户信息返回到前端。 - -##### 1.9.2 个人敏感信息脱敏展示 - -在满足业务需求的情况下,个人敏感信息需脱敏展示,如: - -- 鉴权信息(如口令、密保答案、生理标识等)不允许展示 -- 身份证只显示第一位和最后一位字符,如3****************1。 -- 移动电话号码隐藏中间6位字符,如134******48。 -- 工作地址/家庭地址最多显示到“区”一级。 -- 银行卡号仅显示最后4位字符,如************8639 - -##### 1.9.3 数据权限校验 - -查询个人非公开信息时,需要对当前访问账号进行数据权限校验。 - -1. 验证当前用户的登录态 -2. 从可信结构中获取经过校验的当前请求账号的身份信息(如:session)。禁止从用户请求参数或Cookie中获取外部传入不可信用户身份直接进行查询。 -3. 验当前用户是否具备访问数据的权限 - -#### 1.10 操作业务 - -##### 1.10.1 部署CSRF防御机制 - -CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的攻击之一。对于可重放的敏感操作请求,需部署CSRF防御机制。可参考以下两种常见的CSRF防御方式 - -- 设置CSRF Token - - 服务端给合法的客户颁发CSRF Token,客户端在发送请求时携带该token供服务端校验,服务端拒绝token验证不通过的请求。以此来防止第三方构造合法的恶意操作链接。Token的作用域可以是Request级或者Session级。下面以Session级CSRF Token进行示例 - - 1. 登录成功后颁发Token,并同时存储在服务端Session中 - - ```java - String uuidToken = UUID.randomUUID().toString(); - map.put("token", uuidToken); - request.getSession().setAttribute("token",uuidToken ); - return map; - ``` - - 2. 创建Filter - - ```java - public class CsrfFilter implements Filter { - ... - HttpSession session = req.getSession(); - Object token = session.getAttribute("token"); - String requestToken = req.getParameter("token"); - if(StringUtils.isBlank(requestToken) || !requestToken.equals(token)){ - AjaxResponseWriter.write(req, resp, ServiceStatusEnum.ILLEGAL_TOKEN, "非法的token"); - return; - } - ... - ``` - - ​ CSRF Token应具备随机性,保证其不可预测和枚举。另外由于浏览器会自动对表单所访问的域名添加相应的cookie信息,所以CSRF Token不应该通过Cookie传输。 - -- 校验Referer头 - - 通过检查HTTP请求的Referer字段是否属于本站域名,非本站域名的请求进行拒绝。 - - 这种校验方式需要注意两点: - - 1. 要需要处理Referer为空的情况,当Referer为空则拒绝请求 - 2. 注意避免例如qq.com.evil.com 部分匹配的情况。 - -##### 1.10.2 权限校验 - -对于非公共操作,应当校验当前访问账号进行操作权限(常见于CMS)和数据权限校验。 - -1. 验证当前用户的登录态 -2. 从可信结构中获取经过校验的当前请求账号的身份信息(如:session)。禁止从用户请求参数或Cookie中获取外部传入不可信用户身份直接进行查询。 -3. 校验当前用户是否具备该操作权限 -4. 校验当前用户是否具备所操作数据的权限。避免越权。 - -##### 1.10.3【建议】加锁操作 - -对于有次数限制的操作,比如抽奖。如果操作的过程中资源访问未正确加锁。在高并发的情况下可能造成条件竞争,导致实际操作成功次数多于用户实际操作资格次数。此类操作应加锁处理。 diff --git a/group/organization/Tencent/腾讯代码安全指南/Python安全指南.md b/group/organization/Tencent/腾讯代码安全指南/Python安全指南.md deleted file mode 100644 index 004a2646..00000000 --- a/group/organization/Tencent/腾讯代码安全指南/Python安全指南.md +++ /dev/null @@ -1,457 +0,0 @@ ---- -id: Python 安全指南 -title: Python 安全指南 -sidebar_position: 5 -data: 2022年5月30日 ---- - -# 通用类 - -## 1. 代码实现 - -### 1.1 加密算法 - -#### 1.1.1 避免使用不安全的对称加密算法 - -- DES和3DES已经不再适用于现代应用程序,应改为使用AES。 - -### 1.2 程序日志 - -#### 1.2.1 【建议】对每个重要行为都记录日志 - -- 确保重要行为都记录日志,且可靠保存6个月以上。 - -#### 1.2.2 【建议】禁止将未经验证的用户输入直接记录日志 - -- 当日志条目包含未经净化的用户输入时会引发记录注入漏洞。恶意用户会插入伪造的日志数据,从而让系统管理员以为是系统行为。 - -#### 1.2.3 【建议】避免在日志中保存敏感信息 - -- 不能在日志保存密码(包括明文密码和密文密码)、密钥和其它敏感信息 - -### 1.3 系统口令 - -#### 1.3.1 禁止使用空口令、弱口令、已泄露口令 - -#### 1.3.2 口令强度要求 - -> 口令强度须同时满足: -> -> 1. 密码长度大于14位 -> 2. 必须包含下列元素:大小写英文字母、数字、特殊字符 -> 3. 不得使用各系统、程序的默认初始密码 -> 4. 不能与最近6次使用过的密码重复 -> 5. 不得与其他外部系统使用相同的密码 - -#### 1.3.3 【必须】口令存储安全 - -- 禁止明文存储口令 -- 禁止使用弱密码学算法(如DES和3DES)加密存储口令 -- 使用不可逆算法和随机salt对口令进行加密存储 - -#### 1.3.4 禁止传递明文口令 - -#### 1.3.5 禁止在不安全的信道中传输口令 - -## 2. 配置&环境 - -### 2.1 Python版本选择 - -#### 2.1.1 【建议】使用Python 3.6+的版本 - -- 新增的项目应使用 Python 3.6+ - -> **为什么要这么做?** -> 由于 Python 2 在 [2020 年停止维护](https://www.python.org/doc/sunset-python-2/),相关组件的漏洞不能得到及时修复与维护 - -### 2.2 第三方包安全 - -#### 2.2.2 禁止使用不安全的组件 - -### 2.3 配置信息 - -#### 2.3.1 密钥存储安全 - -- 在使用对称密码算法时,需要保护好加密密钥。当算法涉及敏感、业务数据时,可通过非对称算法协商加密密钥。其他较为不敏感的数据加密,可以通过变换算法等方式保护密钥。 - -#### 2.3.2 禁止硬编码敏感配置 - -- 禁止在源码中硬编码AK/SK、IP、数据库账密等配置信息 -- 应使用配置系统或KMS密钥管理系统。 - -# 后台类 - -## 1. 代码实现 - -### 1.1 输入验证 - -#### 1.1.1 按类型进行数据校验 - -- 所有程序外部输入的参数值,应进行数据校验。校验内容包括但不限于:数据长度、数据范围、数据类型与格式。校验不通过,应拒绝。 - -- 推荐使用组件:[Cerberus](https://github.com/pyeve/cerberus)、[jsonschema](https://github.com/Julian/jsonschema)、[Django-Validators](https://docs.djangoproject.com/en/dev/ref/validators/) - -```python -# Cerberus示例 -v = Validator({'name': {'type': 'string'}}) -v.validate({'name': 'john doe'}) - -# jsonschema示例 -schema = { - "type" : "object", - "properties" : { - "price" : {"type" : "number"}, - "name" : {"type" : "string"}, - }, -} - -validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema) -``` - -### 1.2 SQL操作 - -#### 1.2.1 使用参数化查询 - -- 使用参数化SQL语句,强制区分数据和命令,避免产生SQL注入漏洞。 - -```python -# 错误示例 -import mysql.connector - -mydb = mysql.connector.connect( -... ... -) - -cur = mydb.cursor() -userid = get_id_from_user() -# 使用%直接格式化字符串拼接SQL语句 -cur.execute("SELECT `id`, `password` FROM `auth_user` WHERE `id`=%s " % (userid,)) -myresult = cur.fetchall() -``` - -```python -# 安全示例 -import mysql.connector - -mydb = mysql.connector.connect( -... ... -) -cur = mydb.cursor() -userid = get_id_from_user() -# 将元组以参数的形式传入 -cur.execute("SELECT `id`, `password` FROM `auth_user` WHERE `id`=%s " , (userid,)) -myresult = cur.fetchall() -``` - -- 推荐使用ORM框架来操作数据库,如:使用`SQLAlchemy`。 - -```python -# 安装sqlalchemy并初始化数据库连接 -# pip install sqlalchemy -from sqlalchemy import create_engine -# 初始化数据库连接,修改为你的数据库用户名和密码 -engine = create_engine('mysql+mysqlconnector://user:password@host:port/DATABASE') -``` - -```python -# 引用数据类型 -from sqlalchemy import Column, String, Integer, Float -from sqlalchemy.ext.declarative import declarative_base - -Base = declarative_base() -# 定义 Player 对象: -class Player(Base): - # 表的名字: - __tablename__ = 'player' - - # 表的结构: - player_id = Column(Integer, primary_key=True, autoincrement=True) - team_id = Column(Integer) - player_name = Column(String(255)) - height = Column(Float(3, 2)) -``` - -```python -# 增删改查 -from sqlalchemy.orm import sessionmaker -# 创建 DBSession 类型: -DBSession = sessionmaker(bind=engine) -# 创建 session 对象: -session = DBSession() - -# 增: -new_player = Player(team_id=101, player_name="Tom", height=1.98) -session.add(new_player) -# 删: -row = session.query(Player).filter(Player.player_name=="Tom").first() -session.delete(row) -# 改: -row = session.query(Player).filter(Player.player_name=="Tom").first() -row.height = 1.99 -# 查: -rows = session.query(Player).filter(Player.height >= 1.88).all() - -# 提交即保存到数据库: -session.commit() -# 关闭 session: -session.close() -``` - -#### 1.2.2 对参数进行过滤 - -- 将接受到的外部参数动态拼接到SQL语句时,必须对参数进行安全过滤。 - -```python -def sql_filter(sql, max_length=20): - dirty_stuff = ["\"", "\\", "/", "*", "'", "=", "-", "#", ";", "<", ">", "+", - "&", "$", "(", ")", "%", "@", ","] - for stuff in dirty_stuff: - sql = sql.replace(stuff, "x") - return sql[:max_length] -``` - -### 1.3 执行命令 - -#### 1.3.1 【建议】避免直接调用函数执行系统命令 - -- 相关功能的实现应避免直接调用系统命令(如`os.system()`、`os.popen()`、`subprocess.call()`等),优先使用其他同类操作进行代替,比如:通过文件系统API进行文件操作而非直接调用操作系统命令 -- 如评估无法避免,执行命令应避免拼接外部数据,同时进行执行命令的白名单限制。 - -#### 1.3.2 过滤传入命令执行函数的字符 - -- 程序调用各类函数执行系统命令时,如果涉及的命令由外部传入,过滤传入命令执行函数的字符。 - -```python -import os -import sys -import shlex - -domain = sys.argv[1] -# 替换可以用来注入命令的字符为空 -badchars = "\n&;|'\"$()`-" -for char in badchars: - domain = domain.replace(char, " ") - -result = os.system("nslookup " + shlex.quote(domain)) -``` - -#### 1.3.3 禁止不安全的代码执行 - -- 禁止使用 `eval` 函数处理存在外部输入的数据。 - -### 1.4 文件操作 - -#### 1.4.1 文件类型限制 - -- 通过白名单对上传或者下载的文件类型、大小进行严格校验。仅允许业务所需文件类型上传,避免上传木马、WebShell等文件。 - -```python -import os - -ALLOWED_EXTENSIONS = ['txt','jpg','png'] - -def allowed_file(filename): - if ('.' in filename and - '..' not in filename and - os.path.splitext(filename)[1].lower() in ALLOWED_EXTENSIONS): - - return filename - return None -``` - -#### 1.4.2 禁止外部文件存储于可执行目录 - -- 禁止外部文件存储于WEB容器的可执行目录(appBase)。建议使用 [tempfile](https://docs.python.org/3/library/tempfile.html) 库处理临时文件和临时目录。 - -#### 1.4.3 避免路径穿越 - -- 保存在本地文件系统时,必须对路径进行合法校验,避免目录穿越漏洞 - -```python -import os - -upload_dir = '/tmp/upload/' # 预期的上传目录 -file_name = '../../etc/hosts' # 用户传入的文件名 -absolute_path = os.path.join(upload_dir, file_name) # /tmp/upload/../../etc/hosts -normalized_path = os.path.normpath(absolute_path) # /etc/hosts -if not normalized_path.startswith(upload_dir): # 检查最终路径是否在预期的上传目录中 - raise IOError() -``` - -#### 1.4.4 禁用XML外部实体的方法 - -- 禁用XML外部实体的方法,来预防XXE攻击。 - - ```python - from lxml import etree - - xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False)) - ``` - -#### 1.4.5 禁用不安全的反序列化函数 - -- 禁用`yaml.unsafe_load()`函数反序列化YAML数据,来避免反序列化漏洞执行漏洞。 - -#### 1.4.6 【建议】避免路径拼接 - -- 文件目录避免外部参数拼接。保存文件目录建议后台写死并对文件名进行校验(字符类型、长度)。 - -#### 1.4.7 【建议】文件名hash化处理 - -- 建议文件保存时,将文件名替换为随机字符串。 - -```python -import uuid - -def random_filename(filename): - ext = os.path.splitext(filename)[1] - new_filename = uuid.uuid4().hex + ext - return new_filename -``` - -### 1.5 网络请求 - -#### 1.5.1 限定访问网络资源地址范围 - -当程序需要从用户指定的`URL地址获取网页文本内容`、`加载指定地址的图片`、`进行下载`等操作时,需要对URL地址进行安全校验: - -1. 只允许HTTP或HTTPS协议 - -2. 解析目标URL,获取其host - -3. 解析host,获取host指向的IP地址转换成long型 - -4. 检查IP地址是否为内网IP - -```python -# 以RFC定义的专有网络为例,如有自定义私有网段亦应加入禁止访问列表。 -10.0.0.0/8 -172.16.0.0/12 -192.168.0.0/16 -127.0.0.0/8 -``` - -5. 请求URL - -6. 如果有跳转,跳转后执行1,否则对URL发起请求 - -### 1.6 响应输出 - -#### 1.6.1 设置正确的HTTP响应包类型 - -响应包的HTTP头“Content-Type”必须正确配置响应包的类型,禁止非HTML类型的响应包设置为“text/html”。 - -#### 1.6.2 设置安全的HTTP响应头 - -- X-Content-Type-Options - - 添加“X-Content-Type-Options”响应头并将其值设置为“nosniff ” - -- HttpOnly - 控制用户登鉴权的Cookie字段 应当设置HttpOnly属性以防止被XSS漏洞/JavaScript操纵泄漏。 - -- X-Frame-Options - - 设置X-Frame-Options响应头,并根据需求合理设置其允许范围。该头用于指示浏览器禁止当前页面在frame、 iframe、embed等标签中展现。从而避免点击劫持问题。它有三个可选的值: DENY: 浏览器会拒绝当前页面加 载任何frame页面; SAMEORIGIN:则frame页面的地址只能为同源域名下的页面 ALLOW-FROM origin:可以定 义允许frame加载的页面地址。 - -#### 1.6.3 对外输出页面包含第三方数据时须进行编码处理 - -- 当响应“Content-Type”为“text/html”类型时,需要对响应体进行编码处理 - -```python -# 推荐使用mozilla维护的bleach库来进行过滤 -import bleach -bleach.clean('an <script>evil()</script> example') -# u'an <script>evil()</script> example' -``` - -### 1.7 数据输出 - -#### 1.7.1 敏感数据加密存储 - -- 敏感数据应使用SHA2、RSA等算法进行加密存储 -- 敏感数据应使用独立的存储层,并在访问层开启访问控制 -- 包含敏感信息的临时文件或缓存一旦不再需要应立刻删除 - -#### 1.7.2 敏感信息必须由后台进行脱敏处理 - -- 敏感信息须再后台进行脱敏后返回,禁止接口返回敏感信息交由前端/客户端进行脱敏处理。 - -#### 1.7.3 高敏感信息禁止存储、展示 - -- 口令、密保答案、生理标识等鉴权信息禁止展示 -- 非金融类业务,信用卡cvv码及日志禁止存储 - -#### 1.7.4 个人敏感信息脱敏展示 - -在满足业务需求的情况下,个人敏感信息需脱敏展示。 - -- 身份证只显示第一位和最后一位字符,如3****************1。 -- 移动电话号码隐藏中间6位字符,如134******48。 -- 工作地址/家庭地址最多显示到“区”一级。 -- 银行卡号仅显示最后4位字符,如************8639 - -#### 1.7.5 隐藏后台地址 - -- 若程序对外提供了登录后台地址,应使用随机字符串隐藏地址。 - -```python -# 不要采取这种方式 -admin_login_url = "xxxx/login" -``` - -```python -# 安全示例 -admin_login_url = "xxxx/ranD0Str" -``` - -### 1.8 权限管理 - -#### 1.8.1 默认鉴权 - -- 除非资源完全可对外开放,否则系统默认进行身份认证(使用白名单的方式放开不需要认证的接口或页面)。 - -#### 1.8.2 授权遵循最小权限原则 - -- 程序默认用户应不具备任何操作权限。 - -#### 1.8.3 避免越权访问 - -- 对于非公共操作,应当校验当前访问账号进行操作权限(常见于CMS)和数据权限校验。 - -1. 验证当前用户的登录态; -2. 从可信结构中获取经过校验的当前请求账号的身份信息(如:session),禁止从用户请求参数或Cookie中获取外部传入不可信用户身份直接进行查询; -3. 校验当前用户是否具备该操作权限; -4. 校验当前用户是否具备所操作数据的权限; -5. 校验当前操作是否账户是否预期账户。 - -#### 1.8.4 【建议】及时清理不需要的权限 - -- 程序应定期清理非必需用户的权限。 - -### 1.9 异常处理 - -#### 1.9.1 不向对外错误提示 - -- 应合理使用`try/except/finally` 处理系统异常,避免出错信息输出到前端。 -- 对外环境禁止开启debug模式,或将程序运行日志输出到前端。 - -#### 1.9.2 禁止异常抛出敏感信息 - -### 1.10 Flask安全 - -#### 1.10.1 生产环境关闭调试模式 - -#### 1.10.2 【建议】遵循Flask安全规范 - -- 参考Flask文档中的安全注意事项 <https://flask.palletsprojects.com/en/latest/security/> - -### 1.11 Django安全 - -#### 1.11.1 生产环境关闭调试模式 - -#### 1.11.2 【建议】保持Django自带的安全特性开启 - -- 保持Django自带的安全特性开启 <https://docs.djangoproject.com/en/3.0/topics/security/> - -- 在默认配置下,Django自带的安全特性对XSS、CSRF、SQL注入、点击劫持等类型漏洞可以起到较好防护效果。应尽量避免关闭这些安全特性。 diff --git a/group/organization/Tencent/腾讯代码安全指南/腾讯代码安全指南.md b/group/organization/Tencent/腾讯代码安全指南/腾讯代码安全指南.md deleted file mode 100644 index 7af51492..00000000 --- a/group/organization/Tencent/腾讯代码安全指南/腾讯代码安全指南.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: 腾讯代码安全指南 -title: 腾讯代码安全指南 -sidebar_position: 1 -data: 2022年5月30日 ---- - -面向开发人员梳理的代码安全指南,旨在梳理API层面的风险点并提供详实可行的安全编码方案。 - - -仓库地址:**[secguide](https://github.com/Tencent/secguide)** - -| 规范 | 最后修订日期 | -| ------------------------------------------------------------ | ------------ | -| [C/C++安全指南](https://github.com/Tencent/secguide/blob/main/C,C++安全指南.md) | 2021-05-18 | -| [JavaScript安全指南](https://github.com/Tencent/secguide/blob/main/JavaScript安全指南.md#1) | 2021-05-18 | -| [Node安全指南](https://github.com/Tencent/secguide/blob/main/JavaScript安全指南.md#2) | 2021-05-18 | -| [Go安全指南](https://github.com/Tencent/secguide/blob/main/Go安全指南.md) | 2021-05-18 | -| [Java安全指南](https://github.com/Tencent/secguide/blob/main/Java安全指南.md) | 2021-05-18 | -| [Python安全指南](https://github.com/Tencent/secguide/blob/main/Python安全指南.md) | 2021-05-18 | - diff --git a/group/organization/home.md b/group/organization/home.md deleted file mode 100644 index ebee7bd7..00000000 --- a/group/organization/home.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -slug: / -sidebar_position: 1 -id: home -title: 自由社区 ---- - -![LINUX-LOGO](https://static.7wate.com/img/2022/07/11/12a2479f79708.png) - -Always For Freedom. diff --git a/journal/home.md b/journal/home.md deleted file mode 100644 index edcb4cdc..00000000 --- a/journal/home.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -记录生活日志 ~ - diff --git a/life/home.md b/life/home.md deleted file mode 100644 index c18694d9..00000000 --- a/life/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -记录归类平时生活中的小笔记 ~ 🤩🤩🤩 - - - diff --git a/life/健身/上肢训练.md b/life/健身/上肢训练.md deleted file mode 100644 index 969eeb23..00000000 --- a/life/健身/上肢训练.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -id: 上肢训练 -title: 上肢训练 -sidebar_position: 3 -data: 2022年06月16日 ---- - -## 俯卧撑 - -### 标准俯卧撑 - -![标准俯卧撑](https://static.7wate.com/img/2022/06/16/dc6f6e642c9d9.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/16/930af0e8bd435.jpg) - -1、挺胸收腹,躯干与腿部保持一条直线 - -2、手臂自然伸直垂直于地面 - -![标准动作](https://static.7wate.com/img/2022/06/16/c677aa8962a8e.jpg) - -1、双手与肩同宽,始终保持腰背挺直,控制肘部紧贴身体两侧 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/16/f49fc135b4b14.png) - -### 宽距俯卧撑 - -![宽距俯卧撑](https://static.7wate.com/img/2022/06/17/1b092fe7a87fa.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/17/daa600436c9b7.jpg) - -1、挺胸收腹,腰背平直 - -2、双手略宽于肩,拇指向外 - -![标准动作](https://static.7wate.com/img/2022/06/17/c4ee5b27e7734.jpg) - -1、下撑至大臂与地面平行 - -2、躯干与腿部始终在同一平面 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/0e72d5648c0b8.png) - -### 钻石俯卧撑 - -![钻石俯卧撑](https://static.7wate.com/img/2022/06/17/19954e8b5da3a.gif) - -#### 动作要领 - -![标准动作](https://static.7wate.com/img/2022/06/17/ff8d5d6127558.jpg) - -1、挺胸收腹,腰背平直 - -2、手掌并拢虎口相对 - -3、躯干与腿部始终在同一平面 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/b8e89f4f64e09.png) - -### 雨刷式 - -![雨刷式](https://static.7wate.com/img/2022/06/17/78104a938239e.gif) - -#### 动作要领 - -1. 面朝下俯撑在地板上,身体挺直,腹部收紧,脚尖着地。手臂弯曲支撑身体,双手间距比肩略宽。这是动作的起始位置。 -2. 将身体向一侧倾斜,该侧的手臂弯曲程度增大以支撑身体,另一只手臂的弯曲程度则随之变小。 -3. 然后反转方向,重复以上动作。看起来就像是汽车的雨刮刷在来回摆动。 -4. 两边交替重复动作至推荐次数。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/62079b0a9e105.png) - -## 弹力带 - -### 弹力带推胸 - -![弹力带推胸](https://static.7wate.com/img/2022/06/17/c90b39d4d43f5.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/17/a0123e87c91f4.jpg) - -1、将弹力绳绕过身体,肘关节打开90度并使弹力绳保持张力,这是起始位置。 - -![标准动作](https://static.7wate.com/img/2022/06/17/3957a90f53362.jpg) - -1、收缩胸大肌推起弹力绳,使手臂自然伸直但不锁死, 在顶峰稍作停留,缓缓还原,直到肘关节成90度即可。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/38eba52095bd5.png) - -### 站姿平举推胸 - -![站姿平举推胸](https://static.7wate.com/img/2022/06/17/8df4993c8c2a9.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/17/3d1bf99f10839.jpg) - -1、两脚分立并且踩着弹力绳,双手自然下垂握紧弹力绳。 - -![标准动作](https://static.7wate.com/img/2022/06/17/e9b43e62def82.jpg) - -1、保持手臂微屈,收缩三角肌把前臂抬起到水平位置,然后水平向后拉动肘关节并且保持肘关节90度,直到大臂回到和身体同一平面,收缩胸大肌使手臂向前水平推出。再缓缓还原到起始位置。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/f3a99ac7cc684.png) - -### 跨越 - -![跨越](https://static.7wate.com/img/2022/06/17/ced500d7a7de4.gif) - -#### 动作要领 - -1. 将一根练习用的弹力带绕过一根牢固的柱子。 -2. 背对柱子,握住弹力带末端的两个把手,向前走几步直到使得弹力带有足够的张力。 -3. 向两侧举起手臂,使得手臂与地面平行,与躯干垂直(你的躯干应该和手臂呈现一个T字型)掌心向前,手臂伸直,有轻微弯曲。这将是你的起始动作。 -4. 在挺直手臂的同时,将手臂划一个半圆将它们拉伸到你的胸前,在做这个动作的时候同时呼气并且弯曲胸大肌。感受到紧缩感时候停留片刻。 -5. 缓慢回到初始动作,同时吸气。 -6. 重复做这个动作至推荐次数。 - -变化: 这个训练也可以使用滑轮来练习。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/59ca167475674.png) - -## 飞鸟 - -### 水平飞鸟 - -![水平飞鸟](https://static.7wate.com/img/2022/06/17/5ee669ec80409.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/17/7e3330cadd35c.jpg) - -1、两手打开与肩同宽,掌心相对而握。将哑铃举起,然后停止在这个位置暂停片刻,锁定这个位置,这就是你的起始姿势。 - -![标准动作](https://static.7wate.com/img/2022/06/17/d4034e8f33c40.jpg) - -1、肘部轻微弯曲,胳膊向两侧打开一个较大的弧度然后下降,直到你感受到胸部伸展,在做这个动作时同时吸气。 - -2、将手臂还原到起始位置,同时呼气并且挤压胸部肌肉。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/3e896f518f1cc.png) diff --git a/life/健身/下肢训练.md b/life/健身/下肢训练.md deleted file mode 100644 index f53d09a3..00000000 --- a/life/健身/下肢训练.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -id: 下肢训练 -title: 下肢训练 -sidebar_position: 4 -data: 2022年06月16日 ---- -## 深蹲 - -![深蹲](https://static.7wate.com/img/2022/06/17/570a7d875d3ad.gif) - -### 动作要领 - -![动作要领](https://static.7wate.com/img/2022/06/17/551ee33125e87.jpg) - -1、收紧腹部,臀部紧张 - -2、腰背平直 - -3、大腿与地面保持平衡 - -### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/83f16fd5b36ac.png) - -## 窄距深蹲 - -![窄距深蹲](https://static.7wate.com/img/2022/06/17/8cb552deee56d.gif) - -### 动作要领 - -![动作要领](https://static.7wate.com/img/2022/06/17/299cc9f4db7b2.jpg) - -1、挺胸收腹,收紧臀部 - -2、脚尖与膝盖保持同一方向 - -### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/3671cab13b3e9.png) - -## 宽距深蹲 - -![宽距深蹲](https://static.7wate.com/img/2022/06/17/e2c9e0594694f.gif) - -### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/17/6ca7d2a59479e.jpg) - -1、挺胸收腹,收紧臀部 - -![标准动作](https://static.7wate.com/img/2022/06/17/114e1d212c582.jpg) - -1、脚尖与膝盖保持同一方向 - -### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/337204f35f4b7.png) - -## 提踵 - -![提踵](https://static.7wate.com/img/2022/06/17/3f004ad0d560b.gif) - -### 动作要领 - -![标准动作](https://static.7wate.com/img/2022/06/17/00bc98b2169c7.jpg) - -1、小腿持续紧张 - -2、在最高点停留顶峰收缩 - -### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/17/453521c49dd78.png) \ No newline at end of file diff --git a/life/健身/拉伸放松.md b/life/健身/拉伸放松.md deleted file mode 100644 index 5a4f42d5..00000000 --- a/life/健身/拉伸放松.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: 拉伸放松 -title: 拉伸放松 -sidebar_position: 5 -data: 2022年06月17日 ---- - -## 拉伸 - -训练时间的 1/4 用来拉伸训练部位,不受伤的前提下尽可能地拉伸。 - -## 按摩 - -训练时间的 1/4 用来按摩训练部位,根据个人接受程度按摩,也可让他人辅助。 - -## 😎 diff --git a/life/健身/核心训练.md b/life/健身/核心训练.md deleted file mode 100644 index b458f95a..00000000 --- a/life/健身/核心训练.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -id: 核心训练 -title: 核心训练 -sidebar_position: 2 -data: 2022年05月31日 ---- - -## 初级 - -### 十字交叉 - -![十字交叉](https://static.7wate.com/img/2022/06/14/362d0f516d1ae.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/14/b366715aeb7e7.jpg) - -1、腹部持续紧张,大腿与地面垂直 - -![标准动作](https://static.7wate.com/img/2022/06/14/32bab058445e5.jpg) - -1、控制动作频率和身体稳定 - -2、肩部离地,手肘尽量靠近膝盖 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/54d1fde935708.jpg) - -### 俄罗斯转体 - -![俄罗斯转体](https://static.7wate.com/img/2022/06/14/0ac388e5cf261.gif) - -#### 动作要领 - -![标准动作](https://static.7wate.com/img/2022/06/14/35540b7b24227.jpg) - -1、腹部持续紧张 - -2、小腿与地面平行 - -3、保持动作协调与连贯 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/54d1fde935708.jpg) - -### 哑铃侧弯 - -![哑铃侧弯](https://static.7wate.com/img/2022/06/14/cbe45cf37a27e.gif) - -#### 动作要领 - -1. 身体直立,单手持一只哑铃,在身体侧面自然下垂,掌心向内。另一只手掐腰。这是动作的起始位置。 -2. 保持抬头挺胸,向掐腰的一侧尽可能多的弯腰,同时吸气。弯到极限,停留片刻,然后回到起始位置。 -3. 再保持抬头挺胸,向哑铃的一侧尽可能多的弯腰,同时吸气。弯到极限,停留片刻,然后回到起始位置。 -4. 以上是一次完整动作,重复动作至推荐次数,然后换手继续。 - -注意:如果很容易增长腹斜肌的话,就避免该练习。因为腹斜肌太宽会使你看起来不匀称。 - -变化:也可以坐在长凳上或使用杠铃进行该练习 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/4ff0c9a01796a.png) - -## 中级 - -### 仰卧举腿 - -![仰卧举腿](https://static.7wate.com/img/2022/06/14/71ca47f649fd2.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/14/de021f2ce054a.jpg) - -1、腹部持续紧张 - -2、臀部离开地面 - -![标准动作](https://static.7wate.com/img/2022/06/14/a5306d203d49e.jpg) - -1、腿部自然伸直与地面垂直 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/9696944eda185.jpg) - -### 平板支撑 - -![平板支撑](https://static.7wate.com/img/2022/06/14/be1e41b042906.png) - -#### 动作要领 - -![标准动作](https://static.7wate.com/img/2022/06/14/4aa215d25da79.jpg) - -1、肩、腰、踝关节在同一直线上 - -2、大臂垂直于地面 - -3、颈部保持自然放松 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/799a9c189cec7.png) - -### 坐姿持铃转体 - -![坐姿持铃转体](https://static.7wate.com/img/2022/06/14/cea4d259fd85f.gif) - -#### 动作要领 - -![准备动作](https://static.7wate.com/img/2022/06/14/b9a50c7c0a7f2.jpg) - -1、呈“V”字坐姿于垫子上,屈膝90度并且脚底不接触地面,将哑铃放在胸部并且双手抱住贴近身体,这个是你的起始位置。 - -![标准动作](https://static.7wate.com/img/2022/06/14/f2f7d0f6ff026.jpg) - -1、依靠腹部的力量转动躯干,保持动作不要过快。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/c6f3aaf572155.png) - -## 高级 - -### 西西里卷腹 - -![西西里卷腹](https://static.7wate.com/img/2022/06/14/dee2ad868e76a.gif) - -#### 动作要领 - -![标准动作](https://static.7wate.com/img/2022/06/14/85409c7cd94d5.jpg) - -双头举起,始终保持垂直地面,缓缓的卷起上半身,直到肩膀离开地面为止,过程中注意保持腹部持续发力 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/4f5e9cabb612a.png) - -### 过顶交替收腿 - -![过顶交替收腿](https://static.7wate.com/img/2022/06/14/7d86fe51a75cf.gif) - -#### 动作要领 - -![标准动作](http://static.ouj.com/hiyd_cms/file/9e27d7e9eef1445bbd47abaf3f417676.jpg) - -1、手臂、腿部、腹部持续发力 - -2、屈膝收腿时膝盖尽量贴近胸部 - -3、保持平衡 - -4、双腿始终悬空 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/3eb0231883983.png) - -### 健腹轮 - -![健腹轮](https://static.7wate.com/img/2022/06/14/69e85189964fe.gif) - -#### 动作要领 - -1. 双手握住健腹轮,跪在地面上。 -2. 开始姿势:将健腹轮放在自己身前的地面上,确保可以趴在地面上(同样保持跪姿)。 -3. 缓慢向前滚动健腹轮,将身体拉伸到水平位置。提示:身体尽可能靠近地面但不要碰到地面。在该过程中吸气。 -4. 身体伸展时停顿一秒,再拉动腹肌轮回到开始姿势,在这个过程中呼气。提示:保证动作缓慢进行并始终保持腹肌用力。 - -注意:这组练习不适合下背有问题的人和腰间盘突出的人。 - -变化:对于更高级的联系者,可以将向前滚动健腹轮变为沿对角线方向斜推。这样更着重练习斜腹肌。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/c15251a4288ec.png) - -### 悬垂举腿 - -![悬垂举腿](https://static.7wate.com/img/2022/06/14/5f9b4106d2288.gif) - -#### 动作要领 - -悬垂举腿的动作要领 - -1. 开始姿势:手臂伸直将自己悬挂在单杠上,使用宽握或中间握的方式。双腿伸直下垂,骨盆轻微向后。 -2. 抬起腿直到身体和腿呈90度角,呼气并坚持该动作一秒钟左右。 -3. 缓慢回到开始姿势并吸气。 -4. 重复该动作至推荐重复的次数。 - -注意:缓慢谨慎地进行该练习,因为这需要花一定时间来适应。同时,第一次练习时不要轻率的尝试加负重,双手支撑身体自重已经足够了,要学会如何平衡自己来避免身体摇摆。随着训练更加高级,可以在双脚之间夹一个哑铃。然而当加负重时要十分小心,如果加的太快太猛可能会导致疝气。 - -变化:该练习也可以在垂直长凳上进行来减小难度,这样可以使上背得到支撑并使肘部和手臂可以抓着边垫。 - -#### 肌肉示意图 - -![肌肉示意图](https://static.7wate.com/img/2022/06/14/88ca9b6fd3ae2.png) diff --git a/life/健身/热身.md b/life/健身/热身.md deleted file mode 100644 index 12727fe7..00000000 --- a/life/健身/热身.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -id: 热身 -title: 热身 -sidebar_position: 1 -data: 2022年05月31日 ---- - -## 开合跳 - -![开合跳](https://static.7wate.com/img/2022/06/14/2ab108094deed.gif) - -## 扩胸运动 - -![扩胸](https://static.7wate.com/img/2022/06/14/c2c93aa849442.gif) - -## 体前屈转体 - -![体前屈转体](https://static.7wate.com/img/2022/06/14/50efb45a25d2d.gif) - -## 原地慢跑 - -![慢跑](https://static.7wate.com/img/2022/06/14/45098a282e4cd.gif) - -## 平板支撑 diff --git a/life/健身/饮食公式.md b/life/健身/饮食公式.md deleted file mode 100644 index 4d9cebb0..00000000 --- a/life/健身/饮食公式.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: 饮食公式 -title: 饮食公式 -sidebar_position: 0.5 -data: 2022年07月13日 ---- - -## 餐食 - -**早餐** = 碳水 + 维生素 + 蛋奶制品 - -**午餐** = 碳水 + 蛋白质 + 维生素 - -**晚餐** = 蛋白质 + 维生素 + 坚果 - -### 碳水 - -白米饭(平碗 300g)、面条(平碗 300g)、燕麦(两勺 50g)、全麦面包(两片 120g)、玉米(两根 300g)、馒头(一个 120g)、红薯(两个 300g)。 - -### 维生素 - -#### 蔬菜类 - -番茄、彩椒、黄瓜、生菜、西兰花(半颗)等。 - -#### 水果类 - -苹果、香蕉、桃子、橙子、芒果、葡萄(15个)等。 - -### 蛋白质 - -鸡胸肉、猪肉、牛肉、羊肉等 - -### 坚果 - -瓜子(一小把)、花生(20个)、腰果(10个)、核桃(2个)、开心果(10个)、杏仁(10个)等 diff --git a/life/阅读/个人成长/习惯的力量(新版).md b/life/阅读/个人成长/习惯的力量(新版).md deleted file mode 100644 index 1be33287..00000000 --- a/life/阅读/个人成长/习惯的力量(新版).md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 习惯的力量(新版) -description: 本书作者综合了近20年科学家与商业对于“习惯学”的研究,包括数百篇学术研究、300多位科学家与企业管理者的访谈,以及数十家企业的实践研究成果,分三个部分探讨了个人的习惯、成功组织的习惯以及社会群体的习惯,作者都希格认为,只要掌握“习惯回路”,学习观察生活中 -keywords: - - 习惯的力量(新版) - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《习惯的力量(新版)》 -- **作者**: 查尔斯·都希格 -- **分类**: 个人成长-认知思维 -- **ISBN**:9787508674421 -- **出版社**:中信出版集团 - -## 概述 - -本书作者综合了近20年科学家与商业对于“习惯学”的研究,包括数百篇学术研究、300多位科学家与企业管理者的访谈,以及数十家企业的实践研究成果,分三个部分探讨了个人的习惯、成功组织的习惯以及社会群体的习惯,作者都希格认为,只要掌握“习惯回路”,学习观察生活中的暗示与奖赏,找到能获得成就感的正确的惯常行为,无论个人、企业,还是社会群体,都能改变根深蒂固的习惯。学会利用“习惯的力量”,就能让人生与事业焕然一新。 - -## 划线 - - -> 她以爱和鼓励教会我如何以合适的语言服务于他人。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/以极简的方式去生活.md b/life/阅读/个人成长/以极简的方式去生活.md deleted file mode 100644 index 4d9ac4da..00000000 --- a/life/阅读/个人成长/以极简的方式去生活.md +++ /dev/null @@ -1,217 +0,0 @@ ---- -title: 以极简的方式去生活 -description: 关于断舍离和极简生活的图书,市场上已经有很多了,可简叔这本《以极简的方式去生活》显然更适合我们中国的读者,首先,书中极简的道理不是灌输的,而是通过阅读一个故事,我们内心自然生发的极简概念;其次,有关极简的实操性,简叔也做了不耐其烦、走心的解说,你在实践极简 -keywords: - - 以极简的方式去生活 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《以极简的方式去生活》 -- **作者**: 杨志华 -- **分类**: 个人成长-认知思维 -- **ISBN**:9787518045853 -- **出版社**:中国纺织出版社有限公司 - -## 概述 - -关于断舍离和极简生活的图书,市场上已经有很多了,可简叔这本《以极简的方式去生活》显然更适合我们中国的读者,首先,书中极简的道理不是灌输的,而是通过阅读一个故事,我们内心自然生发的极简概念;其次,有关极简的实操性,简叔也做了不耐其烦、走心的解说,你在实践极简过程中可能遇到的疑问,简叔也作了细致的回答。如果你像我一样,单是春夏秋同的睡衣就有8件不知如何精简的话,还可以私信简叔求指导。简叔跟大张伟在北京电视台录制的生活相对论节目相当逗趣,一定会加深你对极简生活的向往,另外,简叔设计的黑白款简帽也是极好的。《以极简的方式去生活》极简主义、断舍离已经成为当今人们向往的生活方式,遗憾的是,目前市场上大部分图书反映的都是欧美或者日本的生活方式。中国青年自身的生活方式与他们既有相同,也有不同。这本书聚焦中国青年的生活特点,通过讲故事的方式,讲述一个都市女孩繁漪的人生成长过程。内容不仅涉及有形的断舍离,如服装、空间、书籍、纪念品、身材等,也包括无形的断舍离,如信息、职业、目标、语言、妒忌、旅行等,涵盖了一个人生活和工作的方方面面。本书最大的特点,就是不仅提供道理,更提供方法,让读者既可以明白其中蕴含的理论,也可以跟随阅读,即时行动起来。读完此书,相信你也会收获一个更好的自己。更专注、更投入、更幸福。杨志华(简叔)极简主义者北京断舍离文化公司创始人践行极简生活多年,潜心研究生活美学。创办微信公众号:“极简断舍离”,目前拥有数万粉丝。极简理念:足够少、足够好。Slogan:世界很大,我很小;有人爱多,我爱少。使命:让足够多的家庭和个人过上“足够少、足够好”的极简生活。坚持每天扔掉一样无用的物品。坚持365天不买衣服,已经成功一年,现进行第二年实践。目前一年四季衣服总计20件。接受《北京卫视》邀请,与艺人大张伟同居48小时,录制《生活相对论》节目。并接受《北京晚报》采访、北京文艺广播专访、担任北京卫视《暖暖的新家》录制场外嘉宾。 - -## 划线 - - -> 极简的关键在于选择,选择什么、丢弃什么,其实是一种智慧。 - -> 第一种是逃避。比如网瘾、烟瘾、酒瘾,大部分时候是因为生活压力过大,在这种上瘾的习惯里,能够短暂地脱离原来的生活空间,获得一种假性的轻松感。第二种,就是空虚, - -> 哪个都行,本质上都是一样的,这些爱好,没有你特别喜欢的,如果有,其他的爱好就不可能存在了,也没有你特别不喜欢的,如果有,你早就卸载了,所以没有十分的,也没有零分的,大部分都是五到七分的。 - -> “不役于物,自在随心” - -> 极简的三种境界是:1.扔掉所有不喜欢的,扔掉所有好像喜欢好像不喜欢的,只留下喜欢的,用喜欢的人事物一起,自然欢乐;2.有欢喜的知己,可以开怀大笑,可以相拥而泣,那么物品是否欢喜已经不那么重要;3.放下对一切外在的依赖,家徒四壁,席地而卧,且饮且歌,自由自在。 - -> 任由生活蹂躏,不如翻身站起来,去把握自己的人生。 - -> 杨振宁先生说,学海无涯“乐”作舟,要去做自己喜欢的事情,如果是苦的话,坚持下来是很难的。甚至世界上根本没有坚持这个事情,我只是持续地做自己喜欢的事情,这是很大的幸福,不需要坚持。从来没有人说“坚持享乐”,因为享乐是很美的啊,只有在痛苦无奈的时候,才提到“坚持”这个词。 - -> 1.吃饭不玩手机 - -> 2.手机不进卧室 - -> 3.上厕所不带手机 - -> 4.每天固定时间看手机 - -> 优秀的人都在现实生活里做事,而不在网络上刷手机。 - -> 完美主义者,要么不开始,要开始就希望迅速达成,这都是病。我们不需要等一切都完美才开始行动,实际上没有这样的时刻,所以永远不会开始。我们要做的是马上开始,边做边学,在实践中发现问题、解决问题。 - -> 原来不看手机,最紧张的不是别人,而是自己。 - -> 人和人的活法不一样,这样甘于平淡也许是一种天生的智慧。 - -> 犹豫就扔掉,不需要经过任何考虑,因为你如果真的很喜欢,你就不会犹豫。所以原则就是犹豫的东西就把它扔掉, - -> 这个时候你要看这个物品带给你的是美好的回忆,还是悲伤的回忆。如果是美好的当然可以留下,如果是悲伤的就应该逐渐舍弃。 - -> 其实每个时代有每个时代的问题,但是我们只会怀念过去的美好,不会怀念过去的苦难。 - -> 怀念过去,担忧未来。 - -> “简”就是把东西减掉,简化掉;“极”就是简到不能再简 - -> 这就是我讲的六个原则:此刻、喜欢、最少、自我、呼吸、深广。 - -> 衡量物品的价值,卖家总是以当时购买的价格来计算,买家永远以当下市场的价格来衡量,所以天然是矛盾的吧。 - -> 人的意志力是有限的,今天已经用完了,该充电或者加油了 - -> 一旦我们拥有了某样东西,从那一刻起,我们也被这个东西所拥有。 - -> 甚至拥有了知识,我们也被知识所拥有,限制了自己思维。这是最为可怕的拥有 - -> 书不在多,在精,在学以致用。 - -> 第八,读到一本书,甚至读到一段话,感觉有道理,就赶紧拿来用。知识可以学来,智慧却不能,只能用了之后,内化成自己的,才是智慧,否则还是别人的 - -> 所谓有初看山是山、再看山不是山、再看山还是山的三种境界。 - -> 读书追求一个数字,就好像经济去追求一个GDP,电视去追求一个收视率,在一段时间里,这是好的,但如果不从这个为了数字而数字的陷阱里跳出来,就会产生恶性循环。 - -> 就是在自己擅长的领域发挥自己的天赋。无论是否赚取了财富,这样的一生都是精彩的。 - -> 追求新鲜是人无法克服的弱点,耐得住寂寞者往往有大成 - -> 人是脆弱和感性的,一本书、一部电影就可以轻易影响自己的选择,但那一定是暂时的,几天甚至几小时以后还会回到现实的琐碎中来。 - -> 一辈子只做的一件事,就是把今天的事情做到极致,付出自己最大的努力。 - -> 最终吃饱的,一定不是因为有第三个包子,前面两个也同样重要。我们走过的所谓弯路,也是为了找到正途所必须付出的代价。 - -> 一个信仰。一份事业。一个家庭。一个知己。一个爱好。一个空间。 - -> 盛世经商乱世从军 - -> 如果没有,那么,纸和笔是最好的知己,它永远不嫌弃你,也随叫随到。 - -> 她觉得这是大城市的特点之一,既然享受着城市生活的各种便利,就要接受随之而来的缺点。 - -> 一次扔完,是彻底清理;每日一扔,是日常保养。 - -> 极简不是苦行,而是为了追求更好的生活而存在的,所以它的核心是“提高生活品质 - -> 根据自己的实际情况,拥有满足生活所需的足够少的物品,同时达到足够好的质量。也就是:“更少的物品,更有诗意的生活。” - -> 他们的典型思维就是全有全无,或者非黑即白。喜欢一个人,这个人全是优点,不喜欢一个人,这个人全是缺点。 - -> 如果不能温暖,记得也不要苛责,每个人都做到了自己生活状态下的最好,他已经很辛苦、很努力。当然你也并没有义务去拯救每一个人,这种拯救的圣母情结,不仅会惹恼对方,也会连累自己。 - -> 一个人在知道又能沉默的时候,最接近神。 - -> 有理不在声高 - -> 所以说第一个不需要声音太大,太大也伤神;第二个不需要说太多,说重点。 - -> 第一个就是我们在说话的时候,先思考再表达,不要本能地去表达。 - -> 如果是真正爱阅读的人,智能手机的出现只能是提供了一种便利,而不是造成一种干扰。 - -> 一个哈尔滨的群友,淘汰了冰箱,吃的都是新鲜美味的东西。现在我们去买菜是很近的,可以把这种往返的路程当作一种锻炼。其实我们每天没有那么忙,自己去做饭、洗衣服,其实是一个刻意地慢下来的过程。 - -> 僧人修行的时候,要抄经,为什么?抄经绝对不让用草书,一定是楷体。它是要让你慢下来,因为你只有慢下来的时候,才有时间去思考问题。 - -> 所有的情绪都有积极的作用,除非你滥用。 - -> 指出电影的毛病并不难,难的是你要告诉我该怎么改进。 - -> 最好的纪念是投入地去经历。 - -> 我们太容易沉湎于过去,希望从过去的岁月里找到一种安慰。 - -> 如果当下越充实、越丰盈,越能够占领精神这座房子,过去和未来自然就没有立足之地。所谓的纪念品,所谓的沉湎于过去,所谓的过往等,都会不攻自破。 - -> 静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。 - -> 简单,所以专注。专注,所以投入。投入,所以幸福。 - -> 只是持续地做自己喜欢的事情,这是很大的幸福, - -> 11.想一想,我们生活在一个舒服的空间,有一个和睦的家庭,一份喜欢的工作,有一两个知己,深信某一个理念,有一个爱好。这样的人生,还有什么可遗憾的。这就是极简生活所追求的所有、所追求的最高。 - -> 当遇到这样的事情时,坦然地接受是最好的方式,然后再去寻找一些方法,寻找一些朋友的帮助,相信我,太多的伤口根本不是谁治愈的,而是自愈的,是时间的功劳。到了花期花朵自然开放,太阳出来雪自然融化,自然而然,全是时间老人的馈赠,所以不要怕,你也会好起来的。 - -> 厦门,一座极美的城市,繁漪尤其喜欢海边长长的路,可以在这里骑行,也喜欢厦门大学里面的人文气息。 - -> 柴米油盐酱醋茶是此地,琴棋书画诗酒花是外地。 - -> 每个人都会死亡,知道这一点,才会更珍惜人生。每个人也都会分离,知道这一点,会格外珍惜对方吧。 - -> 我们常常活在过去,认为过去的日子都很美好,而讨厌现在。再过几年,会怀念现在,认为今天是黄金时代吗? - -> 就这样往复怀念,按照这个推论下去,猿猴是最快乐的。如果猿猴也怀念的话,可能最早的那片水是最快乐的。既然如此,你愿意回到那一片荒芜吗?显然不愿意,所以我们还活在过去,是多么可笑的事情啊。 - -> 最美的,永远是自己的阅历,尤其是和不确定起舞的阅历。 - -## 笔记 - - -> 否则,中东局势、燕郊房价、邓超与孙俪换脸、如何刷牙、怎样装修这林林总总的信息都袭来,一时半刻还真的很难安静下去。 - -💭 嗨,说真的这些远在千里的事和我又有什么关系呢? - -> 如果你不喜欢读书,就不要读书,人生苦短,去做自己喜欢的事情。 - -💭 真实 - -> 最后但是最重要的一个原则是:除非他向你寻求帮助,否则不要出手。成年人是很固执的,若他自身意识不到问题,你的爱心就会遭遇寒流,甚至会被误解。 - -💭 度人?律己! - -## 书评 - -> ✨认识极简,尝试断舍离,提升专注力,做一名长期主义者。 - -## 点评 - -在之前我对极简的认知只有装修,对断舍离的认知也仅仅局限于拿得起放得下;并且存在非常大的认知局限性。至于我为什么会说适合小女生读哈哈,因为我作为男生可以普遍代表大部分男生了,男生其实没有那么多乱七八糟的事和东西。作者也是专注线下私域流量和知识付费的,所以部分故事存在引导性。 - -阅读这本书我是带着怎么以极简的方式去生活的,同时我们为什么要极简,极简可以带给我什么? - -### 信息极简 - -首先我是好奇心比较强,同时也很喜欢猎奇的人,忠实的吃瓜群众,更是来者不拒的接受所有信息。例如电报群,微信群,知乎,微信公众号等等,很多时候这些信息源对我们是没有价值的,而且会导致我们空闲的时候从 A 跳转 B 然后再去 CDEF,白白耗费我们的精力。而且很多时候我们还会等风来,其实并没有太重要的事情需要我们去处理。如果有任何紧急事情,保持电话畅通就可以了。 - -面对杂乱无章、铺天盖地的消息源会徒增我们的焦虑,更会使我们过于迷恋手机带来的快感。所以第一步取关不重要的微信公众号,其次删除无用的 App,保留常用的 App,然后在固定的时间查看回复消息,例如微博、知乎等等可以在电脑上定时阅读。并不是不让你获取信息,只是手机太容易让我们迷失和焦虑了,从源头减少信息源同时增加获取信息源的成本。 - -精简信息来源就会减少焦虑信息的传递,可以有效的提升我们的专注力。 - -### 书籍极简 - -我以前也是很喜欢买书,买了很多但是看的并不多,存的各种各样的书多的没地方放,然后也会徒增焦虑,啊啊啊,买了这么多书怎么看不完! - -保留有用的,未看的好书,高价值书籍。送人或者卖掉扔弃无用的书籍,看不到就不烦了。 - -### 服装极简 - -这个是真的,衣服多的时候就会纠结穿这个还是穿那个,浪费精力。所以我就每个季节三套衣服,这样减少我每天在选择衣服的精力。而且如果买新衣服就送掉不穿、闲置的旧衣服。 - -选择多了也会很焦虑的,所以从源头出发干掉它! - -### 目标极简 - -前两年的新年计划我都会写很多乱七八糟的计划,最后实际完成的不到 1/2。定制目标的时候很爽,仿佛写下来就完成了。到最后就会因为很多个计划没有完成然后很焦虑!!! - -所以尝试着一年只完成一件事情! - -### 总结 - -简单列举一些实例,就可以轻松了解什么是极简(断舍离),我们为什么要极简?极简能给我们带来什么? - -我们去践行断舍离也许需要时间,也许无法立竿见影,但是拖着沉重的包袱始终无法让我们走的更快。其可以让我们提升专注力,增加自信心持续正反馈!更可以减少这个环境给我们带来的焦虑,就如盲人失去了眼睛可以更加专注于用耳朵感知世界。 - -一句话来说:断舍离能让我们在成长的路上轻装前行! diff --git a/life/阅读/个人成长/写出我心:普通人如何通过写作表达自己.md b/life/阅读/个人成长/写出我心:普通人如何通过写作表达自己.md deleted file mode 100644 index 15d5057c..00000000 --- a/life/阅读/个人成长/写出我心:普通人如何通过写作表达自己.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: 写出我心:普通人如何通过写作表达自己 -description: 30年前,《写出我心》出版后立刻登上畅销榜,成为北美教授写作及写作治疗的人必读、必引述的经典,占据同类书籍的顶端,被列入美国高中读本,影响深远。在书中,作者将写作和修行结合,分享在写作中找到的驯服自己和释放心灵的方法。如何开始写作?如何寻找题材?如何应对逃 -keywords: - - 写出我心:普通人如何通过写作表达自己 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《写出我心:普通人如何通过写作表达自己》 -- **作者**: 娜塔莉·戈德堡 -- **分类**: 个人成长-情绪心灵 -- **ISBN**:9787555106425 -- **出版社**:广西科学技术出版社 - -## 概述 - -30年前,《写出我心》出版后立刻登上畅销榜,成为北美教授写作及写作治疗的人必读、必引述的经典,占据同类书籍的顶端,被列入美国高中读本,影响深远。在书中,作者将写作和修行结合,分享在写作中找到的驯服自己和释放心灵的方法。如何开始写作?如何寻找题材?如何应对逃避和拖延?如何突破瓶颈?……指导读者通过写作全面探讨自己的生命,重新注视生命的细节。作者认为,任何人都可以通过写作了解自己、用笔表达喜悦和疼痛,如童年时的愉快暑假、面对父亲生命垂危时的痛不欲生、离婚的煎熬……在勾勒生活事件的过程中,领会生命的奥义。这本书谈论的不只是写作,更是生活哲学、生命智慧。通过写作给生活赋予光芒、色彩和故事,使我们再次审视这趟凡尘之旅,为平凡的生活心醉神迷。 - -## 划线 - - -> 逝去之事不可留,万事三平二满休。字句人间皆无惧,一生有爱无尽头。 - -> 相信你所爱的事物,坚持做下去,它便带你到你需要去的地方。”别太过担忧安全与否的问题,一旦你开始去做自己想做的事,内心深处终将获得很大的安全感。 - -> 我很喜欢教入门班,因为我必须重回初写者的心灵状态,重拾我对写作最初的想法和感受。 - -> 1.手应当不停地写。(不要停下来重读你刚才写的那一行,那只是在拖时间,并在设法掌控你正在说的话。)2.不要删除。(那是在编辑你写的东西,就算写出来的并不是你原本打算写的东西,也随它去。)3.别担心拼错字、标点符号和文法。(甚至别去管是否把字写出了格子,或超出线。)4.放松控制。5.别思考,别想着要合乎逻辑。6.直捣要害。(倘若你写出了可怕或太过赤裸裸的东西,那就一头钻进去,其中说不定蕴藏了很多能量。) - -> “我有写出世上最烂的垃圾的自由。” - -> 我规定自己,一个月写完一本笔记本。(我总是为自己设下写作的行动纲领。)把本子填满就算,那便是练习。我的理想状况是,每天都写。我说了,那是理想状况,要是没达到理想,我会小心地不责难自己或慌张着急,没有人能事事符合理想。 - -> 8.写关于“离开”,随便你想用哪种方法写都行。写你离婚、今天早上离开家门,或朋友即将不久于人世的事。9.你最初的记忆是什么?10.哪些是你曾爱过的人?11.写你居住城市的大街小巷。12.描绘祖父或祖母。13.写写看:游泳星星你最害怕的一次经历绿地你如何知道有关性的事你的第一次性经验感到与神或大自然最接近的一次经验改变你的人生的文章或书籍肉体的耐力你以前的一位老师别沦于抽象,把真实的东西写出来,诚实地写,并写出细节。 - -> 有段禅语说:“说话时便说话,行走时便行走,死亡时便死亡。”该写作时便写作,别让自己和内疚、控诉及暴力的威胁战斗。 - -> 不妨使出各式各样无伤大雅的小伎俩,只是别陷入无止境的罪恶感、逃避和压力的恶性循环里。 - -> 把“你很乏味”当成远处微风吹动洗好的白衣服所发出的啪啪声。衣服终究会晒干,远方的某个人会把它们叠好并收进屋里。 - -> 就在那一刻,你写出的文字终于和你内心所感联结在一起;就在那一刻,你获得解放,因为你已不再与你的内心争斗;你已接受它们,与它们为伴。 - -> 我有首诗,诗名叫做《无望》,那是一首长诗。我总认为那是一首喜悦的诗,因为我借以写出了沮丧和空虚,从而让我重拾生机且一无所惧。然而,当我 - -> 我告诉他:“慢慢来,先让自己写一阵子,熟悉一下写作是怎么回事再说。”写作是一辈子的事,并且需要做很多很多练习。我了解他为何迫不及待,我们往往想要让自己以为正在做件有用的事、去某个地方、完成某个目标——“我正在写一本书”。 - -> 写作并不是麦当劳汉堡,写作必须慢火细炖 - -> 作家必须肯定生活,肯定生活中的一切: - -> 作家有两条命。他们平时过着寻常的日子,在蔬果杂货店里、过马路时和早上更衣准备上班时,手脚都不比别人慢。然而作家还有受过训练的另一部分,这一部分让他们得以再活一次。那就是坐下来,再次审视自己的生命,复习一遍,端详生命的肌理和细节。 - -> 上乘的艺术几乎沦为煽情,可是终究并不是。认清这只苍蝇,想要的话,甚至可以爱上它,就是别和它结婚。 - -> 我们想要诚实无欺的支持和鼓励,一旦得到了,却又偏偏不相信,反而轻易听信苛责,以强化心底根深蒂固的一个想法,那就是其实我们根本不行,根本不会写作。 - -> 你有什么深远的梦想 - -> 不要概念,而要具体的事物。 - -> 我们必须牢记,一切事物都是既平凡又不凡;事物平凡与否,全看我们的心灵是开放还是闭塞的。细节无所谓好或坏,它们就只是细节而已。 - -> 最好当个部落作家,为所有的人写作,反映人群当中许多不同的声音,不要只是做个隐士型作家,只追索个人心灵中微不足道的真理。提笔写作时,应视野恢宏,胸怀全世界。 - -> 不过,倘若你能捕捉那种感觉,或者嗅到、瞥见你与那感觉合为一体的刹那,那么你就很可能会写出一首好诗。 - -> 女性总是在寻求别人附和她们的感受和见解;她们并不是在提出声明后,便坚守声明“这很美”或“这很糟糕 - -> 这世界并非总是黑白分明,人不见得能确定自己可不可以去某个地方,然而务必作出清楚、斩钉截铁的声明,这一点对写作新手来讲尤其重要。“这很好”、“那是匹蓝色的马”,而不是“呃,我晓得这事听来很怪,不过我想那八成是一匹蓝色的马”。提出声明不啻在练习信任自己的心,学习坚持自己的意念。 - -> 写作是在焚尽你心灵中的迷雾,别把雾气带到纸上。就算有件事你并不是很确定,表达的时候,也得做出对自己胸有成竹的样子。如此这般地多多练习,最后你会真的胸有成竹。 - -> 试试看把名词和动词连在一起,会形成什么样的新组合,然后据此造出完整的句子,需要的话,可以用过去式。 - -> ……在那儿,天使与剑兰走过你的肌肤/睡在地上[插图]… - -> 引述一句戈尔·维达尔[插图]的名言:“每位作者和每位读者都知道,好的写作是最棒的旅行。”别担心写得好不好,只要写,便足以使你置身天堂。 - -> 海明威曾说过:“为什么不重要,是什么才重要。”讲出切实且详尽的情报,至于为什么,就留给心理学家去伤脑筋。知道自己想要写就行了,提笔写吧。 - -> 先写十分钟,可收到很好的暖身或清醒作用,从“我是……的朋友”开始写,但列出的名单必须是无生命的事物。 - -> 由于他们写得的确不错,因此不愿意脱离熟悉的事物,打破自己的世界闯入新领域,进入未知的天地。 - -> “你是为自己写作?还是为读者而写?”写作时,想象你正与他人分享你的看法;走出寂寞的深壑,向另外一个人表达自己。 - -> 你需要去做平常不会做的事。 - -> 了解真正的自己,并从那里着手写起,你将增进世人彼此的了解,从而帮助这个世界。 - -> 写稿,朗读;再写,再读;通常你会停止东想西想,变得越来越不自觉。每个人都在同一条船上,而且因为没有人会在旁批评议论,你会觉得越能自由自在、随心所欲地写。 - -> 在那个星期当中,有人从题目盒里抽到“你的第一次性经验”。有位女士自此在剩下来的几天里没写过其他题材。她写她第一次的性经验,还有第二、第三次,等等。我相信这会儿她仍坐在明尼苏达州丘市的彩虹酒馆里写她的第七百零八次性经验。 - -> 她最后一次举行朗读会时,不但座无虚席,连站票都销售一空。她告诉我,朗读会结束以后,她回到家,心情非常沮丧,因为大家都那么喜欢她的诗,她说:“我又用我的作品愚弄了一群人。” - -> 片桐老师有一次对我说:“我们都是佛,我看得出你是佛,但你并不相信我。等你看到自己是佛,就会醒觉了。那便是悟道。”我们很难去理解并珍视自己的生活,却能比较轻易地看到自身以外的事物。 - -> 时间最能检验作品,要是你对某件作品没有把握,就暂且搁置一段时间,六个月以后再重看,届时想法会比较清楚。 - -> 因为写作有时像是件一无是处的事,只是在浪费时间。突然之间,你会坐在椅子上,为自己的尘俗生活心醉神迷。艺术伟大的价值便在这里——化平凡为不凡。我们唤醒了自己,觉察到我们正在体验的生活。 - -> 日本武士,一位凡遇非属当下的事物,即勇于出手铲除的伟大战士;就像一位心灵空白清净,把对手一砍为二的日本武士,不感情用事,用澄澈且洞悉的心灵来阅读。不 - -> 首先,我觉得地点和环境非常重要。 - -> 对真实的自己,还暂时没这个勇气。”“我想写的都是心里最深最隐私的梦,不知如何下笔。”“哎呀有孩子了,都是当爹当妈的人了,没精力写啊!”“哎呀我得上班挣钱啊!天天要上班,哪有时间写啊!”“就我这点功底,差太远了,还是别献丑了。”“我想写我爸的故事,可我要写出来,非被他打死不可……” - -> 不否认这些都是事实。但如果你真心投入,你就总能找到时间去写作,哪怕每周只能抽出半小时的时间去写,都是好的。一个真心想去写作的人,不会把写作的梦想拖到60岁——因为你可能活到59岁就去见上帝了。你必须找到一种方式,去掌控你的全部人生。所谓“明日复明日,明日何其多”。 - -> “心猿”其实是来自中国的词语。我们经常说心猿意马。心猿会让我们忙碌不安,很难去静心做事。 - -> 我觉得天赋就像地下水——你要用自己的努力先挖一口井,它才会喷发出来,所谓“才思泉涌”。 - -> ,我写作是为了取悦读者。我希望自己如实写作,既不是为了讨好别人,也不是为了孤芳自赏地取悦自己。 - -> 我们在现实中会有很多个年头,来了又走了,没有什么特殊含义。但一个小说家在写故事的时候,就必须创造“特殊含义”——因为读者读小说时,会期待你所说的一切是有“特殊含义”的。所以一个小说需要有结构,有开头,有经过,有结尾,虽然每一步的过渡可能并不那么明显。 - -> 对我们自身而言,当我们写作时,去挖掘自己过去的经历也很重要,因为过去本无处可躲,也没什么可躲的。如果你无法面对真实的自己,你笔下的一切也都是假情假意。你需要接纳自己的人生,接纳自己的心念。 - -> 人活着,就面临着很多“失控”。比如坠入爱河,这就是一种失控;当我们的至亲至爱离世,我们又会面临一种巨大的失控。 - -> 写作的好处是,你可以暂时性陷入一种巨大的“空性”和“无我”状态中,然后当你放下笔,去外边散散步,你会从“无我”中跳脱出来,回到一个安全的自我模式,然后再继续进入“无我”的写作状态,循环往复 - -> 我的身体现在开始准备写某个主题的一本书,但其实这可能是我大脑中积攒了很多年的潜意识想法。虽然当时这些潜意识并未浮出水面,但我却悄然地在做这些准备了。可能当我真正决定下笔之前,我的大脑已经在不知不觉中打了半年的腹稿了。这样,当我动笔之时,我才能保证这个主 - -> 只是在回望过去时,对当时的自己充满了极大的爱与同情。她(当时的自己)很认真,很努力,很纯粹。在某种程度上,她很聪明,却又经历过很大的破碎;我想如果没有过那么多的破碎,也许她看事情可以更清晰。虽然并不知道后来的结果如何,但她从不害怕。她相信尽心即可,结果要来的时候,自然会来。 - -> 相比较于作品成果而言,我更关注每个学生在写作中的健康心态。这种可持续性的健康心态,我觉得比一部短期作品更加重要。 - -## 笔记 - - -> 我们甚至必须对椅子、空气、纸张和街道怀有善念。人心必须变得如此宽阔有肚量。当佛陀在菩提树下悟道成佛时说:“我与众生皆成佛。”他并不是说“我成佛了而你没有”或“我看到佛了”,好像他归他,佛归佛似的。 - -💭 正心善念 - -> 对世世代代生活在那儿的霍比族印第安人来说,村落四周那片广袤的大地实在平凡得可以,他们天天都看到宏伟的台地。可惜的是,很多年轻人都想离开,想到比较刺激的城市去闯天下。 - -💭 得不到的才是最好的 - -> 这并不表示你在写作时,应该停下沉思一个小时,好想出一个新动词。只是要留意动词以及动词的力量,并以新的方式来运用动词。你对语言的各种面向越是注意,文笔就会越生动。 - -💭 反差 - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/刻意练习:如何从新手到大师.md b/life/阅读/个人成长/刻意练习:如何从新手到大师.md deleted file mode 100644 index 607c1ef0..00000000 --- a/life/阅读/个人成长/刻意练习:如何从新手到大师.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: 刻意练习:如何从新手到大师 -description: 本书是两位作者合作撰写的,一位是心理学家,另一位是科学作家。10多年前,我们开始经常探讨杰出人物和“刻意练习”这个主题,并在5年前开始认真地围绕这个主题写书。在那段时间,本书在我们两人的思想碰撞中慢慢成形,以至于我们现在都难以分辨,书中的哪一部分观点由谁提 -keywords: - - 刻意练习:如何从新手到大师 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《刻意练习:如何从新手到大师》 -- **作者**: 安德斯·艾利克森 罗伯特·普尔 -- **分类**: 个人成长-认知思维 -- **ISBN**:9787111551287 -- **出版社**:机械工业出版社 - -## 概述 - -本书是两位作者合作撰写的,一位是心理学家,另一位是科学作家。10多年前,我们开始经常探讨杰出人物和“刻意练习”这个主题,并在5年前开始认真地围绕这个主题写书。在那段时间,本书在我们两人的思想碰撞中慢慢成形,以至于我们现在都难以分辨,书中的哪一部分观点由谁提出。我们只知道,本书由我们两人合写,比由我们单独去写要好得多,也完全不同。 - -## 划线 - - -> 练习就是不断重复吗?不是。不断重复只是“天真的练习”,无法带来进步。“正确的练习”需要好导师、有目标、有反馈…… - -> 没有勤奋就没有一切!至于天才,我将其理解为一种无限的伸展性,也许一个人只要具备一丁点儿天才,就可以扩展成很大。——郎朗(国际著名钢琴家) - -> 我发现身边的高人,他们有两项高于常人的本领:一是洞察问题的本领,二是解决问题的本领。 - -> 对于大多数人,很努力,却得不到希望的结果;很多事,有态度,却茫然于拿不出解决问题的具体方法。 - -> 认知复杂性高与认知复杂性低的学习活动的差异在很大程度上表现为隐性知识的多少与比重。 - -> 认知复杂度(cognitive complexity)是指你建构“客观”世界的能力。认知复杂度高的人具有高度复杂化的思维能力,更善于同时使用互补与互不相容的概念来理解客观世界。真实世界中,黑白对错并非截然分明。 - -> 在许多领域,通往卓越的道路不是精确计算时间的结果,而是模糊与含糊不清的。没有简单的模型通向伟大。 - -> 天才更懂得利用大脑的适应能力 - -> 不论基因遗传可能在“天才”取得的成就中发挥着什么作用,这些人拥有的重要才华,与我们每个人都拥有的才华是一样的。也就是说,他们和我们一样,大脑和身体都具有适应能力,只是比我们更多地利用了那一能力而已。 - -> 学习不再是挖掘某人潜力的方式,而是发展这种潜力的方式。我们可以创造自己的潜力。 - -> 不论在什么行业或领域,提高表现与水平的最有效方法,全都遵循一系列普遍原则。我们把这种通用的方法命名为“刻意练习”。 - -> 我们的大脑对于可以将多少事物立即保存在短时记忆中,有着严格的限制,这一限制通常约为7件事物 - -> 在任何行业或领域之中,最有效的和最强大的那类练习,都通过充分利用人类的身体与大脑的适应能力,来逐步地塑造和提升他们的技能,以做到一些过去不可能的事情。 - -> 而且,对刻意练习原则的运用,是为任何行业或领域策划和设计训练方法的最佳方式。 - -> 人类的身体有一种偏爱稳定性的倾向。 - -> 负荷。老鼠还被逼着走出了舒适区,而肌肉对此的顺应方式是:变得足够强壮,以建立新的舒适区。这样就重新建立了体内平衡。这就是体育 - -> 那么,身体就能轻松应对以前感到十分艰难的那些体育锻炼活动了,它会再度感到舒服。改变也停止了。因此,要使改变不断进行下去,你必须不断地加码:跑得更远一些、更快一些,并且爬坡跑。如果你不继续给自己施加一些压力,身体将会保持体内平衡,尽管此时的体内平衡不同于以前,但你将停下改进的脚步。 - -> 大脑对于处在舒适区之外却离得并不太远的“甜蜜点”上的挑战,改变最为迅速。 - -> 而对吉他来说,主要是拨弹或捏住弦。简单地讲,对这类乐器演奏者的训练,重点是加强他们对左手手指的控制 - -> 音乐训练以各种不同方式改变了大脑的结构与运行,使人们的音乐演奏能力进一步增强。 - -> 那些科学家发现,爱因斯坦的顶下小叶比常人大许多,而且形状也格外异常,这些发现使得科学家们推测,爱因斯坦的顶下小叶,可能在他进行抽象数学思考方面发挥着至关重要的作用。 - -> 一般说来,“足够好”就是足够好。但重要的是记住,选择总是存在。 - -> 他们经过年复一年的练习,已经改变了大脑中的神经回路,以创建高度专业化的心理表征,这些心理表征反过来使得令人难以置信的记忆、规律的识别、问题的解决等成为可能,也使得他们能够培养和发展各种高级的能力,以便在特定的专业领域中表现卓越。 - -> 杰出人物运用心理表征来提高技能水平,监测并评估自己的技能水平,在必要时调整心理表征,使之更加有效。这反过来使我们能够更好地解释刻意练习了。 - -> 这一法则具有无法抗拒的吸引力。它很容易被记住。 - -> 王牌训练计划海军设计的这个计划,在许多方面都有刻意练习的元素。特别是,它给学生飞行员机会,在不同的局面下尝试不同的战法,并由教官对其表现提供反馈,然后将他们所学的知识运用到实战中去。 - -> 议者,目的是教他人如何提高绩效。他们称自己为顾问、咨询师或教练,他们 - -> 任何人都可以进步,但需要正确的方法。 - -> 如果你没有进步,并不是因为你缺少天赋,而是因为你没有用正确的方法练习。 - -> 2012年5月,丹尼斯开始计算并记录他的差点时,差点为8.7,对只玩了几年高尔夫球的人来说,这已经是十分不错的成绩。到2014年下半年,他的差点在3和4之间浮动,那真的能给人留下深刻印象。在我写这本书时,也就是2015年下半年,丹尼斯在受过一次伤后恢复练习,那次受伤的经历,在一段时间内妨碍了他继续进步。他已经练习了6000余小时,因此,他已经在自己确定的1万小时训练的目标上完成了超过60%的部分。我们依然不知道丹尼斯能否实现他参加美国职业高尔夫巡回赛的目标,但他的经历清晰地表明,一个年龄已达30岁、从来没有真正打过高尔夫球的人,通过正确的练习,可以将自己变为一位高尔夫大师。 - -> 改变运动训练当我和全职运动员以及他们的教练交谈时,总是不无震惊地了解到,他们从来没有花时间辨别自己在哪些方面还可以改进,然后去设计出有针对性的训练方法。在事实上,运动员(特别是团体运动项目中的运动员)的大部分训练是在团体中进行的,并没有试图搞清楚每一位运动员应当着重训练些什么。此外,几乎没有人去了解杰出运动员运用的心理表征。纠正这种现象的理想方法是让运动员口头报告他们在比赛时一直在想些什么,这可能使研究人员、教练或者甚至运动员自己能设计一些训练任务,来改进他们对比赛情景的心理表征,而且会运用我们在第3章中描述过的同样方式。当然,有些十分杰出的运动员自己创建了有效的心理表征,但这些一流运动员中的大多数人甚至不知道,他们的想法与那些成就不那么杰出的运动员之间有何不同。 - -> 知识本身绝不是学习的目的 - -> 一旦学生懂得了在某个领域中要达到那种足够高的技能水平必须要做些什么,那么他们至少从原则上理解了在其他领域追求卓越也需要做些什么。 - -> 当我们意识到,在各行各业中最杰出的人物之所以占据那些地位,并不是因为他们天生具有某种才能,而是因为他们通过年复一年的练习,充分利用人类的身体与大脑的适应能力而提升和发展了自己能力,那么,这种颠覆就开始了。 - -> 心流 - -## 笔记 - - -> 天才存在吗 -为什么有些人对他们所做的事情如此擅长,擅长到令人不可思议的地步? - -💭 如果可以换一种说法,天才其实是人对于某件事情具有极高的契合度,进而展现出不同于一般人的表现。 - -> 这些人拥有的重要才华,与我们每个人都拥有的才华是一样的。也就是说,他们和我们一样,大脑和身体都具有适应能力,只是比我们更多地利用了那一能力而已。 - -💭 向内了解自我,向外认知世界,寻找到最合适自己的成长方式。 - -> “天才”是训练的产物 - -💭 天才不只是训练的产物,必须有客观存在的基础,同时进行主观的训练提升,才会产生天才。 - -> 刻意练习的任务难度要适中,能收到反馈,有足够的次数重复练习,学习者能够纠正自己的错误。 - -💭 打破自己的舒适圈,一步一个脚印一步一个台阶,持续的正反馈。 - -> 大部分人做不到这些事情,并不是因为他们不具备做这些事情的能力,而是因为他们满足于在舒适区中生活,从来没有尝试走出舒适区。 - -💭 打破舒适区 - -> 尽管我们不能确定地知道是什么导致这种现象的发生,但是,似乎那些密集的训练导致受训者的大脑将越来越大的部分专门用于这种记忆,从而留给其他类型记忆的脑灰质变少了。 - -💭 脑容量是有限的,只有腾出空间才可以放进新东西 - -> 他们的视力与常人无异,反应也不会比常人快。他们只是拥有了一系列心理表征。这些心理表征的形成,是经过多年的击球训练,而且获得即时反馈(比如,教练在旁边指出应当如何预测对方怎样抛球)的结果。心理表征使击球员能迅速意识到对方抛出了什么样的球,并且马上判断在击中此球后,球可能会朝哪个方向飞去 - -💭 潜意识,心里表征可以尝试理解为潜意识 - -> “如果有人愿意花1万小时去做同一件事情,我认为他一定有病,心理不正常。 - -💭 一万小时的迭代 - -> 。他谈道,为了训练人们的新技能并拓展他们的能力,需要把人们逼出舒适区。他强调了反馈的重要性,还研究了世界上一些最杰出商界领袖的特点,比如长期担任通用电气董事局主席和首席执行官的杰克·韦尔奇(Jack Welch),以思考其他的商界人士要成为杰出领袖,需要发展哪种类型的领导风格、销售技能和自我管理技能。 - -💭 打破舒适区,保持节奏感,持续正反馈 - -> 只有把飞行员逼出舒适区,他们才有可能最大限度地学会怎么战斗。 - -💭 舒适区是不会成长的 - -> 王牌训练计划 - -💭 王牌训练计划 - -> 成为“练习人” -此外,我还坚持认为,当我们在提高自己时,我们才最像是人类。和其他任何动物不同,我们可以有意识地改造自己,以我们选择的方式来提高自己。这使得我们和当今世界以及有史以来的其他物种区别开来。 - -💭 有意识的改造自己? - -> 这使得他们体验到“很嗨”(high)的感觉,这种感觉,除了专家之外,很少有人能体会。 - -💭 心流 - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/即兴表达.md b/life/阅读/个人成长/即兴表达.md deleted file mode 100644 index d58d1c6c..00000000 --- a/life/阅读/个人成长/即兴表达.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: 即兴表达 -description: 本书针对当代人的表达痛点,从即兴表达者必备的基本素质出发,提炼适用于不同场合的万能表达结构,总结沟通中常见的陷阱及应对策略,助力表达者精进表达,自信把握临场机遇,从容掌控每一个沟通瞬间。 -keywords: - - 即兴表达 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《即兴表达》 -- **作者**: 王达峰 -- **分类**: 个人成长-沟通表达 -- **ISBN**:9787308199025 -- **出版社**:浙江大学出版社 - -## 概述 - -本书针对当代人的表达痛点,从即兴表达者必备的基本素质出发,提炼适用于不同场合的万能表达结构,总结沟通中常见的陷阱及应对策略,助力表达者精进表达,自信把握临场机遇,从容掌控每一个沟通瞬间。 - -## 划线 - - -> 但需要注意一个关键点,这个目的一定要是基于对方的。 - -## 笔记 - - -> 1.这个项目能给公司带来哪些好处? -2.与同行的其他公司相比,我们公司做这个项目有多紧迫? -3.如果拿到预算,你会如何花这些钱、如何监控财务? - -💭 项目创造的价值 - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/学习之道.md b/life/阅读/个人成长/学习之道.md deleted file mode 100644 index f08d5be5..00000000 --- a/life/阅读/个人成长/学习之道.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: 学习之道 -description: 《学习之道》则是一本真正面向大众、指导实践以及科学可信的学习方法手册。这本书的优点主要有以下几个方面。学习方法领域的图书主要分为两类。一类走的是学院派路线,主要是梳理学习心理学中的各种理论,在这些书中,我们能看到不同流派的观点,能看到心理学家对学习本质的讨 -keywords: - - 学习之道 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《学习之道》 -- **作者**: 芭芭拉·奥克利 -- **分类**: 个人成长-人生哲学 -- **ISBN**:9787111552062 -- **出版社**:机械工业出版社 - -## 概述 - -《学习之道》则是一本真正面向大众、指导实践以及科学可信的学习方法手册。这本书的优点主要有以下几个方面。学习方法领域的图书主要分为两类。一类走的是学院派路线,主要是梳理学习心理学中的各种理论,在这些书中,我们能看到不同流派的观点,能看到心理学家对学习本质的讨论,但是这些内容对于学习者来说,有些过于抽象了,较难在学习的具体实践中加以应用;另一类走的是实践派路线,作者往往靠个人的天赋和努力,摸索出了一些基于经验的学习方法,这些书有一定的参考价值,但缺点也比较明显:一方面其中部分观点可能不符合学习心理学中的科学结论,另一方面某些方法只适合特定的场景,无法迁移应用在更广阔的学习领域中。 - -## 划线 - - -> 还有另外一种直观的方式来看待专注模式和发散模式之间的区别:想象从手电筒里打出来的光。专注模式下的光束更紧密,穿透力更强,径直打在一小块区域上。而如果你拨到发散模式,光柱会分散开,照亮的范围更广,但各处的光强都会降低。 - -> 有的人是左脑主导的,有的人是右脑主导的” - -> 总要有来有往,才能打赢乒乓球 - -> 他是指,专注与发散的思维过程经过长年累月地细火慢炖,产生创造性的突破。 - -> “慢直觉”的关键就是要用多角度思维感知一个概念。那样,概念的方方面面会临时而随机地组合在一起,直到最终,你的创意如出水芙蓉般诞生。 - -> 解决数学和科学难题,就像在钢琴上弹一首曲子。你练得越多,神经模型就越坚实,颜色就越深、越强壮。 - -> [插图]长达几个世纪以来,杀人者都对砒霜青睐有加。只要在早餐面包上撒一点,用不了一天你就会痛苦地一命呜呼。然而,在1875年的德国文理协会第48届会议上,有两个人坐在观众面前,轻松从容地服下了两倍于致命剂量的砒霜。可想而知,那时大家有多震惊!可第二天,他们又面带微笑,健康如故地回到了会场。尿检显示二人并没有使诈,他们确实服食了毒药。[插图]但是怎么可能有人服毒却不死,甚至看起来若无其事呢?这个看似无关的故事与我们将要讲到的拖延问题有许多可以类比之处。了解一些拖延症的认知心理学原理,就如同了解毒药的化学原理一样,能够帮助我们形成有益健康的预防机制。 - -> 但如果你开始对某件事游刃有余,自然就会乐在其中了。 - -> 习惯可以帮我们节省力气,它能为我们的大脑腾出空间进行别的活动。 - -> 而你心里明白,这5道题可能会是艰巨的任务。你幻想自己能在最后一秒搞定这5道题(或者20页的报告之类),而活在这样的幻想里会比较轻松。 - -> 如同拖延,习惯有四个组成部分:■ 信号;■ 反应程序;■ 奖励机制;■ 信念。 - -> 你要给发散模式留出足够的时间 - -> 一位小提琴演奏大师,不会把一个曲子从头到尾练上无数遍。相反,她会集中攻克最难的乐段,比如那些让人指法笨拙、脑中浑然无序的部分。 - -> 备考的时候,把你的问题和答案梳理整齐,会方便你快速浏览。 - -> 培养灵活专业的思维,关键在于构建属于你的思维方案库。这是一个你能快速读取的数据库,在紧要关头总能派上用场。这个做法不仅可以用于解决数学和科学问题,它还适用于生活的许多方面。比如,这就是为什么要去观察紧急出口相对飞机座椅或宾馆房间的位置,这样做总是上策。 - -> 习惯突击完成工作的人通常比那些合理安排时间、定时定量完成工作的人效率低很多。[插图]突击完成工作的时间如果太长,会让你精疲力竭。 - -> 你自带的超大视觉空间记忆 - -> 研究表明,越是聪明的人越容易在繁芜复杂的问题上迷失自我。而头脑略逊一筹的人反而更容易找到更简单的解决方法。[插图] - -> 训练,尤其是对学习材料中最困难的部分更要刻意训练,这样才能让那些拥有普通智力的人有机会上升到“天赋异禀”的境界。 - -> 在科学、数学、技术领域取得成功的专业人士,逐渐习得的一个特质,就是学会如何组块——提炼关键思想。 - -> 毕竟,只有数学是理性的诗歌,而诗是心灵的数学。 - -> 努力学习数学和科学的时候,我们能做的最重要的一件事,就是给脑中的抽象概念赋予生命。 - -> 你是自己的骄傲,尤其应该骄傲于那些让你“与众不同”的特质,并把它用作你成功的秘密法宝。借你与生俱来的逆反心理反抗偏见,不要轻信他人对你下的结论。 - -> 考试本身就是一种效果非凡的学习经历 - -> 开始做题时,就先做看起来最难的那道。不过要做好准备,一旦你发现自己已经一两分钟没有进展,或者感觉可能想偏了,就要立刻抽身出来。 - -> 对于考试恐慌人群来说,还有一个好建议就是把注意力暂时转移到自己的呼吸上来。 - -## 笔记 - - -> 发散模式对学数学和科学也同样必不可少。如果我们在一个问题上挣扎了许久而不得思路,它会冷不防地提供一个新点悟。 - -💭 潜意识,好读书不求甚解 - -> 利用专注思维模式来处理数学和科学问题,通常会比处理语言和人际交往相关问题费劲得多。[插图]这也许是因为上千年来,人类操控数学概念的能力并没有进化,并且数学概念往往比传统语言问题更加抽象隐晦。[插图] - -💭 抽象能力 - -> 如果给你两个三角形,要求你把它们拼成一个正方形,这非常容易,就像左图那样。但如果再给你两个三角形,让你把四个放在一起拼出一个正方形,你的第一反应会是错误地把它们拼成一个长方形,就像中间图示那样。这是因为你的大脑里已经有了专注模式下的模型,使你囿于成见。 - -💭 认知偏见 - -> 你怎么才能意识到自己处于发散模式中?那是一种什么感觉? - -💭 思维活跃,极致联想 - -> 我们的大脑有两种截然不同的思维模式——专注模式和发散模式。你会在两种模式之间转换,择一而用。 - -💭 本意识,潜意识 - -> 用一个计时器设定25分钟,在这25分钟里,全神贯注于一项任务,什么任务都行。不用担心能不能完成它,专心去做就好。25分钟的时限一到,你就停下来奖励一下自己,看看网页,翻一下手机,做任何你想做的事情。注意,奖励和工作本身一样重要。 - -💭 番茄时钟工作法 - -> 首先要记住,陷入拖延很简单,但获得顽强的意志力可就难得多了。因为后者需要动用大量的神经资源。可以说用意志力来对抗拖延,就像在空中喷洒廉价劣质的空气清新剂一样完全徒劳无功。除非万不得已,否则不要把意志力浪费在抵抗拖延上。 - -💭 意志力是最宝贵的消耗品 - -> 同样,拖延症患者起初也只是拖延了一点点。可一次又一次地拖延最终让他们泥足深陷。他们也许暂时看上去毫无问题,但长此以往呢? -恐怕不会太好。 - -💭 拖延的问题在于节奏感的保持,一步登山,一口吃成胖子都是不现实的。只有日拱一卒,持续的正反馈才是可行的 - -> 让自己享用一杯拿铁,或去浏览自己最爱的网站?能否奖励自己毫无愧疚地看一晚上电视或上一晚上网?能不能在有更大收获时给自己更大的奖励,比如电影票、毛衣或是买点浮夸的小礼物? - -💭 反馈奖励 - -> 刚坐下投入工作前,有点负面小情绪是正常现象。如何应对这些情绪是才是关键。研究者发现,“快人”和“慢人”的不同就在于,“快人”毫不拖沓地把负面想法放在一边,对自己说,“别浪费时间了,现在就动手吧。只要你动手做事情,感觉就会好很多了”。 - -💭 问题是问题,情绪是情绪,永远不要带着情绪去解决问题。 - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/学会写作:自我进阶的高效方法.md b/life/阅读/个人成长/学会写作:自我进阶的高效方法.md deleted file mode 100644 index 34873d0d..00000000 --- a/life/阅读/个人成长/学会写作:自我进阶的高效方法.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -title: 学会写作:自我进阶的高效方法 -description: 大多数人都理解错了写作,认为只有依靠写作为生的人才需要学习这门技能。其实,写作是生存技能,人人都需要,人人都能学好。如今普通人改变命运、实现阶层越迁的机会越来稀缺,写作正是当下一个很好的机会:不需要强大的资源和背景以及人脉积累,只需要一台电脑和一颗想要改变 -keywords: - - 学会写作:自我进阶的高效方法 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《学会写作:自我进阶的高效方法》 -- **作者**: 粥左罗 -- **分类**: 个人成长-人生哲学 -- **ISBN**:9787115510556 -- **出版社**:人民邮电出版社 - -## 概述 - -大多数人都理解错了写作,认为只有依靠写作为生的人才需要学习这门技能。其实,写作是生存技能,人人都需要,人人都能学好。如今普通人改变命运、实现阶层越迁的机会越来稀缺,写作正是当下一个很好的机会:不需要强大的资源和背景以及人脉积累,只需要一台电脑和一颗想要改变、敢于尝试的心。2018年3月,在人人都说微信红利殆尽时,作者创立自媒体粥左罗,仅靠写原创文章,1年就积累了40万粉丝,基于3年爆文写作经验,他系统总结了非常具有操作性的写作技巧,希望让更多人学会写作,而且能靠写作赚钱。如何从零开始成为写作高手?《学会写作自我进阶的高效方法》给出很好的解释,而你需要做的就是马上行动,开始学习,开始写作。因为,这项具有明显复利的技能越早开始学习越好,一旦形成,别人无法在短时间内超过你,时间就是壁垒。 - -## 划线 - - -> 写作是倒逼成长的绝佳方法 - -> 写作是抗攻击性最强的技能 - -> 别废话,直接开始写。别废话,直接开始写。别废话,直接开始写。 - -> 这个行业,影响力非常重要。有一个可以快速提升影响力的方法,就是经常在知乎和公众号上发表文章,文章内容不限,可以是研究报告、行业见解等。 - -> 若只是这样练习,你可能一辈子都写不好。因为在写作方面,新手与高手的差距除了遣词造句能力,还有一个更核心的东西——思考水平。 - -> 知道了写作的内核是思考水平,于是你开始每天绞尽脑汁地思考,训练思维、提升认知,以求提高写作水平。但若只是这样练习,我依然可以说你可能一辈子也写不好。因为在写作方面,拉开大家思考水平的也有一个核心指标——你的输入。 - -> 持续、大量、优质的输入 - -> 讲完这些,我们可以给写作重新下一个定义:写作是对输入进行思考后的输出。因此,提升写作能力的三个核心要素是:输入、思考、输出。 - -> 要带着目标和预期阅读;要养成边读边思考甚至做笔记的习惯;要更聚焦,进行主题式阅读;好内容要反反复复读;阅读时,要带着批判性思维和学习的心态;在阅读过程中,要不断代入自己的工作和生活场景。 - -> 只有公开写作才是真正完整的写作 - -> 只有进行公开写作,你的文字才能帮助你打造个人品牌,帮助你高效连接人脉和资源。 - -> 提供新知,创造价值 - -> 我用换脑、主动娱乐、被动娱乐、自控力、心流、边际效应、峰终定律等概念 - -> 比如在最后一个维度上,我写的是:如果你是一个“怪物”,一线城市允许你做自己。 - -> 30岁不结婚,你就是“怪物”。结了婚不生孩子,你就是“怪物”。好好的事业单位不干,你就是“怪物”。你大学毕业后不考研,你就是“怪物”。你夏天穿个超短裙,你就是被人说闲话的“怪 - -> 容易理解,不能高冷 - -> 就大众阅读来说,好的内容是那些社会中大多数人踮起脚尖恰好够得着的内容,它不会对大多数人的智力和学识构成严峻的挑战,同时又能让大多数人感受到阅读比自己水平高一点点的内容时的美好。 - -> 真诚沟通,不端不装 - -> 《写给每一个渴望向上生长的你》 - -> 但几乎篇篇是精华,在这里,我不用费尽心思想标题,只需要把内容做好就可以。为什么呢?因为在知识星球里写文章,核心目的只有一个:用最好的文章,服务好社群成员。所以对于所写的文章,不用考虑阅读量,不用考虑后续传播,我安心写好内容即可。 - -> 有目的地写作要做到三点:一是明确写作目的,二是明确阅读对象,三是明确阅读场景。 - -> 双方既是信息发送者,又是信息接收者。 - -> 写作是典型的单向沟通。你写,对方读,或者对方写,你读,这就是写作最大的缺陷。 - -> 1.采用平等的姿态、分享的口吻 - -> 我们写文章时,不论写的是故事型的、观点型的,还是干货型的,都要以分享的口吻来写,不要以说教的姿态。 - -> 写作的时候,一定要记住:作者没有智力优越感时,才能给读者创造阅读愉悦感。 - -> 我的助理写过一篇有点失败的文章,题目是《放不下手机?你可能是“屏幕上瘾症”》,这篇文章的一大败笔就是中间有一大部分内容看起来像产品说明书,没有对象感,没有聊天感,只是单纯地传递信息,文章读起来枯燥无味。 - -> 这一节,我们是以沟通的角度讲写作时的用户思维,那么沟通的效果有几层?最高一层是什么? - -> 个心理学概念叫“孕妇效应” - -> 因为我写文章时的出发点不是卖产品,而是回答这样几个问题:考虑读者看到题目点进来后,我能给予他什么?他能得到什么?然后再去想:在这个基础上,我如何自然而然地把我的产品推出来。 - -> 写作者常有一个思维误区:我只管把文章写好,看不看是读者的事,不看是他的损失。 - -> 用户思维的背后是产品思维,产品思维里非常重要的一项是服务思维。比如你开一家火锅店,你的食材再新鲜,味道再美味,但服务很糟糕,你的生意也不可能红火。 - -> 写作者的服务逻辑应该从哪些方面入手?(1)更直接易懂又有吸引力的标题。(2)颜值更高的封面图和文章配图。(3)提高读者阅读效率的排版设计。(4)更及时地在评论区和读者互动。 - -> 我也想写,但总是不知道该写什么,怎么办? - -> 你对这个世界要有点意见 - -> 包装得更犀利:《是金子得选对地方才会发光》改成《职场最大的谎言:是金子,在哪都会发光》包装得更有品位:《孩子的教育是对未来的投资》改成《投资孩子教育,就是投资你的未来》包装得更有优越感:《培养自己的“静能量”》改成《高手,都在培养的自己的“静能量”》 - -> 罗振宇们靠不住,薛兆丰们靠不住》一文中,我要论证“再好的方法都不能适用于所有人” - -> 做加法是为了提高文章的信息总量,做减法是为了提高文章的价值密度。 - -> 这个技巧需要你的耐心、细心。对于文章,你要一句一句地去读,然后一点点修改。但只要你这样做了,你的文章立马会上一个档次。 - -> 其实所有事情的发生都是从因到果,从过程到目的,从方法到成绩。我们梳理事情时也是如此,但当我们表达出来的时候,就要全倒过来。所以,写文章时一定要记住一句话:用演绎推理来构思,用归纳推理来呈现。 - -> 1.按重要程度排序 - -> 2.按因果关系排序 - -> 3.按结构关系排序 - -> 4.按时间顺序排序 - -> 5.按推进步骤排序 - -> 摆事实,讲道理 - -> 某天,你等红灯时,一个失明的人站在路口不知所措。你正准备去帮他,一位姑娘跑过去扶着他过了马路,你心里会有遇到“同类”的感觉,因为她做了你认为对的事情,这就是共鸣。 - -> 帮你表达了内心的观点。所以这件事会让你感到“与我相关 - -> 职场潜规则,做得越多,死得越快。你的勤奋,才是你失败的真正原因。痛苦,是你的天分。 - -> 犀利犀利就是要一针见血,要足够震撼人心。永远都要建立做事的优先级,除了最重要的事,其他都不重要。你的拼命努力,只是别人的工作标配。我真的瞧不起你,因为你不思考。在中国,有2000万大学生在假装上课。 - -> 这个案例就是证明“坏运气是好运气开始”的绝佳案例,很多用户看了都被说服了,尤其是正在经历坏运气的用户,看完会觉得受到安慰,说不定就会转发朋友圈,也去表达你要论证的这个观点。 - -> 因为一切文章的初稿都是狗屎,这句话是作家海明威的金句之一,虽然有点极端,但很有道理。 - -> 茅盾说:“练习写作的秘诀是不怕修改。” - -> 看结尾有没有扣题,能不能制造共鸣、引发话题等,以及最核心的——能不能刺激读者主动分享文章。 - -> “陪衬机制”的概念。但它在论证这一观点时,用了这样一段话。比如,你给领导写报告,如果时间充足,第一稿可以糙一点,因为无论怎样,领导看完都会提出意见让你改,所以第二稿要憋足劲,搞得完美一些,对比之下,比第一稿好那么多,通过率自然也高。再比如,如果你是女孩,找闺蜜逛街,就不能找和你颜值差不多的,要找比你差一点的,道理你自然懂。这个案例就有价值观不正的嫌疑,容易招来非议。 - -> 我们应当先把不必要的话、不必要的字,狠狠地删去,像农人锄草那样。不要心疼一句好句子,或一个漂亮字,假若那一句、那一字在全段全句中并不起什么好的作用。文章正像一个活东西,全体都匀称调谐就美,孤零仃的只有一处美,可是跟全体不调谐,就不美。 - -> 这是我们打磨细节的第一步:删、改。删无用的,改能用的。你要记住,一篇好的文章不是一句话好,也不是一段话好,而是细节、整体上都很好。 - -> 结果刷朋友圈时,我越刷越委屈甚至气愤,这期间他竟然更新了5条朋友圈。 - -> 第二,读给别人听,按别人听后的反应来修改。唐代诗人白居易为了把文章改得通俗易懂,常常把写好的诗文读给老婆婆听,一直要修改到让她听懂为止。 - -> 著名主持人杨澜说过一句广为流传的话:没有人有义务透过你糟糕的外表去发现你内在的美。 - -> 服装搭配方面有一个三色原则,指的是全身上下的衣着应当保持在三种颜色之内,否则就容易混乱。 - -> 以我们按手机屏幕大小总结出一个大概标准:不超过5行字为一段会有比较好的阅读体验,三四行一段是比较舒服的,一段文字最好不要超过8行。一般手机屏幕显示的行数大概是20行,加上留白的空间,一般控制在一屏显示3~4个段落比较合适。 - -> 对很多人来说,写作最大的阻碍不是技巧,而是一种病,一种时髦的病——拖延症。 - -> 第一,明确截止时间,因为截止时间就是“第一生产力”。一件事如果没有最后期限,没有非做不可的理由,就很容易造成拖延症。 - -> 当你设定了截止时间后,你要预估你的能力,设想你以最高的效率多久可以完成,然后从截止时间往前推,推出你的开始时间。从开始时间到截止时间就是你的写作周期,在这个周期内,你的效率处于爆发状态。 - -> 当时,我看到李安的一段话,他说他是不可知论者,世上没什么定论,任何可以讲出来的道理都是一种偏见。 - -> 想在写文章之前就想清楚怎么写,就能写得好,这不可能。我写了300多万字,还是想不清楚,一篇文章还要打磨半天,所以不要抱有完美主义倾向,你要记住:写完之前,完成最重要;写完后,完美最重要。 - -> 第4节 如何用动词、名词、形容词神经心理学认为,人的爬行脑(也就是控制人欲望的那部分大脑)更喜欢视觉化的信息,而不是抽象的信息。所以,我们进行内容表现时,要多做视觉化表达,少用抽象化表达。具体来说就是两个技巧:少用形容词,多用名词、动词。少用形容词文案广告圈有个不成文的定律:最好不用形容词。你想想看,在经典的广告中,我们确实几乎看不到形容词。 - -## 笔记 - - -> 它不能高冷,不能让大多数人望而却步;它不能低俗,不能只迎合人们的欲望。 - -💭 雅俗共赏 - -> 但越不去做,就越觉得难,最终陷入死循环。 - -💭 节奏感,正反馈 - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/当下的力量(白金版).md b/life/阅读/个人成长/当下的力量(白金版).md deleted file mode 100644 index d1f61224..00000000 --- a/life/阅读/个人成长/当下的力量(白金版).md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: 当下的力量(白金版) -description: 《当下的力量(白金版)》堪称心灵读物经典,作者埃克哈特·托利指出了我们日常痛苦的主要来源——被大脑思维所控制、焦虑过去和未来而非活在当下。但实际上,我们只能活在当下,活在此时此刻。通过向当下的臣服,你才能找到真正的力量,获得内在的智慧和真正的喜悦。作者在《 -keywords: - - 当下的力量(白金版) - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《当下的力量(白金版)》 -- **作者**: 埃克哈特·托利 -- **分类**: 个人成长-励志成长 -- **ISBN**:9787508661766 -- **出版社**:中信出版集团 - -## 概述 - -《当下的力量(白金版)》堪称心灵读物经典,作者埃克哈特·托利指出了我们日常痛苦的主要来源——被大脑思维所控制、焦虑过去和未来而非活在当下。但实际上,我们只能活在当下,活在此时此刻。通过向当下的臣服,你才能找到真正的力量,获得内在的智慧和真正的喜悦。作者在《当下的力量》中提出了几个非常实用的方法,让自己认清时间的幻象,活在当下。《当下的力量》对于普遍焦虑、抑郁、压力大的现代大众读者来说,是一本切实有用的好书,将让我们认清时间的幻象,活在当下,找到真正的力量,发现平和与宁静的入口。 - -## 划线 - - -> 你生存在这个世界就是要使宇宙的神圣目标得以实现。你看,你是多么重要! - -> 我们都知道ABC理论,A是引发你情绪的事件,B是你的信念或你对事情的诠释,C就是结果,即你的负面情绪。通常,当人们不喜欢C的时候,都会去找A的碴儿,尤其是与创造A有关的人。 - -> 。与其去改变外在的人、事、物,不如改变我们自己的内心来得省事省力。而你会发现,当你转变了内心的状态之后,环境也会随之转变,这就是所谓的“境由心转”! - -> 活在当下。 - -> 但是我们多少人还是活在过去之中不肯放下?未来还没有来临,你也根本不可能去掌握它。你所能拥有的,不就是当下这一刻吗? - -> 像《当下的力量》这样的书十年甚至几十年才能产生一本。它不仅仅是一本书;在这本书中还有活生生的能量,当你读这本书时你可能会感受到这种能量。它有一种惊人的力量, - -> 我生命中的每一刻都是奇迹。这绝对是真的,不管我是否能够去实现它。 - -## 笔记 - - -> 他认为,所有人类的疯狂行为都是出自无意识,受到我们从小被制约的人生模式操控。比如说,你对一件事情的反应、看法、做法等,通常都有一定的轨迹可循,但是你不一定喜欢或赞同它们。所以从某种程度上来说,我们都是一台被编好了程序的计算机 - -💭 潜意识 - -> 在书中,作者还提到了一个我们受苦的肇因:痛苦之身(pain body,第二章)。痛苦之身是我们内在的一个能量场,它是我们过去未被合理表达和适当释放而累积下来的负面情绪能量场。 - -💭 痛苦需要缓释 - -> 人类受苦的根源来自我们大脑的思维(第一章)。思维其实也不是问题,问题出在我们无法控制自己的思维,反倒成为思维的奴隶,成为自己“强迫性思维”的受害者。 - -💭 除了身体上的痛苦,其它任何痛苦都是虚无缥缈的 - -## 书评 - - -## 点评 diff --git a/life/阅读/个人成长/我的第一本人生规划手册.md b/life/阅读/个人成长/我的第一本人生规划手册.md deleted file mode 100644 index 3c46f61a..00000000 --- a/life/阅读/个人成长/我的第一本人生规划手册.md +++ /dev/null @@ -1,340 +0,0 @@ ---- -title: 我的第一本人生规划手册 -description: 作者用解剖学教科书的理念,分别在人生规划大方向,资源配置,时间管理,专业知识学习,以及职场实战落地的五个角度,针对同一个“人生规划”的问题,做了深入浅出的系统性交代,能帮助读者快速走出人生迷茫的盲区。全书主要阐述如何基于自身的情况,来快速定位自己的人生规划 -keywords: - - 我的第一本人生规划手册 - - 个人成长 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《我的第一本人生规划手册》 -- **作者**: 柏永辉 -- **分类**: 个人成长-励志成长 -- **ISBN**:9787520814669 -- **出版社**:中国商业出版社 - -## 概述 - -作者用解剖学教科书的理念,分别在人生规划大方向,资源配置,时间管理,专业知识学习,以及职场实战落地的五个角度,针对同一个“人生规划”的问题,做了深入浅出的系统性交代,能帮助读者快速走出人生迷茫的盲区。全书主要阐述如何基于自身的情况,来快速定位自己的人生规划的不同阶段位置,制定接下来中长期的发展规划,然后逐步盘活自己的人生? - -## 划线 - - -> 10%的规划原则:当你想要去做十年规划的时候,我们建议用一年的时间去思考规划;当你想要去做一年规划的时候,我们建议你用365天中的36天去思考规划; - -> 真正原因是:你的后防线,你的系统能够支撑你有多少时间来成就自己,很多人富有才华,却因为后防线不稳定,没有修炼自己技能的机会,最后错过了时间,遗憾终身。 - -> 学和习的比例:1:6~1:10的比例 - -> 你就知道,从知道知识到掌握知识,再到应用,最后到内化成自己的,至少需要6小时的训练时间。 - -> 人生规划可分为四个规划阶段,首先是学业规划,之后是职业规划,接着是事业规划,最后是创业规划,四者合起来称为人生规划。 - -> 我们的一生究竟应该怎么过?如何平衡自己的工作和生活?如何找到自己的人生方向?对应的答案也是五花八门 - -> 我如何修改自己的命运剧本?尤其是在资源极度匮乏的情况下。 - -> 想要锁定某一个问题的话,我们可以用不同维度的分析来交叉验证。 - -> 从大量对标和案例中定位自己 - -> 人类社会的永恒挑战,是如何应对各种未知信息带来的不确定性。学会如何在不确定的环境下进行人生决策,一直是我们的永恒话题。 - -> 你永远都猜不到,以后的生活是什么样子。 - -> 如何基于每一个人的当前状态,通过什么样的改变,来逐步盘活自己的人生? - -> 不少人看上去在非常努力地学习,其实是在努力学习各种“不劳而获”的投机性技巧,好最终达到获得更高收入的目的,所以当不少人开始学习自身能力无法承载的知识体系的时候,打着“以学习目的来偷懒”的谎言,也变得堂而皇之了。 - -> 你父辈的收入,决定了你的起跑线;而你的收入,同时决定了你孩子的起跑线和父母辈的晚年归属。 - -> 为什么一生下来父母就帮我们决定我们长大要做什么,从来没人问我们想做什么。 - -> 先生存,再发展,后实现自我价值”,评估自己,现在定位在哪里,以及现阶段的自己应该做什么。 - -> 因为你的两条腿的长短,其实是有一两厘米长短的细微偏差的 - -> 走直线是最快逃出草原的最佳方法,即便草原的植被和树木都在悄悄移动,只要无视它们的位移干扰,沿着直线就可以走出去了。 - -> 我们基本上能够感受到大多数低收入家庭的困窘在于,他们每天要花费海量的时间来为生活琐事奔波忙碌,光是维持生存就已经很辛苦了,更别说改善生活条件了。 - -> 你的 - -> 家庭人均月收入 - -> 当自己的家庭人均月收入还停留在1万元人民币以下的时候,这时候你需要思考的是谋生级别的修炼,这个阶段主攻专业知识的修炼;当自己的家庭人均月收入在1万~2万元人民币的时候,你可以开始考虑中层管理者的管理能力修炼,这个阶段主攻项目管理的投入产出比,以及组建团队的修炼;当自己的家庭人均月收入在2万~3万元人民币的时候,你可以开始考虑眼界和格局的修炼,这个阶段主攻战略地图中的项目组合收益和成就他人的修炼;当自己的家庭人均月收入在3万元人民币以上之后,你可以试试看去做一些有情怀,实现自我价值的事情了。 - -> 先生存,再发展,后实现自我价值”的三步骤 - -> 第一个里程碑:累积50万元。第一个50万元的财富获取,代表你在这个社会上存活下来的标志。 - -> 在这个阶段你唯一能够和同行拼的能力就是:反馈速度和反馈效率,以及结果的专业度,然后逐渐让自己变得值钱。 - -> ,于是我们会问一下咨询者,你看了多少本关于自己行业所在的岗位专业书籍,理解程度是多少?每月看多少本专业书? - -> 到了这个阶段,是开始冲刺累积1000万元的阶段了,有些人会很快赚到,但是有些人一辈子都挣不到这笔钱,毕竟资源协作分工的时候,总资源就这么点儿,这就是现实。 - -> 我需要学习政治和打仗,然后我的儿子才能学习地理、自然、造船、航海、商业、农业;再之后我儿子的儿子才有机会学习绘画、诗歌、音乐、雕塑、挂毯和瓷器。——美国第二任总统约翰·亚当斯 - -> 你没办法好好创业成功,是因为你没有一支执行力非常强悍的团队来落地结果;如果想养一个团队,你必须有一个特别好的营利性项目,而且你得负责协同和跟进;如果你没有跟进和管控一个项目的能力,是因为你不懂统筹协调,没有相关的管理能力;如果你统筹协调的能力不好,就无法带好团队;如果你听话照做都做得一塌糊涂,那必然是你专业知识没有很好地掌握;为什么你很努力地学习专业知识却又学不会,很可能是你不知道自己的天赋优势是什么;如果自己发挥不出来自己的天赋优势,自己的童年大概率过得不怎么好。 - -> 生命时钟模型——人生资金收支占比细分 - -> 当你的创业生涯规划无法开启的时候,那说明你的事业生涯还需要重修。当你的事业生涯规划无法发力的时候,那说明你的职业生涯规划没有做好积累。当你在困惑自己的职业生涯规划的时候,那说明你的学业生涯规划没有做好规划。当你在迷茫学什么专业的时候,那说明你自己都还没有想明白自己的天赋是什么。 - -> 任何你想要跳过的基本功,都会在下一个关卡非常有耐心地等着你来补课和重修。你以为你可以弯道超车来加速,结局却是拐弯的时候栽倒在阴沟里。 - -> 因为岗位薪酬设计和工作价值的关系,你大概率可能会被锁死在某一个范围内。如果你想要破局的话,唯一的方式就是重新学习可以承载3~10倍及以上收入的知识体系,或者切换到更高收益的行业跑道或公司。 - -> 所谓的“终身学习者”的痴迷学习其实是一种逃避真实世界的历练,而社会其实已经无形中制定好了各种规则,来一轮又一轮筛选你,并且暗中给你标记好了你的估价而你自己却不自知 - -> 每个人都是自己人生的设计师。 - -> 其实很多人的命运没有无限可能,光是活着就已经耗尽很多力气,更不要说梦想了,任何超越自身能力范围的跃迁成长,弯道超车,都会在下一个阶段栽跟头。 - -> 在1%的关键时刻选择比努力更重要,在99%的日常生活中,努力比选择更重要。 - -> 不要将必要开销和你的欲望混为一谈。你自己和你家人的欲望,永远不是你的薪水所能满足的。因此,假如你的收入是用来满足这些欲望的话,那么钱必定会花光。 - -> 你所知道的,就是我希望你知道的,于是你以为你知道了很多 - -> 第一步:寻找。请到搜狗微信网站搜索和“人力资源”相关的各种关键字,看看能对标上多少个公众号 - -> 它们是一个月更新一次,还是一周更新一次,还是一周更新三四次,还是日更新的,这个阶段你需要注意的是,哪些是假勤快,哪些是真勤快。 - -> 第三步:收集。找到自认为觉得不错的10~50个人力资源的公众号,用Word文档复制粘贴一个公众号里面的最近50~100篇关于人力资源的公众号文章,重复50遍,直到收集全这些文章为止, - -> 第四步:分析。这些专业文章都在讲什么,人力资源有哪些高频词汇,哪些是我自己一直在工作中用到的模块,那些年薪30万~50万元的人力资源经理都在做什么样的工作内容,我的岗位和他的岗位之间的匹配度和差别是什么? - -> 唯一需要注意的就是,尽可能找知识的源头,而不是在自媒体和信息流媒体上找那些低质量的口水文章,这类文章多半是刷浏览量的,不具备科学性和严谨性。 - -> 如果你想要“思想越狱”的话,自己也可以试试看,在购书网站上查找100本专业书,在靠谱的行业网站上查找100篇相关的文章,然后整理成资料合集,配合上我在第一章节说的“信息10问”,来不断校验自己的思维偏差。 - -> 一代人,有一代人的使命。 - -> 这三条命分别是生理意义上的生命、行业范畴上的天命、人类范畴上的使命。 - -> 用一辈子的时间,投入两辈子的精力,去成就一个可以影响三辈子人的事业,最后让第四辈的玄孙都引以为傲的,那么这辈子就值了。 - -> 你的规划思考能够到达多远呢?是10天的规划,还是100天,还是10个月,还是10个季度,还是10年,甚至是100年呢?为什么很多人的计划只能是短期计划而不是中长期计划呢? - -> 当你明白了传承背后的意义,你就可以明白了:另一半的重要性,另一半在做家庭稳定器时的重要性,配偶的言行举止,以及精神世界和认知观,对家庭,对长辈,对下一代的思想构建至关重要。 - -> 先生存,后发展,再实现自我 - -> 如果你的年薪在15万元以下,基本代表你还在生存线上挣扎,建议你每月把70%的精力放在专业知识上,无论是在公司还是下班后。因为当你还没有夯实自己的专业知识的时候,月收入一定没有过万,于是70%的精力放在专攻专业知识上,一定有用。 - -> 家庭人均月收入1万元的生存关”、“家庭人均月收入2万元的发展关”以及“家庭人均月收入3万元的自我实现关” - -> 探索阶段、学习阶段、适应阶段、收获阶段、完成阶段 - -> 生存关冲发展关的20%进度:探索阶段;生存关冲发展关的40%进度:学习阶段;生存关冲发展关的60%进度:适应阶段;生存关冲发展关的80%进度:收获阶段;生存关冲发展关的100%进度:完成阶段。 - -> 通过这些年的记录,我会察觉了什么,我发现了什么? - -> 记录下来自己在这半年中,学习了哪些知识体系,见了哪些高人,帮助了哪些朋友和陌生人,参加了什么样的活动,推进了什么样的人生主线任务。 - -> 同样的道理,也可以给你省下很多焦虑的时间,你可以记录下来,然后等时光流逝,让10天后的你,100天后的你,10个月后的你,10年后的你去思考这事情重要吗?还能真的感同身受那一天你的感受吗?说不定第二天大脑自动清库存,又嘻嘻哈哈像一个没事人一样了,根本不知道昨天发生了什么。 - -> 首先切换到“今天,明天,后天待办事项清单”,不断获得自己人生的三天自我控股权;其次不断用压力测试自己的能力上限和能力下限;再次保持节奏,让自我指挥权变得越来越强,逐步去做能够改变自己命运的事情;最后盘活自己的人生。 - -> 2016年,因为在沪江CCtalk上无法继续录制课程,所以我转战网易云课堂职场专栏录制课程,先从免费课程开始积累人气,然后慢慢开始构思录制付费课程,并在2016年的月中辞职,准备全身心投入进去,同年年底,我的“职器”课程录制完成。 - -> 只要用心打磨好属于自己的核心产品,自然而然就会有越来越多的收益,让我能够养得起一个团队,同时一个团队也可以助力我加速产品的推广和传播 - -> 第一阶段:好点子。第二阶段:最小可行性模型。第三阶段:好产品。第四阶段:好产品+附属产品搭建产品组合。第五阶段:有全职团队为我助力。第六阶段:建立公司的规章制度。 - -> 工作赚钱类计划、日常生活类计划、学习投资类计划,以及娱乐休闲类计划。总的来说,工作赚钱类需要占比60%左右;日常生活类需要占比25%左右;学习投资类需要占比10%左右;娱乐休闲类需要占比5%左右。 - -> 一般每个月都能将规划运营得很好的人,基本上都是项目经理和运营经理级别的高手。因为一个月的统筹调度能力,是如何投入成本和精力,来创造价值并逐步实现的过程。 - -> 作为一个××××(角色),我想做×××(意图),这样我就可以得到××××(预期结果)。 - -> 作为一个××××(角色),我想做×××(意图),并且希望在××××(时间期限)内,以××××(多少资源投入)的成本下,完成这个任务,这样我就可以得到××××(预期结果)。 - -> 作为配偶的角色,我每周的五个工作日少掉了10个小时的时间在陪伴家人上,那么作为相应的补偿机制,我就得在周末的家庭角色上,至少多承担些家务,以及和孩子陪伴的时间,在这个时间段,就不可以时时刻刻关注工作的事宜。 - -> 一套好的解决方案,是能够共赢并且互惠互利的;一套坏的解决方案是自己利益最大化,别人没有任何利益。 - -> Mo-S-Co-W,是四个优先级别的首字母的缩写,发音谐音为“莫斯科”。Must:必须做的;Should:应该做的;Could:可以做的;Would not:不要做的。 - -> 而能够抓住事物核心的止损的基本点,就是这个底线思维的核心思想,你做什么都没用,除非你完成了某一个核心任务、核心技能,这是在时间、资源都不够的情况下,做最快速决断的最佳起始点。 - -> 什么是可以有的?Could(可以有),可以有时间了再给。 - -> 什么是可以没有?Would not(可以没有),等有时间了再说。 - -> 永远给自己留出来一部分缓冲的时间,缓冲的金钱,缓冲的冗余资源来让自己从容不迫,而不是卡着点儿去做各种事情。 - -> 第一类事情是创造价值的工作,创作过程中不可以被他人干扰。 - -> 第二类事情是你需要和他人协同互动才能推进的工作,另一方不在无法推进。第三类事情是附加值相对低的碎片任务,即使随时被打断都可以继续做的,并且有别于前两者必须你自己去做的事情,可以理解为番茄工作法。 - -> 所以一天上班的9小时的时间会被拆分成:3小时创造性任务、3小时沟通类任务,以及3小时左右的琐碎任务。当你开始用这样的分类方法量化自己的工作内容的时候,你就会知道,工作待办事项的性质是什么了。 - -> 一天至少需要找到一个连续2~3小时,中途不可以被打扰的创造性工作任务 - -> 当然还是有一个非常值得上班族借鉴的职场经验。一般情况下,优先面对面沟通,或者直接打电话说明白要做什么事情,然后双方沟通协商一致之后,再发一封邮件定为正式函,附上相关的表格和公文附件。 - -> 其实当你站在周计划的维度去认真思考问题的时候,这个问题就变得非常简单了:你只要问自己这一周想要做多少个创造类任务,和哪些部门的人内部沟通,和哪些客户外部沟通,以及为了完成这周的主要任务和沟通工作,得做哪些准备工作。 - -> 学习的最终目的是不断纠正自己对世界的认知偏差,只有看懂了客观世界的发展规律,才能适应其中的趋势 - -> 目标明确:学会权衡收益与代价,付出与收获。 - -> 独立自主:希望独立学习,自主思考,而不是被灌输。 - -> 经验学习:带入以往的经验,具有特定的思维和习惯。功利性:意识到学习的必要性时才会准备投入学习,不喜欢被强迫。任务驱动:跟工作任务相关的学习,喜欢实践性主题。问题驱动:喜欢现实的问题解决,愿意学习解决思路。 - -> 也就是说,成人学习是以解决当前具体问题为最终目的,带着困惑去学习特定知识来优化自己的技能,并且通过行动来解决自身的困境,而不是单纯意义上的信息积累,否则和听相声、侃大山没有任何区别,给你再多的信息和知识,都是无意义的重复。 - -> 比如,如何让自己每月多1000~3000元收入?如何让自己每天节约2小时时间?如何让自己的工作效率加快?如何管理5~10人的小团队?下个月的营业额如何达标?如何准备跳槽到收入高的公司?这些都是非常实际的问题。 - -> 废掉一个成年人到底有多简单:只要不停给他新知识,让他忙于学,却从不实践就可以了。 - -> 相信我们会在朋友圈看到不少工作5年以上,依旧还在打卡学习的上班族,用着“无效努力”来麻痹自己,好给自己一个心理安慰,这类人我们称为“学习爱好者”。 - -> “闲坐小窗读周易,不知春去几多时。” - -> 不断试错直到找到感觉的过程,称为“习”。 - -> 但是非常可惜的是,我们经常看到这样的情况,一旦误会了“学习”的最终目的是什么,而只是一味学新知识,不是“学以致用”的话,了无止境的狂热的填鸭式教育将会大行其道。 - -> 这个禅机一般的秘密,已经在《道德经》中说得非常明白了,《道德经》第三十九章有云:“昔之得一者,天得一以清;地得一以宁;神得一以灵;谷得一以盈,万物得一以生;侯王得一而以为正。”因此,你“得一”了吗? - -> 他们在年少的时候看懂了各种行业的效率转换规则,各种技术白皮书,知道如何让这些规则为我所用,撬动杠杆得到自己想要的结果。 - -> 用这些规则来解决专业领域的特定问题,然后优化资源与资源之间的协同效率,达到提升投入产出比的结果 - -> 因为企业背后面临的真实挑战是如何拿着这些原有资源,通过优化配置的方式,在未来的不确定风险下赚到高于同行的收益,比如,如何提升设备单位时间内产出量,如何提高仓库的周转率,如何降低残次品的生产,如何缩短研发周期,如何提升客户满意度。 - -> 所以,你是自己所在领域的专家吗?你的电脑里,你的书架上,是否有关于这个领域问题的10本以上书籍? - -> 我们真的有必要报名学习这么多课程,这么多知识吗?这些知识背后的源代码的脉络和起源知识是什么?整个专业知识地图的边界是什么? - -> 先思考知识框架和分支脉络,以及不同分支之间的区别和关联,当看懂骨架之后,再来思考不同分支专业知识的应用场景 - -> 于是我开始停止买书,有意识地给我想看的书籍进行排序和归纳,慢慢我开始找到它们之间的规律了,然后进行大规模的重复性剔除工作,重建专业认知框架,这时候要看的书籍越来越少,同时看的书籍越来越专业、精深。其实没什 - -> 这样的反向拆解能力可以理解为“逆向工程思维”。 - -> 这会有两种呈现方式:一种是所有元素全部呈现的完成时态;另一种是你自己可以理解的分级状态,包含你已经掌握的简单状态、入门状态,还有中高级较难的状态。 - -> 通过系着一根羊毛线,时时刻刻都可以定位自己在迷宫中的方位,以及被探索过地方的路线,通过不断排查的方式,最终找到目标,这种方法其实就是计算机的经典算法中的暴力遍历的算法:简称“迷宫寻路算法”,或者叫作“回溯算法”。 - -> 右手原理。 - -> 从起点出发一直往里走,遇到岔路口就做一个节点记录,然后利用右手原理,一直优先选择右边的路线。只要还能往里走,继续推进前行,直到走不下去碰壁为止,于是沿着路线返回最近的上一个节点,选择还没有被探索过的路线进行探索,直到所有的可能性都被探索到为止。 - -> 如何防止自己迷失?其实定期做复盘工作,是一件特别有用的事情。 - -> 当你把这几年来的复盘笔记、工作日志,以及任务清单都拼接起来,再结合自己所在领域和专业知识框架之后,整个地图全貌就会越来越清晰 - -> 很多学习英语的“壮士”们都有一道无法逾越的心理魔障,那就是心平气和看完一本英语小说或期刊。这是检验是否掌握英语的一个里程碑式的考核。 - -> 我遇到过不少学员,想要通过记录心情日记的方式来复盘自己的情绪,最后发现根本没有任何效果,原因就在于只是记录自己的情绪,而不是记录影响自己情绪的事情步骤,最后咬牙切齿在自己的日记本上写下:“我永远也忘不了这一天!”,结果过了一两个月之后再看,压根也不知道,那一天到底发生了什么。 - -> 1.0阶段:定性定量分析研究。2.0阶段:样本库分析思考。3.0阶段:学习专业知识。4.0阶段:开始行动验证。5.0阶段:最终改变命运。 - -> 你做什么事情,会让你有成就,却对别人没好处呢?只要你想不明白这一点,你就无法建立自己的“专业护城河”,无法让自己变得更加强大。有时候个人成就太多,对自己未必是有好处,反而会因为对他人没有任何好处,而招致他人的嫉恨。 - -> 但是如果你能全方位了解各种消息,你就可以更多维度地深入理解历史中的每一个人,他们的所思所想,所作所为,没有绝对的好人坏人,只是立场不同。 - -> 知识边界、统计学、高频词汇,以及练习时间。 - -> 就是衣食无忧级别,没有任何功利心,没有考核指标,长时间浸淫在文学世界的闲情雅致,超强的鉴赏功底,以及拥有这样一个氛围的家庭。 - -> 有两种可能,一方面他自己通关了,但是总结不清楚其中的道理,所以弟子也听不懂;另一方面就是老师在教徒弟的时候,有意留一手。于是一个非常棘手的问题摆在你面前:如何让自己超越自己的老师? - -> 如果你想要突飞猛进地修炼成专家,甚至超越你的老师,你需要的是一套更加先进的思维框架,以及海量的对标数据样本,再加上足够时间的“刻意练习” - -> 所以AlphaGo Zero通过向规则学习,再加上时间的积累以及自我快速迭代学习的方式,让围棋规则变化出新的排列组合,而自主研发的规则成了它甩开同行的杀手锏,让自己快速成了行业中的佼佼者。 - -> 不少特别努力的小伙伴,都在非常努力地在自家“自留地”上种着从别人手中得到“转基因郁金香”,而只有少数派在耕耘自家的“土豆田” - -> 这个老师的思想,启蒙了多少因此而受启发的学生、读者?这些弟子中,有多少弟子始终是弟子,又有多少弟子是超越老师的?不管这个老师有没有名,先看看这个老师门下有多少个毕业通关,开枝散叶,自成一派的弟子? - -> 电影中小马同学是一个经验丰富的植物学家,所以他会用另一个思考维度去思考携带的土豆既是口粮又是庄稼,如果计算机专家困在火星有可能就死翘翘了。正 - -> 当你还在提桶的时候,需要建造管道。——《管道的故事》 - -> 出售自己的时间,换取金钱;使用自己的技术,换取金钱;整合自己的资源,换取金钱;搭建自己的平台,换取金钱。 - -> 所以无论你修炼哪一条跑道,你最终都会发现,只要坚持下去,你都会有收获。很多人因为没有“人生钱”的时间积累、业务量积累、经验值积累,贸然进入“钱生钱”的市场想要一劳永逸,结果一场空,我只能说,成年人的世界,风险收益自行承担。 - -> ,无法复盘经验教训 - -> 从来就没什么速成,出来混,迟早要还的。世上从来都没有什么逆袭,所有的奇迹和伟大都是熬出来的。 - -> 因为这一类的工种没有任何核心技术含量,只要培训上一个礼拜甚至半天就可以胜任,剩下的都是重复劳动,因此想提升收入很难,但是被呼来唤去折腾的概率极高,而且无法掌握自己的命运,很容易因为客户或者上级一两句话而被扣奖金,甚至会丢工作。 - -> 其实吃苦的本质是让自己变得更强,让自己的生活变得更幸福,而在此期间如何让自己的精力保持专注而不分心才是修炼的过程。 - -> 在你还不是核心人才之前,谁都可以改变你的命运,这种感觉就像踩死一只蝼蚁一样,甚至没有人知道你是谁,这是绝大多数“拿时间换钱”的人的普遍命运。 - -> 成为一个专家的第一件事情是闭嘴,倾听,然后思考,如此往复,才能让自己越来越接近专家级别的思考。而经过复杂的实践和推理,加上理论的高度反思和总结,才称得上是“专家”,所以别人随便抛出去一个问题,专家是可以直接用浅显易懂的话给对方说明白,并且可以情景再现的。 - -> 月收入过万的第一个壁垒:专业知识是不是过关 - -> 因为计算机的发明,释放了无效工作量的瓶颈;因为行业软件的发明,释放了经验值累积的瓶颈;因为互联网的发明,释放了思想与思想互动的瓶颈;因为人工智能的发明,释放了脑力深度思考的瓶颈。 - -> 年轻人不要老想着改变世界,而应该从改变自己做起。 - -> 你能不能翻身,算一下修炼成本就知道了 - -> 但是如果我们把互联网公司的加班时长额外算进去之后,你就会发现,有些互联网公司的收入其实也是很惨烈的,我们在前文中给大家普及了一个知识:薪水除以劳动时间等于时薪成本。 - -> :技术能力、销售能力、市场推广能力、售后服务能力、物流、采购、人力资源、资金调配、产品管理、产品质量、成本管控、生产能力,以及政府关系、上下游关系协调能力 - -> 那么怎么做才能拿资源换钱呢? - -> 我们先试着将自己资源系的人脉,不管是贵人、牛人、恩人,还是有钱人,统统分为三大类:长期人脉、中期人脉以及短期人脉。再结合他们的时间和精力分布,是否愿意参与某个项目来计算,我就知道这个人是愿意一起参与干活儿并且一起拿钱,还是只愿意拿资源出来,不愿意干活儿,只想着分钱的。 - -> 故事中的杰里·斯特宁在承认数百万名越南儿童大都是营养不良的大数据样本前提下,他关注的不是这个已知的事实,而是坚信,在自己已知以及其他人已知的大前提下,还能够找到大家都没有找到的第三方的解决方案——“虽然穷,但也可以健康成长”的可能性。 - -> 如何在现实生活中拿到对于自己而言相对高薪的收入,就得知道身边10多个和自己收入差距在1~3倍的同行在哪里,他们在做什么样的工作,以及他们在哪里上班,同样每天8~12小时,他们都在用什么样的专业知识和技能来完成工作中,有了这些“我自己也能够得上的参考对标”,那么我只要找到这些专业知识,以及我自己能够承受得了的学习范围,剩下的就是时间磨炼和练习量的积累了。 - -> 其实很多“资源”大都是“无效资源” - -> 因为他特别爱惜自己的羽毛,不愿意多花时间修炼专业知识,不愿意多花精力用心在服务他人上,不断为自己找借口,他希望他人给他提供各种优质服务,但是自己又给不了对方同等的置换,而且还要通过撒泼打滚耍赖的方式不断毁约,那么长此以往,他将会被他的朋友圈、社交圈所唾弃,社会就会把他边缘化。 - -> 满足对方的十个以上需求,对方会愿意帮你实现所有的梦想。 - -> 很多人只想着别人对自己不好,却从不思考自己能够为别人做点什么 - -> 长时间的孤独修行的经验值积累,直到把这个维度拉升到成为行业顶尖。 - -> 按照自然常数e的切分规则来拆分自己未知领域的学习进度,38%的时间先认真积累经验,剩下的50%时间实践,12%时间复盘总结经验。 - -> 成功人士是这么定义“失败”的,这不是失败,也不是犯错,而是试错,所以试错的结果和数据对他们很重要,而不是失败之后的心情和感受。 - -> 有了足够多的积累,才能进化 - -> 人类吃到了易于消化吸收的熟食,消化吸收食物的“能量红利”之后,打猎时间一下子就被释放出来了,人类从此不再为生存而劳碌奔波,可以静下心来思考了。 - -> 这个人完成“大爆炸”之前的准备要素都在某一个时间段收集全了,正好他的教育经历和人生经历给了他这个软性条件,正好他身边的资源和圈子给了他硬性条件,正好这个行业趋势和时代给了他这个展现和成就的条件,而且古今中外,无一例外 - -## 笔记 - - -> 这就是你在经历第一个50万元里程碑之前,必定会经历的过程,请问刚踏入职场,或者已经工作好多年的读者,你这一个关卡过去了吗? - -💭 50万的标准也许并不适应每个人,存够5年的生存金也不错 - -> 人类几千年来,发展至今一直遇到的问题是,如何在有限的资源和信息下对不确定的未来进行生死攸关的决策。 - -💭 做一个不那么错的选择 - -> 即:What(什么)——做这件事情的目的、内容。Who(谁)——做这件事情的相关人员。Where(何处)——具体实施场所。When(何时)——做这件事情的开始时间和结束时间。Why(为什么)——做这件事情的缘由、前景。How(如何)——具体方法和操作步骤。How much(多少)——准备动用多少预算和相关资源。Effect(效果)——最后预测结果如何,有什么样的效果。 - -💭 量化 - -## 书评 - - -## 点评 diff --git a/life/阅读/医学健康/你是你吃出来的(套装共2册).md b/life/阅读/医学健康/你是你吃出来的(套装共2册).md deleted file mode 100644 index 2e52fa8a..00000000 --- a/life/阅读/医学健康/你是你吃出来的(套装共2册).md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: 你是你吃出来的(套装共2册) -description: 本书由《你是你吃出来的:吃对少生病,病了这样吃》《你是你吃出来的2:慢病康复的饮食密码》构成的套装。《你是你吃出来的:吃对少生病,病了这样吃》:高血压、高血脂、糖尿病、冠心病等慢病人群都曾陷入同一个误区——误以为低油低脂保健康,其实多是蛋白质缺乏式营养不良 -keywords: - - 你是你吃出来的(套装共2册) - - 医学健康 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《你是你吃出来的(套装共2册)》 -- **作者**: 夏萌 -- **分类**: 医学健康-健康 -- **ISBN**: -- **出版社**:江西科技出版社 - -## 概述 - -本书由《你是你吃出来的:吃对少生病,病了这样吃》《你是你吃出来的2:慢病康复的饮食密码》构成的套装。《你是你吃出来的:吃对少生病,病了这样吃》:高血压、高血脂、糖尿病、冠心病等慢病人群都曾陷入同一个误区——误以为低油低脂保健康,其实多是蛋白质缺乏式营养不良;误以为只能终生服药或手术,忽略了饮食等生活方式改变带来的真正康复。《你是你吃出来的2:慢病康复的饮食密码》:本书是一本针对高血压、高脂血、糖尿病、痛风等慢病患者、亚健康人群从临床医学角度提出营养治病调理思路和方案的临床营养实践类图书。营养专家夏萌老师总结几十年临床经验,从营养学角度辨别诊治多种慢病和亚健康的成因,破除营养认知误区,深入浅出地剖析疾病的饮食根源,带给慢病患者科学的营养指导。 - -## 划线 - - -> 我不禁问自己,为什么这个奇迹会发生?营养素到底在我体内起了什么作用?肾炎的种类很多,我的疾病的治愈是运气使然还是有什么规律可循? - -> 问题最为集中的是饮食习惯不良。 - -> 在很多糖尿病患者身上,我发现他们太喜欢喝粥、吃米和面了,满脑子都是“没有主食就不叫吃饭”。 - -> 吃好三顿饭 - -> 有时候我也会遇到解释不了的问题,就去看书、找资料,在患者复诊时再把新的营养知识传授给他们,他们会毫无保留地信任我,告诉我他们自己的问题、感受,按时去做检查和化验,又会按照新的营养方案去调整。 - -> 这种情况,我过去在神经内科的时候常常遇到,那时我和大多数医生一样,把可以想到的方法都用遍后,唯一能做的就是一遍一遍地下病危通知。但现在的我认为,这一刻还可以有所作为——给生命最基本的营养支持。 - -> 一问患者家属,他夫人告诉我:他吃素,从来不吸烟,不饮酒,每天都运动。我明白了,他由于长年缺乏蛋白质导致大血管变得很脆弱,手术前已经营养不良,经过大手术的打击,体内营养储备已被全部掏空。 - -> 我给他做了饮食调查,发现他平时会吃很多米面,尤其爱吃面条,每天晚上如果不吃面条就很担心夜里会饿醒。 - -> 他很疑惑:“不是吃了降糖药就不能停了吗?”我耐心地解释:“因为你已经开始运动,并且控制了饮酒,现在又开始从饮食上努力调整,这些都是降血糖的有效方法,此时如果加上药物降血糖的力量,很容易出现低血糖的症状,轻则昏迷,重则死亡。” - -> 医生如果学会了营养学,将如虎添翼;普通人如果学会了营养学,将受益终身。 - -> 中国在此次报告中的人均寿命为:女性77岁,男性74岁。咱们的邻居日本,人均寿命在全世界排名第一,国民平均寿命为84岁。 - -> 人体自身无法合成维生素,而且各种维生素之间不能相互转化,当某一种或几种维生素缺乏时很容易出现问题,因此怎么强调维生素的重要性也不为过 - -> 中国居民膳食指南及平衡膳食宝塔(2007)[插图]2007—2016年,这10年人们的生活方式变得更加方便快捷,糖尿病、高血压等慢病成为非常严重的社会问题,更多研究资料显示工业化加工食品对人体健康产生了严重的副作用。同时,蛋白质、维生素A、铁、钙的普遍缺乏仍然存在,营养不平衡成为普遍现象。大家在享受各种美味食品时,往往忘记了食物多样化以及正确的膳食结构给健康带来的益处,所以,这一版的膳食指南除了宝塔外,还增加了膳食餐盘,提醒人们重视食物结构。 - -> 第一种是经济发达国家模式,也称富裕型模式,主要以动物性食物为主,粮食类中等,蔬菜水果比较少。富裕型模式属于高能量、高脂肪、高蛋白、低膳食纤维型,如大家经常看到的麦当劳、肯德基、星巴克等都是这类典型模式。 - -> “看咱们自己国家的膳食宝塔,上面写得清清楚楚。” - -> 所以,各国膳食指南都只适用于本国居民。再者,每个国家的饮食指南都是与时俱进的,历经一段时间后,又发现了很多营养问题,而且与全民健康明显相关,下一次的指南就会有所调整,所以要动态地看待这些饮食指南 - -> 世上最好的药:早餐、午餐和晚餐 - -> 晚餐的真正价值:补足全天没吃够的营养 - -> 少吃多餐能够减轻以往大量进食时肠胃的压力,减轻胃肠道负担,减少肌肉损害,促进新陈代谢,减少体脂,排毒养颜。 - -> 下午茶的时候可以喝些牛奶、酸奶、咖啡,加上水果和小点心 - -> 一方水土养一方人,你到了一个新的地方,就应该按照当地的饮食习惯吃,顺应当地的气候条件要求,这样才能保证健康。 - -> 脑内需求最多的脂类为卵磷脂,因此要增加磷脂食物 - -> 长期面对电脑工作,要特别注意维生素A的补充,这对提高视力、防止眼睛干涩有好处。而补充维生素A最好的方法是吃动物肝脏,另外也可以补充植物中的胡萝卜素。 - -> 女士每个月有月经血的输出,所以应该更多地补充些动物肝脏、血制品和有补铁效果的植物性食物,比如猪肝、猪血、鸭血、芝麻、蘑菇、木耳、海带、紫菜、桂圆等。补铁同时补充维生素C,可以促进铁吸收,所以要多吃水果。 - -> [插图]PART 04 我们到底应该怎么吃 - -> 水果:吃得实在太少了2013年,国际组织发布各国水果年人均消费指标:中国年人均64千克,日本年人均54千克,印度年人均37千克,巴西年人均109千克,俄罗斯年人均71千克,美国年人均110千克。为什么我们没有美国人、俄罗斯人水果吃得多?因为在吃水果的问题上全国差距太大,有很多人根本不吃,有条件的人和有健康观念的人要好一些。尤其是男同胞大多认为水果是零食,不爱吃,甚至我在出诊时还遇到过这种说法:“水果不都是女人吃的吗?”2002年,中国营养学会有关中国膳食与健康的调查结果显示,中国城乡居民的膳食中,每人每天平均食用水果的数量是45. - -> 肌肉组织:肠胃、心脏等器官动力不足都可以由此入手肌肉,不仅代表着健美,还代表着力量。常见的肌肉被分成骨骼肌、平滑肌和心肌。骨骼肌很好理解,主要指四肢的肌肉。平滑肌主要分布在胃肠道,这类肌肉多不受自主意识的控制,有自己的收缩节律。也就是说,胃肠道蠕动多少次你无法控制。平滑肌在各种管道的中间层,前面介绍上皮细胞时讲了人体中所有的管道,凡是有管道的地方就会有平滑肌,比如消化道、呼吸道、生殖道等。心肌,不用多说,大家也知道,就在心脏。便秘很可能因为身体缺肉 - -> 我在书中详细地介绍了我的思路轨迹和大致营养原则,希望你能通过了解我的思路,建立一个属于自己的营养治疗方案。信息爆炸的年代,知识更迭得飞快,临床营养学方面还有很多内容没有被研究透彻。我不敢说我讲的都对,我只是写出了基于自己大量治疗经验对营养的理解和我现在采用的方法。与你分享本书,愿共同进步、共同受益。夏萌2019年5月 - -> [插图] - -> [插图]PART 03 吃对了,降血脂哪有那么难 - -> 低密度脂蛋白在血液中游走,携带着肝脏合成的脂肪、磷脂和胆固醇,寻找低密度脂蛋白的受体。低密度脂蛋白的受体遍布于血管内皮细胞、动脉壁平滑肌细胞、肝细胞、肾上腺皮质细胞、淋巴细胞、单核细胞、巨噬细胞。当低密度脂蛋白找到载脂蛋白B的受体后,互相识别一下,信号对上,然后顺利登陆,把货物卸下来。甘油三酯成为能量,供细胞应用;磷脂和胆固醇成为细胞的结构成分或者激素的合成原料。综上,当看到化验单上低密度脂蛋白胆固醇旁边有个向上的箭头时,我们最好采用这样的思路,至少我们要知道三点。第一,来源于肝脏的胆固醇合成比较多,说明肝脏的功能还不错。第二,低密度脂蛋白胆固醇的接收点在血管内皮、动脉壁平滑肌、肾上腺、免疫细胞等周围组织,这些组织需要肝脏合成的胆固醇。 - -## 笔记 - - -> 食物是最好的药物。也真正明白了“健康掌握在自己手中”这句大俗话所言不虚。 - -💭 食物是最好的药物 - -## 书评 - - -## 点评 diff --git a/life/阅读/医学健康/小小药箱护健康教您用好家庭小药箱.md b/life/阅读/医学健康/小小药箱护健康教您用好家庭小药箱.md deleted file mode 100644 index 5e2600fc..00000000 --- a/life/阅读/医学健康/小小药箱护健康教您用好家庭小药箱.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: 小小药箱护健康教您用好家庭小药箱 -description: 随着人民生活水平的提高,人民群众的健康意识也得到不断提高,群众对医药科普的刚性需求出现了急速增长。本套丛书从老百姓需求出发,解决现在困扰百姓的合理用药问题。涵盖老少孕幼更年期各类人群,以及普通人群在各种情况下用药的困惑和误区,切实以老百姓用药需求为牵引,以 -keywords: - - 小小药箱护健康教您用好家庭小药箱 - - 医学健康 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《小小药箱护健康教您用好家庭小药箱》 -- **作者**: 中华医学会临床药学分会组织编写 -- **分类**: 医学健康-医学 -- **ISBN**:9787117306959 -- **出版社**:人民卫生出版社 - -## 概述 - -随着人民生活水平的提高,人民群众的健康意识也得到不断提高,群众对医药科普的刚性需求出现了急速增长。本套丛书从老百姓需求出发,解决现在困扰百姓的合理用药问题。涵盖老少孕幼更年期各类人群,以及普通人群在各种情况下用药的困惑和误区,切实以老百姓用药需求为牵引,以期做最“懂你”的科普,希望以此套药学科普书铸造连接药师和患者的“桥梁”。本书为《一生健康的用药必知》科普丛书之一,内容力求深入浅出,图文并茂,旨在向大众普及合理用药知识,助力全民健康。 - -## 划线 - - -> 为家人准备一个“专属”小药箱 - -> 一、列出家里每个成员的“个人简历” - -> 二、根据“个人简历”列药品清单 - -> ▲ 家庭常备药品少且精,每类需要备1~2种药品。▲ 如果没有特殊要求,建议选择非处方药。▲ 除了外用药外,常备药品基本以口服治疗为主。 - -> [插图] - -> 常用药品专用药箱、儿童药品专用药箱、急救药品专用药箱、慢性病药品专用药箱。 - -> 并不是备上药箱就可以不去医院了,对不能确诊或症状较重的疾病,不能擅自用药,应该及时去医院诊治。切不可因为有了家庭小药箱,自己给自己看病,拒绝就医,耽误病情。 - -> 按照药品说明书吃药,不要混用含有相同成分的抗感冒药。 - -> 建议发热超过38.5℃时才使用含有退热成分的抗感冒药,餐后吃,4~6小时后如果体温还超过38.5℃可以再次服药,但24小时内不超过4次。 - -> 预防感冒的最佳做法是通过健康的生活方式增强身体免疫力。 - -> 而且山楂对妇女子宫有收缩作用,如果孕妇大量服用含有山楂成分的健胃消食片,会刺激子宫收缩 - -> 汞溴红溶液,就是我们俗称的“红药水”,因含有汞这种重金属,对人体有害,现在已不建议使用。龙胆紫溶液,俗称“紫药水”,因为容易导致痂下的伤口愈合不良,且对人体有致癌性,现在也不建议使用。而且这两种药水都容易引起伤口颜色改变,影响伤口的观察,因此不建议使用“红药水”和“紫药水”。 - -> 夏秋季保存药品:防暑防潮春冬季保存药品:防冻防风 - -> ▲ 不随意增减药量,要根据药品说明书或医嘱服药。▲ 不要随意听信他人的话更换自己的用药方案或乱买药品。▲ 自己无法判断药品是否合适时,需听取医师或药师的意见。▲ 在医师开具处方前,应向医师告知现在使用的药品。▲ 不要因为担心药品副作用而随意停药,但如果真出现了副作用应及时咨询医师或药师并停药。 - -## 笔记 - - -> 科普跑不过谣言 - -💭 太真实了,科普跑不过谣言 - -> 感冒药过量而出现肝功能不全 - -💭 感冒药务必不能多吃 - -## 书评 - -> ✨家庭药箱科普类的优秀书籍,5w字值得一读。 - -## 点评 - -- 为家人准备一个“专属”小药箱。 -- 根据家庭成员的“个人简历”罗列药品清单。 -- 药箱分为:常用药箱、儿童药箱、专用药箱、急救药箱。 -- 并不是有了药箱就可以不用去医院了! -- 是药三分毒,谨遵医生嘱咐。 - -科普跑不过谣言,三年的新冠疫情期间更是各种谣言满天飞。特别是 2022 年低疫情放开管控后,疯狂抢购莲花清瘟胶囊、蒙脱石散等。还有 2014 年屯食用盐,我妈妈就是参与者之一。这些事情反映出国民的综合素质还有很大的提升空间。 - -对于屯药这件事理性看待,但是家庭小药箱还是很有必要的。特别是家里有基础病的,经常饮酒的,总之家庭小药箱就是为了方便、及时有效的解决需求。但是如果情况没有变得简单,而是往复杂方向发展一定要即使就医。家庭小药箱非常有用,但是并不适用于解决所有问题。如果不可控的因素产生,请及时就医。 - -家庭小药箱需要定期,定季节的更换药品;大部分家里并没有恒温恒湿的保存条件,只能在换季节的时候检查药品存储情况同时适当的进行药品更换。维护一个基础的家庭小药箱年费用大概在 200 - 300 元这个区间,相较于临时去药店或者医院,非常具有性价比以及便捷性。 - -## 药品清单 - -![药箱](https://static.7wate.com/img/2023/01/16/803f8b2c2fa1d.png) - -- [药箱思维导图](https://static.7wate.com/img/2023/01/16/f7bd6528c45f2.xmind) diff --git a/life/阅读/历史/信息简史.md b/life/阅读/历史/信息简史.md deleted file mode 100644 index e7d53a75..00000000 --- a/life/阅读/历史/信息简史.md +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: 信息简史 -description: 人类与信息遭遇的历史由来已久。詹姆斯·格雷克笔下的这段历史出人意料地从非洲的鼓语讲起。非洲土著部落在尚未直接跨越到移动电话之前,曾用鼓声来传递讯息,但他们是如何做到的呢?后续章节进而讲述了这段历史上几个影响深远的关键事件,包括文字的发明、罗伯特·考德里的第 -keywords: - - 信息简史 - - 历史 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《信息简史》 -- **作者**: 詹姆斯·格雷克 -- **分类**: 历史-历史文化 -- **ISBN**:9787115331809 -- **出版社**:人民邮电出版社 - -## 概述 - -人类与信息遭遇的历史由来已久。詹姆斯·格雷克笔下的这段历史出人意料地从非洲的鼓语讲起。非洲土著部落在尚未直接跨越到移动电话之前,曾用鼓声来传递讯息,但他们是如何做到的呢?后续章节进而讲述了这段历史上几个影响深远的关键事件,包括文字的发明、罗伯特·考德里的第一本英语词典、查尔斯·巴贝奇的差分机与爱达·拜伦的程序、沙普兄弟的信号塔与摩尔斯电码。但人类开始自觉地理解和利用信息始于克劳德·香农在1948年创立的信息论。香农的信息论不仅推动了信息技术的发展,也引发了许多学科的信息转向,改变了人们对于诸如麦克斯韦妖、生命的编码、模因、随机性、量子信息论等的理解。部分科学家甚至认为,构成世界的基础不是物质,不是能量,而是信息。正如物理学家约翰·惠勒所说,“万物源自比特”。现如今,信息如洪流般淹没了我们,使我们深陷信息焦虑、信息过载、信息疲劳的困扰。但回顾历史,这并不是件新鲜事,人们也总是能想出应对手段。维基百科、Google便是我们的应对之一。无论对于信息的未来持何态度,有一点是确定无疑的,即我们人类是信息的造物。 - -## 划线 - - -> 我们称为过去的东西其实是由比特构成的。 - -> 在这三十年间,信息极大地释放了人类的能量,它所创造的价值超过了之前五千年的财富总和 - -> 在这三十年间,产业化的信息就像一部两百迈的汽车行驶在未来之路上,但我们并不知道它要开往何方。 - -> 它对“冗余信息的价值”给出了不同以往的解释。那些看似有损于精炼和简洁的冗余信息反而提升了信息传播的精准性。而今,当我们对碎片化、无序化的信息头痛不已时,我们是否意识到,在依托大数据系统的组织与传播模式下,碎片可以为我们描绘出事物的全貌? - -> 当对话取代听讲,当个性取代共性,当封闭转向开放,人的思想力得到了空前的释放,信息成为了社会的第一生产力。 - -> 但其实更为重要的,互联网所打破的实际是以纸书为代表的知识凝聚与传播方式 - -> 也许当我们忘记书是“一本本”的时候,我们才会看到互联网时代图书的未来。 - -> “科技的互联网”不能描述信息的全部,信息只有作用于思维,才能显示出强大的力量。 - -> 信息则成为第一位的资源,其地位远超出传统的生产资料。 - -> 这本书可以让人多一个视角来看待和理解世界,即“信息视角”。 - -> (1)信息贯穿了人类的发展史,今天的成果是过去一点点积累而来的;(2)计算通信理论突破后,带来的近五十年的变革是指数级的;(3)我们正在走向下一个指数级阶段,即信息世界和物理世界的统一融合。 - -> 生物体中的所有细胞都是一个错综复杂的通信网络中的节点,它们一刻不停地传输和接受信息,不停地编码和解码。进化本身正是生物体与环境之间持续不断的信息交换的具体表现。 - -> :它不仅微小,而且抽象——它存在于一个个二进制数字、一个个触发器、一个个“是”或“否”的判断里 - -> 而解开这个谜团的关键就是不见于经典物理学的所谓量子纠缠(quantum entanglement)现象。一旦粒子之间或量子系统之间发生了量子纠缠,那么即便相隔广袤的时空,它们的基本属性也仍然相互关联。即使相隔数光年,它们仍然能够共享某些实际存在,但又不只是实际存在那么简单的东西。 - -> 信息吞噬者——黑洞。惠勒因而宣称:“未来,我们将学会用信息的语言去理解和表达全部物理学。” - -> 很少有信息技术会彻底过时,每一种新兴技术都会为其前辈技术赋予新的理解 - -> (这种编码后来被称为点-划字母表,但没有提及的停顿也同等重要,因此,摩尔斯电码并不是一种二进制语言。 - -> 但它也要解决与设计电报编码时所面临的同样问题,即怎样将整个语言映射到单一维度的最简单的一连串鼓声上。这个设计问题是经过一代代鼓手、数个世纪的社会演进才得到解决的。 - -> 音素 - -> 非洲语言的口语把声调作为举足轻重的一部分,鼓语则更进一步——它仅使用声调。这是种只有一对音素的语言,完全通过高低音的变化构成。鼓的原材料和制作手艺各有不同。比如,梆鼓(slit gong)就是取一段花梨木,掏成中空,再切出个长而狭的口子,就可以一端发高音而另一端发低音;还有一些鼓是蒙皮的,可以成对使用 - -> 引入冗余,不言而喻,效率肯定会打折扣,但它是避免混淆的一剂良药,它提供了第二次机会。 - -> 他眼见洛克勒族的年轻人中练习敲鼓的人越来越少,而上学的孩子们甚至连鼓语中的名字也没有了。他为此感到十分惋惜,因为对他而言,会说话的鼓已经成了他生活中的一部分 - -> “森林里的白种男人精灵,回来回来,回到属于森林里的白种男人精灵的高高的木屋。女人和洋芋在等待着你。回来回来。” - -> 文字成了我们获取知识的机制和组织思维的手段。我们希望采用历史和逻辑的方法来理解文字的起源,可是历史和逻辑本身就是文字思维的产物。 - -> 柏拉图是第一个长期受益于这项技术的人,本不太可能成为反技术的卢德分子,但他(借不立文字的苏格拉底之口)警告说,文字带来的将是思想的贫瘠:你这个发明结果会使学会文字的人们善忘,因为他们就不再努力记忆了。他们就信任文字,只凭外在的符号再认,并非凭内在的脑力回忆。所以你所发明的这剂药,只能医再认,不能医记忆。至于教育,你所拿给你的学生们的东西只是真实界的形似,而不是真实界的本身。 - -> 口语符号,会立刻消弭于无形。即使它真的存在,也只存在于听到了这些符号的人的思维中。 - -> 文字的持久性使得他能够把有关这个世界的已有知识加以结构化,进而他可以总结关于知识的知识。 - -> 群众无法接受美的观念本身,只知道各种美的事物。他们也不会思考事物的本质,只能理解各种具体事物。因此,群众不可能成为哲学家。 - -> 这些泥板不仅记录下了处于萌芽时期的商业和官僚政治的日常活动,而且也是最初使这些活动得以出现的条件。 - -> 杰恩斯评论说:“征服和影响之所以能够层层推进,正是借助了前所未有的众多字母、泥板和石碑。文字是进行社会控制的新方法,实际上,其模式也是今天我们基于备忘录进行沟通的政府的开端。 - -> 听觉空间是有机的、综合的,通过所有感官的同步互动才能感受到;而‘理性空间’或图文空间则是单一的、序列化的、连续的,它制造的是一个封闭世界,其中缺失了部落时代的回音世界里那种丰富的回声。 - -> 扉页上没有写作者罗伯特·考德里的名字,却写了一条拉丁文格言——“不理解不如不读”(Legere, et non intelligere, neglegere est) - -> :“外国人和外族人对于我们文字的不确定性以及我们拼写的随意性确实感到十分惊奇 - -> ”从此以后,语言再也不像空气那样看不见摸不着了。 - -> “千万不要借用外国语”,“花点心思去使用常见的词来说话,只有这样,才能让大多数未受过教育的人听得懂”, - -> 有些出过远门的绅士,回到家乡以后,除了爱穿外国的奇装异服四处招摇外,还喜欢在说话时夹杂外语。比如最近从法国归来者,就满口带法国腔的英语,并且也居然不以为耻。 - -> 所谓字母表,就是一个离散的小型符号集,有其约定俗成的排列顺序(“abecedarie,字母的前后顺序,或使用字母的人”)。但即便在当时,这种机制在人们看来是不自然的,因为它迫使读者将信息从单词的意义中剥离出来,把单词严格地视为字符串,集中精力于单词的字母组合上。 - -> 但是没有人知道英语中有多少单词。 - -> 一旦他们创造了一个新说法,任何人都可能听见 - -> ,巴贝奇的雄心也在高涨。动工十年后,巴贝奇的机器只有0.61米高,有六根轮轴、数十个数轮,可以进行六位数的运算。但再过十年后,机器的规模(虽然只是在图纸上)已经达到4.53立方米,重15吨,有25000个零件,而图纸平铺开来能覆盖超过37平方米的面积 - -> 而当他展望未来时,他预见有一条真理将高于一切,那就是“知识就是力量”。他是从字面上理解这句话的,认为知识“本身是物理作用力的发生器” - -> 速度可以用两种方式度量:以距离来度量,或以符号和字词来度量。 - -> 这种将意义从一种抽象转换为另一种抽象的过程,在数学中早已有之。并且从某一方面上说,这恰是数学的本质所在。 - -> 而在对保密性要求不那么高的场合,韦尔建议将常用短语加以缩写。比如,在要发送“give my love to”(请问候某人)时,他建议只发送gmlt即可。他还给出了更多的例子: - -> 那些使用电报编码的用户慢慢发现,编码虽然高效而简洁,但它也有始料未及的副作用,那就是极易受到哪怕是最微小的错误的破坏。由于缺乏一般的英语散文(乃至扼要的电报体散文)所天然具有的冗余度,这些经过精心编码的讯息,可能会因为一个字符或点划的差异而面目全非。 - -> 1.婴儿是不讲逻辑的;2.没有一个会调教鳄鱼的人被鄙视;3.不讲逻辑的人被鄙视。 - -> 在第一次世界大战后,麻省理工学院成为了美国电气工程应用科学的三大孵化中心之一,另两个是贝尔电话实验室和通用电气 - -> 数学家还倾向于把他们面对的任何情况都加以理想化。他的气体是“理想气体”,他的导体是“全导体”,他的表面是“光滑表面”。他会把这称为“直抵本质”,工程师则恐怕会说这是“无视事实”。 - -> 而讯息接收者知道该过程使用的密钥,从而可以借此反推整个替换过程。因此,即便敌方知道了所用的加密过程,只要密钥没有泄露,整套安全系统仍然有效 - -> 在香农看来,模式就等同于冗余。在日常语言中,冗余可以辅助理解。可在密码分析中,冗余就是密码的阿喀琉斯之踵。 - -> 信息是不确定性,是出人意料,是困难程度,是熵。 - -> 就像用移动物体所需的力来定义质量一样。不过换个角度看,质量的确可以用这种方式定义。●信息是熵。这是各个说法当中最奇怪也最强大的一个。熵的概念早已有之,在研究热量和能量的热力学中,它被用来度量系统的无序程度。但对于这个概念,一直以来人们的理解有限。 - -> 通信的基本问题是,在一点精确地或近似地复现在另一点所选取的讯息。 - -> [插图] - -> 香农提出的基本思想是“把信息量视为负熵” - -> 信息就是信息,既不是物质也不是能量。 - -> 模拟的就像计算尺,数用间距来表示;而数字的则像算盘,算珠要么被计数,要么不被计数,没有介于两者之间的状态。同样,用来调节光线的变阻器是模拟的,而墙上的开关则是数字的。杰勒德认为,神经系统的化学活动和电活动都是模拟的。 - -> 香农和维纳的侧重点有所不同。维纳用熵来度量无序程度,而香农用熵度量的则是不确定性。不过,正如他们所意识到的,两者从根本上说是一回事。一个书面英语样本中的内在有序性越强(有序性表现为为语言使用者有意识或下意识所知悉的统计特征),其可预测性也就越高,换用香农的话来说,也就是后续字母所传递的信息量越少。如果受试者对下一个字母是什么信心十足,那么这个字母就是冗余的,它的出现没有贡献新的信息。信息是出人意料。 - -> 信息可被认为是从无序中夺得的有序。 - -> 他的做法是,用一个测试来代替这个问题,他称之为“模仿博弈”,也就是后来鼎鼎有名的“图灵测试”。 - -> 图灵认为,数字计算机包括三个部分:一个“信息仓库”,相当于人类计算员的记忆或纸张;一个“执行单元”,负责完成一个个操作;以及一个“控制器”,管理一个指令列表,以确保各指令按照正确顺序被执行。这些指令被编码成数,它们有时被称为一个“程序”,而构建这样一个列表的工作通常被称为“编程”。 - -> 在其中他会解释基本思想,比如调皮地引用《新约·马太福音》第5章第37节的话,“你们的话,是,就说是;不是,就说不是;若再多说,就是出于那恶者” - -> 比如他在宾夕法尼亚大学的一次演讲中就说道:“总而言之,我认为,这一整个信息产业将在本世纪快速崛起和发展,其中包括信息的采集、信息从一点到另一点的传输,以及恐怕是最为重要的,信息的处理。”[插图][插图]克劳德·香农(1963) - -> 然而,香农经过粗略计算后指出,一盘典型的国际象棋棋局涉及的可能组合数目超过了10120——这个数要远大于以纳秒计的宇宙年龄。因此,在香农看来,计算机不能靠蛮力搜索来下国际象棋,而是要像人下棋那样进行推理。 - -> 信息论正开始改变理论物理学和生命科学的研究轨迹,而熵正是促成了这种改变的原因之一。 - -> 热力学“定律”能被简洁地加以表达:第一定律:宇宙的能量守恒。第二定律:宇宙的熵恒增。 - -> 而在信息论中,熵度量的是一条讯息的不确定程度,即身为由信源发出的所有可能讯息中的一条的概率。这些可能讯息的出现概率不一定相等,因此,香农的公式是:H=-Σpi log pi。 - -> 信息正是讨论和度量诸如复杂度与有序度、组织性与特异性等生物学属性时所需的概念 - -> 行数十亿次的自我复制而仍然保持数据的完整可靠。 - -> DNA不仅进行自我复制,分离开后,它还控制着另一种完全不同的物质的制造。而生成的这些极其复杂的蛋白质,是生物体的构成材料 - -> “我给你举个例子。二十年前,如果你去问一名生物学家,蛋白质是如何合成的,他会回答,这个问题太过复杂,我不知道。如果你去问一个生物化学家,他会说,关键的问题在于从哪得到制造肽键的能量。而分子生物学家对此则会说,关键不在那,关键在于组装氨基酸序列的指令从何而来;让能量见鬼去吧,它自己会想办法的。” - -> 母鸡不过是一只蛋用来制造另一只蛋的工具。 - -> 然而,如果转而从个体是为了将体内的各种基因延续下去的角度思考,那么许多解释便说得通了。同一物种的其他个体拥有这些基因中的大部分,而亲属拥有的相同基因就更多了。 - -> 地球上的生命史始于复制子的偶然出现。复制子是一种信息载体,它通过自我复制而生存和传播。副本必须自洽且可靠,但无需完美。相反,为了实现进化,错误倒是必不可少。 - -> 生命史是用负熵写就的,他继续写道:“真正在进化的是以各种形态和载体存在的信息。如果有那么一本指导生物进化的手册的话,我想,里面第一句大概应该是这样的,它读起来像句圣经诫命:应使你的信息更丰富。” - -> 正如在无生命世界之上有生物圈,在生物圈之上也有个“抽象王国”。那么这个王国的居民又是什么呢?是思想。 - -> “我不知道你会怎么想,但我本人一开始并不喜欢这样的想法:我的大脑不过类似某种粪堆, - -> 无知是主观的,它是观察者的一种属性。而随机性,如果它真实存在的话,应当是事物本身的性质。这样的话,排除掉人为因素,我们就可以说,一个事件、一次选择、一个分布、一次博弈,或者最简单的,一个数是随机的。 - -> 当然,任何考虑用算术方法来生成随机数的人都犯下了僭越之罪。因为,正如已经被多次指出的,不存在一个随机数这样的东西——有的只是生成随机数的方法,而一种严格的算术方法显然不属于其中之一。 - -> 这恰好从一个方面表明了,即便借助了机械的帮助,人类在生成随机数方面也是能力低下。研究也证明,人类直觉在预测随机性和识别随机性上都毫无助益。无论愿意与否,人类总是偏好模式。 - -> 但香农还进一步考虑了讯息中的冗余:讯息中的模式、规律和秩序等因素使得讯息可压缩。讯息越有规律,就越可预测;越可预测,就越冗余;越冗余,含有的信息就越少。 - -> 但我们为什么说π不是随机的呢?蔡廷给出了一个明确的回答:一个数只要是可计算的,即它能够被一个可定义的计算机程序生成,那它就不是随机的。因此,可计算性是随机性的一种量度。 - -> 1920年,安德烈·柯尔莫哥洛夫进入莫斯科大学数学系就读。在随后十多年里,他做出了一系列影响深远的成果,尤其他的《概率论基础》 - -> 信息、随机性和复杂度,这三者本质上是等价的——三个威力强大的抽象,就像地下情人一般如胶似漆。 - -> 香农最先证明了,讯息中任何非随机的部分都可以被压缩。 - -> 窗台上的两盏灯笼可能毫无意义,也可能表示“英国人走海路” - -> 信息并不是讯息价值的一个好的量度。 - -> 这就是空气,它杂乱却永恒地记录下了人类说过的每一句话。 - -> 阿兰·图灵或许是注意到这一点的第一人:像宇宙一样,计算机也最好被视为状态的组合,机器在一个瞬间的状态决定了下一瞬间的状态,因此,根据其初始状态和输入信号,机器的全部未来状态应当是可预测的。换言之,宇宙在不断地计算自己的命运。 - -> 印刷术作为一场通信革命,在从中世纪到现代社会的转型中所发挥的不可或缺的作用。 - -> 在“信息论”一词问世后,相继又出现了“信息过载”、“信息过量”、“信息焦虑”、“信息疲劳”等说法。 - -> 焦虑感取代了满足感,渴求与失落循环往复。人们刚开始一种体验,其他还会有什么的想法就又随即萌生。”这是富足的窘境,无疑也再次提醒了我们,信息不是知识,知识不是智慧。 - -> 他们由于同时生活在两种反差强烈的社会和经验之中而产生的困惑和犹豫,我们现在也感同身受。 - -> 我们不要独裁君主,我们也不要寡头政治或阶级统治,我们要一个遍及全球、拥有自我意识的智能。 - -> 但无限可能性是件好事,而非坏事。无意义的无序是我们要勇于挑战的局面,而不是我们畏葸不前的借口。 - -> 一直以来,是选择塑造了我们。选出真正的信息需要做功,而后遗忘它们也需要做功。 - -> 这座图书馆将继续存在,它就是宇宙。但对于我们来说,一切都还没有被写完,我们也还没有变成虚无的存在。 - -## 笔记 - - -> 文字使得复用和“回忆”成为可能——这是全新的模式。它允许信息以全新的架构加以组织,分成诸如历史、法律、商业、数学和逻辑等。 - -💭 文化得到了传承 - -> give my love to”(请问候某人)时,他建议只发送gmlt即可。他还给出了更多的例子: - -💭 可能是互联网缩写的由来 - -> 皮克林在波士顿作了下数学计算:“如果现在我们以两天或更少的时间,换句话说,以每小时十二到十六公里的时速获取到纽约的情报,就能占据可观的商业优势,那么当我们利用远距离传讯系统传递同样的信息,以每分钟六公里的速度,换句话说,只需一个小时就足以从纽约传到波士顿时,任何人都能意识到这其中包含着成比例的获利机会。” - -💭 信息资源 - -> 就像用移动物体所需的力来定义质量一样。不过换个角度看,质量的确可以用这种方式定义。 -●信息是熵。这是各个说法当中最奇怪也最强大的一个。熵的概念早已有之,在研究热量和能量的热力学中,它被用来度量系统的无序程度。但对于这个概念,一直以来人们的理解有限。 - -💭 熵 - -> 正如《爱丽丝镜中奇遇》里的红皇后所说的,我们只有全力奔跑,才能留在原地。 - -💭 我们只有全力奔跑才能留在原地,逆水行舟,不进则退! - -> 在混乱中找出秩序,找出模式,这也正是科学家的工作。 - -💭 混乱中寻找秩序,秩序中制造混乱 - -> 随机性也许可以用秩序来定义——严格地说,是秩序的缺失。 - -💭 不存在绝对的随机正如不存在绝对的秩序。 - -> 香农在《通信的数学理论》一开头就直言不讳,宣称意义“与其工程学问题无关”。因此,忘记心理学,放弃主观性吧。 - -💭 意义具有主观性 - -## 书评 - - -## 点评 diff --git a/life/阅读/历史/这里是中国2.md b/life/阅读/历史/这里是中国2.md deleted file mode 100644 index 8066488a..00000000 --- a/life/阅读/历史/这里是中国2.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 这里是中国2 -description: 《这里是中国2》以近代以来一百年为时间尺度,讲述现代化进程之下,中国的地理变迁和中国人的创造,呈现这个蓝色星球上伟大的地表塑造。 - 通过原创摄影图片及充满情感温度的文字,描绘中国具有代表性的地理人文景观和自然风貌,让我们享受视觉盛宴的同时,了解自身所处的自然 -keywords: - - 这里是中国2 - - 历史 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《这里是中国2》 -- **作者**: 星球研究所 -- **分类**: 历史-中国史 -- **ISBN**:9787521731224 -- **出版社**:中信出版集团 - -## 概述 - -《这里是中国2》以近代以来一百年为时间尺度,讲述现代化进程之下,中国的地理变迁和中国人的创造,呈现这个蓝色星球上伟大的地表塑造。 通过原创摄影图片及充满情感温度的文字,描绘中国具有代表性的地理人文景观和自然风貌,让我们享受视觉盛宴的同时,了解自身所处的自然世界,并以可感知的方式收藏大自然的美好。 100年,我们重塑了一片山河 100年,我们振兴了一个民族 100年,我们改变了一个国家。从没有一根钢轨,到铁路、公路纵横四方,从没有一盏电灯,到14 亿人全民通电,以及西气东输、南水北调、国土绿化、载人航天、北斗导航、登陆火星……《这里是中国2》一书尽览中国建设之美、家园之美、梦想之美。逆天改命的中国人,告诉世界什么叫大国崛起。 超级工程,超级风景。百年重塑山河,建设改变中国! - -## 划线 - - -> 人口迁移、产业聚集、北粮南运、南果北上、北煤南运、西电东送、西气东输、南水北调,一个个大范围、大规模的资源重组,让这个原本资源分布极不平衡的国家,得以释放潜力,高速运转。 - -> 冰冻三尺,非一日之寒;破冰之功,非一春之暖 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/哲学宗教/半小时漫画中国哲学史(套装全2册).md b/life/阅读/哲学宗教/半小时漫画中国哲学史(套装全2册).md deleted file mode 100644 index ec6c0a99..00000000 --- a/life/阅读/哲学宗教/半小时漫画中国哲学史(套装全2册).md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: 半小时漫画中国哲学史(套装全2册) -description: 儒家就像HR,最会处理人际关系,把国家秩序安排得明明白白;道家向往自由,推崇无为而治,offer送到手里都不接;法家都是职业经理人,他们用开公司的套路,把国家一步步做大做强;墨家的核心思想“非攻,兼爱”用一句话来概括就是“peace - and love”;玄 -keywords: - - 半小时漫画中国哲学史(套装全2册) - - 哲学宗教 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《半小时漫画中国哲学史(套装全2册)》 -- **作者**: 陈磊·半小时漫画团队 -- **分类**: 哲学宗教-东方哲学 -- **ISBN**: -- **出版社**:江苏凤凰文艺出版社 - -## 概述 - -儒家就像HR,最会处理人际关系,把国家秩序安排得明明白白;道家向往自由,推崇无为而治,offer送到手里都不接;法家都是职业经理人,他们用开公司的套路,把国家一步步做大做强;墨家的核心思想“非攻,兼爱”用一句话来概括就是“peace and love”;玄学就是摸鱼哲学,清谈就像在公司例会上扯淡;理学是儒学的全新款式,说社会秩序也是自然规律,要追求“天理”;心学专门跟理学抬杠,说人心就是“天理”,要知行合一,追求“良知”。本书延续了半小时漫画系列严谨又搞笑的风格,从孔孟老庄,到程朱陆王(程颐、程颢、朱熹、陆九渊、王阳明),各门派宗师爆笑登场。让你在哈哈大笑中秒懂各大门派的思想主张和历史发展,不知不觉就入门国学、爱上国学! - -## 划线 - - -> 哲学其实是一首经典老歌,回荡在每一条大街小巷,每个人都会唱! - -> 智慧是通过思考得来的。 - -> 所以当时的部落里,女人才是老大,也就是族长,这就是传说中的母系社会。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/哲学宗教/第一性原理.md b/life/阅读/哲学宗教/第一性原理.md deleted file mode 100644 index 2b0ca13f..00000000 --- a/life/阅读/哲学宗教/第一性原理.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: 第一性原理 -description: 什么是第一性原理?亚里士多德说:“任何一个系统都有自己的第一性原理,它是一个根基性命题或假设,不能被缺省,也不能被违反。”第一性原理,好比树木的根基,没有人会看到繁茂枝干下的树根,但它决定了树的一切。本书将“第一性原理”的思想引入创新与商业领域,用8个思维 -keywords: - - 第一性原理 - - 哲学宗教 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《第一性原理》 -- **作者**: 李善友 -- **分类**: 哲学宗教-西方哲学 -- **ISBN**:9787115542649 -- **出版社**:人民邮电出版社 - -## 概述 - -什么是第一性原理?亚里士多德说:“任何一个系统都有自己的第一性原理,它是一个根基性命题或假设,不能被缺省,也不能被违反。”第一性原理,好比树木的根基,没有人会看到繁茂枝干下的树根,但它决定了树的一切。本书将“第一性原理”的思想引入创新与商业领域,用8个思维模型和实践方法,帮助企业与个人厘清问题的本质,直达本源。我们常问,未来十年什么会变化?这个问题很重要,但更重要的问题可能是,未来十年什么不变?如果能找到不变的,把所有的资源和精力,毫无保留地投入在不变的事物上,其力量不可同日而语。让我们用第一性原理重新认识世界。探索内在的力量,创造非凡的人生。 - -## 划线 - - -> 这个角度来讲,马斯克提出这个假设充分地说明了他能够站在系统之外看问题,所以他才能顺理成章地提出打破群体认知的假设 - -## 笔记 - - -> 基于第一性原理的第一创新,是将同一种思维方式运用于不同的领域。 - -💭 打破常规 - -> 软件方面,Space X“猎鹰9号”和龙飞船用的都是Intel双核的X86处理器,操作系统用的是Linux,还有LabView和Matlab;此外,它的软件开发基础语言是C++,偶尔也用Python,并且整个主控程序只有几十万行代码。 - -💭 我…… - -## 书评 - - -## 点评 diff --git a/life/阅读/哲学宗教/结构化思维.md b/life/阅读/哲学宗教/结构化思维.md deleted file mode 100644 index c551654b..00000000 --- a/life/阅读/哲学宗教/结构化思维.md +++ /dev/null @@ -1,560 +0,0 @@ ---- -title: 结构化思维 -description: 学会结构化思维,让人生从此提效。《结构化思维》可以帮助我们在陈述问题、表达核心观点的时候,能少说废话,将复杂问题简单化,清晰准确地表达观点,建构条理清晰的思考模式。学会有结构、有规律地整理复杂信息,让人生从此提效。拯救无效努力,成为你想成为的自己。有些人看 -keywords: - - 结构化思维 - - 哲学宗教 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《结构化思维》 -- **作者**: 黎甜 -- **分类**: 哲学宗教-思维科学 -- **ISBN**:9787514227697 -- **出版社**:文化发展出版公司 - -## 概述 - -学会结构化思维,让人生从此提效。《结构化思维》可以帮助我们在陈述问题、表达核心观点的时候,能少说废话,将复杂问题简单化,清晰准确地表达观点,建构条理清晰的思考模式。学会有结构、有规律地整理复杂信息,让人生从此提效。拯救无效努力,成为你想成为的自己。有些人看起来很努力,但是却不出成果。高效的思考力并非天生,而是长期自我训练的结果。系统化的思维方式,让深陷思维泥沼的人走出思维误区,达到事半功倍的效果。全书干货满满,是一本比较实用的思维进阶实修课。万事万物,皆有结构,皆成框架,皆成系统。本书在搭建结构化思维关键方法的基础上,介绍了八种升级版的思维结构,具体方法配合落地训练,每个人都能从中找到适合自己的思维模式。 - -## 划线 - - -> 一段时间以后,人们惊奇地发现这些幼儿园的5岁的小朋友语文能力超过外面10岁的小朋友,最让人诧异的是,小朋友的情商(EQ)竟然能超过外面的青少年。 - -> 让思考过程更加有逻辑,让思考结果更加有价值。 - -> 构建结构化思维,让零散、无序的思维方式变得系统化、有序,经得起深入分析和推敲的思维结构,是改善思维方式的必经之路。 - -> 人生不如意事十之八九 - -> 思维,是我们解读事实的起点,是产生行为的源头,是决定结果的根本。 - -> 在一次又一次的思维循环里,思维过程重复多次,就会形成固定的思维方式, - -> 认知心理学认为,一个人的情绪并非由事件引起,而是由个体的思维方式决定,即思维方式决定情绪。 - -> 所以与其说“选择决定未来”“努力创造成功”,都不如说“思维方式决定命运”。 - -> 是什么(What:是什么划破了我的手)、为什么(Why:为什么草能划破我的手)、怎样做(How:我的工作怎样运用小齿)的2W1H结构来全面思考问题的。 - -> 就像玩积木,每块积木都是一个思考部分,搭建房子就需要把多种不同形状的积木按照房子的模型搭建起来,房子的模型就是系统结构,按照系统结构搭建思维的过程就是结构化思维。 - -> 获取信息:当大脑接收到外界的信息或调取自身存储的信息,又或者迸发出灵感时,就完成了获取信息的过程。加工处理:面对不同的信息,大脑会做出不同的反应,常见的有分类定性、分解、理解、筛选、联想、想象、归纳、演绎等。呈现结果:对信息加工处理后,对信息输出的过程,包括在大脑内的存储和用言行表达。迁移运用:把加工后的信息“变形”或者运用在其他事务上,也就是我们通常说的“举一反三”。 - -> 大脑可能随时产生灵感,不需要外界的刺激。灵感的产生具有随机性、偶然性,即典型的“有心栽花花不开,无心栽柳柳成荫”。 - -> 关键点包含事件的六要素:人物、地点、时间、起因、发展、结果。 - -> 但是有一点必须注意,那就是:我们最容易获得的信息通常是别人希望我们看到的信息。 - -> 其实A和B手机从来没变过,是什么在影响我们的判断?是信息的全面性。 - -> 定性就是确定属性,分类就是区分类别。 - -> 这个例子充分说明了,我们对事物的理解不能只停留在表面的感官上,还要深入了解本质、规律,才是真的理解。 - -> 2.独立操作:理解的另一个标志,是根据对信息的理解,能独立完成所需要的动作或任务。仅根据他人的指导完成任务,不能认为是真正的理解。对客体进行实际操作常能帮助理解。在 - -> 没错,就是大脑的自动筛选功能。大脑会自动帮我们从海量信息中筛选出符合我们关注的信息。这些信息都是与我们自身息息相关的,也许是自己的现状、需求,或者是自己认为对的事物。 - -> 标准化、格式化虽然能大大提高效率,但会扼杀想象力,不容易创造出跨时代的艺术或产品。 - -> [插图] - -> 想要提高信息的存储量和时长,首先,我们在记忆时要集中注意力筛选信息,留住想要存储的信息;其次,要充分调动原有的信息并产生联想,让信息存入多个“抽屉”;最后,刻意复习,按照遗忘曲线定期复习。记忆周期: - -> 有效沟通包含三大要素,这三个要素对沟通结果的重要性占比分别为:肢体语言55%,语音、语气、语调38%,而文字内容仅有7%的意义。 - -> 第三,借用新资源,整合现有资源,就是创新。 - -> 时代在不断地进步和变化,我们要勇于拥抱新事物、整合多种资源,让自己的效率得到更大的提升。 - -> “感觉”则是人对事实的认知,不同的人会产生不同的主观感受,也就是说“感觉=事实+经验+主观感受”。 - -> 二、从他人的表达里发现真相 - -> 我反思自己,1993年出生的人在2018年是25岁,我对25岁已经没有概念了,只能回想我在这个年龄的时候干了什么。 - -> 思维的过程复杂多变,虽然我们能用获取信息、加工处理、呈现结果、迁移运用这四步来概括 - -> 思维方式会随着年龄的增长,经历、阅历的增加而改变。唯一庆幸的是,这种改变,对于绝大部分人而言,都是在更系统、更高级的思维结构上的进步。 - -> 归纳和演绎可以帮助我们认识事物、升级认知,然而在以往的学习中,我们却并没有经过专业的学习和训练。 - -> 所以我们有相当一部分人因为缺乏高度归纳和演绎的思维,没有独立判断事物的能力,往往导致人云亦云,或者跟随媒体或者“网络愤青”(也称“键盘侠”)的步伐,赞同或者怒斥某些人或者行为,当真相最终被揭露时,又经常推翻自己先前的结论。 - -> 表达时,我们应该尊重对方,考虑对方的感受。 - -> 做完上边的两个练习,你会发现,难的并不是归纳本身,而是缺乏“提炼信息并归纳”的思维。 - -> “完全归纳”具有严谨性,而“不完全归纳”则存在一定的猜测,所以我们不能用“不完全归纳”来取代或者混淆“完全归纳”,这样会造成“黑天鹅效应”。 - -> 一手信息和二手信息之间往往差别很大,其中有两个关键因素:第一,大部分人往往分不清事实和感觉。 - -> 第二,不是人人都具备严谨的逻辑思考能力。 - -> 演绎是逻辑学中的演绎推理,是从一般性的前提出发进行推导,得出具体或个别结论的过程。 - -> 大前提:一个客观事实。小前提:属于事实的子范畴(子范畴就是圆中的一部分,被包含)。结论:根据相关性得出的结论。 - -> 这意味着,如果一个人的价值观、认可的规则是错的,在不同情境、不同的外因下,做出的决策就都是错误的。 - -> 不同的大前提(价值观),才是导致言行相去甚远的关键因素。我们的自我成长、培养下属、给孩子的教育,都应该是以正确为大前提(价值观)。 - -> 所以,我们要对事物能描述出可以衡量的标准、期望的状态,再对照现实,才能发现问题。 - -> 逻辑树的方式本质上也是一种结构化思维,关于如何构思和搭建结构化思维可见第四章 - -> 常用的方法有“堵”“疏”“斩”“替”。 - -> “问题—原因—解决方案”的运用就是: - -> 归纳的本质是情况—结果—规则。 - -> 演绎的本质是规则—情况—结果 - -> 因此归纳为演绎指导了方向,演绎为归纳提供了理论依据。在工作生活中,归纳和演绎总是互为因果。 - -> 在线性思维之上,我们还需要学会用多个线性思维组成结构化思维,用多角度、系统化的思维方式来思考和解决问题。 - -> 结构化思维是一个建立清晰、稳定、有序的思考结构,我们学到这个结构之后,知识体系从零散化到系统化,从无序到有序,从低效到高效。 - -> 喜欢做菜的人在做菜之前,一定会先想好做什么菜,准备什么配料,用什么锅、多大的火,以什么方式来烹饪 - -> 结构化思维每个人都在用,只是很多人是在潜意识里使用的,而不是有意识地用这种思维指导自己在缺乏经验的领域里进步。 - -> 结构化思维是一个建立清晰、稳定、有序的思考结构 - -> 金字塔结构是将结构化思维具象成一幅画后,形成的类似三角形结构的树状图,它直观地体现了由结论、论点、论据组成“先总后分”的结构。 - -> 金字塔结构的4个原则·结论先行。·以上统下。·归类分组。·逻辑递进。 - -> 没错,就是结论先行。因为一旦结论先行,大脑对于后来接收到的信息就不再是逐句分析推理出结论,而是判断论据能否支撑论点。 - -> 结论先行能够帮助我们聚焦中心。 - -> 结论先行,就是先给出具体的结论,放在金字塔的顶端,统领整个中心思想和表达。 - -> 归类分组是根据信息的共同属性分组的,共同属性包括但不限于性质、功能、方向、层次、对象、时间等。 - -> “MECE原则” - -> MECE原则”来自麦肯锡咨询公司,中文意思是“相互独立、完全穷尽”。简单来说,就是各个要素之间要保证不能有交叉,也不能有遗漏,也就是“不重不漏”。 - -> 二分法 - -> 2.矩阵法。就是将二分法运用两次,第一次是一个维度,第二次就是另一个维度。 - -> 流程法。按照事情发展的时间、流程、程序,对信息进行逐一分类。 - -> 结构法。即把事物拆分为不同的构成部分。 - -> 我们可以把自己做事过程中的流程、方法、技巧,总结成标准化的步骤,完成对自己工作的梳理和总结,从而迁移到做其他任何事,都能井井有条、抓住重点、直面核心。 - -> 工作总结:描述现状—总结要点—改进方案。工作汇报:描述现状—给出多种选择方案—建议选择的方案。 - -> 竞聘演讲:工作经历—竞聘优势—竞聘成功后的工作设想。 - -> 经验分享:提出观点—说明原因—阐述对策。 - -> 5.公式法。按照公式设计的要素进行分类,只要公式成立,这个分类就符合MECE原则。 - -> 归类分组需要符合MECE原则,有5种方法可以做到“不重不漏”:①二分法;②矩阵法;③流程法;④结构法;⑤公式法。 - -> 当信息的排列不具有逻辑性时,大脑就会陷入混乱,不知道如何进行加工处理,所以信息排列需要按照一定的顺序。 - -> (一)时间顺序 - -> (二)空间顺序 - -> (三)重要性顺序 - -> (四)演绎顺序 - -> 介绍了4种逻辑递进的排序方式之后,相信大家已经对排序有了比较深的认知,但是很多朋友可能没有意识到,排序需要考虑对方的需求和利益! - -> 只是每个人看问题的角度不一样而已。站在当下,福利待遇确实最重要,毕竟不饿死的人才有未来,可是,站在十年后的角度来看呢?排序又不一样了,所以要以谁的排序为准呢? - -> 判断一个人的认知水平的高低,有两个简单的标准:第一,看他在谈论一件事的时候,能够熟练地运用多少概念工具,越多越好。第二,看他在评价人的时候,能否少用概念,越少越好。 - -> 我们尝试对7个论据分组:①②⑤都是说该员工服从性强,只是服从的不同维度:分中心、规章制度、领导;③是说性格活泼、易相处;④⑥都是在说执行力,执行力强是概况,具体的表现就是提前规划、迅速行动、今日事今日毕。⑦是业务结果,恰恰是领导最重视的,应该放在最前面,如果能有数据佐证会更加打动人心。 - -> 注:逻辑方式有很多种,也可以将离职原因前置,只要符合逻辑,排序合理即可! - -> 我们一直强调要多阅读、多学习、多了解最新信息,目的就是要学会和掌握各种思维框架。这样可以有效提升我们的工作效率,框架越多,我们的工作能力就越强。 - -> 在此,我们要问几个问题:1.结构是否清晰明确?2.论据能否支撑论点,论点能否支撑结论?3.归类分组是否符合МЕСЕ原则?4.排序是否符合逻辑? - -> 其他思维结构与金字塔结构最大的区别有两种:一是在画图的方向上的区别,决定了以上统下、以左统右还是以中心统四周;二是归类分组上是否有既定的类别和属性。 - -> ①5W2H思维;②认知圈思维;③流程思维;④人事物思维;⑤故事思维;⑥客户思维;⑦水平思维与垂直思维;⑧T字思维。 - -> 在处理任何事情时,第一步不应是如何做(How),而是谁来做(Who)、做什么(What)。 - -> ①认清事实;②找回初心;③重新行动。 - -> 有成本意识,这是主管与经理之间质的差别之一。 - -> [插图] - -> 是什么(What)、为什么(Why)、如何做(How)是人类认知事物的过程。所谓认知事物,就是从未知到已知,再到建立对这个事物的看法的全过程,因此称其为认知圈思维。 - -> 查理·芒格有一句话是:“手上拿着锤子的人,看什么都像钉子。 - -> 请各位一定要理解,每一种定目标的方式,都是对的,也都是错的。因为任何一种理论、方法,它都有它的适用边界,也就意味着,我们每个人在不同的阶段定目标的方式和方法也不一样。 - -> A是什么,适合谁在什么情况下使用,达到什么目标。 - -> 询问“为什么”往往不是一次就可以的,我们要连续问几次“为什么”,以达到追根溯源、找到底层逻辑的效果。 - -> 这是一个保温杯,它的纳米材质和嵌入式封闭接口,可以让它的保温效果达到最高级,84摄氏度的水倒进去,24小时之后还能有70摄氏度,半夜起床,也能喝到一口温热的水。无论是出差还是旅行,都能一路温暖。 - -> What—Why—How模式:是一个比较完整的认知过程,我们在实际运用中,常常会忽略其中一个或者两个环节。 - -> 建立完整的认知过程,能让我们思考全面,不会陷入牛角尖里。 - -> 所以认知的顺序是:What—Why—How,这个顺序适用于我们对已知事物的认知清晰的情况,那么对于未知事物的认知顺序是什么呢? - -> 黄金圈思维模式 - -> 但是Airbnb则是反其道而行之,旅行为什么一定要住酒店?人们需要的真是酒店吗?可能很多人需要的就是一张床和一顿早餐。这就是黄金圈思维的威力,把“Why优先”的思考方式当成习惯,能更深层次地理解用户的真实需求,直击问题的本质。 - -> [插图] - -> ?我需要的是系统的会议管理制度,而不是打补丁式的会议制度。否则一个会议管理我都不知道你要整出多少制度,这种管理太散了,让人不放心。” - -> 提出问题、分析问题,然后去解决问题,是李先生的强项。 - -> 由此可见,李先生在制度完善的外企担任经理一职是在完善的制度之下落实执行的工作。而正在高速发展的民营企业,制度还没有完善(即使完善也是阶段性完善,随着企业的发展还需要继续完善各种制度),他需要做的是使用全面解决问题的思维,由小至大,由点到面,自始至终。 - -> 流程是把一个或者多个输入转化为对客户有价值的输出的活动。 - -> 在流程中,一共有6个要素需要我们进行把控: - -> PDCA的含义是将管理分为四个阶段,即计划(Plan)、执行(Do)、检查(Check)、调整(Action)。第一阶段做出计划;第二阶段实施计划;第三阶段在实施过程中要检查实施效果;第四阶段,根据检查情况不断调整行动方案,之后进行复盘,总结优缺点,指导下一次活动。 - -> 我们的目标是从整体出发解决问题,当我们已经养成了会思考前沿和后沿的习惯后,最终的顺序是:P—DC—A(前沿—主活动—后沿)。 - -> 规划指的是策略、计划、预算、政策、标准。 - -> 在优化流程时,我们应该遵循ESIA法。E——Eliminate,清除;S——Simply,简化;I——Integrate,整合;A——Automate,自动化。 - -> 在处理客户投诉时有一个“黄金24小时”的说法,即客户投诉的24小时内是妥善处理的黄金时间,这样能提高客户的满意度,避免客户投诉升级。 - -> [插图] - -> 流程思维适用于还没有建立流程,想要对事情进行整体把控的时候,比如活动流程、销售流程;也适用于需要标准化的时候,比如新店开业流程、工厂作业流程。 - -> 流程思维的重点在于事,人事物思维的重点在于人,要先明确参与人员,把人安排清楚,满足人的需求,因为事和物是由人来行动和操作的,搞定人,事和物自然水到渠成! - -> 相处建立情感,沟通获得理解,为对方争取利益。 - -> 在人事物思维中,分析人的时候难免会带上所要处理的事情和物品,因为人是主语,要形成一个完整的分析或者指令,主语后面必然要有谓语和宾语。宾语是什么,就是我们要对接的人或处理的事情、准备的物品。在分析完人之后,再罗列事和物,可能会出现重复。 - -> 但是让人事经理出马就不一样了,因为他掌握着员工晋升、加薪的建议权,所以,在这件事上,员工面对节目瞬间变得重视起来。 - -> 人主要是明确关键责任人,分析人的态度、性格、知识、技能等善加利用。 - -> 忘记做事的核心价值是在培养人。 - -> 电影《后会无期》有句很经典的台词:“听过很多道理,依然过不好这一生。” - -> 运用故事的力量,无论理解、记忆,还是说服、行动,都会事半功倍。 - -> 讲一个故事,首先要把背景交代清楚。因为其他人不是我们肚子里的蛔虫,在不知道事情的背景之下,他们很难理解主人公的选择和心里的矛盾。 - -> 冲突是建立在背景之上,与我们的预期、常识、主流价值观不符之处。 - -> 那是一颗可爱的、俏皮的,甚至有一点点蛮横的,但是从不遮掩、从不伪装的少女的心啊。这个世界上,还有什么比一颗愿意陪伴你到老的真诚的少女的心更宝贵的东西吗 - -> 编完了一个故事,不知道大家是否开始建立起故事思维呢?我们在表达观点时,可以尝试用故事的方式,反复练习,当需要表达观点、劝说、具象化理念时,我们可以用故事的方式凸显。 - -> 讲故事有四种方式,分别是标准式、开门见山式、突出忧虑式、突出信心式。 - -> 4.突出信心式:问题—背景—冲突—回答。 - -> 建立故事思维,灵活运用故事化的各种模式,让表达更有感染力、说服力,对方才会更认同,也更易于接受,记忆更深刻,更容易转化为行为,这就是故事思维的魅力。 - -> 我的上司看完之后,对我说:“你一点都不了解你的客户,人家不会为了你的辛苦付出而埋单,只会为自己能收获什么而埋单。 - -> 由于背景、教育程度、经验、立场不一样,人们面对同一件事的态度、想法和需求也不一样,我们拿自己的需求去要求其他人,是无法让他人来接受和埋单的,只有我们站在对方的角度去考虑,才能理解对方。当对方知道我们是理解他、懂他、认可他的,他才会反过来认同我们。 - -> 不同的人、不同的角度,面对同一个问题,就会有不同的思考和解答,我们不要被自己单方面的思维局限,去固化一个问题的答案。世界本就多姿多彩,有无限可能。我们站在对方的角度,不仅能理解对方,还能因为满足了对方情感或者物质的需求,进而获得对方的认同。 - -> 客户思维是一种思维观念,渗透在一个人的言行里,渗透在一个人的价值观里。 - -> [插图] - -> 1.对方的需求是什么?明白了对方的需求,我们才能对症下药。 - -> 2.对方的特点是什么?特点包括性格、才华、嗜好、为人处世的方式等。 - -> 3.对方忌讳什么?忌讳的事情尽量不做,了解这一点,我们可以少走弯路。 - -> 直奔主题的人,必然拥有结构化思维;喜欢说故事的人,必然拥有故事思维。 - -> 所以,对方是否容易吸收信息,不是取决于我们自己的表达习惯,而是取决于对方的表达习惯。 - -> 我们用对方喜欢的表达方式能更顺畅地与之沟通,也能做到情感上的共鸣。 - -> 笔者建议知识类的信息借助文字或者图画传达,技能类的信息用道具或演示;方法类的信息,除了告知步骤、注意事项,还要举例加深印象。 - -> 大多数人的思维是“你说的对,但我想要的是……”这种“yes,but…”的否定式思维,往往不会受到对方的认可,我们要转变为“先承认对方的需求,再提出自己的目标”这种“yes,and…”肯定式思维。 - -> “你眼中的问题,就是别人眼中的解决方案。” - -> 客户思维不是纠正自己看到的问题,而是要和对方一起面对他所要解决的问题。 - -> 我们在舒服的范围里,增加一点点的工作难度,不仅有安逸的舒服,而且还是有成就感的舒服。 - -> 慢慢增加工作能力,既安逸舒服,又能有成就感,慢慢也有了抵抗风险的能力。 - -> [插图] - -> 1.汇报工作时直接说结果。 - -> 2.请示工作时说方案。 - -> 3.总结工作时说关键点。 - -> 4.规划工作时说标准。 - -> 在上下级关系中,上级用“为什么”发问时,往往容易使下属产生负担。 - -> 用授权的方式让下属放手去做事,虽然我们不会完全放心,却可以培养下属的能力,这才是真正地“为他们好”。 - -> 水平思维强调的是,寻求看待事物的不同角度和不同方法,是求创意、求数量的浅层思维方式。 - -> 而水平思考关注的是“可能性”。 - -> 任何一个患上不治之症的投保人,都可以立即获得去世后所得金额的75%。 - -> 水平思维往往意味着绝处逢生,在一片红海中厮杀,找到一条通向蓝海之路。 - -> 当我们为实现一个设想思考时,很有必要摆脱掉一直被认为是正确的、固有的观念束缚 - -> (一)随意输入法 - -> (二)反向型激发 - -> (三)摆脱型激发 - -> 我们不必把咖啡的价格定得很高,以补偿时间损失,而是以便宜的价格售卖咖啡,但在咖啡桌中间摆一个计时器以便于计时收费,在客户落座时记录时间,离开时结算。 - -> (五)妄想型激发 - -> 垂直思维则是把眼镜的某一方面深入分析。以品牌为例,目前市场上有哪些眼镜品牌,把这些品牌各自的历史、经营理念、专利技术、特色款式、产品优缺点、营销渠道等了解清楚,我们能整理出一份行业说明书。垂直思维能让我们在某一领域或者专业技术上精通透彻,成为专家。 - -> 选择某一方向后,以“What—Why—How”“Why—Why—Why”流程思维等形式的线性思考方式进行深入探讨,以解决问题,实现目标的结果。 - -> 六项思考帽 - -> 垂直思维法是以逻辑与数学为代表的传统思维模式。这种思维模式最根本的特点是:根据前提一步步地推导,既不能逾越,也不允许出现步骤上的错误。它有非常强的逻辑性、推理性,能够让我们专注于一个点,深入分析 - -> 可以充分说明垂直思维与水平思维的区别。垂直思维集中考虑的是姑娘必须取出一块石子;而水平思维是把注意力集中在口袋里剩下的那块石子。 - -> 水平思维是一种既非逻辑性又非因果性,而是属于超越性的思考方法。它可以从答案出发对问题进行思考 - -> 水平思维具有创造性,适用于寻找多种解决方案的情况;垂直思维能帮助我们深入分析问题、认知事物,在较短的时间内对事物有深刻的认知。 - -> 水平思维和垂直思维各有优缺点,把两种思维方式结合使用就能扬长避短,变成新的思维模型:先水平再垂直。 - -> 水平思维和垂直思维的结合运用,既能够扩大视野,又能提高分析能力。有的人习惯用水平思维思考,凡事有很多想法,却没有落地分析和行动;有的人习惯用垂直思维思考,关注局部、沉迷细节,却没有看到整体结构或者周围环境。 - -> 重点工作和新项目则建议水平思维和垂直思维结合 - -> Т字思维是“横向思维”和垂直思维的结合,把思维的过程外显出来可以画成一个Т字图案。 - -> 垂直思维具有深入性。垂直思维是解决流程思维中间的某一环节、某一问题,所以垂直思维是结果导向,以解决问题为目标。 - -> 用流程管理来把控横向节奏,用垂直思维深入透彻分析每一个关键事项,以达到从全局的角度掌控复杂工作,推动工作发展的目的。 - -> [插图] - -> [插图] - -> 第九节 刻意练习,终成思维高手 - -> 学习完这些思维方法之后,要刻意地在生活中运用 - -> 认真负责地做好自己手上的每一件事情,这也是一种学习,一种和听课、读书、作业同样重要的学习。 - -> 是把简单的事情重复做、认真做。 - -> 而是因为它能将简单的事情持续做、坚持做。 - -> 第三,工作要做好记录,及时总结收益。什么样的总结能打动人心?一定不是那些空虚的话,也不是喊一些“好好工作,坚持干,踏实干”的标语,而是有具体的内容和收益。上文那位同事的总结之所以优秀,最大的原因在于她把入职以来几年的工作都进行一一罗列,内容很充实、具体、有场景,这样才有说服力。 - -> 每做完一个新项目或者贡献值大的项目,就应该有一个专门的文档进行记录,需要总结的时候,随时复制、粘贴。 - -> 灵活自如地运用结构,也就能自己建立思维模型,对自己的知识体系进行升级和重构,甚至创造属于自己的思维模型 - -> 只有把“道”研究清楚,把总结出来的机制、规律、原理,放到自己的问题里,我们才会融合变通地解决自己的问题,最后形成自己的“术”。 - -> “道”是规律,是万事万物运行的轨迹,“术”是人遵行自然规律的做事方式。“道”是万变不离其宗的根源,“术”是因时制宜、因事制宜的做事方式、解决方法。 - -> 只有我们理解并掌握了运营之“道”,才能迁移到自己的工作和产品上。 - -> 举办这样的活动、活动开展的过程遵循了什么规律、什么人性? - -## 笔记 - - -> 我们可以看到鲁班的思维方式是比较成熟的,在手被草划破时思考“为什么”,之后还联想到了“蝗虫”,找到共同的规律之后,再将其运用到实践中。 -[插图] -图1-4 鲁班的思维过程 - -💭 举一反三。触类旁通 - -> 人和人最大的差距便是思维方式, - -💭 夏虫不可语冰,井蛙不可语海。 - -> 行动要遵循的思维结构有很多,因为不同的行动而变化,其中PDCA却是任何行动都可以遵循的原则和思维,P是计划(Plan),D是执行(Do),C是检查(Check),A是调整(Act)。 - -💭 做一个行动派,先僵化再优化。 - -> 我们不缺乏解决问题的思维,而是缺乏事实界定的思维。 - -💭 实践是检验真理的唯一标准 - -💭输入,思考,实践,复盘。 - -> 归纳就是从个别到一般,演绎则是从一般到个别。 - -💭 一般到特殊,特殊到一般 - -> 记得每位下属的生日,提前准备小礼物;记得每位下属的家乡,过年过节,会安排能同行的员工一起结伴回家…… - -💭 尊重人性 - -> 对得出的结论进一步用事实验证,从多个角度证实或证伪 - -💭 看待事物始终要多层次,多角度,全方位的思考。 - -> 对得出的结论进一步用事实验证,从多个角度证实或证伪 - -💭 输入,实践,复盘,改变。由此往复,实践才是检验真理的唯一标准! - -> (三)结论只能代表当下,不能代表未来,因为世界一直是变化的 - -💭 经验总结代表过去,拥抱变化才是真的。 -学会不断的输入,实践,复盘,改变。 - -> 调查显示,住学区房的孩子比不住学区房的孩子平均成绩高。这个数据是随机调查198户人家得出的结论。所以为了孩子,我们一定要买学区房 - -💭 当你判定一个因素可能决定一件事的时候,可以试着反推,例如文中的例子就是:成绩高的都是住学区房么? -0.影响学习成绩的因素都有哪些? -1.内在因素都有什么? -2.外在因素都有什么? -3.学区房直接,间接影响了那些因素? -4.这些影响因素决定成绩高低的比重多大? -答案一目了然,要学会分析问题,看清问题的本质。 -当你思考完这个问题后,可以尝试跳出来重新看待这个问题。 -毕竟低纬度复杂性问题往往是高纬度简单问题的投影。 -冲冲冲,奥利给! - -> 第一,大部分人往往分不清事实和感觉。 - -💭 二手信息自带主观臆断,just feel。 - -> (二)尽量寻找一手信息,对二手信息心存疑虑 - -💭 信息本身就是一种资源,一手信息谈何容易,都是垃圾堆里找宝贝罢了。 - -> 就像前文举例的小明的成绩,笔者列举了小明的三门主科成绩在90分以上,如果归纳出“小明成绩优异”其实是属于“不完全归纳”,这并不能代表小明的地理、生物等其他科目的成绩也都在90分以上。 - -💭 具体和抽象 - -> 真实情况是,各种前因后果不连贯的事件零散无序地出现,我们能不能把它们放在一起,对它们进行归纳总结。所以,我们要经常把具有同样因素的事件放在一起,尝试对它们进行归纳,按照相似的人、相似的事、相似的客观环境、相似的步骤流程进行归纳。 - -💭 复合型信息 - -> 对于复合型信息,要先提炼核心思想,再归纳出结论。 - -💭 抽象 - -> 总而言之 - -💭 总而言之,言而总之哈哈哈 - -> 所有的A=B; -C=A; -所以,C=B。 - -💭 数学中的集合关系哈哈哈哈 - -> 归纳是从生活中总结常见事物而得出的一个结论,这个结论就会成为公理、规定、规律。演绎的前提就是我们得出的公理、规定、规律。因此,演绎以归纳为基础,归纳为演绎准备了条件。 -2.归纳为演绎提供了指导 - -💭 输入 -公式 -输出 -数学真的yyds - -> 点状思维就是学习和思考的过程中,信息点没有发生连接,而是像一座一座的独岛,单独存在于你的大脑中。 - -💭 点成线,线成面,面成体 - -> 从点状思维升级到线性思维的常见方式,除了第二章中的联想 - -💭 点状思维,线性思维,方面思维,立体思维 - -> 大脑理解记忆才容易。 - -💭 信息熵 - -> 检查思维结构是否以上统下的方式就是提炼关键词,画出上下分层结构,然后判断下层能否支撑上层,并且做到主语一致。 - -💭 一句话,说重点 - -> 因为我们的大脑会默认我们说话的前后句具有某种逻辑关系,大脑会一句一句地推导和理解前后句的逻辑关系。 - -💭 上下文关联 - -> 串联关系。 - -💭 串联,并联。 - -> 人主要是明确关键责任人,分析人的态度、性格、知识、技能等善加利用。 - -💭 物尽其用,人尽其才。 - -> “yes,and…”提供的是双赢的解决方案,我们不仅要满足对方的需求,还要明确自己的目标。 - -💭 yes and - -> 如果我们拥有客户思维,我们就会想到,客户使用产品的场景,怎样能更便捷、更舒适。 -如果我们拥有客户思维,我们发出去的每一个文件、每一则通知,就一定会让受众看得清、听得懂、轻松做。 - -💭 从用户的立场,角度出发,看待问题。 - -> 相信大家在工作中,都有过收发表格的经验。比如,行政发一份表格给全员,让大家填写资料发回给她。好多人打开表格,填完自己的信息就直接发回给行政。 -这时候我们可以想一想行政遭遇的场景,她收到了很多个表格,在保存的时候,计算机就会告诉她:文件名重复,是否覆盖原文件?于是她保存每一个文件,都需要更改一个文件名。 -如果我们运用客户思维,就会想到,当我们把表格发回给行政的时候,她需要一个个更改文件名,为了方便她的工作,我们应该怎样做?没错,我们应该把文件名改成自 - -💭 收集表就派上用场了哈哈 - -> 客户想要什么?他们想要的课程要轻松、易学,要有用,所以我就要给他们轻松容易学的感觉,以及在具体场景使用的画面感。 - -💭 描述情况需要营造一个直观,容易相信的场景。 - -> 我的上司看完之后,对我说:“你一点都不了解你的客户,人家不会为了你的辛苦付出而埋单,只会为自己能收获什么而埋单。 - -💭 没有人会为垃圾买单,切勿自我感动 - -> 水平思维与垂直思维是一种复合性思维,也就是两种思维结合使用。 - -💭 水平散发,具有广度,需要举一反三。 -垂直深入,具有深度,需要系统思考。 - -## 书评 - - -## 点评 diff --git a/life/阅读/心理/十分钟冥想.md b/life/阅读/心理/十分钟冥想.md deleted file mode 100644 index 8b5a4ab0..00000000 --- a/life/阅读/心理/十分钟冥想.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: 十分钟冥想 -description: 冥想是一种奇妙的技能,它有改变我们人生的潜力,但是怎样运用这种技能,则取决于你自己。随着媒体对冥想和正念的报道越来越多,许多人似乎急于确定冥想的用途。事实上,你只有确定了如何用它,你才能确定它的用途。在学骑自行车的时候,你所了解的是如何骑车,而不是你要如何 -keywords: - - 十分钟冥想 - - 心理 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《十分钟冥想》 -- **作者**: 安迪·普迪科姆 -- **分类**: 心理-心理学应用 -- **ISBN**:9787111639824 -- **出版社**:机械工业出版社 - -## 概述 - -冥想是一种奇妙的技能,它有改变我们人生的潜力,但是怎样运用这种技能,则取决于你自己。随着媒体对冥想和正念的报道越来越多,许多人似乎急于确定冥想的用途。事实上,你只有确定了如何用它,你才能确定它的用途。在学骑自行车的时候,你所了解的是如何骑车,而不是你要如何去运用骑车的能力。有些人把自行车视为出行工具,有些人用它跟朋友闲逛,还有极少数人可能以它为终身事业。对所有人来说,技能是一样的:安稳地坐在车座上,别掉下来。所以,虽然别人可以教你如何骑车,但骑车对你而言到底意味着什么,你要拿它做什么,以及它怎样才能最符合你的生活方式,这完全取决于你自己。冥想技能也是如此,你可以将它应用到生活中的任何方面,它的价值取决于你赋予它的价值。 - -## 划线 - - -> 你上一次坐下来,安静不动,不分心,不受电视、音乐、书籍、杂志、食物、电话、计算机、朋友、家人的打扰,没有任何你需要思考和解决的事情,是什么时候? - -> 在正念环境中,冥想不是要去阻止想法、控制心灵。它是一个过程,在这个过程中,我们放弃控制,不插手,不介入,学会以被动的方式集中注意力,同时将心灵安放在它自有的、自然的觉醒中。 - -> 内心想法不介入不插手,容许心灵以自己的节奏、自己的方式展开,你才能找到真正的头脑空间。 - -> 你知道,如果你坐上飞机,从那些云的一端穿过,另一端就没有阴云,而只有蓝色的天空了。就算有大片阴沉沉的乌云,蓝色的天空也始终存在。 - -> 我得到了这样一种理念:天空总是蓝的。云相当于我们的思想,当心灵忙于这些想法的时候,蓝色的天空就暂时被遮蔽了。从我自 - -> 无论我们感受如何,心灵的深层本质就像蓝色的天空一样,并没有发生变化。当我们因为某种原因心情不好或者感到痛苦的时候,云会变得更加阴沉,更令人烦扰。也许整个天空中只有那么一个想法,然而它似乎带走了我们全部的注意力。 - -> 我一直都把头脑空间当成这种心境。冥想不是努力把阴云赶走,而是:搬把椅子到花园里,坐看云卷云舒。有时候,蓝色的天空会穿过阴云展露出来,令人备感美好。如果我能耐心地坐在那里,不过分执着于那些阴云,那么蓝色的天空会显露得更多。 - -> 。最重要的是,你可以想象心中有一片始终宁静、始终澄澈的区域,想象心中有一片你随时都可以依归的地方,想象无论生活中发生什么事,心中都始终有一种安心感或安定感。 - -> 你不可能因为你像一座雕像一样坐在那里做某种叫冥想的事,就指望它突然静静地在某个地方站定!因此,当你跟这匹野马,也就是你的心灵,一起坐下来的时候,你需要给它提供很大的空间。不要试图立刻将注意力集中在冥想对象上,相反,要给你的心灵一点时间,让它安定下来,放松一点。你急什么呢?” - -> 关注它的同时,试着温和地将它分享给他人。同样,如果你的注意力集中在令人不快的感受上,那么请你试着轻松地保持体验它或者替某个你关心的人照看它的心态。 - -> 被压制的,必将浮上来 - -> 就情感而言,凡是被压制的,必会再浮上来。也许它会突出到表面来,就像情感本身一样,也可能它会开始以别的方式影响我们的行为。 - -> 要像训练野马那样去靠近你的心灵。要想象自己站在一个非常大的空间的中央,即一块开放田野的中央。现在,缰绳的一端系着这匹马,另一端在你手里。不过,缰绳是松弛的,这匹马有它所需要的一切空间,它并没有觉得被困住或者受到约束 - -> 你有没有注意过,当你真正专注于某个事物的时候,你的心灵会变得多么平静?你有没有注意过,即便你的心灵之前还凌乱如麻,但是一旦专注于自己喜欢做的事情,并且全身心地沉浸在那项活动中时,心灵会开始安定下来,会感到非常宁静? - -> 所以,对任何可能会令人分心的事物进行限制,正是修习开始的第一步。 - -> 当心灵像这样被完全扰乱时,我们就几乎不可能看清正在发生的事,也不可能看到表面之下隐藏着什么。 - -> 如果要对这些让我们的生活变得既复杂又丰富的感受和情绪进行研究,那么我们需要使水面足够平静,因为只有这样,我们才能看到它们。 - -> 在那个时候,似乎一切都被愤怒染上了色彩。我不知道你有没有过这种体验,感觉就像是,所有从脑海中闪过的想法都带上了这种愤怒底色,这种底色改变了你看待周围世界的视角。 - -> 奇怪的是,与此同时,我好像开始不那么专注于自己的那些想法,而更多地开始专注于自己手头的活。虽然我同意,用剪刀来剪草不见得每个人都喜欢,然而剪了一会儿之后,我发现这个过程其实可以使人平静。事实上,这个过程本身就成了一种冥想过程。 - -> “你的心灵就是这个样子。你看到了这些陷阱,但是惯性太强大了,你没法阻止自己掉进去。但是, - -> “如果你分心走神了,那就不是冥想了。只有在你不分心不走神的时候,才是冥想。没有好的冥想或者坏的冥想之说,只有分心和不分心之说,以及觉醒和不觉醒之说。”事实上,他常常把冥想比作去剧院 - -> 你甚至会被台上的故事所激发,坐在那里计划着如何向你5年来一直想告白的人告白。 - -> 冥想根本不起作用。我感觉糟透了。进来的时候我心情还好,而现在我感觉心情很差,那么冥想的意义何在呢? - -> 我们其实很少能做到身心的时空合一。 - -> 理念是,不要试图去阻止想法,而要顺其自然,任由想法在你完全觉醒的状态下来来去去。 - -> 跟非冥想者相比,冥想者的大脑中管理痛苦和情感的区域要更厚实 - -> 我们中有多少人一直都是这样生活的?沉浸在对过去的回忆和对未来的规划中,如此全身沉浸在思考中,而完全没有意识到当 - -> 无论你在做什么,它就在这里,它就在普通平常的日常活动中,如就在你吃三明治的动作中,就在你喝水的动作中,就在你洗碗的动作中……这就是正念、心在、觉醒的要义所在。 - -> 我们对身体的运动如此熟悉,以至于在跑的时候根本不需要太专注。正因为这一点,心灵往往很容易游离。 - -> 研究正念有效性的研究者发现,哪怕参与者每天只冥想很短的时间,只做了5天,就有更多血液流向他们大脑中帮助控制情感和行为 - -> 冥想的最佳时间是早上醒来的第一时间 - -> 他们不断地把冥想加入下一个“待办事项清单”中,结果却是“未完成”状态。他们用来减轻自己压力的事情,反倒不知怎么成了他们的另一个压力来源。这可不是冥想的目的! - -> 研究冥想和正念的好处的神经科学家发现了重复的重要性。他们说,日复一日地做冥想练习,这个简单的举动就足以促使大脑做出积极的改变。事实上,他们认为,这对于建立新的突触关系和神经路线来说极其重要。 - -> 某一天,你登上一列拥挤的火车,却没有为之感到过于困扰,而另一天,同样拥挤的列车却好像触发了你的各种情绪。你会很清楚地意识到,并不是外在的事物给我们带来了最大的麻烦,而是我们心灵里面的事物给我们带来了困扰——幸好,心灵里的这些东西是可以改变的。留意视角在每时每刻的转变,这会为你的日常冥想提供强有力的支持。 - -## 笔记 - - -> “天空总是蓝的。” - -💭 生活总是美好的 - -> 现在,想象一下,你将石头一块接一块地扔进水中,看看整个水面同时被搅动起来的情景。当水面变成这个样子的时候,你几乎就不可能看到水里的任何东西,更不用说看见水底的东西 - -💭 静心 - -> 如果我一门心思专注在一件事上,那么我不可能同时分心到另一件事上。因此,在没有刻意忽略或抗拒内心想法的情况下,当我的心思专注在别处的时候,这些想法自然地自行消失了。 - -💭 活在当下,体验内心的宁静和愉悦 - -💭打水即是打水,劈柴即是劈柴,烧饭即是烧饭 - -> 以正念的形式将觉醒应用到日常生活的杂务中。 - -💭 正念即是专注力 - -> 行走是一种确定的、受习惯驱使的行为,它几乎不需要专注力。 - -💭 潜意识 - -> 冥想只有在你去做的时候才会起作用!只有当你坐下来冥想的时候,你才会看到它的好处 - -💭 实践是检验真理的唯一标准 - -## 书评 - - -## 点评 diff --git a/life/阅读/心理/认知觉醒:开启自我改变的原动力.md b/life/阅读/心理/认知觉醒:开启自我改变的原动力.md deleted file mode 100644 index 2a6f2bc4..00000000 --- a/life/阅读/心理/认知觉醒:开启自我改变的原动力.md +++ /dev/null @@ -1,612 +0,0 @@ ---- -title: 认知觉醒:开启自我改变的原动力 -description: 为什么我们做事总是急于求成、避难趋易?所谓有耐心,就是要“咬牙坚持、死磕到底”?如何不再用“三分钟热情”和“打鸡血”的方式做事?如何保持极度专注?如何消除焦虑?如何提高学习能力?这是一部可以穿透时间的个人成长方法论。7大底层概念,20个成长关键词,助你彻底 -keywords: - - 认知觉醒:开启自我改变的原动力 - - 心理 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《认知觉醒:开启自我改变的原动力》 -- **作者**: 周岭 -- **分类**: 心理-认知与行为 -- **ISBN**:9787115543424 -- **出版社**:人民邮电出版社 - -## 概述 - -为什么我们做事总是急于求成、避难趋易?所谓有耐心,就是要“咬牙坚持、死磕到底”?如何不再用“三分钟热情”和“打鸡血”的方式做事?如何保持极度专注?如何消除焦虑?如何提高学习能力?这是一部可以穿透时间的个人成长方法论。7大底层概念,20个成长关键词,助你彻底走出焦虑与迷茫,拥有清醒的认知、清楚的目标、清晰的路径、清爽的情绪。通过“大脑构造、潜意识、元认知”等思维规律,你将真正看清自己;通过“深度学习、关联、反馈”等事物规律,你将真正看清世界,提升自控力、专注力、学习力……只有洞悉底层的内在规律,我们才能真正开启自我改变的原动力。 - -## 划线 - - -> [插图] - -> [插图] - -> [插图] - -> [插图] - -> [插图] - -> 有一样东西却始终无法直接传递,那就是心智 - -> 所谓心智,通俗地说,就是我们看待人和事的态度,以及由此做出的判断与选择。每一个人来到这个世界时,其人生观、世界观、价值观全部都是从零开始的,所有习性、习惯、模式也要从人性的初始状态开始发展,你、我、我们的父辈和孩子都是如此,没有人能够直接跨越这一阶段。而不少人的初始状态是混沌的,他们天然追求简单、轻松、舒适、确定,这种天性支配着他们,成为他们喜怒哀乐的生理起点,然而身陷其中的大多数人对此知之甚少。 - -> 大多数人发现自己并没有变得特别,而是在不断地服从社会规则和应对生活烦恼,开始随波逐流:该玩手机玩手机、该打游戏打游戏;没有多少压力,也没有多少动力;觉得反正日子还过得去,希望也还在心里,偶尔挣扎呐喊一声,而后继续做着短视的选择,沉溺于眼前的安逸。 - -> 不知道事物的构成、框架,不知道努力的路径、方法,也不知道自己真正想要什么、能做什么、最后会成为什么样的人…… - -> 一时间,他们焦虑急躁又如梦初醒:“为什么没有早点知道这个世界的真相?为什么没有在最好的年纪及时觉醒?”但即使含泪拷问,也似乎错过了最佳时机,毕竟人生是个单行道,无法从头再来。最后他们不得不敲碎那颗高傲的心,在无奈和叹息中默默接受平庸的人生。 - -> 直到有一天,因为意外,身边两位与我关系极好的朋友的命运轨迹发生了巨变。我忍不住问自己,如果这些意外发生在自己身上,如果现有的一切被“剥夺”,我还有什么、会什么,又曾在这个世界上留下了什么? - -> 我发现每天有事情做不代表觉醒,每天都努力也不代表觉醒,真正的觉醒是一种发自内心的渴望,立足长远,保持耐心,运用认知的力量与时间做朋友;我发现人与人之间的根本差异是认知能力上的差异,因为认知影响选择,而选择改变命运,所以成长的本质就是让大脑的认知变得更加清晰; - -> 从混沌到警醒,从迷茫到清晰,我慢慢解开了“愿望觉醒”和“方法觉醒”的秘密,知道了如何激发和保持自我提升的内在动力,如何变苦涩的毅力支撑为科学的认知驱动。当我 - -> 我看到无数渴望成长的人,于是决定在自我成长的同时帮助他人。 - -> 2018年5月的最后一天,我在个人公众号“清脑”上开通了问答专栏,从此多了一个成长咨询师的身份。虽然是业余的,但我也因此有了大量接触“困惑样本”的机会( - -> 如果你觉得自己已经错过所谓的最好年纪,其实也没有关系,因为“现在”永远都是开始的最好时机——这不是什么安慰人的话,这是事实。 - -> 从大脑开始,重新认识自己,我们会再“进化”一次。 - -> 起初,地球上并没有生命。但在数十亿年前,远古的海洋中出现了一些“复制子”,在进化的力量下,它们逐渐成为单细胞生物,接着又演化为动物、植物和微生物等,之后动物这条分支进化成各种原始鱼类,遍布大海。 - -> 爬行动物演化出了最初的“本能脑”。本能脑的结构很简单,只有一个原始的反射模块,可以让爬行动物对环境快速做出本能反应,比如遇到危险就战斗或逃跑,遇到猎物就捕食,遇到心仪的异性就追求等。爬行动物既没有情感也没有理智, - -> 有了情绪的加持,哺乳动物就能在恶劣的环境中趋利避害,大大提升了其生存优势,比如恐惧情绪可以让自己远离危险,兴奋情绪可以让自己专注捕猎,愉悦情绪可以增强同伴间的亲密度,伤心情绪能引来同情者的关爱等。 - -> 在我们的大脑里,由内到外至少有三重大脑:年代久远的本能脑、相对古老的情绪脑和非常年轻的理智脑。 - -> 理智脑虽然高级,但比起本能脑和情绪脑,它的力量实在是太弱小了。 - -> 。同时,它们距离心脏更近,一旦出现紧急情况,可以优先得到供血,这也是为什么当我们极度紧张时往往会感觉大脑一片空白,这是因为处于最外层的理智脑缺血了。 - -> 种种迹象表明,理智脑对大脑的控制能力很弱,所以我们在生活中做的大部分决策往往源于本能和情绪,而非理智。 - -> 为了生存,他们必须借助本能和情绪的力量对危险做出快速反应,对食物进行即时享受,对舒适产生强烈欲望,才不至于被吃掉、被饿死。 - -> 自然成了目光短浅、即时满足。又因它们主导着大脑的决策,所以这些天性也就成了人类的默认天性。 - -> 不过在现代社会,用避难趋易和急于求成来代指它们显然更加贴切。 - -> 这样的大脑构造导致我们总是陷入“明明知道,但就是做不到;特别想要,但就是得不到”的怪圈,比如: - -> 迫使经理为他们糟糕的选择做出合理的解释 - -> 大多数时候我们以为自己在思考,其实都是在对自身的行为和欲望进行合理化,这正是人类被称作“自我解释的动物”的原因。 - -> 习惯之所以难以改变,就是因为它是自我巩固的——越用越强,越强越用。要想从既有的习惯中跳出来,最好的方法不是依靠自制力,而是依靠知识, - -> 换一个角度看,也没有必要抹杀,因为本能脑强大的运算能力和情绪脑强大的行动能力,都是不可多得的宝贵资源,只要去深入了解、循循善诱,就能为己所用,甚至这些力量还是成就我们的关键。 - -> 无论个体还是群体,人类的安全感都源于自己在某一方面拥有的独特优势:或能力,或财富,或权力,或影响力。 - -> 那段时间我心里总是回响着一句话:来不及了,太晚了,一切都太晚了……直面焦虑 - -> 归结起来,焦虑的原因就两条:想同时做很多事,又想立即看到效果。王小波说:人的一切痛苦,本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力,又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。 - -> ·克制欲望,不要让自己同时做很多事; - -> ·面对现实,看清自己真实的能力水平; - -> ·要事优先,想办法只做最重要的事情; - -> ·接受环境,在局限中做力所能及的事; - -> ·直面核心,狠狠逼自己一把去突破它。 - -> 避难趋易的天性 - -> 那就是他的故事击中了人类天性中最原始、最本能的部分——即时满足。 - -> 正是这种不用付出巨大努力就能获得超强能力的快感让人心驰神往,因为现实生活中无论读书、考试,还是工作、赚钱,要想表现出色都必须经受长时间的磨炼。 - -> 复利效应显示了价值积累的普遍规律:前期增长非常缓慢,但到达一个拐点后会飞速增长。 - -> 耐心不是毅力带来的结果,而是具有长远目光的结果。 - -> 学习知识的目的是“消除模糊”,而获取知识的方法也是“消除模糊”,目的和方法相统一,这几乎成了这个世界上所有能人共同遵守的学习法则,这类例子能举出很多,比如: - -> :提升思考能力的方法正是不断明确核心困难和心得感悟,并专注于此。 - -> 但有些事一旦进入潜意识,可能很难消除,比如童年的不幸经历,虽然意识早已将其淡忘,但潜意识却始终保留着这些印记,并隐蔽地影响着我们的性格和行为。 - -> 要想不受其困扰,唯一的办法就是正视它、看清它、拆解它、化解它,不给它进入潜意识的机会,不给它变模糊的机会;即使已经进入潜意识,也要想办法将它挖出来。所以,当你感到心里有说不清、道不明的难受的感觉时,赶紧坐下来,向自己提问。 - -> 在诸多可能性中建立一条单行通道,让自己始终处于“没得选”的状态。 - -> 熔断不读书法”。所谓“熔断不读书法”,意思就是在读书时一旦看到有启发的内容,就触发熔断点,立刻停止读书。停止读书之后做什么呢?围绕这个触发点对自己提问。 - -> 在另一篇文章中,他又提出:无论在生活中还是在学习上,凡是被某件事击中,“动了感情”,就要有意识地提醒自己追问原因。 - -> 先用感性能力帮助自己选择,再用理性能力帮助自己思考。 - -> 小事听从你的脑,大事听从你的心。 - -> 它能对自身的“思考过程”进行认知和理解(见图3-1)。 - -> 它们依旧无法从自我和当前的情境中脱离,假想出“另一个自己”— - -> 被动元认知和主动元认知。 - -> 遭遇指责、批评时,才不得已去反思纠正; - -> 而有些人即使在没有威胁的情况下也会尝试练习扇动翅膀,让自己不断进化,彻底远离危险。 - -> 从被动到主动,这是一个转折点。当一个人能主动开启第三视角、开始持续反观自己的思维和行为时,就意味着他真正开始觉醒了,他有了快速成长的可能。 - -> 你能意识到自己在想什么,进而意识到这些想法是否明智,再进一步纠正那些不明智的想法,最终做出更好的选择。 - -> 第三,如果说学习和反思是静态的,那处于当下的、动态的自已又该如何主动运用元认知呢?很简单,启用你的“灵魂伴侣”啊! - -> 元认知能力总能让你站在高处俯瞰全局,不会让你一头扎进生活的细节,迷失其中。如果你足够细心,还会发现未来视角总是当前行动的指南针,它可以在茫茫的生命中为你导航,让你主动选择去做那些更重要而不是更有趣的事情。 - -> 不难发现这些活动本质上都在做同一件事:监控自己的注意力,然后将其集中到自己需要关注的地方。 - -> 可以说,元认知能力就是觉察力和自控力的组合。所以从实用角度讲,元认知能力可以被重新定义为:自我审视、主动控制,防止被潜意识左右的能力。 - -> 每当遇到需要选择的情况时,我们要是能先停留几秒思考一下,就有可能激活自己的理智脑,启用元认知来审视当前的思维,然后做出不一样的选择。 - -> :一定要在选择节点上多花“元时间”。 - -> ,因为一天24小时看起来每分每秒都一样,但实际上并不相同,有些时间的权重要远远大于其他时间,我把这些权重大的时间叫作“元时间”。元时间通常分布在“选择的节点”上,比如一件事情、一个阶段或一天开始或结束时。善用这些时间会极大程度地优化后续时间的质量。 - -> 在选择的节点审视自己的第一反应,并产生清晰明确的主张。 - -> 要想清楚,不仅要审视第一反应,同时还要有清晰明确的主张。 - -> ·针对当下的时间,保持觉知,审视第一反应,产生明确的主张;·针对全天的日程,保持清醒,时刻明确下一步要做的事情;·针对长远的目标,保持思考,想清楚长远意义和内在动机。 - -> 走神时,我们要么沉浸过去,要么担忧将来,要么幻想不可能实现的情况,走神可以让我们活在任何时候,唯独不能让我们活在当下。 - -> 可见,分心走神的本质是逃避,所以,面对困难时,身心分离的人总会不自觉地退回舒适区,而身心合一的人则更容易跳出舒适区,直面困难。 - -> 身体感受永远是进入当下状态的最好媒介,而感受事物消失的过程更是一种很好的专注力训练。它提示我们,身心合一的要领不仅是专注于当下,更是享受当下,而这种享受必将使我们更从容,不慌张。 - -> 老和尚说:“得道前,砍柴时惦记着挑水,挑水时惦记着做饭;得道后,砍柴即砍柴,担水即担水,做饭即做饭。” - -> 注意力的感知精度就会越高,精力越集中,技能越精进。如果目标太大,那就将它分解成小目标,这样做也是为了使目标更具体、精细。 - -> 所以变聪明的秘诀就是:先保持极度专注,想不出答案时再将注意力转换到另一件与此毫不相干的事情上。即事前聚精会神,让意识极度投入;事后完全忘记,让意识彻底撒手。这样,灵感和答案就会大概率地出现。 - -> 清的习惯对能力提升伤害很大。李大钊也说过:“要学就学个踏实,要玩就玩个痛快!”说明界线分明的习惯对人性情和能力的培养都很有好处。 - -> 跳出舒适区,避开困难区,处在拉伸区。 - -> “你在孩子的学习上有没有采取什么特别的方法?”没想到他干脆地说:“有的!”我竖起耳朵继续听,他说:“就两条,一是像对待考试一样对待家庭作业;二是有问题只找主观原因。” - -> 距离我们太远的事物,我们通常无法把握,无论它们是令人痛苦的还是令人享受的。 - -> 做选择是一件极为耗能的事情,如果没有与之匹配的清醒和定力,绝大多数人最终都会被强大的天性支配,去选择娱乐消遣。在有约束的环境下我们反而效率更高,生活更充实。 - -> 因此,跳出舒适区的最好办法就是去发现和收集那些要点,也就是每次行动的小目标。比如练习弹钢琴的时候,不是一遍一遍地重复,而是只练出错最多的地方; - -> 我隐约看到:一小部分知识精英依旧直面核心困难,努力地进行深度钻研,生产内容;而大多数信息受众始终在享受轻度学习,消费内容。如果我们真的希望在时代潮流中占据一席之地,那就应该尽早抛弃轻松学习的幻想,锤炼深度学习能力,逆流而上,成为稀缺人才,否则人生之路势必会越走越窄。 - -> 人的学习分为被动学习和主动学习两个层次 - -> 。更糟的是,这种努力会让人盲目追求阅读的速度和数量,让人产生勤奋的感觉,实际上,这是低水平的勤奋,投入越多损失越大。 - -> 从知道到做到是一种巨大的进步,然而自己知道或做到是一回事 - -> 请注意,遇到这种困难才是深度学习真正的开始!因为你必须动用已有的知识去解释新知识,当你能够把新学的知识解释清楚时,就意味着把它纳入了自己的知识体系,同时达到了可以教授他人的水平,并可能创造新的知识。 - -> 可见“缝接”是深度学习的关键,而大多数人只完成了“获取知识”,却忽略了“缝接知识”这一步,因此,他们的学习过程是不完整的。 - -> 所以,逼迫自己获取高质量的知识以及深度缝接新知识,再用自己的语言或文字教授他人,是为深度学习之道。 - -> 每日反思。 - -> 深度学习除了能让我们不再浮躁,能磨炼理智,还能带来诸多好处,比如跨界能力的提升。 - -> 娱乐热点并非没有价值,浅层知识也同样具有意义,但前提是你需要具备一定的认知深度——深度之下的广度才是有效的。 - -> 我们可以把浅学习作为了解新信息的入口,但不能把成长的需求全部寄托于此,更合理的态度是:专注于深度学习,同时对浅学习保持开放。 - -> 这正是大师创作的普遍手法——把远处不起眼的A,关联到近处需解决的B,然后爆发出惊人的力量。 - -> 无关联,不学习 - -> ·用自己的语言重述信息,即找到触动自己的信息点;·描述自己的相关经验,即关联生活中的其他知识;·我的应用,即转化为行动,让自己切实改变。 - -> 所以写作就是一条深度学习的自然路径。 - -> 绝大多数人习惯以孤立的思维看待事物,喜欢花大量时间收集和占有信息;而另一批先行者则更喜欢拨弄信息之间的关联,从而在不知不觉间变得聪明了起来。 - -> 知识的获取不在于多少,而在于是否与自己有关联,以及这种关联有多充分。 - -> 当然,还有一个更重要的隐蔽条件不能忽视:你需要明确的目标或强烈的需求。张 - -> 人生没有白走的路,每一步都算数。 - -> 但凡收获一个感悟、了解一个观点或是学到一个知识,只要触动了自己,就要想办法让它效率最大化,而效率最大化的办法就是主动关联到别处,并让自己的行动发生改变。所以你不妨也把这句话当作口头禅,时常问自己:这个道理还能用在什么地方? - -> 根据能力圈法则可知,人的能力是无法跳跃发展的,只能在现有基础上一点一点向外扩展,而扩展的最佳区域就在舒适区边缘。 - -> 体系的本质就是用独特的视角将一些零散的、独立的知识、概念或观点整合为应对这个世界的方法和技巧。 - -> 打碎各家的认知体系,只取其中最触动自己的点或块,然后将其拼接成自己的认知网络。 - -> 触动是最好的筛选器 - -> 每日反思不是记流水账,而是留意每天最触动自己的那件事,不管是好的启发还是坏的体验,都写下来复盘,写得越细越好。一个触动点若是能转化成一个认知晶体,我们的生命质量和密度将远远超过那些不反思的人。 - -> 产生“触动”不意味着“连接”紧密 - -> 一是用自己的语言重新解释新知识,这会促使自己原有的知识体系对新知识做出反应。 - -> 三是在生活中能够经常练习或使用这些知识,因为实践是产生强关联的终极方法。学习不是为了知道,而是为了发生真实的改变。当你运用那些知识践行那些道理 - -> 第五节 打卡:莫迷恋打卡,打卡打不出未来 - -> 大脑“解释系统”的逻辑,虽然很荒谬,但强大的天性会迫使理性这样解释,而有的人还真接受了,于是有人去网上购买刷步神器,坐在家中就可以让自己运动步数名列前茅;有人早上5点闹钟一响就在早起群里打个卡,然后倒头继续睡;有人翻开书,拍张照,然后将照片发到朋友圈,以示自己今天读过书了…… - -> 动机已经转移 - -> ,其实对于学习来说,偶尔中断又有什么关系呢? - -> 因为人类的大脑喜欢确定性,不喜欢未知或不确定性。 - -> 这就是打卡心态的特性:学不到,假装一下;学到了,立即停止。 - -> 任务心态,身心分裂 - -> 世界上有些事情很奇怪,你直接去追求反而得不到。 - -> 但你若是安静地专注于一件事情,真正的美就出现了。所谓“大美不自知”,我想破除任务心态的方法正是如此——集中心力做眼前的事就好。 - -> 用记录代替打卡 - -> 图5-9 用记录代替打卡 - -> 同时,我们在任务设置时要使用新策略:设下限,不设上限。 - -> 作者斯蒂芬·盖斯为了养成好习惯,要求自己每天只做一个俯卧撑、每天只读一页书、每天只写50个字,这种无负担的习惯养成法最终促使他拥有了良好的身材,养成了阅读习惯,还写出了自己的书。他称这种方法简单到不可能失败。 - -> 是否有及时、持续的正向反馈,正是产生学习效果差异的关键。 - -> 他们似乎从来没有考虑过要尽快产出点什么,以换取反馈,通过另一种方式来激励自己。也许是因为在人造的学习体制内待久了,有些人很难相信“跳过原理,直接实操”的方式是有效的, - -> 但它们超强的欲望和情绪力量却是非常宝贵的行动力资源,如果能让它们感受到学习的乐趣,它们同样会展现强大的行动力,让自己像沉迷娱乐一样沉迷于学习。 - -> 所以科学的学习策略是产出作品、获取反馈,驱动本能脑和情绪脑去“玩玩玩”,而不是一味地努力坚持,让理智脑苦苦地去“学学学”。 - -> 真正比你强的人往往没空打击你 - -> 这印证了古典的跃迁理论:打磨作品—到达一个小山的头部—受到更多关注—移动到一个更大山头的头部—借助系统推力,实现人生跃迁。 - -> 真正的学习成长不是“努力,努力再努力”,而是“反馈,反馈再反馈”,只有不断产出,获得反馈,我们的人生才会发生真正的变化。 - -> 刘传的学琴理念,即跳过原理,直接实操的方式仅适用于学习的初级阶段。也就是说,采用这一方式,你快速达到60分的水平是可以的,但到了中级或高级阶段,仍然需要系统学习原理,否则走不远。 - -> 问题就出在这里,那些持续刻苦、争分夺秒、舍不得休息一下的人,他们的精力总量势必呈一条持续下降的曲线(见图5-11)。 - -> 于是他们舍不得浪费一点时间,认为在痛苦中前行才是努力的表现,越痛苦、越坚持,越刻苦、越感动, - -> 高效学习的关键在于保持极度专注,而不是靠意志力苦苦支撑,谁能保持长时间的专注,谁就能够在竞争中胜出。 - -> 极度专注+主动休息,如此反复。 - -> 因为太容易的内容会让人因无聊而走神,太困难的内容会让人因畏惧而逃避, - -> 毕竟克服困难和抵制诱惑都需要消耗意志力。 - -> 所以,一个真正的自控高手,不是一个只知道冲刺的人,而是一个善于主动休息、保持平衡的人。 - -> 刻苦,是一种宏观态度,轻松,是一种微观智慧。 - -> 人的惰性实在是太强大了! - -> 与天性对抗是没有出路的,也隐约感觉到自制力强并不代表行动力强。 - -> 珍惜每天的礼物 - -> 注意力的使用同样遵循这个规律,最初的选择会影响行为自动增强的方向。 - -> 注意力的增强回路是正向的还是负向的,很大程度上取决于你最初的选择,这也是老生常谈的道理:要事第一! - -> 在初始阶段,强迫自己先做重要的事情,一旦进入正向的增强回路,你便能拥有强大的行动力——这正是增强自制力、提升行动力的秘密。 - -> 清晰力,也就是把目标细化、具体化的能力——行动力只有在清晰力的支撑下才能得到重构。 - -> 只有真正做过的人才能体会到写与不写,完全不同。很多时候,人与人之间真正的差距可能就体现在最后那一点点行动上。 - -> ,因为做规划的目的并不是让自己严格地按计划执行,而只是为了让自己心中有数。如果当天计划有变也没关系,有了这份预案,你能够在处理完临时任务后,把自己迅速拉回正轨,但如果没有这份预案, - -> 因为成长是一个系统工程,必然是多要素共同作用的结果。 - -> 你陷入怠惰、懒散、空虚的情绪中动弹不得时,往往是因为你的大脑处于模糊状态。 - -> 认知越清晰,行动越坚定。 - -> 一是凡事必须在看到明确的结果后才行动,如果前景不确定、不明朗,即使别人说得再有道理,我也不愿意投入;二是如果一个道理或方法不能让自己快速发生变化,就不是最优的,所以要不断寻找,这样才有希望找到最好的方法。 - -> 想先看到结果再行动的人往往无法看到结果。耍小聪明的人会因为结果不明朗,担心付出没有回报,所以不愿行动,以致永远停留在原地 - -> 这个世界是有认知层次的。处在下一个认知层次的人往往看不到上一个认知层次的风景,因而只能用狭隘的视角来判断: - -> 很多人总是希望先找到自己的人生目标再行动,事实上,如果不行动,我们可能永远也找不到自己的人生目标,毕竟依靠低维度的认知和经历,我们很难看清自己真正想要什么。只有先依据前人的假设走到更高的层次,人生目标才可能慢慢浮现。 - -> 现实结果才是最好的“评判师” - -> 如果你觉得别人讲的道理有理有据,而自己暂时无法反驳,碰巧自己又非常想做这件事,那就相信他们说的是对的,然后笃定地行动 - -> 同样的道理摆在面前,有的人觉得那是鸡汤,没什么用,而有的人却觉得那是干货,好用得不得了。如果你能够持续行动,我相信,这个世界一定会特别偏爱你。 - -> 认知,其实是一种技能 - -> 学习任何一门技能,本质上都是大脑中的神经细胞在建立连接。 - -> 不发生真正改变的学习都是无效的学习。 - -> 对成长来讲,道理都是“空头支票”,改变才是“真金白银”。 - -> 我们经历的一切都是这个星球上前所未有的。 - -> 稀缺心态,让人变笨 - -> 在一定的前提下,贫穷确实会使人变笨,这不是因为贫穷让人能力不足,而是因为贫穷造成的稀缺俘获了人的注意力,进而降低了人的心智带宽。 - -> 任何能制造压力的事件都会挤占我们的心智带宽, - -> 只要我们的注意力被某一个巨大的事物吸引,我们就有可能进入稀缺状态,进而降低心智带宽,做出不明智的行为。 - -> 当一个人同时面临很多任务的时候,他的心智带宽就会降低,反而没有了行动力和自控力。 - -> 脑子里存在大量任务和念头的时候,往往是我们行动力最弱的时候。 - -> 我脑袋里一团乱麻的时候,就会坐下来,拿出笔和纸,把心中的念头全部列出来。无论是后台隐藏的,还是前台运行的,只要把它们清晰地列出来并逐一审视,自己立马就会神清气爽,行动力十足。 - -> 真正的行动力高手不是有能耐在同一时间做很多事的人,而是会想办法避免同时做很多事的人。 - -> 第四帖,保持情绪觉知,谨慎决定。 - -> 不要在最兴奋的时候做决定,也不要在最愤怒的时候做决定,尤其是重大决定。大喜大悲的时候,我们的心智带宽往往很窄,判断力也很弱。 - -> 一个心智带宽富足的人,也会是一个心平气和的人。 - -> 如果你的人生有如此好运,一切都很富足,不妨想办法给自己设限,适当制造稀缺,以成就自己。 - -> 事实上,在面对各种困境的时候,多角度看问题的能力往往是考验解决问题能力的关键,它不仅能帮助人们获取智慧、成就事业,还能帮助人们在生活中拓展格局、化解烦恼。只是很多人意识不到这一点,习惯用原始的单一视角对待所有问题。 - -> 世界是多维的,而我们只有一双眼睛 - -> 不难推断,像这辆摩托车一样,世界上任何一个人、任何一件物、任何一件事都是多维立体的。 - -> 如果不能强烈地意识到这一点,我们就很容易以偏概全地对待这个世界,然后产生各种偏误。 - -> 本书和其他所有书籍一样,也存在偏见和不完整性。我在本书中阐述的内容可能只是系统思考领域的九牛一毛,如果你有兴趣去探索,你会发现一个更加广阔的世界,而远不止本书所展现的这个小世界。” - -> 向下兼容 - -> 在“相机”这件事情上,我们一定要保持觉知,要清醒地意识到自己的视角偏误,时刻做好向上升级、向下兼容的准备。拥有这种心态,不仅我们自己能越来越完善,还能与其他人都合得来。 - -> 只是有的人面对再好的事情时都盯着一点瑕疵不放,而有的人却能从任何一件糟糕的事情中找到闪光点并放大,忽视其他不足之处。 - -> 大师修炼之路 - -> 三是要开放。更准确地说是保持客观、不臆断。很多人情绪不好,是因为他们把自己做的假设当成了事实,在不确定对方真实想法的情况下,直接把情绪发泄了出来。 - -> 第一步,忘我地聆听对方的想法。过程中没有判断、没有辩论、没有对错,把自己完全置身在对方的位置,以对方的眼睛来看世界;第二步,从“我”的角度来分享,过程中只说自己的客观感受,而不指责对方或告诉对方该怎么做。 - -> 如果一个人在不明就里的情况下把负面情绪发泄出来,就会把其他人也带入单一视角,要么被压制,处于恐惧中;要么反抗,双方都受伤。 - -> 不要让事情本身束缚了你的情绪和注意力。 - -> 人类有三种天生的内在需求:关系需求、能力需求和自主需求 - -> 困难和压力总能把人的情绪和注意力抓得死死的,让你很难看到其他角度。 - -> 我并不是在做这件事,我只是在做另外一件事。 - -> 事情本身并不重要,我们只是在通过它获取另外一种乐趣,顺便把这件事给做了。在心理学上,这个方法叫作“动机转移”。 - -> 而真正希望通过写作建立影响力的人是不会完全被“稿酬”“流量”等外部动机束缚的,他们往往是为自己的成长而写、为众人的需求而写、为长远的价值而写、为创造一个属于自己的世界而写。即使没有鲜花和掌声,他们也会坚持输出和成长,收获的反馈和奖励都只是意外和惊喜,不是必然和期待。这样的心态能让他们的笔尖持续释放力量,最终收获梦想,因为选择权始终在自己手上。 - -> 为自己而做,通常是为了应对外部的压力和要求,为玩而做,则是为了应对重复、枯燥的事情。 - -> 怕什么真理无穷,进一寸有进一寸的欢喜。 - -> 一、规划。利用10分钟左右的时间,罗列全天的工作,对它们进行排序,这样可以让自己保持头脑清晰,对全天的时间产生一种掌控感,保证自己的工作不会走弯路。 - -> 清晰的时间安排、强健的体魄、良好的精神状态、不受干扰的锻炼氛围、专注的学习环境、从容的工作心态、持续的个人成长等。 - -> 六、提前准备。除了晚上提前准备好衣物,更重要的是要提前想好起床之后具体要做什么,比如第二天早上要是下雨了(不能外出跑步)应该怎么调整事项,如果晚醒了半个小时又该安排哪些学习内容……总之,要针对各种可能出现的情况做好预案。当脑中有具体清晰的目标、规划和步骤时,第二天起床才不会犹豫,否则很容易临时改变主意再睡一会儿。情绪脑追求舒适的意愿是很强烈的,但如果理智脑提前和它沟通好,行动的阻力就会小很多。 - -> 成功人士一旦发现别人的好习惯,就会立刻将这个习惯变成自己的。 - -> 能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要的习惯。 - -> 闭眼静坐,专注于自己的呼吸,每天持续15分钟以上……你会感受到它的效果。 - -> 人做决定时,分两个层次。第一个是“情绪决定”,比如看到人家健身、摄影、画画时,自己的肾上腺素开始飙升,马上表示自己也想做;第二个是“理智决定”,理智决定同样表示想要一样东西,但表示人必定已经想好了为什么要做、怎样去做以及可能遇到的困难等问题。 - -> 那么多书却没有任何改变,甚至脑子更乱了。 - -> 想要快速成为一个行业的高手,最好的方法就是和行业专家交流,直接向他们请教 - -> 读书就是用最低廉的成本获取最高级的成长策略, - -> 脚步不能丈量的地方,文字可以;眼睛无法看到的地方,文字可以, - -> 几乎所有的书籍都是智者看待事物、做选择、决策的过程。 - -> 在现代社会,人与人之间的根本差异是认知能力上的差异,而认知能力极度依赖思考能力,可以说,思考能力是我们立足现代社会的根本竞争力。所以,目光长远的人都会主动、刻意地磨炼自己,尽力提高每天的思考密度。 - -> 一、读书要先学会选书。 - -> 选书比读书本身更重要。书籍是精神食粮,我们“吃进”的东西会在我们身上表现出来,如果不分好坏见书就读,可能会“读出一身病”,这样读书还不如不读。所以选书 - -> 二、阅读是为了改变。很多人以为一本书只要读完,读书的过程就结束了。事实上,阅读只是整个过程的开始,阅读之后的思考、思考之后的实践比阅读本身更加重要(这里主要指非虚构类书籍)。很多人的阅读仅停留在表面,读的时候觉得这里好有道理、那里好有道理,读完之后就不闻不问了,然后迅速转移到下一本书中,这种满足于录入的阅读造成的一个直接后果便是,一段时间之后再去翻这本书就好像之前没有看过一样,所有的痕迹都烟消云散了。真正读好一本书,往往需要花费数倍于阅读的时间去思考和实践,并输出自己的东西——可能是一篇文章,也可能是养成一个习惯——这个过程比阅读本身要费力得多。 - -> 所谓费曼技巧就是通过自己的语言,用最简单的话把一件事情讲清楚,最好让外行人也能听懂。 - -> 先用合适的故事引起对方“感性小人”的兴趣和注意,然后把想要表达的道理通过“感性小人”转达给“理性小人” - -> 若是你把写作当成是与一位老朋友聊天 - -> 说来说去,能用简单的语言就不要用复杂的,这就是费曼技巧的核心之一 - -> 以一种事物认知另一种事物,恰恰是学习的本质!因为人类只能通过已知事物来解释未知事物,我们很难凭空去理解一个自己从未见过的东西。而类比,正是连接未知事物与已知事物的桥梁。 - -> 用自己的语言重新表达就是在调动自己的千军万马。 - -> 所以,一个人想要真正成长,一定要学会写作,因为“只读不写”的学习是不完整的,是低效的。而写作时如果不学会用自己的语言转述,则是无用的。 - -> 时常运动的人,体内生态系统犹如一汪清泉,而久坐不动的人,体内生态系统则更像是一潭死水。 - -> 这表明,一个长期缺乏运动的人可能会变“笨”。 - -> 运动能够使大脑长出更多的新的神经元,这意味着运动可以在物理上让人变得更“聪明”。 - -> 好的模式是“运动+学习” - -> 所以运动不是关键,运动之后的活动安排及环境刺激才是关键。有效的模式是这样的:在运动后的1~2小时内进行高强度、高难度的脑力活动, - -> 每天只需花一点点时间,对当天最触动自己的事情或感悟进行复盘 - -> 而复盘的方式也极为简单,通常只需3点:①描述经过——以便日后回顾时能想起当时的场景;②分析原因——多问几个为什么,直到有深度的启发;③改进措施——尽可能提炼出一个认知点或行动点。 - -> 无论何时,都要把对方的情绪和意见分开对待,这样,即使在最糟糕的事情中也能学到有用的东西。 - -> 如果你去练习反思,也必然会关注身体、情绪和思维三个层面,进而不断优化和改进自己。当然也会产生很多灵感、顿悟和创意,只要你去实践,就会有很多发现。 - -> 所以,当头脑中有什么想法或念头冒出来的时候,一定要及时记下来,哪怕是记一两个关键词也行,回头再整理打磨,把这个认知放大,就相当于节省了一段生命。 - -> 越是好的反思,着眼点往往越细微 - -> 三是它可以让我们正视痛苦。 - -> 痛苦哪里是什么坏事,那简直是上天给我们的成长信号与提示 - -> 一是不要被形式所缚。 - -> 谨记:反思的最终目的是改变,而不是形式的完美 - -> 二是尽量提炼认知点或行动点。 - -> 三是列行动清单。 - -> 四是对自己极度坦诚。 - -> 五是要多阅读。 - -> 六是选择合适的记录载体。 - -> 觉知,自古以来都是精英的自我修炼方式。 - -> 如果你想要的东西还不存在,那就亲自动手将它创造出来。 - -> 一个人若是学会了用知识和智慧驱动理性和感性这两种力量,就可以获得认知觉醒。 - -> 首先,我要感谢时代和命运,如果我早生、晚生几年,或人生轨迹稍有差池,可能都无法达成此事,我知道一个人无论获得什么样的成绩,都不能忽略时代、运气和环境这样的大背景,只看到自身的努力和付出,是狭隘和不客观的;其次,我要感谢我的爱人,她为我分担了太多,如果没有她的支持,我肯定无法完成此书;再次,感谢寇佳颖的发现、感谢陈锐的引荐、感谢陈素然编辑的慧眼,感谢人民邮电出版社的厚爱,是你们的热情让这本书得以面世;最后,我要特别感谢卫蓝、王世民、师北宸、一稼、易仁永澄几位老师对我这位不知名作者的提携,感谢你们对《认知觉醒》的认可,让它有机会借助你们的力量去帮助更多的人;当然,最需要感谢的人是你们——我所有的读者,你们最终的触动、改变和反馈才是我最大的、真正的收获。 - -## 笔记 - - -> 控制学习和工作内容的难度也是保证专注的重要方式,因为太容易的内容会让人因无聊而走神,太困难的内容会让人因畏惧而逃避 - -💭 我比较喜欢攻击困难的事情,它会使我沉浸在里面 - -> 大脑“解释系统”的逻辑,虽然很荒谬,但强大的天性会迫使理性这样解释,而有的人还真接受了,于是有人去网上购买刷步神器,坐在家中就可以让自己运动步数名列前茅;有人早上5点闹钟一响就在早起群里打个卡,然后倒头继续睡;有人翻开书,拍张照,然后将照片发到朋友圈,以示自己今天读过书了…… - -💭 我们会自己骗自己,但是要学会机智的骗自己。 - -> 所有痛苦都是上天给我们的成长提示。无论是身体不适、情绪低落,还是学业落后、事业受挫,有痛苦出现,说明哪里出了问题,这不就是在告诉我们应该努力的方向吗? - -💭 痛苦就是痛苦,并不是痛苦拯救了我们,对痛苦的思考才是最重要的,但阅读也可以做到思考,所以切勿美化痛苦。 - -> 所谓认知闭合需求,就是指当人们面对一个模糊的问题时,就有给问题找出一个明确的答案的欲望。比如古时候人们不知道为什么会下雨,于是下雨这个问题就没有闭合,会让人很难受,所以古人就用雷公、电母、龙王解释下雨的成因,这些说法虽然没什么根据,但满足了认知闭合需求。将这一概念扩展到行为上也是一样的:一件事若迟迟没有完成,心里就总是记挂,期盼着早点结束;此事一旦完成,做这件事的动机就会立即趋向于零。 - -💭 好奇自己为什么要给自己一个看起来合理的答案? - -> 对大多数人来说,打卡只是一场充满激情的欢娱盛宴,无须多日,他们就会出现在另一轮打卡活动中,或是无疾而终了。 - -💭 为了打卡而打卡? - -## 书评 - -《认知觉醒》这本书令我印象最深刻的一点是关于大脑的叙述:人的大脑是由本能脑、情绪脑和理智脑三部分组成的,其各有优缺。 - -- 本能脑:饿了吃饭,困了就睡;这就是本能脑,活下去的本能。 -- 情绪脑:高兴、悲伤……七情六欲是控制行动能力的部分。 -- 理智脑:最聪明的大脑,善于权衡且富有远见。 - -这个观点为自我混沌的人创造了秩序,使其对自己拥有更加清晰的认知。 - -特别是情绪脑,我曾深有体会,想想自己以前的处事逻辑都上火哈哈。自己完全就是情绪化处理,还自认为拥有所有的理智脑。但情绪脑是具有多面性的,高兴的时候人就会精气神十足,悲伤的时候人就会懒得动弹。这就导致很多时候我只能跟着情绪走,上头的时候做出冲动选择,高兴的时候又容易飘着,也就很难理解情绪稳定的重要性。 - -> 不要在情绪异常的时候做选择 - -也许你会想我们可以通过理智脑去控制情绪,但是很难;作者也给了一个很完美的解释:**运行速度不一样**。本能脑是完全由动物本能驱使,就跟刚出生的小宝宝一样,饿了就哭、困了就睡。情绪脑也是最为强大的,它几乎控制影响着你。理智脑是最聪明的也是能力最弱的,最没有话语权的;虽然你知道,但是你不一定能控制。所以单纯凭理智脑很难抗衡情绪和本能,这是逆天性的,靠毅力很难做到;**情绪和本能要靠疏,不能堵。** - -在进一步的认识到这三位老大哥的时候,更要学会跳出来,你并不是三者中的任意一个。一定要去以第三方的视角观察自己,让这仨好好的。情绪不好没必要非得装高兴,想哭就哭,想闹就闹;但是理智脑也搭把手,思考一下这事值不值得你去哭闹,本能脑也是,不高兴了就吃点好吃的哄哄老二。 - -情绪不好的时候就是这么简单,要学会跳出来去观察协调好三位兄弟。本能脑最好哄,饿了就吃好吃的;情绪脑最不好哄,大多时候情绪控制着我们。但是理智脑也会有情绪的,那就是骄傲、自大、焦虑、分心、自我 pua 等等。 - -提起理智脑说来也怪,它最会玩,既能自己吓自己,还能自己哄自己。本来明天后天大后天的事,就给你整得下一秒就要来了,给你搞得睡也睡不着。可是有时候明明真的不行,它又哄你:你最牛逼,老铁666。 - -理智脑就是一个矛盾体,即有矛又有盾。要我说来它也好办,就如你此时此刻在听我说,那么你应该就没有胡思乱想,更没有焦虑和emo吧?所以提升你的专注力。**如果需要矛就狠狠地往一个点上刺,需要盾打反击就发散思维准备好一切出现的可能。** - -文中有提到一个弟子问老师傅,得道前后的区别在哪?得道前,砍柴时惦记着挑水,挑水时惦记着做饭;得道后,砍柴即砍柴,担水即担水,做饭即做饭。这不就是嘛,问题需要拿矛刺它,就不要考虑别的,往死里捅它就完事了。需要防御就老老实实的缩着,想好一切的万全之策。 - -那么我们为啥要明白这些,对我来说有啥用?明白这些让你进步啊,让你**更清晰的了解、认识自我**,毕竟每天浑浑噩噩的简直枉为人。 - -后续当我们拿矛捅死 1 级小怪 1000 次后,闭着眼我们也会捅死它。这时候理智脑就又会飘来飘去,意淫我能干死终极 boss 飘飘然起来,你真去了你就是个 249+1 了。毕竟让你干 99 级 boss,boss 直接一口口水干死,这样岂不是太泯灭你的自信心了?**因为你习惯了当下,所以你需要登下一个台阶了,而不是上天**。 - -> 突破舒适圈,在合适的困难里进步。 - -当我们修炼到一定程度的时候,有些小怪开始出防御了,不行啊,打不过了。咋办?研究它!我得复盘自己,目前有啥缺点?看来是差一件趁手的法器,明天上城里买件。直到第二天,从城里归来的你,费了吹灰之力干死了这只小怪,你又挺近了一步。 - -> 每日复盘、量化,针对遇到的具体问题提出具体解决方案。 - -随着你小有名气,各种不一的意见传到你的耳中。 - -- 这穿成这样还想当英雄,捡垃圾去吧。 -- 成大事者不拘小节要有格局? -- 不知道成婚了没有,没有家的男人都是大猪蹄子。 -- 少爷 ~ 来玩嘛! - -这时候你可能就会迷茫了,忍受不了寂寞了。你究竟是该参考意见呢还是参考意见呢? - -> follow your heart ~ 人世间没有标准答案、去做一个不那么错的选择。 - -后来无意了解到天外有天、小西门镇外还有个大西门镇。有个人说,他有一本秘籍只卖 9.9 祝你一臂之力成为天下第一。你想都没有想,暴揍一顿黄牛。具体为什么认为他是黄牛,单纯的就是凭感觉! - -> 顶级的成长就是”凭感觉“,just feel ! - -虽然黄牛不可信,但是大西门镇还得去啊。实力满足不了野心,只能静下心来学习了。提升专注力,培养核心能力! - -> 提振专注力,深度沉浸、深度学习! - -不知道过了多久,一味的努力并没有给你带来明显的成长。你开始焦虑起来,这去大西门镇得多久?你开始尝试拜师,正所谓师傅领进门,修行在个人。在师傅的教导下,你成长很快。但是有天师傅的守则,也约束了你进步。你决心打破规则,继续前行。 - -> 切勿迷恋规则、迷恋方法论;阻止你前行、成长的都要打破踩在脚下! - -终于功夫不负有心人,有天你来到了大西门镇。看到了另一个世界的繁华,你开始继续努力争取有朝一日站在最高峰。可是有天你病了,病的很严重,功力更是肉眼可见的退步。先生告诫你要休息了,否则就会功夫全废。 - -> 你没成功,可能是因为太刻苦了,死在了成功面前。 - -大病初愈加以静养有了更充沛的精力,也开始了解大西门镇的秩序,提升自己的认知,了解到新事物更是尝试去实践。也学会了享受人生的美好时光,多方面看待事物看待人生。 - -> 知行合一、多角度看待问题;更要学会享受人生,不要太局限了。 - -你慢慢的融入了大西门镇,拥有了自己的阅历和认知;老爹的智慧宝典也不管用了,师傅的规则更是不值一提了。最后自成一派,创造着属于自己的一片天! - -> 人生的成长之道:早起、冥想、阅读、写作、运动。 - -共同改变、一起前行! - - -## 点评 - diff --git a/life/阅读/心理/认知驱动:做成一件对他人很有用的事.md b/life/阅读/心理/认知驱动:做成一件对他人很有用的事.md deleted file mode 100644 index 9ac1fb05..00000000 --- a/life/阅读/心理/认知驱动:做成一件对他人很有用的事.md +++ /dev/null @@ -1,349 +0,0 @@ ---- -title: 认知驱动:做成一件对他人很有用的事 -description: 做成一件有价值的事,成为一个有价值的人; 成长的根本是做成事情、创造价值。 - 做到,是更高等级的成长。一个人的成长也是通过主动做成一件对他人很有用的事来实现的。但在现实生活中,很多人虽然内心强烈希望变好,行动也非常努力,却始终无法做成事情,这背后的原因通常是 -keywords: - - 认知驱动:做成一件对他人很有用的事 - - 心理 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《认知驱动:做成一件对他人很有用的事》 -- **作者**: 周岭 -- **分类**: 心理-认知与行为 -- **ISBN**:9787115569455 -- **出版社**:人民邮电出版社 - -## 概述 - -做成一件有价值的事,成为一个有价值的人; 成长的根本是做成事情、创造价值。 做到,是更高等级的成长。一个人的成长也是通过主动做成一件对他人很有用的事来实现的。但在现实生活中,很多人虽然内心强烈希望变好,行动也非常努力,却始终无法做成事情,这背后的原因通常是缺少价值意识、输出意识、创造意识、作品意识、利他意识…… 《认知驱动:做成一件对他人很有用的事》将通过“做成一件事”的心法和技法两部分内容,和大家一起探索如何通过创造个人价值获取人生的成功、幸福和意义。 从“习惯养成”到“技能培养”,从“对内输入”到“对外输出”,从成为“更好的人”到成为“更有价值的人”,这些刻意的转变会让我们走出焦虑的怪圈。 单纯依靠意志力的努力往往是盲目的,所以人们会反反复复地起念,又反反复复地失败。一个人只有了解做成一件事的来龙去脉、看清事情本质后,才能走出反复尝试却劳而无功的困境。 学会用认知来驱动自己,我们才能更好地到达成长的彼岸——做成一件对他人很有用的事,成为一个有价值的人。 - -## 划线 - - -> [插图] - -> [插图] - -> 内向成长,即围绕自身展开的成长活动,比如早起、跑步、阅读等。 - -> 外向成长,即围绕外界展开的成长活动,比如写作、画画、编程等。 - -> 享受努力奋斗的状态,却少有产出作品的意识。 - -> 重技能辅习惯,重输出辅输入。 - -> 人生的差异往往源于人们看待生活的不同视角。当你掌握了“复制”和“转换”这两个底层概念时,或许会看到一个不同的世界。 - -> “转换”和“复制”的最大区别在于边际成本不同——“转换”的边际成本越来越高,“复制”的边际成本越来越低。 - -> 并非所有的“复制”类活动都具有无限可能,因为“复制”只是一种渠道,获得无限可能的关键依旧在于价值。 - -> 要想获得无限可能,“复制”和“价值”缺一不可,且价值越高,可能性越大。如果你对自己的人生有追求,那就应该激励自己去创造“可复制的价值”。 - -> 更重要的是,每次提笔时我都要问自己这样一个问题:这篇文章在三年、五年甚至十年后再看还有价值吗?如果没有,那就没必要写了。仅这一问,就能消除一切浮躁的动机。 - -> 产对别人有用的东西永远是写作的指南针,其他事情亦是如此,价值交换规律放在哪里都会起作用。 - -> 永远走价值积累之路 - -> 社会在巨变,但价值交换规律不变。 - -> 而本节的意义就是想告诉你,无论你选择写作还是其他,“价值产出”之路永远适合每一个人,无论何时都有效。 - -> 而一个人要是能放弃自己的小九九,能发自内心地为社会发展、为人民福祉去做事,他就会真的充满力量,完成难以达成的任务。 - -> 我们是为了实现人类理想而努力奋斗。 - -> 利他的途径是创造价值 - -> 是误把牺牲和讨好当成利他,以致得到的反馈和体验极其不好。最典型的表现就是无原则地对他人好或是有目的地付出 - -> 情侣在关爱对方的同时,也要不断提升自己,用自身的优秀去带动对方同步成长,这才是健康的爱。 - -> 同样的话从你和牛人的嘴里说出来,效果就是不一样,这显然不取决于对或不对,而取决于说话的那个人是谁! - -> 更好的关系不是付出,而是吸引 - -> 擅打组合牌的人往往会在条件允许的情况下,尽可能先把目光聚焦到自己身上,他们会维护自己的形象,增加自己的学识,提升自己的智慧,稳定自己的情绪,丰富自己的爱好,结交理想的朋友,追逐自己的梦想……这样就可以始终向别人传达自己的魅力和自信,让喜欢的人主动靠近。 - -> 这背后的原因大同小异:从短期看,是对方的素质和修养不够高;从长期看,是自身的能力和表现还不够好。因为所有的社交都是一面镜子,外界如何给你反馈,根源在于自身长期的综合表现。 - -> 在和别人结婚之前,不妨先和自己“结一次婚”。不管你是男是女、已婚未婚,都可以给自己做一次这样的假设:你愿意和自己这样的人共度一生吗?无论贫穷、疾病也不离不弃?(事实上,和自己结婚,也只能不离不弃。)你喜欢自己的外在表现吗?喜欢自己的言行举止吗?喜欢自己的能力和上进心吗?喜欢自己对未来的追求吗?如果你对自己尚不满意,就不要指望别人会尊敬和喜欢你了。 - -> 想要更好,请停止追逐 - -> 这就是所谓的“被动社交”——通过产出独一无二的、具有长久价值的作品或产品来与这个世界保持连接。 - -> 内向者更有创造优势 - -> 因为内向成长者的生理特点决定了他们更擅长与事物而非与人物打交道。 - -> 内向者更倾向于使用理智脑与外界互动,而外向者更倾向于用本能脑和情绪脑与外界互动。 - -> 越是在传播手段发达的社会里,越要坚守价值。因为这个世界已经不缺乏传播途径了,但价值依旧稀缺! - -> 所谓“自我意识”,就是从自己的身份定位开始思考问题,即“我是一个什么样的人,所以我应该去做什么样的事”。在这个视角之下,所有的选择、方法、努力都会主动围绕自我身份的建设而自动转换为合适的状态。这样的人,可以说是真正的觉醒者了。 - -> 现在,我们可以脱离这一模型,记住“环境、努力、方法、选择、身份、意义”这几个词就行了 - -> 对个体来说,最重要的事情莫过于找到人生目标和意义,想清楚自己应该成为什么样的人。 - -> 身份:改变自己的终极力量 - -> 我经常对自己说一句话:你是个干大事的人。 - -> 若你还没富,请先让自己像一个富人。用富人的思考方式、富人心态、富人思维武装自己,改变自己的气质,让自己看起来更具“富人气”…… - -> 这种行为触及了我们人类成长的终极力量——心理建设。 - -> 即人的行为改变可分为身份、过程、结果三个层次,不同层次的努力会带来不同的结果 - -> 因此,那些能明确自己身份的人才是真正的高手,他们肯花时间进行心理建设,能从上而下或从里到外地改变自己。 - -> 你的世界是你所关注事物的产物。”“我们的大脑是依据我们关注的事物来构建世界观的。”我们选择去关注哪些事物、忽略哪些事物,会对我们的生活质量起到关键的作用。 - -> 做最好的准备,做最坏的打算 - -> 所以,坚定信念和降低期待并不矛盾,因为坚定信念就是做最好的准备,而降低期待就是做最坏的打算。它们的目的是一致的:促使自己更好地行动,并最终产生好的结果(见图2-6)。[插图]图2-6 做最好的准备,做最坏的打算 - -> 成长注定是一个将内在身份不断揉碎并重塑的动态过程。 - -> 语言是幸福人生的开端 - -> 语言和思维之间其实是双向车道,而非单向车道。如果你知道自己还可以在思维和语言之间“逆向行驶”,你的生活就会多出很多主动的选择。 - -> 穷爸爸总是习惯说:“我可付不起!”而富爸爸则禁止我们说这样的话,他坚持让我们说:“我怎样才付得起?” - -> 如果你再细心观察,就会发现像肯德基、麦当劳这样的门店,进门时常常需要拉开门而不是推开门。因为拉门时手臂收缩,这个动作可以让我们进入一种“简单满足”的心理状态。而柜台上方展示食物的电子屏幕通常是从上往下而不是从左往右滚动,因为当人们的目光跟随屏幕从上到下移动时,像在点头称是。这种隐蔽的设计会对我们形成心理暗示,但我们很难察觉。 - -> 美好人生,从好好说话开始 - -> ·无论遇到什么事情,说积极的话,不说消极的话;·无论遇到什么人物,说和善的话,不说刻薄的话;·无论遇到什么问题,说开放的话,不说绝对的话…… - -> 乐观构想、悲观计划、乐观实行 - -> 理性思维的局限正在于此——它只相信自己所见所闻的一切事情,对于已知之外的未知,它会主动怀疑并排斥。 - -> ‘乐观构想、悲观计划、乐观实行’ - -> 这与《人生算法》的作者喻颖正说的“人生最好的模式是长期乐观、短期悲观、当下愉悦”如出一辙。 - -> 即使勉强起步了,却又在过程中过于乐观、急于求成,希望很快看到成果,结果频遭打击,以致在接下来的具体行动中萎靡不振、痛苦煎熬,没过多久就放弃了。归结起来正好是“长期悲观、短期乐观、当下痛苦”的模式。细细想来,这或许正是很多人无法成事的原因之一吧。 - -> 理性思维是把双刃剑 - -> 人生还需要浪漫、无畏和勇气 - -> 有时候,我们无法达成目标不是因为我们不够理性,而是因为我们不够感性。 - -> 动物对威胁及讨厌事物的反应,要比对机会及喜好事物的反应更快、更强烈、更持久。换句话说,生命对坏事的反应要强于对好事的反应。这种“负面偏好” - -> “负面偏好”会使我们更多地注意负面信息和事件,不自觉地忽略大多数正面、美好的事情。 - -> 要想对冲一件坏事的影响,我们往往需要制造多件同等规模的好事。比如在夫妻关系中,一句批评的话所造成的伤害起码需要5个善意的行为才能弥补 - -> 善用不同的视角看问题——既然基因和本能让我们不自觉地关注坏事,那我们不妨反其道而行之,试着多看看好事,毕竟我们生活在现代社会,生存不再是最重要的主题,生存得更好才是。 - -> 但它是对冲人类“负面偏好”的利器,因为它可以帮助我们主动发现自己和生活中的亮点,弥补我们大脑天生的缺陷。 - -> 一个智慧的人不会等到自己真正失去了才后悔当初没有珍惜,他们在拥有的时候就会主动平衡注意力,更多地关注自己已经拥有的快乐和幸福。 - -> 幸福的人各有各的幸福,而不幸的人都是相似的,因为他们都是“身在水中却看不到水的鱼”。 - -> “三十而立”,意即到了三十岁才懂得要立志做一件事情。 - -> 四十而不惑”,意即到了四十岁才不犹豫,才不疑惑。 - -> 五十而知天命”,意即五十岁也没达到目标,才知道这是天意啊! - -> 六十而耳顺”,意即到了六十岁,什么话听起来都心情顺畅,不生气,都无所谓。 - -> 七十而从心所欲不逾矩”,意即到了这个岁数才真正得到了自由 - -> 我们来自非黑即白的世界 - -> 童话有确定而美好的结局,试题有确定而标准的答案,而父母也经常这样教育孩子:“你管好自己的学习就行了,其他的事不用你操心。” - -> 我们终究要走向复杂的世界 - -> 成人可以忽略复杂和忍受混乱,甚至积极地改变自己,去发掘不利中的有利,比如忽略对方的情绪化但学习对方健谈的品质,或是尝试创造契机,营造所有人都和谐、亲密的氛围。这样一来,讨厌的事情不仅消耗不了你,你还能从中得到成长和滋养,或者说你根本就不会对这些事情感到厌烦——这才是高级的逍遥自在。 - -> 在非黑即白的世界里,人们只能容纳自己喜欢的事物,只能接受自己喜欢的秩序。 - -> 如果只输入不输出,就会堵塞;如果只输出不输入,就会断流。 - -> 好的生活是始终游走在舒适区边缘 - -> 能力圈法则告诉我们:一个人成长进步最快的区域在自己能力舒适区的边缘,太困难或太舒适的区域都容易让我们止步不前。 - -> 熵是表示无序程度的量度时,就能理解了:因为正值大于负值,所以正熵表示更无序,负熵表示更有序;而熵增和熵减自然是指趋向无序和趋向有序的过程。 - -> 人无远虑,必有近忧。这句话反过来说也是成立的:人无近忧,必有远虑。 - -> 我的一个减压秘诀就是尽量不要同时设定很多目标,主动降低期待,不急于看到成果。 - -> 因为真正的目标和动力来自我们对一件事情清晰而长远的认知,而非某个特殊的时间点 - -> 大多数人无法成功戒烟的主要原因是不清楚烟瘾形成的真正机制,只好依靠意志力戒烟。 - -> 事实上,真正开启我主动成长机制的契机是我从《暗时间》这本书中得知了人类大脑原来是由本能脑、情绪脑和理智脑构成的。这个三重大脑理论,让我一下子看到了人们成长过程中面临的几乎所有的困惑,诸如缺乏耐心、急于求成、无法专注、沉迷娱乐、低效学习等,这些问题都能从中得到解释。 - -> 长期乐观、短期悲观、当下愉悦 - -> 他们不知道做成一件事的方法论,只能凭感觉行事,任由欲望驱动自己 - -> 看清机制,防止盲目努力;寻找意义,注入长久动力;感受好处,体验当下愉悦。 - -> 第二节 写下来:我们都低估了“写下来”的力量 - -> 在自己无法消化情绪的时候,她就用笔一条条写下自己真实的想法,写下自己到底在难过什么。 - -> 运用书写来表达自己情绪的人更加健康。 - -> 假设,是一切进步的开始 - -> 但困难之时正是进步之机。如果此时有人敢直视模糊、敢于对不确定性做出脑力范围内最大程度的“假设”,那他就能更大概率地突出重围,获取更多人生优势。 - -> 只要书中有一个点触动了自己,并让自己的生活发生了真实的改变,这次阅读就是有效的,这本书就是超值的。 - -> 假设是一切进步的开始,现实结果是最好的评判师。 - -> 命运一定钟爱那些愿意慢慢变好的人 - -> 不过可以肯定的是,几年后他一定会像我们一样走得既快又好,可以轻松准确地控制自己的身体。 - -> 我们总想同时做很多事,又想马上看到结果,还特别在意他人的评价,以致看不到进步就会烦躁,遇到退步就自我否定。如此说来,现在的我们要想更好地改变自己,还得回头向幼时的自己学习呢。 - -> 我们长大后的多数烦恼都来自对自己和他人的过高期待。 - -> 我回想起技能学习的本质就是通过大量的练习使大脑中相关神经元产生连接并形成强关联的过程。这个过程在初期必然是非常缓慢的,因为它们之前还没有形成顺畅的通路。但只要持续练习,这些连接就会越来越多、越来越强,最终形成一张高效的网络,使自己在某天开始加速并突破。 - -> 所谓的耐心或好脾气很多时候就是适当降低期待 - -> 你要一开始就把自己想成是一个人,没有父母、没有子女、没有配偶、没有朋友、没有任何人的帮助,这样,后面的一切都会让你觉得无限惊喜。 - -> 人生的幸福不是寻求快乐,而是没有痛苦。 - -> 我认为检验一流心理的标准也是如此——看一个人能不能在心中同时容纳两种相反的期待,还能正常行事。 - -> 换句话说,就是将剧中的情景对话强化为“大脑的肌肉记忆”,直到在类似的场景下不用思考就能脱口说出极为准确和地道的外语。 - -> 因为真正的对手不怕你会一万招,就怕你把一招练一万次。 - -> 学习无非两种:一种是认知上的学习,另一种是技能上的学习。 - -> 德国哲学家叔本华说过这样的至理名言:“人类幸福的两个死敌就是痛苦和无聊。当我们成功远离其中一个死敌的时候,也就在同等程度上接近了另一个死敌,反之亦然。所以,我们的生活确实就是在这两者之间或强或弱地摇摆。” - -> B计划是人生幸福的保障所谓B计划,就是我们在主业之外还有另一个人生目标或追求,它可以让我们填充闲暇、排解无聊,甚至创造成就。 - -> 在某个技能(或者说“某个维度”)上死磕,确实是一个策略,但更好的策略是“多维度打造竞争力”。因为在单个维度上,比的是长度;在两个维度上,比的是面积;在三个维度上,比的是体积。所以每次跨界,都是给自己拓展一个新的维度,维度多了,竞争力自然就强了。 - -> 首先,独自潜行可以让我们保持圈外人的独特视角,防止自己的思想或风格被主流同化。 - -> 那就是B计划最好是一个秘密的项目,至少在开始的时候是这样的。 - -> 人生就是在痛苦与无聊之间摇摆”。不过在如今这个世界,我倒是更愿意将其演化为:人活着就是为了对抗无聊。 - -> 所以无论何时,我们都要在本职工作之外培养一个甚至多个全新的技能,去创造一个或多个外界无法剥夺的价值和优势。 - -> 这正是环境赋予一个人的力量,它能让一个人产生变好的念头并愿意去努力,还能让这份努力的效果得到放大。从某种程度上说,环境的力量其实远超个人努力,只是很多人会天然地无视或忽略这一点,认为只要努力就可以成就自己,毕竟努力是看得见的,而环境因素却会因为自己身在其中而很难觉察。 - -> 我们的生活环境决定了我们每天要见哪些人、做哪些事,这些人和事会直接影响我们的思维与言行,因为人类大脑中有镜像神经元,它会让我们无意识地模仿身边的人和事,所以若是周围的人经常做某些事情,我们也会不自觉地学着做。 - -> 因为我们很难在无意识的状态下表现出高于所处环境的言行或追求,我们只会在当前环境中保持最舒适的状态。 - -> 一是信息爆炸了,但知识并没有爆炸。海量的信息不仅增加了我们甄别筛选知识的难度,还让我们随时随地处于即时信息和肤浅信息的包围中。 - -> 二是被称为人体新器官的手机,随时可以把我们的时间撕成碎片。 - -> 只是暂时 - -> 移动到更好的环境中是借力“偷懒”的上上策。 - -> 让孩子置身于那个真实的、优秀的环境之中,这是极为明智的。这会调动孩子的多维度感官,让他们发自内心地产生学习动力,而这种真实环境的激励远比父母每天苦口婆心的劝说要好得多。 - -> 小环境借力,主动掌控 - -> 如果不希望受某些环境的影响,最好的方式就是避免让自己置身其中。 - -> 那些看起来有强大自控能力的人并非真的比常人更自律,而是因为他们会尽量避免置身于充满诱惑的环境中——这才是他们保持自律的真正“秘诀”。 - -> 跳出空间 - -> 跳出时间” - -> 学习的秘密在于同时调动多维度感官 - -> 但是感知不到不代表它们不存在或不重要。事实上,那些我们感知不到的信息可能更重要。就拿那些平时不怎么读书却依然成就很大的人来说,他们虽然很少通过阅读来进行思维活动,但是他们有机会经历很多大事,见到很多高人。在那些经历和环境中,他们能看到高人们如何应对复杂的情景,听到高人们切中要害的言论,感受成就一件事的辛酸和不易…… - -> 所以介入阅读更理想的时机,或许正是一个人既有一定的人生经历,又有一些人生困惑的时候,此时读书往往会以解决问题为目的,知识和阅历能相互融合,意识和潜意识的所有维度也能有效结合,可塑性最强。 - -> 一是“愿望觉醒”,即一个人从不知道要变好到想要变好,从“浑浑噩噩”的状态转而开始对“美好生活”有了强烈的向往。 - -> 二是“方法觉醒”,即一个人从不知道怎么变好到知道怎么变好,其行动力从盲目的毅力支撑升级到科学的认知驱动。 - -> 三是“目标觉醒”,即一个人开始寻找自己的人生目标,并努力去做成一件或多件对自己和他人有用的事,让自己成为一个很有价值的人。 - -> 正如一个人从睁眼到完全清醒不是一瞬间的事,它是一个逐渐实现的过程。所以“目标觉醒”就是我们判断一个人是否真正觉醒的最终依据,同时它也是个体成长的高级阶段,因为做到,是最高等级的成长。 - -> 至少主动做成一件对他人很有用的事。 - -> 在没有外力的要求下,自发地做一件事,并让它成为自己的一部分或形成一定的影响力。 - -> 总之,你想养成习惯,那就让习惯成为自己的一部分;你想培养技能,那就让技能形成一定的影响力。 - -> “我做哪件最重要的事之后会让其他事情变得更简单或者不必要?” - -> 人生更高级的驱动力是主动的喜悦。 - -> 在刚开始进入一个新领域时主动开启“苍蝇模式”,让自己尽情地试错,这样才有机会找到“出口”; - -> 周期·如何保持耐心、不焦虑 - -> 一是它能让人彻底告别焦虑,不再急于求成。 - -> 但是自从我把心理标尺拉长到7年之后,所有的焦虑、浮躁一下子都消失了,我突然觉得时间很充裕,一点都不着急了。 - -> 二是它能让人聚焦目标并拥有真正的成果。 - -> 如果我们真能在每个7年彻底做成一件事,那这一生的成就也将非常璀璨。 - -> 三是它能够让人持续学习,终身成长。 - -> 顶级的生活不是奢华,而是创造 - -> 人类幸福感的本源只有两个:一个是基因的传承,另一个就是影响力。 - -> 我们要想有影响力,就一定要有输出,因为有输出才能被别人看见;然后还要让输出有价值,因为价值足够大,才能被别人强烈需要;而在输出和价值双重标准的驱动下,我们就必然能获取反馈,并借助反馈持续迭代,最终创造出独一无二且对自己和他人有长期价值的原创作品。 - -> 因为一流的生活是觉知,是内修,它可以让我们自身变得更好;而顶级的生活是创造,是外修,它可以让别人过得更好。而生命的意义在于利他,因为只有从他人的正面反馈中,我们才能照见自己。 - -> 努力成为一个对他人很有用、被他人强烈需要的人! - -> 从大范围看,个人努力固然重要,但大环境、大趋势更重要;从小范围看,我们仍然要强调个人努力,因为价值会吸引好运。 - -## 笔记 - - -> 我们的生活环境决定了我们每天要见哪些人、做哪些事,这些人和事会直接影响我们的思维与言行,因为人类大脑中有镜像神经元,它会让我们无意识地模仿身边的人和事,所以若是周围的人经常做某些事情,我们也会不自觉地学着做。 - -💭 人是环境的产物 - -> 但是感知不到不代表它们不存在或不重要。事实上,那些我们感知不到的信息可能更重要。就拿那些平时不怎么读书却依然成就很大的人来说,他们虽然很少通过阅读来进行思维活动,但是他们有机会经历很多大事,见到很多高人。在那些经历和环境中,他们能看到高人们如何应对复杂的情景,听到高人们切中要害的言论,感受成就一件事的辛酸和不易…… - -💭 读万卷书行万里路 - -> 《见识》的作者吴军曾在书中提到:人类幸福感的本源只有两个:一个是基因的传承,另一个就是影响力。 - -💭 归属感,价值感 - -## 书评 - - -## 点评 diff --git a/life/阅读/心理/谈性说爱:写给女性的性心理24讲.md b/life/阅读/心理/谈性说爱:写给女性的性心理24讲.md deleted file mode 100644 index ce6b7353..00000000 --- a/life/阅读/心理/谈性说爱:写给女性的性心理24讲.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: 谈性说爱:写给女性的性心理24讲 -description: 现代社会,女性的社会地位与自我认知都得到了很大提升,但在性的问题上,依然存在很多说不清道不明的羞耻感。性一直都属于禁忌话题,虽然不说或者很少说,但现实生活中,对性的理解与认知会在很大程度上影响女性的亲密关系幸福度,理解或认知不当甚至会造成悲剧。 - 《谈性说爱 -keywords: - - 谈性说爱:写给女性的性心理24讲 - - 心理 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《谈性说爱:写给女性的性心理24讲》 -- **作者**: 甄宏丽 -- **分类**: 心理-认知与行为 -- **ISBN**:9787521743241 -- **出版社**:中信出版集团 - -## 概述 - -现代社会,女性的社会地位与自我认知都得到了很大提升,但在性的问题上,依然存在很多说不清道不明的羞耻感。性一直都属于禁忌话题,虽然不说或者很少说,但现实生活中,对性的理解与认知会在很大程度上影响女性的亲密关系幸福度,理解或认知不当甚至会造成悲剧。 《谈性说爱》一书作者甄宏丽深耕女性性心理治疗与科普领域,深谙中国女性的性困境,书中从揭开女性的身体奥秘开始,讲述了女性性生理和性心理唇齿相依的关系;强调了尊重性本能的重要意义;对性与爱的关系、性与亲密关系等敏感话题展开了详细分析,阐述了全新的观念:性与爱合久必分,分久必合。作者在书的最后指出,懂性、爱性是性福女人的基石,活出性感真我是女性魅力的核心。 对于中国的新女性来说,需要这么一本书来刷新自己在性问题上的认知,补上这堂迟来的性教育课。 - -## 划线 - - -> 把处女膜献给我未来的丈夫。 - -> 处女膜是长在我身上的,是属于我的,我想什么时候拿出来用就用,处女膜绝不是我留着献给男人的礼物”。 - -> 女性太压抑自己的性欲望,不敢放开自己。 - -> “不要性骚扰,要性高潮!” - -> 性爱是两个平等、独立的主体间的双人舞。 - -> 处女膜的概念属于性医学范畴;婚前性行为属于社会学范畴;体会性冲动的兴奋程度属于性生理学范畴;要不要发生婚前性行为属于性心理学和性教育学范畴;坚守处女情结,婚后因为怕疼无法完成性生活,属于性心理治疗学范畴。 - -> 中国女性追求性福已经不再遮遮掩掩,但是她们的性生活满意度很低依然是个不争的事实。 - -> 性道德、性权利、性价值观等核心问题上依然存在严重的男尊女卑观念。 - -> 生理、心理、社会 - -> 生殖器官正常存在,才能让我们拥有性别身份,即是男还是女。 - -> 为什么会有处女膜这个名字?实际上这是男权社会用来管理女人的一种手段。 - -> “处女”这个词,已经不仅仅局限于没有发生过性行为的女性这个概念了。它衍生出的意义是,任何非常值得珍惜的第一次经历。这是非常美好的概念。 - -> 第一,性道德观点压抑女性性能力。 - -> 第二,女性对自己的定位存在偏差。 - -> 第三,很多女性认为只有在爱的基础上才有权利享受性愉悦,也就是所谓的性和爱是不可分割的。 - -> 第四,有的女性觉得自己性魅力不够。 - -> 因此,女性在性爱中长期处于一种被检验的状态,无法自然放松下来,脑子里充满问号:他觉得我的胸够大吗?他觉得我的皮肤白皙吗?我的腿太粗了吧?我的臀部是下垂的,他发现了吧?等等。 - -> 真正男女平等、彼此尊重的和谐社会,对于男性和女性应该是同样的标准,男女的性权利都值得尊重,男女的性行为都不可以乱来,都要有做人的行为底线,都有权利获得性愉悦,都有权利获得性的隐私保护,等等。 - -> 客观地去感受,积极地去接纳。 - -> 吃甜品不仅可以疏解消极情绪,还可以产生积极情绪。 - -> 人类最大的性器官可能被我们忽视了,那就是皮肤。 - -> 我们知道了皮肤是人类最大的性器官,当你想要被拥抱,或者想去触碰对方的时候,是有一种明显的性需求在里面的,不要去否定它。我们要抓住这种信号,让自己更加鲜活起来。 - -> 性与爱是分久必合、合久必分的关系。 - -> 我个人认为,分久必合、合久必分的观点,恰恰体现了性与爱之间的和谐,但性和爱又是完全不同的两个东西。 - -> 青春期时对某个人的爱慕,就像一股清流,让人感到新奇而美妙,这种精神世界的美好已经让人很满足,不需要通过性交实现。 - -> 男性从来都是把性能力放在第一位,这种性能力就是接受刺激就要勃起,对女性就得征服,不能输,要是阳痿那就完了。所以,在男性看来,性能力是高于性道德的。 - -> 只要女性不再自己物化自己,就有可能真正地实现男女平等。 - -> 女性面对自己喜欢的男性,容易活在自己的想象中, - -> 受中国几千年封建文化的影响,女性把自己物化,男性也把女性物化了。 - -> 赤裸裸地坦诚相对,是恋人走进彼此内心世界的唯美途径,是其他任何关系都无法替代的。 - -> 这里的熟女指的是懂得了人间情爱滋味的女人。这种在岁月中成长起来的魅力,实际上是源于懂男人。所谓懂男人,其实很大程度上是懂得男人的需求,懂得他们喜欢什么样的女性魅力。 - -> 现实生活中我们也看到,如果女性有了婚外性行为,大多数丈夫都会选择离婚,而且很多女性也能接受离婚的现实,甚至有可能是女性主动提出离婚。很多人都问过我为什么会这样。其实这一点都不奇怪,跟我们传统性观念中性道德的男女双重标准有关。 - -> 社会约束男性和女性的性道德有双重标准。 - -> 。为什么女性对其他方面的包容度极高,而对婚外性行为零容忍呢?婚后的守贞难道是丈夫们的护身符吗?可以抵过其他所有的婚姻义务?婚姻意味着你们是合理合法的性伴侣、经济收入与债务的共同承担者、孩子的父母,有很多功能,我们不能把性看得这么重。 - -> 丈夫跟妻子谈论性话题,会显得很没面子(应该直接干就行了),妻子跟丈夫谈论性话题,又会很不好意思。 - -> 无论是男性还是女性,我们都应该关注亲密动作——亲密动作可以表示好感,表示相互的安慰,表示相互的喜欢,也可以表示相互的性的需要。 - -> 用激情换来的相互了解与和谐平稳,那种互相熟悉的默契,是常年在一起的伴侣特有的。这种默契可能是一个眼神对方就知道你要什么,或者说通过女性体位的小小的变化,伴侣都能知道你有没有兴致,等等 - -> 只有外阴也润滑了,才是足够润滑,这是性兴奋导致的润滑液的分泌。 - -## 笔记 - - -> 有时候你可能特别想抱抱 - -💭 没事多拥抱身边的人 - -> 如果你在恋爱之前对自己的评价分数能够达到 80 分以上,也就是说你绝大多数时候是接纳自己的、是自信的,那你就基本处于心理健康的状态。 - -💭 你愿意嫁给你自己么 - -## 书评 - - -## 点评 diff --git a/life/阅读/政治军事/实践论.md b/life/阅读/政治军事/实践论.md deleted file mode 100644 index d8b3e77d..00000000 --- a/life/阅读/政治军事/实践论.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: 实践论 -description: 毛泽东的《实践论》,是为着用马克思主义的认识论观点去揭露党内的教条主义和经验主义——特别是教条主义这些主观主义的错误而写的。因为重点是揭露看轻实践的教条主义这种主观主义,故题为《实践论》。毛泽东曾以这篇论文的观点在延安的抗日军事政治大学作过讲演。 -keywords: - - 实践论 - - 政治军事 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《实践论》 -- **作者**: 毛泽东 -- **分类**: 政治军事-政治 -- **ISBN**:7010011648 -- **出版社**:人民出版社 - -## 概述 - -毛泽东的《实践论》,是为着用马克思主义的认识论观点去揭露党内的教条主义和经验主义——特别是教条主义这些主观主义的错误而写的。因为重点是揭露看轻实践的教条主义这种主观主义,故题为《实践论》。毛泽东曾以这篇论文的观点在延安的抗日军事政治大学作过讲演。 - -## 划线 - - -> 马克思主义者认为,只有人们的社会实践,才是人们对于外界认识的真理性的标准。实际的情形是这样的,只有在社会实践过程中(物质生产过程中,阶级斗争过程中,科学实验过程中),人们达到了思想中所预想的结果时,人们的认识才被证实了。 - -> 实践高于(理论的)认识,因为它不但有普遍性的品格,而且还有直接现实性的品格 - -> 马克思主义的哲学辩证唯物论有两个最显著的特点:一个是它的阶级性,公然申明辩证唯物论是为无产阶级服务的;再一个是它的实践性,强调理论对于实践的依赖关系,理论的基础是实践,又转过来为实践服务。 - -> 看到了各种文件,这些就是事物的现象,事物的各个片面以及这些事物的外部联系。这叫做认识的感性阶段,就是感觉和印象的阶段。 - -> 这个概念、判断和推理的阶段,在人们对于一个事物的整个认识过程中是更重要的阶段,也就是理性认识的阶段。认识的真正任务在于经过感觉而到达于思维,到达于逐步了解客观事物的内部矛盾,了解它的规律性,了解这一过程和那一过程间的内部联系,即到达于论理的认识。 - -> 感性的认识是属于事物之片面的、现象的、外部联系的东西,论理的认识则推进了一大步,到达了事物的全体的、本质的、内部联系的东西,到达了暴露周围世界的内在的矛盾,因而能在周围世界的总体上,在周围世界一切方面的内部联系上去把握周围世界的发展。 - -> 认识过程中两个阶段的特性,在低级阶段,认识表现为感性的,在高级阶段,认识表现为论理的,但任何阶段,都是统一的认识过程中的阶段。 - -> 我们的实践证明:感觉到了的东西,我们不能立刻理解它,只有理解了的东西才更深刻地感觉它。感觉只解决现象问题,理论才解决本质问题。 - -> 马克思、恩格斯、列宁、斯大林之所以能够作出他们的理论,除了他们的天才条件之外,主要地是他们亲自参加了当时的阶级斗争和科学实验的实践,没有这后一个条件,任何天才也是不能成功的。 - -> 为了明了基于变革现实的实践而产生的辩证唯物论的认识运动——认识的逐渐深化的运动,下面再举出几个具体的例子。 - -> 战争的领导者,如果他们是一些没有战争经验的人,对于一个具体的战争(例如我们过去十年的土地革命战争)的深刻的指导规律,在开始阶段是不了解的。他们在开始阶段只是身历了许多作战的经验,而且败仗是打得很多的。然而由于这些经验(胜仗,特别是败仗的经验),使他们能够理解贯串整个战争的内部的东西,即那个具体战争的规律性,懂得了战略和战术,因而能够有把握地去指导战争。 - -> 第一个,在前面已经说过的,这里再重复说一说,就是理性认识依赖于感性认识的问题。 - -> 第二是认识有待于深化,认识的感性阶段有待于发展到理性阶段——这就是认识论的辩证法[插图] - -> 理性认识依赖于感性认识,感性认识有待于发展到理性认识,这就是辩证唯物论的认识论。 - -> 抓着了世界的规律性的认识,必须把它再回到改造世界的实践中去,再用到生产的实践、革命的阶级斗争和民族斗争的实践以及科学实验的实践中去。 - -> 理论的东西之是否符合于客观真理性这个问题,在前面说的由感性到理性之认识运动中是没有完全解决的,也不能完全解决的。要完全地解决这个问题,只有把理性的认识再回到社会实践中去,应用理论于实践,看它是否能够达到预想的目的。 - -> 人们原定的思想、理论、计划、方案,毫无改变地实现出来的事,是很少的 - -> 因为从事变革现实的人们,常常受着许多的限制,不但常常受着科学条件和技术条件的限制,而且也受着客观过程的发展及其表现程度的限制(客观过程的方面及本质尚未充分暴露) - -> 许多时候须反复失败过多次,才能纠正错误的认识 - -> 。无数相对的真理之总和,就是绝对的真理 - -> 世界到了全人类都自觉地改造自己和改造世界的时候,那就是世界的共产主义时代。 - -> 这就是辩证唯物论的知行统一观。 - -## 笔记 - - -> 我们的结论是主观和客观、理论和实践、知和行的具体的历史的统一,反对一切离开具体历史的“左”的或右的错误思想。 - -💭 手握理论去实践,复盘总结继续实践。 - -> ,一个人的知识,不外直接经验的和间接经验的两部分。而且在我为间接经验者,在人则仍为直接经验。因此,就知识的总体说来,无论何种知识都是不能离开直接经验的 - -💭 读万卷书是间接经验,理论知识;行万里路是直接经验,实践所得。毕竟山在哪里和山在眼前,天差地别。 - -> 其中,尤以各种形式的阶级斗争,给予人的认识发展以深刻的影响。在阶级社会中,每一个人都在一定的阶级地位中生活,各种思想无不打上阶级的烙印。 - -💭 阶级局限性 - -## 书评 - - -## 点评 diff --git a/life/阅读/教育学习/如何阅读一本书.md b/life/阅读/教育学习/如何阅读一本书.md deleted file mode 100644 index 8177f628..00000000 --- a/life/阅读/教育学习/如何阅读一本书.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: 如何阅读一本书 -description: 这是一本关于阅读的永不褪色的经典。本书是一本阅读指南,一本指导人们如何阅读的名作,曾高踞全美畅销书排行榜榜首,自问世以来,好评甚多,重版多次。书中介绍了阅读的方法、技巧,阅读所应具备的广阔视野。 -keywords: - - 如何阅读一本书 - - 教育学习 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《如何阅读一本书》 -- **作者**: 莫提默·艾德勒 查尔斯·范多伦 -- **分类**: 教育学习-教育 -- **ISBN**:9787100106184 -- **出版社**:商务印书馆有限公司 - -## 概述 - -这是一本关于阅读的永不褪色的经典。本书是一本阅读指南,一本指导人们如何阅读的名作,曾高踞全美畅销书排行榜榜首,自问世以来,好评甚多,重版多次。书中介绍了阅读的方法、技巧,阅读所应具备的广阔视野。 - -## 划线 - - -> 如果没有经历这么多年的寻觅与颠簸,发现与失落,我读这本书的感受不会这么深刻,收获也不会这么丰富。 - -> 法国学者帕斯卡尔(Pascal)在三百年前就说过:“读得太快或太慢,都一无所获。” - -> 全国性的狂热 - -> 提出不同速度的阅读法才是解决之道。我们的目标是要读得更好,永远更好,不过,有时候要读得慢一点,有时候要读得快一点。 - -> 掌握一段文字的中心思想是什么,或是论述文的重点及次要重点在哪里 - -> 第一篇,介绍四种不同层次的阅读——基础阅读(elementary reading)、检视阅读(inspectional reading)、分析阅读、主题阅读(syntopical reading) - -> 读书的主要目的当作是增进理解能力的人 - -> 太精心的设计 - -> 第一提醒读者,阅读可以是一件多少主动的事。第二要指出的是,阅读越主动,效果越好。 - -> 作者就很像是一位投手。有些作者完全知道如何“控球”:他们完全知道自己要传达的是什么,也精准正确地传达出去了。 - -> 阅读的目标:为获得资讯而读,以及为求得理解而读 - -> 这本书是某个人用文字书写的,想要与你沟通一些想法。你要能成功地阅读这本书,完全看你能接获多少作者想要传达的讯息。 - -> 只有一种方式是真正地在阅读。没有任何外力的帮助,你就是要读这本书。你什么都没有,只凭着内心的力量,玩味着眼前的字句,慢慢地提升自己,从只有模糊的概念到更清楚地理解为止。这样的一种提升,是在阅读时的一种脑力活动,也是更高的阅读技巧。这种阅读就是让一本书向你既有的理解力做挑战。 - -> 这是一个凭借着头脑运作,除了玩味读物中的一些字句之外,不假任何外助,以一己之力来提升自我的过程。 - -> 因为一种是读得懂的东西,另一种是必须要读的东西,二者之间的界限通常是很模糊的。 - -> 第二种意义是一个人试着读某样他一开始并不怎么了解的东西。这个东西的水平就是比阅读的人高上一截。这个作者想要表达的东西,能增进阅读者的理解力。 - -> 这里的“学习”指的是理解更多的事情,而不是记住更多的资讯——和你已经知道的资讯在同一水平的资讯。 - -> 在什么样的状况下,我们会为了增进理解而阅读?有两种状况:第一是一开始时不相等的理解程度。在对一本书的理解力上,作者一定要比读者来得“高杆”,写书时一定要用可读的形式来传达他有而读者所无的洞见。其次,阅读的人一定要把不相等的理解力克服到一定程度之内,虽然不能说全盘了解,但总是要达到与作者相当的程度。一旦达到相同的理解程度,就完成了清楚的沟通。 - -> 简单来说,我们只能从比我们“更高杆”的人身上学习。我们一定要知道他们是谁,如何跟他们学习。 - -> 本书是关于阅读的艺术,是为了增强理解力而写的。 - -> 事实上,任何一本书能增进理解或增加资讯时,也就同时有了消遣的效果。 - -> 阅读就是学习:指导型的学习,以及自我发现型的学习之间的差异 - -> 为什么会发生,与其他的事实有什么关联,有什么类似的情况,同类的差异在哪里等等。 - -> 只有真正学习到的人才是主动的学习者。 - -> 学生却必须自己能学习才行 - -> 思考只是主动阅读的一部分。 - -> 阅读的艺术包括了所有非辅助型自我发现学习的技巧:敏锐的观察、灵敏可靠的记忆、想象的空间,再者当然就是训练有素的分析、省思能力。 - -> 因为倾听是从一位出现在你眼前的老师学习——一位活生生的老师——而阅读却是跟一位缺席的老师学习。 - -> 如果你问一本书一个问题,你就必须自己回答这个问题。 - -> 如果我们打算继续学习与发现,我们就要懂得如何让书本来教导我们。事实上,这就是本书最主要的目的。 - -> 阅读的规则是:努力越多,效果越好。 - -> ,因为我们大多数人在阅读时,都经常是没有人在旁边帮助的。阅读,就像是非辅助型的自我发现学习,是跟着一位缺席的老师在学习。只有当我们知道如何去读时,我们才可能真正读懂。 - -> 种类是样样都不相同的,而层次却是再高的层次也包含了较低层次的特性。 - -> ,阅读的层次是渐进的。 - -> 书中写的却是我们不太熟悉的外国文字,这样的问题就发生了。 - -> 第四章我们还会详细讨论这个层次的阅读,现在就不作进一步的说明了。我们想要强调的是,大多数人,即使是许多优秀的阅读者,都忽略了检视阅读的价值。他们打开一本书,从第一页开始读起,孜孜不倦,甚至连目录都不看一眼。因此,他们在只需要粗浅翻阅一本书的 - -> 分析阅读就是全盘的阅读、完整的阅读,或是说优质的阅读——你能做到的最好的阅读方式。 - -> 第一是美国在继续推行全民教育,这就是说,当然,最少要做到全国没有文盲。 - -> 总括而言,要教育少数具有高度学习动机的孩子阅读(通常他们的父母都是知识分子),和教育一些不管动机有多微弱,或家庭有多贫困的孩子阅读,是完全不同的两码事——一百年前如此,今天依然如此。 - -> 基础阅读的第一个阶段——阅读准备阶段——相当于学前教育或幼稚园的学习经验。第二阶段——认字——相当于一年级学生典型的学习经验(尽管相当多正常的孩子在某方面来说并非都很“典型”)。 - -> 一个人文素养优良的高中,就算什么也没做,也该培养出能达到分析阅读的读者。一个优秀的大学,就算什么也没贡献,也该培育出能进行主题阅读的读者。大学的文凭应该代表着一般大学毕业生的阅读水平,不但能够阅读任何一 - -> 我们的历史一直强调,无限制的受教育机会是一个社会能提供给人民最有价值的服务——或说得正确一点,只有当一个人的自我期许,能力与需要受限制时,教育机会才会受到限制。 - -> 检视阅读一:有系统的略读或粗读 - -> 第一,你并不知道自己想不想读这本书。你也不知道这本书是否值得做分析阅读。 - -> (1)先看书名页,然后如果有序就先看序。 - -> (2)研究目录页, - -> (3)如果书中附有索引,也要检阅一下 - -> (4)如果那是本包着书衣的新书,不妨读一下出版者的介绍。 - -> 完成这四个步骤,你对一本书已经有足够的资讯,让你判断是想要更仔细地读这本书,还是根本不想读下去了。 - -> (5)从你对一本书的目录很概略,甚至有点模糊的印象当中,开始挑几个看来跟主题息息相关的篇章来看。 - -> (6)最后一步,把书打开来,东翻翻西翻翻,念个一两段,有时候连续读几页,但不要太多。 - -> 头一次面对一本难读的书的时候,从头到尾先读完一遍,碰到不懂的地方不要停下来查询或思索。 - -> 阅读的速度 - -> 所谓阅读速度,理想上来说,不只是要能读得快,还要能用不同的速度来阅读——要知道什么时候用什么样的速度是恰当的。 - -> 你可以自己做这样的训练:将大拇指与食指、中指合并在一起,用这个“指针”顺着一行一行的字移动下去,速度要比你眼睛感觉的还要快一点。强迫自己的眼睛跟着手部的动作移动。一旦你的眼睛能跟着手移动时,你就能读到那些字句了。继续练习下去,继续增快手的动作,等到你发觉以前,你的速度已经可以比以前快两三倍了。 - -> 在著名的第二段里的一些字句,如“不可剥夺的”、“权利”、“自由”、“幸福”、“同意”、“正义的力量”,值得再三玩味、推敲、沉思。 - -> 这么说来,速读的问题就出在理解力上。 - -> 在阅读一本书的时候,慢不该慢到不值得,快不该快到有损于满足与理解。 - -> (1)整体来说,这本书到底在谈些什么? - -> 作者细部说了什么,怎么说的? - -> 这本书说得有道理吗?是全部有道理,还是部分有道理? - -> (4)这本书跟你有什么关系?如果这本书给了你一些资讯,你一定要问问这些资讯有什么意义。 - -> (1)画底线 - -> (2)在画底线处的栏外再加画一道线 - -> 在空白处做星号或其他符号 - -> 在空白处编号——作者的某个论点发展出一连串的重要陈述时,可以做顺序编号。 - -> (5)在空白处记下其他的页码 - -> 将关键字或句子圈出来 - -> (7)在书页的空白处做笔记 - -> (你已经在书后的空白页做过这件事了) - -> 第一,这是什么样的一本书?第二,整本书在谈的是什么?第三,作者是借着怎样的整体架构,来发展他的观点或陈述他对这个主题的理解? - -> 男孩遇到女孩,男孩失掉女孩,男孩又得到女孩。这真的是每一个罗曼史的情节。认清这一点,也就是要明白,为什么所有的故事情节不过那几个的道理。同样的基本情节,一位作者写出来的是好故事或坏故事,端看他如何装点这副骨架。 - -> 分析阅读的第一阶段,或,找出一本书在谈些什么的四个规则:(1)依照书本的种类与主题作分类。(2)用最简短的句子说出整本书在谈些什么。(3)按照顺序与关系,列出全书的重要部分。将全书的纲要拟出来之后,再将各个部分的纲要也一一列出。(4)找出作者在问的问题,或作者想要解决的问题。 - -> 语言并不是完美的传递知识的媒介 - -> 当我们谈到“阅读”时,可能是指(1)为娱乐而阅读;(2)为获得资讯而阅读;(3)为追求理解力而阅读。 - -> (5)诠释作者使用的关键字,与作者达成共识。(6)从最重要的句子中抓出作者的重要主旨。(7)找出作者的论述,重新架构这些论述的前因后果,以明白作者的主张。(8)确定作者已经解决了哪些问题,还有哪些是未解决的。在未解决的问题中,确定哪些是作者认为自己无法解决的问题。 - -> 人是情绪与偏见的动物 - -> 第一:要求读者先完整地了解一本书,不要急着开始批评。第二:恳请读者不要争强好辩或盲目反对。第三:将知识上的不同意见看作是大体上可以解决的问题。 - -> 这个规则再进一步的话,就是要求读者要为自己不同的意见找到理论基础,这样这个议题才不只是被说出来,而且会解释清楚。只有这样,才有希望解决这个问题。 - -> (1)你的知识不足(uninformed)。(2)你的知识有错误(misinformed)。(3)你不合逻辑——你的推论无法令人信服。(4)你的分析不够完整。 - -> 如果你不能用相关证据显示作者是知识不足、知识有误,或不合逻辑,你就不能反对他。你不能像很多学生或其他人说的:“你的前提都没有错,推论也没问题,但我就是不同意你的结论。”这时候你唯一能说的可能只是你“不喜欢”这个结论。你并不是在反对。你只在表达你的情绪或偏见。 - -> 三、分析阅读的第三阶段:像是沟通知识一样地评论一本书的规则A.智慧礼节的一般规则(9)除非你已经完成大纲架构,也能诠释整本书了,否则不要轻易批评。(在你说出:“我读懂了!”之前,不要说你同意、不同意或暂缓评论。)(10)不要争强好胜,非辩到底不可。(11)在说出评论之前,你要能证明自己区别得出真正的知识与个人观点的不同。B.批评观点的特别标准(12)证明作者的知识不足。(13)证明作者的知识错误。(14)证明作者不合逻辑。(15)证明作者的分析与理由是不完整的。注意:关于最后这四点,前三点是表示不同意见的准则,如果你无法提出相关的佐证,就必须同意作者的说法,或至少一部分说法。你只能因为最后一点理由,对这本书暂缓评论。 - -> 许多伟大的作品不只是互相有关联,而且在写作时还有特定的先后顺序,这都是不该忽略的事。后人的作品总是受到前人的影响。如果你先读前一位的作品,他可能会帮助你了解后人的作品。阅读彼此相关的书籍,依照写作的时间顺序来读,对你了解最后写的作品有很大帮助。这就是外在辅助阅读的基本常识与规则。 - -> 人类的住所是什么?”、“人类缺乏的是什么?”、“人类何以为生? - -> 知识的顺序是随着时代而变迁的。在过去,所有相关的知识是以七种教育艺术来排列的——文法、修辞、逻辑三学科,与算术、几何、天文、音乐四学科组合而成。 - -> 就算一开始不太清楚,也不要焦虑。事实上,一开始本来就是不清楚的。故事就像我们的人生一样,在生命中,我们不可能期望了解每一件发生在我们身上的事,或把一生全都看清楚。但是,当我们回顾过去时,我们便了解为什么了。所以,读者在阅读小说时,全部看完之后再回顾一下,就会了解事件的关联与活动的前后顺序了。 - -> 阅读历史的两个要点是:第一,对你感兴趣的事件或时期,尽可能阅读一种以上的历史书。第二,阅读历史时,不只要关心在过去某个时间、地点真正发生了什么事,还要读懂在任何时空之中,尤其是现在,人们为什么会有如此这般行动的原因。 - -> 最重要的是,在阅读当前事件的报导时,要知道是谁在写这篇报导。这里所说的并不是要认识那位记者,而是要知道他写作的心态是什么。 - -> (1)这个作者想要证明什么?(2)他想要说服谁?(3)他具有的特殊知识是什么?(4)他使用的特殊语言是什么?(5)他真的知道自己在说些什么吗? - -> 这个警告就是:读者要擦亮眼睛(Caveat lector)! - -> 浓缩的唯一功能就是激励我们去阅读原著。 - -> 任何自然科学的分支都要包含三个部分:在这个科学主题中的连续事实,呈现这些事实的想法,以及表达这些事实的语言……因为想法是由语言来保留与沟通的,如果我们没法改进科学的本身,就没法促进科学语言的进步。换个角度来看也一样,我们不可能只改进科学的语言或术语,却不改进科学的本身。 - -> 数学其实是一种语言,我们可以像学习自己的语言一样学习它。在学习自己的语言时,我们要学两次:第一次是学习如何说话,第二次是学习如何阅读。幸运的是,数学只需要学一次,因为它完全是书写的语言。 - -> 数学是如何优美、如何满足智力的一门学问。如果任何人愿意费点力气来读数学,要领略数学之美永远不嫌晚。你可以从欧几里得开始,他的《几何原理》是所有这类作品中最清晰也最优美的作品。 - -> 第一,你至少可以把一些比你想象的基础程度的数学读得更明白。 - -> 如果你阅读数学书的企图是要了解数学本身,当然你要读数学,从头读到尾——手上还要拿支笔,这会比阅读任何其他的书还需要在书页空白处写些笔记。但是你的企图可能并非如此,而是只想读一本有数学在内的科学书,这样跳着略读反而是比较聪明的。 - -> 最伟大的哲学家所提出来的深刻问题,正是孩子们所提出的问题。能够保留孩子看世界的眼光,又能成熟地了解到保留这些问题的意义,确实是非常稀有的能力 - -> 存在与不存在的区别在哪里?所有存在事物的共同点是什么?每一种存在事物的特质是什么?事物存在的方法是否各有不同——各有不同的存在形式?是否某些事物只存在心中,或只为了心灵而存在?而存在于心灵之外的其他事物,是否都为我们所知,或是否可知?是否所有存在的事物都是具体的,或是在具体物质之外仍然存在着某些事物?是否所有的事都会改变,还是有什么事是永恒不变的?是否任何事物都有存在的必要?还是我们该说:目前存在的事物不见得从来都存在?是否可能存在的领域要大于实际存在的领域? - -> 哲学家提出这样的问题,就是从注意事物的存在到注意事物的转变,并试着将存在与改变的关系建立起来。 - -> 我们所讨论的两种问题,区分出两种主要不同的哲学领域。第一组,关于存在与变化的问题,与这个世界上存在与发生的事有关。这类问题在哲学领域中属于理论或思辨型的部分。第二组,关于善与恶,好与坏的问题,和我们应该做或探寻的事有关,我们称这是隶属于哲学中实用的部分,更正确来说该是规范(normative)的哲学。 - -> 要回答哲学的问题,除了思考以外,别无他法。 - -> 这个领悟就是幸福是善的完整(whole of the good),而不是最高的(highest)善,因为如果是那样,那就只有一种善了。 - -> 假装相信一些其实你并不相信的事,是很好的心智训练。当你越清楚自己的偏见时,你就越不会误判别人的偏见了。 - -> 哲学家在面对问题时,除了思考以外,什么也不能做。读者在面对一本哲学书时,除了阅读以外,什么也不能做——那也就是说,要运用你的思考。 - -> 的确,哲学问题的最大特色就在每个人必须为自己回答这些问题。采用别人的观点并没有解决这些问题,只是在逃避问题而已。 - -> 经书的范围不只这些明显的例子。任何一个机构——教会、政党或社会——在其他的功能之外,如果(1)有教育的功能,(2)有一套要教育的课本(a body of doctrine to teach),(3)有一群虔诚又顺服的成员,那么属于这类组织的成员在阅读的时候都会必恭必敬。他们不会——也不能——质疑这些对他们而言就是“经书”的书籍的权威与正确的阅读方法。信仰使得这些信徒根本不会发现“神圣的”经书中的错误,更别提要找出其中道理不通的地方。 - -> 只有在报纸头版出现,简短的“谁——发生了什么事——为什么发生——何时何地发生”新闻提要,才是以事实为主。一般来说,记者都会将事实加上诠释、评论、分析,再成为新闻报导。这些诠释与评论都是来自社会科学的观念与术语。 - -> 爱只是一种占有的欲望,通常是性的欲望,也就是说,爱只是一种所有动物在面对异性时会产生的吸引力。但是你也会发现另一个作者所谈的爱是不包含占有的欲望,而是一种慈善。如果说占有的欲望总是暗示着想要为自己追求好东西,而慈善却暗示着要为别人追求好东西。那么占有的欲望与慈善之间,是否有相通之处? - -## 笔记 - - -> 简单来说,我们只能从比我们“更高杆”的人身上学习。我们一定要知道他们是谁,如何跟他们学习。 - -💭 向上阅读 - -> 在阅读一本书的时候,慢不该慢到不值得,快不该快到有损于满足与理解。 - -💭 就如同去动物园里游玩,看见孔雀就可以多停留,遇见嘈杂的人群就赶忙走开啦 - -> 一个作者在写作时,可能会用不同的字来说明同样的主旨。读者如果不能经由文字看出一个句子的主旨,就容易将不同的句子看作是在说明不同的主旨。这就好像一个人不知道2+2=4跟4-2=2虽然是不同的算式,说明的却是同一个算术关系——这个关系就是四是二的双倍,或二是四的一半。 -你可以下结论说,这个人其实根本不懂这个问题。同样的结论也可以落在你身上,或任何一个无法分辨出用许多相似句子说明同一个主旨的人,或是当你要他说出一个句子的主旨时,他却无法用自己的意思作出相似的说明。 - -💭 横看成岭侧成峰,远近高低各不同 - -## 书评 - - -## 点评 - -![《如何阅读一本书》.png](https://static.7wate.com/img/2022/10/12/39d8eeed6d5e9.png) diff --git a/life/阅读/教育学习/赖世雄的英语学习法.md b/life/阅读/教育学习/赖世雄的英语学习法.md deleted file mode 100644 index a8112a24..00000000 --- a/life/阅读/教育学习/赖世雄的英语学习法.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: 赖世雄的英语学习法 -description: 《赖世雄的英语学习法》是一本对英语学习者切实有效的方法指南。自学成才的赖世雄老师怀着帮助英语学习者少走弯路的初衷,在本书里详细讲解了自己在英语学习的每个阶段所采用的方法。从初学时如何通过反复模仿音标来塑造自己纯正的口音、如何通过自我对话的方式来增强讲英语的 -keywords: - - 赖世雄的英语学习法 - - 教育学习 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《赖世雄的英语学习法》 -- **作者**: 赖世雄 -- **分类**: 教育学习-外语 -- **ISBN**:9787213085802 -- **出版社**:浙江人民出版社 - -## 概述 - -《赖世雄的英语学习法》是一本对英语学习者切实有效的方法指南。自学成才的赖世雄老师怀着帮助英语学习者少走弯路的初衷,在本书里详细讲解了自己在英语学习的每个阶段所采用的方法。从初学时如何通过反复模仿音标来塑造自己纯正的口音、如何通过自我对话的方式来增强讲英语的密度;到小有所成时如何通过大量阅读英文文章来大幅增加自己的词汇量,如何学习语法、划分句子结构从而为自己日后的写作打下坚实基础;再到英语学习的高级阶段中如何练习英汉互译,做口译练习的相关经验……凡此种种,赖世雄老师都结合自己的经验逐一进行了解释,并且细致地举出了在英语学习的各个阶段中学习者可能采用的错误方法。 - -## 划线 - - -> 善用零星时间 - -> Don't bite off more than you can chew. - -> 别咬下超过你能嚼得动的分量 - -> 接下来我不是用背的方式去把这则会话背出来,而是一人扮演两个角色,把会话的内容自导自演,进行实际的演练,也就是一遍又一遍地把会话“演”出来。 - -> (1)善用零星时间(2)少就是多,慢就是快(3)持之以恒,永不放弃 - -> 与“读”。我要说的是,看到英语文章就要开口念出声音来,而不是只默读,也不是马上查词典。我是一小段一小段地攻克新闻文章的,而不是一次把一整篇念完,这就是我所说的“少就是多”的原则。我再强调一次,我这里讲的阅读是“阅”与“读”。也就是说,当你的眼睛“看”到英语文章时,你的嘴巴就必须要同时把英文句子“念” - -> 我则是只要有零星时间就拿起《英文中国邮报》边看新闻文章(news stories)边念出声来。这么一来,我的嘴巴一天到晚讲的都是英语,我相信这会比在培训班里讲英语的机会多得多。Luther Burbank(卢瑟·伯班克)曾说过:“Time cannot be added to a person's life,but it can be made more valuable by avoiding waste.”(时间不能加进一个人的生命里,但是珍惜光阴却可使生命变得更有价值。) - -> To err is human,to forgive divine.”翻译成中文是:“人非圣贤,孰能无过。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/文学/老舍谈写作.md b/life/阅读/文学/老舍谈写作.md deleted file mode 100644 index eec10a5a..00000000 --- a/life/阅读/文学/老舍谈写作.md +++ /dev/null @@ -1,309 +0,0 @@ ---- -title: 老舍谈写作 -description: 老舍是中国现代著名作家和语言大师,著有《骆驼祥子》《四世同堂》《茶馆》等颇具分量、雅俗共赏的经典作品,也留下了丰富的文学理论普及读物,如《和工人同志们谈写作》《老牛破车》《写与读》等。《老舍谈写作》精选其关于写作的论述,从写作的基本原则、写与读的关系,语言 -keywords: - - 老舍谈写作 - - 文学 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《老舍谈写作》 -- **作者**: 老舍 -- **分类**: 文学-文学鉴赏 -- **ISBN**:9787550032262 -- **出版社**:百花洲文艺出版社 - -## 概述 - -老舍是中国现代著名作家和语言大师,著有《骆驼祥子》《四世同堂》《茶馆》等颇具分量、雅俗共赏的经典作品,也留下了丰富的文学理论普及读物,如《和工人同志们谈写作》《老牛破车》《写与读》等。《老舍谈写作》精选其关于写作的论述,从写作的基本原则、写与读的关系,语言的运用、描写的技巧、结构的方法等方面,深入浅出地阐述“如何写作”这个主题。对于初学写作或希望在写作方面有所进益的读者来说,有很强的指导性和可操作性。 - -## 划线 - - -> 我们从一篇作品里,可以看出作家怎样运用文字语言,怎样描写风景,刻画人物,怎样布置全局,怎样安排各处的情节。这些,都是我们应当细心体会的。 - -> 练习基本功,对初学写作者来说,是很重要的事 - -> 一个完完整整的人、一件完完整整的事做起。 - -> 写小说的人,也不妨练习写写诗;写写诗,文字就可以更加精炼,因为诗的语言必须很精炼,一句要表达好几句的意思。 - -> 字的本身没有好或坏,要看用在什么地方。用得恰当,就生动有力。 - -> 简练就是话说得少,而意思包含得多 - -> 我认为在学习过程中,出废品是很难免的。 - -> 临时去观察一个人总不如随时注意一切的人更为重要。自己心里没有一个小的人海,创作起来就感到困难。 - -> 只说这三点吧,我的那些缺点即暂不谈,留作另一篇小文的材料。 - -> 凡是能写些文艺作品的人都是先在语文上用过功夫的。 - -> 应当先去进修语文。把文字写明白了,就有了表现能力,会把心中的话写到纸上去。有了这种能力,再进一步学习剧本与小说的写作,就必定很顺利。反之,还没有把心里的话明明白白地写在纸上的本事,就想去写剧本或小说,必定劳而无功。 - -> 他们的生活经验是这些作品的资料。 - -> 不会写就是半个哑巴,只会用嘴说,而不会把话写在纸上。 - -> 有思想,有生活,而表达不出来,问题也极为严重。 - -> 语文是随时可以练习的。写日记、写信、纪录报告等等都是练习语文的机会,不可错过。 - -> 读书而外,一个作家还须熟读社会人生。 - -> 并没有看过另一本专写人力车夫的生活的书 - -> 词汇较为丰富了,可是文笔反倒更显着平庸,因为说到什么都有个人云亦云的形容词,大雨必是滂沱的,火光必是熊熊的,溪流必是潺潺的……。这样穿戴着借来的衣帽的文章是很难得出色的。 - -> 我们用文字表达我们的思想、感情;不以文字表达文字。字典里的文字最多,但字典不是文学作品。 - -> 所谓不将就,即是不随便找个词汇敷衍一下。我们要想,想了再想,以便独出心裁地找到最恰当的字。假若找不到,就老老实实地用普通的字,不必勉强雕饰。 - -> 写作技巧至少包括三方面:语言的运用,描写的能力,和作品的结构。 - -> 只有自己也去生活,对人的了解才会深刻。因此,我们第一须和人民生活在一起,第二要在生活中表现得好,即使写不出好作品,仍不失为好人。 - -> 文学修养必须包括思想。 - -> 功到自然成,欲速则不达! - -> 第二,写东西时,用字,造句必须先要求清楚明白。 - -> 要老老实实先把话写清楚了,然后再求生动 - -> 就是要少用“然而”“所以”“但是”,不要老用这些字转来转去。 - -> 第三,我们应向人民学习。人民的语言是那样简练、干脆。 - -> 第四,我写文章,不仅要考虑每一个字的意义,还要考虑到每个字的声音。 - -> 上句末一个字用了一个仄声字,如“他去了”,下句我就要用个平声字,如“你也去吗?”让 - -> 第五,我们写话剧、写电影的同志,要注意这个问题:我们写的语言,往往是干巴巴地交代问题。 - -> 第六,中国的语言,是最简练的语言。 - -> 其实,文艺工作者的本事就是用浅显的话,说出很深的道理来。这就得想办法。必定把一个问题想得透彻了,然后才能用普通的、浅显的话说出很深的道理。 - -> 人物要固定,事情要有范围 - -> 我们记住语言,还须注意它的思想感情,注意说话人的性格、阶级、文化程度,和说话时的神情与音调等等。这就是说,必须注意一个人为什么说那句话,和他怎么说那句话的。通过一些话,我们可以看出他的生活与性格来。这就叫连人带话一齐来。 - -> “塞水不成河”是客观的观察,“月是故乡明”是主观的情感。 - -> 这样,尽管我没写出过完美的相声段子,我可是得到一个写文章的好方法:句句要打埋伏。 - -> 明白了作文要前呼后应,脉络相通,才不厌修改,不怕删减。狠心地修改、删减,正是为叫部分服从全体。 - -> 语言练习不专仗着写剧本或某一种文体,而是需要全面学习。在写戏写小说之外,还须练基本功,诗词歌赋都拿得起来。 - -> 高深的思想与精辟的语言应当是互为表里,相得益彰的。 - -> 对话不能性格化,人物便变成剧作者的广播员。 - -> 剧本的语言应是语言的精华,不是日常生活中你一言我一语的录音。 - -> 喜剧语言必须馅儿多而皮薄,一咬即破,而味道无穷。 - -> 第三,我的生活知识与艺术知识都太少,所以笔下枯涩。思想起来,好不伤心:音乐,不懂;绘画,不懂;芭蕾舞,不懂;对日常生活中不懂的事就更多了,没法在这儿报账。 - -> 最容易看出来的是学生腔里爱转文,有意或无意地表示作者是秀才。 - -> 生活是最伟大的一部活语汇。 - -> 后来,稍稍学了一点拉丁及法文,我就更爱英文,也就翻回头来更爱华语了,因为以英文和拉丁或法文比较,才知道英文的简单正是语言的进步,而不是退化;那么以华语和英语比较,华语的惊人的简单,也正是它的极大的进步。 - -> 文字的感动力是来自在某个场合中必然的说某种话——这个话是最普遍常用的,绝难借用外国文法的。一个哲学家,与一个工友,在他痛苦的时节,是同样的只会叫“妈”的。 - -> (一)写自己真知道的事,不写自己不十分知道的事。 - -> 假若机智是感诉理智的,闹戏则仗着身体的摔打乱闹。喜剧批评生命,闹戏是故意招笑。 - -> 今天贴了标语,明天中国就强起来——反语。君子国的标语:“之乎者也”——讽刺。标语是弱者的广告——机智。张三把“提倡国货”的标语贴在祖坟上——滑稽;再加上些贴标语时怎样摔跟头等等招笑的行动,就成了闹戏。张三把“打倒帝国主义走狗”贴成“走狗打倒帝国主义”——幽默;这个张三贴一天的标语也许才挣三毛小洋,贴错了当然要受罚;我们笑这种贴法,可是很可怜张三。 - -> 叙述不是枝枝节节地随便说,而是把事物的本质说出来,使人得到确实的知识。 - -> 叙述不怕细致,而怕不生动。在细致处,要显出才华。文笔如放风筝,要飞起来,不可爬伏在地上。要自己有想象,而且使读者的想象也活跃起来。 - -> 内容决定形式。但形式亦足左右内容。 - -> 描写人物要注意他的四围,把时间地点等跟人物合在一处。要有人,还有画面。 - -> 我们必须去深刻地了解人。知道他的十件事,而只写一件事,容易成功。只知道一件,就写一件,很难写出人物来。 - -> 写两千多字,不多写:这可只是大概的说,有时候三天连一个字也写不出!我不知道天下还有比这更难受的事没有。我看着纸,纸看着我,彼此不发生关系! - -> 不经过自己思索、创造出来的,就不会有风格。要出语惊人,就要表达出自己的感情,自己的想法,自己的笔调。这样的文章才会是独具风格的。 - -> 初学者可以做个学习规划:可以从写日记开始,把自己看到的东西,能最简单地、如实地记下来,就是本领。日积月累,这就是宝贵材料。这样的练习就是记录生活,是创作的原材料。 - -> 创造人物是小说家的第一项任务。 - -> 一个小说家是人生经验的百货店,货越充实,生意才越兴旺。 - -> 这不是政策,而是不得不如此。自己觉得很对不起文艺,可是钱与朋友也是不可得罪的。 - -> 为艺术而牺牲是很好听的,可是饿死谁也是不应当的,为什么一定先叫作家饿死呢?我就不明白! - -> 一、散文是用加过工的语言组织成篇的。 - -> 二、散文中的每个字都要用得适当。 - -> 一句中不单重要的字要斟酌,就是次要的字也要费心想一想,甚至于用一个符号也要留神。写散文是件劳苦的事;信口开河必定失败。 - -> 三、选择词与字是为造好了句子。 - -> 一段中的句子要有变化,不许一边倒,老用一种结构。 - -> 无论是写一部小说,还是一篇杂文,都须有组织。有组织的文字才能成为文艺作品。因此,无论是写一部小说,还是一篇短的杂文,我们都须事先详细计划一番,作出个提纲。写了一段,临时现去想下段,是很危险的。最好是一写头一段的时候,就已经计划好末一段说什么。 - -> 我觉得通俗文艺有三难:不易通俗,不易有趣,与不易悦耳。 - -> 大家也许就推举他主编。自傲心是最普遍的毛病,甲既受人推重,也许就难免傲然以文学家自居了。 - -> 假若你不明白科学,你就连这样的小说或诗也读不懂,还说什么自己成为文艺家呢?! - -> 无论中外许多有名的文艺写家都并不是学文学的人;医生、律师……都有成为名写家的,而大学文学系毕业生反倒不一定能创作出什么来。 - -> 学问、经验、修养、努力,加上文艺天才,方能产生一个作家。 - -> 把事情看得太容易的人大概不易成功。 - -> 在许多原因之中,恐怕大家把文艺看得太轻而易举也是个重要的原因。我不敢批评别人,只说我自己吧,我根本就不够格:以我的学问、经验、天才,公公道道的说,我只能作个相当好的小学校长或初中的国文教员,文艺写家差得太多,太多了! - -> 假若你不相信我,我说,你将来的后悔与苦痛也必不减于我,我向来不说谎话! - -## 笔记 - - -> 尽管我们要只写二三千字,也须先写出个提纲,安排好头一段说什么,第二段说什么……。有了提纲,心里有了底,写起来就能顺理成章;先麻烦点,后来可省事。 - -💭 大纲! - -> 有不少初学写作的人感到苦恼:写不出来! -我的看法是:加紧学习,先别苦恼。 -怎么学习呢?我看哪,第一步顶好是心中有什么就写什么,有多少就写多少。 - -💭 总之万事万物都要先干了再说! - -> 一开始就写小说、剧本;这种情况好比没练习过骑车的人,就去参加骑车竞赛。 - -💭 循序渐进慢慢来 - -> (一)我写的不好,但写的很勤。勤是好习惯。 - -💭 勤能补拙,笨鸟先飞。 - -> (3)各派的小说,我都看到了一点,我有时候很想仿制。可是,由多读的关系,我知道摹仿一派的作风是使人吃亏的事。看吧,从古至今,那些能传久的作品,不管是属于哪一派的,大概都有个相同之点,就是它们健康,崇高,真实。反之,那些只管作风趋时,而并不结实的东西,尽管风行一时,也难免境迁书灭。在我的长篇小说里,我永远不刻意的摹仿任何文派的作风与技巧;我写我的。 - -💭 我写我的,艺术文学不应该被定义 - -> 在你写东西的时候,要要求清楚,少用那些乱七八糟的修辞。你要是真看明白了一件事,你就能一针见血地把它写出来,写得简练有力! - -💭 一针见血,入门三分 - -> 我的文章写的那样白,那样俗,好象毫不费力。实际上,那不定改了多少遍!有时候一千多字要写两三天。 - -💭 共勉哈哈哈,我也是得几个小时…… - -> 第一是作者的眼睛要老盯住书中人物,不因事而忘了人;事无大小,都是为人物服务的。第二是到了适当的地方必须叫人物开口说话;对话是人物性格最有力的说明书。 - -💭 开口说话可以鲜明的表达人物性格 - -> 现成不现成,就是通大路不通大路;大家都那么说,就现成;只有我们自己那么说,就不现成。我们不能独创语言,语言本是大家伙的。 - -💭 约定俗成的东西 - -## 书评 - -### 橙黄橘绿 - -这本书原是凑单买的,真没想到选到宝了。之前我的观点太偏狭,想当然地认为写文章就是多看多写,却忽略了生活经验,不知道这样闭门造车写出来的东西缺少思想和灵魂,也无法打动人。 - -老舍说,大量阅读文学作品,我们会懂得一些遣词造句、形式结构,掌握一定的文字基本功,但这样的文章缺少思想,思想来自对生活的观察、记录和思考,来自对社会、政治、经济等领域的关心,还来自对小桥流水、花鸟树木等事物的兴趣和好奇,以及永远求知若渴的态度。只有这样多观察多思考,我们才能把话说明白,才能言之有物,才会有自己的写作风格和思想。 - -就如书中最后一章的一段,“假若文艺青年这名词而能存在的话,他们必定是为了文艺而对其他的学科热烈地进攻,他们要对一切进攻,不是逃避。为了文艺,他们要去参加一切所能参加的工作与活动,以获得直接的经验......一个文艺青年必须活到八十岁还是青年!”这段话听得我热血沸腾,仿佛又充满了直面生活的勇气。 - -这是我从这本书中收获最大的一点。所谓的喜好一定不是让我有借口躲在自己舒适区,逃避现实。以下是一些我从书中看到,深觉非常实用的写作建议: - -1、只有自己动过笔,才会更深入地了解别人的作品,学会一些窍门。 - -2、在动笔杆的同时,我们应当努力于政治学习,热情地参加各种活动,丰富生活经验,还要看戏,看电影,看文学作品! - -3、文字的力量来自我们的思想与感情,不来自从字典辞源找来的字汇词汇。我们的思想好,感情厚,我们就一定能教普通的话变成很有力量的话。 - -4、自己老不写,就不能充分得到阅读作品的好处;光自己写而不阅读作品,就不能吸收经验,丰富自己。 - -5、字与字之间,句与句之间,段与段之间,都必须前后呼应,互相关联。 - -6、人物讲话必与理智、感情、性格三者相联系。从这三者去思索,我们就会找到适当的话语,适当的话语不至于空泛无力。找到适当的话语之后,还应再去加工,希望它适当而精彩。 - -7、只有文字而没有思想,没有生活,文字就会失去生命力。但是,有思想,有生活,而表达不出来,问题也极为严重。由练习写作的程序来说,必须先把文字写清楚,写通顺。写日记、写信、记录报告等都是练习语文的机会。等文字通顺了,再进攻小说或剧本,必然较比顺利。 - -8、我们必须学点古典文学,但学习的目的是古为今用。我们要从古典文学中学会怎么一字不苟,言简意赅,学会怎么把普通的字用得飘飘欲仙,见出作者的苦心造诣。这么下一番功夫,是为了把我们的白话文写出风格来,而不是文言与白话随便乱搀,成为杂拌儿。 - -9、语言艺术的大师鲁迅最善于把文言与白话精巧地结合在一起。不知他费了多少心思,才做到驰骋古今,综合中外,自成一家......我们都该用心地阅读他的著作,特别是他的杂文。 - -10、用世界文艺名著来启发,用中国文字去练习。 - -11、高深的思想与精辟的语言应当是互为表里,相得益彰的。在文学作品里,思想内容与语言是血之于肉,分割不开的。没有高度的语言艺术表达不出高深的思想。 - -12、我们就应该下苦功夫,使自己得心应手,能够以精辟的语言道出深湛的思想和真挚深厚的感情。 - -13、语言的丰富来自生活经验和知识的丰富。 - -14、从心理上说,一个知识丰富,经验丰富的人,口讲问题或发为文章,总愿意一语道破,说到事物的根儿上,解决问题。反之,一个对事物仅略知一二的人,就很容易屡屡“然而”,时时“所以”,敷衍成篇,以多为胜。 - -15、知道他的十件事,而只写一件事,容易成功。只知道一件,就写一件,很难写出人物来。 - -16、我们的责任是在创作:假借一件事或一个人所要传达的思想,所要发生的情感与情调,都有我们自己决定,自己执行,自己作到。我们并不是任何事任何人的奴隶,而是一切的主人。 - -17、自己觉得很对不起文艺,可是钱与朋友也是不可得罪的。(很有道理^_^) - -18、你喜好文艺,好事,你常动动笔,好事,你爱谈论文艺,好事,可是,万万不可因此而放弃了别的学科,万万不可因发表了一篇小立而想马上成为个职业的写家。 - -最后,总结一下老舍的写作建议,写作要有文字功底和思想感情,二者相辅相成。文字功底可以从书本中得来,但丰富的词汇离不开对生活观察和记录,下笔时心中要有大纲,一字一句一段都需斟酌揣摩,写完后最好念出来,再反复修改;思想感情需要有真实丰富的生活经验,随时随地思考的习惯,广博的知识和终身学习的态度,阅读有启发意义的外国文学名著也大有裨益。 - -### Leanne - -这本书的内容是在各杂志中发表陆续发表的稿件合集,每篇只谈一个与写作相关的话题,递进关系不明显,皆可独立成章。行文风格,亲切、风趣、血肉相连的文意让人开了些茅塞。等我写作经验丰富一点了,再来开多些茅塞。 -每日写作成了我作家梦的第一步,一边写一边有疑惑,身边没有一个可以指导我写作的老师,我只能去教写作的书里找答案。 - -**每个作家都有自己的看家本领,不见得每条建议、心得都对我胃口。有些也许是真理,可是我还没到那个境界而体会不到;有些出于作者的写作偏好、或自身条件驱使,即使是好的建议也不一定可以在我的写作上起到作用;还有一些是作家的普遍认知,也成了我的体会。最关键的是找到解释现阶段的疑惑,有助于增长写作功力的建议。 - -我现在写作阶段,记录一件事情除了会把握大面上的详略,还可以细致入微地呈现细节,并在细节中强化人物的性格以及夹叙对人物事情的洞察与见解。每天写作的困惑是,如何提高文采?如何选取有养料的素材?如何拥有一语惊人的才能? - -我阅读完全书,找到了几条与大家共勉: - -- **如何提高文采?** - -以前我在一本书上看到这样一个观点:词汇量的丰富度决定了作家水平的上限。我深深感觉这是我的短板,叙述事情的时候,虽然观点与条理都较为清晰,却有一种行文的无力感。有时候内心的感情色彩无法在文字上完全发挥出来。为此我执着于文采提升,看了很多古诗词与散文名篇。而本书中提到一个观点“言之无物,行之不远”。文采固然很重要,可是与言之有文相比,言之有物更重要。其中包含几层值得回味的含义:文字本身没有一等二等,全凭如何调遣,我们如果心里有值得说的话,再找到最恰当的词,我们的语言文采自然有了力量;没有实际内容的华丽词藻,就像绣花枕头,也像一位只重颜值不重内涵的花瓶式美女,没有魅力可言,倒有审美疲劳之嫌。比喻、典故等手法,切勿用得泛滥,要用一定要精彩。 - -- **如何选取有养料的素材?** - -我们要写一件事情,一定要对这件事情了如指掌。比如描写一位教师,我们只知道他一两件事情就要成一篇文章,就像我们口袋里只有10元钱,倒要买一个哈根达斯冰激凌一样,捉襟见肘。要是我们能心里准备20件关于这位教师的事情,那么行文时就会觉得很宽裕,在既定的场景中选出那件最有代表性的事情,那件只能是他才会干的事情,故事就会生动,人物也会立起来。因此,知道得多,要写得少,所谓心中有粮,下笔不慌。 - -- **如何一句惊人?** - -行文时,总感觉好几句话的笔墨还是没能说到点子上,没有一拳击中要害的酸爽。这与上面也有联系,也许是找的事情不够有代表性,也许是对事情知道得太少太浅。究其原因是观察不够细致入微。事实是事实,是死的,怎么运用它是我们的事。有效的调配,把事实看成一个起点,一个跳板,事实也没有优劣,而是要仗着我们如何判断事实,从哪个角度诠释来为其中的人物服务。要找到一个好的角度,就要求我们的文字必须是以我们的心钻入某人某事某景的心中而掏出来的东西。这样出来的文字都有它的灵魂,也必会在它应该在的地方出现。 - -我在写作上还有很多通病需要改,可是一段时间也只能改几处毛病。这些朴实的话,真的入了我的心。我是从心底里赞同这些观点。每个作家也会有自己的行文风格与行文偏好,“博闻广识、言之有物”是我的目标,我希望成为看事情有宽广深的那类作家。 - - -## 点评 - -我在看这本书的时候,很久以前了,欠了读书笔记,现在写博客又回来补上。 - -这本书是由多篇不相干的文章,组合而成的一本书。多方位,立体的呈现了关于写作的方方面面。整体来说话糙理不糙,从生活中来,向生活中去,生活才是艺术发源地! - -学习写作要有一个基础性范式:基本的语言通顺、罗列全文提纲,完整的体系结构。就像人一样,要有有骨、有血、有肉、有灵魂。像我一样,也有很多初学写作的人感到很苦恼的事情,就是写不出来!不过万事万物都要先干了再说,写就完事了,一遍不行两遍,两遍不行三遍!一开始不要写哪些太难的主题,循序渐进慢慢来。也不要只局限于一种题材,什么主题都尝试去写写。写的慢,就多写,写出废品也很正常,老舍先生直言曾经也写了不少的废品,两三天写一两千字更是正常。 - -多写多练,多方面获取写作资料。想写什么就写什么,艺术不应该被定义。要读书,更要读社会,读生活,写一些大家都能看懂的,不要故作清高。功到自然成,欲速则不达!写的时候,先从一个词,一句话,一段文字开始,循序渐进,少用华而不实的词汇,少用因为、所以,但是,不要转来转去的。考虑每个字的声音,读法。例如:他去了,你也去吗?贴近真实生活。 - -说到底我是不会写小说的,也还没尝试过写短文。目前更多的是论文,文档这些系统化,逻辑思维强的写作。目前达不到理解的高度,日后定会再拜读的。 diff --git a/life/阅读/生活百科/聂卫平围棋教程(从15级到10级).md b/life/阅读/生活百科/聂卫平围棋教程(从15级到10级).md deleted file mode 100644 index fe26aa13..00000000 --- a/life/阅读/生活百科/聂卫平围棋教程(从15级到10级).md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: 聂卫平围棋教程(从15级到10级) -description: “聂卫平围棋道场系列”丛书是我国围棋职业运动员聂卫平,同聂卫平围棋道场的明星教师团队联合编写的适合少儿的零基础围棋启蒙书籍。 - 聂卫平围棋道场系列教材设置了基础知识、例题精讲、随堂练习、围棋人物、学习园地等板块,内容全面、系统,难度循序渐进,分为“从入门到1 -keywords: - - 聂卫平围棋教程(从15级到10级) - - 生活百科 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《聂卫平围棋教程(从15级到10级)》 -- **作者**: 聂卫平 -- **分类**: 生活百科-体育 -- **ISBN**:9787115478528 -- **出版社**:人民邮电出版社 - -## 概述 - -“聂卫平围棋道场系列”丛书是我国围棋职业运动员聂卫平,同聂卫平围棋道场的明星教师团队联合编写的适合少儿的零基础围棋启蒙书籍。 聂卫平围棋道场系列教材设置了基础知识、例题精讲、随堂练习、围棋人物、学习园地等板块,内容全面、系统,难度循序渐进,分为“从入门到15级”、“从15级到10级”、“从10级到5级”、“从5级到1段”四本进价教程。书中的知识点讲解清晰、易懂,选取了经典的例题及难度适宜练习题目,且知识点与课后练习一一对应,方便小朋友课后进行自测,查缺补漏。此外,书中还配有围棋名人故事,让小朋友在学习围棋知识的同时,也能学习围棋文化,提升围棋素养。 - -## 划线 - - -> 围棋有句口诀:“金角银边草肚皮。” - -> 基本守角:在占角的棋子旁下一手棋,两颗子一起围住角上的地盘。守角是围空的基本下法之一, - -> 基本挂角:在对方占角之后,我方下在占角附近,限制对方角部发展。 - -> 失败后仍选择继续前行的人,才是真正的强者 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/生活百科/聂卫平围棋教程(从入门到15级).md b/life/阅读/生活百科/聂卫平围棋教程(从入门到15级).md deleted file mode 100644 index 4ec52ea1..00000000 --- a/life/阅读/生活百科/聂卫平围棋教程(从入门到15级).md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: 聂卫平围棋教程(从入门到15级) -description: “聂卫平围棋道场系列”丛书是我国知名围棋职业运动员聂卫平,同聂卫平围棋道场的明星教师团队联合编写的适合少儿的零基础围棋启蒙书籍。"聂卫平围棋道场系列"系列教材设置了基础知识、例题精讲、随堂练习、围棋人物、学习园地等板块,内容全面、系统,难度循序渐进,分为“ -keywords: - - 聂卫平围棋教程(从入门到15级) - - 生活百科 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《聂卫平围棋教程(从入门到15级)》 -- **作者**: 聂卫平主编 -- **分类**: 生活百科-体育 -- **ISBN**:9787115467782 -- **出版社**:人民邮电出版社 - -## 概述 - -“聂卫平围棋道场系列”丛书是我国知名围棋职业运动员聂卫平,同聂卫平围棋道场的明星教师团队联合编写的适合少儿的零基础围棋启蒙书籍。"聂卫平围棋道场系列"系列教材设置了基础知识、例题精讲、随堂练习、围棋人物、学习园地等板块,内容全面、系统,难度循序渐进,分为“从入门到15级”、“从15级到10级”、“从10级到5级”、“从5级到1段”四本进价教程。书中的知识点讲解清晰、易懂,选取了经典的例题及难度适宜练习题目,且知识点与课后练习一一对应,方便小朋友课后进行自测,查缺补漏。此外,书中还配有围棋名人故事,让小朋友在学习围棋知识的同时,也能学习围棋文化,提升围棋素养。 - -## 划线 - - -> 围棋是我一生的至爱,我曾不止一次说过,对围棋有利的事情,我就会去做。 - -> 棋的块数棋盘上的块数越多越有可能被吃掉,块数少的棋,保护起来越容易,气也比较长。 - -> 所以我们下棋的时候要注意,在开始的时候尽量不要把棋下在一路线与二路线 - -> 围棋有句口诀:“敌之要点,我之要点。”破眼的位置,就是对手做眼的位置。 - -> 有的棋型为一点死,意思就是说,一旦被对手包围,对方只要点一下眼,就能将自己杀死。特点:有个中心点。 - -## 笔记 - - -> 落子无悔 - -💭 人生如棋,落子无悔 - -## 书评 - -> ✨干掉人机! - -## 点评 diff --git a/life/阅读/社会文化/人体简史.md b/life/阅读/社会文化/人体简史.md deleted file mode 100644 index 6ea7d39e..00000000 --- a/life/阅读/社会文化/人体简史.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: 人体简史 -description: 你的身体30亿岁了!一部从头讲到脚、从里讲到外、从30亿年前讲到今天的人体百科全书!翻开本书,从单细胞斑点讲起,看看30亿年来你的身体的进化史!全球销量超千万册的科普巨著《万物简史》作者比尔·布莱森重磅新作,被誉为“当今在世的最有趣的非虚构类作家”!人有几 -keywords: - - 人体简史 - - 社会文化 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《人体简史》 -- **作者**: 比尔·布莱森 -- **分类**: 社会文化-社科 -- **ISBN**:9787549631780 -- **出版社**:文汇出版社 - -## 概述 - -你的身体30亿岁了!一部从头讲到脚、从里讲到外、从30亿年前讲到今天的人体百科全书!翻开本书,从单细胞斑点讲起,看看30亿年来你的身体的进化史!全球销量超千万册的科普巨著《万物简史》作者比尔·布莱森重磅新作,被誉为“当今在世的最有趣的非虚构类作家”!人有几百万年前在树上睡觉的记忆,所以现在在床上睡觉也不会掉下来!只有人把空气和食物送往同一通道,所以生来容易被噎死!人的大脑比一万年前小了很多,但它30秒处理的信息比哈勃望远镜30年的还多!Y染色体可能在460万年后灭绝,但不用担心,男性并不会因此灭亡!癌症也是进化的代价,没有细胞的变异,人类就不会得癌症!《星期日泰晤士报》2019年度科普书! 登顶《星期日泰晤士报》图书畅销榜!雄踞《纽约时报》图书畅销榜18周之久!提名《华盛顿邮报》2019年度图书!入围2019年爱德华·威尔逊科学写作奖长名单!翻开本书,从单细胞斑点讲起,看看30亿年来你的身体的进化史! - -## 划线 - - -> 你每天眨眼14,000次[6]——相当于你在清醒的一天里闭着眼长达14分钟。 - -> 想一想这件事吧,光靠你自己就足够离开太阳系了。从字面意义来看,你就是宇宙。 - -> 生命的基本单位是细胞——人人都同意这一点。细胞里充满了各种忙忙碌碌的东西:核糖体和蛋白质、DNA、RNA、线粒体, - -> 它本身没有生命,就跟其他所有的房间一样。然而,天知道怎么回事,所有这些东西聚拢到一起,你就拥有了生命。这是科学无法解释的部分。我有点儿希望它永远保持这种神秘状态。 - -> DNA分子由两条梯级相连、呈著名双螺旋形状的长链构成。一段DNA可分为名叫染色体的片段及名为基因的较短单位。你所有基因的总和就是基因组。 - -> DNA以非凡的保真度传递信息。它每复制10亿个字母只产生一个错误。即便按照这样的精确度运行,每次细胞分裂大概也会出现三个错误或突变。身体可以忽略大多数的突变,但偶尔,突变也会带来持久的影响。这就是演变(evolution)。 - -> 胰岛素是一种小蛋白质,对维持体内血糖的微妙平衡至关重要。太多或太少都会产生可怕的后果。我们需要大量的胰岛素。胰岛素每个分子只能持续5~15分钟,因此,人体对它有着不间断的补给需求。 - -> 1型糖尿病是身体完全停止产生胰岛素。2型糖尿病是胰岛素效果变差,一来是因为生成数量下降,二来是因为胰岛素所作用的细胞没有做出正常的响应。这叫作胰岛素抗性。1型糖尿病多为遗传,2型通常是生活方式导致的结果。 - -> 尽管胰岛素改变了数百万糖尿病患者的生活,但它并非完美的解决方案。最主要的是,它不能口服,因为口服的话,它将先在肠道里分解,无法得到吸收和利用。因此必须采用注射的方式,这是个既烦琐又粗鲁的过程。在健康的人体里,胰岛素水平受监控,且逐秒调整。在糖尿病患者中,只有在患者自我治疗的时候,胰岛素才定期调整。这意味着胰岛素水平[6]在大多数时候都不怎么对头,有可能产生累积的负面效应。 - -> 如此庞大的身躯,竟然是一处微小的腺体发生故障所致,显然十分讽刺。垂体腺通常被称为主腺,因为大部分激素都受它控制。它生成(或调解生成)生长激素、皮质醇、雌激素和睾酮、催产素、肾上腺素,等等。 - -> 这可能是一种很悲伤的疾病,因为症状主要是食欲不振和体重减轻,很容易遭到误诊。 - -> 瘦素不是内分泌腺产生的,而是脂肪细胞所产生。这是一个最惊人的发现。没有人曾想过,除了专属的腺体,激素也能在别的部位产生。事实上,我们现在知道,激素遍布人体:胃里、肺里、肾里、胰腺里、大脑里、骨骼里,到处都是。 - -> 就是为什么患有厌食症的年轻人,青春期大多来得很迟。“如今青春期开始得比历史上任何时期都更早,原因也必定在这里。”沃斯说,“在亨利八世的统治时期,人们到了十六七岁才进入青春期。如今更常见的是11岁。几乎可以肯定这是因为营养得到了改善。”让问题变得更 - -> 对人类男性来说,睾酮主要由睾丸产生,少量来自肾上腺,并且要做三件事:它赋予男性生育能力,带给他低沉的嗓音和胡子等第二性征,还深刻地影响他的行为,让他产生性冲动,偏好冒险和攻击。对女性而言,卵巢和肾上腺各生成大约一半的睾酮,但数量少得多,它虽然提升了女性的性欲,却仁慈地让她们的常识不至于因此受到干扰。 - -> 但它拥有这种能力,对我们中的一些人来说真的很幸运。” - -> 问题是,如果你要求肾脏过长时间进行过滤,它们会感到疲倦,无法正常运转。随着肾脏效率降低,血液中的钠含量变高,你的血压也会危险地升高。随着年龄的增长,肾脏功能衰减得比大多数其他器官更快。从40岁到70岁之间,它们的过滤能力下降了约50%。 - -> 膀胱、胆囊和肾脏有一个共同的不幸特征,那就是容易形成结石。结石是钙和盐变成的硬球。 - -> 淋巴细胞、细胞因子、趋化因子、组胺、中性粒细胞、B细胞、T细胞、NK细胞、巨噬细胞(macrophages)、吞噬细胞(phagocytes)、粒细胞、嗜碱性细胞、干扰素、前列腺素、多功能造血干细胞,以及更多——我的意思是,还要多得多。 - -> 免疫系统不仅仅对付细菌,它还必须对毒素、药物、癌症、外来物体,甚至对你自己的精神状态做出响应。比方说,要是你压力过大或者疲惫不堪[3],就更容易受感染。 - -> 你的免疫系统正不断受到以前从没见过的东西的轰炸,这些东西兴许才刚刚问世——比如不断变异成新形式的流感病毒。因此,你的免疫系统必须能够识别并抗击几乎可以说数量无限多的东西。” - -> 免疫系统的核心是五类不同的白细胞:淋巴细胞、单核细胞、嗜碱粒细胞、中性粒细胞和嗜酸粒细胞。 - -> 从本质上说,发炎是身体为保护自己免受伤害而战斗所产生的热度。受伤部位附近的血管会扩张,让更多的血液流向受伤部位,同时也会带来白细胞抵御入侵者。这导致该部位肿胀,增加周围神经的压力,导致敏感压痛。 - -> 更快。梅达沃随后发现,免疫系统在生命早期就学会了不攻击自己健康正常的细胞。戴维斯向我解释说: - -> 如果一只老鼠在很小的时候就接触过另一只老鼠的皮肤,那么,等前一只老鼠长大,它就能够接受后一只老鼠的皮肤移植。” - -> 哪怕到了19世纪末,科学家仍普遍认为,性别不是由化学物质决定的,而是由外部因素,如饮食、气温甚至女性怀孕初期的情绪等决定的。 - -> 人类实际上根本就不再生[8][3]。壁虎是再生,我们是重组。 - -> 性别可能会稀释我们对后代的个体贡献,但它对整个物种来说功莫大焉。靠着基因的混合和匹配,我们获得了多样性,这带给我们安全和适应力。基因多样性让疾病难以在整个种群内蔓延,还意味着我们可以不断演变。我们可以保留有益的基因,抛弃那些妨碍人类共同幸福的基因。 - -> 我们对威胁性刺激非常敏感,大脑甚至还来不及收到信息,我们的身体就会按照程序做出反应,从疼痛事件中往后撤。 - -> 只有当大脑感受到疼痛时,疼痛才出现[2]。疼痛或许始于大脚趾,但让你哎哟一声叫起来的,是大脑。在那之前,它不是疼痛。” - -> 所有的疼痛都是私人的,而且强烈个性化, - -> 他提出了肌肉的交互神经支配定律,即一块肌肉收缩时,另一块肌肉必然放松——这基本上解释了肌肉的运作原理。 - -> 人类神经有个奇怪的地方:周边神经系统里的神经要是受到损坏,可以愈合并再生,而大脑和脊髓中更为关键的神经则不能。 - -> 一种疾病是否会成为流行病[10],取决于四个因素:它的致命性有多强、它是否擅长寻找新的受害者、控制它是容易还是困难、它对疫苗是否敏感。 - -> 。埃博拉病毒的传染性简直可谓荒唐,一滴比字母“O”大不了多少的血,就可包含一亿个埃博拉病毒颗粒,每一个颗粒都像手榴弹一般。但它传播的速度却非常缓慢。 - -> 不太擅长置人于死地又能广泛传播的病毒,才算是成功的病毒[11],这就是为什么流感是一种长年不断的威胁。 - -## 笔记 - - -> 所有疼痛里最严重、最棘手的一种是所谓的幻肢疼痛,也就说患者感受到来自已经因为事故或截肢而丧失的身体部位的疼痛。我们觉得最厉害的一种疼痛,居然是从已经不再属于身体的部位传来的,这真是太讽刺了。 - -💭 幻痛 - -> 痛苦有一种空白的性质; -无法回忆起 -它是何时开始的,或者 -哪一天它不再存在。 - -💭 人总是习惯于好了伤疤忘了疼 - -> 一种来自军团菌属的新型细菌。它蔓延到了酒店的空调管道,那些不幸的过路人感染,是因为从酒店排出的废气中穿了过去。 - -💭 空气是疾病传输的主要媒介 - -## 书评 - - -## 点评 diff --git a/life/阅读/社会文化/你不可不知的法律常识.md b/life/阅读/社会文化/你不可不知的法律常识.md deleted file mode 100644 index 77f69424..00000000 --- a/life/阅读/社会文化/你不可不知的法律常识.md +++ /dev/null @@ -1,387 +0,0 @@ ---- -title: 你不可不知的法律常识 -description: 酒后出事,同席者承担多大责任?样品误当新品卖,是否构成消费欺诈?车借给朋友出了事故,责任由谁承担?是不是所有的合同都可以采用电子签名?“小三”有权分得遗产吗?夫妻购买的小产权房,离婚时如何分割?父债子还,天经地义吗?借款人跑了,如何讨债?如何约定民间借贷的 -keywords: - - 你不可不知的法律常识 - - 社会文化 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《你不可不知的法律常识》 -- **作者**: 张志强 -- **分类**: 社会文化-法律 -- **ISBN**:9787515819556 -- **出版社**:中华工商联合出版社 - -## 概述 - -酒后出事,同席者承担多大责任?样品误当新品卖,是否构成消费欺诈?车借给朋友出了事故,责任由谁承担?是不是所有的合同都可以采用电子签名?“小三”有权分得遗产吗?夫妻购买的小产权房,离婚时如何分割?父债子还,天经地义吗?借款人跑了,如何讨债?如何约定民间借贷的利息才合法?购买学区房,卖房人不迁走户口怎么办?老赖的住房不会被执行吗?这些问题都是生活中大家非常关注的,也是常常厘不清的。《你不可不知的法律常识》从生活与消费,夫与妻关系、父母与子女、资产与理财、企业经营与管理、诉讼与仲裁、犯罪与刑罚这7个方面入手,选取了与日常生活密切相关的100个问题,用非常接地气的语言,生动而严谨地进行点对点的讲解,非常适合大家查阅式阅读。 - -## 划线 - - -> 如果商家在办卡时没有故意向消费者虚构事实,隐瞒真相,最初的确向消费者提供了服务,只是由于经营不善导致企业倒闭的,并不构成诈骗。 - -> 按照要求,盘查一般由两名以上民警进行;应当身着警服,未穿警服的,应当出示警察证;应当向被盘查人敬礼并告知:“我是xxx(单位)民警,现依法对你进行检查,请你配合。” - -> 如果没有正当理由,拒绝警察查验身份的,警察可能会将当事人带到派出所继续盘查,留置时间一般不超过24小时。 - -> 对被盘问人的留置时间自带至公安机关之时起不超过二十四小时,在特殊情况下,经县级以上公安机关批准,可以延长至四十八小时,并应当留有盘问记录。对于批准继续盘问的,应当立即通知其家属或者其所在单位。对于不批准继续盘问的,应当立即释放被盘问人。 - -> 未办理结婚登记而同居生活的男女关系可分为两种:一是事实婚姻,二是同居关系。事实婚姻是指没有配偶的男女,未办理结婚登记,即以夫妻名义同居生活,周围的人也认为是夫妻关系。 - -> 1994年2月1日以后(即民政部《婚姻登记管理条例》公布实施以后),我们国家不再承认事实婚姻,只按照“同居关系”处理。 - -> 实际上,随意借车给他人,要承担很多法律风险,一旦发生事故还可能要承担赔偿责任。 - -> 目前,对于行人闯红灯在人行道斑马线上发生交通事故,如果机动车不存在超速、没有避让行人等情况,一般是行人负主要责任,驾驶员负次要责任,驾驶员不承担任何责任的情况非常小, - -> 《中华人民共和国道路交通安全法》的立法主旨偏向保护弱者, - -> 当然,如果机动车存在违法驾驶行为,没有避让行人,驾驶员要承担主要责任,一般在70%~80%之间,如有酒驾、毒驾情况的,当然由驾驶员负全责。 - -> 一般的“知假买假”案件,主要分为两种情况,一种是属于普通的消费欺诈,经营者需要“退一赔三”,即除返还消费者已经支付的金额外,还要额外支付相当于商品或服务费用3倍的赔偿,不足500元的,需要赔偿500元。另一种是食品安全领域方面的,生产或者销售不符合食品安全标准的产品,消费者除要求赔偿损失外,还可以向生产者或者销售者要求支付价款10倍的赔偿金,即“假一赔十”。所以,职业打假人的收益丰厚,即便是单价不高的食品,如果购买数量较多的话,赔偿数额也不是一笔小数目。 - -> 过度医疗是医生违背医学规范和伦理准则,脱离病情实际需求,实施不恰当、不规范、不道德的医疗行为,比如过度检查、过度治疗、过度用药等。 - -> 电子签名的作用主要有:一是证明文件的来源,即识别签名人;二是表明签名人对文件内容的确认;三是构成签名人对文件内容正确性和完整性负责的根据。可靠的电子签名和数据电文与手写签名和书面文件具有同样的法律效力。 - -> 根据《中华人民共和国电子签名法》第3条的规定,有几类文书不得使用数据电文的形式,即不能采用电子签名,包括:(1)涉及婚姻、收养、继承等人身关系的;(2)涉及土地、房屋等不动产权益转让的;(3)涉及停止供水、供热、供气、供电等公用事业服务的;(4)法律、行政法规规定的不适用电子文书的其他情形。 - -> “买卖不破租赁”是民法上的一项重要制度,它是指在租赁合同有效期间,租赁物因买卖、继承等使租赁物的所有权发生变更的,租赁合同对新的所有权人仍然有效。 - -> 第二百二十九条 租赁物在租赁期间发生所有权变动的,不影响租赁合同的效力。 - -> 在职场上遭遇性骚扰,可以采取以下救济方法:一是自力救济。可以主动向本人所在单位、行为人所在单位、各级妇联等举报。二是民事救济。可以通过提起民事诉讼的方式要求骚扰人停止骚扰、道歉,并且赔偿精神损失。三是行政救济。《中华人民共和国治安管理处罚法》规定,多次发送淫秽、侮辱或其他信息,干扰他人正常生活的,处5日以下拘留或者500元以下罚款;情节较重的,处5日以上10日以下拘留,可以并处500元以下罚款。性骚扰行为构成违反治安管理行为的,受害人可以要求公安机关按照此规定给予行政处罚。四是刑事救济。根据现行《中华人民共和国刑法》的规定,如果侵害人的骚扰行为出现了强制、暴力等情况,那么有可能构成的罪名包括故意伤害罪(一般是轻伤)、猥亵、侮辱妇女罪或者强奸罪(一般是未遂)。受害人可以进行举报,由司法机关按照《中华人民共和国刑法》规定追究其刑事责任。比如案例中的刘某就构成了强制猥亵妇女罪。 - -> (1)寻找人证。找到能够证明骚扰发生的目击者,而且目击者最好愿意出庭作证,至少要能够提供书面的证言。(2)保存物证。比如收到的骚扰短信、电子邮件、视频、微信、QQ聊天记录等。(3)收集视听资料。录音、录像和照片等都可作为证据。若长期被性骚扰,可以随身携带录音机和摄像机、照相机进行取证。即使是偷录偷拍的资料,只要不侵犯对方合法权益或者违反法律禁止性规定,一般也会取得法院的认可。 - -> 公证业务种类繁多,但并不是所有的公证申请都能受理。公证本身的目的在于预防纠纷、维护权利,一旦公证质量出现问题,公证就会失去公信力,因为公证首先要求的是公证内容必须真实、合法。 - -> 违反了《中华人民共和国婚姻法》的规定,也与社会的公序良俗相背离,因此公证员会拒绝做公证。 - -> 父母与子女之间的关系是自然形成的血缘关系,涉及伦理道德,是与生俱来的,不能通过法律或其他手段人为地加以解除。断绝父子关系、母女关系等要求有悖于法律和人伦常理,自然无法公证。 - -> 《中华人民共和国继承法》规定,代书遗嘱必须要求有两个以上见证人在场见证,由其中一人代书,并需代书人、其他见证人和遗嘱人共同签名确认,且遗嘱见证人不能与继承人有利害关系。 - -> 最后,建议签名后再写上身份证号码,避免同名同姓情况的发生,确保身份的唯一性。为了保险起见,还可以将身份证复印件附在文件的后面。 - -> 离婚是以“夫妻感情是否确已破裂”作为依据 - -> 夫妻关系的现状和有无和好的可能等方面综合判断,而不会单纯以能不能生育子女作为判决离婚的理由。 - -> (1)重婚或有配偶者与他人同居的;(2)实施家庭暴力或虐待、遗弃家庭成员的;(3)有赌博、吸毒等恶习屡教不改的;(4)因感情不和分居满2年的;(5)其他导致夫妻感情破裂的情形。所以,不能生育不是法院判决离婚的法定理由,但可以作为确认夫妻感情破裂的因素之一予以着重考虑。 - -> 第一,要求双方连续两年分居,互不履行夫妻义务。这种分居期限必须是不间断、持续性的分居,通俗讲就是连续两年没有见面,经济上没有互相帮助,生活上也互不关心,也没有履行夫妻义务。 - -> 第二,双方因感情不和而分居。分居的原因不能是工作、学习等客观上造成夫妻异地居住。比如夫妻双方或一方外出打工,由于交通、收入等因素的限制而不能在一起,虽然有分居的事实,但却不是由于感情不和造成的。第三,需经法院调解,且无和好可能。法院审理离婚案件,必须综合双方的婚姻基础、婚后感情、离婚原因、夫妻关系的现状以及有无和好可能等因素。长时间的分居是法院考虑的重要因素之一,但是分居两年并不会自动离婚。 - -> 按照《中华人民共和国老年人权益保障法》和《中华人民共和国婚姻法》的规定,赡养人的范围非常明确,包括婚生子女、非婚生子女、养子女、有抚养关系的继子女以及有负担能力的孙子女、外孙子女,但不包括儿媳、女婿。 - -> 《中华人民共和国继承法》第12条就规定,丧偶儿媳对公婆,丧偶女婿对岳父母尽了主要赡养义务的,可以作为第一顺序继承人。 - -> 保证书的内容是金某的真实表示,属于合法的赠与行为,真实有效,遂判决准许离婚,张某同时获得全部财产。 - -> 某甲与妻子某乙于2002年6月结婚,双方于2002年7月签订了一份协议,其主要内容为:任何一方都要洁身自好,不得发生婚外性行为,否则违约方应向对方补偿名誉损失费及精神损失费30万元。2003年8月,某甲与其他女性发生男女关系,被妻子某乙发现。不久某乙起诉离婚,主张夫妻平分财产的同时,要求某甲按协议另补偿其30万元。法院经过审理,确认双方达成的忠诚协议合法有效,判决某甲支付某乙“违约金”30万元。 - -> 自由和忠实义务不仅仅是法律上的义务,更多的是道德上的义务。婚姻应该由法律规范,法律对于爱情或者情感就无能为力了 - -> 对于年满10周岁的子女,还会征求参考子女本人的意愿。如果孩子已年满18周岁,无须任何人的监护与抚养,此时也就不再存在抚养权变更的问题。 - -> 拟制血亲是指本来没有血缘关系,或没有直接的血缘关系,但法律上确定其地位与血亲相同的亲属。 - -> 在亲子鉴定确认为非婚生子后,法院一般会准予离婚,还会应男方的要求作出以下的判决:一是子女由女方抚养,并由女方承担子女的抚育费;二是女方向男方支付一定数额的精神赔偿金;三是女方返还男方之前所负担的子女抚养费。 - -> 。但债务人老叶已死亡,而叶家两兄弟明确表示放弃对其父遗产的继承,吴某也未能举证证明两兄弟继承其父的遗产,所以两被告无须对其父生前借款承担清偿义务,遂驳回原告吴某的诉讼请求。 - -> 吴某也并非没有救济手段,在老叶的两个儿子放弃继承后,吴某可以向法院起诉,直接申请执行老叶的遗产用于偿还所欠自己的债务,不过前提是老叶尚有遗产可供执行。 - -> 公序良俗 - -> 一般而言,按照《中华人民共和国合同法》的规定,日常生活的开支以及小额的、不以结婚为目的的馈赠属于赠与性质,赠与物的所有权自交付时起转移,受赠方成为赠与物的所有权人,一般不予返还。对于贵重的珠宝首饰、购房、购车等大额的支出,是以双方结婚为目的,因恋爱失败分手而不能结婚的,应当返回赠与一方。 - -> 第一,债权人在3年的诉讼时效期限内,尽快向债务人原居住地或者财产所在地的人民法院提起诉讼,追讨债款。 - -> 不当得利是指一方没有合法根据获得利益而致使他方利益受到损失 - -> 订金属于预付款,而定金是签约的保证,属于“违约”定金。也就是定金不可退,订金是可以退还的。 - -> 借条是借款人向出借人出具的借款书面凭证,它证明双方建立了一种借款合同关系;而欠条是双方基于以前的经济往来而进行结算的一种结算依据, - -> 第一,证明效果不同。借条证明的是借款关系,而欠条证明的是欠款关系。借条形成的原因是特定的借款事实;欠条形成的原因很多,可以基于多种事实而产生,如因买卖产生的欠款、因劳务产生的欠款、因损害赔偿产生的欠款等。“欠”字与“借”字有很大的区别,“欠”反映的是一种“状态”,“借”表明了债权关系是因为借贷而形成,欠条则无法表明债权关系形成的真正原因,因此有欠条不等于一定有借款。所以,在诉讼过程中,出借人必须首先证明欠条形成的事实,向法庭说明欠款形成的原因及提供相关的证据。而拿着借条到法院去起诉,就能比较容易认定借款事实,一般他只需向法院陈述借款的事实经过即可,对方要抵赖很困难。第二,对诉讼时效的影响不同。注明了还款期限的借条和欠条,诉讼时效没有区别,都是从注明的还款期限之日起3年。但是,如果没有注明还款期限,两者的诉讼时效差别就大了。没有注明还款期限的欠条自债务人出具时起,债权人即享有向其主张还款的权利,诉讼时效就开始计算,而一般诉讼时效期间是3年,3年以后再去主张,就会丧失了时效期间;而对于没有注明还款期限的借条,出借人的权利只有在其要求借款人偿还而被借款人拒绝时才被侵害,诉讼时效期间应从借款人拒绝偿还之次日起开始计算3年的诉讼时效,这对保护出借人的利益更为有利。 - -> 法院最终判决由尤某承担偿付20万元借款的连带责任 - -> 按照我国现行法律规定,担保责任分为一般担保和连带责任担保。一般担保是指在债务人通过诉讼仍不能承担债务时,担保人应当承担担保责任;连带担保责任是指债权人可以直接要求债务人和担保人任何一方承担责任,不受债务人有无能力的限制。如果合同上没有注明是一般担保还是连带担保,法律推定为连带担保。 - -> 在签订担保合同时,要看清楚自己承担的是一般担保还是连带担保,以及担保的期限,在允许的情况下尽可能让债务人为自己提供反担保 - -> 仅凭录音无法确定谈话时间、地点、谈话者身份,录音的真实性无法确认,且录音所涉及谈话内容未正面提及本案款项,无法证明与本案款项的关联性,所以驳回原告的诉讼请求。 - -> 银行转账的凭证能够说明一方当事人将借款打款给了另一方,并不能证明两人之间的债权债务关系是因为什么而成立的,即只完成了“钱款已付”的举证,而没有完成“借款合同成立”的举证。 - -> 借条、欠条等借据是证明双方存在借贷合意和借贷关系实际发生的直接证据,具有较强的证明力。 - -> 法院经审理认为,房屋买卖合同签订前1个月,涉案房屋内确曾发生过非正常死亡事件,但原房主未能主动披露,违背了诚实信用原则,对田女士构成欺诈,最终判决撤销双方的房屋买卖合同。 - -> 法定代表人是公司的全权代表,在国家法律、法规以及公司章程规定的职权范围内行使职权、履行义务,代表公司参加民事活动,对公司的生产经营和管理全面负责。法定代表人的权力主要包括对外签字权、财务的控制权、参与诉讼权等。从某种意义上讲,担任了公司的法定代表人,即掌控了公司的核心权力。 - -> 驰名商标 - -> 社会保险属国家强制性法定义务,是不可免除、放弃的。公司将应当缴纳的社保费用直接支付给劳动者本人,即使是双方自愿,有员工的书面承诺书,因为违法了法律的强制性规定,也是一种无效的法律行为,其承诺不具备法律效力。 - -> 劳动者不能胜任工作,经过培训或者调整工作岗位,仍不能胜任工作的,用人单位可以提前解除劳动合同。 - -> 《中华人民共和国劳动合同法》规定,用人单位招用尚未解除劳动合同的劳动者,对原用人单位造成经济损失的,该用人单位应当依法承担连带赔偿责任。 - -> 用人单位在试用期解除劳动合同必须有证据、有理由,并且承担举证责任,否则需承担违法解除后果。公司在录取时就应当明确告知劳动者录用条件,并且要加强考核管理,对于试用期间的表现进行记录与评价,发现不符合录用条件的,要通知员工,最好采用书面形式告知其解除的理由。 - -> ,原告杨某提供的电子邮件和QQ记录能够反映出其在休息日、法定节假日存在加班工作情况,但无法说明加班时间的长短 - -> 劳动合同期满,处于孕期、产期、哺乳期的女职工的劳动合同应当续延至相应的情形消失时终止。 - -> 如果连续两次签订了固定期限劳动合同,那么第三次签订时就可要求与公司签订无固定期限合同。 - -> 未经司法行政机关批准的公民个人与他人签订的有偿法律服务合同,法院不予保护 - -> 原则上诉讼费用由败诉方负担,这是通行的规则,也是常识。 - -> 因此,被告人程某的行为属正当防卫,宣判被告人程某无罪。检察院抗诉后,二审法院驳回抗诉,维持原判。 - -> 正当防卫是指为了使国家、公共利益、本人或者他人的人身、财产和其他权利免受正在进行的不法侵害,而采取的制止不法侵害的行为,通俗讲就是,就是有人来惹事儿时,自己出手做出的自卫。 - -> 目前,我国刑法并没有将虐待动物列入犯罪,因此,虐待动物不能判刑,不会被追究刑事责任,但却有可能招致民事责任。 - -## 笔记 - - -> 根据《中华人民共和国消费者权益保护法》的规定,如发生欺诈行为,经营者需“退一赔三”,即退还消费者已经支付的金额,同时按照消费者购买商品的价款或者接受服务的费用的3倍标准支付赔偿。 - -💭 好想尝试尝试 - -> 车主有过错主要是指其明知车辆有缺陷,并且此缺陷易导致交通事故发生;知道借车人没有驾驶资格,仍然出借车辆;知道借车人缺少驾驶能力,比如饮酒、吸毒、生病等无法安全驾驶车辆等情况。 - -💭 主观行为 - -> 《中华人民共和国侵权责任法》第50条对此情况予以了明确规定,该条规定当事人之间转让并交付机动车,但未办理所有权转移登记,发生交通事故后属于该机动车一方责任的,由受让人承担赔偿责任。这是因为从法理上讲,因车辆已交付,原车主仅仅是名义上的所有人,既不能实际支配该车,也不能从该车的营运中获得利益,所以原车主不应对机动车发生交通事故致人损害承担责任。 - -💭 尊重事实 - -> 纪某所立下的遗嘱也是基于同居关系,这有悖于公序良俗,应属无效行为。在审判实践中,法院一般也支持这一观点,会驳回“小三”要求继承遗产的诉讼请求。 - -💭 有悖公良就会考虑事实 - -> 我国实行婚姻自由,根据《中华人民共和国婚姻法》的规定,只要婚姻双方当事人依法在民政部门办理了离婚登记手续,双方当事人的婚姻关系即宣告解除,所以法律上不存在“假离婚”的概念。 - -💭 法律尊重事实,不谈感情 - -> 1986年,宋先生与朱女士登记结婚,宋先生没有孩子,朱女士是再婚,带着一对儿女与宋先生共同生活,二人婚后也未再生育子女。1993年,朱女士带来的儿女相继离家外出打工,2012年2月,朱女士去世。这时,已经65岁的宋先生没有经济来源,生活困难,而两个继子女都不愿赡养自己。无奈,他将与自己没有血缘关系的这对儿女告上法庭,要求他们赡养自己。法院经审理认为,两被告随其母朱女士与原告宋先生长期共同生活,接受原告的抚养教育,与原告之间形成继父母子女关系,对原告宋先生负有赡养义务,最终酌情判决两被告每人每年分别向宋先生支付赡养费1500元。 - -💭 尊重事实,不能违背社会伦理道德 - -> “订金”与“定金”虽一字之差,但是在法律意义上却相差甚远。 - -💭 定金不退,约定协议 - -> 显然,“凶宅”肯定会影响买房人的居住心情,产生一种恐惧的心理。此外,当事人订立履行合同,应当遵循诚实信用原则,尊重社会公德。 - -💭 尊重公序良知 - -> 法院启动拍卖程序,将房屋拍卖了70多万元,随后法院从差额款中预留20万元作为保障被执行人孙某的生活费用,剩余的款项支付给了邹某。 - -💭 哈哈,生活费 - -> 两人及多人打架斗殴,一方先动手,后动手的一方实施的所谓反击他人的行为,属于互殴行为,不属于正当防卫,因为斗殴双方都在积极追求非法伤害对方的结果。 - -💭 先跑再还击否则就是互殴 - -## 书评 - -> ✨公序良知、主观臆断、客观事实都是法律衡量的重要参考。 - -## 点评 - -个例太多了,并不存在普遍的规则;综合来说就是我提取的三点要素:公序良知、主观臆断、客观事实是法律衡量的重要参考。 - -### 公序良知 - -印象最深的就是如果行人闯红灯,或者乱七八糟的总之就不是开车的原因。但是因为行人是弱者,大部分情况下还是会遵循保护弱者,给予次要的责任。还有就是如果你得理不饶人,但是又违背了社会道德,也会酌情的降低你的既得利益。 - -主要的考虑原因我认为还是维护社会的秩序,避免社会乱套整成一锅粥。 - -### 主观臆断 - -如果你说,我就是要杀张三,然后你还真把他杀了。这就是你的主观行为,也不是说你在什么条件下致使你杀了他,这种主观行为是最重最重最重的。但是如果你是在某种特定的条件下,例如谁打你、抢钱等等,你没有办法,必须主动出击维护自己的权益将他重伤了,这种主观行为就会被保护。 - -但是但是最重要的来了,如果没有第三者的情况下,你如何证明自己的主观行为?所以说主观行为会被考量,但是呢没有依据怎么办?这时候就会参考客观事实。 - -### 客观事实 - -客观事实很简单啦,就比如你欠钱了然后呢,打了借条并且签字画押了。这就证明了客观事实的成立,你再狡辩也是不能逃脱的。客观事实是最大的参考量,总之就是发法律是讲证据的,尊重事实的。如果你被诬陷,出现冤假错案也不是不可能的。 - -但是把客观事实作为证据也是需要一定条件的,也就是说证据的三性:真实性、合法性、关联性以及证明的目的。举个例子来说就是平时很多你认为的聊天记录单独拿出来就没有办法形成证据,很多种情况下都是这样,你偷偷录音也不行。 - -单就从三性:真实性、合法性、关联性以及证明的目的来说,它是一个有限集,必须在特定条件下才可以成为证据。例如我签字了合同,但是没摁手印。出于公序良知,签字也算有效但是远不如 签字画押+视频录像 来的最巨有效! - -## 诉讼流程 - -![1](https://static.7wate.com/img/2022/12/06/b4b3257b16c92.jpg) - -## 应诉答辩和开庭须知 - -### 一、被告收到起诉状后应做什么? - -被告拿到起诉状之后,只有认真细读了诉状,才能知道是: - -- 谁起诉? -- 为什么要起诉? -- 起诉的事实和理由是什么? -- 对方起诉要达到的目的即诉讼请求是什么? - -只有了解了以上这些情况,被告才能做到心中有数,从容应对。为此,被告应细读诉状,并在读完诉状后主要解决这样几个问题: - -#### 1.了解原告的基本情况 - -了解原告的基本情况是被告接到诉状后首先要做到的。例如了解原告的身份情况: - -- 原告是法人还是自然人; -- 原告是群体诉讼主体还是个体诉讼主体; -- 原告是否聘请了律师或其他诉讼代理人参加诉讼。 - -这样做的好处有二个: - -1. 了解原告的身份,便于自己知道与原告的关系以及自己在诉讼中应有的态度; - -2. 了解原告是否聘请律师和其他诉讼代理人,便于考虑自己在诉讼整个过程中的对抗能力,决定是否聘请律师。 - - -一般来说,原告聘请律师,被告也应相应聘请律师;原告未聘请律师,但是已聘请了其他诉讼代理人,或者原告虽未聘请律师,但其本人能言善辩,那么,被告可视自己平时与原告的相处情况来确定是否应聘请律师或其他诉讼代理人。 - -**2.了解诉状中的争议标的** - -所谓争议标的,是指双方当事人就某项权利和义务关系发生纠纷,向人民法院提出要求作出裁判或调解的一种权利义务关系。这种争议标的可以是财物,也可以是智力成果,还可以是行为。被告从争议标的中可以知道原告的起诉原因和起诉意图,了解原被告彼此间产生矛盾的症结所在,便于自己针锋相对,及时作出对策,在诉讼中争取主动。 - -**3.了解诉状中所提的事实和理由** - -原告在诉状中所提的事实和理由是整个诉讼的关键。原告在诉状中所提的事实无非是这样两类: - -- 争议的民事法律关系发生、变更或消灭的法律事实; - -- 当事人的民事权利或合法利益是否确实受到侵害或者发生争议的事实。 - -前一类事实是用来确定原告要求法院保护的实体根据;后一类事实是用来确定原告请求法院保护实体权利的原因。了解以上两种事实之后,被告还应了解原告对这些事实掌握有哪些证据,这些证据的形式如何,是否可靠。 - -#### 4.了解原告在诉状中对案件认定的理由是否充分,是否有法律依据,以及引用法律是否适当等。 - -因为如果原告所提的事实清楚、证据确凿,又有充分理由,那么,其所提的诉讼请求有可能得到法院支持,这样,被告就将败诉。被告要使诉讼结果对自己有利,就应对原告提出的事实和理由进行有力的抗辩,而有力抗辩的基础就是要利用原告已掌握的材料,了解原告为使诉讼得以成立而所做的一切工作。这样做,能使被告知己知彼,并根据原告所提的事实和理由对自己在诉讼中的利害关系进行通盘筹划和安排,然后根据实际情况寻找证据,提出答辩,形成对自己有利的、能推翻原告诉讼请求成立的事实和理由。 - -### 二、收到起诉状,但认为管辖不对,该怎么办? - -简单地说,管辖就是您应当到哪个法院打官司。管辖具体分为“级别管辖”和“地域管辖”两种,前者是您应当到什么级别的法院打官司,后者是您应当到什么地方的法院打官司。  - -如果您收到起诉状后认为管辖不对,您可在答辩期内向法院提出管辖权异议(书),并陈述您相应的事实及理由。要了解管辖有关情况,请参阅本院的《民事管辖须知》。 - -### 三、收到法院的传票,要注意些什么? - -首先您应当仔细查看传票上载明的以下几项内容: - -1. **事由:**主要有两种,开庭审理或开庭宣判。开庭审理说明案件要正式进行审理,或者还要继续审理;开庭宣判说明案件就要有处理结果了。 - -2. **法官和书记员的姓名**:传票上会有承办法官与书记员的姓名和联系方式,有事您可以主动和他们联系。 - -3. **时间**:要根据通知的开庭时间提前安排好工作和生活,确保准时到庭参加庭审,有特殊情况要及时和法官或者书记员联系。 - -4. **地址:**传票上会有法庭的具体位置和法庭编号。 - -**其次请您务必按传票上的时间,准时到庭!** - -原告经传票传唤,无正当理由拒不到庭的,或者未经法庭许可中途退庭的,可以按撤诉处理;被告反诉的,可以缺席判决。被告经传票传唤,无正当理由拒不到庭的,或者未经法庭许可中途退庭的,可以缺席判决。 - -**小案例:** 李某到法院起诉王某,要求其归还借款,法院向双方当事人送达了开庭传票,李某无故不到庭,法院作出裁决,李某的案件按撤诉处理。 - -### 四、有事不能按时出庭,该怎么办? - -您如果有正当理由的,可以向法院申请延期开庭,但是应当在开庭前及时与法官或者书记员联系,提出申请。是否能延期将由法院决定。 - -有以下情形之一的,一般可以延期开庭审理: - -1. 必须到庭的当事人和其他诉讼参与人有正当理由没有到庭的; - -2. 当事人临时提出回避申请的;   - -3. 需要通知新的证人到庭,调取新的证据,重新鉴定、勘验,或者需要补充调查的; - -4. 其他应当延期的情形。 - -**小案例:** 开庭前一天,原告李某突发疾病住院,他向法院申请延期开庭并提供了住院证明,得到准许。 - -### 五、到法院旁听能拍照摄像吗? - -**您不能在庭审时使用照相、录音、摄像等器材,**除此之外,您旁听庭审时,还需注意以下事项: - -1. 不得随意走动,不准吸烟,不准鼓掌、喧哗、吵闹和实施其他妨害审判活动的行为; - -2. 未经许可,不准发言、提问。如对审判活动有意见,可在闭庭后向法院提出; - -3. 开庭期间,不得使用手机等通讯工具。 - -违反法庭纪律将承担相应法律后果: - -对于违反法庭纪律的人,审判人员可以口头警告、训诫,也可以没收录音、录像、摄影器材,责令退出法庭或经院长批准予以罚款、拘留;对哄闹、冲击法庭,侮辱、诽谤、威胁、殴打审判人员等严重扰乱法庭秩序的人,依法追究刑事责任。 - -### 六、能旁听其他人在法院打官司吗? - -**一般是可以的**,因为法院的案件一般公开审理,公开宣判。但是下列人员不得申请旁听庭审: - -1. 不满十八岁的未成年人; - -2. 精神病人和醉酒的人; - -3. 被剥夺政治权利,正在监外服型的人和被监视居住、取保候审的人; - -4. 携带武器、凶器和其他危险物品的人; - -5. 其他有可能妨害法庭秩序的人,例如衣冠不整者。 - -除上述人员限制外,法律规定的不公开审理案件也不能旁听。例如涉及国家秘密、个人隐私的案件,未成年人犯罪的案件等。 - -**小案例:** 老李的侄子小李到法院打离婚官司,老李想去法院旁听庭审并给侄子出出主意,小李的妻子认为离婚案件涉及个人隐私,向法院申请不公开审理,老李不能旁听。 - -## 互联网服务 - -### [裁判文书网](https://wenshu.court.gov.cn/) - -全国法院统一的裁判文书公开平台。 - -### [中国审判流程信息公开网](https://splcgk.court.gov.cn/gzfwww/) - -主要包含:司法解释、诉讼指南、业务文件、案例四大方面,非常具有参考性! - -| 全国法院 | -| ------------------------------------------------------------ | -| [最高法](http://www.court.gov.cn/) [北京](http://bjgy.chinacourt.org/) [天津](http://tjfy.chinacourt.org/) [河北](http://www.hbcourt.org/) [山西](http://shanxify.chinacourt.org/index.shtml) [内蒙古](http://nmgfy.chinacourt.org/) [辽宁](http://lnfy.chinacourt.org/) [吉林](http://jlfy.chinacourt.org/) [黑龙江](http://www.hljcourt.gov.cn/) [上海](http://www.hshfy.sh.cn/shfy/gweb/index.html) [江苏](http://www.jsfy.gov.cn/) [浙江](http://www.zjcourt.cn/) [安徽](http://www.ahcourt.gov.cn/) [福建](http://fjfy.chinacourt.org/) [江西](http://jxfy.chinacourt.org/) [山东](http://www.sdcourt.gov.cn/) [河南](http://www.hncourt.gov.cn/) [湖北](http://hubeigy.chinacourt.org/) [湖南](http://hunanfy.chinacourt.org/index.shtml) [广东](http://www.gdcourts.gov.cn/) [广西](http://gxfy.chinacourt.org/) [海南](http://www.hicourt.gov.cn/bution/default.asp) [重庆](http://cqfy.chinacourt.org/) [四川](http://www.sccourt.gov.cn/) [贵州](http://www.guizhoucourt.gov.cn/) [云南](http://ynfy.chinacourt.gov.cn/index.shtml) [西藏](http://tibet.chinacourt.org/) [陕西](http://sxfy.chinacourt.org/) [甘肃](http://www.chinagscourt.gov.cn/index.htm) [青海](http://qhfy.chinacourt.org/) [宁夏](http://www.nxfy.gov.cn/) [新疆](http://www.xjcourt.org/) [新疆兵团](http://xjbtfy.chinacourt.org/index.shtml) | - -### [国家法律法规数据库](https://flk.npc.gov.cn/) - -国家法律法规数据库由全国人大建立并维护,目前登载中华人民共和国的宪法、法律、行政法规、地方性法规以及司法解释。 - -### [开源法律典籍](https://www.justlaws.cn/) - -Github 开源 html 在线阅读法律 - -### [中国法律快查手册](https://lawrefbook.github.io/) - -Github 开源 html 在线阅读法律 - -### [法天使](https://www.fatianshi.cn/) - -法天使-中国合同库,中国合同标准发起者,已发布上千类标准范本 - -### [国家市场监督管理总局](https://cont.12315.cn/) - -国家合同示范文本库 diff --git a/life/阅读/社会文化/半小时漫画《论语》.md b/life/阅读/社会文化/半小时漫画《论语》.md deleted file mode 100644 index 82e77bfe..00000000 --- a/life/阅读/社会文化/半小时漫画《论语》.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: 半小时漫画《论语》 -description: 担心《论语》看不下去?那是因为不知道,孔子原来这么爱吐槽!通过手绘漫画和爆笑段子,陈磊(笔名:混子哥)领衔的半小时漫画团队,一边向我们展示孔子和弟子们的花式卖萌和吐槽,一边串讲《论语》里的经典章句,让我们在哈哈大笑中学到《论语》里的人生哲理。为什么颜回一生 -keywords: - - 半小时漫画《论语》 - - 社会文化 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《半小时漫画《论语》》 -- **作者**: 陈磊·半小时漫画团队 -- **分类**: 社会文化-文化 -- **ISBN**:9787549636358 -- **出版社**:上海文汇出版社 - -## 概述 - -担心《论语》看不下去?那是因为不知道,孔子原来这么爱吐槽!通过手绘漫画和爆笑段子,陈磊(笔名:混子哥)领衔的半小时漫画团队,一边向我们展示孔子和弟子们的花式卖萌和吐槽,一边串讲《论语》里的经典章句,让我们在哈哈大笑中学到《论语》里的人生哲理。为什么颜回一生贫困潦倒,没做过什么大事,却获得了孔子“不迁怒,不贰过”的赞赏,并成为孔子最喜欢的学生?我们耳熟能详的“知之为知之,不知为不知,是知也”,其实是孔子对子路学习态度不端的吐槽?宰我到底做了什么,逼得孔子爆出了“朽木不可雕也,粪土之墙不可圬也”这样的粗口?翻开本书,看孔子和弟子们卖萌吐槽,人生哲理全学到! - -## 划线 - - -> 子曰:“有教无类。”——《论语·卫灵公》 - -> 子曰:“默而识(zhì)之,学而不厌,诲人不倦,何有于我哉?”——《论语·述而》 - -> 子曰:“人而不仁,如礼何?人而不仁,如乐何?”——《论语·八佾(yì)》 - -> 称作孔门十哲。 - -> 都说缘分天注定,相遇是命运 - -> 所以,各位家长看见了吗?想要让自己的孩子赢在起跑线上,自己得先跑起来! - -> 但颜回总是表现得十分低调,从不显山露水,孔子甚至一度以为他是一个傻子……故事是这样的。 - -> 但关键的一点是要看这个人能否做到:穷,也能穷得开心。 - -> 安贫乐道。 - -> 颜回就不这样。他能设身处地地理解别人,对他人的喜怒哀乐感同身受。 - -> 子路会把陷入困境视作自己的问题,然后开始自我怀疑,这是不自信的表现。 - -> 子曰:“三军可夺帅也,匹夫不可夺志也。”——《论语·子罕》 - -> 不迁怒,不贰过。从来不迁怒于别人,犯过的错绝不再犯第二次。 - -> 子曰:“夫人不言,言必有中。”——《论语·先进》孔子说:“这个人平日不大开口,一开口一定中肯。”[插图]成语言必有中就出自上文,意思是一个人说话总是能说到重点。 - -> 1. 要解决问题,得先找到问题的根本 - -> 2. 为了解决问题,可以转移矛盾 - -> 3. 多次转移矛盾,彻底把水搅浑 - -> 第一课:要充分了解对方的痛点,并给予不露声色的试探 - -> 如切如磋,如琢如磨。 - -> 第二课:面对自己的无知,要虚心而积极地改正 - -> 子贡问曰:“孔文子何以谓之‘文’也?”子曰:“敏而好学,不耻下问,是以谓之‘文’也。”[插图]——《论语·公冶长》 - -> 第三课:对自己的老师,要给予家人般的温暖 - -> 子曰:“莫我知也夫!”[插图]子贡曰:“何为其莫知子也?”[插图]子曰:“不怨天,不尤人,下学而上达。知我者其天乎!”——《论语·宪问》 - -> 宰我:逼得孔子爆粗口的“杠精”学生 - -> 子曰:“知者不惑,仁者不忧,勇者不惧。”——《论语·子罕》孔子说:“聪明的人不迷惑,仁德的人不忧虑,勇敢的人无所畏惧。” - -> ,只有痛苦大于欢乐,才能体现出子女对父母去世的悲伤。 - -> 子曰:“予之不仁也!子生三年,然后免于父母之怀。夫三年之丧,天下之通丧也,予也有三年之爱于其父母乎!”——《论语·阳货》 - -> 二、老师主张天下太平,宰我建议世界大战! - -> 子闻之,曰:“成事不说,遂事不谏,既往不咎。”——《论语·八佾》 - -> 老师说不要逃课、睡觉,宰我说不睡觉会变丑 - -> 宰予昼寝。子曰:“朽木不可雕也,粪土之墙不可圬也。于予与何诛?”——《论语·公冶长》 - -> 子曰:“由,诲女知之乎!知之为知之,不知为不知,是知也。”——《论语·为政》 - -> 子曰:“衣敝(yùn)袍,与衣狐貉者立,而不耻者,其由也与?‘不忮(zhì)不求,何用不臧?’” - -> 他永远活在了《论语》里 - -> 子曰:“不患寡而患不均,不患贫而患不安。”——《论语·季氏》 - -> 子曰:“举直错诸枉,能使枉者直。”——《论语·颜渊》 - -> 子夏曰:“博学而笃志,切问而近思,仁在其中矣。” - -> 子谓子夏曰:“女为君子儒!无为小人儒!”——《论语·雍也》孔子对子夏说:“你要去做一个像君子一样的读书人,而不是去做那种像小人一样的读书人。” - -> 活在充满谎言的家庭,孩子长大后就不会诚实守信,做人的三观都不正了,早晚会闯大祸。所以这猪必须得宰! - -> 今天给老板打工,有没有尽心尽力?是不是上班摸鱼了? - -> 士不可不弘毅,任重而道远。 - -> 他还要教育老百姓,让他们懂道理,提高个人素质,大家相亲相爱,不搞内讧 - -> 曰:“莫春者,春服既成,冠者五六人,童子六七人,浴乎沂(yí),风乎舞雩(yú),咏而归。”——《论语·先进》 - -> 1. 兴趣是最好的老师 - -> 2. 脑筋要动起来啊! - -> 学而不思则罔,思而不学则殆 - -> 子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。” - -> 见贤思齐 - -> 子曰:“见贤思齐焉,见不贤而内自省也。” - -> 别看只是小小一筐,但它只是个开始,只要坚持不懈,每天填一点儿,都是进步。[插图]这就叫譬如平地,虽覆一篑,进, - -> 二、怎样做才能成为君子?1. 格局要大 - -> 2. 多读书,但不要读死书 - -> 3. 不理解我又怎样?开心最重要 - -> 子曰:“非礼勿视,非礼勿听,非礼勿言,非礼勿动。” - -> 这叫朝闻道,夕死可矣。很明显,道比生命还重要。 - -> 逝者如斯夫,不舍昼夜。” - -## 笔记 - - -> 结果三家知道了这件事,认为孔子打算害自己,于是不断排挤孔子,最终把孔子赶出了鲁国。 -孔子只能带着学生们出去找工作,这段经历就是著名的周游列国。 - -💭 原来周游列国是混不下去了哈哈 - -> 子曰:“饭疏食,饮水,曲肱而枕之,乐亦在其中矣。不义而富且贵,于我如浮云。” - -💭 安贫乐道 - -> 所以,马德好才是骥能称为千里马的关键! -把马换成人也是一样的道理,比起才华和颜值,德行才是最重要的。 - -💭 心灵美才是真的美 - -> 作为鲁国政坛上的过来人,孔子给冉雍支了三招: - -💭 先有司、赦小过、举贤才 - -> 入,曰:“伯夷、叔齐何人也?” -[插图] -曰:“古之贤人也。” -[插图] -曰:“怨乎?” -[插图] -曰:“求仁而得仁,又何怨?” -—— - -💭 求仁得仁 - -> 名分这玩意儿非常重要。历史上有很多事,在做之前都要先喊个口号: -[插图] -[插图] -原文及译文 - -💭 明正言顺 - -> 孔子说,无论是钱财还是粮食,拿来帮助富人,那只能叫锦上添花,人家不一定需要;拿来援助穷人,才叫雪中送炭,能救人性命。 - -💭 现如今只能锦上添花,难得雪中送炭 - -> 这就是孔子教学方法的厉害之处:针对学生的不同情况,制订不同的课程方案。 - -💭 因材施教 - -> 三、仁究竟是个啥? -仁是孔子思想的核心,在《论语》中出现了一百多次。 -对于仁,要把握住一个关键点,那就是: -孔子给所有弟子讲的全不一样 - -💭 因材施教 - -## 书评 - -> ✨ - -## 点评 diff --git a/life/阅读/社会文化/民法典与百姓生活100问.md b/life/阅读/社会文化/民法典与百姓生活100问.md deleted file mode 100644 index 36c69115..00000000 --- a/life/阅读/社会文化/民法典与百姓生活100问.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: 民法典与百姓生活100问 -description: 2020年5月28日,第十三届全国人大三次会议以98.5%的高票表决通过《中华人民共和国民法典》,这是新中国成立以来第一部以“法典”命名的法律,其意义注定非凡。《中华人民共和国民法典》即将在2021年1月1日起施行。在此背景下,《民法典与百姓生活100问》 -keywords: - - 民法典与百姓生活100问 - - 社会文化 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《民法典与百姓生活100问》 -- **作者**: 中共重庆市委宣传部 西南政法大学 -- **分类**: 社会文化-法律 -- **ISBN**:9787229156572 -- **出版社**:重庆出版社 - -## 概述 - -2020年5月28日,第十三届全国人大三次会议以98.5%的高票表决通过《中华人民共和国民法典》,这是新中国成立以来第一部以“法典”命名的法律,其意义注定非凡。《中华人民共和国民法典》即将在2021年1月1日起施行。在此背景下,《民法典与百姓生活100问》一书的推出,展示了《民法典》是如何作为社会生活百科全书,为人民群众实现美好生活保驾护航。书稿依据《民法典》的篇章体例分为七篇,分别是总则编14问、物权编18问、合同编20问、人格权编10问、婚姻家庭编10问、继承编12问、侵权责任编16问,总共100问,共计9万余字。写作风格方面,书稿以案例故事加图文解说的趣味方式将《民法典》送到人民群众的身边,走进人民群众的心里。 - -## 划线 - - -> “定金”和“订金”一字之差,含义却大相径庭 - -> 定金”是金钱担保,是指合同当事人于合同订立时或合同履行前,由一方向另一方交付的具有担保性质的资金。 - -> 交付定金的一方不履行义务的,丧失定金;收受定金一方不履行义务的,双倍返还定金。而“订金”不具有担保性,支付订金通常是预付款或先期支付行为。因此,订金支付方不能依据定金罚则要求收取方双倍返还订金。 - -> 婚前财产公证也有利于夫妻双方纯粹、良好感情的维系,稳定婚姻生活。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/社会文化/这里是中国.md b/life/阅读/社会文化/这里是中国.md deleted file mode 100644 index ffb0af40..00000000 --- a/life/阅读/社会文化/这里是中国.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: 这里是中国 -description: 这本书集结星球研究所近3年来中国主题文章的精华,按照中国地势三级阶梯顺序,呈现出荒原到人间的变化,全书收录300余张精致摄影作品,涵盖诗词、动植物、人文等丰富内容,以广阔的地理视角和宏大的时间尺度,重新解读中国故事。以18个关于中国的独特话题,365张具有 -keywords: - - 这里是中国 - - 社会文化 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《这里是中国》 -- **作者**: 星球研究所 中国青藏高原研究会 -- **分类**: 社会文化-文化 -- **ISBN**:9787521701579 -- **出版社**:中信出版集团 - -## 概述 - -这本书集结星球研究所近3年来中国主题文章的精华,按照中国地势三级阶梯顺序,呈现出荒原到人间的变化,全书收录300余张精致摄影作品,涵盖诗词、动植物、人文等丰富内容,以广阔的地理视角和宏大的时间尺度,重新解读中国故事。以18个关于中国的独特话题,365张具有地域代表性的高清摄影作品,串联起中国的地理科普和人文故事。了解中国在时间长河中的起源和变迁、生命和文明的孕育及成长。 - -## 划线 - - -> 有了水,生命也开始绽放。 - -> 王昌龄诗云:青海长云暗雪山,孤城遥望玉门关。黄沙百战穿金甲,不破楼兰终不还。(王昌龄《从军行七首·其四》) - -> 每个人心中都有一个西安。或是秦皇的兵马俑,或是汉唐的长安城,又或是明清的古城墙。 - -> 西安城墙是中国现存规模最大、保存最完整的古代城垣,是第一批全国重点文物保护单位。 - -> 这也许要归因于它对三教九流、各个阶层的容纳。三千年以来,上至王侯将相,下至升斗小民,无数人逐一登临成都这个舞台,共同营建出了一个中国最具人间烟火气的城市。 - -> 窗含西岭千秋雪,门泊东吴万里船。(杜甫《绝句》) - -> 甫在《赠花卿》一诗中记录道:锦城丝管日纷纷,半入江风半入云。此曲只应天上有,人间能得几回闻? - -> 人们会说豪爽山东、天府四川,却很难用一个词来准确表述河南。 - -> 不南不北,不偏不倚,相当“中庸”。 - -> 若问古今兴废事,请君只看洛阳城。(司马光《过故洛阳城》) - -> 造山、造水、造中华,这就是河南。 - -> 最为经典的则是“对景”的运用。对景是中国古代园林设计的经典手法,即从一处景观欣赏另一处景观,两景相对,会产生非常奇妙的视觉美感。 - -> [插图]西湖“曲院风荷” / 摄影 肖奕叁“曲院风荷”位于苏堤北端西侧,是西湖十景之一。除此之外,西湖十景还包括“苏堤春晓”“断桥残雪”“花港观鱼”“柳浪闻莺”“雷峰夕照”“三潭印月”“平湖秋月”“双峰插云”“南屏晚钟”。 - -## 笔记 - - -> “五星出东方利中国”织锦 / 摄影 刘玉生 - -💭 太神奇了 - -## 书评 - -> ✨值得一看 - -## 点评 diff --git a/life/阅读/科学技术/贝尔实验室与美国革新大时代.md b/life/阅读/科学技术/贝尔实验室与美国革新大时代.md deleted file mode 100644 index 0ad134ee..00000000 --- a/life/阅读/科学技术/贝尔实验室与美国革新大时代.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: 贝尔实验室与美国革新大时代 -description: 20世纪20年代初创开始,到20世纪80年代拆分结束,作为美国电话电报公司的研发部门,贝尔实验室一直是世界上创新领域规模最大,而且可以说是最好的实验室。从晶体管到激光,从数字通信到蜂窝电话,现代生活与贝尔实验室可谓息息相关。 - 在《贝尔实验室与美国革新大时代 -keywords: - - 贝尔实验室与美国革新大时代 - - 科学技术 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《贝尔实验室与美国革新大时代》 -- **作者**: 乔恩·格特纳 -- **分类**: 科学技术-自然科学 -- **ISBN**: -- **出版社**:中信出版集团 - -## 概述 - -20世纪20年代初创开始,到20世纪80年代拆分结束,作为美国电话电报公司的研发部门,贝尔实验室一直是世界上创新领域规模最大,而且可以说是最好的实验室。从晶体管到激光,从数字通信到蜂窝电话,现代生活与贝尔实验室可谓息息相关。 在《贝尔实验室与美国革新大时代》中,乔恩·格特纳对20世纪一些最重要的发明进行了追根溯源。文中描绘了数位对当代通信和计算机技术做出过决定性贡献的科学家。他们是:默文·凯利、比尔‘肖克利、克劳德·申农、约翰·皮尔斯,以及比尔·贝克。这些天才宅男才华横溢、行为不合常规,在贝尔实验室度过了自己的职业生涯。同时,本书也赞誉了贝尔实验室那些宽敞且与世隔绝的工作场所,因为天才们可以在那里进行各种尝试,无须担心复杂的人际关系、股民利益或公司收益。 在创新成为一句口头禅的今天。贝尔实验室为我们提供了一条途径,帮助我们丰富对面临的技术革新挑战和解决方案的理解。毕竟贝尔实验室正是管理创新的基本思路的源头。 - -## 划线 - - -> 在谷歌出现之前的那个时代,贝尔实验室被称为美国知识分子的天堂。正是这个地方孕育设计出了当时的未来——也就是如今我们所谓的现在。 - -> 一些当代思想家认为,21世纪的创新只能靠头脑聪明、追逐利润的企业家在激烈的市场竞争中实现。 - -> 巧的是,大萧条时代却让科学知识的发展硕果累累。贝尔实验室被迫缩短员工的工作时间,一些年轻员工因为有空闲时间,就到位于曼哈顿上城的哥伦比亚大学注册攻读学术课程。通常这些员工会选择学习伊西多·艾萨克·拉比教授在哥伦比亚大学讲授的一门课,此人后来也获得了诺贝尔奖 - -> “我认为当时我们并没意识到,后来成为技术核心的一些东西已经近在咫尺,当时很难预料它们还要多久才会出现。” - -> 多年以后,有时候人们会这样认为——这在一定程度上要归功于美国电话电报公司庞大的宣传系统——20世纪三四十年代,科学家加盟贝尔实验室的目的是为了科学的发展,但这其实只是他们工作回报的附属品。 - -> 贝尔系统是商界有史以来单一私人企业控制的、最庞大的资本集团,资金规模超过了宾夕法尼亚铁路公司和美国钢铁有限公司之和。 - -> 不知道该做什么的时候,你就做点儿事情。 - -> 与此相反,所有建筑都连接在一起,以避免部门间那种固定的地理划分,鼓励员工自由交流和密切接触。” - -> 跨学科团队 - -> 到1月下旬的时候,他已经提出了一套晶体管的理论和设计方案,其外观和功能都不同于巴丁和布拉顿的晶体管 - -> 凯利想方设法让布拉顿在贝尔实验室享受无拘无束的自由。布拉顿不再参与晶体管工作,但是他也不必再向肖克利汇报工作,因为他实在无法忍受作为主管的肖克利 - -> 科学并没有神奇之处。我们的研究人员遵循的是明确的计划,而计划则是整个系统的一部分,其中并没有什么魔法。”很少有人当面对凯利的观点提出异议。但在来访者看来,有时候甚至就连科学家也认为,贝尔实验室已经呈现了一丝具有魔力般的风范。而且我们也很难否认,一些完全不科学的因素——比如运气和机遇——在贝尔实验室的创新方面发挥了一定程度的作用。 - -> :当时世界上没有更好的地方适合研究电子继电器,而继电器是整个贝尔系统的转换支柱 - -> 如果你要发送一条信息,你只是从一系列可能会被选中的信息中选择你需要的。接收者对接下来要收到的信息知道得越少,你传给他的信息就越多。 - -> 凯利经常在新员工入职的第一天这样告诉他们:“每天在这里工作7个半小时,你们就能拿到报酬,但升职和加薪取决于你在另外16个半小时里所做的事。 - -> 如果事后认真分析,我们从任何公司取得的最伟大进展中,也许都能找到让这项技术灭亡的开端。 - -> 来改变世界的成果。 - -> 克劳德·申农:信息时代之父 - -## 笔记 - - -> 运气和时机似乎也很重要,因为经常出现的情况是:正确的答案、合适的人、合适的地方——甚至是这三者同时出现——也需要与合适的问题不期而遇。 - -💭 天时地利人和缺一不可 - -> 战争带来了紧迫感 - -💭 战争按下了快进,加速了科技发展 - -> 每间办公室、每个实验室的规格都是6英尺的整数倍,由于间隔墙使用的都是隔音的钢结构材料,可以在很短的时间内做出调整,因此空间随时可以根据需求扩展或缩小。只要空间允许,18英尺长的实验室,可以迅速扩展到24英尺长。每段6英尺长的空间都配备有各种管道,以满足实验人员的基本需求:压缩空气、蒸馏水、蒸汽、天然气、真空装置、氢气、氧气和氮气,而且还有直流电源和交流电源。 - -💭 饥荒 - -> 不过,凯利并没告诉大家这个创意竟然源自一个在工作过程中睡觉的人。 - -💭 灵感来自生活 - -> 首先,如果你的新设备没有大规模量产,那就不算创新;其次,如果你没能找到市场销售这种产品,那么也不算创新。 - -💭 当今的伪需求 - -> 当然,这两种理念并不相互排斥,因为个体和集体对创新都是必要的 - -💭 黑猫白猫能抓老鼠就是好猫 - -> 他提出,这种机器既实用又有经济效益,最终会在某些自动化任务中代替人类。 - -💭 自动化 - -> 创造性技术的研发机构需要稳定的资金支持。物理学家菲尔·安德森说过:“永远不要低估金钱的重要性。 - -💭 资源的重要性不言而喻! - -> 技术的角度看,没有理由马上应用晶体管——至少现在如此。复杂程度令人生畏的电话系统并不欢迎突然的变化,即使这些变化能让系统明显有所改善也是如此。 - -💭 新老交接需要一个缓冲期 - -> 光纤会是未来通信舞台上的主角儿 - -💭 现如今已经成为了必不可缺的主角儿 - -## 书评 - - -## 点评 diff --git a/life/阅读/科学技术/高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例.md b/life/阅读/科学技术/高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例.md deleted file mode 100644 index 27b3607b..00000000 --- a/life/阅读/科学技术/高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例 -description: 《高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例》以Linux运维平台下的开源应用软件为中心,涉及Linux运维的各个方面,主要从系统基础运维、系统性能调优、智能运维监控、运维实战案例4个方面展开介绍。本书贯穿实战、实用、通俗 -keywords: - - 高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例 - - 科学技术 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例》 -- **作者**: 高俊峰编著 -- **分类**: 科学技术-工业技术 -- **ISBN**:9787111655497 -- **出版社**:机械工业出版社 - -## 概述 - -《高性能Linux服务器运维实战:shell编程、监控告警、性能优化与实战案例》以Linux运维平台下的开源应用软件为中心,涉及Linux运维的各个方面,主要从系统基础运维、系统性能调优、智能运维监控、运维实战案例4个方面展开介绍。本书贯穿实战、实用、通俗、易懂的特点,在内容上注重实战化,通过真实的生产环境从多个方面介绍运维工作中的方方面面。通过真实案例的学习,可以使读者深入地掌握Linux运维技术的各种经验和技巧,从而真正提高企业的实战能力。 - -## 划线 - - -> 构建一个智能的运维监控平台,必须以运行监控和故障告警这两个方面为重点,将所有业务系统中所涉及的网络资源、硬件资源、软件资源、数据库资源等纳入统一的运维监控平台中,并通过消除管理软件的差别,数据采集手段的差别,对各种不同的数据来源实现统一管理、统一规范、统一处理、统一展现、统一用户登录、统一权限控制,最终实现运维规范化、自动化、智能化的大运维管理。 - -## 笔记 - - -## 书评 - -> ✨内容滞后,生搬硬套,只有实际生产的事例和思维还凑合吧 - -## 点评 diff --git a/life/阅读/经济理财/半小时漫画股票实战法.md b/life/阅读/经济理财/半小时漫画股票实战法.md deleted file mode 100644 index d064ca33..00000000 --- a/life/阅读/经济理财/半小时漫画股票实战法.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 半小时漫画股票实战法 -description: 任何一个可以在股市稳定盈利的人,背后都有一套自己的交易系统。本书漫画主角王老师是个基层职员,他收入平平,生活普通。但他靠炒股实现了人生大翻转:个人资产超过5亿元,完全实现财务自由,每天工作4小时,不需看人脸色,在全世界多个国家拥有多套海滨度假别墅,而且夫妻 -keywords: - - 半小时漫画股票实战法 - - 经济理财 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《半小时漫画股票实战法》 -- **作者**: 财经杂质 -- **分类**: 经济理财-理财 -- **ISBN**:9787545552140 -- **出版社**:天地出版社 - -## 概述 - -任何一个可以在股市稳定盈利的人,背后都有一套自己的交易系统。本书漫画主角王老师是个基层职员,他收入平平,生活普通。但他靠炒股实现了人生大翻转:个人资产超过5亿元,完全实现财务自由,每天工作4小时,不需看人脸色,在全世界多个国家拥有多套海滨度假别墅,而且夫妻恩爱……王老师说:“要不是股市,我们这种人将一事无成,日子也过得紧巴巴,更别妄想住别墅、开大奔了。”那么,王老师是怎么从血本无归摸索到自己的固定交易系统的呢?本书从指标、均线、成交量、盘口、战法、选股这6个方面,复盘了王老师的成功过程。其中既有基础知识、又有实操技巧,搞笑的漫画配上风趣的语言,读者在轻松阅读中就完成了知识积累,可谓实战扫盲利器,非常适合自学者。 - -## 划线 - - -> 单个股票短时间内暴涨暴跌时有发生,按图索骥的技术推导和预测会完全失效,但是在整体市场长周期的完整趋势中,逆转的意义仍然不容小觑。 - -> 因为执行力远比对错更重要,对错只是让你心动的过客,执行力才是伴你一生的另一半。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/经济理财/小米创业思考.md b/life/阅读/经济理财/小米创业思考.md deleted file mode 100644 index 2e028caa..00000000 --- a/life/阅读/经济理财/小米创业思考.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: 小米创业思考 -description: 雷军首部作品,完整解析创办和经营小米的商业思考。 - 雷军系统梳理30年创业心法和经营哲学,深度复盘“小米模式”,认为取得持续成功的核心在于只干了一件事:坚持“互联网+制造”路线,推动效率革命,实现用户利益和经济效率的最 - 大化。 雷军在书中首度全面公开包括产品 -keywords: - - 小米创业思考 - - 经济理财 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《小米创业思考》 -- **作者**: 雷军 徐洁云 -- **分类**: 经济理财-商业 -- **ISBN**:9787521745276 -- **出版社**:中信出版集团 - -## 概述 - -雷军首部作品,完整解析创办和经营小米的商业思考。 雷军系统梳理30年创业心法和经营哲学,深度复盘“小米模式”,认为取得持续成功的核心在于只干了一件事:坚持“互联网+制造”路线,推动效率革命,实现用户利益和经济效率的最 大化。 雷军在书中首度全面公开包括产品三大铁律、互联网七字诀、高效率模型、爆品模式、生态链要素等,涉及管理、投资、工作等多维度经验,为创业者和管理者提供借鉴和指导,也可以为普通人提供持续精进的头部思维。 - -## 划线 - - -> 我的职业生涯经历了30多年的沉浮摔打, - -> 商业的目的是什么,如何让商业实现最大化的现实意义?我的答案是:效率。它能给最多的人带来最大化的美好幸福感。 - -> 互联网作为技术工具,没有善恶对错,但互联网理想、精神和方法,从互联网出现的第一天开始,就是为了高效、透明、公平和普惠。 - -> 在我看来,互联网终于脱离了幼儿期,开始走向青春期,真正走入苍茫人世,为所有人、所有事赋能。 - -> 数据属于用户 - -> 人家三顾茅庐,我可以三十顾茅庐,不管什么办法,搞得定人才的就是好办法。 - -> 经过认真研究和讨论,我们发现,在智能手机刚起步的当下,打电话、发短信、通讯录和桌面是人们最常用的功能,我们只要集中精力,专注把这4个核心功能模块做好做透就行。一个极其复杂的系统工程就这样被我们高度简化了。 - -> 用户的参与,加上互联网开发模式,让MIUI团队实际上拥有了一支10万人规模的产品开发团队,让MIUI成了体验打磨最细、改进最快的手机操作系统,被人们称为“活的系统”。 - -> 从程序员到管理者,从创业者到投资人,从互联网到硬件,都是认知结构和人生阅历的巨大翻新。这几次重大的蜕变,有的是被动的应变,有的是主动的选择。但无论哪一种,都需要无畏的勇气、坚定的意志、超强的学习能力,以及对抗巨大痛苦的韧性。 - -## 笔记 - - -> 永远相信美好的事情即将发生 - -💭 永远相信美好的事情即将发生 - -> 我始终坚信,互联网应该是尊重人的,而不是束缚人的;互联网应该是解放生产力的推动思维和技术动力,而不是以邻为壑的割裂藩篱 - -💭 我想点名小程序哈哈哈 - -> “答案在风中飘荡”。一路求索,关于商业思考,不同时期的答案一直在我的脑海中回响飘荡。 - -💭 不同的时期,不同的环境,不同的答案 - -> MIUI成了全球第一个每周更新的操作系统。 - -💭 敏捷开发 - -## 书评 - - -## 点评 diff --git a/life/阅读/艺术/江湖丛谈(注音注释插图本).md b/life/阅读/艺术/江湖丛谈(注音注释插图本).md deleted file mode 100644 index 1ce87116..00000000 --- a/life/阅读/艺术/江湖丛谈(注音注释插图本).md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: 江湖丛谈(注音注释插图本) -description: 《江湖丛谈》可谓一本不可多得的奇书。它是我国现存仅有的一部全面介绍江湖行当、行话和内幕的书。作者是已故评书大家连阔如。20世纪30年代,他以云游客的笔名,在北平《时言报》发表长篇连载《江湖丛谈》。1938年由时言报社结集出版,共三集。这本书除了介绍北平天桥 -keywords: - - 江湖丛谈(注音注释插图本) - - 艺术 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《江湖丛谈(注音注释插图本)》 -- **作者**: 连阔如著 贾建国著 连丽如整理 -- **分类**: 艺术-民艺 -- **ISBN**:9787101138504 -- **出版社**:中华书局有限公司 - -## 概述 - -《江湖丛谈》可谓一本不可多得的奇书。它是我国现存仅有的一部全面介绍江湖行当、行话和内幕的书。作者是已故评书大家连阔如。20世纪30年代,他以云游客的笔名,在北平《时言报》发表长篇连载《江湖丛谈》。1938年由时言报社结集出版,共三集。这本书除了介绍北平天桥、天津三不管等地的变迁以及艺人小传、艺人生活状况外,还以大量的篇幅着重记述和揭露了清末至20世纪30年代这一时期江湖行当的内幕以及危害社会的种种骗术,劝诫人们不要贪便宜上当受骗。 - -## 划线 - - -> 第一,身为江湖中人,而又内心纯正,所谓“出污泥而不染”,熟悉江湖内幕和行话以及一切行规。 - -> 父亲只上了半年私学、两年小学,十二岁就当学徒,进过北京的首饰楼、照相馆,天津的杂货铺、中药店;到烟台、大连做过小买卖;摆过卦摊,饱尝了人世间的酸、甜、苦、辣。 - -> 买卖人有三不卖:不够本不卖;赔钱不卖;不赚钱不卖。 - -> 到了乡间,不论是哪个地方,要是有人提倡在那里创立个集场,或是在那里创办个庙会,为首开办的人得先邀生意档子吸引观众。兴隆方面要是没有生意档子参加,任他办理得多善,也吸引不住人儿 - -> 远来的和尚会念经”。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/Flask Web开发:基于Python的Web应用开发实战(第2版).md b/life/阅读/计算机/Flask Web开发:基于Python的Web应用开发实战(第2版).md deleted file mode 100644 index 5fa5b75b..00000000 --- a/life/阅读/计算机/Flask Web开发:基于Python的Web应用开发实战(第2版).md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Flask Web开发:基于Python的Web应用开发实战(第2版) -description: 本书共分三部分,全面介绍如何基于Python微框架Flask进行Web开发。第一部分是Flask简介,介绍使用Flask框架及扩展开发Web程序的必备基础知识。第二部分则给出一个实例,真正带领大家一步步开发完整的博客和社交应用Flasky,从而将前述知识融 -keywords: - - Flask Web开发:基于Python的Web应用开发实战(第2版) - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《Flask Web开发:基于Python的Web应用开发实战(第2版)》 -- **作者**: 米格尔·格林贝格 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115489456 -- **出版社**:人民邮电出版社 - -## 概述 - -本书共分三部分,全面介绍如何基于Python微框架Flask进行Web开发。第一部分是Flask简介,介绍使用Flask框架及扩展开发Web程序的必备基础知识。第二部分则给出一个实例,真正带领大家一步步开发完整的博客和社交应用Flasky,从而将前述知识融会贯通,付诸实践。第三部分介绍了发布应用之前必须考虑的事项,如单元测试策略、性能分析技术、Flask程序的部署方式等。第2版针对Python 3.6全面修订。 - -## 划线 - - -> Flask自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强健核心,其他功能则可通过扩展实现 - -> 这两个过程分别称为业务逻辑和表现逻辑。 - -> 不过近年来文档数据库和键–值对数据库成了流行的替代选择,这两种数据库合称NoSQL数据库。 - -> NoSQL数据库一般使用集合代替表,使用文档代替记录 - -> 选择数据库框架时,不一定非得选择已经集成了Flask的框架,但选择这样的框架可以节省编写集成代码的时间。使用集成了Flask的框架可以简化配置和操作,所以专门为Flask开发的扩展是你的首选。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/Linux是怎样工作的.md b/life/阅读/计算机/Linux是怎样工作的.md deleted file mode 100644 index b17243bc..00000000 --- a/life/阅读/计算机/Linux是怎样工作的.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Linux是怎样工作的 -description: 本书结合大量实验程序和图表,通俗易懂地介绍了Linux操作系统的运行原理和硬件的基础知识,涉及进程管理、进程调度器、内存管理、存储层次、文件系统和外部存储器等。实验程序使用C语言和Python编写,读者可亲自动手运行程序,来确认系统的行为。另外,以图解的方 -keywords: - - Linux是怎样工作的 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《Linux是怎样工作的》 -- **作者**: 武内觉 著 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115581617 -- **出版社**:人民邮电出版社有限公司 - -## 概述 - -本书结合大量实验程序和图表,通俗易懂地介绍了Linux操作系统的运行原理和硬件的基础知识,涉及进程管理、进程调度器、内存管理、存储层次、文件系统和外部存储器等。实验程序使用C语言和Python编写,读者可亲自动手运行程序,来确认系统的行为。另外,以图解的方式介绍各知识点,简明且直观,能够帮助读者加深理解。读者只需对Linux基本命令有所了解,即可轻松阅读。 本书适合应用程序开发人员、系统设计师、运维管理人员和技术支持人员等人士阅读。 - -## 划线 - - -> 负责任意一层的人,只需了解比他负责的那一层更深的一层就可以了。 - -> ●中间件:将对大部分应用程序通用的功能分离出来,以辅助应用程序运行的程序,例如Web服务器、数据库系统 - -> [插图]图3-2 启动另一个程序的流程下面来详细说明这一流程。首先,读取可执行文件,以及创建进程的内存映像所需的信息。可执行文件中不仅包含进程在运行过程中使用的代码与数据,还包含开始运行程序时所需的数据。●包含代码的代码段在文件中的偏移量、大小,以及内存映像的起始地址●包含代码以外的变量等数据的数据段在文件中的偏移量、大小,以及内存映像的起始地址 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/Python工匠:案例、技巧与工程实践.md b/life/阅读/计算机/Python工匠:案例、技巧与工程实践.md deleted file mode 100644 index c7a29a40..00000000 --- a/life/阅读/计算机/Python工匠:案例、技巧与工程实践.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -title: Python工匠:案例、技巧与工程实践 -description: 本书基于受欢迎的“Python工匠”系列开源文章。全书从工程实践角度出发,通过剖析核心知识、展示典型案例与总结实用技巧,帮助大家系统进阶Python,写好工程代码,做好实践项目。 本书共计13章,分为五大部分:变量与基础类型、语法结构、函数与装饰器、面向 -keywords: - - Python工匠:案例、技巧与工程实践 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《Python工匠:案例、技巧与工程实践》 -- **作者**: 朱雷 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115584045 -- **出版社**:人民邮电出版社有限公司 - -## 概述 - -本书基于受欢迎的“Python工匠”系列开源文章。全书从工程实践角度出发,通过剖析核心知识、展示典型案例与总结实用技巧,帮助大家系统进阶Python,写好工程代码,做好实践项目。 本书共计13章,分为五大部分:变量与基础类型、语法结构、函数与装饰器、面向对象编程、总结与延伸,涵盖Python编程的方方面面。本书的写作方式别具一格,核心知识点都会通过三大板块来阐述:基础知识、案例故事、编程建议。其中基础知识帮助大家快速回顾Python基础;案例故事由作者经历的编程项目与案例改编而来,兼具实战性与趣味性;编程建议以大家喜闻乐见的条目式知识点呈现,短小精悍,可直接应用于自己的编程实践中。 - -## 划线 - - -> 即便两个人实现同一个功能,最终效果看上去也一模一样,但代码质量却可能有着云泥之别。 - -> 我前前后后读过一些书——《代码大全》《重构》《设计模式》《代码整洁之道》——毫无疑问,它们都是领域内首屈一指的经典好书,我从中学到了许多知识,至今受益匪浅。 - -> 编程是一个通过代码来表达思想的过程。 - -> 变量与注释是作者表达思想的基础,是读者理解代码的第一道门,它们对代码质量的贡献毋庸置疑。 - -> 除了上面的普通解包外,Python还支持更灵活的动态解包语法。只要用星号表达式(*variables)作为变量名,它便会贪婪[插图]地捕获多个值对象,并将捕获到的内容作为列表赋值给variables。 - -> 在常用的诸多变量名中,单下划线_是比较特殊的一个。它常作为一个无意义的占位符出现在赋值语句中。_这个名字本身没什么特别之处,这算是大家约定俗成的一种用法。 - -> 相比编写Sphinx格式文档,我其实更推荐使用类型注解,因为它是Python的内置功能,而且正在变得越来越流行。 - -> 因此,我强烈建议在多人参与的中大型Python项目里,至少使用一种类型注解方案——Sphinx格式文档或官方类型注解都行。 - -> 计算机科学领域只有两件难事:缓存失效和命名。 - -> 描述代码为什么要这么做,而不是简单复述代码本身。 - -> 指引性注释。这种注释并不直接复述代码,而是简明扼要地概括代码功能,起到“代码导读”的作用。 - -> 这些变化让整段代码变得更易读,也让整个算法变得更好理解。所以,哪怕是一段不到10行代码的简单函数,对变量和注释的不同处理方式,也会让代码发生质的变化 - -> 喜欢把所有变量初始化定义写在一起,放在函数最前面 - -> 总是从代码的职责出发,而不是其他东西。 - -> 直接翻译业务逻辑的代码,大多不是好代码。优秀的程序设计需要在理解原需求的基础上,恰到好处地抽象,只有这样才能同时满足可读性和可扩展性方面的需求 - -> 定义一个临时变量”是诸多方式里不太起眼的一个,但用得恰当的话效果也很巧妙。 - -> 函数内变量的数量太多,通常意味着函数过于复杂,承担了太多职责。只有把复杂函数拆分为多个小函数,代码的整体复杂度才可能实现根本性的降低。 - -> 这样的代码就像删掉赘语的句子,变得更精练、更易读。 - -> 在编写了许多函数以后,我总结出了一个值得推广的好习惯:先写注释,后写代码。 - -> 在写出一句有说服力的接口注释前,别写任何函数代码。 - -> 在定义数值字面量时,如果数字特别长,可以通过插入_分隔符来让它变得更易读 - -> True和False这两个布尔值可以直接当作1和0来使用 - -> f-string格式化方式用起来最方便 - -> 首先创建一个空列表,然后把需要拼接的字符串都放进列表,最后调用str.join来获得大字符串 - -> 把数字字面量改成常量和枚举类型后,我们就能很好地规避输入错误问题。同样,把字符串字面量改写成枚举类型,也可以获得这种好处 - -> 如果需要验证某个“经验之谈”,dis和timeit两个优秀的工具可以帮到你:前者能让你直接查看编译后的字节码,后者则能让你方便地做性能测试。 - -> Python里的字典在底层使用了哈希表(hash table)数据结构。当你往字典里存放一对key: value时,Python会先通过哈希算法计算出key的哈希值——一个整型数字;然后根据这个哈希值,决定数据在表里的具体位置。 - -> 集合只能存放可哈希对象 - -> 当我们把某个对象放进集合或者作为字典的键使用时,解释器都需要对该对象进行一次哈希运算,得到哈希值,然后再进行后面的操作。 - -> 虽然都是返回结果,但yield和return的最大不同之处在于,return的返回是一次性的,使用它会直接中断整个函数执行,而yield可以逐步给调用方生成结果: - -> 我们有时会过于喜欢用not关键字,反倒忘记了运算符本身就可以表达否定逻辑。最后,代码里会出现许多下面这种判断语句: - -> 异常处理对于我来说,就是一些不想做却又不得不做的琐事 - -> 在Python世界里,EAFP指不做任何事前检查,直接执行操作,但在外层用try来捕获可能发生的异常。如果还用下雨举例,这种做法类似于“出门前不看天气预报,如果淋雨了,就回家后洗澡吃感冒药”。 - -> Python里的函数可以一次返回多个值(通过返回一个元组实现)。所以,当我们要表明函数执行出错时,可以让它同时返回结果与错误信息。 - -> 新函数拥有更稳定的返回值类型,它永远只会返回Item类型或是抛出异常。· 虽然我们鼓励使用异常,但异常总是会不可避免地让人“感到惊讶”,所以,最好在函数文档里说明可能抛出的异常类型。· 不同于返回值,异常在被捕获前会不断往调用栈上层汇报。因此create_item()的直接调用方也可以完全不处理CreateItemError,而交由更上层处理。异常的这个特点给了我们更多灵活性,但同时也带来了更大的风险。具体来说,假如程序缺少一个顶级的统一异常处理逻辑,那么某个被所有人忽视了的异常可能会层层上报,最终弄垮整个程序。 - -> 上下文管理器功能强大、用处很多,其中最常见的用处之一,就是简化异常处理工作。 - -> 除了应该避免抛出高于当前抽象级别的异常外,我们同样应该避免泄露低于当前抽象级别的异常 - -> 在数据校验这块,pydantic模块是一个不错的选择。 - -> 在编写代码时,我们应当尽量避免手动校验任何数据。因为数据校验任务独立性很强,所以应该引入合适的第三方校验模块(或者自己实现),让它们来处理这部分专业工作。 - -> 可迭代对象不一定是迭代器,但迭代器一定是可迭代对象;· 对可迭代对象使用iter()会返回迭代器,迭代器则会返回其自身;· 每个迭代器的被迭代过程是一次性的,可迭代对象则不一定;· 可迭代对象只需要实现__iter__方法,而迭代器要额外实现__next__方法。 - -> 生成器(generator)利用其简单的语法,大大降低了迭代器的使用门槛,是优化循环代码时最得力的帮手。 - -> enumerate()是Python的一个内置函数,它接收一个可迭代对象作为参数,返回一个不断生成(当前下标,当前元素)的新可迭代对象。 - -> “修饰可迭代对象”是指用生成器(或普通的迭代器)在循环外部包装原本的循环主体,完成一些原本必须在循环内部执行的工作——比如过滤特定成员、提供额外结果等,以此简化循环代码。 - -> product()接收多个可迭代对象作为参数,然后根据它们的笛卡儿积不断生成结果: - -> 用product()优化函数里的嵌套循环 - -> takewhile(predicate, iterable)会在迭代第二个参数iterable的过程中,不断使用当前值作为参数调用predicate()函数,并对返回结果进行真值测试,如果为True,则返回当前值并继续迭代,否则立即中断本次迭代。 - -> for循环(和while循环)后的else关键字,代表如果循环正常结束(没有碰到任何break),便执行该分支内的语句。因此,老式的“循环+标记变量”代码,就可以利用该特性简写为“循环+else分支” - -> 因为Python语言不支持“带标签的break”语句[插图],无法用一个break跳出多层循环。 - -> 为了规避这个问题,使用None来替代可变类型默认值是比较常见的做法: - -> 当你要调用参数较多(超过3个)的函数时,使用关键字参数模式可以大大提高代码的可读性。 - -> 每个函数只返回一种类型,变得更简单易用。 - -> 适合返回None的函数需要满足以下两个特点:(1)函数的名称和参数必须表达“结果可能缺失”的意思;(2)如果函数执行无法产生结果,调用方也不关心具体原因。 - -> 除了“搜索”“查询”几个场景外,对绝大部分函数而言,返回None并不是一个好的做法。 - -> 在编写函数时,请不要纠结函数是不是应该只有一个return,只要尽早返回结果可以提升代码可读性,那就多多返回吧。 - -> 为了简化函数调用,让代码更简洁,我们其实可以定义一个接收单个参数的double()函数,让它通过multiply()完成计算:def double(value): # 返回 multiply 函数调用结果 return multiply(2, value)# 调用代码变得更简单result = double(value)val = double(number) - -> 原来,在使用re.sub(pattern, repl, string)函数时,第二个参数repl不光可以是普通字符串,还可以是一个可调用的函数对象。 - -> 截至上一个问题,小R所写的mosaic_matchobj()函数只是一个无状态函数。但为了满足新需求,小R需要调整mosaic_matchobj()函数,把它从一个无状态函数改为有状态函数。 - -> 闭包是一种非常有用的工具,非常适合用来实现简单的有状态函数。 - -> 权衡了这三种方案的利弊后 - -> 别写太复杂的函数 - -> Python里的递归因为缺少语言层面的优化,局限性较大。当你想用递归来实现某个算法时,请先琢磨琢磨是否能用循环来改写。如果答案是肯定的,那就改成循环吧。 - -> 装饰器并不提供任何独特的功能,它所做的,只是让我们可以在函数定义语句上方,直接添加用来修改函数行为的装饰器函数 - -> 装饰器是一种通过包装目标函数来修改其行为的特殊高阶函数,绝大多数装饰器是利用函数的闭包原理实现的。 - -> 添加@wraps(wrapped)来装饰decorated函数后,wraps()首先会基于原函数func来更新包装函数decorated的名称、文档等内置属性,之后会将func的所有额外属性赋值到decorated上 - -> 所以,装饰器的优势并不在于它提供了动态修改函数的能力,而在于它把影响函数的装饰行为移到了函数头部,降低了代码的阅读与理解成本。 - -> (1) 运行时校验:在执行阶段进行特定校验,当校验通不过时终止执行。· 适合原因:装饰器可以方便地在函数执行前介入,并且可以读取所有参数辅助校验。· 代表样例:Django框架中的用户登录态校验装饰器@login_required。(2) 注入额外参数:在函数被调用时自动注入额外的调用参数。· 适合原因:装饰器的位置在函数头部,非常靠近参数被定义的位置,关联性强。· 代表样例:unittest.mock模块的装饰器@patch。(3) 缓存执行结果:通过调用参数等输入信息,直接缓存函数执行结果。· 适合原因:添加缓存不需要侵入函数内部逻辑,并且功能非常独立和通用。· 代表样例:functools模块的缓存装饰器@lru_cache。(4) 注册函数:将被装饰函数注册为某个外部流程的一部分。· 适合原因:在定义函数时可以直接完成注册,关联性强。· 代表样例:Flask框架的路由注册装饰器@app.route。(5)替换为复杂对象:将原函数(方法)替换为更复杂的对象,比如类实例或特殊的描述符对象(见12.1.3节)。· 适合原因:在执行替换操作时,装饰器语法天然比foo = staticmethod(foo)的写法要直观得多。· 代表样例:静态类方法装饰器@staticmethod。在设计新的装饰器时,你可以先参考上面的常见装饰器功能列表,琢磨琢磨自己的设计是否能很好地发挥装饰器的优势。切勿滥用装饰器技术,设计出一些天马行空但难以理解的API。吸取前人经验,同时在设计上保持克制,才能写出更好用的装饰器。 - -> 私有属性是“君子协定” - -> 在Python里,所有的类属性和方法默认都是公开的,不过你可以通过添加双下划线前缀__的方式把它们标示为私有。 - -> 和普通方法相比,静态方法不需要访问实例的任何状态,是一种与状态无关的方法,因此静态方法其实可以改写成脱离于类的外部普通函数。 - -> 使用@property装饰器,你可以把上面的get_basename()方法变成一个虚拟属性,然后像使用普通属性一样使用它 - -> @property是个非常有用的装饰器,它让我们可以基于方法定义类属性,精确地控制属性的读取、赋值和删除行为,灵活地实现动态属性等功能。 - -> 在超过90%的情况下,你能找到的合理的Python代码就如上所示:没有任何类型检查,想做什么就直接做。你肯定想问,假如调用方提供的fp参数不是文件对象怎么办?答案是:不怎么办,直接报错就好。示例如下。 - -> 总结一下,抽象类通过__subclasshook__钩子和.register()方法,实现了一种比继承更灵活、更松散的子类化机制,并以此改变了isinstance()的行为。 - -> super()使用的其实不是当前类的父类,而是它在MRO链条里的上一个类。 - -> 大多数情况下,你需要的并不是多重继承,而也许只是一个更准确的抽象模型,在该模型下,最普通的继承关系就能完美解决问题。 - -> 元类控制着类的创建行为,就像普通类控制着实例的创建行为一样。 - -> 但继承是一种类与类之间紧密的耦合关系。让子类继承父类,虽然看上去毫无成本地获取了父类的全部能力,但同时也意味着,从此以后父类的所有改动都可能影响子类。继承关系越复杂,这种影响就越容易超出人们的控制范围。 - -> 针对事物的行为建模,而不是对事物本身建模。 - -> 在多数情况下,基于事物的行为来建模,可以孵化出更好、更灵活的模型设计。 - -> 即使B和A是同类,那它们真的需要用继承来表明类型关系吗?要知道,Python是鸭子类型的,你不用继承也能实现多态。 - -> 多态(polymorphism)是面向对象编程的基本概念之一。它表示同一个方法调用,在运行时会因为对象类型的不同,产生不同效果。 - -> SOLID单词里的5个字母,分别代表5条设计原则。· S:single responsibility principle(单一职责原则,SRP)。· O:open-closed principle(开放–关闭原则,OCP)。· L:Liskov substitution principle(里式替换原则,LSP)。· I:interface segregation principle(接口隔离原则,ISP)。· D:dependency inversion principle(依赖倒置原则,DIP)。 - -> 单一职责是面向对象领域的设计原则,通常用来形容类。而在Python中,单一职责的适用范围不限于类——通过定义函数,我们同样能让上面的代码符合单一职责原则。 - -> 这世间唯一不变的,只有变化本身。 - -> 虽然继承功能强大,但它并非通往OCP的唯一途径。除了继承外,我们还可以采用另一种思路:组合(composition)。更具体地说,使用基于组合思想的依赖注入(dependency injection)技术 - -> 但是,如果少了PostFilter抽象类,当编写HNTopPostsSpider类的__init__方式时,我就无法给post_filter增加类型注解了——post_filter: Optional[这里写什么?],因为我根本找不到一个具体的类型。 - -> 但数据驱动也有一个缺点:它的可定制性不如其他两种方式。举个例子,假如我想以“链接是否以某个字符串结尾”来进行过滤,现在的数据驱动代码就做不到。影响每种方案可定制性的根本原因在于,各方案所处的抽象级别不一样。比如,在依赖注入方案下,我选择抽象的内容是“条目过滤行为”;而在数据驱动方案下,抽象内容则是“条目过滤行为的有效站点地址”。很明显,后者的抽象级别更低,关注的内容更具体,所以灵活性不如前者。 - -> LSP认为,所有子类(派生类)对象应该可以任意替代父类(基类)对象使用,且不会破坏程序原本的功能。 - -> 在Python 3.8版本里,类型注解typing模块增加了一个名为“协议”(Protocol)的类型。从各种意义上来说,Protocol都比抽象类更接近传统的“接口”。 - -> 更丰富的接口协议,意味着更高的实现成本,也更容易给实现方带来麻烦。 - -> 描述符(descriptor)是Python对象模型里的一种特殊协议,它主要和4个魔法方法有关: __get__、__set__、__delete__和__set_name__。从定义上来说,除了最后一个方法__set_name__以外,任何一个实现了__get__、__set__或__delete__的类,都可以称为描述符类,它的实例则叫作描述符对象。 - -> 现在你应该明白了,一个对象的__del__方法,并非在使用del语句时被触发,而是在它被作为垃圾回收时触发。del语句无法直接回收任何东西,它只是简单地删掉了指向当前对象的一个引用(变量名)而已 - -> TDD(test-driven development,测试驱动开发)是由Kent Beck提出的一种软件开发方式。在TDD工作流下,要对软件做一个改动,你不会直接修改代码,而会先写出这个改动所需要的测试用例。TDD的工作流大致如下:(1)写测试用例(哪怕测试用例引用的模块根本不存在);(2)执行测试用例,让其失败;(3)编写最简单的代码(此时只关心实现功能,不关心代码整洁度);(4)执行测试用例,让测试通过;(5)重构代码,删除重复内容,让代码变得更整洁;(6)执行测试用例,验证重构;(7)重复整个过程。 - -> 你应该了解这些理论,越多越好,但是千万不要陷入教条主义。因为在现实世界里,每个人参与的项目千差万别,别人的理论不一定适用于你,如果盲目遵从,反而会给自己增加麻烦。 - -## 笔记 - - -> 编程最初带给我们的快乐已悄然远去,写代码这件事现在变得有些痛苦。更有甚者,一想到项目里的烂代码,每天起床后最想干的一件事就是辞职。 - -💭 哈哈哈真实 - -> 所以简单来说,抽象就是一种选择特征、简化认知的手段。接下来,我们看看抽象与软件开发的关系。 - -💭 抽离出来普遍具有的特征现象 - -> 如果某个函数的圈复杂度超过10,就代表它已经太复杂了,代码编写者应该想办法简化。优化写法或者拆分成子函数都是不错的选择。 - -💭 代码复杂度 - -> 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以称为鸭子。 -——来自“鸭子类型”的维基百科词条 - -💭 鸭子类型 - -> 所有与数据模型有关的方法,基本都以双下划线开头和结尾,它们通常被称为魔法方法(magic method)。 - -💭 魔法方法 - -> 所以,写单元测试不是浪费时间,也不会降低开发效率。你在单元测试上花费的那点儿时间,会在未来的日子里为项目的所有参与者节约不计其数的时间。 - -💭 重要的单元测试 - -> 不要掉进完美主义的陷阱。 - -💭 不要让完美主义成为你的绊脚石! - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/Python编程:从入门到实践(第2版).md b/life/阅读/计算机/Python编程:从入门到实践(第2版).md deleted file mode 100644 index 1fe898a4..00000000 --- a/life/阅读/计算机/Python编程:从入门到实践(第2版).md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Python编程:从入门到实践(第2版) -description: 本书是针对所有层次Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括强大的Python库和工具,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个 -keywords: - - Python编程:从入门到实践(第2版) - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《Python编程:从入门到实践(第2版)》 -- **作者**: 埃里克·马瑟斯 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115546081 -- **出版社**:人民邮电出版社 - -## 概述 - -本书是针对所有层次Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括强大的Python库和工具,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的2D游戏、利用数据生成交互式的信息图以及创建和定制简单的Web应用,并帮助读者解决常见编程问题和困惑。第2版进行了全面修订,简化了Python安装流程,新增了f字符串、get()方法等内容,并且在项目中使用了Plotly库以及新版本的Django和Bootstrap,等等。 - -## 划线 - - -> 要关闭该终端会话,可按Ctrl + Z、再按回车键,也可执行命令exit()。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/UNIX传奇:历史与回忆.md b/life/阅读/计算机/UNIX传奇:历史与回忆.md deleted file mode 100644 index 673c288d..00000000 --- a/life/阅读/计算机/UNIX传奇:历史与回忆.md +++ /dev/null @@ -1,270 +0,0 @@ ---- -title: UNIX传奇:历史与回忆 -description: 自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。本书不但书写Unix的历史,而且记录作者的回忆,一探Unix的起源,试图解释什么是Uni -keywords: - - UNIX传奇:历史与回忆 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《UNIX传奇:历史与回忆》 -- **作者**: 布莱恩·W.克尼汉 -- **分类**: 计算机-计算机综合 -- **ISBN**:9787115557179 -- **出版社**:人民邮电出版社 - -## 概述 - -自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。本书不但书写Unix的历史,而且记录作者的回忆,一探Unix的起源,试图解释什么是Unix,Unix是如何产生的,以及Unix为何如此重要。除此之外,本书以轻松的口吻讲述了一群在贝尔实验室工作的发明天才的有趣往事,本书中每一个故事都是鲜为人知却又值得传播的宝贵资源。本书适合对计算机或相关历史感兴趣的人阅读。读者不需要有太多的专业技术背景,就可以欣赏Unix背后的思想,了解它的重要性。 - -## 划线 - - -> 自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。 - -> 你的能力不可能超越你的鉴赏力。 - -> 软件技术的“皇冠明珠”就是操作系统。 - -> Unix的创造者奠定了操作系统的标准基石,Unix的“分而治之”设计哲学——让每个程序做好一件事;要做一件新的工作,就构建新程序,而不是通过增加新“特性”使旧程序复杂化——被优秀程序员奉为圭臬。 - -> 一大批天才人物聚集在一起,没有生活的压力,没有KPI的烦恼,自由地探索科学的发展和应用。 - -> 愿原力与你同在! - -> 格蕾丝•霍珀(Grace Hopper,1906—1992),她在UNIVAC I大型机上开发出了一个名为A-0(Arithmetic Language version 0)的特殊软件,这个软件可以把人类书写的程序自动编译为可以在计算机上执行的程序。这样的程序很快被赋予一个专有的名称——编译器。 - -> 软件世界变得日益复杂之后,这个世界亟待出现一个优秀的“管理者”,它能很好地统筹宝贵的硬件资源,为不同功能的应用软件提供丰富的基础设施和安全公平的“生存”环境,为不同身份的用户提供简单易用的人机接口。 - -> 以我之见,程序员的追求就是让机器听话,让工作自动化,让人类生活更美好。 - -> 回忆往往披着玫瑰色的光晕,令人欢欣。回忆常驻于美好而持久的事物上,也常驻于因努力改善人类生活而获得的愉悦之中。” - -> 带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。 - -> 例如,Unix软件哲学倡导合用既有软件,完成很多不同任务,而不是从头写个新软件。这个例子简明又生动,它在编程领域体现了“分而治之”的故技:将大任务切分为多个小任务,每个小任务都变得更可控,然后再以各种不可思议的方式将之整合到一起。 - -> 一套策略,一个系统,普遍服务 - -> 1961年的贝尔实验室(贝尔实验室供图) - -> 真不少。谁给他们发工资呢? - -> 持续的资金投入是研究工作的关键保障 - -> 我出生于多伦多,曾就读于多伦多大学,专业是工程物理(后来改名为工程科学),这是为那些自己也不知道想学什么的人准备的“大杂烩”专业。 - -> 我的代码充斥着没完没了的IF语句,在我想到要做什么事时,将执行流程分支到另外某处。 - -> 我在麻省理工学院名义上的老板是费尔南多·科巴托(Fernando Corbató)教授,人人都叫他“科尔比(Corby)”。他创建了CTSS,负责Multics,是一位了不起的绅士。1990年,科尔比因其为分时系统做的基础工作获得图灵奖。他于2019年去世,享年93岁 - -> “我们给他们一本词典和一套语法规则,说:‘孩子,你已经是伟大的程序员了。’” - -> 在编程时,“乱抖机灵”并非良策。 - -> 于是我得到编程风格的第一条规则:写明白,别炫技。 - -> 如何将员工分配到不同楼层,才能让经常交谈的人在同一个楼层? - -> 把你介绍给其他人,让你随意晃荡,去寻找自己的研究课题和协作者 - -> 后来他们奇迹般地找到了之前没系领带的照片,并且刊印了。 - -> 尽管大多数研究员都有博士学位,但没人称呼“博士”,因为每个人都是博士。 - -> 多数管理人员都是“赶鸭子上架”,因为这虽然没有终结个人研究生涯,但必然会拖慢进度,而且照料麾下部门颇具挑战性。 - -> 从加薪池中为每位MTS分配次年加薪幅度。 - -> 因为管理层在晋升过程中保持了技术能力,而且都有基层经历。整个系统看起来并不过于偏重实践或理论,起码对于我们1127中心这帮人是这样的——优秀的程序和优秀的论文都很受重视。 - -> 对未来工作的提议或计划一概欠奉,这是件好事。每个人都会大略预估年终成果,但不管做错多少次都没关系。对于那些年复一年做同一件事的人,管理层会保持耐心,以待长远。我想,科研部门管理层级较少也有好处,这样一来大多数人在大多数时候就不会去考虑晋升问题。如果有人立志做官,最好选择其他部门。 - -> 专精某一领域的人可能会得到其直接上级的高度评价,但再上一层就未必了解其工作成果。另外,跨学科的工作在更高层眼中更突出,因为更多管理人员看得到它。协作越广泛,就会有越多管理者看得到,结果就形成了一个极其偏重协作与跨学科研究的组织。 - -> 贝尔实验室绩效考核方式的好处在于,它基于由理解某项工作的人的共同评估做出。如道格·麦基尔罗伊所言:“合议是这套体系的极妙之处。谁都不必依赖与单个老板的关系。” - -> 在某一时刻,我发现离实现一个操作系统仅有3周之遥了。 - -> 几位贝尔实验室员工在其他操作系统和语言上积累了多年经验,这才有了Unix - -> 操作系统的任务是控制所有其他要运行的程序,并管理它们与计算机其他部分的交互。 - -> 每张卡片能保存最多80个字符,容纳一行程序的内容 - -> 操作系统看顾每位登录用户,在用户之间快速切换,令每位用户误以为整台计算机都为我所用。这种技术叫作“分时” - -> 所谓第二系统效应,意思是在首个系统(如CTSS)创建成功后,打算创建一个新系统,修正旧系统的遗留问题,还要添加每个人期望的新特性,结果常常是塞了太多不同东西进去,最终得到过于复杂的系统。 - -> 很多好点子滥觞于Multics,但它最持久的贡献却完全没人预料到:它影响了一个叫Unix的小操作系统,这个小系统诞生的部分原因是想摈弃Multics的复杂架构。 - -> 正在那时,肯的太太休了3周假,带着一岁大的儿子去加利福尼亚探望公婆,这样肯就有了3周不受打扰的工作时间。 - -> 1992年12月,肯和弗雷德·格兰普(Fred Grampp)到莫斯科驾驶一架米格29战机,比他们平时开的赛斯纳飞机更上一层级。图2-5和图2-6展示了肯起飞前和落地滑行的情形。 - -> 2006年,他加入谷歌公司,和罗布·派克及罗伯特·格里塞默(Robert Griesemer)一起发明了Go语言 - -> PDP-7的Unix系统实在有趣,即使它只是运行在一台小型计算机上,而且还没有很多软件,人们还是开始使用了 - -> 有人认为,管理层的积极作用之一就是随时保持警醒,让要求资源的人打磨申请,专注提案。相比没有资源限制,资源紧张更有机会促成好的、经过深思熟虑的结果。 - -> 这里的管理原则是,雇用聪明人,帮他们融入环境,指出大致的需求方向,给他们很多自由空间。不是说他们想要多少钱就给多少钱。有所投有所不投。就算你误判了好东西,如果它够强,仍然会脱颖而出。 - -> 除了简洁,还有几个特点在当时来说也很新颖。例如“缺陷”部分,它坦承程序会有缺陷,或谓“特性”,即使不能立即修复,至少也该记录下来。 - -> cat命令50年来没有变过,只添加了很少的可选(也许并不必要的)参数,修改了其操作行为,它仍然是Unix核心命令之一。 - -> 第6版Unix,其手册发布于1975年5月,首次拓展到贝尔实验室以外。它对世界产生了重大影响。 - -> Unix是一个通用、多用户、交互式操作系统,运行在数字设备公司PDP-11/40和11/45计算机上。它提供了一些即使在大型操作系统中也罕见的功能,包括:(1)包含可拆卸卷的分层文件系统;(2)可兼容的文件、设备和进程间I/O(输入/输出);(3)初始化异步进程的能力;(4)每个用户可选择不同的系统命令语言;(5)100多个子系统,包括十几种语言 - -> Unix目录也是文件系统中的一个文件,但其内容由系统本身维护,不由用户程序维护。目录中包含了其下文件的信息,而这些文件又可以是目录。 - -> 因为目录可以包含子目录,所以文件系统可以深入至任意层。这种嵌套目录和文件的组织方式被称为“分层”文件系统 - -> shell的另一主要服务是I/O重定向。 - -> shell脚本(shell script)是存储在文件中的一系列命令。用该文件作为输入源,运行shell实例,如同直接输入命令一样运行脚本中的命令: - -> 我现在还在用一些三四十年前写的脚本,这在Unix的长期用户中一点也不稀奇。 - -> “像花园水管那样”把程序接在一起。图4-1的第一幅图来自我在贝尔实验室的办公室墙上挂了30年的陈旧纸页。 - -> 他只花了一小时就在操作系统中添加了管道系统调用。他形容管道是“超级小菜”,因为I/O重定向的机制早已存在了。 - -> 同样一些命令,以简单方式持续使用,构成了Unix管道,这恰恰是管道的天才之处。实在需要脑洞大开,才能看到这种可能性并创造出这个概念。 - -> 它能实现图形界面无法实现的自动化功能:命令序列可以从脚本中运行,输入单个指令就能作用于大量文件。 - -> 再加上另外十几个其他类别的工具,你就有了20个或30个命令,可以轻松完成各种基本任务 - -> 正则表达式就是一种描述文本模式的小型语言 - -> 正则表达式还可以通过赋予某些字符特殊含义来指定更复杂的模式,这些字符称为元字符(metacharacter) - -> 第6版内核有大约9 000行C语言代码和大约700行汇编语言代码。汇编代码用于设置寄存器、设备和内存映射等与特定机型相关的操作 - -> 邀请丹尼斯一起写这本书是我在技术生涯中做过的最聪明或者说最幸运的事情——因为丹尼斯是合著者的缘故,该书尤显权威,而且我也就能在书里引用他的参考手册了。 - -> C语言很重要,但它对标准库的使用也很重要 - -> C语言既古怪又有缺点,却获得了巨大的成功。虽然历史上的意外事件肯定有帮助,但C语言显然满足了人们对一种系统实现语言的需求,这种语言需要足够高效,足以取代汇编语言,但又足够抽象和流畅,足以描述各种环境下的算法和交互。 - -> 可以说,实验室里有很多优秀人士,常有人认为自己不过是“暴得大名”。想要力争上游,就得紧追不舍。 - -> 在之后的多年里,更多的功能被添加进来,Bash(Bourne Again Shell的简写,意为“伯恩再来shell”)已经成为大多数Linux和macOS用户事实上的标准shell。 - -> 优秀的编程语言能降低人类与计算机沟通的成本。计算机领域的大量研究都关乎如何创造富有表达能力的语言。 - -> 计算机语言的特点主要有两个方面,语法和语义。语法规定了语言是怎样的,什么符合语法,什么不符合语法。语法还定义了语句和函数如何写,算术和逻辑运算符是什么,它们如何组合成表达式,什么名称是合规的,哪些词是保留字,文本字符串和数字如何表达,程序如何格式化等规则。 - -> “埃里克·施密特(Eric Schmidt)在暑期实习时几乎重写了Lex。 - -> 程序帮你写的代码会比你自己手写的更正确、更可靠。 - -> makefile文件有点像shell脚本,但它采用声明式语言:说明依赖关系和如何更新组件,但不会明确检查文件创建时间。 - -> 我们都是自己软件的用户,这给了我们改进软件的真正动力。 - -> 每个人都慷慨奉献出自己的时间,对同事写的东西不吝给出意见,这不过是文化使然。在其他地方这种情况并不常见,所以贝尔实验室才能那么伟大。 - -> 也许,今天不会有很多人记得,当机器容量以千字节而不是千兆字节为单位时,时间和空间的利用效率乃是重中之重。每个字节都得斟酌使用,所以在某种程度上,每条指令也得再三推敲,因此,一种能在这两方面都节约的语言不仅优秀,而且是实际需要。 - -> 万勿相信不是完全由你自己创建的代码(尤其是来自雇我这种人的公司的代码)。再多的源码级验证或审查也无法保护你免遭不受信任的代码之害。 - -> 当时大多数终端只能显示24行80个固定宽度和高度的ASCII字符。 - -> PWB用户拿shell当编程语言来用,已经能够免除大部分苦差。许多手动操作被快速、廉价、方便地自动化了。 - -> 从SCCS到RCS、CVS和Subversion,再到今天默认的标准版本控制系统Git,有一条清晰的演化路径。 - -> 比尔后来为Unix设计了至今仍在使用的TCP/IP网络接口。有了他的socket接口,就能用与文件和设备I/O相同的读写系统调用来读写网络连接,因此很容易添加网络功能。 - -> ,肯一直完全赞同这样的观点:好代码不需要过多注释。以此类推,伟大的代码根本不需要注释。 - -> Unix和C语言是终极计算机病毒。 - -> 经理:“你们必须修复C++编译器的所有错误,但你不能以任何方式改变编译器行为。”我:“这不可能。修复缺陷必然导致行为变化,天经地义。”经理:“布莱恩,你没明白。必须修复错误,但编译器的行为不能改变。” - -> 1990年12月11日,我在贝尔实验室观看乔布斯演示NeXT。机器非常漂亮。记忆中,那是我唯一一次对科技小玩意儿产生“想要一台”的想法。我显然是被著名的“乔布斯现实扭曲场”所魅惑。 - -> 今天,Minix依然“健在”,用于操作系统的教学和实验。 - -> Unix取得了巨大的成功。Unix或Linux或macOS或其他变种运行在数十亿台计算机上,持续为数十亿人服务,当然也为在它之上构建业务的人赚取了数十亿美元(尽管其创造者并未从中获利)。后来的操作系统受它影响极深。 - -> 肯·汤普森和丹尼斯·里奇的部分天才之处在于,他们善于挑选既有的好点子,而且能够洞察普遍概念或统一主题,将软件系统加以简化。人们有时会用代码行数来评价软件的生产力。在Unix的世界里,生产力却往往以删除了多少特殊情况或代码行数来衡量。 - -> Unix的高明之处在于选择了足够普适的抽象概念,既能发挥巨大的作用,又不至于在性能上付出太大代价。 - -> 管道是典型的Unix发明,是临时连接程序的一种优雅而高效的方式。 - -> iii)设计和构建软件,甚至是操作系统,要尽早试用,最好是在几周内就用起来。大刀阔斧砍掉笨拙的部件,重建它们。 - -> Unix哲学当然不能解决所有编程问题,但它确实为系统设计和实现提供了有益的指导。 - -> 稳定的环境至关重要:资金、资源、任务、组织结构、管理、文化都应持续和可预测。 - -> 这意味着研究人员可以长期甚至年复一年地探索他们认为重要的想法,而不必每隔几个月就向人证明自己在努力。 - -> 贝尔实验室的文化强烈鼓励合作和帮助。走进别人的办公室寻求帮助绝对是标准做法,大多数情况下,被请求者都会放下手头的一切来协助。实验室还有一流的技术图书馆,每天24小时开放,订阅大量期刊,并可远程访问其他图书馆;它相当于高校的图书馆,但重点放在科学和技术方面。 - -> 乐趣。享受你的工作以及与你的同事一起工作的时光,这很重要。1127中心几乎总是个有趣的地方。人们在这里不仅仅是为了工作,更是因为希望留在卓越团队里。 - -> “Unix系统的成功源于其高品位的关键概念选择及优雅的实现。Unix系统模式引领了一代软件设计者对编程的新思考。Unix系统的天才之处在于其框架,它使程序员能够相互倚重。” - -> 会不会有另一个Unix?会不会有新操作系统横空出世,在几十年内占领世界?当我谈到Unix时,经常会被问到这样的问题。我的回答是不会,至少目前不会。不会有革命发生。更有可能的是,操作系统将继续发展,同时携带大量的Unix DNA。 - -> 理由是伟大的创意总来自个体。 - -> 做好研究的最大秘诀是雇用优才,确保让他们做有趣的事情,着眼长久,而且不横加干涉。 - -> Unix可能是一个奇点,它是改变计算机世界的各种因素的独特组合结果。 - -## 笔记 - - -> 道格•麦基尔罗伊神来一笔,提出了管道的想法,肯实现完后自己玩了一下,叹道“好震撼”; - -💭 管道流水线,真正的低耦合高内聚。 - -> Unix操作系统诞生于1969年,但它不是从石头缝里蹦出来的。 - -💭 厚积薄发 - -> 每个制造商生产的硬件全无共通之处,有时甚至来自同一厂商的硬件都会有很大不同,所以操作系统也各自不同。 - -💭 分久必合合久必分呀 - -> 管道是一种机制,由操作系统提供,并通过shell轻松访问。它将程序的输出与另一程序的输入连接起来。 - -💭 流水线设计 - -> 任何你必须重复做的事都有待自动化。 - -💭 自动化解放生产力 - -> 1968年秋天开始写毕业论文时,我真的很需要Runoff这样的工具,否则就得自己用手动打字机打出论文(每改一次都要重打),或者付钱请人帮我打。我打字速度快但常打错,所以前者不切实际;由于我又穷又不怎么能挣钱,后者也不切实际。 - -💭 创新往往发生于资源受限的条件下 - -> 在20世纪70年代中期,迈克尔·莱斯克编写了UUCP,即Unix到Unix的拷贝程序(Unix to Unix copy program)。它用于在Unix系统之间(一般通过普通电话线)传送文件。虽然电话线传数据速度很慢,有时还很昂贵,但电话线无处不在,而且当时大多数Unix系统都具备某种拨号访问功能。不过具有外拨能力的较少,因为这需要支付话费。 - -💭 Unix 最初是为了文件的处理,互联网最初是为了文件的传输。就如同活字印刷术一样,信息传递效率的提升促进人类文化大爆炸式发展。 - -> 杰勒德·霍尔兹曼维护着一份1127中心老同事的在线名单。太多的人已经离世,活着的人里面许多去了谷歌公司;其他人则在别的公司工作,也有人教书或退休。只有极少数人留在贝尔实验室。 - -💭 http://www.spinroot.com/gerard/1127_alumni.html - -> 将程序当作工具并组合使用是Unix的特色。编写各自做好一件事的小程序,而不是功能繁多的单个大程序,有很多好处。 - -💭 做好一件事 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/VMware vSphere 7.0云平台运维与管理(第2版).md b/life/阅读/计算机/VMware vSphere 7.0云平台运维与管理(第2版).md deleted file mode 100644 index 61adf6af..00000000 --- a/life/阅读/计算机/VMware vSphere 7.0云平台运维与管理(第2版).md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: VMware vSphere 7.0云平台运维与管理(第2版) -description: 本书是一本以VMware vSphere - 7.0平台为基础的从入门到精通的项目任务化教程,项目1介绍虚拟化与云计算的基本概念,项目2介绍搭建VMware企业级虚拟化平台的全过程,项目3以StarWind和openfiler为例介绍iSCSI存储的搭建与配置 -keywords: - - VMware vSphere 7.0云平台运维与管理(第2版) - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《VMware vSphere 7.0云平台运维与管理(第2版)》 -- **作者**: 杨海艳 张文库 王印主编 -- **分类**: 计算机-计算机综合 -- **ISBN**:9787121417870 -- **出版社**:电子工业出版社 - -## 概述 - -本书是一本以VMware vSphere 7.0平台为基础的从入门到精通的项目任务化教程,项目1介绍虚拟化与云计算的基本概念,项目2介绍搭建VMware企业级虚拟化平台的全过程,项目3以StarWind和openfiler为例介绍iSCSI存储的搭建与配置,项目4介绍部署vCenter Server的过程,项目5介绍vCenter Server的高级应用,项目6详细介绍VMware云桌面服务的搭建。本书不仅可以作为高等院校计算机网络技术、云计算技术专业的学生教材,还可以作为对VMware vSphere云平台运维与管理技术感兴趣的读者的参考用书。 - -## 划线 - - -> 裸金属架构 - -> 寄居架构 - -## 笔记 - - -> 计算的边界可能不是技术局限,而是经济合理性。 - -💭 效率 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/从0到1:HTML+CSS快速上手.md b/life/阅读/计算机/从0到1:HTML+CSS快速上手.md deleted file mode 100644 index 6268d152..00000000 --- a/life/阅读/计算机/从0到1:HTML+CSS快速上手.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: 从0到1:HTML+CSS快速上手 -description: 作者根据自己多年的网站开发及教学经验,站在零基础读者的角度,详细介绍了HTML和CSS的基础知识,以及大量的前端开发技巧。 - 全书分为2大部分:第1部分是HTML基础,主要介绍各种标签的使用;第二部分是CSS基础,主要介绍样式布局操作。此外,作者还结合实际工 -keywords: - - 从0到1:HTML+CSS快速上手 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《从0到1:HTML+CSS快速上手》 -- **作者**: 莫振杰 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115510327 -- **出版社**:人民邮电出版社 - -## 概述 - -作者根据自己多年的网站开发及教学经验,站在零基础读者的角度,详细介绍了HTML和CSS的基础知识,以及大量的前端开发技巧。 全书分为2大部分:第1部分是HTML基础,主要介绍各种标签的使用;第二部分是CSS基础,主要介绍样式布局操作。此外,作者还结合实际工作及前端面试,精心挑选了大量高质量的练习题放在每章最后,读者可以边学边练,更好地掌握本书内容。 本书提供了所有案例的源代码、配套视频课程,以及各种工具手册。另外,为方便老师教学,还提供了配套的PPT教学课件。 本书适合零基础的初学者使用,可以作为前端开发人员的参考书,也可作为培训学校、大中专院校相关专业的教学参考书。 - -## 划线 - - -> HTML用于控制网页的结构,CSS用于控制网页的外观,而JavaScript控制着网页的行为。 - -> HTML→CSS→JavaScript→jQuery→HTML5→CSS3→ES6→移动Web→Vue.js - -> HTML全称是“Hyper Text Markup Language(超文本标记语言)”,是网页的标准语言。HTML并不是一门编程语言,而是一门描述性的标记语言。 - -> title标签是head标签的内部标签,其中<title>标签内定义的内容是页面的标题。这个标题不是文章的标题,而是显示在浏览器栏目的那个标题。 - -> 在HTML中,一般来说,只有6个标签能放在head标签内。title标签。meta标签。link标签。style标签。script标签。base标签。 - -> 文字。图片。超链接。音频和视频。 - -> 在HTML中,我们可以使用“文本标签”来对文字进行修饰,如粗体、斜体、上标、下标等。常用的文本标签有以下8种。 - -> 在HTML中,我们可以使用“div标签”来划分HTML结构,从而配合CSS来整体控制某一块的样式。 - -> 想要在一个页面引入CSS,共有以下3种方式。外部样式表。内部样式表。行内样式表。 - -> 因此我们只会讲解最实用的5种选择器。元素选择器。id选择器。class选择器。后代选择器。群组选择器。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/从0到1:HTML5+CSS3修炼之道.md b/life/阅读/计算机/从0到1:HTML5+CSS3修炼之道.md deleted file mode 100644 index d1a53604..00000000 --- a/life/阅读/计算机/从0到1:HTML5+CSS3修炼之道.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: 从0到1:HTML5+CSS3修炼之道 -description: 作者根据自己多年的前后端开发经验,站在完全零基础读者的角度,详尽介绍了HTML5和CSS3的基础知识、新技术及各种高级开发技巧。 - 全书分为两大部分:第一部分介绍HTML5的新技术,主要包括新增元素、新增属性、元素拖放、文件操作、本地存储、音频视频、离线应用 -keywords: - - 从0到1:HTML5+CSS3修炼之道 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《从0到1:HTML5+CSS3修炼之道》 -- **作者**: 莫振杰 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115525055 -- **出版社**:人民邮电出版社 - -## 概述 - -作者根据自己多年的前后端开发经验,站在完全零基础读者的角度,详尽介绍了HTML5和CSS3的基础知识、新技术及各种高级开发技巧。 全书分为两大部分:第一部分介绍HTML5的新技术,主要包括新增元素、新增属性、元素拖放、文件操作、本地存储、音频视频、离线应用等;第二部分介绍CSS3的新技术,主要包括新增选择器、CSS3变形、CSS3过渡、CSS3动画、多列布局、滤镜效果、弹性盒子模型等。 为了方便高校老师教学,本书不但配备了所有案例的源代码,还提供了配套的PPT 课件。本书适合作为前端开发人员的参考书,也可以作为大中专院校相关专业的教学参考书。 - -## 划线 - - -> 4.允许属性值不加引号 - -> HTML5新增的主要结构元素有6个:header、nav、article、aside、section、footer。 - -> 在HTML5中,我们可以使用contenteditable属性来定义某个元素的内容是否可以被编辑。 - -> 不同浏览器的localStorage数据是不可以共用的 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/从0到1:JavaScript 快速上手.md b/life/阅读/计算机/从0到1:JavaScript 快速上手.md deleted file mode 100644 index ee06ec53..00000000 --- a/life/阅读/计算机/从0到1:JavaScript 快速上手.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: 从0到1:JavaScript 快速上手 -description: 本书分为2大部分:第1部分是Javascript基本语法,主要介绍流程控制、函数、字符串、数组等基本语法;第2部分是Javascript核心技术,主要介绍DOM操作、事件操作、window对象、document对象等核心技术。为了让读者更好地掌握,本书还结 -keywords: - - 从0到1:JavaScript 快速上手 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《从0到1:JavaScript 快速上手》 -- **作者**: 莫振杰 -- **分类**: 计算机-数据库 -- **ISBN**:9787115513007 -- **出版社**:人民邮电出版社 - -## 概述 - -本书分为2大部分:第1部分是Javascript基本语法,主要介绍流程控制、函数、字符串、数组等基本语法;第2部分是Javascript核心技术,主要介绍DOM操作、事件操作、window对象、document对象等核心技术。为了让读者更好地掌握,本书还结合实际工作以及前端面试,精心挑选了大量高质量的练习题。此外,本书还专门配套了课件PPT以及各种工具手册,以便各大高校老师教学使用。 - -## 划线 - - -> HTML用于控制网页的结构,CSS用于控制网页的外观,而JavaScript控制着网页的行为。 - -> 从本质上讲,Java是一门面向对象的语言,而JavaScript更像是一门函数式编程语言。 - -> 想要在HTML中引入JavaScript,一般有3种方式。外部JavaScript。内部JavaScript。元素事件JavaScript。 - -> 所有JavaScript变量都由var声明。 - -> 在JavaScript中,数据类型可以分为两种:一种是“基本数据类型”,另外一种是“引用数据类型” - -> DOM操作,可以简单地理解成“元素操作”。 - -> 元素节点。属性节点。文本节点。 - -> getElementById( )。getElementsByTagName( )。getElementsByClassName( )。querySelector( )和querySelectorAll( )。getElementsByName( )。document.title和document.body。 - -> getAttribute( )。setAttribute( )。removeAttribute( )。hasAttribute( )。 - -> 鼠标事件。键盘事件。表单事件。编辑事件。页面事件。 - -> 在JavaScript中,常用的表单事件有3种。onfocus和onbluronselect。onchange。 - -> 在JavaScript中,常用的页面事件只有下面2个。onload。onbeforeunload。 - -> 哪个DOM对象(元素节点)调用了this所在的函数,那么this指向的就是哪个DOM对象。 - -> 在JavaScript中,一个浏览器窗口就是一个window对象 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/从0到1:jQuery快速上手.md b/life/阅读/计算机/从0到1:jQuery快速上手.md deleted file mode 100644 index d5b0e269..00000000 --- a/life/阅读/计算机/从0到1:jQuery快速上手.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 从0到1:jQuery快速上手 -description: 作者根据自己多年的前后端开发经验,站在完全零基础读者的角度,基于jQuery - 1.12.x版本,详尽介绍了jQuery的基础知识及开发技巧。 《从0到1 - jQuery快速上手》分为14章,前10章主要介绍jQuery的基本技术,包括常用选择器、DOM操作、 -keywords: - - 从0到1:jQuery快速上手 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《从0到1:jQuery快速上手》 -- **作者**: 莫振杰 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115526335 -- **出版社**:人民邮电出版社 - -## 概述 - -作者根据自己多年的前后端开发经验,站在完全零基础读者的角度,基于jQuery 1.12.x版本,详尽介绍了jQuery的基础知识及开发技巧。 《从0到1 jQuery快速上手》分为14章,前10章主要介绍jQuery的基本技术,包括常用选择器、DOM操作、事件操作、jQuery动画、过滤方法、查找方法等;后4章主要介绍jQuery的进阶技巧,包括工具函数、开发插件、Ajax操作以及高级技巧。 此外,本书不但配备了所有案例的源代码,作者还结合实际工作和前端面试的经验,精选了很多高质量的练习题。为了方便高校老师教学,本书还提供了配套的PPT课件。本书适合作为前端开发人员的参考书,也可以作为大中专院校相关专业的教学参考书。 - -## 划线 - - -> ·代码简洁。·完美兼容。·轻量级。·强大的选择器。·完善的Ajax。·丰富的插件。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/明解Python.md b/life/阅读/计算机/明解Python.md deleted file mode 100644 index b1bf822a..00000000 --- a/life/阅读/计算机/明解Python.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 明解Python -description: 本书图文并茂、示例丰富,采用全彩印刷方式,通过299段代码和165幅图表,系统地讲解了Python的基础语法和编程知识,内容涉及分支/循环语句、对象、字符串、列表、集合、函数、类、模块、异常处理和文件处理等。针对初学人士难以理解和容易误解的地方,本书均采用 -keywords: - - 明解Python - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《明解Python》 -- **作者**: 柴田望洋 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115583765 -- **出版社**:人民邮电出版社 - -## 概述 - -本书图文并茂、示例丰富,采用全彩印刷方式,通过299段代码和165幅图表,系统地讲解了Python的基础语法和编程知识,内容涉及分支/循环语句、对象、字符串、列表、集合、函数、类、模块、异常处理和文件处理等。针对初学人士难以理解和容易误解的地方,本书均采用平实的语言,辅以精心设计的版式,循序渐进、清晰直观地进行了讲解。跟随本书的讲解,读者可以扎实掌握Python的基础知识,并具备实际使用Python进行编程的能力。 - -## 划线 - - -> 编程语言各自有擅长的领域,有的擅长数值计算,有的擅长数据库和事务处理。 - -> 从这方面来说,Python 可以说是一个“全能型选手”。 - -> 有两个操作数的运算符称为二元运算符(binary operator)。除了二元运算符,还有存在3个操作数的运算符—— 三元运算符(trinary operator),以及只有1个操作数的一元运算符(unary operator)。试着使用我们平时计算常用的一元运算符+和-(例1-5)。 - -> 另外,Python的float型相当于C语言和Java的double型(而非float型)。Python没有double型。 - -> Python从版本3.6起可以在数值字面量字符间的任意位置插入下划线“_”(实际上Python程序会忽略下划线)(例1-8)。这样可以让位数较多的数值更易于阅读。 - -> '''和"""能以程序代码中的字符串为基础,生成类似于用户手册的程序文档。Python使用"""形式的字符串字面量来生成这种程序文档。 - -> 以r或R开头的字符串字面量叫作原始字符串字面量(raw string literal)。原始字符串字面量中的转义字符按照原本含义解释。 - -> 但是,变量的类型并不是固定的。试着输入例1-17中的代码确认一下结果。[插图]变量x先后“变身”为整数int型、浮点数float型和字符串str型。 - -> 前面讲的变量名都只有1个字符。关于变量名,其实并不是任意名称都可以使用。命名规则大致如下。·可使用的字符包括字母、数字和下划线。·字母区分大小写。·数字不能放在变量名开头。 - -> 交互式shell最后显示的值可以用变量“_”来表示。该变量在运算结果需要用于下次运算时非常有用。 - -> ·作为一种迅速普及的脚本语言,Python支持多种编程范式,包括命令式编程、过程式编程、函数式编程和面向对象编程。 - -> 在Python中,变量、函数、类和模块皆为对象。·对象会占一定的存储空间(内存),并且拥有标识值(用于判断是否为同一个对象)、类型和值等属性。可以使用id函数获取标识值,使用type函数获取类型。·变量只是一个和对象绑定(引用对象)的名字。·is运算符和is not运算符是身份运算符,用于判断对象是否为同一个(标识值是否相等)。在Python中,根据值是否可以改变,类型可分为两类。·可变类型: 列表、字典、集合等     ※值可以改变。·不可变类型:数字、字符串、元组等    ※值不可以改变。如果对不可变类型的变量(引用的对象)的值进行变更,则会生成新的对象,然后变量重新引用新的对象。赋值语句复制的是对象的引用而不是值。另外,赋值的对象,即等号左边的变量名如果是首次使用,程序则生成新的变量并与等号右边的对象进行绑定。[插图]与赋值语句相对应的是del语句,它用于删除作为名字的变量名。·None与任何对象都不同,是NoneType类型的特殊值。·其他编程语言使用存储期(存储空间生命周期)对变量和对象进行管理。Python与之不同,它使用引用计数,即引用对象的变量的个数,对变量和对象进行管理。·内置类型包括数值型(int型、bool型、float型和complex型)、序列型(str型、list型和tuple型等)、集合型(set型、frozenset型)和映射型(dict型)。·浮点型(float型)可以表示的值在大小和精度方面存在限制。使用sys.float_info可以查看浮点型的属性。·在进行算术运算时,程序会根据操作数的类型进行算术转换。·复数型是用表示实数部分和虚数部分的两个浮点数来表示值的类型。例如3.2 +5.7j。其中,5.7j称为虚数字面量。·因为在计算机内部,数值用位的ON/OFF来表示,所以Python可以轻易地表示二进制数。Python提供了求逻辑与的运算符&、求逻辑或的运算符|、求逻辑异或的运算符^和生成取反后的值的运算符~等按位逻辑运算符。[插图]位移运算符<<和>>将整数中的所有的位向左或向右移动后生成相应的值。[插图] - -> 不包含扩展名的文件名被直接当作模块名使用。 - -> 两个程序必须放在同一个文件夹中。 - -> 脚本文件:·直接执行时 变量__name__等于'__main__'·导入时   变量__name__等于原本的模块名(在上述程序中是min_max) - -> 如果用作包的文件夹内放置了名为'__init__.py'的文件,那么具备这种标准结构的包就称为标准包(regular package)。 - -> 文件'__init__.py'用于告知Python程序当前的包是标准包。如果没有该文件,程序就无法识别出标准包(代码清单10-10也将无法执行)。·程序导入包后会初始化并执行模块'__init__.py'。因此,我们也会看见在模块'__init__.py'中插入(下一章讲解的)类定义这样的编程技巧。·在'__init__.py'中,如果将名称__all__定义为一个列表,其中包含对象名称的字符串,程序就可以通过*的形式导入该名称的对象。例如,在文件夹pack内的文件'__init__.py'中编写定义__all__ = ['abc', 'xyz'],程序就可以通过from pack import *导入pack.abc和pack.xyz。 - -> 脚本程序是模块,不包含扩展名的文件名是模块名。模块是较大的代码块。·模块是一种对象,又称模块对象。在直接执行模块对象或导入模块对象时会生成并初始化模块对象。在直接执行脚本程序时,__name__的值是'__main__'。当其他脚本程序导入脚本程序时,__name__的值是模块名。 - -> 异常处理的优点之一是可以分离原本的处理代码和处理错误的代码。 - -> [插图] - -## 笔记 - - -> 要点 变量就像一个箱子,用来存储整数、浮点数和字符串等值。把相应的值放入变量后,可以随时取出。 - -💭 Python 称为标志也许更合适 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/流畅的Python.md b/life/阅读/计算机/流畅的Python.md deleted file mode 100644 index 721452e6..00000000 --- a/life/阅读/计算机/流畅的Python.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: 流畅的Python -description: 本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元 -keywords: - - 流畅的Python - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《流畅的Python》 -- **作者**: 卢西亚诺·拉马略 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115454157 -- **出版社**:人民邮电出版社 - -## 概述 - -本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。 - -## 划线 - - -> Python官方教程的开头是这样写的:“Python是一门既容易上手又强大的编程语言。”这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多Python程序员只用到了其强大功能的一小部分。 - -> 不成熟的抽象和过早的优化一样,都会坏事。 - -> 数据模型其实是对Python框架的描述,它规范了这门语言自身构建模块的接口 - -> 序列类型还能按照能否被修改来分类。可变序列list、bytearray、array.array、collections.deque和memoryview。不可变序列tuple、str和bytes。 - -> list是一个可变序列,并且能同时存放不同类型的元素 - -> 在Python中,函数用*args来获取不确定数量的参数算是一种经典写法了。 - -> seq[start:stop:step]进行求值的时候,Python会调用seq.__getitem__(slice(start, stop, step))。 - -> 如果在a * n这个语句中,序列a里的元素是对其他可变对象的引用的话,你就需要格外注意了,因为这个式子的结果可能会出乎意料。比如,你想用my_list=[[]] * 3来初始化一个由列表组成的列表,但是你得到的列表里包含的3个元素其实是3个引用,而且这3个引用指向的都是同一个列表。这可能不是你想要的效果。 - -> Python Tutor是一个对Python运行原理进行可视化分析的工具 - -> 不要把可变对象放在元组里面。增量赋值不是一个原子操作。我们刚才也看到了,它虽然抛出了异常,但还是完成了操作。查看Python的字节码并不难,而且它对我们了解代码背后的运行机制很有帮助。 - -> Python序列类型最常见的分类就是可变和不可变序列。但另外一种分类方式也很有用,那就是把它们分为扁平序列和容器序列。 - -> 散列表则是字典类型性能出众的根本原因 - -> 集合的本质是许多唯一对象的聚集。 - -> 不要忘了,如果要创建一个空集,你必须用不带任何参数的构造方法set( )。如果只是写成{}的形式,跟以前一样,你创建的其实是个空字典。 - -> dict的实现是典型的空间换时间:字典类型有着巨大的内存开销,但它们提供了无视数据量大小的快速访问——只要字典能被装在内存里。 - -> Python 3明确区分了人类可读的文本字符串和原始的字节序列。 - -> 我指的是b'\xff\xfe'。这是BOM,即字节序标记(byte-order mark),指明编码时使用Intel CPU的小字节序。 - -> __doc__属性用于生成对象的帮助文本。 - -> map函数返回一个可迭代对象,里面的元素是把第一个参数(一个函数)应用到第二个参数(一个可迭代对象,这里是range(11))中各个元素上得到的结果。 - -> 接受函数为参数,或者把函数作为结果返回的函数是高阶函数(higher-order function) - -> all(iterable)如果iterable的每个元素都是真值,返回True;all([])返回True。any(iterable)只要iterable中有元素是真值,就返回True;any([])返回False。 - -> Python简单的句法限制了lambda函数的定义体只能使用纯表达式。换句话说,lambda函数的定义体中不能赋值,也不能使用while和try等Python语句。 - -> lambda句法只是语法糖:与def语句一样,lambda表达式会创建函数对象。这是Python中几种可调用对象的一种。下一节会说明所有可调用对象。 - -> 不仅Python函数是真正的对象,任何Python对象都可以表现得像函数。为此,只需实现实例方法__call__。 - -> 与用户定义的常规类一样,函数使用__dict__属性存储赋予它的用户属性。 - -> Python最好的特性之一是提供了极为灵活的参数处理机制,而且Python 3进一步提供了仅限关键字参数(keyword-only argument)。 - -> 函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为。 - -> Python不要求声明变量,但是假定在函数定义体中赋值的变量是局部变量。 - -> Python内置了三个用于装饰方法的函数:property、classmethod和staticmethod。 - -> 因为lru_cache使用字典存储结果,而且键根据调用时传入的定位参数和关键字参数创建,所以被lru_cache装饰的函数,它的所有参数都必须是可散列的。 - -> 首先,我们要抛弃变量是存储数据的盒子这一错误观念 - -> Python变量类似于Java中的引用式变量,因此最好把它们理解为附加在对象上的标注。 - -## 笔记 - - -> 在运行时创建 -能赋值给变量或数据结构中的元素 -能作为参数传给函数 -能作为函数的返回结果 - -💭 感觉这个一等函数好抽象或者是翻译的问题…… - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/硅谷之火:个人计算机的诞生与衰落(第3版).md b/life/阅读/计算机/硅谷之火:个人计算机的诞生与衰落(第3版).md deleted file mode 100644 index 61a52f4a..00000000 --- a/life/阅读/计算机/硅谷之火:个人计算机的诞生与衰落(第3版).md +++ /dev/null @@ -1,215 +0,0 @@ ---- -title: 硅谷之火:个人计算机的诞生与衰落(第3版) -description: 本书是一部微型计算机发展史,让读者了解整个20世纪以及至21世纪初计算机从兴起到鼎盛直至今天受到平板电脑和手机等电子产品冲击的整个过程,是一本集历史故事与小说风格于一体的硅谷纪传体书籍。最新第3版重新修订了全书内容,增加了计算机发展史上的几位大佬退出舞台后 -keywords: - - 硅谷之火:个人计算机的诞生与衰落(第3版) - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《硅谷之火:个人计算机的诞生与衰落(第3版)》 -- **作者**: 迈克尔·斯韦因 保罗·弗赖伯格 -- **分类**: 计算机-计算机综合 -- **ISBN**:9787115516824 -- **出版社**:人民邮电出版社 - -## 概述 - -本书是一部微型计算机发展史,让读者了解整个20世纪以及至21世纪初计算机从兴起到鼎盛直至今天受到平板电脑和手机等电子产品冲击的整个过程,是一本集历史故事与小说风格于一体的硅谷纪传体书籍。最新第3版重新修订了全书内容,增加了计算机发展史上的几位大佬退出舞台后的计算机行业现状分析。 - -## 划线 - - -> 一切事物都会随着时间而变化,不变也是一种变化。 - -> 个人计算机行业的创业者几乎什么错误都犯过。他们的前车之鉴可以为你省下不少的金钱、时间和精力。 - -> 乔布斯冲着弗赖伯格怒吼,因为弗赖伯格打算抢先刊登出苹果公司Lisa项目和麦金塔计算机的故事,乔布斯指责他这是在给日本人占领美国计算机市场做帮凶。 - -> 这个传奇故事的主角是一群了不起的、信奉无政府主义的工程师、黑客和他们的同道中人,他们起初是一种真正的反主流文化,但最终改变了世界。 - -> 计算机行业在20世纪70年代诞生,出现在围绕斯坦福大学的郊野地带,是那个非凡时期的直接产物。 - -> 史蒂夫·乔布斯也曾对本书的第一版赞誉有加:“这本书让我回想起那些旧时光,读着读着,我不禁潸然泪下。” - -> 与他们谈工作是我们工作的一部分,但当我们撇开当天的议事日程,放下采访提纲,对他们说“跟我们说说你当初是怎么开始的吧”时,谈话氛围就会立刻发生明显的变化。他们会就此开始讲述,而且通常知无不言、言无不尽。 - -> 个人计算机的起源也颇具革命性,因为它并不是由那些搞研发的专业团队在成本昂贵、设备精良的实验室研制出来的。它始于企业和学术机构之外,由黑客、计算机发烧友和误打误撞的创业者利用业余时间在车库、地下室和卧室等地方创造出来。 - -> 因为奥古斯塔·艾达·拜伦所做的这些工作,许多人视她为世界上第一位计算机程序员。 - -> 最好能让自己的听众放心,巴贝奇的分析机并没有独立思考的能力。 - -> 计算机将披着逻辑的嫁衣“嫁”给电力。 - -> 霍列瑞斯的公司最终被一家企业合并了,这家企业后来更名为国际商用机器公司(简称IBM) - -> 克劳德·香农在其麻省理工学院的博士论文中解释了如何利用电力开关电路模拟布尔逻辑 - -> 美国圣何塞计算机博物馆历史中心 - -> 晶体管是一小片惰性晶体,具有有趣的电气特性,一面世即被视为一项革命性技术发明 - -> 英特尔完全有资历完成此事:它是仙童半导体公司的衍生公司,其总裁罗伯特·诺伊斯曾为集成电路的发明贡献过力量。 - -> 英特尔的市场部对微处理器客户支持工作量巨大的担忧不无道理。比如说,用户需要芯片功能的说明文档、芯片能识别语言的说明文档、芯片使用的电压、发热情况和其他一系列问题的说明文档。总得有人来编写使用手册吧。 - -> DEC公司本可以成为第一家创造个人计算机的公司,却未能抓住这个机会。这在某种程度上反映了20世纪70年代初期计算机公司董事会成员的保守观念。 - -> 阿尔的兴趣越来越浓厚,他已不再能容忍DEC公司的保守作风。DEC公司视计算机为一种工业产品。阿尔后来回忆说:“在他们看来,计算机就如同一块生铁。他们只对卖铁感兴趣!” - -> 阿尔沮丧到了极点。先前他就常接到猎头公司寻聘高层人员的电话,他决定,再有猎头找他,他就接受。于是,他像沃兹尼亚克、阿尔布莱特和许多其他人一样,走出了公司大门,投身到革命的浪潮中。 - -> MITS公司开创了一个完整的个人计算机产业链,从商店、出版物、展会、用户群、软件盗版到关于开放标准与封闭标准的辩论,一应俱全。 - -> 新改名为微型软件公司(Micro-Soft),后来又改为微软公司(Microsoft)的Traf-O-Data公司,终于作为软件厂家做成了第一笔交易。 - -> 此后一段时间里,纸带成了传播这种语言的主要手段。盖茨后来十分痛恨这些纸带,因为纸带成了非法传播BASIC的媒介。 - -> 创立计算机俱乐部是很自然的,毕竟当时的设备时常不能运转或不能正常运转,软件要么不能用,要么根本没有软件可用。虽然买家多半是发烧友,但极少有人能完全掌握微型计算机所需的所有技能和知识。俱乐部鼓励那些精于机器不同方面的人相互交流,协同合作。若是没有这种互动和互助,计算机产业不可能发展得这样繁荣。 - -> 发烧友看到4K存储板如此不值钱,而BASIC又卖得那么昂贵,于是纷纷购买了Proc Tech公司的存储板,复制BASIC纸带并私自传播。到1975年年底,大多数Altair上使用的BASIC都是盗版的。 - -> 罗伯茨在佐治亚州买了一个农场,并告诉所有人,他打算成为一个乡绅去务农或者去学医。最后,罗伯茨拿出当初创办MITS公司时的精气神,两样都做到了。 - -> 没有大公司愿意制造微型计算机。只有那些全然盲目地被计算机和电子学迷了心窍的狂热分子才愿意设计并亲手制造一台计算机,并忍受那些繁复而乏味的工作 - -> 以姆赛公司是比尔·米勒德在1975年1月Altair宣告问世的几个月后创办的,其创业故事和企业理念都是独一无二的。 - -> 在工程部、生产部和客户支持部看来,销售团队在盲目推销,这就是在拆公司的台。以姆赛公司重视成功,这没什么问题。但管理层衡量成功的标准首先是销售额而不是生产或客户服务的质量。以姆赛公司成了专门卖东西的机器,若从这个角度看,它确实干得很好。 - -> 因此,大多数的“商业”用户其实就是一些希望能将这些机器用于商业的发烧友,这些人之所以能够忍受机器的缺陷,是因为他们在学习如何使用机器来办公,并乐在其中。 - -> 承认有问题就等于承认失败,而以姆赛公司的企业文化是不允许承认失败的。不愿承认失败的态度以及对“伟大的业务目标”一根筋的执着最终导致以姆赛公司对目标客户的定位出现偏差,与市场的本质渐行渐远。 - -> 发烧友是一场草根运动。这些发烧友清楚地知道,他们所引燃的不仅是一场技术革命,还是一场社会革命。 - -> 因为英特尔公司的芯片的名称里通常会有“8”这个数字,而摩托罗拉公司则通常用“6”这个数字,所以双方的支持者就分别被称为“8字头用户”和“6字头用户”。 - -> 许多公司的创办初衷,与其说是为了挣大钱,不如说是为了寻求刺激。这些事情都说明,一些无法从经济利益的视角解释的事情正在发生。 - -> 就这样,这帮富于创造、独断专行的人为了整个微型计算机领域的利益,一点一点地放下了自我的固有成见,也摒弃了任何短期的经济利益。 - -> 公司里没人认为这是一种正常的商业模式,也许连埃里森自己也不相信,但是无论如何,在成立后的前十年,甲骨文公司确实每年都实现了销量翻倍的目标。 - -> 如果说Q&A程序体现了试水软件市场的易用性战略,那么Framework就体现了“瑞士军刀”式的软件营销方式。 - -> 盖茨已有将近4年没写过代码了。他上一次写代码还是为Tandy公司TRS-80100型便携式计算机做软件的时候,那是一台书本大小的便携式计算机,来访者对那台机器赞不绝口。盖茨很紧张,通宵达旦地熟悉QuickBASIC。一位名叫杰夫·邓特曼的记者是个编程高手,他将使用Turbo Pascal,邓特曼对Turbo Pascal非常了解。比赛结果是盖茨和QuickBASIC赢了。这件事很疯 - -> 它们在一开始时主要是基于社区构建的。 - -> 相继开辟了揭发黑幕的专栏,提醒购买者注意特定产品的缺点。《人民计算机公司》通信的分支机构《多布博士》杂志坚定地站在消费者的立场上,引导读者不要购买今后会让自己后悔的那些产品。 - -> 正如赫尔默斯所言,如果说那些杂志界定了微型计算机社区,那么沃伦等人举办的电脑展则为这个社区提供了聚会的场所。 - -> 乔布斯似乎在摆脱生活中的琐事,寻求某种彻底的简单。 - -> 乔布斯给了沃兹尼亚克350美元作为工作报酬,这个数字远少于乔布斯留给自己的6650美元。和乔布斯,友谊也就值这么多。 - -> 乔布斯告诉科特克,“我会给你一份工作。我们要做一件惊人的事,这事叫作30天内付款。” - -> 乔布斯意识到,要想提高竞争力,苹果计算机必须美观。 - -> 沃兹尼亚克设计计算机是为了追逐自己的梦想机器,但Apple III有点儿像很多人七拼八凑而成的大杂烩,是由委员会操刀设计的。作为委员会的典型产物,各方成员都对结果不太满意。 - -> 斯科特被沃兹尼亚克反复无常的工作习惯以及Apple III的上市延误激怒了,于是开始对沃兹尼亚克施加压力。沃兹尼亚克没日没夜地工作,每天都忍受着斯科特对他进度缓慢的抱怨。 - -> 一旦你没什么可以失去的,那就追逐月亮吧。于是我们追逐着月亮,而且我们一直知道,如若成功,这要同时归功于苹果公司和IBM公司。 - -> 与美国社会上的大多数情况一样,计算机行业里的人变得越来越喜欢打官司 - -> Java明明是编程语言,而不是操作系统,为什么能对微软构成如此巨大的威胁呢?原因很简单。编写跨平台的程序能有效地增加浏览器取代操作系统的可能性。拥有太阳工作站、IBM PC、麦金塔计算机或其他什么计算机都没关系,反正你能用浏览器运行Java程序就行了。 - -> 阿尔伯克基和硅谷的电子发烧友并没有发明万维网,但万维网的问世在很大程度上归功于信息共享精神,这种精神点亮了个人计算机革命的前十年。实际上,我们可以认为,万维网是共享精神在软件领域的体现。 - -> 1991年,芬兰一位名叫林纳斯·托瓦兹(Linus Torvalds)的年轻程序员开始开发Unix内核(在操作系统中负责处理内存、文件及外部接口等基本操作)的新变体。托瓦兹将他的操作系统命名为Linux,并公开了源代码,邀请编程社区对其加以改进。 - -> 开放”和“免费”并不是一回事。 - -> 网景公司的Mozilla项目完成了一个新版本的浏览器。 - -> 没有乔布斯,苹果公司不过是硅谷一家普通的计算机公司;而没有苹果公司,乔布斯也只是硅谷一名普通的百万富翁。 - -> 乔布斯回到了苹果公司。他告诉我,微软赢得了个人计算机之战,而且那是不可逆转的,这一切已经过去了。但他认为,如果他能让苹果公司足够强健,支撑到下一轮重大科技洗牌,到那时苹果公司就能打胜仗。 - -> 图形化用户界面由帕洛阿尔托研究中心发明,由苹果公司引入市场,又由微软公司发扬光大。 - -> “我记得(约翰·斯卡利)谈到过‘技术S型曲线’……这就是说,一种技术会有一段长而平缓的酝酿期,然后会有一段突然的飞速发展期,接着在市场饱和或技术成熟时达到顶点。此时,这种技术在市场上将变得不再有趣,如果你的公司为那种技术赌上了一切的话……你最终会被仿造产品逼上绝路。” - -> 如果说个人计算机产业的控制之战已经结束,那么乔布斯相信,苹果公司的希望就是尽量拖下去,撑到成为下一波浪潮的弄潮儿。 - -> iPod的销售进展则要慢一些,但到2004年年底,苹果公司和它的iPod在不断发展的数字音乐播放器市场上获得了大约2/3的份额。市场很大,利润很高。2007年,苹果公司的收入大约有一半都来自iPod的销售。苹果已经找到了一个新兴市场并且主导了它,乔布斯知道苹果公司一定能够做到这一点。 - -> 而苹果公司的iOS系统则是其自身产品的专有平台。 - -> 现在,移动设备的两种不同模式展开了竞争:开放的安卓模式和封闭的iOS模式。 - -> 2010年,苹果公司终于回归平板市场,和iPod、iPhone一样,iPad成为另一种定义类的产品。 - -> 2014年,一手创办甲骨文公司的拉里·埃里森不再担任公司的CEO。很多划时代的个人计算机公司现已消失,其中包括被甲骨文公司收购的太阳微系统公司。在硅谷,大家普遍感到元老派已经谢幕,一群年轻聪明的黑客控制了产业。在产品方面,这些年轻聪明的黑客正驾驶着技术的列车驶入一个新的时代。 - -> 我们能阻止计算机带走我们的隐私、自主权和自由吗? - -> 改变世界,无时无刻不在发生。 - -## 笔记 - - -> 许多热衷于让个人计算机成为现实的人,同样热衷于为大众普及晦涩的计算机技术。“让大众拥有计算机的力量”是他们的战斗口号,同时这确实也是塑造个人计算机时代的力量之一。 - -💭 唯有热爱可抵岁月漫长 - -> 我认为全世界的计算机需求量大概是五台左右。 -——托马斯·沃森,IBM公司主席 - -💭 时代局限性 - -> 盖茨后来回忆坐着蓝鹅车队四处游历的经历时这么说:“蓝鹅就是通用汽车公司所谓的‘移动的家’车型。我们开着蓝鹅到全美各地宣传,每到一个地方,就动员当地的人成立计算机俱乐部。 - -💭 酒香也怕巷子深 - -> “一旦你经历过那种失败,”罗伯茨说,“每天晚上都睡不着,担心第二天能不能发得出工资……你就会像我这样草木皆兵,做出一些不合逻辑的决策。” - -💭 情绪,压力 - -> 这种心理后来被称为“创业者症”,指不管他人开价多高,创始人都不愿将公司的控制权分给其他任何人的心理。 - -💭 创业者症状 - -> 如果用现金结账,当场就可以打八折。令马什颇感失望的是,会中和会后都没有人去找他 - -💭 道路是曲折的,前途是光明的 - -> “我有一个车库。”马什告诉英格拉姆。听起来这就足以开始创业了。 - -💭 我有30年的房贷奥利给 - -> 编写一个紧凑到仅占用几百字节内存的国际象棋程序 - -💭 有限的资源更能激发无限的能量 - -> 我努力让大众看到我所看到的事物,如果要管理一家公司,那么你必须让大众相信你的想法。 - -💭 信任感 - -> 在一些情况下,这些早期公司失败的原因是计算机方面的技术问题,但更多原因是这些公司缺少管理、市场营销、分销以及产品销售等方面的专业技能。这些企业的领导者基本都不是经济管理人员,而是工程师;他们并不精通生意之道,而且经常与其客户和经销商格格不入。 - -💭 打江山不易,守江山更难 - -> 沃兹尼亚克自己制作了控制驱动器的电路板。连续两周,他每晚都工作到凌晨2点。 - -💭 热血激情 - -> 在盖茨看来,只有永不停止地工作、积极地参与竞争和不知疲倦地发挥聪明才智,他本人和微软公司才能保持行业的领先地位。盖茨总觉得,在某些地方肯定有几个聪明而有干劲的黑客,能在短短几个月内就编写出好几千行精致的代码,从而在一夜之间改变竞争规则,将微软挤下舞台。 - -💭 保持危机感 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/秒懂设计模式.md b/life/阅读/计算机/秒懂设计模式.md deleted file mode 100644 index 6d474978..00000000 --- a/life/阅读/计算机/秒懂设计模式.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: 秒懂设计模式 -description: 本书共计25章,以轻松、幽默、浅显易懂的文风从面向对象编程、面向对象三大特性的理论基础开篇,然后系统且详细地讲解了单例、原型、工厂方法、抽象工厂、建造者、门面、组合、装饰器、适配器、享元、代理、桥接、模板方法、迭代器、责任链、策略、状态、备忘录、中介、命令 -keywords: - - 秒懂设计模式 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《秒懂设计模式》 -- **作者**: 刘韬 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115549365 -- **出版社**:人民邮电出版社 - -## 概述 - -本书共计25章,以轻松、幽默、浅显易懂的文风从面向对象编程、面向对象三大特性的理论基础开篇,然后系统且详细地讲解了单例、原型、工厂方法、抽象工厂、建造者、门面、组合、装饰器、适配器、享元、代理、桥接、模板方法、迭代器、责任链、策略、状态、备忘录、中介、命令、访问者、观察者及解释器等23种设计模式的概念及结构机理,最后以六大设计原则收尾,全面地解析归纳了软件设计准则,参透设计模式的本质。本书引入了很多贴近生活的真实范例,并配有大量生动形象的插图,再结合相关例程代码实战演练,循序渐进、深入浅出,引导读者探究设计模式的哲学真谛。本书面向广大的软件设计工作者,包括但不限于各个层次从事面向对象编程语言开发的软件开发、设计、架构等工程技术人员,也可以作为大专院校相关专业教学用书和培训学校的教材。 - -## 划线 - - -> 代码量大并不能代表系统功能多么完备,更不能代表程序员多么努力与优秀,反之,作为有思想高度的开发者一定要培养“偷懒”意识,想方设法以最少的代码量实现最强的功能,这样才是优秀的设计。 - -> 设计模式主要研究的是“变”与“不变”,以及如何将它们分离、解耦、组装,将其中“不变”的部分沉淀下来,避免“重复造轮子”,而对于“变”的部分则可以用抽象化、多态化等方式,增强软件的兼容性、可扩展性。 - -> 优秀的系统不单单在于其功能有多么强大,更应该将各个模块划分清楚,并且拥有一套完备的框架,像开放式平台一样兼容对各种插件的扩展,让功能变动或新增变得异常简单,一劳永逸,这离不开对各种设计模式的合理运用。 - -> 从某种意义上讲,设计模式并不是指某种具体的技术,而更像是一种思想,一种格局。 - -> “封装”“继承”和“多态”便是面向对象的三大特性 - -> 如果把一些不相干的对象硬生生封装在一起,就会使代码变得莫名其妙,难于维护与管理,所谓“物极必反,过犹不及”,所以封装一定要适度。 - -> 继承可以使父类的属性和方法延续到子类中,这样子类就不需要重复定义,并且子类可以通过重写来修改继承而来的方法实现,或者通过追加达到属性与功能扩展的目的。从某种意义上讲,如果说类是对象的模板,那么父类(或超类)则可以被看作模板的模板。 - -> 我们知道任何类都有一个toString()方法,但我们根本没有声明它,这是为什么呢?其实这是从Object类继承的方法,因为Object是一切类的祖先类。 - -> 多态化的外设使计算机功能更加强大、灵活、可扩展、可替换。其实这就是设计模式中非常重要的一种“策略模式”,接口的定义是解决耦合问题的关键所在。 - -> 我们都知道有一种设备叫转换器,它能轻松地将老旧的接口设备调制适配到新的接口,以达到兼容的目的,这就是“适配器模式”。 - -> 单例即单一的实例,确切地讲就是指在某个系统中只存在一个实例,同时提供集中、统一的访问接口,以使系统行为保持协调一致。 - -> 这就是“饿汉模式”(eager initialization),即在初始阶段就主动进行实例化,并时刻保持一种渴求的状态,无论此单例是否有人使用。 - -> 这就是“懒汉模式”(lazy initialization - -> 这样的好处是如无请求就不实例化,节省了内存空间;而坏处是第一次请求的时候速度较之前的饿汉初始化模式慢,因为要消耗CPU资源去临时造这个太阳(即使速度快到可以忽略不计)。 - -> 我们一共用了2个嵌套的判空逻辑,这就是懒加载模式的“双检锁”:外层放宽入口,保证线程并发的高效性;内层加锁同步,保证实例化的单次运行。 - -> Singleton(单例):包含一个自己的类实例的属性,并把构造方法用private关键字隐藏起来,对外只提供getInstance()方法以获得这个单例对象。 - -> 原型模式可以用对象创建对象,而不是用类创建对象,以此达到效率的提升。 - -> 对于第一份打印出来的原文稿,我们可以称之为“原型文件”,而对于复印过程,我们则可以称之为“原型拷贝” - -> 程序设计中的工厂类往往是对对象构造、实例化、初始化过程的封装, - -> 制造逻辑只是被换了个地方,挪到了简单工厂中而已,并且客户端还要告知产品种类才能产出,这无疑是另一种意义上的耦合。 - -> 大量的产品判断逻辑代码会被堆积在制造方法中,看起来好像功能强大、无所不能,其实维护起来举步维艰,简单工厂就会变得一点也不简单了。 - -> 多态化后的工厂多样性不言而喻,每个工厂的生产策略或方式都具备自己的产品特色,不同的产品需求都能找到相应的工厂来满足 - -> 工厂方法模式不但能将客户端与敌人的实例化过程彻底解耦,抽象化、多态化后的工厂还能让我们更自由灵活地制造出独特而多样的产品。 - -> 需要注意的是,抽象工厂模式一定是基于产品的族系划分来布局的,其产品系列一定是相对固定的,故以抽象工厂来确立工业制造标准(各产品系列生产接口)。 - -> 建造者模式又称为生成器模式,主要用于对复杂对象的构建、初始化,它可以将多个简单的组件对象按顺序一步步组装起来,最终构建成一个复杂的成品对象。与工厂系列模式不同的是,建造者模式的主要目的在于把烦琐的构建过程从不同对象中抽离出来,使其脱离并独立于产品类与工厂类,最终实现用同一套标准的制造工序能够产出不同的产品。 - -> 建造者的各制造步骤与逻辑都应该被抽离出来独立于数据模型, - -> 我们可以用组合模式来表达“部分/整体”的层次结构,提取并抽象其相同的部分,特殊化其不同的部分,以提高系统的可复用性与可扩展性,最终达到以不变应万变的目的。 - -> 优雅、巧妙的方式将两侧“对立”的接口“整合”在一起,顺利化解双方难以调和的矛盾,最终使它们顺利接通 - -> 当系统存在大量的对象,并且这些对象又具有相同的内部状态时,我们就可以用享元模式共享相同的元件对象,以避免对象泛滥造成资源浪费。 - -> 其实路由器本质上并不具备上网功能,而只是充当代理角色,对访问进行监管、控制与转发。 - -> 如代码清单12-4所示,客户端(终端设备)一开始创建的并不是“猫”,而是实例化路由器来连接互联网。简单来讲,就是用户只需要知道连接路由器便可以上网了,至于“猫”是什么,用户完全可以无视 - -> 桥接模式(Bridge)能将抽象与实现分离,使二者可以各自单独变化而不受对方约束,使用时再将它们组合起来 - -> 拿手机制造来说,芯片可以由美国设计制造,屏幕可以由韩国制造,摄像头则可以由日本制造……最后由中国制造其他半导体组件并完成手机的组装,从而形成手机制造产业链并使产品高效生产 - -> 抽象方”与“实现方 - -> 桥接模式将抽象与实现彻底解耦,使形状与颜色的纠葛终被化解,各自为营,互不侵扰。劳动分工实现了各种产品制造的自由扩展,使其能够在各自维度上达成多态,无限延伸。 - -> 需求分析、软件设计、代码开发、质量测试、上线发布。 - -> 模板方法模式巧妙地结合了抽象类虚部方法与实部方法,分别定义了可变部分与不变部分,其中前者留给子类去实现,保证了系统的可扩展性;而后者则包含一系列对前者的逻辑调用,为子类提供了一种固有的应用指导规范,从而达到虚中带实、虚实结合的状态。 - -> 如代码清单16-9所示,一开始我们在第4行构造了财务专员,接着组装了责任链(其实这里还可以交给工作流工厂去构造责任链 - -> 策略模式让策略与系统环境彻底解耦,通过对算法策略的抽象、拆分,再拼装、接入外设,使系统行为的可塑性得到了增强 - -> 变化是世界的常态,唯一不变的就是变化本身。 - -> 备忘录模式(Memento)则可以在不破坏元对象封装性的前提下捕获其在某些时刻的内部状态,并像历史快照一样将它们保留在元对象之外,以备恢复之用。 - -> 中介模式(Mediator)为对象构架出一个互动平台,通过减少对象间的依赖程度以达到解耦的目的 - -> 众所周知,对象间显式的互相引用越多,意味着依赖性越强,同时独立性越弱,不利于代码的维护与扩展。中介模式很好地解决了这些问题, - -> 命令模式(Command)能够将指令信息封装成一个对象,并将此对象作为参数发送给接收方去执行,以使命令的请求方与执行方解耦,双方只通过传递各种命令过象来完成任务 - -> 命令模式能使我们在不改变任何现有系统代码的情况下,实现命令功能的无限扩展 - -> 观察者模式(Observer)可以针对被观察对象与观察者对象之间一对多的依赖关系建立起一种行为自动触发机制,当被观察对象状态发生变化时主动对外发起广播,以通知所有观察者做出响应。 - -> 总之,不是自己分内之事绝不该负责,这就是单一职责原则(Single Responsibility Principle)。 - -> 所以我们需要把闪烁控制电路独立出来,灯泡与闪烁之间的通信应该通过接口去实现,从而划清界限,各司其职,这样类封装才变得有意义 - -> 其中“开”指的是对扩展开放,而“闭”则指的是对修改关闭。简单来讲就是不要修改已有的代码,而要去编写新的代码。 - -> 所以说符合开闭原则的设计,一定要通过抽象去实现,高层抽象的泛化保证了底层实现的多态化扩展,而不需要对现有系统做反复修改。 - -> 当系统升级时,如果为了增强系统功能而需要进行大量的代码修改,则说明这个系统的设计是失败的,是违反开闭原则的。 - -> 此原则指的是在任何父类出现的地方子类也一定可以出现,也就是说一个优秀的软件设计中有引用父类的地方,一定也可以替换为其子类。 - -> 接口隔离原则要求我们对接口尽可能地细粒度化,拆分开的接口总比整合的接口灵活 - -> 世界上并不存在无所不能的设计,而且任何事物都有其两面性,任何一种设计模式都有其优缺点,所以对设计模式的运用一定要适可而止,否则会使系统臃肿不堪。满足目前需求,并在未来可预估业务范围内的设计才是最合理的设计。当然,在系统不能满足需求时我们还可以做出适当的重构,这样的设计才是切合实际的。 - -## 笔记 - - -> 究其本质,克隆操作时Java虚拟机会进行内存操作,直接拷贝原型对象数据流生成新的副本对象,绝不会拖泥带水地触发一些多余的复杂操作(如类加载、实例化、初始化等),所以其效率远远高于“new”关键字所触发的实例化操作 - -💭 池复用模式 - -> 众所周知,对象间显式的互相引用越多,意味着依赖性越强,同时独立性越弱,不利于代码的维护与扩展。 - -💭 插件系统也是类似 - -> 设计模式绝不可以被滥用,以免陷入“为了设计而设计”的误区,导致过度设计。 - -💭 切勿让设计模式成为开发的绊脚石 - -> 单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则,它们通常被合起来简称为“S.O.L.I.D”原则,也是最为流行的一套面向对象软件设计法则。最后我们再附加上迪米特法则,简称“LoD”。接下来我们将依次研究这六大原则。 - -💭 设计模式的根本依据 - -> 在面向对象的软件设计中,人们经常会遇到一些重复出现的问题。为降低软件模块的耦合性,提高软件的灵活性、兼容性、可复用性、可维护性与可扩展性,人们从宏观到微观对各种软件系统进行拆分、抽象、组装,确立模块间的交互关系,最终通过归纳、总结,将一些软件模式沉淀下来成为通用的解决方案,这就是设计模式的由来与发展。 - -💭 效率 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/精通Python设计模式(第2版).md b/life/阅读/计算机/精通Python设计模式(第2版).md deleted file mode 100644 index bed0e854..00000000 --- a/life/阅读/计算机/精通Python设计模式(第2版).md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 精通Python设计模式(第2版) -description: Python是一种面向对象的脚本语言,设计模式是可复用的编程解决方案,二者在各种现实场景中应用都十分广泛。本书是针对Python代码实现设计模式的经典作品,着重讨论了用于解决日常问题的所有GoF设计模式,它们能帮助你构建有弹性、可伸缩、稳健的应用程序,并将 -keywords: - - 精通Python设计模式(第2版) - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《精通Python设计模式(第2版)》 -- **作者**: 卡蒙·阿耶娃 萨基斯·卡萨姆帕利斯 -- **分类**: 计算机-编程设计 -- **ISBN**:9787115526861 -- **出版社**:人民邮电出版社 - -## 概述 - -Python是一种面向对象的脚本语言,设计模式是可复用的编程解决方案,二者在各种现实场景中应用都十分广泛。本书是针对Python代码实现设计模式的经典作品,着重讨论了用于解决日常问题的所有GoF设计模式,它们能帮助你构建有弹性、可伸缩、稳健的应用程序,并将你的编程技能提升至新的高度。第2版探讨了桥接模式、备忘模式以及与微服务相关的几种模式。 - -## 划线 - - -> 在《设计模式》中,“四人组”向我们呈现了23种设计模式,并分为3类:创建型、结构型和行为型。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/网络安全等级保护2.0:定级、测评、实施与运维.md b/life/阅读/计算机/网络安全等级保护2.0:定级、测评、实施与运维.md deleted file mode 100644 index e50d25fa..00000000 --- a/life/阅读/计算机/网络安全等级保护2.0:定级、测评、实施与运维.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: 网络安全等级保护2.0:定级、测评、实施与运维 -description: 网络安全等级保护按照网络安全等级保护核心标准的要求及网络安全建设要求,对网络安全建设流程、安全评估和测评、物理安全、网络和通信安全、设备和计算安全、应用和数据安全、安全管理机构和人员、运维管理、云计算安全、移动互联网安全、工业控制系统安全等方面提出解决方案 -keywords: - - 网络安全等级保护2.0:定级、测评、实施与运维 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《网络安全等级保护2.0:定级、测评、实施与运维》 -- **作者**: 李劲等编著 -- **分类**: 计算机-理论知识 -- **ISBN**:9787115549976 -- **出版社**:人民邮电出版社 - -## 概述 - -网络安全等级保护按照网络安全等级保护核心标准的要求及网络安全建设要求,对网络安全建设流程、安全评估和测评、物理安全、网络和通信安全、设备和计算安全、应用和数据安全、安全管理机构和人员、运维管理、云计算安全、移动互联网安全、工业控制系统安全等方面提出解决方案,并紧密结合工程实际,通过具体项目案例,介绍了网安全规划设计方案,为网络安全建设人员和管理人员提供了清晰的思路和可操作的方法。 - -## 划线 - - -> 等保2.0的适时推出,体现了国家积极应对新技术引发的新风险,变被动防御为主动保障,解决了中国网络安全存在的主要问题。 - -> 《中华人民共和国网络安全法》第二十一条要求,国家实行网络安全等级保护制度;第二十五条要求,网络运营者应当制定网络安全事件应急预案;第五十九条明确了,网络运营者不履行本法第二十一条、第二十五条规定的网络安全保护义务的,由有关主管部门责令改正,给予警告。总而言之,不开展等级保护等于违法! - -> 第一层:法律。第二层:行政法规。第三层:规章、地方性法规以及规范性文件。 - -> 从基础分类角度出发,可以分为:基础标准、技术标准以及管理类标准;从对象角度出发,可以分为:基础标准、系统标准、产品标准、安全服务标准以及安全事件标准等;从网络安全等级保护生命周期出发,可以分为:通用/基础标准、系统定级标准、建设标准、等级测评标准、运行维护及其他标准。 - -> [插图] - -> 没有攻不破的网络,没有绝对的信息安全 - -> 接入控制、安全隔离、边界检测/防御、终端防御、网络审计、访问控制等 - -> 快速响应安全事件是安全运营的关键 - -> 一个完整的信息安全体系应该是安全技术、安全管理、安全运营的结合,三者缺一不可。 - -> 机房内部署机房空调,24小时运行,设置温度为24°恒温。 - -> 在系统建设完成后,按照等级保护的要求必须选择国家认可的测评机构对信息系统进行等级测评,并在系统运行过程中定期进行测评。 - -> ① 规定统一的应急预案框架,如启动预案的条件、应急组织构成、应急资源保障、事后教育和培训等。② 制定重要事件的应急预案,如应急处理流程、系统恢复流程等。③ 定期对系统相关的人员进行应急预案培训,并进行应急预案的演练。④ 定期对原有的应急预案重新评估,修订完善。 - -> [插图] - -## 笔记 - - -> 2019年是中国全功能接入国际互联网25周年。 - -💭 1994年中国全功能接入国际互联网 - -> 等保2.0标准不再自主定级,而是通过“确定定级对象→初步确定等级→专家评审→主管部门审核→公安机关备案审查→最终确定等级”这种线性的定级流程,系统定级必须经过专家评审和主管部门审核,才能到公安机关备案,整体定级更加严格。 - -💭 流程化 - -> 对于大型工业控制系统,可根据系统功能、责任主体、控制对象和生产厂商等因素划分为多个定级对象。 - -💭 具体情况具体分析 - -> 传统的以防为主的安全架构受到了极大挑战,安全防御手段也明显不足,需要重新分析当前信息系统的架构,评估安全措施的有效性,实施以积极防御为主导思想的新的安全架构。 - -💭 企业蜜罐🍯引诱攻击者利用,进而拖延抓捕攻击者。 - -> [插图] - -💭 最基础的物理环境影响在特定场景下非常致命,亲身经历过…… - -> 机房场地应避免设在建筑物的顶层或地下室,否则应加强防水和防潮措施。 - -💭 最好在中间楼层或者1/3楼层以上 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/网络工程师红宝书:思科华为华三实战案例荟萃.md b/life/阅读/计算机/网络工程师红宝书:思科华为华三实战案例荟萃.md deleted file mode 100644 index 4a910632..00000000 --- a/life/阅读/计算机/网络工程师红宝书:思科华为华三实战案例荟萃.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: 网络工程师红宝书:思科华为华三实战案例荟萃 -description: 当今是“互联网+”的时代,许多事物都建立在网络技术之上,很多时候,要求网络工程师熟悉并能应用多个厂商的产品,按需求搭建网络并负责其维护和升级。本书就是为帮助业界同人轻松达到这一目的而编写的。本书是多厂商技术融合的产物,以思科和华为为主,华三为辅,阐述和演示 -keywords: - - 网络工程师红宝书:思科华为华三实战案例荟萃 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《网络工程师红宝书:思科华为华三实战案例荟萃》 -- **作者**: 周亚军 -- **分类**: 计算机-计算机综合 -- **ISBN**:9787121376627 -- **出版社**:电子工业出版社 - -## 概述 - -当今是“互联网+”的时代,许多事物都建立在网络技术之上,很多时候,要求网络工程师熟悉并能应用多个厂商的产品,按需求搭建网络并负责其维护和升级。本书就是为帮助业界同人轻松达到这一目的而编写的。本书是多厂商技术融合的产物,以思科和华为为主,华三为辅,阐述和演示了多个厂商的技术案例实验。对于网络工程师而言,这些案例可以帮助其更好地应付日常工作;对于初学者来说,案例中详尽的命令解释和排错思路可以帮助其更快地入门。本书围绕搭建和维护一个中型企业网络展开实施,可以称之为网络技术常用项目命令大全。作者在书中将在搭建网络和运维网络时最常用的技术分为39个案例进行介绍,同时对相关命令做了注解,说明其作用和结果,以帮助读者来理解网络。另外,本书还为读者准备了实验环境(即模拟器)和视频教程,这是实际操作网络设备的重要工具。在读者完成本书学习之后,搭建和维护一个中型企业网也变得简单起来。 - -## 划线 - - -> 思科、华为和华三这三家著名企业。 - -## 笔记 - - -> 其次,要感谢我的夫人,能够容忍我在半夜写书的时候打扰她和孩子,能够容忍叫我三遍后才吃午饭,能够容忍我因为思考技术问题走神而摔倒了还是幼儿的孩子,能够容忍我每周休息1天而没时间陪伴家人。 - -💭 感谢感谢哈哈哈 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/网络是怎样连接的.md b/life/阅读/计算机/网络是怎样连接的.md deleted file mode 100644 index f379be66..00000000 --- a/life/阅读/计算机/网络是怎样连接的.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: 网络是怎样连接的 -description: 本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“ -keywords: - - 网络是怎样连接的 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《网络是怎样连接的》 -- **作者**: 户根勤 -- **分类**: 计算机-计算机综合 -- **ISBN**:9787115441249 -- **出版社**:人民邮电出版社 - -## 概述 - -本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从业人员阅读。 - -## 划线 - - -> 本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页的内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。 - -> 从在浏览器中输入网址,到屏幕上显示出网页的内容,在这个只有几秒钟的过程中,很多硬件和软件都在各自的岗位上相互配合完成了一系列的工作。 - -> 虽然Web服务器在收到订单数据之后和销售系统一起对订单进行实际处理的操作很复杂,但其实浏览器和Web服务器之间的交互却很简单,概括如下。 - -> 不过,没有文件名,服务器怎么知道要访问哪个文件呢?其实,我们会在服务器上事先设置好文件名省略时要访问的默认文件名。这个设置根据服务器不同而不同,大多数情况下是index.html或者default.htm之类的文件名。 - -> 像前面这样省略文件名时,服务器就会访问/dir/index.html或者/dir/default.htm。 - -> 生成HTTP消息之后,接下来我们需要委托操作系统将消息发送给Web服务器。尽管浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现[插图]。 - -> 这就是我们平常经常见到的IP地址格式,但仅凭这一串数字我们无法区分哪部分是网络号,哪部分是主机号。 - -> 网络号和主机号连起来总共是32比特 - -> IP地址的长度为32比特,也就是4字节,相对地,域名最短也要几十个字节,最长甚至可以达到255字节。换句话说,使用IP地址只需要处理4字节的数字,而域名则需要处理几十个到255个字节的字符,这增加了路由器的负担,传送数据也会花费更长的时间[插图]。 - -> Class在最早设计DNS方案时,DNS在互联网以外的其他网络中的应用也被考虑到了,而Class就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此Class的值永远是代表互联网的IN - -> 创建套接字阶段 - -> 只要指定了事先规定好的端口号,就可以连接到相应的服务器程序的套接字。 - -> 将网络包发送给通信对象的操作就是由IP来负责的。此外,IP中还包括ICMP[插图]协议和ARP[插图]协议。ICMP用于告知网络包传送过程中产生的错误以及各种控制消息,ARP用于根据IP地址查询相应的以太网MAC地址[插图]。 - -> 在协议栈看来,要发送的数据就是一定长度的二进制字节序列而已。其次,协议栈并不是一收到数据就马上发送出去,而是会将数据存放在内部的发送缓冲区中,并等待应用程序的下一段数据。 - -> 图3.4 双绞线对噪声的抑制(a)通过两根信号线的缠绕抵消外源性噪声;(b)通过改变节距抑制内源性噪声。 - -> [插图] - -> 从设备整体的转发能力来看,交换机要高于集线器。 - -> 因为路由器是基于IP设计的,而交换机是基于以太网设计的[插图]。 - -> 路由器判断下一个转发目标的方法如下。●如果路由表的网关列内容为IP地址,则该地址就是下一个转发目标。●如果路由表的网关列内容为空,则IP头部中的接收方IP地址就是下一个转发目标。路由器也会使用ARP来查询下一个转发目标的MAC地址。 - -> 规定某些地址是用于内网的,这些地址叫作私有地址,而原来的固定地址则叫作公有地址[插图]。 - -> 距离的不同和路由的维护方式,就是互联网与家庭、公司网络之间最主要的两个不同点。 - -> 用户名和密码通过RADIUS[插图]协议从RAS[插图]发送到认证服务器,认证服务器校验这些信息是否正确。当确认无误后,认证服务器会返回IP地址等配置信息,并将这些信息下发给用户(图4.17②-3)。用户的计算机根据这些信息配置IP地址等参数,完成TCP/IP收发网络包的准备工作,接下来就可以发送TCP/IP包了 - -> 这个路由信息交换的过程是由路由器自动完成的,这里使用的机制称为BGP[插图]。 - -## 笔记 - - -> 像浏览器、邮件等一般的应用程序都是使用TCP收发数据的,而像DNS查询等收发较短的控制数据的时候则使用UDP。 - -💭 TCP打电话,UDP写信 - -> 部署防火墙[插图]。防火墙的作用类似于海关,它只允许发往指定服务器的指定应用程序的网络包通过,从而屏蔽其他不允许通过的包。 - -💭 防火墙类似于海关 - -> 除了使用多台功能相同的Web服务器分担负载之外,还有另外一种方法,就是将整个系统按功能分成不同的服务器[插图],如Web服务器、数据库服务器。缓存服务器就是一种按功能来分担负载的方法。 - -💭 水平扩展,垂直扩展 - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/网络运维亲历记 (网络运维纪实文学).md b/life/阅读/计算机/网络运维亲历记 (网络运维纪实文学).md deleted file mode 100644 index 250c3d53..00000000 --- a/life/阅读/计算机/网络运维亲历记 (网络运维纪实文学).md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 网络运维亲历记 (网络运维纪实文学) -description: 本书共包括8 章,36 个网络运维实例。首先介绍常用的网络二、三层协议,包括IP、HSRP、 GVRP、VTP 协议和Trunk - 技术及网络运维中的一些技巧,如最简单的Ping 和Telnet 工具等。其次 介绍当前用户比较关注的网络问题和热门的网络技术, -keywords: - - 网络运维亲历记 (网络运维纪实文学) - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《网络运维亲历记 (网络运维纪实文学)》 -- **作者**: 王刚耀 -- **分类**: 计算机-理论知识 -- **ISBN**:9787302429845 -- **出版社**:清华大学出版社 - -## 概述 - -本书共包括8 章,36 个网络运维实例。首先介绍常用的网络二、三层协议,包括IP、HSRP、 GVRP、VTP 协议和Trunk 技术及网络运维中的一些技巧,如最简单的Ping 和Telnet 工具等。其次 介绍当前用户比较关注的网络问题和热门的网络技术,如网络安全、虚拟化、IPv6 和无线网络等。 最后介绍与网络运维相关的其他计算机应用技术,如应用系统和网络排查工具等。 本书深入浅出地介绍了计算机网络的多方面知识,注重应用实践,可作为网络从业人员的专业 学习和参考用书,也可供高校计算机、通信、网络等专业的师生阅读参考。 - -## 划线 - - -> 这7层是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通信协议采用了四层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面应用虚拟化+Veeam备份+Zabbix监控.md b/life/阅读/计算机/虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面应用虚拟化+Veeam备份+Zabbix监控.md deleted file mode 100644 index 5121e531..00000000 --- a/life/阅读/计算机/虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面应用虚拟化+Veeam备份+Zabbix监控.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: 虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面/应用虚拟化+Veeam备份+Zabbix监控 -description: 《虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面/应用虚拟化+Veeam备份+Zabbix监控》详细介绍了实际运维工作中虚拟化工程师应该熟练掌握的虚拟化技术。全书共7章,分别是虚拟化技术概述、虚拟化工程师应知必会的六件事、部署IT基础架构 -keywords: - - 虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面/应用虚拟化+Veeam备份+Zabbix监控 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面/应用虚拟化+Veeam备份+Zabbix监控》 -- **作者**: 孟鹏编著 -- **分类**: 计算机-编程设计 -- **ISBN**:9787111673248 -- **出版社**:机械工业出版社 - -## 概述 - -《虚拟化工程师运维实战:VMware服务器虚拟化+Citrix桌面/应用虚拟化+Veeam备份+Zabbix监控》详细介绍了实际运维工作中虚拟化工程师应该熟练掌握的虚拟化技术。全书共7章,分别是虚拟化技术概述、虚拟化工程师应知必会的六件事、部署IT基础架构服务器、实现服务器虚拟化—基于VMwarevSphere、实现桌面/应用虚拟化—基于CitrixVirtualAppsandDesktops、虚拟化备份—基于VeeamBackup&Replication,实现对虚拟化环境的灵活监控。本书图文并茂,步骤详细,介绍了大量的实用知识,能够让读者清晰地理解虚拟化项目部署中的操作细节。本书适合于从事企业信息化运维工作的虚拟化工程师学习,也可以作为项目管理人员实施企业虚拟化项目的参考书,还可作为高等院校虚拟化技术相关课程的教材。 - -## 划线 - - -> 虚拟化技术在企业中的应用主要涉及服务器虚拟化、桌面虚拟化和应用程序虚拟化三方面: - -> 云计算分成3个层次,分别是IaaS(Infrastucture as a Service,基础架构即服务)、PaaS(Platform as a Service,平台即服务)和SaaS(Software as a Service,软件即服务) - -> 根据云计算资源所在的位置,分成公有云、私有云和混合云3种。公有云,是指所有的资源都放在厂商建设的数据中心,用户通过互联网接入,获取到相应的云资源,使用便捷,按需付费。私有云,是指所有的资源都由用户方进行建设,放在自有的数据中心中。资源固定,安全性高。混合云,是私有云和公有云的结合。 - -> 在各大招聘网站上搜索。从各个招聘渠道去搜索虚拟化工程师、系统工程师、IT工程师、IT技术支持等 - -> 1)IT管理:管理技术团队、ITIL、PMP。2)IT基础架构:微软Active Directory、DNS、DHCP、WSUS、NTP、GPO、Exchange。3)数据库:SQL Sever、MySQL、Oracle。4)虚拟化:VMware vSphere、VSAN、NSX、Citrix XenServer、XenDesktop、XenApp、Openstack、KVM。5)备份:Veritas、Acronis、Veeam。6)监控:Tivoli、Zabbix。 - -> ·制定蓝图——规划企业整体IT架构方案。·搭建IT基础架构——部署和配置各类服务器。·配置服务器虚拟化——提供基础服务功能。·配置企业云桌面/云应用虚拟化——实现统一的办公环境管理。·安全第一——构建虚拟化场景下的备份系统。·搭建监控系统——力求系统稳定运行。 - -> ·AD域架构服务器。·虚拟桌面/应用服务器。·DNS服务器。·备份服务器。·DHCP服务器。·监控服务器。·邮件服务器。·目录服务器。·虚拟化服务器。·数据库服务器。 - -> 比如NTP服务器会提供时间同步服务,其他计算机的时间会与该NTP服务器保持时钟同步;WSUS服务器会提供Windows的补丁服务,其他计算机会从WSUS服务器获取微软发布的最新补丁,避免因漏洞、后门等引发安全问题。 - -> 在硬件层上添加了虚拟化层,这种架构也被称为裸金属架构。 - -> 目前,市场上主流的服务器虚拟化产品有VMware vSphere、Citrix Hypervisor(原Citrix Xenserver)、Microsoft Hyper-V等。对于虚拟化工程师来说,掌握1~2种常见的服务器虚拟化产品的部署、调试和维护是必不可少的技能。 - -> 服务器提供了计算资源,网络设备将服务器之间连通,存储设备提供了数据存储的空间。 - -> 常见的监控软件有IBM Tivoli、SolarWinds、Zabbix、Cacti、Nagios、Ganglia等。 - -> 基础架构的范围比较广泛,广义上包含服务器等计算机设备、路由器、交换机等网络设备,存储阵列、防火墙等安全设备,机房制冷设备等,狭义上特指微软相关的基础架构服务器,例如域控制器、DNS(Domain Name System,域名系统)服务器、DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器、WSUS(Windows Server Update Services,Windows Server更新服务)服务器等。 - -> 这就好比是一个部门的员工,大家各自负责一方面的工作内容,有人负责服务器,有人负责网络,也有人负责安全。但随着员工数量的增多,老板没有更多的精力管理所有员工,于是指定了一个部门经理,专门管理其中一部分员工。这样一来部门经理来统一规定本部门员工的工作内容和指定规章制度等。针对大规模的计算机来说,也要实现统一的管理就需要借助AD来帮忙。域控制器担任了“部门经理”的角色,部门经理的存在就决定了整个部门的成立,而其他的计算机由域控制器进行统一管理。 - -## 笔记 - - -## 书评 - - -## 点评 diff --git a/life/阅读/计算机/计算机:一部历史.md b/life/阅读/计算机/计算机:一部历史.md deleted file mode 100644 index 1de9caab..00000000 --- a/life/阅读/计算机/计算机:一部历史.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: 计算机:一部历史 -description: " 《计算机:一部历史》,给大众读者写的计算机科普读物,零门槛入门计算机科学。讲述计算机背后鲜为人知的故事,普及关于计算机和互\ - 联网,你不得不了解的知识。在过去数十年里,除非你一直与世隔绝,否则就不可能不受到信息革命的影响。我们身处技术演进史上的计算机时" -keywords: - - 计算机:一部历史 - - 计算机 -tags: - - 阅读 -author: 7Wate -date: 2023-07-17 ---- - -## 简介 - -- **书名**:《计算机:一部历史》 -- **作者**: 彼得·本特利 -- **分类**: 计算机-理论知识 -- **ISBN**:9787121255113 -- **出版社**:中信出版集团 - -## 概述 - - 《计算机:一部历史》,给大众读者写的计算机科普读物,零门槛入门计算机科学。讲述计算机背后鲜为人知的故事,普及关于计算机和互联网,你不得不了解的知识。在过去数十年里,除非你一直与世隔绝,否则就不可能不受到信息革命的影响。我们身处技术演进史上的计算机时代,无论你是计算机和互联网的拥护者、反对者还是旁观者,无论你是否具备计算机专业背景,只要你使用计算机,这本书就是你的案头必备。 - - -## 划线 - - -> 显然,无论从事哪一个行业,要想赚取巨额财富,通晓计算机是必不可少的条件。 - -> 计算机或许是我们无声的奴隶,盲目地执行每一项指令,但是我认为,我们可以从计算机上学到很多东西,通过它们了解这个世界乃至人类自身。 - -> 计算机科学主要涉及到编程、工程学和数学 - -> 德国的著名密码系统——“恩尼格玛”(9)(Enigma) - -> 1954年,图灵被发现死在家中,身边放着咬了一口的苹果。 - -> 开创计算机革命的中心人物是艾伦·图灵,他杰出的创见和视野使这一切成为了可能。变革始于20世纪30年代,尽管我们现在难以预见计算机革命的极限究竟何在,但是图灵本人指出了这种理论局限性的存在。 - -> 复杂即是简单 - -> 通用图灵机(Universal Turing Machine)已成为世界上所有电子计算机的理论蓝图。 - -> 现代的计算机系统虽然日新月异,但万变不离其宗,大框架都是冯·诺依曼1952年在普林斯顿构建起来的。 - -> 被剥夺了思考的权利比死还难受 - -> 公司意识到,其庞大的数据中心通常只有10%的容量得到了有效利用,因此,在2006年,该公司开始推出亚马逊网络服务(Amazon Web Services ),出售数据中心的闲置容量。其他公司可以按需购买亚马逊提供的任何计算服务、软件和存储空间,而不需要维护或升级任何计算机 - -> 1951年,计算机开始搭载好几个层次的软件。第一层是微代码,它完全依赖于芯片内部的硬件连接。第二层是机器代码,它比微代码更抽象一些。第三层是汇编语言,它比机器代码可读性稍强。 - -> 1957年,IBM 的约翰·巴库斯(John Backus )发明了另一种编译型高级编程语言,称为福传(FORTRAN )。 - -> 软件设计师的角色类似于建筑师和土木工程师,尤其是规划城市、工厂等复杂建筑的设计师。因此我们应该学会从这些领域吸取灵感,攻克我们遇到的设计问题。” - -> 这一概念在模块化编程和面向对象的编程领域举足轻重,它可以确保数据及相关函数封装在对象内,与其他的数据和函数分隔开来 - -> 集成开发环境(Integrated development environment,简称IDE )的发明,就是为了让编程变得更加轻松。 - -> 研究人员很快意识到,要做到这一点,必须确立一个明确的软件生命周期。首先,你必须合理定位产品和项目需求。接下来要做的,就是设计、运行和测试软件,并将其运行情况清晰地记录下来。最后要做的,就是发布软件,或许在这个阶段,你还需要指导用户如何高效地使用软件、如何进行必要的维护工作。 - -> ,因为顾客往往并不知道自己真正的需求到底是什么,因此可能会举棋不定、自相矛盾,甚至改变主意。他们往往不具备编程人员的思维方式,因此不知道如何从软件开发的角度表达自己的需求。 - -> 统一建模语言(Unified Modelling Language,简称UML )将多种建模概念融合在一起,如今已成为软件系统建模的标准方式。 - -> 维尔特定律的内容是:软件变慢的速度永远快过硬件变快的速度。 - -> 优化软件就相当于优化一切。 - -> 上面所说的老板就相当于计算机的应用程序,比如网页浏览器和网页服务器;通信总监相当于TCP(传输控制协议)层;收发室相当于IP(互联网协议)层;邮递员相当于地址层,也就是低层次的传输方法,比如以太网(Ethernet )、IEEE 802等局域网协议,以及点对点协议(Point—to—Point Protocol,简称PPP )等框架协议。 - -> 计算机需要有地址,这样才能确定信息的发送方和接收方 - -> 我儿子今年十岁,他现在不看广播电视,只看iPlayer。他对电视节目的固定播放时间已经没有概念了,因为现在想看什么节目随时都可以看。 - -> 譬如密码的长度有最低限制,必须采用大小写字母、数字及标点符号混合的密码,而且最好每过几周更换一次。 - -> 如果过去的一项决策让我们更快乐,那么在未来遇到相似的情形时,我们就更倾向于做出相似的决策 - -> 既然人类能够凭借神经元释放的数十亿个电脉冲产生思维活动,计算机为什么不能如法炮制,利用电子电路释放的电脉冲来产生思维活动,进而完成各种'各样的智能任务呢? - -> 冯·诺依曼在研究经济学和博弈论时,就已经预见到了这个问题。他证明了最小最大定理(minimax ),该定理表明,博弈双方的任何一方都会采取最有利于自己、而最不利于对方的策略。香农在会下棋的计算机中应用了这一思想 - -> 英文等自然语言能否用于编程?可模拟人脑神经元的程序能否编写出来?计算机能否通过学习而不断进步?计算机应该如何表达信息?在算法中增加随机性,是否就能提高创造力? - -> 从很早的时候开始,科学家就开始为计算机智能的发展方向争论不休。他们分成三派,第一派以麦卡锡为代表,认为逻辑推理是计算机智能化的必由之路。第二派以麦卡洛克、皮茨为代表,认为构建神经元模型才是正道。第三派以明斯基为代表,认为计算机要想实现智能化,就必须首先具备现实世界的知识。 - -> 一系列新的计算机程序在此基础上相继问世,引起了巨大的轰动。一款叫做“专家系统”(expert system )的新程序走进了人们的视野。它能够有效地运用某个领域的专家多年积累的有效经验和专门知识,通过模拟专家的思维过程,解决一系列问题。它的用途非常广泛,可用于诊断疾病,也可用于推荐合适的理财产品,这取决于每个专家系统的专长是什么。研究人员渐渐认识到,他们可以用计算机来处理自然语言,即自动对句子结构进行划分和处理。“聊天机器人”(Chauerbot )是一款用于模拟人类对话或聊天的程序,“Eliza ”和“Parry ”都是早期非常著名的聊天机器人,这些程序整合了大量语言学资料,使计算机可以对用户的输入语言进行处理,然后做出相对较为可信的回复。有时候,它们的表现着实令人称奇,短时间内甚至会让人误以为它们是真人。 - -> 你其实知道这是一把勺子,虽然你并没有看到它的全部,只是看到了它的柄和勺尖。但是感知机做不到,它不能把这些信息汇总起来,得出一个真实可靠的结论 - -> 传统的人工智能观点包含了一个中心假设,那就是,所有的行为都是通过对环境建模,然后依据模型进行逻辑推理后才产生的。 - -> 自由意志表现在很多方面,比如不可预知性、目标搜寻、自我调节、趋利避害、前瞻性、记忆力、学习能力、遗忘性、联想能力、形状识别,还有就是一些能使它适应社会的要素。这才叫生命。” - -> 比如胚胎的形成、生物的发育过程等生长过程怎样才能用进化算法实现?在此基础上,怎样才能开发出更加复杂的算法?如今,进化学习已经成为人工生命和机器人学领域的重要组成部分。很多公司利用它的成果,开发出了多种多样的应用性产品,手机的天线设计还有存储芯片就是两个典型案例。 - -> 必须存在一种环境,使人工智能体可以与它互动,换句话说就是,人工智能体要在环境的压力下生存下来。我从一开始就是这样想的。我不相信机器可以不通过学习和适应就获得真正的智能。 - -> 自上而下的逻辑编程也好,自下而上的进化适应方法也好,无论采用哪种方案,都无法解决所有的问题。没有任何一款程序能够通过图灵测试。我们还是很难制造出一台具备智能的机器,无法在不可预测的环境中操控机器人。 - -> 感知机和反向传播算法(该算法可以自动调整神经元输入信号的权重)的局限性曾经引发过学术界的猛烈批判, - -> 在探索的旅途中,人们得以从全新的视角审视了困扰哲学家数百年的问题:人为什么存在?生命的起源是什么?生命体何以进化出了如此复杂多样的形式?智能是什么?意识是什么? - -> 复杂的经济活动是由无数较为简单的交易活动构成 - -> “假如有一台巨型计算机,它不仅能够模拟人脑中的所有电信号,还能够对突触所在环境的化学物质及其浓度变化进行建模,那么这台计算机就应该可以称得上是具备思考能力了,” - -> “毕竟,它模拟了真实的大脑活动,既然真实的大脑在思考,那么,为什么不能说模拟的大脑也在思考呢?这就是我的观点。” - -> 也许我们会意识到,其实智慧并不是什么重要的东西,真正重要的是经验。 - -> 虽然前进的道路只有一小段是明晰的,但纵使是这一小段探索的道路,也充满了艰险的挑战 - -> “想象力的桎梏一下子被打破了,”他说,“它还破除了你的偏见、成见和思维定势。利用进化式的生成过程,艺术家能与机器形成合力。这就好比一种‘创造力倍增器’,无论是人类无法想象的作品,还是单靠计算机无法创作的作品,它都能创作出来。我现在都还在想,这个主意实在是太厉害、太令人振奋了。” - -> 归根到底,艺术圈也是门生意,作品还是要拿来卖的,所以它讲究一个稀缺性。 - -> 艺术不是什么神秘的东西。真正的艺术家只不过是眼光稍微比普通人高一点罢了。” - -> 生命是如何从非生命物质中产生的?它们是如何进化的?简单的相互作用是怎么导致如此复杂的生物行为的? - -> DNA 层次的突变首先要反映到生物的整体层面上——譬如反映到生物的形状、生理以及行为学上,只有经历了这样的层次转化以后,才会进入自然选择的过程。 - -> 从能量的角度看,我们合并图像的目的就是要将信息熵降低,合并后图像的熵应该要比两张独立图像的信息熵之和要小。 - -> 兵贵精而不贵多 - -## 笔记 - - -> “我的个人理想就是赚足够的钱给自己买一间办公室,再在办公室里配上一块白板(白色的金属板材料制的书写平面),这样我就可以随心所欲地研究P=NP问题了。” - -💭 唯有热爱可抵岁月漫长 - -> 现在我们意识到,网络安全不仅仅关乎科技,还关乎于人。” - -💭 技术并不能解决所有问题 - -> 假设两个房间里分别有一个人、一台计算机,你作为提问人进入第三个房间,通过一些装置(如键盘)对他们随便提问。假如过了五分钟,你还判断不出谁是人、谁是计算机,那么这台计算机就通过了图灵测试。 - -💭 图灵测试 - -> 有时候,你不一定要自己具备专业知识,要学会借助别人的力量。相反,如果你自信满满,以为自己已经掌握了某方面的知识,那就得当心,说不定你只是一知半解而已。所以你得找到可以合作的人,而且要让自己表现得值得信赖,这才是最关键的。 - -💭 一个人可以走的嘎嘎快,但是几个人可以走的非常远。 - -> 这种经过人为设计的景观是否比原生态的自然景观更美? - -💭 美,是非常主观的判断 - -## 书评 - - -## 点评 diff --git a/life/食谱/凉菜/万能凉拌料.md b/life/食谱/凉菜/万能凉拌料.md deleted file mode 100644 index e8fdf389..00000000 --- a/life/食谱/凉菜/万能凉拌料.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -id: 万能凉拌料 -title: 万能凉拌料 -sidebar_position: 1 -data: 2022年4月21日 ---- - -![万能凉拌料](https://static.7wate.com/img/2022/04/21/b87155d537f83.png) - -1. 根据凉菜份量大小决定基础食材份量,处理好比例为 **1:1:1:1:1**。 - -2. 凉油尽量**浸没**基础食材份量,烧至**七成热(冒烟即可)**,**分三次搅拌浇入**基础食材(充分激发香味) - -3. **放凉后**根据个人口味添加附加佐料(生抽、耗油、陈醋等),可以**少量多次加入**。 - -4. **手拌**凉菜充分入味(别乱抓,影响观感),可放冰箱冷藏风味更佳! diff --git a/life/食谱/凉菜/凉菜食材处理.md b/life/食谱/凉菜/凉菜食材处理.md deleted file mode 100644 index dd61b6fd..00000000 --- a/life/食谱/凉菜/凉菜食材处理.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -id: 凉菜食材处理 -title: 凉菜食材处理 -data: 2022年04月21日 ---- - -## 花生 - -**凉油下锅**,花生变色炸出香味即可 - -## 腐竹 - -**直接掰断**合适大小,**温水**浸泡(不烫爪子都是温水)后**焯水 1 分钟**即可。 - -## 木耳 - -正常泡发,**焯水 1 分钟**即可。 - -## 黄瓜 - -拍散,斜切即可 - -## 苦菊 - -凉水**浸泡十分钟**清洗干净,切段放盘。 diff --git a/life/食谱/午餐/番茄鸡蛋盖饭.md b/life/食谱/午餐/番茄鸡蛋盖饭.md deleted file mode 100644 index 7b88033d..00000000 --- a/life/食谱/午餐/番茄鸡蛋盖饭.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -id: 番茄鸡蛋盖饭 -title: 番茄鸡蛋盖饭 -data: 2022年06月21日 ---- -## 食材 -番茄、鸡蛋、葱花 - -## 准备 - -1. 番茄上锅蒸一下,然后剥皮下锅炒成番茄汁。 -2. 热油下蛋液,蛋液未完全凝固前放入番茄汁。 -3. 根据嗜好加水或者淀粉,适量的盐、味精等。 -4. 撒入葱花翻炒出锅。 \ No newline at end of file diff --git a/life/食谱/早餐/三明治.md b/life/食谱/早餐/三明治.md deleted file mode 100644 index b88a9311..00000000 --- a/life/食谱/早餐/三明治.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: 三明治 -title: 三明治 -data: 2022年07月10日 ---- -## 食材准备 - -素菜:黄瓜、番茄、青菜等等喜欢吃的 ~ - -荤菜:煎蛋、香肠、培根等等喜欢吃的 ~ - -面包片 - -## 制作过程 - -1. 食材都分别处理好后,摆放好三明治。 -2. 三明治可以再放在电饼档里面加热压实。 - -用电饼档煎蛋 45s + 30s 既可以煎出溏心蛋 ~ - -加热处理好的三明治,15s + 15s 即可。 diff --git a/life/食谱/早餐/花样蒸蛋.md b/life/食谱/早餐/花样蒸蛋.md deleted file mode 100644 index c6ff9502..00000000 --- a/life/食谱/早餐/花样蒸蛋.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: 花样蒸蛋 -title: 花样蒸蛋 -data: 2022年05月27日 ---- -纯蒸蛋的方法不适用于花样蒸蛋,务必细看! - -## 食材 - -鸡蛋 N 个 - -花样少许,虾仁、香肠、玉米粒(熟的)等等都 ojbk。 - -## 准备 - -鸡蛋与水的**比例 1:2~3**;N 个鸡蛋打碎搅拌,加入 2N~3N 蛋壳**凉白开温水**(制胜法宝)。 - -使用**筛网过滤**一下可以使蒸蛋**更细腻润滑**。 - -## 盐 - -**一定要加入少许盐,否则整出来就是蛋汤!** - -## 花样 - -放入喜欢吃的虾仁、香肠等等 - -## 蒸 - -大中小火恒温蒸煮 10 分钟左右,关火**焖 3 ~ 5 分钟**(火候在花样蛋这里不重要)。 - -## 佐料 - -喜欢吃酸甜味就加番茄酱,总之喜欢吃什么加什么!!! diff --git a/life/食谱/早餐/蒸蛋.md b/life/食谱/早餐/蒸蛋.md deleted file mode 100644 index 4a94d764..00000000 --- a/life/食谱/早餐/蒸蛋.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -id: 蒸蛋 -title: 蒸蛋 -data: 2022年05月27日 ---- - -## 食材 - -鸡蛋 N 个 - -喜欢吃的佐料 - -## 准备 - -鸡蛋与水的**比例 1:1~1.5**;N 个鸡蛋打碎搅拌,加入 1N~1.5N 蛋壳**凉白开温水**(制胜法宝)。 - -使用**筛网过滤**一下可以使蒸蛋**更细腻润滑**。 - -## 蒸 - -**中小火**恒温蒸煮 **10 分钟**左右,关火**焖 3 ~ 5 分钟**(切忌火大)。 - -## 佐料 - -喜欢吃酸甜味就加番茄酱,总之喜欢吃什么加什么!!! diff --git a/life/食谱/烧烤/准备工作.md b/life/食谱/烧烤/准备工作.md deleted file mode 100644 index 95f30079..00000000 --- a/life/食谱/烧烤/准备工作.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: 准备工作 -title: 准备工作 -data: 2022年07月10日 ---- - -## 物品 - -### 主要装备 - -- 烧烤炉:常用的就可以,怎么方便怎么来,太花里胡哨反而不好用。 - -- 烧烤碳:便宜实惠就可以,果木碳考出来不一定很香。 - -- **酒精块**:这个很重要,生火点碳香的不能行 ~ - -- 刷子:这个也很重要,必不可少的。 - -- 签子:**圆签**串烤肉很爽(好穿),**方签**穿素菜和鸡翅鸡腿方便(不宜滑)。 - -- 餐具:一次性碗筷最方便。 - -- 保温箱:这个放东西爽的不能行 ~ - -- 马扎:小凳子很重要! - -- 桌子:放在烤炉边上的桌子,放些东西比较顺手。 - -### 附加装备 - -- 照明:烧烤大多是傍晚,有个合适的照明避免手慌脚乱。 - -- 摇床:绑在树上也是很好用的。😏 - -- 音响:烤肉听歌、聊天也很不错嘞。 - -- 平板:烤肉的时候刷个剧也是很香! - -- 卫生:垃圾袋 + 卫生纸 + 湿巾。 - -- 蚊香:**防蚊**也很重要。 - -## 食材 - -喜欢什么就准备什么咯,建议**提前一天准备好**,否则真得来不及!!! - -## 建议 - -生火后大概需**要 1 个小时**才可以**正常进度烤肉**,需要提前把握好时间。 - -把握好**风口**很重要,否则**呛得**不能行! diff --git a/life/食谱/零食/炸薯条.md b/life/食谱/零食/炸薯条.md deleted file mode 100644 index 69146fbd..00000000 --- a/life/食谱/零食/炸薯条.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -id: 炸薯条 -title: 炸薯条 -data: 2022年06月17日 ---- - -## 食材 - -土豆若干 - -番茄酱等调味料若干 - -## 准备 - -1. 土豆切条 / 片,用凉水清洗干净。 -2. 处理好的土豆焯水,可以用煮饺子的方法,**水沸后加多次凉水**。 -3. 7 成油温下锅炸,看成色捞出**复炸**。 - -土豆焯水后再炸,如果想焦脆一些,复炸可以时间长点。 - -## 成品 - -![image-20220620103628385](https://static.7wate.com/img/2022/06/20/4ed3dfb94233c.png), diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 22ec446c..00000000 --- a/package-lock.json +++ /dev/null @@ -1,22713 +0,0 @@ -{ - "name": "wiki", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "wiki", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^2.4.3", - "@docusaurus/preset-classic": "^2.4.3", - "@docusaurus/theme-mermaid": "^2.4.3", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "docusaurus-plugin-umami": "^2.0.0", - "prism-react-renderer": "^1.3.5", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^2.4.3" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", - "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", - "dependencies": { - "@algolia/cache-common": "4.20.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", - "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", - "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", - "dependencies": { - "@algolia/cache-common": "4.20.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", - "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", - "dependencies": { - "@algolia/client-common": "4.20.0", - "@algolia/client-search": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", - "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", - "dependencies": { - "@algolia/client-common": "4.20.0", - "@algolia/client-search": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", - "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", - "dependencies": { - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", - "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", - "dependencies": { - "@algolia/client-common": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", - "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", - "dependencies": { - "@algolia/client-common": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", - "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", - "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", - "dependencies": { - "@algolia/logger-common": "4.20.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", - "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", - "dependencies": { - "@algolia/requester-common": "4.20.0" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", - "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", - "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", - "dependencies": { - "@algolia/requester-common": "4.20.0" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", - "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", - "dependencies": { - "@algolia/cache-common": "4.20.0", - "@algolia/logger-common": "4.20.0", - "@algolia/requester-common": "4.20.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", - "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "dependencies": { - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", - "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", - "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz", - "integrity": "sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", - "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz", - "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==", - "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@docsearch/css": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", - "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" - }, - "node_modules/@docsearch/react": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", - "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.5.2", - "algoliasearch": "^4.19.1" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.3.tgz", - "integrity": "sha512-dWH5P7cgeNSIg9ufReX6gaCl/TmrGKD38Orbwuz05WPhAQtFXHd5B8Qym1TiXfvUNvwoYKkAJOJuGe8ou0Z7PA==", - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.3.tgz", - "integrity": "sha512-ZvGSRCi7z9wLnZrXNPG6DmVPHdKGd8dIn9pYbEOFiYihfv4uDR3UtxogmKf+rT8ZlKFf5Lqne8E8nt08zNM8CA==", - "dependencies": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/logger": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.3.tgz", - "integrity": "sha512-Zxws7r3yLufk9xM1zq9ged0YHs65mlRmtsobnFkdZTxWXdTYlWWLWdKyNKAsVC+D7zg+pv2fGbyabdOnyZOM3w==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.3.tgz", - "integrity": "sha512-b1+fDnWtl3GiqkL0BRjYtc94FZrcDDBV1j8446+4tptB9BAOlePwG2p/pK6vGvfL53lkOsszXMghr2g67M0vCw==", - "dependencies": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.3.tgz", - "integrity": "sha512-cwkBkt1UCiduuvEAo7XZY01dJfRn7UR/75mBgOdb1hKknhrabJZ8YH+7savd/y9kLExPyrhe0QwdS9GuzsRRIA==", - "dependencies": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.4.3", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.3.tgz", - "integrity": "sha512-PVhypqaA0t98zVDpOeTqWUTvRqCEjJubtfFUQ7zJNYdbYTbS/E/ytq6zbLVsN/dImvemtO/5JQgjLxsh8XLo8Q==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.3.tgz", - "integrity": "sha512-N7Po2LSH6UejQhzTCsvuX5NOzlC+HiXOVvofnEPj0WhMu1etpLEXE6a4aTxrtg95lQ5kf0xUIdjX9sh3d3G76A==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.3.tgz", - "integrity": "sha512-txtDVz7y3zGk67q0HjG0gRttVPodkHqE0bpJ+7dOaTH40CQFLSh7+aBeGnPOTl+oCPG+hxkim4SndqPqXjQ8Bg==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.3.tgz", - "integrity": "sha512-LkUbuq3zCmINlFb+gAd4ZvYr+bPAzMC0hwND4F7V9bZ852dCX8YoWyovVUBKq4er1XsOwSQaHmNGtObtn8Av8Q==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.3.tgz", - "integrity": "sha512-KzBV3k8lDkWOhg/oYGxlK5o9bOwX7KpPc/FTWoB+SfKhlHfhq7qcQdMi1elAaVEIop8tgK6gD1E58Q+XC6otSQ==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.3.tgz", - "integrity": "sha512-5FMg0rT7sDy4i9AGsvJC71MQrqQZwgLNdDetLEGDHLfSHLvJhQbTCUGbGXknUgWXQJckcV/AILYeJy+HhxeIFA==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.3.tgz", - "integrity": "sha512-1jTzp71yDGuQiX9Bi0pVp3alArV0LSnHXempvQTxwCGAEzUWWaBg4d8pocAlTpbP9aULQQqhgzrs8hgTRPOM0A==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.3.tgz", - "integrity": "sha512-LRQYrK1oH1rNfr4YvWBmRzTL0LN9UAPxBbghgeFRBm5yloF6P+zv1tm2pe2hQTX/QP5bSKdnajCvfnScgKXMZQ==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.3.tgz", - "integrity": "sha512-tRyMliepY11Ym6hB1rAFSNGwQDpmszvWYJvlK1E+md4SW8i6ylNHtpZjaYFff9Mdk3i/Pg8ItQq9P0daOJAvQw==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/plugin-content-blog": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/plugin-content-pages": "2.4.3", - "@docusaurus/plugin-debug": "2.4.3", - "@docusaurus/plugin-google-analytics": "2.4.3", - "@docusaurus/plugin-google-gtag": "2.4.3", - "@docusaurus/plugin-google-tag-manager": "2.4.3", - "@docusaurus/plugin-sitemap": "2.4.3", - "@docusaurus/theme-classic": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/theme-search-algolia": "2.4.3", - "@docusaurus/types": "2.4.3" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.3.tgz", - "integrity": "sha512-QKRAJPSGPfDY2yCiPMIVyr+MqwZCIV2lxNzqbyUW0YkrlmdzzP3WuQJPMGLCjWgQp/5c9kpWMvMxjhpZx1R32Q==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/plugin-content-blog": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/plugin-content-pages": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/theme-translations": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.43", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.3.tgz", - "integrity": "sha512-7KaDJBXKBVGXw5WOVt84FtN8czGWhM0lbyWEZXGp8AFfL6sZQfRTluFp4QriR97qwzSyOfQb+nzcDZZU4tezUw==", - "dependencies": { - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/plugin-content-blog": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/plugin-content-pages": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-mermaid": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-2.4.3.tgz", - "integrity": "sha512-S1tZ3xpowtFiTrpTKmvVbRHUYGOlEG5CnPzWlO4huJT1sAwLR+pD6f9DYUlPv2+9NezF3EfUrUyW9xLH0UP58w==", - "dependencies": { - "@docusaurus/core": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@mdx-js/react": "^1.6.22", - "mermaid": "^9.2.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.3.tgz", - "integrity": "sha512-jziq4f6YVUB5hZOB85ELATwnxBz/RmSLD3ksGQOLDPKVzat4pmI8tddNWtriPpxR04BNT+ZfpPUMFkNFetSW1Q==", - "dependencies": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/theme-translations": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.3.tgz", - "integrity": "sha512-H4D+lbZbjbKNS/Zw1Lel64PioUAIT3cLYYJLUf3KkuO/oc9e0QCVhIYVtUI2SfBCF2NNdlyhBDQEEMygsCedIg==", - "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.3.tgz", - "integrity": "sha512-W6zNLGQqfrp/EoPD0bhb9n7OobP+RHpmvVzpA+Z/IuU3Q63njJM24hmT0GYboovWcDtFmnIJC9wcyx4RVPQscw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.3.tgz", - "integrity": "sha512-fKcXsjrD86Smxv8Pt0TBFqYieZZCPh4cbf9oszUq/AMhZn3ujwpKaVYZACPX8mmjtYx0JOgNx52CREBfiGQB4A==", - "dependencies": { - "@docusaurus/logger": "2.4.3", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.3.tgz", - "integrity": "sha512-/jascp4GbLQCPVmcGkPzEQjNaAk3ADVfMtudk49Ggb+131B1WDD6HqlSmDf8MxGdy7Dja2gc+StHf01kiWoTDQ==", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.3.tgz", - "integrity": "sha512-G2+Vt3WR5E/9drAobP+hhZQMaswRwDlp6qOMi7o7ZypB+VO7N//DZWhZEwhcRGepMDJGQEwtPv7UxtYwPL9PBw==", - "dependencies": { - "@docusaurus/logger": "2.4.3", - "@docusaurus/utils": "2.4.3", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "dependencies": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@svgr/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@svgr/webpack/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz", - "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/mdast": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", - "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/@types/node": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", - "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/react": { - "version": "18.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz", - "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/sax": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.5.tgz", - "integrity": "sha512-9jWta97bBVC027/MShr3gLab8gPhKy4l6qpb+UJLF5pDm3501NvA7uvqVCW+REFtx00oTi6Cq9JzLwgq6evVgw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", - "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", - "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.20.0", - "@algolia/cache-common": "4.20.0", - "@algolia/cache-in-memory": "4.20.0", - "@algolia/client-account": "4.20.0", - "@algolia/client-analytics": "4.20.0", - "@algolia/client-common": "4.20.0", - "@algolia/client-personalization": "4.20.0", - "@algolia/client-search": "4.20.0", - "@algolia/logger-common": "4.20.0", - "@algolia/logger-console": "4.20.0", - "@algolia/requester-browser-xhr": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/requester-node-http": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz", - "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", - "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001549", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", - "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.0.tgz", - "integrity": "sha512-IeOyT8A6iK37Ep4kZDD423mpi6JfPRoPUdQwEWYiGolvn4o6j2diaRzNfDfpTdu3a5qMbrGUzKUpYpRY8jXCkQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.0.tgz", - "integrity": "sha512-spN2H4E/wocMML7XtbKuqttHHM+zbF3bAdl9mT4/iyFaF33bowQGjxiWNWyvUJGH9F+hTgnhWziiLtwu3oC/Qg==", - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz", - "integrity": "sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "dependencies": { - "layout-base": "^1.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", - "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz", - "integrity": "sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==", - "dependencies": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "dependencies": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "node_modules/cytoscape": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", - "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", - "dependencies": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "dependencies": { - "cose-base": "^1.0.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - }, - "node_modules/d3": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.4.tgz", - "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz", - "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre-d3-es": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", - "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", - "dependencies": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "node_modules/dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-plugin-umami": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-umami/-/docusaurus-plugin-umami-2.0.0.tgz", - "integrity": "sha512-SgkZZYuUMCZe0XeitTA2RPVJvb4fC3aiF3pHc1JxEoaeF9v5g34Yxr2YQb18eFhAMeVK4AjjCr62IwpnuOGyEg==", - "engines": { - "node": ">=10.15.1" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.556", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.556.tgz", - "integrity": "sha512-6RPN0hHfzDU8D56E72YkDvnLw5Cj2NMXZGg3UkgyoHxjVhG99KZpsKgBWMmTy0Ei89xwan+rbRsVB9yzATmYzQ==" - }, - "node_modules/elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.15", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", - "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", - "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "dagre-d3-es": "7.0.9", - "dayjs": "^1.11.7", - "dompurify": "2.4.3", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.2", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } - }, - "node_modules/mermaid/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", - "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.3.tgz", - "integrity": "sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.3", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", - "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.9.0.tgz", - "integrity": "sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.1.1.tgz", - "integrity": "sha512-/c645XdExBypL01TpFKiG/3RAa/Qmu+zRi0MwAmrdEkwHNuN0ebo8ccAXBBDa5Z0QOJgBskUIbuCK91x0sCVEw==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", - "deprecated": "Use String.prototype.trim() instead" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/type-fest": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz", - "integrity": "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", - "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/update-notifier/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.78.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz", - "integrity": "sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", - "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "requires": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "requires": { - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", - "requires": { - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "requires": {} - }, - "@algolia/cache-browser-local-storage": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", - "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", - "requires": { - "@algolia/cache-common": "4.20.0" - } - }, - "@algolia/cache-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", - "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" - }, - "@algolia/cache-in-memory": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", - "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", - "requires": { - "@algolia/cache-common": "4.20.0" - } - }, - "@algolia/client-account": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", - "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", - "requires": { - "@algolia/client-common": "4.20.0", - "@algolia/client-search": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "@algolia/client-analytics": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", - "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", - "requires": { - "@algolia/client-common": "4.20.0", - "@algolia/client-search": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "@algolia/client-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", - "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", - "requires": { - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "@algolia/client-personalization": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", - "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", - "requires": { - "@algolia/client-common": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "@algolia/client-search": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", - "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", - "requires": { - "@algolia/client-common": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", - "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" - }, - "@algolia/logger-console": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", - "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", - "requires": { - "@algolia/logger-common": "4.20.0" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", - "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", - "requires": { - "@algolia/requester-common": "4.20.0" - } - }, - "@algolia/requester-common": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", - "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" - }, - "@algolia/requester-node-http": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", - "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", - "requires": { - "@algolia/requester-common": "4.20.0" - } - }, - "@algolia/transporter": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", - "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", - "requires": { - "@algolia/cache-common": "4.20.0", - "@algolia/logger-common": "4.20.0", - "@algolia/requester-common": "4.20.0" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.20.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", - "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" - }, - "@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "requires": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", - "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", - "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", - "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz", - "integrity": "sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", - "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/runtime-corejs3": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz", - "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==", - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@docsearch/css": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", - "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" - }, - "@docsearch/react": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", - "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", - "requires": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.5.2", - "algoliasearch": "^4.19.1" - } - }, - "@docusaurus/core": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.3.tgz", - "integrity": "sha512-dWH5P7cgeNSIg9ufReX6gaCl/TmrGKD38Orbwuz05WPhAQtFXHd5B8Qym1TiXfvUNvwoYKkAJOJuGe8ou0Z7PA==", - "requires": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.3.tgz", - "integrity": "sha512-ZvGSRCi7z9wLnZrXNPG6DmVPHdKGd8dIn9pYbEOFiYihfv4uDR3UtxogmKf+rT8ZlKFf5Lqne8E8nt08zNM8CA==", - "requires": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/logger": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.3.tgz", - "integrity": "sha512-Zxws7r3yLufk9xM1zq9ged0YHs65mlRmtsobnFkdZTxWXdTYlWWLWdKyNKAsVC+D7zg+pv2fGbyabdOnyZOM3w==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.3.tgz", - "integrity": "sha512-b1+fDnWtl3GiqkL0BRjYtc94FZrcDDBV1j8446+4tptB9BAOlePwG2p/pK6vGvfL53lkOsszXMghr2g67M0vCw==", - "requires": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.3.tgz", - "integrity": "sha512-cwkBkt1UCiduuvEAo7XZY01dJfRn7UR/75mBgOdb1hKknhrabJZ8YH+7savd/y9kLExPyrhe0QwdS9GuzsRRIA==", - "requires": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.4.3", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.3.tgz", - "integrity": "sha512-PVhypqaA0t98zVDpOeTqWUTvRqCEjJubtfFUQ7zJNYdbYTbS/E/ytq6zbLVsN/dImvemtO/5JQgjLxsh8XLo8Q==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.3.tgz", - "integrity": "sha512-N7Po2LSH6UejQhzTCsvuX5NOzlC+HiXOVvofnEPj0WhMu1etpLEXE6a4aTxrtg95lQ5kf0xUIdjX9sh3d3G76A==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.3.tgz", - "integrity": "sha512-txtDVz7y3zGk67q0HjG0gRttVPodkHqE0bpJ+7dOaTH40CQFLSh7+aBeGnPOTl+oCPG+hxkim4SndqPqXjQ8Bg==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.3.tgz", - "integrity": "sha512-LkUbuq3zCmINlFb+gAd4ZvYr+bPAzMC0hwND4F7V9bZ852dCX8YoWyovVUBKq4er1XsOwSQaHmNGtObtn8Av8Q==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.3.tgz", - "integrity": "sha512-KzBV3k8lDkWOhg/oYGxlK5o9bOwX7KpPc/FTWoB+SfKhlHfhq7qcQdMi1elAaVEIop8tgK6gD1E58Q+XC6otSQ==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.3.tgz", - "integrity": "sha512-5FMg0rT7sDy4i9AGsvJC71MQrqQZwgLNdDetLEGDHLfSHLvJhQbTCUGbGXknUgWXQJckcV/AILYeJy+HhxeIFA==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-tag-manager": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.3.tgz", - "integrity": "sha512-1jTzp71yDGuQiX9Bi0pVp3alArV0LSnHXempvQTxwCGAEzUWWaBg4d8pocAlTpbP9aULQQqhgzrs8hgTRPOM0A==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.3.tgz", - "integrity": "sha512-LRQYrK1oH1rNfr4YvWBmRzTL0LN9UAPxBbghgeFRBm5yloF6P+zv1tm2pe2hQTX/QP5bSKdnajCvfnScgKXMZQ==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/preset-classic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.3.tgz", - "integrity": "sha512-tRyMliepY11Ym6hB1rAFSNGwQDpmszvWYJvlK1E+md4SW8i6ylNHtpZjaYFff9Mdk3i/Pg8ItQq9P0daOJAvQw==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/plugin-content-blog": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/plugin-content-pages": "2.4.3", - "@docusaurus/plugin-debug": "2.4.3", - "@docusaurus/plugin-google-analytics": "2.4.3", - "@docusaurus/plugin-google-gtag": "2.4.3", - "@docusaurus/plugin-google-tag-manager": "2.4.3", - "@docusaurus/plugin-sitemap": "2.4.3", - "@docusaurus/theme-classic": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/theme-search-algolia": "2.4.3", - "@docusaurus/types": "2.4.3" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/theme-classic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.3.tgz", - "integrity": "sha512-QKRAJPSGPfDY2yCiPMIVyr+MqwZCIV2lxNzqbyUW0YkrlmdzzP3WuQJPMGLCjWgQp/5c9kpWMvMxjhpZx1R32Q==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/plugin-content-blog": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/plugin-content-pages": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/theme-translations": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.43", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.3.tgz", - "integrity": "sha512-7KaDJBXKBVGXw5WOVt84FtN8czGWhM0lbyWEZXGp8AFfL6sZQfRTluFp4QriR97qwzSyOfQb+nzcDZZU4tezUw==", - "requires": { - "@docusaurus/mdx-loader": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/plugin-content-blog": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/plugin-content-pages": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-common": "2.4.3", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-mermaid": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-2.4.3.tgz", - "integrity": "sha512-S1tZ3xpowtFiTrpTKmvVbRHUYGOlEG5CnPzWlO4huJT1sAwLR+pD6f9DYUlPv2+9NezF3EfUrUyW9xLH0UP58w==", - "requires": { - "@docusaurus/core": "2.4.3", - "@docusaurus/module-type-aliases": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/types": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "@mdx-js/react": "^1.6.22", - "mermaid": "^9.2.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.3.tgz", - "integrity": "sha512-jziq4f6YVUB5hZOB85ELATwnxBz/RmSLD3ksGQOLDPKVzat4pmI8tddNWtriPpxR04BNT+ZfpPUMFkNFetSW1Q==", - "requires": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.4.3", - "@docusaurus/logger": "2.4.3", - "@docusaurus/plugin-content-docs": "2.4.3", - "@docusaurus/theme-common": "2.4.3", - "@docusaurus/theme-translations": "2.4.3", - "@docusaurus/utils": "2.4.3", - "@docusaurus/utils-validation": "2.4.3", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-translations": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.3.tgz", - "integrity": "sha512-H4D+lbZbjbKNS/Zw1Lel64PioUAIT3cLYYJLUf3KkuO/oc9e0QCVhIYVtUI2SfBCF2NNdlyhBDQEEMygsCedIg==", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/types": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.3.tgz", - "integrity": "sha512-W6zNLGQqfrp/EoPD0bhb9n7OobP+RHpmvVzpA+Z/IuU3Q63njJM24hmT0GYboovWcDtFmnIJC9wcyx4RVPQscw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - } - }, - "@docusaurus/utils": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.3.tgz", - "integrity": "sha512-fKcXsjrD86Smxv8Pt0TBFqYieZZCPh4cbf9oszUq/AMhZn3ujwpKaVYZACPX8mmjtYx0JOgNx52CREBfiGQB4A==", - "requires": { - "@docusaurus/logger": "2.4.3", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - } - }, - "@docusaurus/utils-common": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.3.tgz", - "integrity": "sha512-/jascp4GbLQCPVmcGkPzEQjNaAk3ADVfMtudk49Ggb+131B1WDD6HqlSmDf8MxGdy7Dja2gc+StHf01kiWoTDQ==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.3.tgz", - "integrity": "sha512-G2+Vt3WR5E/9drAobP+hhZQMaswRwDlp6qOMi7o7ZypB+VO7N//DZWhZEwhcRGepMDJGQEwtPv7UxtYwPL9PBw==", - "requires": { - "@docusaurus/logger": "2.4.3", - "@docusaurus/utils": "2.4.3", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "requires": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - } - }, - "@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "dependencies": { - "@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", - "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.7", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/hast": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz", - "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==", - "requires": { - "@types/unist": "^2" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/mdast": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", - "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", - "requires": { - "@types/unist": "^2" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "@types/node": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", - "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "18.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz", - "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.5.tgz", - "integrity": "sha512-9jWta97bBVC027/MShr3gLab8gPhKy4l6qpb+UJLF5pDm3501NvA7uvqVCW+REFtx00oTi6Cq9JzLwgq6evVgw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", - "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - } - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", - "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", - "requires": { - "@algolia/cache-browser-local-storage": "4.20.0", - "@algolia/cache-common": "4.20.0", - "@algolia/cache-in-memory": "4.20.0", - "@algolia/client-account": "4.20.0", - "@algolia/client-analytics": "4.20.0", - "@algolia/client-common": "4.20.0", - "@algolia/client-personalization": "4.20.0", - "@algolia/client-search": "4.20.0", - "@algolia/logger-common": "4.20.0", - "@algolia/logger-console": "4.20.0", - "@algolia/requester-browser-xhr": "4.20.0", - "@algolia/requester-common": "4.20.0", - "@algolia/requester-node-http": "4.20.0", - "@algolia/transporter": "4.20.0" - } - }, - "algoliasearch-helper": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz", - "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour-service": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", - "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001549", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", - "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==" - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==" - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.0.tgz", - "integrity": "sha512-IeOyT8A6iK37Ep4kZDD423mpi6JfPRoPUdQwEWYiGolvn4o6j2diaRzNfDfpTdu3a5qMbrGUzKUpYpRY8jXCkQ==" - }, - "core-js-compat": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.0.tgz", - "integrity": "sha512-spN2H4E/wocMML7XtbKuqttHHM+zbF3bAdl9mT4/iyFaF33bowQGjxiWNWyvUJGH9F+hTgnhWziiLtwu3oC/Qg==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz", - "integrity": "sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "requires": { - "layout-base": "^1.0.0" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "requires": { - "node-fetch": "^2.6.12" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} - }, - "css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz", - "integrity": "sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==", - "requires": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "requires": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "cytoscape": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", - "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", - "requires": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - } - }, - "cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "requires": { - "cose-base": "^1.0.0" - } - }, - "cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "requires": { - "cose-base": "^2.2.0" - }, - "dependencies": { - "cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "requires": { - "layout-base": "^2.0.0" - } - }, - "layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - } - } - }, - "d3": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.4.tgz", - "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - } - }, - "d3-array": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz", - "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "requires": { - "d3-array": "^3.2.0" - } - }, - "d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "requires": { - "d3-array": "2.5.0 - 3" - } - }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } - }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } - }, - "dagre-d3-es": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", - "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", - "requires": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "docusaurus-plugin-umami": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-umami/-/docusaurus-plugin-umami-2.0.0.tgz", - "integrity": "sha512-SgkZZYuUMCZe0XeitTA2RPVJvb4fC3aiF3pHc1JxEoaeF9v5g34Yxr2YQb18eFhAMeVK4AjjCr62IwpnuOGyEg==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.556", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.556.tgz", - "integrity": "sha512-6RPN0hHfzDU8D56E72YkDvnLw5Cj2NMXZGg3UkgyoHxjVhG99KZpsKgBWMmTy0Ei89xwan+rbRsVB9yzATmYzQ==" - }, - "elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - } - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - } - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "requires": { - "queue": "6.0.2" - } - }, - "immer": { - "version": "9.0.15", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", - "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, - "layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "mermaid": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", - "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", - "requires": { - "@braintree/sanitize-url": "^6.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "dagre-d3-es": "7.0.9", - "dayjs": "^1.11.7", - "dompurify": "2.4.3", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.2", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - }, - "dependencies": { - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - } - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} - }, - "postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - } - }, - "postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sort-media-queries": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", - "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", - "requires": { - "sort-css-media-queries": "2.1.0" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "requires": {} - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" - }, - "prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "requires": {} - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "requires": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { - "@babel/runtime": "^7.10.3" - } - }, - "react-router": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.3.tgz", - "integrity": "sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.3", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-textarea-autosize": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", - "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "requires": { - "rc": "1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "requires": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "requires": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "search-insights": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.9.0.tgz", - "integrity": "sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==", - "peer": true - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - } - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "std-env": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.1.1.tgz", - "integrity": "sha512-/c645XdExBypL01TpFKiG/3RAa/Qmu+zRi0MwAmrdEkwHNuN0ebo8ccAXBBDa5Z0QOJgBskUIbuCK91x0sCVEw==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.7", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" - }, - "trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "type-fest": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz", - "integrity": "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - } - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "peer": true - }, - "ua-parser-js": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", - "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==" - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} - }, - "use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" - }, - "web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "webpack": { - "version": "5.78.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz", - "integrity": "sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g==", - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", - "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", - "requires": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - }, - "webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "requires": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { - "string-width": "^5.0.1" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { - "sax": "^1.2.4" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 1bd4c428..00000000 --- a/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "wiki", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "^2.4.3", - "@docusaurus/preset-classic": "^2.4.3", - "@docusaurus/theme-mermaid": "^2.4.3", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "docusaurus-plugin-umami": "^2.0.0", - "prism-react-renderer": "^1.3.5", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^2.4.3" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=16.14" - } -} diff --git a/sidebars.js b/sidebars.js deleted file mode 100644 index cbd5d8b7..00000000 --- a/sidebars.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [ - { - type: 'autogenerated', - dirName: '.', - } - ], - - // But you can create a sidebar manually - /* - tutorialSidebar: [ - { - type: 'category', - label: 'Tutorial', - items: ['hello'], - }, - ], - */ -}; - -module.exports = sidebars; diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js deleted file mode 100644 index a2c8f352..00000000 --- a/src/components/HomepageFeatures.js +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react' -import clsx from 'clsx' -import styles from './HomepageFeatures.module.css' - -const FeatureList = [ - { - title: '支持 Markdown', - Svg: require('../../static/img/undraw_docusaurus_react.svg').default, - // description: ( - // <> - // 你只须专注于使用 Markdown/MDX 格式编写文档和文章即可, Docusaurus - // 会自动生成可以对外发布的静态 HTML 文件。 借助 MDX,你甚至可以将 JSX - // 组件嵌入到 Markdown 中。 - // - // ), - }, - { - title: 'Easy to Use', - Svg: require('../../static/img/undraw_docusaurus_mountain.svg').default, - // description: <>内容可搜索,让你轻松地在文档中找到所需的内容。, - }, - { - title: '基于 React 技术构建', - Svg: require('../../static/img/undraw_docusaurus_tree.svg').default, - // description: ( - // <> - // Docusaurus lets you focus on your docs, and we'll do the chores. Go - // ahead and move your docs into the docs directory. - // - // ), - }, -] - -function Feature({ Svg, title, description }) { - return ( -
-
- -
-
-

{title}

-

{description}

-
-
- ) -} - -export default function HomepageFeatures() { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ) -} diff --git a/src/components/HomepageFeatures.module.css b/src/components/HomepageFeatures.module.css deleted file mode 100644 index b248eb2e..00000000 --- a/src/components/HomepageFeatures.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/src/components/MyMDX.js b/src/components/MyMDX.js deleted file mode 100644 index 9287bf79..00000000 --- a/src/components/MyMDX.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from "react" -export function Highlight({ children, color }) { - return ( - - {children} - - ) -} diff --git a/src/components/redirect.js b/src/components/redirect.js deleted file mode 100644 index 5425702e..00000000 --- a/src/components/redirect.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { Redirect } from '@docusaurus/router' -import { useEffect } from 'react' - -export function Open({ go }) { - useEffect(() => { - window.open(go, '_blank') - }, []) - return ( -
- {redirectContent()} - 👉 或者手动点击本篇文章阅读地址:   - - {go} - -
- ) -} - -function redirectContent() { - return ( -
-

✨ 为了更好的浏览体验,浏览器将自动跳转至其他页面阅读。

-

🖐 请允许浏览器自动跳转~

-
- ) -} diff --git a/src/css/custom.css b/src/css/custom.css deleted file mode 100644 index 16ebb193..00000000 --- a/src/css/custom.css +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ - -/* @import url("https://fonts.googleapis.com/css2?family=Noto+Sans:ital@1&family=Poppins:wght@500&display=swap"); */ -/* @import url("https://fonts.googleapis.com/css2?family=Noto+Sans:ital@1&family=Poppins:wght@500&display=swap"); */ -@import url('https://fonts.googleapis.com/css2?family=Noto+Sans&display=swap'); -:root { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: rgb(33, 175, 144); - --ifm-color-primary-darker: rgb(31, 165, 136); - --ifm-color-primary-darkest: rgb(26, 136, 112); - --ifm-color-primary-light: rgb(70, 203, 174); - --ifm-color-primary-lighter: rgb(102, 212, 189); - --ifm-color-primary-lightest: rgb(146, 224, 208); - --ifm-code-font-size: 95%; - --site-announcement-bar-stripe-color1: hsl(167deg 68% 85%); - --site-announcement-bar-stripe-color2: hsl(167deg 68% 95%); -} - -.docusaurus-highlight-code-line { - background-color: rgba(0, 0, 0, 0.1); - display: block; - margin: 0 calc(-1 * var(--ifm-pre-padding)); - padding: 0 var(--ifm-pre-padding); -} - -html[data-theme='dark'] .docusaurus-highlight-code-line { - background-color: rgba(0, 0, 0, 0.3); -} - -html { - font-family: 'Noto Sans', sans-serif; - font-style: normal; -} - -/* 小空调自定义样式 */ -/* #airConditioning { - padding-left: 30px; - border-left: 0.5px solid var(--ifm-color-emphasis-300); - float: right; - margin-top: -630px; - height: 651px; - overflow: hidden; - zoom: 80%; -} */ - -/* tg comments */ -#comments-app-27ZP8kvt-1 { - overflow: auto; - border: none; - height: 186px; -} - -/* @media screen and (max-width: 767px) { - #airConditioning { - display: none; - } -} */ - -/* html[data-theme="dark"] #airConditioning { - padding-left: 30px; - border-left: 1px solid var(--ifm-color-emphasis-300); - float: right; - margin-top: -660px; - height: 651px; - overflow: hidden; -} */ - -hr { - border: 0.5px solid rgb(245, 244, 244); - padding: 0; - margin: 0; - width: 90%; - color: rgb(201, 120, 120); -} -blockquote { - transition: all 0.5s ease-in-out; - /* background: var(--ifm-color-primary-lighter); */ - /* border-bottom: #25c2a0 1px solid; */ - background-color: #f8f8f9; - font-size: 0.9em; - border-image-source: linear-gradient(to left, #8f41e9, #f8f8f8); - box-shadow: 1px 1px 5px 5px rgba(139, 138, 138, 0.01); - padding: 5px 10px; - margin: 10px 0; - border-radius: 5px; -} -blockquote:hover { - /* border-left: 2px solid var(--ifm-color-primary); */ - border-image-source: linear-gradient(to left, #8f41e9, var(--ifm-color-primary)); - border-image-slice: 1; - box-shadow: 1px 1px 10px 5px rgba(0, 0, 0, 0); -} - -html[data-theme='dark'] blockquote { - background-color: rgba(0, 0, 0, 0.3); -} - -code { - color: var(--ifm-color-primary); - font-family: 'Noto Sans'; -} - -.markdown > h2 { - border-left: var(--ifm-color-primary-dark) 3px solid; - padding-left: 10px; - line-height: 100%; - border-left: var(--ifm-color-primary-dark) 7px solid; - border-radius: 1px; -} -.markdown > h3 { - padding-left: 10px; - line-height: 100%; - border-left: var(--ifm-color-primary-darker) 4px solid; - border-radius: 1px; -} -.markdown img { - display: block; - margin: 1rem auto; -} - -img-annotation { - display: block; - color: #a9b1bb; - margin: -1rem 0 1rem; - text-align: center; - font-size: 0.7rem; -} - -p { - margin: 15px 0 15px 10px; -} -/* 徽章居左 */ -.Badges { - display: inline-block !important; - margin: 0.5rem 0.3rem !important; -} - -/* 公告栏 */ -div[class^='announcementBar_'] { - background: repeating-linear-gradient( - 35deg, - var(--site-announcement-bar-stripe-color1), - var(--site-announcement-bar-stripe-color1) 20px, - var(--site-announcement-bar-stripe-color2) 10px, - var(--site-announcement-bar-stripe-color2) 40px - ); - font-weight: 700; -} - -/* 滚动槽 */ -::-webkit-scrollbar-track { - -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3); - border-radius: 10px; -} -/* 滚动条滑块 */ -::-webkit-scrollbar-thumb { - border-radius: 10px; - background: rgba(0, 0, 0, 0.1); - -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5); -} -::-webkit-scrollbar-thumb:window-inactive { - background: rgba(255, 0, 0, 0.4); -} -/* .dropdown__menu{ - min-width: 7rem!important; -} */ - -.margin-vert--lg > .container > .row { - flex-direction: column-reverse!important; -} - -.margin-vert--lg > .container > .row > div > h3{ - font-size: 1.8rem; -} - -.margin-vert--lg > .container > .row > div > ul > li{ - line-height: 2.0rem; - letter-spacing: 0.1rem; - width: 49vw!important; -} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js deleted file mode 100644 index 9f68502f..00000000 --- a/src/pages/index.js +++ /dev/null @@ -1,119 +0,0 @@ -import React from 'react' -import clsx from 'clsx' -import Layout from '@theme/Layout' -import Link from '@docusaurus/Link' -import useDocusaurusContext from '@docusaurus/useDocusaurusContext' -import styles from './index.module.css' -import HomepageFeatures from '../components/HomepageFeatures' -import Head from '@docusaurus/Head' -import HeroImg from '../../static/img/Hero.jpg' - -const svgList = [ - { - title: 'github', - Svg: require('../../static/img/github.svg').default, - color: 'black', - link: 'https://github.com/7Wate/wiki', - }, - { - title: 'bilibili', - Svg: require('../../static/img/bilibili.svg').default, - link: 'https://space.bilibili.com/223211771', - }, - { - title: 'wechat', - Svg: require('../../static/img/wechat.svg').default, - color: '#2979ff', - link: 'https://static.7wate.com/img/2022/06/16/d6dfd36f35293.jpg', - }, -] -const Svg = ({ Svg, color, title, link }) => { - return ( - - - - ) -} - -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext() - return ( -
-
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- - 🖱Click Here! - -
-
-
- ) -} - -function MyHero() { - return ( -
-
-

- Always
For Freedom. -

-

- 一个喜欢异想天开的家伙 💨 -
- 在这里记录知识,希望对你也有帮助。 -

-
- {/* - - Get Started.
开启学习之旅. -
*/} -
- {svgList.map((item, index) => { - return - })} -
-
-
-
- HeroImg -
-
- ) -} -export default function Home() { - const { siteConfig } = useDocusaurusContext() - return ( - - {/* */} - - // 百度 - - // 360 - - // Bing - - // 搜狗 - - // 神马 - - // 头条 - - // Google - - -
- - {/* */} -
-
- ) -} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 63749b41..00000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,121 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 966px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} - -/* ----------------------------------------------------- */ -/* myCustomCSS */ -.myHeroContainer { - display: flex; - margin: 0; - padding: 0; - flex-direction: row; - background-color: #f5f4f4; - width: 100%; - overflow: hidden; - padding: 2.5rem 6rem; -} -.leftContainer { - padding: 3rem 0 0 1rem; - font-size: 40px; - flex: 2; -} -.rightContainer { - /* width: 70%; */ - flex: 1.7; -} - -.rightContainer img { - width: 100%; - height: 100%; - object-fit: contain; -} - -.leftContainer_h1 { - color: rgb(58, 58, 58); - font-size: 4rem; -} -.leftContainer_p { - color: #565451; - font-size: 1.5rem; -} -.buttonContainer { - display: flex; - flex-direction: row; - /* justify-content: center; */ - align-items: center; - margin-top: 4rem; - width: 20rem; - flex-wrap: wrap; - row-gap: 2rem; -} - -.button { - padding: 0.6rem 2rem; - background-color: #ffae33; - color: white; - border: none; - border-radius: 0.6rem; - font-size: 1.2rem; - font-weight: bold; - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); -} -.button:hover { - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); -} -.button:active { - transform: scale(0.98); -} - -.buttonLeftText { - display: inline-block; - margin: 0 0 10px 20px; - height: 2rem; - font-size: 0.8rem; - color: #565451; -} -.svgContainer { - width: 13rem; - display: flex; - flex-direction: row; - justify-content: space-around; -} -.svg { - /* font-size: 20px; */ - width: 2.5rem; -} -.hero_a { - text-decoration: none; - color: white; -} -.hero_a:hover { - text-decoration: none; - color: white; -} -@media screen and (max-width: 966px) { - .myHeroContainer { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - } -} diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md deleted file mode 100644 index 46293cfa..00000000 --- a/src/pages/markdown-page.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -# Hi there! - -You don't need React to write simple standalone pages. diff --git a/static/.nojekyll b/static/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/static/img/Hero.jpg b/static/img/Hero.jpg deleted file mode 100644 index 2dcfee98af038ca176034dc082ca72124617e346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330312 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

8d4@?azcC*%~IE{qP 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ƉG+ksV?V$e@Z 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 \ No newline at end of file diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png deleted file mode 100644 index f458149e3c8f53335f28fbc162ae67f55575c881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 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 F{0H{b<4^zq diff --git a/static/img/favicon.ico b/static/img/favicon.ico deleted file mode 100644 index c01d54bcd39a5f853428f3cd5aa0f383d963c484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3626 zcmb`Je@s(X6vrR`EK3%b%orErlDW({vnABqA zcfaS{d+xbU5JKp0*;0YOg+;Fl!eT)XRuapIwFLL`=imZCSon$`se`_<%@MB=M~KG+ z=EW^FL`w|Bo>*ktlaS^(fut!95`iG5u=SZ8nfDHO#GaTlH1-XG^;vsjUb^gWTVz0+ z^=WR1wv9-2oeR=_;fL0H7rNWqAzGtO(D;`~cX(RcN0w2v24Y8)6t`cS^_ghs`_ho? z{0ka~1Dgo8TfAP$r*ua?>$_V+kZ!-(TvEJ7O2f;Y#tezt$&R4 zLI}=-y@Z!grf*h3>}DUL{km4R>ya_I5Ag#{h_&?+HpKS!;$x3LC#CqUQ8&nM?X))Q zXAy2?`YL4FbC5CgJu(M&Q|>1st8XXLZ|5MgwgjP$m_2Vt0(J z&Gu7bOlkbGzGm2sh?X`){7w69Y$1#@P@7DF{ZE=4%T0NDS)iH`tiPSKpDNW)zmtn( zw;4$f>k)4$LBc>eBAaTZeCM2(iD+sHlj!qd z2GjRJ>f_Qes(+mnzdA^NH?^NB(^o-%Gmg$c8MNMq&`vm@9Ut;*&$xSD)PKH{wBCEC z4P9%NQ;n2s59ffMn8*5)5AAg4-93gBXBDX`A7S& zH-|%S3Wd%T79fk-e&l`{!?lve8_epXhE{d3Hn$Cg!t=-4D(t$cK~7f&4s?t7wr3ZP z*!SRQ-+tr|e1|hbc__J`k3S!rMy<0PHy&R`v#aJv?`Y?2{avK5sQz%=Us()jcNuZV z*$>auD4cEw>;t`+m>h?f?%VFJZj8D|Y1e_SjxG%J4{-AkFtT2+ZZS5UScS~%;dp!V>)7zi`w(xwSd*FS;Lml=f6hn#jq)2is4nkp+aTrV?)F6N z>DY#SU0IZ;*?Hu%tSj4edd~kYNHMFvS&5}#3-M;mBCOCZL3&;2obdG?qZ>rD|zC|Lu|sny76pn2xl|6sk~Hs{X9{8iBW zwiwgQt+@hi`FYMEhX2 \ No newline at end of file diff --git a/static/img/index.jpg b/static/img/index.jpg deleted file mode 100644 index 67f488279796b03b29b00bd947f5dafdec5e1694..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85254 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 n8ocC@d}Ppk \ No newline at end of file diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index af961c49..00000000 --- a/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,171 +0,0 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf08..00000000 --- a/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d33..00000000 --- a/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/wechat.svg b/static/img/wechat.svg deleted file mode 100644 index c71b00e1..00000000 --- a/static/img/wechat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/zhihu.svg b/static/img/zhihu.svg deleted file mode 100644 index c283d23e..00000000 --- a/static/img/zhihu.svg +++ /dev/null @@ -1 +0,0 @@ -Zhihu \ No newline at end of file diff --git a/static/robots.txt b/static/robots.txt deleted file mode 100644 index 370ed613..00000000 --- a/static/robots.txt +++ /dev/null @@ -1,31 +0,0 @@ -User-agent: Baiduspider -Disallow: -User-agent: Sosospider -Disallow: -User-agent: sogou spider -Disallow: -User-agent: YodaoBot -Disallow: -User-agent: Googlebot -Disallow: -User-agent: Bingbot -Disallow: -User-agent: Slurp -Disallow: -User-agent: MSNBot -Disallow: -User-agent: googlebot-image -Disallow: -User-agent: googlebot-mobile -Disallow: -User-agent: yahoo-mmcrawler -Disallow: -User-agent: yahoo-blogs/v3.9 -Disallow: -User-agent: psbot -Disallow: -User-agent: * -Disallow: -Crawl-delay: 60 -Sitemap: https://wiki.7wate.com/sitemap.xml -Sitemap: http://wiki.7wate.com/sitemap.xml diff --git a/wiki/compilation-principle/home.md b/wiki/compilation-principle/home.md deleted file mode 100644 index 31d174de..00000000 --- a/wiki/compilation-principle/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -编译原理 ~ 🤩🤩🤩 - - - diff --git a/wiki/computer-composition/home.md b/wiki/computer-composition/home.md deleted file mode 100644 index df73735c..00000000 --- a/wiki/computer-composition/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -计算机组成原理 ~ 🤩🤩🤩 - - - diff --git a/wiki/computer-network/home.md b/wiki/computer-network/home.md deleted file mode 100644 index 4c48f2dd..00000000 --- a/wiki/computer-network/home.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -计算机网络就像现代生活的血脉,将世界上的设备、服务和信息连接起来。想象一下,你能随时随地购物、视频聊天,甚至远程工作,都是因为有了计算机网络。但是,它是如何工作的呢?在我们的手指轻轻一滑,消息就能传遍世界的背后,又隐藏着怎样的秘密?本文将从网络的基本架构到数据传输的微观细节,带你领略计算机网络的魅力,让你更好地理解和利用这个改变世界的强大工具。 - -🧵🧵🧵 - - - diff --git a/wiki/computer-network/基础知识/_category_.json b/wiki/computer-network/基础知识/_category_.json deleted file mode 100644 index cb65e15a..00000000 --- a/wiki/computer-network/基础知识/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "基础知识", - "position": 1, - "link": { - "type": "generated-index", - "title": "基础知识" - } -} \ No newline at end of file diff --git a/wiki/computer-network/应用服务/_category_.json b/wiki/computer-network/应用服务/_category_.json deleted file mode 100644 index a25128d6..00000000 --- a/wiki/computer-network/应用服务/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "应用服务", - "position": 3, - "link": { - "type": "generated-index", - "title": "应用服务" - } -} \ No newline at end of file diff --git a/wiki/computer-network/网络协议/_category_.json b/wiki/computer-network/网络协议/_category_.json deleted file mode 100644 index e5ffd118..00000000 --- a/wiki/computer-network/网络协议/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "网络协议", - "position": 2, - "link": { - "type": "generated-index", - "title": "网络协议" - } -} \ No newline at end of file diff --git a/wiki/computer-security/home.md b/wiki/computer-security/home.md deleted file mode 100644 index dc7b155a..00000000 --- a/wiki/computer-security/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -计算机安全 ~ 🤩🤩🤩 - - - diff --git a/wiki/computer-security/信息安全/_category_.json b/wiki/computer-security/信息安全/_category_.json deleted file mode 100644 index 28644ccc..00000000 --- a/wiki/computer-security/信息安全/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "信息安全", - "position": 3, - "link": { - "type": "generated-index", - "title": "信息安全" - } -} \ No newline at end of file diff --git a/wiki/computer-security/密码学/_category_.json b/wiki/computer-security/密码学/_category_.json deleted file mode 100644 index 99951c29..00000000 --- a/wiki/computer-security/密码学/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "密码学", - "position": 1, - "link": { - "type": "generated-index", - "title": "密码学" - } -} \ No newline at end of file diff --git a/wiki/computer-security/用户安全/_category_.json b/wiki/computer-security/用户安全/_category_.json deleted file mode 100644 index d5145d6b..00000000 --- a/wiki/computer-security/用户安全/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "用户安全", - "position": 5, - "link": { - "type": "generated-index", - "title": "用户安全" - } -} \ No newline at end of file diff --git a/wiki/computer-security/系统安全/_category_.json b/wiki/computer-security/系统安全/_category_.json deleted file mode 100644 index 35277cc5..00000000 --- a/wiki/computer-security/系统安全/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "系统安全", - "position": 4, - "link": { - "type": "generated-index", - "title": "系统安全" - } -} \ No newline at end of file diff --git a/wiki/computer-security/网络安全/_category_.json b/wiki/computer-security/网络安全/_category_.json deleted file mode 100644 index b9be8fcd..00000000 --- a/wiki/computer-security/网络安全/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "网络安全", - "position": 2, - "link": { - "type": "generated-index", - "title": "网络安全" - } -} \ No newline at end of file diff --git a/wiki/database-system/PostgreSQL/_category_.json b/wiki/database-system/PostgreSQL/_category_.json deleted file mode 100644 index 19e0ded8..00000000 --- a/wiki/database-system/PostgreSQL/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "PostgreSQL", - "position": 3, - "link": { - "type": "generated-index", - "title": "PostgreSQL" - } -} \ No newline at end of file diff --git a/wiki/database-system/SQL 语言/_category_.json b/wiki/database-system/SQL 语言/_category_.json deleted file mode 100644 index daa3b461..00000000 --- a/wiki/database-system/SQL 语言/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "SQL 语言", - "position": 2, - "link": { - "type": "generated-index", - "title": "SQL 语言" - } -} \ No newline at end of file diff --git a/wiki/database-system/home.md b/wiki/database-system/home.md deleted file mode 100644 index 3dc774da..00000000 --- a/wiki/database-system/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -数据库系统 ~ 🤩🤩🤩 - - - diff --git a/wiki/database-system/基础/_category_.json b/wiki/database-system/基础/_category_.json deleted file mode 100644 index be9d437e..00000000 --- a/wiki/database-system/基础/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "基础", - "position": 1, - "link": { - "type": "generated-index", - "title": "基础" - } -} \ No newline at end of file diff --git a/wiki/getting-started/Git/入门/_category_.json b/wiki/getting-started/Git/入门/_category_.json deleted file mode 100644 index 899087c7..00000000 --- a/wiki/getting-started/Git/入门/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "入门", - "position": 1, - "link": { - "type": "generated-index", - "title": "入门" - } -} \ No newline at end of file diff --git a/wiki/getting-started/Git/进阶/_category_.json b/wiki/getting-started/Git/进阶/_category_.json deleted file mode 100644 index 080d1a1a..00000000 --- a/wiki/getting-started/Git/进阶/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "进阶", - "position": 2, - "link": { - "type": "generated-index", - "title": "进阶" - } -} \ No newline at end of file diff --git a/wiki/getting-started/Git/进阶/思维导图.md b/wiki/getting-started/Git/进阶/思维导图.md deleted file mode 100644 index db35b92a..00000000 --- a/wiki/getting-started/Git/进阶/思维导图.md +++ /dev/null @@ -1,27 +0,0 @@ - ---- -title: 思维导图 -description: 思维导图 -keywords: -- Git -- 思维导图 -tags: -- Git -sidebar_position: 7 -author: 7Wate -date: 2022-11-16 ---- - - -![Git_V2.16.2](https://static.7wate.com/img/2022/11/16/cb8f63c9b3042.png) - -- [XMind 文件](https://static.7wate.com/img/2022/11/16/30b8d694bde9b.xmind) -- [PDF 文件](https://static.7wate.com/img/2022/11/16/081d4a93481e3.pdf) diff --git a/wiki/getting-started/Git/高级/Github/GitHub 奇技淫巧.md b/wiki/getting-started/Git/高级/Github/GitHub 奇技淫巧.md deleted file mode 100644 index 0b228b65..00000000 --- a/wiki/getting-started/Git/高级/Github/GitHub 奇技淫巧.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: GitHub 奇技淫巧 -description: GitHub 奇技淫巧 -keywords: -- GitHub -- 技巧 -tags: -- GitHub -sidebar_position: 1 -author: 7Wate -date: 2022-09-23 ---- - -## 搜索 - -- 按 `s` 键直接聚焦倒搜索框输入 -- [Github 自定义搜索](https://github.com/search/advanced) - -## 文件查看 - -- 按 `t` 键实时对仓库内所有文件进行搜索 - -- 点击某个文件后 按 `L` 键 就可以快速跳转倒某一行,点击行号可以复制代码或者生成永久链接 - -```shell -# 分享 240 行代码 -https://github.com/AlloyTeam/AlloyTouch/blob/master/alloy_touch.js#L240 -# 分享 39-45 行代码 -https://github.com/AlloyTeam/AlloyTouch/blob/master/alloy_touch.js#L39-L45 -``` - -- 按 `b` 键可以快速查看该文件的改动记录 - -## 阅读代码 - -### 使用 . 快捷键 - -在仓库详情页按 `。`键,代码会直接在一个网页版 VSCODE 打开。 - -### 使用 github1s.com - -只需要把 github 改为 github1s,以达到与方法 1 相同的效果! - -## 在线运行 - -### 使用 gitpod.com/#<仓库地址> - -在仓库地址前面加上` gitpod.io/#/ `前缀 - -## 查看快捷键 - -- `Shift + ?`打开 GitHub 快捷键面板。 - -- `Ctrl+K` 打开 GitHub 命令面板。 - -## 其他 - -### 更改项目语言 - -在项目的根目录下添加如下 `.gitattributes` 文件 - -```shell -# 所有 html 文件后缀的代码识别成 JavaScript 文件。 -*.html linguist-language=JavaScript -``` diff --git a/wiki/getting-started/Git/高级/Github/_category_.json b/wiki/getting-started/Git/高级/Github/_category_.json deleted file mode 100644 index ce56d30b..00000000 --- a/wiki/getting-started/Git/高级/Github/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Github", - "position": 2, - "link": { - "type": "generated-index", - "title": "Github" - } -} \ No newline at end of file diff --git a/wiki/getting-started/Git/高级/_category_.json b/wiki/getting-started/Git/高级/_category_.json deleted file mode 100644 index 37d8e544..00000000 --- a/wiki/getting-started/Git/高级/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "高级", - "position": 3, - "link": { - "type": "generated-index", - "title": "高级" - } -} \ No newline at end of file diff --git a/wiki/getting-started/Windows/Windows 下 Linux 子系统.md b/wiki/getting-started/Windows/Windows 下 Linux 子系统.md deleted file mode 100644 index 1dd6a6ba..00000000 --- a/wiki/getting-started/Windows/Windows 下 Linux 子系统.md +++ /dev/null @@ -1,227 +0,0 @@ ---- -id: Windows 下 Linux 子系统 -title: Windows 下 Linux 子系统 -data: 2022年7月22日 ---- - -## 概述 - -适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。 - -> - [在 Microsoft Store](https://aka.ms/wslstore) 中选择你偏好的 GNU/Linux 分发版。 -> - 运行常用的命令行软件工具(例如 `grep`、`sed`、`awk`)或其他 ELF-64 二进制文件。 -> - 运行 Bash shell 脚本和 GNU/Linux 命令行应用程序,包括: -> - 工具:vim、emacs、tmux -> - 语言:[NodeJS](https://docs.microsoft.com/zh-CN/windows/nodejs/setup-on-wsl2)、Javascript、[Python](https://docs.microsoft.com/zh-CN/windows/python/web-frameworks)、Ruby、C/C++、C# 与 F#、Rust、Go 等 -> - 服务:SSHD、[MySQL](https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-database)、Apache、lighttpd、[MongoDB](https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-database)、[PostgreSQL](https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-database)。 -> - 使用自己的 GNU/Linux 分发包管理器安装其他软件。 -> - 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。 -> - 在 Windows 上调用 GNU/Linux 应用程序。 - -官方文档:[https://docs.microsoft.com/zh-cn/windows/wsl/](https://docs.microsoft.com/zh-cn/windows/wsl/) - -### 比较 WSL 1 和 WSL2 - -WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是**提高文件系统性能**,以及添加**完全的系统调用兼容性**。 - -这一新的体系结构改变了这些 Linux 二进制文件与Windows 和计算机硬件进行交互的方式,但仍然提供与 WSL 1(当前广泛可用的版本)中相同的用户体验。 - -单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 WSL 2 使用全新的体系结构,该体系结构受益于运行真正的 Linux 内核。 - -| 功能 | WSL 1 | WSL 2 | -| :--------------------------------------------- | :---- | :---- | -| Windows 和 Linux 之间的集成 | ✅ | ✅ | -| 启动时间短 | ✅ | ✅ | -| 与传统虚拟机相比,占用的资源量少 | ✅ | ✅ | -| 可以与当前版本的 VMware 和 VirtualBox 一起运行 | ✅ | ✅ | -| 托管 VM | ❌ | ✅ | -| 完整的 Linux 内核 | ❌ | ✅ | -| 完全的系统调用兼容性 | ❌ | ✅ | -| 跨 OS 文件系统的性能 | ✅ | ❌ | - -WSL 2 仅适用于 Windows 10 版本 1903、内部版本 18362 或更高版本。通过按 Windows 徽标键 + R,检查你的 Windows 版本,然后键入 **winver**,选择“确定”。 低于 18362 的版本根本不支持 WSL。 - -## 基本命令 - -```shell -# 安装 WSL -wsl --install -# 列出可用的 Linux 发行版 -wsl --list --online -# 安装特定的 Linux 发行版 -wsl --install --distribution -# 列出已安装的 Linux 发行版 -wsl --list --verbose -# 将 WSL 版本设置为 1 或 2 -wsl --set-version -# 设置默认 WSL 版本 -wsl --set-default-version -# 设置默认 Linux 发行版 -wsl --set-default -# 在用户的主目录中启动 -wsl ~ -# 通过特定用户运行特定 Linux 发行版 -wsl --distribution --user -# 以特定用户的身份运行 -wsl -u -wsl --user -# 更改发行版本默认用户 - config --default-user -# 更新 WSL -wsl --update -# 回退 WSL -wsl --update rollback -# 检查 WSL 状态 -wsl --status -# 关闭所有 WSL -wsl --shutdown -# 终止特定 WSL -wsl --terminate -# 导出 Linux 发行版为 TAR 文件 -wsl --export -# 导入新发行版 -wsl --import -# 注销 Linux 发行版 -wsl --unregister -# 挂载磁盘 -wsl --mount -``` - -## 安装实践 - -### 入门 - -打开 PowerShell(或 Windows 命令提示符)并输入: - -```shell -wsl --install -``` - ---install 命令执行以下操作: - -- 启用可选的 WSL 和虚拟机平台组件 -- 下载并安装最新 Linux 内核 -- 将 WSL 2 设置为默认值 -- 下载并安装 Ubuntu Linux 发行版(可能需要重新启动) - -### 设置 Linux 用户名和密码 - -使用 WSL 安装 Linux 发行版的过程完成后,系统将要求你为 Linux 发行版创建“用户名”和“密码”。 - -- 此**用户名**和**密码**特定于安装的每个单独的 Linux 分发版,与 Windows 用户名无关。 -- 创建**用户名**和**密码**后,该帐户将是分发版的默认用户,并将在启动时自动登录。 -- 此帐户将被视为 Linux 管理员,能够运行 `sudo` (Super User Do) 管理命令。 -- 在 WSL 上运行的每个 Linux 发行版都有其自己的 Linux 用户帐户和密码。 每当添加分发版、重新安装或重置时,都必须配置一个 Linux 用户帐户。 - -若要更改或重置密码,请打开 Linux 发行版并输入命令:`passwd`。 - -#### 重置 Linux 分发版的密码 - -1. 请打开 PowerShell,并使用以下命令进入默认 WSL 分发版的根目录:`wsl -u root` - - > 如果需要在非默认分发版中更新忘记的密码,请使用命令:`wsl -d Debian -u root`,并将 `Debian` 替换为目标分发版的名称。 - -2. 在 PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:`passwd `,其中 `` 是发行版中帐户的用户名,而你忘记了它的密码。 - -3. 系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用以下命令在 PowerShell 内关闭 WSL:`exit`。 - -### 更新和升级包 - -对于 Ubuntu 或 Debian,请使用以下命令: - -```shell -sudo apt update && sudo apt upgrade -``` - -## 跨文件系统工作 - -建议不要跨操作系统使用文件,除非有这么做的特定原因。 若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,前提是在 Linux 命令行(Ubuntu、OpenSUSE 等)中工作。 如果使用 Windows 命令行(PowerShell、命令提示符)工作,请将文件存储在 Windows 文件系统中。 - -例如,在存储 WSL 项目文件时: - -- 使用 Linux 文件系统根目录:`\\wsl$\Ubuntu\home\\Project` -- 而不使用 Windows 文件系统根目录:`/mnt/c/Users//Project$` 或 `C:\Users\\Project` - -在 WSL 命令行的文件路径中看到 `/mnt/` 时,表示你正在使用已装载的驱动器。 因此,Windows 文件系统 C:/ 驱动器 (`C:\Users\\Project`) 在 WSL 命令行中装载时将如下所示:`/mnt/c/Users//Project$`。 可以将项目文件存储在装载的驱动器上,但如果将其直接存储在 `\\wsl$` 驱动器上,性能速度会提高。 - -### 在 Windows 文件资源管理器中查看当前目录 - -从命令行打开 Windows 文件资源管理器,以查看存储文件的目录: - -```shell -explorer.exe . -``` - -在 Windows 文件资源管理器中查看所有可用的 Linux 发行版及其根文件系统,请在地址栏中输入: - -```shell -\\wsl$ -``` - -### 文件名和目录区分大小写 - -区分大小写确定在文件名或目录中是将大写 (FOO.txt) 和小写 (foo.txt) 字母作为不同项(区分大小写)还是等效项(不区分大小写)进行处理。 Windows 和 Linux 文件系统处理区分大小写的方式不同 - Windows 不区分大小写,而 Linux 区分大小写。 - -### Windows 和 Linux 命令之间的互操作性 - -借助 WSL,Windows 和 Linux 工具和命令可互换使用。 - -- 从 Linux 命令行(即 Ubuntu)运行 Windows 工具(即 notepad.exe)。 -- 从 Windows 命令行(即 PowerShell)运行 Linux 工具(即 grep)。 -- 在 Windows 与 Windows 之间共享环境变量。 (版本 17063+) - -### 从 Windows 命令行运行 Linux 工具 - -使用 `wsl `(或 `wsl.exe `)从 Windows 命令提示符 (CMD) 或 PowerShell 运行 Linux 二进制文件。 - -```shell -C:\temp> wsl ls -la -<- contents of C:\temp -> -``` - -以这种方式调用二进制文件: - -- 使用当前 CMD 或 PowerShell 提示符中提到的同一工作目录。 -- 以 WSL 默认用户的身份运行。 -- 拥有与调用方进程和终端相同的 Windows 管理权限。 - -`wsl`(或 `wsl.exe`)后面的 Linux 命令的处理方式与 WSL 中运行的任何命令的处理方式类似。 可以执行 sudo、管道处理和文件重定向等操作。 - -使用 sudo 更新默认 Linux 分发版的示例: - -```shell -C:\temp> wsl sudo apt-get update -``` - -### 混合 Linux 和 Windows 命令 - -```shell -# ls 列出文件,并使用 PowerShell 命令 findstr 来筛选包含“git”的单词的结果 -wsl ls -la | findstr "git" -# dir 列出文件,并使用 Linux 命令 grep 来筛选包含“git” -dir | wsl grep git -# ls -la 列出文件,并使用 PowerShell 命令 > out.txt 将该列表输出到名为“out.txt”的文本文件 -wsl ls -la > out.txt -# ls -la 列出 /proc/cpuinfo Linux 文件系统路径中的文件 -wsl ls -la /proc/cpuinfo -# ls -la 列出 C:\Program Files Windows 文件系统路径中的文件 -wsl ls -la "/mnt/c/Program Files" -``` - -### 从 Linux 运行 Windows 工具 - -WSL 可以使用 `[tool-name].exe` 直接从 WSL 命令行运行 Windows 工具。 例如,`notepad.exe`。以这种方式运行的应用程序具有以下属性: - -- 按 WSL 命令提示保留工作目录(大部分情况下是这样 -- 下面所述的情况除外)。 -- 拥有与 WSL 进程相同的权限。 -- 以活动 Windows 用户的身份运行。 -- 显示在 Windows 任务管理器中,就如同直接从 CMD 提示符执行的一样。 - -```shell -# 运行 Windows 工具 `ipconfig.exe`, `grep` 筛选“IPv4”结果,并使用 `cut` 删除列字段 -ipconfig.exe | grep IPv4 | cut -d: -f2 -# 列出 Windows 文件系统 C:\ 目录的内容: -cmd.exe /C dir -# 使用 ping 命令 -ping.exe www.microsoft.com -``` diff --git a/wiki/getting-started/Windows/Windows 下 OpenSSH 使用.md b/wiki/getting-started/Windows/Windows 下 OpenSSH 使用.md deleted file mode 100644 index 24b80613..00000000 --- a/wiki/getting-started/Windows/Windows 下 OpenSSH 使用.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Windows 下 OpenSSH 使用 -description: Windows 下 OpenSSH 使用 -keywords: -- Windows -- SSH -tags: -- Windows -author: 7Wate -date: 2022-09-23 ---- - - -OpenSSH 是安全 Shell (SSH) 工具的开放源代码版本,Linux 及其他非 Windows 系统的管理员使用此类工具跨平台管理远程系统。 OpenSSH 在 2018 年秋季已添加至 Windows,并包含在 Windows 10 和 Windows Server 2019 中。 - -SSH 基于客户端-服务器体系结构,用户在其中工作的系统是客户端,所管理的远程系统是服务器。 OpenSSH 包含一系列组件和工具,用于提供一种安全且简单的远程系统管理方法,其中包括: - -- sshd.exe:它是远程所管理的系统上必须运行的 SSH 服务器组件 -- ssh.exe:它是在用户的本地系统上运行的 SSH 客户端组件 -- ssh-keygen.exe:为 SSH 生成、管理和转换身份验证密钥 -- ssh-agent.exe:存储用于公钥身份验证的私钥 -- ssh-add.exe:将私钥添加到服务器允许的列表中 -- ssh-keyscan.exe:帮助从许多主机收集公用 SSH 主机密钥 -- sftp.exe:这是提供安全文件传输协议的服务,通过 SSH 运行 -- scp.exe:是在 SSH 上运行的文件复制实用工具 - -## 安装 - -若要使用 PowerShell 安装 OpenSSH,请先以管理员身份运行 PowerShell。 为了确保 OpenSSH 可用,请运行以下 cmdlet: - -```powershell -Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' -``` - -如果两者均尚未安装,则此操作应返回以下输出: - -```powershell -Name : OpenSSH.Client~~~~0.0.1.0 -State : NotPresent - -Name : OpenSSH.Server~~~~0.0.1.0 -State : NotPresent -``` - -然后,根据需要安装服务器或客户端组件: - -```powershell -# 安装 OpenSSH 客户端 -Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 - -# 安装 OpenSSH 服务端 -Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 -``` - -这两者应该都会返回以下输出: - -```powershell -Path : -Online : True -RestartNeeded : False -``` - -## 启动与配置 - -若要启动并配置 OpenSSH 服务器来开启使用,请以管理员身份打开 PowerShell,然后运行以下命令来启动 `sshd service`: - -```powershell -# 启动 sshd 服务 -Start-Service sshd - -# 设置 sshd 服务自动运行 -Set-Service -Name sshd -StartupType 'Automatic' - -# 检测防火墙是否放开 22 端口 -if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) { - Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..." - New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -} else { - Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists." -} -``` - -## 连接服务器 - -安装后,可从使用 PowerShell 安装了 OpenSSH 客户端的 Windows 10 或 Windows Server 2019 设备连接到 OpenSSH 服务器,如下所示。 请务必以管理员身份运行 PowerShell: - -```powershell -ssh username@servername -``` - -可以尝试在服务器使用 127.0.0.1 本地连接测试,**因为 Windows 显示用户名和实际用户名可能不一致,所以通过 `net user` 获取正确用户名进行连接。** - -连接后,会收到如下所示的消息: - -```powershell -The authenticity of host 'servername (10.00.00.001)' can't be established. -ECDSA key fingerprint is SHA256:(). -Are you sure you want to continue connecting (yes/no)? -``` - -选择“是”后,该服务器会添加到包含 Windows 客户端上的已知 SSH 主机的列表中。系统此时会提示你输入密码。 作为安全预防措施,密码在键入的过程中不会显示。 - -连接后,你将看到 Windows 命令行界面提示符: - -```powershell -domain\username@SERVERNAME C:\Users\username> -``` - -## 卸载 - -```powershell -# 卸载 OpenSSH 客户端 -Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 - -# 卸载 OpenSSH 服务端 -Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 -``` - -如果在卸载时服务正在使用中,稍后可能需要重启 Windows。 diff --git a/wiki/getting-started/home.md b/wiki/getting-started/home.md deleted file mode 100644 index 83e2f489..00000000 --- a/wiki/getting-started/home.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -欲先利其事,必先利其器。 - -计算机科学与技术的基础入门知识和开发工具,其是计算机科学路上必不可少的扳手与螺丝刀。不必追求完全理解使用,只需要知道扳手和螺丝刀就在这里。 - - - diff --git a/wiki/getting-started/开源/_category_.json b/wiki/getting-started/开源/_category_.json deleted file mode 100644 index baaedce1..00000000 --- a/wiki/getting-started/开源/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "开源", - "position": 1.5, - "link": { - "type": "generated-index", - "title": "开源" - } -} \ No newline at end of file diff --git a/wiki/getting-started/搜索/DuckDuckGo 搜索技巧.md b/wiki/getting-started/搜索/DuckDuckGo 搜索技巧.md deleted file mode 100644 index 2afac8c4..00000000 --- a/wiki/getting-started/搜索/DuckDuckGo 搜索技巧.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: DuckDuckGo 搜索技巧 -description: DuckDuckGo 搜索技巧 -keywords: -- DuckDuckGo -- 搜索技巧 -tags: -- DuckDuckGo -sidebar_position: 2 -author: 7Wate -date: 2022-11-21 ---- - -DuckDuckGo 是一款网际网路搜寻引擎,其注重用户私隐,及避免个性化检索所致的过滤气泡。它与其他搜寻引擎不同的地方在于其不会分析自己的用户、对所有使用同一组关键词的用户显示同样的结果。它也强调返回最佳结果,而不是最多网站连结之结果。它会在搜寻结果中引入其他独立来源的内容,总数多于 400 个,其中包括像维基百科般的众包网站、其他搜寻引擎(如Bing、Yandex、Yahoo! Search)。 - -## 搜索运算符 - -| 例子 | 结果 | -| :----------------------- | :----------------------------------------------------------- | -| `cats dogs` | 关于猫或狗的结果 | -| `"cats and dogs"` | 精确术语“猫和狗”的结果。如果没有找到结果,我们将尝试显示相关结果。 | -| `cats -dogs` | 结果中的狗更少 | -| `cats +dogs` | 结果中有更多狗 | -| `cats filetype:pdf` | 关于猫的 PDF。支持的文件类型:pdf、doc(x)、xls(x)、ppt(x)、html | -| `dogs site:example.com` | example.com 中关于狗的页面 | -| `cats -site:example.com` | 关于猫的页面,不包括 example.com | -| `intitle:dogs` | 页面标题包含“狗”一词 | -| `inurl:cats` | 页面 url 包含单词“cats” | - -## 直接在其他网站上搜索 - -- 用于`\`直接转到第一个搜索结果。例如, [`\futurama`](https://duckduckgo.com/?q=\futurama) -- 用于`!`直接搜索其他站点的搜索引擎。但请记住,由于您的搜索实际上是在其他网站上进行的,因此您必须遵守该网站的政策,包括其数据收集惯例。例如,在 [`!a blink182`](https://duckduckgo.com/?q=!a blink182) Amazon.com 上搜索 blink182。涵盖 [数千个站点](https://duckduckgo.com/bang)! - -## 即时解答 - -- 添加`news`到您的搜索以生成即时答复新闻结果。例如, [`LeBron James news`](https://duckduckgo.com/?q=LeBron+James+news) -- 添加`map`到您的搜索以生成即时答案地图结果。例如, [`Philadelphia map`](https://duckduckgo.com/?q=philadelphia+map) -- 了解有关[即时答复](https://duck.co/ia)的更多信息! - -## 安全搜索 - -- 添加`!safeon`或添加`!safeoff`到搜索的末尾以打开和关闭 该搜索的[安全](https://help.duckduckgo.com/duckduckgo-help-pages/features/safe-search)搜索。 diff --git a/wiki/getting-started/搜索/Google 搜索技巧.md b/wiki/getting-started/搜索/Google 搜索技巧.md deleted file mode 100644 index bad3050f..00000000 --- a/wiki/getting-started/搜索/Google 搜索技巧.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Google 搜索技巧 -description: Google 搜索技巧 -keywords: -- Google -- 搜索技巧 -tags: -- Google -sidebar_position: 1 -author: 7Wate -date: 2022-11-21 ---- - -Google搜索是由Google公司推出的一个互联网搜索引擎,它是互联网上最大、影响最广泛的搜索引擎。 - -## 常用搜索技巧 - -### 搜索社交媒体 - -在字词前加上 `@` 可用于搜索社交媒体。例如:`@twitter`。(国内例如微博等不可用) - -### 搜索特定价格 - -在表示价格的数字前加上 `$`。例如:`相机 $400`。 - -### 搜索 # 标签 - -在字词前加上 `#`。例如:`#怀旧星期四`。 - -### 从搜索结果中排除特定字词 - -在要排除的字词前加上 `-`。例如:`中国美食 -麻辣` - -### 搜索完全匹配的结果 - -为字词或短语加上引号。例如:`"最高的建筑"`。 - -### 在某个数字范围内执行搜索 - -在两个数字之间加上 `..`。例如:`相机 $50..$100`。 - -### 组合搜索 - -在各个搜索查询字词之间加上“`OR`”。例如:`马拉松 OR 比赛`。 - -### 搜索特定网站 - -在网站或网域前加上“`site:`”。例如:`site:youtube.com` 或 `site:.gov`。 - -### 搜索相关网站 - -在已知网址前加上“`related:`”。例如:`related:time.com`。 - -### 查看网站的 Google 缓存版本 - -在网址前加上“`cache:`”。 - -## 谷歌高级搜索 - -- [网站和文件](http://google.com/advanced_search):google.com/advanced_search -- [图片](http://google.com/advanced_image_search):google.com/advanced_image_search -- [视频](http://google.com/advanced_video_search):google.com/advanced_video_search -- [图书](http://google.com/advanced_book_search):google.com/advanced_book_search diff --git a/wiki/getting-started/搜索/_category_.json b/wiki/getting-started/搜索/_category_.json deleted file mode 100644 index 855d0587..00000000 --- a/wiki/getting-started/搜索/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "搜索", - "position": 1, - "link": { - "type": "generated-index", - "title": "搜索" - } -} \ No newline at end of file diff --git a/wiki/getting-started/文档/_category_.json b/wiki/getting-started/文档/_category_.json deleted file mode 100644 index 45a6a1d1..00000000 --- a/wiki/getting-started/文档/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "文档", - "position": 2, - "link": { - "type": "generated-index", - "title": "文档" - } -} \ No newline at end of file diff --git a/wiki/operating-system/Linux/哲学/_category_.json b/wiki/operating-system/Linux/哲学/_category_.json deleted file mode 100644 index 85cf4658..00000000 --- a/wiki/operating-system/Linux/哲学/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "哲学", - "position": 2, - "link": { - "type": "generated-index", - "title": "哲学" - } -} \ No newline at end of file diff --git a/wiki/operating-system/Linux/基础/_category_.json b/wiki/operating-system/Linux/基础/_category_.json deleted file mode 100644 index b9523b30..00000000 --- a/wiki/operating-system/Linux/基础/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "基础", - "position": 3, - "link": { - "type": "generated-index", - "title": "基础" - } -} \ No newline at end of file diff --git a/wiki/operating-system/Linux/文化/_category_.json b/wiki/operating-system/Linux/文化/_category_.json deleted file mode 100644 index 7225720a..00000000 --- a/wiki/operating-system/Linux/文化/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "文化", - "position": 1, - "link": { - "type": "generated-index", - "title": "文化" - } -} \ No newline at end of file diff --git a/wiki/operating-system/Linux/进阶/_category_.json b/wiki/operating-system/Linux/进阶/_category_.json deleted file mode 100644 index ac0f1fae..00000000 --- a/wiki/operating-system/Linux/进阶/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "进阶", - "position": 4, - "link": { - "type": "generated-index", - "title": "进阶" - } -} \ No newline at end of file diff --git a/wiki/operating-system/Linux/高级/_category_.json b/wiki/operating-system/Linux/高级/_category_.json deleted file mode 100644 index b8550a86..00000000 --- a/wiki/operating-system/Linux/高级/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "高级", - "position": 5, - "link": { - "type": "generated-index", - "title": "高级" - } -} \ No newline at end of file diff --git a/wiki/operating-system/home.md b/wiki/operating-system/home.md deleted file mode 100644 index 28f5ba9b..00000000 --- a/wiki/operating-system/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -操作系统 ~ 🤩🤩🤩 - - - diff --git a/wiki/programming-language/C++/函数方法.md b/wiki/programming-language/C++/函数方法.md deleted file mode 100644 index af2f2efe..00000000 --- a/wiki/programming-language/C++/函数方法.md +++ /dev/null @@ -1,303 +0,0 @@ ---- -id: 函数方法 -title: 函数方法 -sidebar_position: 4 -data: 2022年4月28日 ---- - -## 函数 - -函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 **main()** ,所有简单的程序都可以定义其他额外的函数。 - -您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。 - -函数**声明**告诉编译器函数的名称、返回类型和参数。函数**定义**提供了函数的实际主体。 - -### 定义 - -```cpp -return_type function_name( parameter list ) -{ - body of the function -} -``` - -- **返回类型(return_type):**一个函数可以返回一个值。**return_type** 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 **void**。 -- **函数名称(function_name):**这是函数的实际名称。函数名和参数列表一起构成了函数签名。 -- **参数(parameter list):**参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。 -- **函数主体(body):**函数主体包含一组定义函数执行任务的语句。 - -### 实例 - -```cpp -// 函数返回两个数中较大的那个数 - -int max(int num1, int num2) -{ - // 局部变量声明 - int result; - - if (num1 > num2) - result = num1; - else - result = num2; - - return result; -} - -``` - -```cpp -#include -using namespace std; - -// 函数声明 -int max(int num1, int num2); - -int main () -{ - // 局部变量声明 - int a = 100; - int b = 200; - int ret; - - // 调用函数来获取最大值 - ret = max(a, b); - - cout << "Max value is : " << ret << endl; - - return 0; -} - -// 函数返回两个数中较大的那个数 -int max(int num1, int num2) -{ - // 局部变量声明 - int result; - - if (num1 > num2) - result = num1; - else - result = num2; - - return result; -} -``` - -## 参数 - -## 函数参数 - -如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的**形式参数**。 - -形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。 - -当调用函数时,有两种向函数传递参数的方式: - -| 调用类型 | 描述 | -| :------: | :----------------------------------------------------------: | -| 传值调用 | 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。 | -| 指针调用 | 该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 | -| 引用调用 | 该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 | - -默认情况下,C++ 使用**传值调用**来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的参数。之前提到的实例,调用 max() 函数时,使用了相同的方法。 - -### 传值调用 - -向函数传递参数的**传值调用**方法,把参数的实际值复制给函数的形式参数。 - -```cpp -// 函数定义 -void swap(int x, int y) -{ - int temp; - - temp = x; /* 保存 x 的值 */ - x = y; /* 把 y 赋值给 x */ - y = temp; /* 把 x 赋值给 y */ - - return; -} - -// 实例 -#include -using namespace std; - -// 函数声明 -void swap(int x, int y); - -int main () -{ - // 局部变量声明 - int a = 100; - int b = 200; - - cout << "交换前,a 的值:" << a << endl; - cout << "交换前,b 的值:" << b << endl; - - // 调用函数来交换值 - swap(a, b); - - cout << "交换后,a 的值:" << a << endl; - cout << "交换后,b 的值:" << b << endl; - - return 0; -} - -// 输出 -交换前,a 的值: 100 -交换前,b 的值: 200 -交换后,a 的值: 100 -交换后,b 的值: 200 -``` - -### 指针调用 - -向函数传递参数的**指针调用**方法,把参数的地址复制给形式参数。 - -```cpp -// 函数定义 -void swap(int *x, int *y) -{ - int temp; - temp = *x; /* 保存地址 x 的值 */ - *x = *y; /* 把 y 赋值给 x */ - *y = temp; /* 把 x 赋值给 y */ - - return; -} - -// 实例 -#include -using namespace std; - -// 函数声明 -void swap(int *x, int *y); - -int main () -{ - // 局部变量声明 - int a = 100; - int b = 200; - - cout << "交换前,a 的值:" << a << endl; - cout << "交换前,b 的值:" << b << endl; - - /* 调用函数来交换值 - * &a 表示指向 a 的指针,即变量 a 的地址 - * &b 表示指向 b 的指针,即变量 b 的地址 - */ - swap(&a, &b); - - cout << "交换后,a 的值:" << a << endl; - cout << "交换后,b 的值:" << b << endl; - - return 0; -} - -// 输出 -交换前,a 的值: 100 -交换前,b 的值: 200 -交换后,a 的值: 200 -交换后,b 的值: 100 -``` - -### 引用调用 - -向函数传递参数的**引用调用**方法,把引用的地址复制给形式参数。 - -```cpp -// 函数定义 -void swap(int &x, int &y) -{ - int temp; - temp = x; /* 保存地址 x 的值 */ - x = y; /* 把 y 赋值给 x */ - y = temp; /* 把 x 赋值给 y */ - - return; -} - -// 实例 -#include -using namespace std; - -// 函数声明 -void swap(int &x, int &y); - -int main () -{ - // 局部变量声明 - int a = 100; - int b = 200; - - cout << "交换前,a 的值:" << a << endl; - cout << "交换前,b 的值:" << b << endl; - - /* 调用函数来交换值 */ - swap(a, b); - - cout << "交换后,a 的值:" << a << endl; - cout << "交换后,b 的值:" << b << endl; - - return 0; -} - -// 输出 -交换前,a 的值: 100 -交换前,b 的值: 200 -交换后,a 的值: 200 -交换后,b 的值: 100 -``` - -### 默认值 - -当您定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。 - -```cpp -#include -using namespace std; - -int sum(int a, int b=20) -{ - int result; - - result = a + b; - - return (result); -} - -int main () -{ - // 局部变量声明 - int a = 100; - int b = 200; - int result; - - // 调用函数来添加值 - result = sum(a, b); - cout << "Total value is :" << result << endl; - - // 再次调用函数 - result = sum(a); - cout << "Total value is :" << result << endl; - - return 0; -} - -// 输出 -Total value is :300 -Total value is :120 -``` - -## Lambda 表达式 - -Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。 - -```cpp -// 语法 -[capture](parameters)->return-type{body} - -// 实例 -[](int x, int y){ return x < y ; } -``` diff --git a/wiki/programming-language/C++/基本语法.md b/wiki/programming-language/C++/基本语法.md deleted file mode 100644 index 775a520a..00000000 --- a/wiki/programming-language/C++/基本语法.md +++ /dev/null @@ -1,345 +0,0 @@ ---- -id: 基本语法 -title: 基本语法 -sidebar_position: 2 -data: 2022年2月18日 ---- - -C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 - -- **对象 -** 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。 -- **类 -** 类可以定义为描述对象行为/状态的模板/蓝图。 -- **方法 -** 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。 -- **即时变量 -** 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 - -## 数据类型 - -### 内置类型 - -| 类型 | 关键字 | -| -------- | ------- | -| 整型 | int | -| 浮点型 | float | -| 双浮点型 | double | -| 无类型 | void | -| 宽字符型 | wchar_t | -| 布尔型 | bool | -| 字符型 | char | - -### 枚举类型 - -枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。 - -```cpp -// 创建枚举,需要使用关键字 enum -enum enum-name { list of names } var-list; - -// 颜色枚举,变量 c 的类型为 color -enum color { red, green, blue } c;c = blue; - -// 默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。 -// 但是也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。 -// 在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1。 -enum color { red, green=5, blue }; -``` - -### 常量类型 - -常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做**字面量**。 - -常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。 - -常量就像是常规的变量,只不过常量的值在定义后不能进行修改。 - -#### 定义 - -在 C++ 中,有两种简单的定义常量的方式: - -- 使用 `#define` 预处理器。 -- 使用 **const** 关键字。 - -#### 实例 - -```cpp -// #define 预处理器定义常量 -#define identifier value - -// const 前缀声明指定类型的常量 -const type variable = value; -``` - -### 修饰符 - -C++ 允许在 **char、int 和 double** 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。 - -- signed -- unsigned -- short -- long - -修饰符 **signed、unsigned、long 和 short** 可应用于整型,**signed** 和 **unsigned** 可应用于字符型,**long** 可应用于双精度型。 - -修饰符 **signed** 和 **unsigned** 也可以作为 **long** 或 **short** 修饰符的前缀。例如:**unsigned long int**。 - -### 限定符 - -类型限定符提供了变量的额外信息。 - -| 限定符 | 含义 | -| -------- | ------------------------------------------------------------ | -| const | **const** 类型的对象在程序执行期间不能被修改改变。 | -| volatile | 修饰符 **volatile** 告诉编译器,变量的值可能以程序未明确指定的方式被改变。 | -| restrict | 由 **restrict** 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 | - -### typedef - -可以使用 **typedef** 为一个已有的类型取一个新的名字。 - -```cpp -typedef type newname; - -// 例如,下面的语句会告诉编译器,feet 是 int 的另一个名称: -typedef int feet; - -// 现在,下面的声明是完全合法的,它创建了一个整型变量 distance: -feet distance; -``` - -### 类型占用字节 - -C++ 不同于 Java,变量的大小会根据编译器和所使用的电脑而有所不同。 - -| 类型 | 位 | 范围 | -| ------------------ | ------------- | ------------------------------------------------------- | -| char | 1 个字节 | -128 到 127 或者 0 到 255 | -| unsigned char | 1 个字节 | 0 到 255 | -| signed char | 1 个字节 | -128 到 127 | -| int | 4 个字节 | -2147483648 到 2147483647 | -| unsigned int | 4 个字节 | 0 到 4294967295 | -| signed int | 4 个字节 | -2147483648 到 2147483647 | -| short int | 2 个字节 | -32768 到 32767 | -| unsigned short int | 2 个字节 | 0 到 65,535 | -| signed short int | 2 个字节 | -32768 到 32767 | -| long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | -| signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | -| unsigned long int | 8 个字节 | 0 to 18,446,744,073,709,551,615 | -| float | 4 个字节 | +/- 3.4e +/- 38 (~7 个数字) | -| double | 8 个字节 | +/- 1.7e +/- 308 (~15 个数字) | -| long double | 8 个字节 | +/- 1.7e +/- 308 (~15 个数字) | -| wchar_t | 2 或 4 个字节 | 1 个宽字符 | - -```cpp -// 输出电脑上各种数据类型的大小 -#include -using namespace std; - -int main(){ - short int i; // 有符号短整数 - short unsigned int j; // 无符号短整数 - - cout << "Size of char : " << sizeof(char) << endl; - cout << "Size of int : " << sizeof(int) << endl; - cout << "Size of short int : " << sizeof(short int) << endl; - cout << "Size of long int : " << sizeof(long int) << endl; - cout << "Size of float : " << sizeof(float) << endl; - cout << "Size of double : " << sizeof(double) << endl; - cout << "Size of wchar_t : " << sizeof(wchar_t) << endl; return 0; -} -``` - -## 运算符 - -运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符: - -- 算术运算符 -- 关系运算符 -- 逻辑运算符 -- 位运算符 -- 赋值运算符 -- 杂项运算符 - -### 算术运算符 - -| 运算符 | 描述 | 实例 | -| ------ | ------------------------------------------------------------ | ---------------- | -| + | 把两个操作数相加 | A + B 将得到 30 | -| - | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 | -| * | 把两个操作数相乘 | A * B 将得到 200 | -| / | 分子除以分母 | B / A 将得到 2 | -| % | 取模运算符,整除后的余数 | B % A 将得到 0 | -| ++ | [自增运算符](https://edu.aliyun.com/cplusplus/cpp-increment-decrement-operators.html),整数值增加 1 | A++ 将得到 11 | -| -- | [自减运算符](https://edu.aliyun.com/cplusplus/cpp-increment-decrement-operators.html),整数值减少 1 | A-- 将得到 9 | - -### 关系运算符 - -| 运算符 | 描述 | 实例 | -| ------ | ------------------------------------------------------------ | ----------------- | -| == | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 | -| != | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 | -| > | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 | -| < | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 | -| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 | -| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 | - -### 逻辑运算符 - -| 运算符 | 描述 | 实例 | -| ------ | ------------------------------------------------------------ | ----------------- | -| && | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 | -| \|\| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A \|\| B) 为真。 | -| ! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 | - -### 位运算符 - -| 运算符 | 描述 | 实例 | -| ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| & | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 | (A & B) 将得到 12,即为 0000 1100 | -| \| | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 | (A \| B) 将得到 61,即为 0011 1101 | -| ^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 | (A ^ B) 将得到 49,即为 0011 0001 | -| ~ | 二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。 | (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。 | -| << | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 | A << 2 将得到 240,即为 1111 0000 | -| >> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2 将得到 15,即为 0000 1111 | - -### 赋值运算符 - -| 运算符 | 描述 | 实例 | -| ------ | ------------------------------------------------------------ | ------------------------------- | -| = | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C | -| += | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A | -| -= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A | -| *= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A | -| /= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A | -| %= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A | -| <<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 | -| >>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 | -| &= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 | -| ^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 | -| \|= | 按位或且赋值运算符 | C \|= 2 等同于 C = C \| 2 | - -### 杂项运算符 - -| 运算符 | 描述 | -| -------------------- | ------------------------------------------------------------ | -| sizeof | sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。 | -| Condition ? X : Y | 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。 | -| , | 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。 | -| .(点)和 ->(箭头) | 成员运算符用于引用类、结构和共用体的成员。 | -| Cast | 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。 | -| & | 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。 | -| * | 指针运算符\*指向一个变量。例如,*var; 将指向变量 var。 | - -### 运算符优先级 - -| 类别 | 运算符 | 结合性 | -| ---------- | --------------------------------- | -------- | -| 后缀 | () [] -> . ++ - - | 从左到右 | -| 一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 | -| 乘除 | * / % | 从左到右 | -| 加减 | + - | 从左到右 | -| 移位 | << >> | 从左到右 | -| 关系 | < <= > >= | 从左到右 | -| 相等 | == != | 从左到右 | -| 位与 AND | & | 从左到右 | -| 位异或 XOR | ^ | 从左到右 | -| 位或 OR | \| | 从左到右 | -| 逻辑与 AND | && | 从左到右 | -| 逻辑或 OR | \|\| | 从左到右 | -| 条件 | ?: | 从右到左 | -| 赋值 | = += -= *= /= %=>>= <<= &= ^= \|= | 从右到左 | -| 逗号 | , | 从左到右 | - -## 语法 - -### 分号 - -C++ 并不强制要求代码缩进,仅以半角分号表示语句结束。 - -```cpp -// 三个不同的语句 -x = y; -y = y+1; -add(x, y); - -// 放置多行语句 -x = y;y = y+1;add(x, y); -``` - -### 空格 - -在 C++ 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。 - -```cpp -/* - * int 和 age 之间必须至少有一个空格字符(通常是一个空白符) - * 这样编译器才能够区分它们。 - */ - -int age; - - -/* - * fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的 - * 但是为了增强可读性,您可以根据需要适当增加一些空格 - */ - -fruit = apples + oranges; // 获取水果的总数 -``` - -### 标识符 - -C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。 - -**一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)**。 - -C++ 标识符内不允许出现标点字符,比如 @、$ 和 %。C++ 是**区分大小写**的编程语言。因此,在 C++ 中,**Manpower** 和 **manpower** 是两个不同的标识符。 - -```cpp -// 标识符示例 -mohd zara abc move_name a_123myname50 _temp j a23b9 retVal -``` - -### 语句块 - -一组使用大括号括起来的按逻辑连接的语句。 - -```cpp -// 语句块 -{ - cout << "Hello World"; - // 输出 Hello World - return 0; -} -``` - -## 注释 - -C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。 - -```cpp -// 单行注释 - -/* - * 多行注释 - */ -``` - -## 关键字 - -| | | | | -| ------------ | --------- | ---------------- | -------- | -| asm | else | new | this | -| auto | enum | operator | throw | -| bool | explicit | private | true | -| break | export | protected | try | -| case | extern | public | typedef | -| catch | false | register | typeid | -| char | float | reinterpret_cast | typename | -| class | for | return | union | -| const | friend | short | unsigned | -| const_cast | goto | signed | using | -| continue | if | sizeof | virtual | -| default | inline | static | void | -| delete | int | static_cast | volatile | -| do | long | struct | wchar_t | -| double | mutable | switch | while | -| dynamic_cast | namespace | template | | diff --git a/wiki/programming-language/C++/控制语句.md b/wiki/programming-language/C++/控制语句.md deleted file mode 100644 index 71672529..00000000 --- a/wiki/programming-language/C++/控制语句.md +++ /dev/null @@ -1,477 +0,0 @@ ---- -id: 控制语句 -title: 控制语句 -sidebar_position: 3 -data: 2022年4月28日 ---- - -## 条件语句 - -### if 语句 - -如果布尔表达式为 **true**,则 if 语句内的代码块将被执行。如果布尔表达式为 **false**,则 if 语句结束后的第一组代码(闭括号后)将被执行。 - -C 语言把任何**非零**和**非空**的值假定为 **true**,把**零**或 **null** 假定为 **false**。 - -```cpp -if (boolean_expression) -{ - // 如果布尔表达式为真将执行的语句 -} - -// 实例 -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 10; - - // 使用 if 语句检查布尔条件 - if( a < 20 ) - { - // 如果条件为真,则输出下面的语句 - cout << "a 小于 20" << endl; - } - cout << "a 的值是 " << a << endl; - - return 0; -} - -// 输出 -a 小于 20 -a 的值是 10 -``` - -### if...else 语句 - -如果布尔表达式为 **true**,则执行 **if** 块内的代码。如果布尔表达式为 **false**,则执行 **else** 块内的代码。 - -```cpp -if (boolean_expression) -{ - // 如果布尔表达式为真将执行的语句 -} -else -{ - // 如果布尔表达式为假将执行的语句 -} - -// 实例 -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 100; - - // 检查布尔条件 - if( a < 20 ) - { - // 如果条件为真,则输出下面的语句 - cout << "a 小于 20" << endl; - } - else - { - // 如果条件为假,则输出下面的语句 - cout << "a 大于 20" << endl; - } - cout << "a 的值是 " << a << endl; - - return 0; -} - -// 输出 -a 大于 20 -a 的值是 100 -``` - -### if...else if 多分支语句 - -一个 **if** 语句后可跟一个可选的 **else if...else** 语句,这可用于测试多种条件。 - -当使用 if...else if...else 语句时,以下几点需要注意: - -- 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。 -- 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。 -- 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。 - -```cpp -// 语法 -if(boolean_expression 1) -{ - // 当布尔表达式 1 为真时执行 -} -else if( boolean_expression 2) -{ - // 当布尔表达式 2 为真时执行 -} -else if( boolean_expression 3) -{ - // 当布尔表达式 3 为真时执行 -} -else -{ - // 当上面条件都不为真时执行 -} - -// 实例 -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 100; - - // 检查布尔条件 - if( a == 10 ) - { - // 如果 if 条件为真,则输出下面的语句 - cout << "a 的值是 10" << endl; - } - else if( a == 20 ) - { - // 如果 else if 条件为真,则输出下面的语句 - cout << "a 的值是 20" << endl; - } - else if( a == 30 ) - { - // 如果 else if 条件为真,则输出下面的语句 - cout << "a 的值是 30" << endl; - } - else - { - // 如果上面条件都不为真,则输出下面的语句 - cout << "没有匹配的值" << endl; - } - cout << "a 的准确值是 " << a << endl; - - return 0; -} - -// 输出 -没有匹配的值 -a 的准确值是 100 -``` - -### switch 多分支语句 - -一个 **switch** 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 **switch case** 进行检查。 - -#### 语法 - -```cpp -switch(expression){ - case constant-expression : - statement(s); - break; // 可选的 - case constant-expression : - statement(s); - break; // 可选的 - - // 您可以有任意数量的 case 语句 - default : // 可选的 - statement(s); -} -``` - -**switch** 语句必须遵循下面的规则: - -- **switch** 语句中的 **expression** 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。 -- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。 -- case 的 **constant-expression** 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。 -- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 **break** 语句为止。 -- 当遇到 **break** 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。 -- 不是每一个 case 都需要包含 **break**。如果 case 语句不包含 **break**,控制流将会 *继续* 后续的 case,直到遇到 break 为止。 -- 一个 **switch** 语句可以有一个可选的 **default** case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 **break** 语句不是必需的。 - -#### 流程图 - -![图例](https://static.7wate.com/img/2022/04/28/03b2db1e8af32.jpg) - -#### 实例 - -```cpp -// 实例 -#include -using namespace std; - -int main () -{ - // 局部变量声明 - char grade = 'D'; - - switch(grade) - { - case 'A' : - cout << "很棒!" << endl; - break; - case 'B' : - case 'C' : - cout << "做得好" << endl; - break; - case 'D' : - cout << "您通过了" << endl; - break; - case 'F' : - cout << "最好再试一下" << endl; - break; - default : - cout << "无效的成绩" << endl; - } - cout << "您的成绩是 " << grade << endl; - - return 0; -} - -// 输出 -您通过了 -您的成绩是 D -``` - -## 循环语句 - -### while 循环语句 - -```cpp -// 语法 -while(condition) -{ - statement(s); -} - -// 实例 -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 10; - - // while 循环执行 - while( a < 20 ) - { - cout << "a 的值:" << a << endl; - a++; - } - - return 0; -} - -// 输出 -a 的值: 10 -a 的值: 11 -a 的值: 12 -a 的值: 13 -a 的值: 14 -a 的值: 15 -a 的值: 16 -a 的值: 17 -a 的值: 18 -a 的值: 19 -``` - -### do...while 循环语句 - -**do...while** 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。 - -```cpp -// 语法 -do -{ - statement(s); - -}while( condition ); - -// 实例 -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 10; - - // do 循环执行 - do - { - cout << "a 的值:" << a << endl; - a = a + 1; - }while( a < 20 ); - - return 0; -} - -// 输出 -a 的值: 10 -a 的值: 11 -a 的值: 12 -a 的值: 13 -a 的值: 14 -a 的值: 15 -a 的值: 16 -a 的值: 17 -a 的值: 18 -a 的值: 19 -``` - -### for 循环语句 - -**for** 循环允许您编写一个执行特定次数的循环的重复控制结构 - -1. **init** 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。 -2. 接下来,会判断 **condition**。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。 -3. 在执行完 for 循环主体后,控制流会跳回上面的 **increment** 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。 -4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。 - -```cpp -for ( init; condition; increment ) -{ - statement(s); -} -``` - -```cpp -#include -using namespace std; - -int main () -{ - // for 循环执行 - for( int a = 10; a < 20; a = a + 1 ) - { - cout << "a 的值:" << a << endl; - } - - return 0; -} - -// 输出 -a 的值: 10 -a 的值: 11 -a 的值: 12 -a 的值: 13 -a 的值: 14 -a 的值: 15 -a 的值: 16 -a 的值: 17 -a 的值: 18 -a 的值: 19 -``` - -## 跳转语句 - -### break 语句 - -1. 当 **break** 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。 -2. 它可用于终止 **switch** 语句中的一个 case。 - -```cpp -break; -``` - -```cpp -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 10; - - // do 循环执行 - do - { - cout << "a 的值:" << a << endl; - a = a + 1; - if( a > 15) - { - // 终止循环 - break; - } - }while( a < 20 ); - - return 0; -} -``` - -### continue 语句 - -C++ 中的 **continue** 语句有点像 **break** 语句。但它不是强迫终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。 - -```cpp -continue; -``` - -```cpp -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 10; - - // do 循环执行 - do - { - if( a == 15) - { - // 跳过迭代 - a = a + 1; - continue; - } - cout << "a 的值:" << a << endl; - a = a + 1; - }while( a < 20 ); - - return 0; -} -``` - -### goto 语句 - -**goto** 语句允许把控制无条件转移到同一函数内的被标记的语句。 - -**在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。** - -```cpp -goto label; -.. -. -label: statement; -``` - -```cpp -#include -using namespace std; - -int main () -{ - // 局部变量声明 - int a = 10; - - // do 循环执行 - LOOP:do - { - if( a == 15) - { - // 跳过迭代 - a = a + 1; - goto LOOP; - } - cout << "a 的值:" << a << endl; - a = a + 1; - }while( a < 20 ); - - return 0; -} -``` - -### return 语句 - -返回语句 diff --git a/wiki/programming-language/C++/简介.md b/wiki/programming-language/C++/简介.md deleted file mode 100644 index 7746e367..00000000 --- a/wiki/programming-language/C++/简介.md +++ /dev/null @@ -1,181 +0,0 @@ ---- -id: 简介 -title: 简介 -sidebar_position: 1 -data: 2022年2月17日 ---- - -## 简介 - -C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 - -C++ 被认为是一种**中级**语言,它综合了高级语言和低级语言的特点。 - -C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。 - -C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。 - -**注意:**使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。 - -### 标准化 - -| 发布时间 | 通称 | 备注 | -| :------- | :---------------------- | :------------------------- | -| 2017 | C++17 | 第五个C++标准 | -| 2017 | coroutines TS | 协程库扩展 | -| 2017 | ranges TS | 提供范围机制 | -| 2017 | library fundamentals TS | 标准库扩展 | -| 2016 | concurrency TS | 用于并发计算的扩展 | -| 2015 | concepts TS | 概念库,用于优化编译期信息 | -| 2015 | TM TS | 事务性内存操作 | -| 2015 | parallelism TS | 用于并行计算的扩展 | -| 2015 | filesystem TS | 文件系统 | -| 2014 | C++14 | 第四个C++标准 | -| 2011 | - | 十进制浮点数扩展 | -| 2011 | C++11 | 第三个C++标准 | -| 2010 | - | 数学函数扩展 | -| 2007 | C++TR1 | C++技术报告:库扩展 | -| 2006 | - | C++性能技术报告 | -| 2003 | C++03 | 第二个C++标准 | -| 1998 | C++98 | 第一个C++标准 | - -### 发展历程 - -- C++ 编程语言的历史可以追溯到 **1979 年**,当时 Bjarne Stroustrup 为博士学位论文进行了一些开发。在 Stroustrup 可以使用的所有语言中,有一种被称为 Simula 的语言,顾名思义,它可能是一种主要为仿真而设计的语言。Simula 67 语言是 Stroustrup 使用的变体,被认为是支持面向对象编程范例的主要语言。Stroustrup 发现这种范例对包装开发很有帮助。但是,Simula 语言对于实践和实际使用而言太慢了。 随后不久,Bjarne Stroustrup 希望通过支持面向对象范例来增强 C。他深入研究了 Smalltalk 的 OO 实现,以获取有关实现的想法。但是他不愿意为此放弃性能,因此他开始从事 “C with Classes (带有类的 C)” 的工作,希望 C++ 代码运行时应具有与 C 代码相似(或更好)的性能。 -- **1983 年**,语言的名称从 “带有类的 C” 更改为 C++。C 语言中的 ++ 运算符是用于递增变量的运算符,它使您可以深入了解 Stroustrup 如何看待该语言。在此期间添加了许多新功能,其中最引人注目的是虚函数,函数重载,带有&符号的引用,const 关键字和使用两个正斜杠的单行注释。 -- **1985 年**,Stroustrup 出版了名为*“C++ 编程语言” 的书籍*。同年,C++ 被实现为商业产品。该语言尚未正式标准化,因此使该书成为非常重要的参考。该语言在 1989 年再次进行了更新,以包括受保护的成员和静态成员,以及从多个类的继承。 -- **1990 年**,发行了*《带注释的 C++ 参考手册*》。同年,Borland 的 Turbo C++ 编译器将作为商业产品发布。Turbo C++ 添加了许多其他库,这些库会对 C++ 的开发产生相当大的影响。尽管 Turbo C++ 的最后一个稳定版本是 2006 年,但该编译器仍被广泛使用。 -- **1998 年**,C++ 标准委员会发布了第一个 C++ ISO / IEC 14882:1998 国际标准,其非正式名称为 C++ 98。据说*《带注释的 C++ 参考手册*》对标准的制定产生了很大的影响。还包括标准模板库,该模板库于 1979 年开始概念开发。2003 年,该委员会对 1998 年标准所报告的多个问题做出了回应,并对其进行了相应的修订。更改的语言称为 C++ 03。 -- **2005 年**,C++ 标准委员会发布了一份技术报告(称为 TR1),详细介绍了他们计划添加到最新 C++ 标准中的各种功能。新标准被非正式地称为 C++ 0x,因为它有望在第一个十年结束之前的某个时间发布。具有讽刺意味的是,新标准要到 2011 年年中才会发布。直到那时为止,已经发布了几份技术报告,并且一些编译器开始为新功能添加实验性支持。 -- **2011 年中**,新的 C++ 标准(称为 C++ 11)完成。Boost 库项目对新标准产生了重大影响,其中一些新模块直接来自相应的 Boost 库。一些新功能包括正则表达式支持,全面的随机化库,新的 C++ 时间库,原子支持,标准线程库 ,一种新的 for 循环语法,提供的功能类似于某些其他语言中的 foreach 循环,auto 关键字,新的容器类,对联合和数组初始化列表以及可变参数模板的更好支持。 -- **2014 年**,C++ 14(也称为 C++ 1y)作为 C++11 的一个小扩展发布,主要功能是错误修复和小的改进,国际标准投票程序草案于 2014 年 8 月中完成,加强 lambda 函数,constexpr 和类型推导特性。 -- **2017 年**,发布 C17 标准,C17 提供了很多东西。增强了核心语言和库。 -- **2020 年**,发布 C++20 标准,推出了很多重量级功能,其中比较重要的有: - - Concepts:概念改变了我们思考和编程模板的方式。它们是模板参数的语义类别。它们使您可以直接在类型系统中表达您的意图。如果出了什么问题,您会收到清晰的错误消息。 - - Ranges library:新的 ranges 库使它可以直接在容器上执行算法,用管道符号组成算法,并将其应用于无限数据流。 - - Coroutines:由于协程,C++ 中的异步编程成为主流。协程是协作任务,事件循环,无限数据流或管道的基础。 - - Modules:模块克服了头文件的限制。头文件和源文件的分离变得和预处理器一样过时了。最后,我们有更快的构建时间和更轻松的构建软件包的方法。 - - Concurrency:Atomic Smart Pointers,Joining & Cancellable Threads,The C20 Synchronization Library,增强了 C++ 并发编程能力; - -### 面向对象 - -C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性: - -- 封装 -- 抽象 -- 继承 -- 多态 - -### 标准库 - -标准的 C++ 由三个重要部分组成: - -- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。 -- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。 -- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。 - -## 实例 - -```cpp -// 输出单词 Hello World -#include -using namespace std; - -// main() 是程序开始执行的地方 -int main(){ - // 输出 Hello World - cout << "Hello World"; - return 0; -} -``` - -1. C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 - -2. 行 **using namespace std;** 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。 - -3. **// main() 是程序开始执行的地方** 是一个单行注释。单行注释以 // 开头,在行末结束。 - -4. **int main()** 是主函数,程序从这里开始执行。 - -5. **cout << "Hello World";** 会在屏幕上显示消息 "Hello World"。 - -6. **return 0;** 终止 main( )函数,并向调用进程返回值 0。 - -### g++ 编译器 - -程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示: - -```cpp -gcc main.cpp -lstdc++ -o main -``` - -下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: - -```cpp -#include using namespace std;int main(){ - cout << "Hello, world!" << endl; - return 0;} -``` - -最简单的编译方式: - -```cpp -g++ helloworld.cpp -``` - -由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行: - -```cpp -./a.outHello, world! -``` - -通常我们使用 **-o** 选项指定可执行程序的文件名,以下实例生成一个 helloworld 的可执行文件: - -```cpp -g++ helloworld.cpp -o helloworld -``` - -执行 helloworld: - -```cpp -./helloworldHello, world! -``` - -如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下: - -```cpp -g++ runoob1.cpp cpp、runoob2.cpp -o runoob -``` - -生成一个 runoob 可执行文件。 - -g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 main.cpp 文件: - -```cpp -g++ -g -Wall -std=c++11 main.cpp -``` - -常用命令选项 - -| 选项 | 解释 | -| ------------ | ------------------------------------------------------------ | -| -ansi | 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。 | -| -c | 只编译并生成目标文件。 | -| -DMACRO | 以字符串"1"定义 MACRO 宏。 | -| -DMACRO=DEFN | 以字符串"DEFN"定义 MACRO 宏。 | -| -E | 只运行 C 预编译器。 | -| -g | 生成调试信息。GNU 调试器可利用该信息。 | -| -IDIRECTORY | 指定额外的头文件搜索路径DIRECTORY。 | -| -LDIRECTORY | 指定额外的函数库搜索路径DIRECTORY。 | -| -lLIBRARY | 连接时搜索指定的函数库LIBRARY。 | -| -m486 | 针对 486 进行代码优化。 | -| -o | FILE 生成指定的输出文件。用在生成可执行文件时。 | -| -O0 | 不进行优化处理。 | -| -O | 或 -O1 优化生成代码。 | -| -O2 | 进一步优化。 | -| -O3 | 比 -O2 更进一步优化,包括 inline 函数。 | -| -shared | 生成共享目标文件。通常用在建立共享库时。 | -| -static | 禁止使用共享连接。 | -| -UMACRO | 取消对 MACRO 宏的定义。 | -| -w | 不生成任何警告信息。 | -| -Wall | 生成所有警告信息。 | diff --git a/wiki/programming-language/C++/面对对象.md b/wiki/programming-language/C++/面对对象.md deleted file mode 100644 index 59c10603..00000000 --- a/wiki/programming-language/C++/面对对象.md +++ /dev/null @@ -1,1320 +0,0 @@ ---- -id: 面对对象 -title: 面对对象 -sidebar_position: 5 -data: 2022年5月26日 ---- - -C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。 - -类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。 - -## 类 - -类定义是以关键字 **class** 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。 - -### 定义 - -```cpp -class Box -{ - public: - double length; // 盒子的长度 - double breadth; // 盒子的宽度 - double height; // 盒子的高度 -}; -``` - -### 创建 - -对象 Box1 和 Box2 拥有独立的数据成员。 - -```cpp -Box Box1; // 声明 Box1,类型为 Box -Box Box2; // 声明 Box2,类型为 Box -``` - -### 实例 - -类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问。 - -```cpp -#include - -using namespace std; - -class Box -{ - public: - double length; // 长度 - double breadth; // 宽度 - double height; // 高度 -}; - -int main( ) -{ - Box Box1; // 声明 Box1,类型为 Box - Box Box2; // 声明 Box2,类型为 Box - double volume = 0.0; // 用于存储体积 - - // box 1 详述 - Box1.height = 5.0; - Box1.length = 6.0; - Box1.breadth = 7.0; - - // box 2 详述 - Box2.height = 10.0; - Box2.length = 12.0; - Box2.breadth = 13.0; - - // box 1 的体积 - volume = Box1.height * Box1.length * Box1.breadth; - cout << "Box1 的体积:" << volume < - -using namespace std; - -class Line -{ - public: - void setLength( double len ); - double getLength( void ); - Line(); // 这是构造函数 - - private: - double length; -}; - -// 成员函数定义,包括构造函数 -Line::Line(void) -{ - cout << "Object is being created" << endl; -} - -void Line::setLength( double len ) -{ - length = len; -} - -double Line::getLength( void ) -{ - return length; -} -// 程序的主函数 -int main( ) -{ - Line line; - - // 设置长度 - line.setLength(6.0); - cout << "Length of line : " << line.getLength() < - -using namespace std; - -class Line -{ - public: - int getLength( void ); - Line( int len ); // 简单的构造函数 - Line( const Line &obj); // 拷贝构造函数 - ~Line(); // 析构函数 - - private: - int *ptr; -}; - -// 成员函数定义,包括构造函数 -Line::Line(int len) -{ - cout << "调用构造函数" << endl; - // 为指针分配内存 - ptr = new int; - *ptr = len; -} - -Line::Line(const Line &obj) -{ - cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl; - ptr = new int; - *ptr = *obj.ptr; // 拷贝值 -} - -Line::~Line(void) -{ - cout << "释放内存" << endl; - delete ptr; -} -int Line::getLength( void ) -{ - return *ptr; -} - -void display(Line obj) -{ - cout << "line 大小 : " << obj.getLength() < - -using namespace std; - -class Line -{ - public: - void setLength( double len ); - double getLength( void ); - Line(); // 这是构造函数声明 - ~Line(); // 这是析构函数声明 - - private: - double length; -}; - -// 成员函数定义,包括构造函数 -Line::Line(void) -{ - cout << "Object is being created" << endl; -} -Line::~Line(void) -{ - cout << "Object is being deleted" << endl; -} - -void Line::setLength( double len ) -{ - length = len; -} - -double Line::getLength( void ) -{ - return length; -} -// 程序的主函数 -int main( ) -{ - Line line; - - // 设置长度 - line.setLength(6.0); - cout << "Length of line : " << line.getLength() < - -using namespace std; - -class Box -{ - public: - double length; // 长度 - double breadth; // 宽度 - double height; // 高度 - - double getVolume(void) - { - return length * breadth * height; - } - - // 成员函数声明 - void setLength( double len ); - void setBreadth( double bre ); - void setHeight( double hei ); -}; - -// 成员函数定义 -void Box::setLength( double len ) -{ - length = len; -} - -void Box::setBreadth( double bre ) -{ - breadth = bre; -} - -void Box::setHeight( double hei ) -{ - height = hei; -} - -// 程序的主函数 -int main( ) -{ - Box Box1; // 声明 Box1,类型为 Box - Box Box2; // 声明 Box2,类型为 Box - double volume = 0.0; // 用于存储体积 - - // box 1 详述 - Box1.setLength(6.0); - Box1.setBreadth(7.0); - Box1.setHeight(5.0); - - // box 2 详述 - Box2.setLength(12.0); - Box2.setBreadth(13.0); - Box2.setHeight(10.0); - - // box 1 的体积 - volume = Box1.getVolume(); - cout << "Box1 的体积:" << volume < - -using namespace std; - -class Box -{ - double width; -public: - friend void printWidth( Box box ); - void setWidth( double wid ); -}; - -// 成员函数定义 -void Box::setWidth( double wid ) -{ - width = wid; -} - -// 请注意:printWidth() 不是任何类的成员函数 -void printWidth( Box box ) -{ - /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */ - cout << "Width of box : " << box.width < - -using namespace std; - -inline int Max(int x, int y) -{ - return (x > y)? x : y; -} - -// 程序的主函数 -int main( ) -{ - - cout << "Max (20,10): " << Max(20,10) << endl; - cout << "Max (0,200): " << Max(0,200) << endl; - cout << "Max (100,1010): " << Max(100,1010) << endl; - return 0; -} -``` - -**输出:** - -```cpp -Max (20,10): 20 -Max (0,200): 200 -Max (100,1010): 1010 -``` - -### 静态成员 - -可以使用 **static** 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 - -静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 **::** 来重新声明静态变量从而对它进行初始化,如下面的实例所示。 - -```cpp -#include - -using namespace std; - -class Box -{ - public: - static int objectCount; - // 构造函数定义 - Box(double l=2.0, double b=2.0, double h=2.0) - { - cout <<"Constructor called." << endl; - length = l; - breadth = b; - height = h; - // 每次创建对象时增加 1 - objectCount++; - } - double Volume() - { - return length * breadth * height; - } - private: - double length; // 长度 - double breadth; // 宽度 - double height; // 高度 -}; - -// 初始化类 Box 的静态成员 -int Box::objectCount = 0; - -int main(void) -{ - Box Box1(3.3, 1.2, 1.5); // 声明 box1 - Box Box2(8.5, 6.0, 2.0); // 声明 box2 - - // 输出对象的总数 - cout << "Total objects: " << Box::objectCount << endl; - - return 0; -} -``` - -**输出:** - -```text -Constructor called. -Constructor called. -Total objects: 2 -``` - -### 静态成员函数 - -如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,**静态函数**只要使用类名加范围解析运算符 **::** 就可以访问。 - -静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。 - -静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。 - -**静态成员函数与普通成员函数的区别:** - -- 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。 - -- 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。 - -```cpp -#include - -using namespace std; - -class Box -{ - public: - static int objectCount; - // 构造函数定义 - Box(double l=2.0, double b=2.0, double h=2.0) - { - cout <<"Constructor called." << endl; - length = l; - breadth = b; - height = h; - // 每次创建对象时增加 1 - objectCount++; - } - double Volume() - { - return length * breadth * height; - } - static int getCount() - { - return objectCount; - } - private: - double length; // 长度 - double breadth; // 宽度 - double height; // 高度 -}; - -// 初始化类 Box 的静态成员 -int Box::objectCount = 0; - -int main(void) -{ - - // 在创建对象之前输出对象的总数 - cout << "Inital Stage Count: " << Box::getCount() << endl; - - Box Box1(3.3, 1.2, 1.5); // 声明 box1 - Box Box2(8.5, 6.0, 2.0); // 声明 box2 - - // 在创建对象之后输出对象的总数 - cout << "Final Stage Count: " << Box::getCount() << endl; - - return 0; -} -``` - -**输出:** - -```text -Inital Stage Count: 0 -Constructor called. -Constructor called. -Final Stage Count: 2 -``` - -### this 指针 - -在 C++ 中,每一个对象都能通过 **this** 指针来访问自己的地址。**this** 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 - -友元函数没有 **this** 指针,因为友元不是类的成员。只有成员函数才有 **this** 指针。 - -```cpp -#include - -using namespace std; - -class Box -{ - public: - // 构造函数定义 - Box(double l=2.0, double b=2.0, double h=2.0) - { - cout <<"Constructor called." << endl; - length = l; - breadth = b; - height = h; - } - double Volume() - { - return length * breadth * height; - } - int compare(Box box) - { - return this->Volume() > box.Volume(); - } - private: - double length; // Length of a box - double breadth; // Breadth of a box - double height; // Height of a box -}; - -int main(void) -{ - Box Box1(3.3, 1.2, 1.5); // Declare box1 - Box Box2(8.5, 6.0, 2.0); // Declare box2 - - if(Box1.compare(Box2)) - { - cout << "Box2 is smaller than Box1" <**,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。 - -```cpp -#include - -using namespace std; - -class Box -{ - public: - // 构造函数定义 - Box(double l=2.0, double b=2.0, double h=2.0) - { - cout <<"Constructor called." << endl; - length = l; - breadth = b; - height = h; - } - double Volume() - { - return length * breadth * height; - } - private: - double length; // Length of a box - double breadth; // Breadth of a box - double height; // Height of a box -}; - -int main(void) -{ - Box Box1(3.3, 1.2, 1.5); // Declare box1 - Box Box2(8.5, 6.0, 2.0); // Declare box2 - Box *ptrBox; // Declare pointer to a class. - - // 保存第一个对象的地址 - ptrBox = &Box1; - - // 现在尝试使用成员访问运算符来访问成员 - cout << "Volume of Box1: " << ptrBox->Volume() << endl; - - // 保存第二个对象的地址 - ptrBox = &Box2; - - // 现在尝试使用成员访问运算符来访问成员 - cout << "Volume of Box2: " << ptrBox->Volume() << endl; - - return 0; -} -``` - -**输出:** - -```text -Constructor called. -Constructor called. -Volume of Box1: 5.94 -Volume of Box2: 102 -``` - -一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 **->**,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。 - -```cpp -#include - -using namespace std; - -class Box -{ - public: - // 构造函数定义 - Box(double l=2.0, double b=2.0, double h=2.0) - { - cout <<"Constructor called." << endl; - length = l; - breadth = b; - height = h; - } - double Volume() - { - return length * breadth * height; - } - private: - double length; // Length of a box - double breadth; // Breadth of a box - double height; // Height of a box -}; - -int main(void) -{ - Box Box1(3.3, 1.2, 1.5); // Declare box1 - Box Box2(8.5, 6.0, 2.0); // Declare box2 - Box *ptrBox; // Declare pointer to a class. - - // 保存第一个对象的地址 - ptrBox = &Box1; - - // 现在尝试使用成员访问运算符来访问成员 - cout << "Volume of Box1: " << ptrBox->Volume() << endl; - - // 保存第二个对象的地址 - ptrBox = &Box2; - - // 现在尝试使用成员访问运算符来访问成员 - cout << "Volume of Box2: " << ptrBox->Volume() << endl; - - return 0; -} -``` - -**输出:** - -```text -Constructor called. -Constructor called. -Volume of Box1: 5.94 -Volume of Box2: 102 -``` - -## 封装 - -封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。 - -数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。 - -```cpp -#include -using namespace std; - -class Adder{ - public: - // 构造函数 - Adder(int i = 0) - { - total = i; - } - // 对外的接口 - void addNum(int number) - { - total += number; - } - // 对外的接口 - int getTotal() - { - return total; - }; - private: - // 对外隐藏的数据 - int total; -}; -int main( ) -{ - Adder a; - - a.addNum(10); - a.addNum(20); - a.addNum(30); - - cout << "Total " << a.getTotal() <: <继承方式> <基类名> - -// 多继承 -class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… -{ - <派生类类体> -}; -``` - -```cpp -#include - -using namespace std; - -// 基类 Shape -class Shape -{ - public: - void setWidth(int w) - { - width = w; - } - void setHeight(int h) - { - height = h; - } - protected: - int width; - int height; -}; - -// 基类 PaintCost -class PaintCost -{ - public: - int getCost(int area) - { - return area * 70; - } -}; - -// 派生类 -class Rectangle: public Shape, public PaintCost -{ - public: - int getArea() - { - return (width * height); - } -}; - -int main(void) -{ - Rectangle Rect; - int area; - - Rect.setWidth(5); - Rect.setHeight(7); - - area = Rect.getArea(); - - // 输出对象的面积 - cout << "Total area: " << Rect.getArea() << endl; - - // 输出总花费 - cout << "Total paint cost: $" << Rect.getCost(area) << endl; - - return 0; -} -``` - -**输出:** - -```text -Total area: 35 -Total paint cost: $2450 -``` - -### 继承类型 - -有 public, protected, private 三种继承方式,它们相应地改变了基类成员的访问属性。 - -**public 继承:** - -| 基类 | public | protected | private | -| ------ | ------ | --------- | ------- | -| 派生类 | 可 | 可 | 不可 | -| 类外 | 可 | 不可 | 不可 | - -**protected 继承:** - -| 基类 | public | protected | private | -| ------ | ------ | --------- | ------- | -| 派生类 | 可 | 可 | 不可 | -| 类外 | 不可 | 不可 | 不可 | - -**private 继承:** - -| 基类 | public | protected | private | -| ------ | ------ | --------- | ------- | -| 派生类 | 可 | 可 | 不可 | -| 类外 | 不可 | 不可 | 不可 | - -无论哪种继承方式,有两点都没有改变: - -- private 成员只能被本类成员(类内)和友元访问,不能被派生类访问; -- protected 成员可以被派生类访问。 - -## 多态 - -多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 - -C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 - -```cpp -#include -using namespace std; - -class Shape { - protected: - int width, height; - public: - Shape( int a=0, int b=0) - { - width = a; - height = b; - } - int area() - { - cout << "Parent class area :" <area(); - - // 存储三角形的地址 - shape = &tri; - // 调用三角形的求面积函数 area - shape->area(); - - return 0; -} -``` - -**输出:** - -```text -Parent class area -Parent class area -``` - -> 导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的**静态多态**,或**静态链接** - 函数调用在程序执行前就准备好了。有时候这也被称为**早绑定**,因为 area() 函数在程序编译期间就已经设置好了。 - -现在在 Shape 类中,area() 的声明前放置关键字 **virtual**,如下所示: - -```cpp -class Shape { - protected: - int width, height; - public: - Shape( int a=0, int b=0) - { - width = a; - height = b; - } - virtual int area() - { - cout << "Parent class area :" < -using namespace std; - -class printData -{ - public: - void print(int i) { - cout << "整数为: " << i << endl; - } - - void print(double f) { - cout << "浮点数为: " << f << endl; - } - - void print(char c[]) { - cout << "字符串为: " << c << endl; - } -}; - -int main(void) -{ - printData pd; - - // 输出整数 - pd.print(5); - // 输出浮点数 - pd.print(500.263); - // 输出字符串 - char c[] = "Hello C++"; - pd.print(c); - - return 0; -} -``` - -**输出:** - -```text -整数为: 5 -浮点数为: 500.263 -字符串为: Hello C++ -``` - -### 重载运算符 - -您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。 - -重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 - -```cpp -Box operator+(const Box&); -``` - -```cpp -#include -using namespace std; - -class Box -{ - public: - - double getVolume(void) - { - return length * breadth * height; - } - void setLength( double len ) - { - length = len; - } - - void setBreadth( double bre ) - { - breadth = bre; - } - - void setHeight( double hei ) - { - height = hei; - } - // 重载 + 运算符,用于把两个 Box 对象相加 - Box operator+(const Box& b) - { - Box box; - box.length = this->length + b.length; - box.breadth = this->breadth + b.breadth; - box.height = this->height + b.height; - return box; - } - private: - double length; // 长度 - double breadth; // 宽度 - double height; // 高度 -}; -// 程序的主函数 -int main( ) -{ - Box Box1; // 声明 Box1,类型为 Box - Box Box2; // 声明 Box2,类型为 Box - Box Box3; // 声明 Box3,类型为 Box - double volume = 0.0; // 把体积存储在该变量中 - - // Box1 详述 - Box1.setLength(6.0); - Box1.setBreadth(7.0); - Box1.setHeight(5.0); - - // Box2 详述 - Box2.setLength(12.0); - Box2.setBreadth(13.0); - Box2.setHeight(10.0); - - // Box1 的体积 - volume = Box1.getVolume(); - cout << "Volume of Box1 : " << volume < (大于>,<=(小于等于),>=(大于等于) | -| 逻辑运算符 | \|\|(逻辑或),&&(逻辑与),!(逻辑非) | -| 单目运算符 | + (正),-(负),*(指针),&(取地址) | -| 自增自减运算符 | ++(自增),--(自减) | -| 位运算符 | \| (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移) | -| 赋值运算符 | =, +=, -=, *=, /= , % = , &=, \|=, ^=, <<=, >>= | -| 空间申请与释放 | new, delete, new[ ] , delete[] | -| 其他运算符 | **()**(函数调用),**->**(成员访问),**,**(逗号),**[]**(下标) | - -#### 不可重载运算符 - -- **.**:成员访问运算符 -- **.\***, **->\***:成员指针访问运算符 -- **::**:域运算符 -- **sizeof**:长度运算符 -- **?:**:条件运算符 -- **#**: 预处理符号 diff --git a/wiki/programming-language/C/Enum 类型.md b/wiki/programming-language/C/Enum 类型.md deleted file mode 100644 index 775ed0d1..00000000 --- a/wiki/programming-language/C/Enum 类型.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -id: Enum 类型 -title: Enum 类型 -sidebar_position: 15 -data: 2022年3月30日 ---- - -如果一种数据类型的取值只有少数几种可能,并且每种取值都有自己的含义,为了提高代码的可读性,可以将它们定义为 Enum 类型,中文名为枚举。 - -```c -enum colors {RED, GREEN, BLUE}; - -printf("%d\n", RED); // 0 -printf("%d\n", GREEN); // 1 -printf("%d\n", BLUE); // 2 -``` - -上面示例中,假定程序里面需要三种颜色,就可以使用`enum`命令,把这三种颜色定义成一种枚举类型`colors`,它只有三种取值可能`RED`、`GREEN`、`BLUE`。这时,这三个名字自动成为整数常量,编译器默认将它们的值设为数字`0`、`1`、`2`。相比之下,`RED`要比`0`的可读性好了许多。 - -注意,Enum 内部的常量名,遵守标识符的命名规范,但是通常都使用大写。 - -使用时,可以将变量声明为 Enum 类型。 - -```c -enum colors color; -``` - -上面代码将变量`color`声明为`enum colors`类型。这个变量的值就是常量`RED`、`GREEN`、`BLUE`之中的一个。 - -```c -color = BLUE; -printf("%i\n", color); // 2 -``` - -上面代码将变量`color`的值设为`BLUE`,这里`BLUE`就是一个常量,值等于`2`。 - -typedef 命令可以为 Enum 类型起别名。 - -```c -typedef enum { - SHEEP, - WHEAT, - WOOD, - BRICK, - ORE -} RESOURCE; - -RESOURCE r; -``` - -上面示例中,`RESOURCE`是 Enum 类型的别名。声明变量时,使用这个别名即可。 - -还有一种不常见的写法,就是声明 Enum 类型时,在同一行里面为变量赋值。 - -```c -enum { - SHEEP, - WHEAT, - WOOD, - BRICK, - ORE -} r = BRICK, s = WOOD; -``` - -上面示例中,`r`的值是`3`,`s`的值是`2`。 - -由于 Enum 的属性会自动声明为常量,所以有时候使用 Enum 的目的,不是为了自定义一种数据类型,而是为了声明一组常量。这时就可以使用下面这种写法,比较简单。 - -```c -enum { ONE, TWO }; - -printf("%d %d", ONE, TWO); // 0 1 -``` - -上面示例中,`enum`是一个关键字,后面跟着一个代码块,常量就在代码内声明。`ONE`和`TWO`就是两个 Enum 常量。 - -常量之间使用逗号分隔。最后一个常量后面的尾逗号,可以省略,也可以保留。 - -```c -enum { ONE, TWO, }; -``` - -由于Enum 会自动编号,因此可以不必为常量赋值。C 语言会自动从0开始递增,为常量赋值。但是,C 语言也允许为 ENUM 常量指定值,不过只能指定为整数,不能是其他类型。因此,任何可以使用整数的场合,都可以使用 Enum 常量。 - -```c -enum { ONE = 1, TWO = 2 }; - -printf("%d %d", ONE, TWO); // 1 2 -``` - -Enum 常量可以是不连续的值。 - -```c -enum { X = 2, Y = 18, Z = -2 }; -``` - -Enum 常量也可以是同一个值。 - -```c -enum { X = 2, Y = 2, Z = 2 }; -``` - -如果一组常量之中,有些指定了值,有些没有指定。那么,没有指定值的常量会从上一个指定了值的常量,开始自动递增赋值。 - -```c -enum { - A, // 0 - B, // 1 - C = 4, // 4 - D, // 5 - E, // 6 - F = 3 // 3 - G, // 4 - H // 5 -} -``` - -Enum 的作用域与变量相同。如果是在顶层声明,那么在整个文件内都有效;如果是在代码块内部声明,则只对该代码块有效。如果与使用`int`声明的常量相比,Enum 的好处是更清晰地表示代码意图。 diff --git a/wiki/programming-language/C/IO 函数.md b/wiki/programming-language/C/IO 函数.md deleted file mode 100644 index e6346c8e..00000000 --- a/wiki/programming-language/C/IO 函数.md +++ /dev/null @@ -1,248 +0,0 @@ ---- -id: IO 函数 -title: IO 函数 -sidebar_position: 17 -data: 2022年3月30日 ---- - -C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。 - -## 缓存和字节流 - -严格地说,输入输出函数并不是直接与外部设备通信,而是通过缓存(buffer)进行间接通信。这个小节介绍缓存是什么。 - -普通文件一般都保存在磁盘上面,跟 CPU 相比,磁盘读取或写入数据是一个很慢的操作。所以,程序直接读写磁盘是不可行的,可能每执行一行命令,都必须等半天。C 语言的解决方案,就是只要打开一个文件,就在内存里面为这个文件设置一个缓存区。 - -程序向文件写入数据时,程序先把数据放入缓存,等到缓存满了,再把里面的数据会一次性写入磁盘文件。这时,缓存区就空了,程序再把新的数据放入缓存,重复整个过程。 - -程序从文件读取数据时,文件先把一部分数据放到缓存里面,然后程序从缓存获取数据,等到缓存空了,磁盘文件再把新的数据放入缓存,重复整个过程。 - -内存的读写速度比磁盘快得多,缓存的设计减少了读写磁盘的次数,大大提高了程序的执行效率。另外,一次性移动大块数据,要比多次移动小块数据快得多。 - -这种读写模式,对于程序来说,就有点像水流(stream),不是一次性读取或写入所有数据,而是一个持续不断的过程。先操作一部分数据,等到缓存吞吐完这部分数据,再操作下一部分数据。这个过程就叫做字节流操作。 - -由于缓存读完就空了,所以字节流读取都是只能读一次,第二次就读不到了。这跟读取文件很不一样。 - -C 语言的输入输出函数,凡是涉及读写文件,都是属于字节流操作。输入函数从文件获取数据,操作的是输入流;输出函数向文件写入数据,操作的是输出流。 - -## printf() - -`printf()`是最常用的输出函数,用于屏幕输出,原型定义在头文件`stdio.h`,详见《基本语法》一章。 - -## scanf() - -### 基本用法 - -`scanf()`函数用于读取用户的键盘输入。程序运行到这个语句时,会停下来,等待用户从键盘输入。用户输入数据、按下回车键后,`scanf()`就会处理用户的输入,将其存入变量。它的原型定义在头文件`stdio.h`。 - -`scanf()`的语法跟`printf()`类似。 - -```c -scanf("%d", &i); -``` - -它的第一个参数是一个格式字符串,里面会放置占位符(与`printf()`的占位符基本一致),告诉编译器如何解读用户的输入,需要提取的数据是什么类型。这是因为 C 语言的数据都是有类型的,`scanf()`必须提前知道用户输入的数据类型,才能处理数据。它的其余参数就是存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。 - -上面示例中,`scanf()`的第一个参数`%d`,表示用户输入的应该是一个整数。`%d`就是一个占位符,`%`是占位符的标志,`d`表示整数。第二个参数`&i`表示,将用户从键盘输入的整数存入变量`i`。 - -注意,变量前面必须加上`&`运算符(指针变量除外),因为`scanf()`传递的不是值,而是地址,即将变量`i`的地址指向用户输入的值。如果这里的变量是指针变量(比如字符串变量),那就不用加`&`运算符。 - -下面是一次将键盘输入读入多个变量的例子。 - -```c -scanf("%d%d%f%f", &i, &j, &x, &y); -``` - -上面示例中,格式字符串`%d%d%f%f`,表示用户输入的前两个是整数,后两个是浮点数,比如`1 -20 3.4 -4.0e3`。这四个值依次放入`i`、`j`、`x`、`y`四个变量。 - -`scanf()`处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。所以,用户输入的数据之间,有一个或多个空格不影响`scanf()`解读数据。另外,用户使用回车键,将输入分成几行,也不影响解读。 - -```c -1 --20 -3.4 --4.0e3 -``` - -上面示例中,用户分成四行输入,得到的结果与一行输入是完全一样的。每次按下回车键以后,`scanf()`就会开始解读,如果第一行匹配第一个占位符,那么下次按下回车键时,就会从第二个占位符开始解读。 - -`scanf()`处理用户输入的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。 - -```c -int x; -float y; - -// 用户输入 " -13.45e12# 0" -scanf("%d", &x); -scanf("%f", &y); -``` - -上面示例中,`scanf()`读取用户输入时,`%d`占位符会忽略起首的空格,从`-`处开始获取数据,读取到`-13`停下来,因为后面的`.`不属于整数的有效字符。这就是说,占位符`%d`会读到`-13`。 - -第二次调用`scanf()`时,就会从上一次停止解读的地方,继续往下读取。这一次读取的首字符是`.`,由于对应的占位符是`%f`,会读取到`.45e12`,这是采用科学计数法的浮点数格式。后面的`#`不属于浮点数的有效字符,所以会停在这里。 - -由于`scanf()`可以连续处理多个占位符,所以上面的例子也可以写成下面这样。 - -```c -scanf("%d%f", &x, &y); -``` - -`scanf()`的返回值是一个整数,表示成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回`0`。如果读取到文件结尾,则返回常量 EOF。 - -### 占位符 - -`scanf()`常用的占位符如下,与`printf()`的占位符基本一致。 - -- `%c`:字符。 -- `%d`:整数。 -- `%f`:`float`类型浮点数。 -- `%lf`:`double`类型浮点数。 -- `%Lf`:`long double`类型浮点数。 -- `%s`:字符串。 -- `%[]`:在方括号中指定一组匹配的字符(比如`%[0-9]`),遇到不在集合之中的字符,匹配将会停止。 - -上面所有占位符之中,除了`%c`以外,都会自动忽略起首的空白字符。`%c`不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。如果要强制跳过字符前的空白字符,可以写成`scanf(" %c", &ch)`,即`%c`前加上一个空格,表示跳过零个或多个空白字符。 - -下面要特别说一下占位符`%s`,它其实不能简单地等同于字符串。它的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。因为`%s`不会包含空白字符,所以无法用来读取多个单词,除非多个`%s`一起使用。这也意味着,`scanf()`不适合读取可能包含空格的字符串,比如书名或歌曲名。另外,`scanf()`遇到`%s`占位符,会在字符串变量末尾存储一个空字符`\0`。 - -`scanf()`将字符串读入字符数组时,不会检测字符串是否超过了数组长度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防止这种情况,使用`%s`占位符时,应该指定读入字符串的最长长度,即写成`%[m]s`,其中的`[m]`是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。 - -```c -char name[11]; -scanf("%10s", name); -``` - -上面示例中,`name`是一个长度为11的字符数组,`scanf()`的占位符`%10s`表示最多读取用户输入的10个字符,后面的字符将被丢弃,这样就不会有数组溢出的风险了。 - -### 赋值忽略符 - -有时,用户的输入可能不符合预定的格式。 - -```c -scanf("%d-%d-%d", &year, &month, &day); -``` - -上面示例中,如果用户输入`2020-01-01`,就会正确解读出年、月、日。问题是用户可能输入其他格式,比如`2020/01/01`,这种情况下,`scanf()`解析数据就会失败。 - -为了避免这种情况,`scanf()`提供了一个赋值忽略符(assignment suppression character)`*`。只要把`*`加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。 - -```c -scanf("%d%*c%d%*c%d", &year, &month, &day); -``` - -上面示例中,`%*c`就是在占位符的百分号后面,加入了赋值忽略符`*`,表示这个占位符没有对应的变量,解读后不必返回。 - -## sscanf() - -`sscanf()`函数与`scanf()`很类似,不同之处是`sscanf()`从字符串里面,而不是从用户输入获取数据。它的原型定义在头文件`stdio.h`里面。 - -```c -int sscanf(const char* s, const char* format, ...); -``` - -`sscanf()`的第一个参数是一个字符串指针,用来从其中获取数据。其他参数都与`scanf()`相同。 - -`sscanf()`主要用来处理其他输入函数读入的字符串,从其中提取数据。 - -```c -fgets(str, sizeof(str), stdin); -sscanf(str, "%d%d", &i, &j); -``` - -上面示例中,`fgets()`先从标准输入获取了一行数据(`fgets()`的介绍详见下一章),存入字符数组`str`。然后,`sscanf()`再从字符串`str`里面提取两个整数,放入变量`i`和`j`。 - -`sscanf()`的一个好处是,它的数据来源不是流数据,所以可以反复使用,不像`scanf()`的数据来源是流数据,只能读取一次。 - -`sscanf()`的返回值是成功赋值的变量的数量,如果提取失败,返回常量 EOF。 - -## getchar(),putchar() - -**(1)getchar()** - -`getchar()`函数返回用户从键盘输入的一个字符,使用时不带有任何参数。程序运行到这个命令就会暂停,等待用户从键盘输入,等同于使用`scanf()`方法读取一个字符。它的原型定义在头文件`stdio.h`。 - -```c -char ch; -ch = getchar(); - -// 等同于 -scanf("%c", &ch); -``` - -`getchar()`不会忽略起首的空白字符,总是返回当前读取的第一个字符,无论是否为空格。如果读取失败,返回常量 EOF,由于 EOF 通常是`-1`,所以返回值的类型要设为 int,而不是 char。 - -由于`getchar()`返回读取的字符,所以可以用在循环条件之中。 - -```c -while (getchar() != '\n') - ; -``` - -上面示例中,只有读到的字符等于换行符(`\n`),才会退出循环,常用来跳过某行。`while`循环的循环体没有任何语句,表示对该行不执行任何操作。 - -下面的例子是计算某一行的字符长度。 - -```c -int len = 0; -while(getchar() != '\n') - len++; -``` - -上面示例中,`getchar()`每读取一个字符,长度变量`len`就会加1,直到读取到换行符为止,这时`len`就是该行的字符长度。 - -下面的例子是跳过空格字符。 - -```c -while ((ch = getchar()) == ' ') - ; -``` - -上面示例中,结束循环后,变量`ch`等于第一个非空格字符。 - -**(2)putchar()** - -`putchar()`函数将它的参数字符输出到屏幕,等同于使用`printf()`输出一个字符。它的原型定义在头文件`stdio.h`。 - -```c -putchar(ch); -// 等同于 -printf("%c", ch); -``` - -操作成功时,`putchar()`返回输出的字符,否则返回常量 EOF。 - -**(3)小结** - -由于`getchar()`和`putchar()`这两个函数的用法,要比`scanf()`和`printf()`更简单,而且通常是用宏来实现,所以要比`scanf()`和`printf()`更快。如果操作单个字符,建议优先使用这两个函数。 - -## puts() - -`puts()`函数用于将参数字符串显示在屏幕(stdout)上,并且自动在字符串末尾添加换行符。它的原型定义在头文件`stdio.h`。 - -```c -puts("Here are some messages:"); -puts("Hello World"); -``` - -上面示例中,`puts()`在屏幕上输出两行内容。 - -写入成功时,`puts()`返回一个非负整数,否则返回常量 EOF。 - -## gets() - -`gets()`函数以前用于从`stdin`读取整行输入,现在已经被废除了,仍然放在这里介绍一下。 - -该函数读取用户的一行输入,不会跳过起始处的空白字符,直到遇到换行符为止。这个函数会丢弃换行符,将其余字符放入参数变量,并在这些字符的末尾添加一个空字符`\0`,使其成为一个字符串。 - -它经常与`puts()`配合使用。 - -```c -char words[81]; - -puts("Enter a string, please"); -gets(words); -``` - -上面示例使用`puts()`在屏幕上输出提示,然后使用`gets()`获取用户的输入。 - -由于`gets()`获取的字符串,可能超过字符数组变量的最大长度,有安全风险,建议不要使用,改为使用`fgets()`。 diff --git a/wiki/programming-language/C/Struct 结构.md b/wiki/programming-language/C/Struct 结构.md deleted file mode 100644 index b59abd98..00000000 --- a/wiki/programming-language/C/Struct 结构.md +++ /dev/null @@ -1,441 +0,0 @@ ---- -id: Struct 结构 -title: Struct 结构 -sidebar_position: 12 -data: 2022年3月30日 ---- - -## 简介 - -C 语言内置的数据类型,除了最基本的几种原始类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含相同类型的数据,实际使用中并不够用。 - -实际使用中,主要有下面两种情况,需要更灵活强大的复合类型。 - -- 复杂的物体需要使用多个变量描述,这些变量都是相关的,最好有某种机制将它们联系起来。 -- 某些函数需要传入多个参数,如果一个个按照顺序传入,非常麻烦,最好能组合成一个复合结构传入。 - -为了解决这些问题,C 语言提供了`struct`关键字,允许自定义复合数据类型,将不同类型的值组合在一起。这样不仅为编程提供方便,也有利于增强代码的可读性。C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能。 - -下面是`struct`自定义数据类型的一个例子。 - -```c -struct fraction { - int numerator; - int denominator; -}; -``` - -上面示例定义了一个分数的数据类型`struct fraction`,包含两个属性`numerator`和`denominator`。 - -注意,作为一个自定义的数据类型,它的类型名要包括`struct`关键字,比如上例是`struct fraction`,单独的`fraction`没有任何意义,甚至脚本还可以另外定义名为`fraction`的变量,虽然这样很容易造成混淆。另外,`struct`语句结尾的分号不能省略,否则很容易产生错误。 - -定义了新的数据类型以后,就可以声明该类型的变量,这与声明其他类型变量的写法是一样的。 - -```c -struct fraction f1; - -f1.numerator = 22; -f1.denominator = 7; -``` - -上面示例中,先声明了一个`struct fraction`类型的变量`f1`,这时编译器就会为`f1`分配内存,接着就可以为`f1`的不同属性赋值。可以看到,struct 结构的属性通过点(`.`)来表示,比如`numerator`属性要写成`f1.numerator`。 - -再提醒一下,声明自定义类型的变量时,类型名前面,不要忘记加上`struct`关键字。也就是说,必须使用`struct fraction f1`声明变量,不能写成`fraction f1`。 - -除了逐一对属性赋值,也可以使用大括号,一次性对 struct 结构的所有属性赋值。 - -```c -struct car { - char* name; - float price; - int speed; -}; - -struct car saturn = {"Saturn SL/2", 16000.99, 175}; -``` - -上面示例中,变量`saturn`是`struct car`类型,大括号里面同时对它的三个属性赋值。如果大括号里面的值的数量,少于属性的数量,那么缺失的属性自动初始化为`0`。 - -注意,大括号里面的值的顺序,必须与 struct 类型声明时属性的顺序一致。否则,必须为每个值指定属性名。 - -```c -struct car saturn = {.speed=172, .name="Saturn SL/2"}; -``` - -上面示例中,初始化的属性少于声明时的属性,这时剩下的那些属性都会初始化为`0`。 - -声明变量以后,可以修改某个属性的值。 - -```c -struct car saturn = {.speed=172, .name="Saturn SL/2"}; -saturn.speed = 168; -``` - -上面示例将`speed`属性的值改成`168`。 - -struct 的数据类型声明语句与变量的声明语句,可以合并为一个语句。 - -```c -struct book { - char title[500]; - char author[100]; - float value; -} b1; -``` - -上面的语句同时声明了数据类型`book`和该类型的变量`b1`。如果类型标识符`book`只用在这一个地方,后面不再用到,这里可以将类型名省略。 - -```c -struct { - char title[500]; - char author[100]; - float value; -} b1; -``` - -上面示例中,`struct`声明了一个匿名数据类型,然后又声明了这个类型的变量`b1`。 - -与其他变量声明语句一样,可以在声明变量的同时,对变量赋值。 - -```c -struct { - char title[500]; - char author[100]; - float value; -} b1 = {"Harry Potter", "J. K. Rowling", 10.0}, - b2 = {"Cancer Ward", "Aleksandr Solzhenitsyn", 7.85}; -``` - -上面示例中,在声明变量`b1`和`b2`的同时,为它们赋值。 - -下一章介绍的`typedef`命令可以为 struct 结构指定一个别名,这样使用起来更简洁。 - -```c -typedef struct cell_phone { - int cell_no; - float minutes_of_charge; -} phone; - -phone p = {5551234, 5}; -``` - -上面示例中,`phone`就是`struct cell_phone`的别名。 - -指针变量也可以指向`struct`结构。 - -```c -struct book { - char title[500]; - char author[100]; - float value; -}* b1; - -// 或者写成两个语句 -struct book { - char title[500]; - char author[100]; - float value; -}; -struct book* b1; -``` - -上面示例中,变量`b1`是一个指针,指向的数据是`struct book`类型的实例。 - -struct 结构也可以作为数组成员。 - -```c -struct fraction numbers[1000]; - -numbers[0].numerator = 22; -numbers[0].denominator = 7; -``` - -上面示例声明了一个有1000个成员的数组`numbers`,每个成员都是自定义类型`fraction`的实例。 - -struct 结构占用的存储空间,不是各个属性存储空间的总和。因为为了计算效率,C 语言的内存占用空间一般来说,都必须是`int`类型存储空间的倍数。如果`int`类型的存储是4字节,那么 struct 类型的存储空间就总是4的倍数。 - -```c -struct { char a; int b; } s; -printf("%d\n", sizeof(s)); // 8 -``` - -上面示例中,如果按照属性占据的空间相加,变量`s`的存储空间应该是5个字节。但是,struct 结构的存储空间是`int`类型的倍数,所以最后的结果是占据8个字节,`a`属性与`b`属性之间有3个字节的“空洞”。 - -## struct 的复制 - -struct 变量可以使用赋值运算符(`=`),复制给另一个变量,这时会生成一个全新的副本。系统会分配一块新的内存空间,大小与原来的变量相同,把每个属性都复制过去,即原样生成了一份数据。这一点跟数组的复制不一样,务必小心。 - -```c -struct cat { char name[30]; short age; } a, b; - -strcpy(a.name, "Hula"); -a.age = 3; - -b = a; -b.name[0] = 'M'; - -printf("%s\n", a.name); // Hula -printf("%s\n", b.name); // Mula -``` - -上面示例中,变量`b`是变量`a`的副本,两个变量的值是各自独立的,修改掉`b.name`不影响`a.name`。 - -上面这个示例是有前提的,就是 struct 结构的属性必须定义成字符数组,才能复制数据。如果稍作修改,属性定义成字符指针,结果就不一样。 - -```c -struct cat { char* name; short age; } a, b; - -a.name = "Hula"; -a.age = 3; - -b = a; -``` - -上面示例中,`name`属性变成了一个字符指针,这时`a`赋值给`b`,导致`b.name`也是同样的字符指针,指向同一个地址,也就是说两个属性共享同一个地址。因为这时,struct 结构内部保存的是一个指针,而不是上一个例子的数组,这时复制的就不是字符串本身,而是它的指针。并且,这个时候也没法修改字符串,因为字符指针指向的字符串是不能修改的。 - -总结一下,赋值运算符(`=`)可以将 struct 结构每个属性的值,一模一样复制一份,拷贝给另一个 struct 变量。这一点跟数组完全不同,使用赋值运算符复制数组,不会复制数据,只会共享地址。 - -注意,这种赋值要求两个变量是同一个类型,不同类型的 struct 变量无法互相赋值。 - -另外,C 语言没有提供比较两个自定义数据结构是否相等的方法,无法用比较运算符(比如`==`和`!=`)比较两个数据结构是否相等或不等。 - -## struct 指针 - -如果将 struct 变量传入函数,函数内部得到的是一个原始值的副本。 - -```c -#include - -struct turtle { - char* name; - char* species; - int age; -}; - -void happy(struct turtle t) { - t.age = t.age + 1; -} - -int main() { - struct turtle myTurtle = {"MyTurtle", "sea turtle", 99}; - happy(myTurtle); - printf("Age is %i\n", myTurtle.age); // 输出 99 - return 0; -} -``` - -上面示例中,函数`happy()`传入的是一个 struct 变量`myTurtle`,函数内部有一个自增操作。但是,执行完`happy()`以后,函数外部的`age`属性值根本没变。原因就是函数内部得到的是 struct 变量的副本,改变副本影响不到函数外部的原始数据。 - -通常情况下,开发者希望传入函数的是同一份数据,函数内部修改数据以后,会反映在函数外部。而且,传入的是同一份数据,也有利于提高程序性能。这时就需要将 struct 变量的指针传入函数,通过指针来修改 struct 属性,就可以影响到函数外部。 - -struct 指针传入函数的写法如下。 - -```c -void happy(struct turtle* t) { -} - -happy(&myTurtle); -``` - -上面代码中,`t`是 struct 结构的指针,调用函数时传入的是指针。struct 类型跟数组不一样,类型标识符本身并不是指针,所以传入时,指针必须写成`&myTurtle`。 - -函数内部也必须使用`(*t).age`的写法,从指针拿到 struct 结构本身。 - -```c -void happy(struct turtle* t) { - (*t).age = (*t).age + 1; -} -``` - -上面示例中,`(*t).age`不能写成`*t.age`,因为点运算符`.`的优先级高于`*`。`*t.age`这种写法会将`t.age`看成一个指针,然后取它对应的值,会出现无法预料的结果。 - -现在,重新编译执行上面的整个示例,`happy()`内部对 struct 结构的操作,就会反映到函数外部。 - -`(*t).age`这样的写法很麻烦。C 语言就引入了一个新的箭头运算符(`->`),可以从 struct 指针上直接获取属性,大大增强了代码的可读性。 - -```c -void happy(struct turtle* t) { - t->age = t->age + 1; -} -``` - -总结一下,对于 struct 变量名,使用点运算符(`.`)获取属性;对于 struct 变量指针,使用箭头运算符(`->`)获取属性。以变量`myStruct`为例,假设`ptr`是它的指针,那么下面三种写法是同一回事。 - -```c -// ptr == &myStruct -myStruct.prop == (*ptr).prop == ptr->prop -``` - -## struct 的嵌套 - -struct 结构的成员可以是另一个 struct 结构。 - -```c -struct species { - char* name; - int kinds; -}; - -struct fish { - char* name; - int age; - struct species breed; -}; -``` - -上面示例中,`fish`的属性`breed`是另一个 struct 结构`species`。 - -赋值的时候有多种写法。 - -```c -// 写法一 -struct fish shark = {"shark", 9, {"Selachimorpha", 500}}; - -// 写法二 -struct species myBreed = {"Selachimorpha", 500}; -struct fish shark = {"shark", 9, myBreed}; - -// 写法三 -struct fish shark = { - .name="shark", - .age=9, - .breed={"Selachimorpha", 500} -}; - -// 写法四 -struct fish shark = { - .name="shark", - .age=9, - .breed.name="Selachimorpha", - .breed.kinds=500 -}; - -printf("Shark's species is %s", shark.breed.name); -``` - -上面示例展示了嵌套 Struct 结构的四种赋值写法。另外,引用`breed`属性的内部属性,要使用两次点运算符(`shark.breed.name`)。 - -下面是另一个嵌套 struct 的例子。 - -```c -struct name { - char first[50]; - char last[50]; -}; - -struct student { - struct name name; - short age; - char sex; -} student1; - -strcpy(student1.name.first, "Harry"); -strcpy(student1.name.last, "Potter"); - -// or -struct name myname = {"Harry", "Potter"}; -student1.name = myname; -``` - -上面示例中,自定义类型`student`的`name`属性是另一个自定义类型,如果要引用后者的属性,就必须使用两个`.`运算符,比如`student1.name.first`。另外,对字符数组属性赋值,要使用`strcpy()`函数,不能直接赋值,因为直接改掉字符数组名的地址会报错。 - -struct 结构内部不仅可以引用其他结构,还可以自我引用,即结构内部引用当前结构。比如,链表结构的节点就可以写成下面这样。 - -```c -struct node { - int data; - struct node* next; -}; -``` - -上面示例中,`node`结构的`next`属性,就是指向另一个`node`实例的指针。下面,使用这个结构自定义一个数据链表。 - -```c -struct node { - int data; - struct node* next; -}; - -struct node* head; - -// 生成一个三个节点的列表 (11)->(22)->(33) -head = malloc(sizeof(struct node)); - -head->data = 11; -head->next = malloc(sizeof(struct node)); - -head->next->data = 22; -head->next->next = malloc(sizeof(struct node)); - -head->next->next->data = 33; -head->next->next->next = NULL; - -// 遍历这个列表 -for (struct node *cur = head; cur != NULL; cur = cur->next) { - printf("%d\n", cur->data); -} -``` - -上面示例是链表结构的最简单实现,通过`for`循环可以对其进行遍历。 - -## 位字段 - -struct 还可以用来定义二进制位组成的数据结构,称为“位字段”(bit field),这对于操作底层的二进制数据非常有用。 - -```c -struct { - unsigned int ab:1; - unsigned int cd:1; - unsigned int ef:1; - unsigned int gh:1; -} synth; - -synth.ab = 0; -synth.cd = 1; -``` - -上面示例中,每个属性后面的`:1`,表示指定这些属性只占用一个二进制位,所以这个数据结构一共是4个二进制位。 - -注意,定义二进制位时,结构内部的各个属性只能是整数类型。 - -实际存储的时候,C 语言会按照`int`类型占用的字节数,存储一个位字段结构。如果有剩余的二进制位,可以使用未命名属性,填满那些位。也可以使用宽度为0的属性,表示占满当前字节剩余的二进制位,迫使下一个属性存储在下一个字节。 - -```c -struct { - unsigned int field1 : 1; - unsigned int : 2; - unsigned int field2 : 1; - unsigned int : 0; - unsigned int field3 : 1; -} stuff; -``` - -上面示例中,`stuff.field1`与`stuff.field2`之间,有一个宽度为两个二进制位的未命名属性。`stuff.field3`将存储在下一个字节。 - -## 弹性数组成员 - -很多时候,不能事先确定数组到底有多少个成员。如果声明数组的时候,事先给出一个很大的成员数,就会很浪费空间。C 语言提供了一个解决方法,叫做弹性数组成员(flexible array member)。 - -如果不能事先确定数组成员的数量时,可以定义一个 struct 结构。 - -```c -struct vstring { - int len; - char chars[]; -}; -``` - -上面示例中,`struct vstring`结构有两个属性。`len`属性用来记录数组`chars`的长度,`chars`属性是一个数组,但是没有给出成员数量。 - -`chars`数组到底有多少个成员,可以在为`vstring`分配内存时确定。 - -```c -struct vstring* str = malloc(sizeof(struct vstring) + n * sizeof(char)); -str->len = n; -``` - -上面示例中,假定`chars`数组的成员数量是`n`,只有在运行时才能知道`n`到底是多少。然后,就为`struct vstring`分配它需要的内存:它本身占用的内存长度,再加上`n`个数组成员占用的内存长度。最后,`len`属性记录一下`n`是多少。 - -这样就可以让数组`chars`有`n`个成员,不用事先确定,可以跟运行时的需要保持一致。 - -弹性数组成员有一些专门的规则。首先,弹性成员的数组,必须是 struct 结构的最后一个属性。另外,除了弹性数组成员,struct 结构必须至少还有一个其他属性。 diff --git a/wiki/programming-language/C/Typedef 命令.md b/wiki/programming-language/C/Typedef 命令.md deleted file mode 100644 index 8d3df108..00000000 --- a/wiki/programming-language/C/Typedef 命令.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -id: Typedef 命令 -title: Typedef 命令 -sidebar_position: 13 -data: 2022年3月30日 ---- - -## 简介 - -`typedef`命令用来为某个类型起别名。 - -```c -typedef type name; -``` - -上面代码中,`type`代表类型名,`name`代表别名。 - -```c -typedef unsigned char BYTE; - -BYTE c = 'z'; -``` - -上面示例中,`typedef`命令为类型`unsign char`起别名`BYTE`,然后就可以使用`BYTE`声明变量。 - -typedef 可以一次指定多个别名。 - -```c -typedef int antelope, bagel, mushroom; -``` - -上面示例中,一次性为`int`类型起了三个别名。 - -typedef 可以为指针起别名。 - -```c -typedef int* intptr; - -int a = 10; -intptr x = &a; -``` - -上面示例中,`intptr`是`int*`的别名。不过,使用的时候要小心,这样不容易看出来,变量`x`是一个指针类型。 - -typedef 也可以用来为数组类型起别名。 - -```c -typedef int five_ints[5]; - -five_ints x = {11, 22, 33, 44, 55}; -``` - -上面示例中,`five_ints`是一个数组类型,包含5个整数的 - -typedef 为函数起别名的写法如下。 - -```c -typedef signed char (*fp)(void); -``` - -上面示例中,类型别名`fp`是一个指针,代表函数`signed char (*)(void)`。 - -## 主要好处 - -`typedef`为类型起别名的好处,主要有下面几点。 - -(1)更好的代码可读性。 - -```c -typedef char* STRING; - -STRING name; -``` - -上面示例为字符指针起别名为`STRING`,以后使用`STRING`声明变量时,就可以轻易辨别该变量是字符串。 - -(2)为 struct、union、enum 等命令定义的复杂数据结构创建别名,从而便于引用。 - -```c -struct treenode { - // ... -}; - -typedef struct treenode* Tree; -``` - -上面示例中,`Tree`为`struct treenode*`的别名。 - -typedef 也可以与 struct 定义数据类型的命令写在一起。 - -```c -typedef struct animal { - char* name; - int leg_count, speed; -} animal; -``` - -上面示例中,自定义数据类型时,同时使用`typedef`命令,为`struct animal`起了一个别名`animal`。 - -这种情况下,C 语言允许省略 struct 命令后面的类型名。 - -```c -typedef struct { - char *name; - int leg_count, speed; -} animal; -``` - -上面示例相当于为一个匿名的数据类型起了别名`animal`。 - -(3)typedef 方便以后为变量改类型。 - -```c -typedef float app_float; - -app_float f1, f2, f3; -``` - -上面示例中,变量`f1`、`f2`、`f3`的类型都是`float`。如果以后需要为它们改类型,只需要修改`typedef`语句即可。 - -```c -typedef long double app_float; -``` - -上面命令将变量`f1`、`f2`、`f3`的类型都改为`long double`。 - -(4)可移植性 - -某一个值在不同计算机上的类型,可能是不一样的。 - -```c -int i = 100000; -``` - -上面代码在32位整数的计算机没有问题,但是在16位整数的计算机就会出错。 - -C 语言的解决办法,就是提供了类型别名,在不同计算机上会解释成不同类型,比如`int32_t`。 - -```c -int32_t i = 100000; -``` - -上面示例将变量`i`声明成`int32_t`类型,保证它在不同计算机上都是32位宽度,移植代码时就不会出错。 - -这一类的类型别名都是用 typedef 定义的。下面是类似的例子。 - -```c -typedef long int ptrdiff_t; -typedef unsigned long int size_t; -typedef int wchar_t; -``` - -这些整数类型别名都放在头文件`stdint.h`,不同架构的计算机只需修改这个头文件即可,而无需修改代码。 - -因此,`typedef`有助于提高代码的可移植性,使其能适配不同架构的计算机。 - -(5)简化类型声明 - -C 语言有些类型声明相当复杂,比如下面这个。 - -```c -char (*(*x(void))[5])(void); -``` - -typedef 可以简化复杂的类型声明,使其更容易理解。首先,最外面一层起一个类型别名。 - -```c -typedef char (*Func)(void); -Func (*x(void))[5]; -``` - -这个看起来还是有点复杂,就为里面一层也定义一个别名。 - -```c -typedef char (*Func)(void); -typedef Func Arr[5]; -Arr* x(void); -``` - -上面代码就比较容易解读了。 - -- `x`是一个函数,返回一个指向 Arr 类型的指针。 -- `Arr`是一个数组,有5个成员,每个成员是`Func`类型。 -- `Func`是一个函数指针,指向一个无参数、返回字符值的函数。 diff --git a/wiki/programming-language/C/Union 结构.md b/wiki/programming-language/C/Union 结构.md deleted file mode 100644 index ae1a8ab9..00000000 --- a/wiki/programming-language/C/Union 结构.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -id: Union 结构 -title: Union 结构 -sidebar_position: 14 -data: 2022年3月30日 ---- - -有时需要一种数据结构,不同的场合表示不同的数据类型。比如,如果只用一种数据结构表示水果的“量”,这种结构就需要有时是整数(6个苹果),有时是浮点数(1.5公斤草莓)。 - -C 语言提供了 Union 结构,用来自定义可以灵活变更的数据结构。它内部可以包含各种属性,但同一时间只能有一个属性,因为所有属性都保存在同一个内存地址,后面写入的属性会覆盖前面的属性。这样做的最大好处是节省空间。 - -```c -union quantity { - short count; - float weight; - float volume; -}; -``` - -上面示例中,`union`命令定义了一个包含三个属性的数据类型`quantity`。虽然包含三个属性,但是同一时间只能取到一个属性。最后赋值的属性,就是可以取到值的那个属性。 - -使用时,声明一个该类型的变量。 - -```c -// 写法一 -union quantity q; -q.count = 4; - -// 写法二 -union quantity q = {.count=4}; - -// 写法三 -union quantity q = {4}; -``` - -上面代码展示了为 Union 结构赋值的三种写法。最后一种写法不指定属性名,就会赋值给第一个属性。 - -执行完上面的代码以后,`q.count`可以取到值,另外两个属性取不到值。 - -```c -printf("count is %i\n", q.count); // count is 4 -printf("weight is %f\n", q.weight); // 未定义行为 -``` - -如果要让`q.weight`属性可以取到值,就要先为它赋值。 - -```c -q.weight = 0.5; -printf("weight is %f\n", q.weight); // weight is 0.5 -``` - -一旦为其他属性赋值,原先可以取到值的`q.count`属性就不再有效了。除了这一点,Union 结构的其他用法与 Struct 结构,基本上是一致的。 - -Union 结构也支持指针运算符`->`。 - -```c -union quantity { - short count; - float weight; - float volume; -}; - -union quantity q; -q.count = 4; - -union quantity* ptr; -ptr = &q; - -printf("%d\n", ptr->count); // 4 -``` - -上面示例中,`ptr`是`q`的指针,那么`ptr->count`等同于`q.count`。 - -Union 结构指针与它的属性有关,当前哪个属性能够取到值,它的指针就是对应的数据类型。 - -```c -union foo { - int a; - float b; -} x; - -int* foo_int_p = (int *)&x; -float* foo_float_p = (float *)&x; - -x.a = 12; -printf("%d\n", x.a); // 12 -printf("%d\n", *foo_int_p); // 12 - -x.b = 3.141592; -printf("%f\n", x.b); // 3.141592 -printf("%f\n", *foo_float_p); // 3.141592 -``` - -上面示例中,`&x`是 foo 结构的指针,它的数据类型完全由当前赋值的属性决定。 - -typedef 命令可以为 Union 数据类型起别名。 - -```c -typedef union { - short count; - float weight; - float volume; -} quantity; -``` - -上面示例中,`union`命令定义了一个包含三个属性的数据类型,`typedef`命令为它起别名为`quantity`。 - -Union 结构的好处,主要是节省空间。它将一段内存空间,重用于不同类型的数据。定义了三个属性,但同一时间只用到一个,使用 Union 结构就可以节省另外两个属性的空间。Union 结构占用的内存长度,等于它内部最长属性的长度。 diff --git a/wiki/programming-language/C/lib 标准库/assert.h.md b/wiki/programming-language/C/lib 标准库/assert.h.md deleted file mode 100644 index e850971c..00000000 --- a/wiki/programming-language/C/lib 标准库/assert.h.md +++ /dev/null @@ -1,81 +0,0 @@ -# assert.h - -## assert() - -`assert.h`头文件定义了宏`assert()`,用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。 - -```c -assert(PI > 3); -``` - -上面代码在程序运行到这一行语句时,验证变量`PI`是否大于3。如果确实大于3,程序继续运行,否则就会终止运行,并且给出报错信息提示。 - -`assert()`宏接受一个表达式作为参数。如果该表达式为真(返回值非零),`assert()`不会产生任何作用,程序继续运行。如果该表达式为假(返回值为零),`assert()`就会报错,在标准错误流`stderr`中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。最后,调用`abort()`函数终止程序(`abort()`函数的原型在`stdlib.h`头文件中)。 - -```c -z = x * x - y * y; -assert(z >= 0); -``` - -上面的`assert()`语句类似于下面的代码。 - -```c -if (z < 0) { - puts("z less than 0"); - abort(); -} -``` - -如果断言失败,程序会中断执行,会显示下面的提示。 - -```c -Assertion failed: (z >= 0), function main, file /Users/assert.c, line 14. -``` - -上面报错的格式如下。 - -```c -Assertion failed: [expression], function [abc], file [xyz], line [nnn]. -``` - -上面代码中,方括号的部分使用实际数据替换掉。 - -使用`assert()`有几个好处:它不仅能自动标识文件和出问题的行号,还有一种无需更改代码就能开启或关闭`assert()`的机制。如果已经确认程序没有问题,不需要再做断言,就在`#include `语句的前面,定义一个宏`NDEBUG`。 - -```c -#define NDEBUG -#include -``` - -然后,重新编译程序,编译器就会禁用文件中所有的`assert()`语句。如果程序又出现问题,可以移除这条`#define NDBUG`指令(或者把它注释掉),再次编译,这样就重新启用了`assert()`语句。 - -`assert()`的缺点是,因为引入了额外的检查,增加了程序的运行时间。 - -## static_assert() - -C11 引入了静态断言`static_assert()`,用于在编译阶段进行断言判断。 - -```c -static_assert(constant-expression, string-literal); -``` - -`static_assert()`接受两个参数,第一个参数`constant-expression`是一个常量表达式,第二个参数`string-literal`是一个提示字符串。如果第一个参数的值为false,会产生一条编译错误,第二个参数就是错误提示信息。 - -```c -static_assert(sizeof(int) == 4, "64-bit code generation is not supported."); -``` - -上面代码的意思是,如果当前计算机的`int`类型不等于4个字节,就会编译报错。 - -注意,`static_assert()`只在编译阶段运行,无法获得变量的值。如果对变量进行静态断言,就会导致编译错误。 - -```c -int positive(const int n) { - static_assert(n > 0, "value must > 0"); - return 0; -} -``` - -上面代码会导致编译报错,因为编译时无法知道变量`n`的值。 - -`static_assert()`的好处是,尽量在编译阶段发现错误,避免运行时再报错,节省开发时间。另外,有些`assert()`断言位于函数之中,如果不执行该函数,就不会报错,而`static_assert()`不管函数是否执行,都会进行断言判断。最后,`static_assert()`不会生成可执行代码,所以不会造成任何运行时的性能损失。 diff --git a/wiki/programming-language/C/lib 标准库/ctype.h.md b/wiki/programming-language/C/lib 标准库/ctype.h.md deleted file mode 100644 index 3be59814..00000000 --- a/wiki/programming-language/C/lib 标准库/ctype.h.md +++ /dev/null @@ -1,56 +0,0 @@ -# ctype.h - -`ctype.h`头文件定义了一系列字符处理函数的原型。 - -## 字符测试函数 - -这些函数用来判断字符是否属于某种类型。 - -- `isalnum()`:是否为字母数字 -- `isalpha()`:是否为字母 -- `isdigit()`:是否为数字 -- `isxdigit()`:是否为十六进制数字符 -- `islower()`:是否为小写字母 -- `isupper()`:是否为大写字母 -- `isblank()`:是否为标准的空白字符(包含空格、水平制表符或换行符) -- `isspace()`:是否为空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符等) -- `iscntrl()`:是否为控制字符,比如 Ctrl + B -- `isprint()`:是否为可打印字符 -- `isgraph()`:是否为空格以外的任意可打印字符 -- `ispunct()`:是否为标点符号(除了空格、字母、数字以外的可打印字符) - -它们接受一个待测试的字符作为参数。注意,参数类型为`int`,而不是`char`,因为它们允许 EOF 作为参数。 - -如果参数字符属于指定类型,就返回一个非零整数(通常是`1`,表示为真),否则返回`0`(表示为伪)。 - -下面是一个例子,用户输入一个字符,程序判断是否为英文字母。 - -```c -#include -#include - -int main(void) { - char ch = getchar(); - - if (isalpha(ch)) - printf("it is an alpha character.\n"); - else - printf("it is not an alpha character.\n"); - - return 0; -} -``` - -## 字符映射函数 - -这一类函数返回字符的某种对应形式,主要有两个函数。 - -- `tolower()`:如果参数是大写字符,返回小写字符,否则返回原始参数。 -- `toupper()`:如果参数是小写字符,返回大写字符,否则返回原始参数。 - -```c -// 将字符转为大写 -ch = toupper(ch); -``` - -注意,这两个函数不会改变原始字符。 diff --git a/wiki/programming-language/C/lib 标准库/errno.h.md b/wiki/programming-language/C/lib 标准库/errno.h.md deleted file mode 100644 index 045cafbf..00000000 --- a/wiki/programming-language/C/lib 标准库/errno.h.md +++ /dev/null @@ -1,34 +0,0 @@ -# errno.h - -## errno 变量 - -`errno.h`声明了一个 int 类型的 errno 变量,用来存储错误码(正整数)。 - -如果这个变量有非零值,表示已经执行的程序发生了错误。 - -```c -int x = -1; - -errno = 0; - -int y = sqrt(x); - -if (errno != 0) { - fprintf(stderr, "sqrt error; program terminated.\n"); - exit(EXIT_FAILURE); -} -``` - -上面示例中,计算一个负值的平方根是不允许的,会导致`errno`不等于`0`。 - -如果要检查某个函数是否发生错误,必须在即将调用该函数之前,将`errno`的值置为0,防止其他函数改变`errno`的值。 - -## 宏 - -变量`errno`的值通常是两个宏`EDOM`或`ERANGE`。这两个宏都定义在`errno.h`。它们表示调用数学函数时,可能发生的两种错误。 - -- 定义域错误(EDOM):传递给函数的一个参数超出了函数的定义域。例如,负数传入`sqrt()`作为参数。 -- 取值范围错误(ERANGE):函数的返回值太大,无法用返回类型表示。例如,1000 传入`exp()`作为参数,因为 e^1000 太大,无法使用 double 类型表示。 - -使用数学函数时,可以将`errno`的值与 EDOM 和 ERANGE 比较,用来确定到底发生了哪一类错误。 - diff --git a/wiki/programming-language/C/lib 标准库/float.h.md b/wiki/programming-language/C/lib 标准库/float.h.md deleted file mode 100644 index bf5deae4..00000000 --- a/wiki/programming-language/C/lib 标准库/float.h.md +++ /dev/null @@ -1,88 +0,0 @@ -# float.h - -`float.h`定义了浮点数类型 float、double、long double 的一些宏,规定了这些类型的范围和精度。 - -(1) `FLT_ROUNDS` - -宏`FLT_ROUNDS`表示当前浮点数加法的四舍五入方向。 - -它有以下可能的值。 - -- -1:不确定。 -- 0:向零舍入。 -- 1:向最近的整数舍入。 -- 2:向正无穷方向舍入。 -- 3:向负无穷方向舍入。 - -(2)`FLT_RADIX` - -宏`FLT_RADIX`表示科学计数法的指数部分的底(base),一般总是2。 - -(3)浮点数类型的最大值 - -- `FLT_MAX` -- `DBL_MAX` -- `LDBL_MAX` - -(4)浮点数类型的最小正值 - -- `FLT_MIN` -- `DBL_MIN` -- `LDBL_MIN` - -(5)两个同类型浮点数之间可表示的最小差值(最小精度) - -- `FLT_EPSILON` -- `DBL_EPSILON` -- `LDBL_EPSILON` - -(6)`DECIMAL_DIG` - -宏`DECIMAL_DIG`表示十进制有效位数。 - -(7)`FLT_EVAL_METHOD` - -宏`FLT_EVAL_METHOD`表示浮点数运算时的类型转换。 - -它可能有以下值。 - -- -1:不确定。 -- 0:在当前类型中运算。 -- 1:float 和 double 类型的运算使用 double 类型的范围和精度求值。 -- 2:所有浮点数类型的运算使用 long double 类型的范围和精度求值。 - -(8)浮点数尾数部分的个数 - -- `FLT_MANT_DIG` -- `DBL_MANT_DIG` -- `LDBL_MANT_DIG` - -(9)浮点数指数部分有效数字的个数(十进制) - -- `FLT_DIG` -- `DBL_DIG` -- `LDBL_DIG` - -(10)科学计数法的指数部分的最小次幂(负数) - -- `FLT_MIN_EXP` -- `DBL_MIN_EXP` -- `LDBL_MIN_EXP` - -(11)科学计数法的指数部分的十进制最小次幂(负数) - -- `FLT_MIN_10_EXP` -- `DBL_MIN_10_EXP` -- `LDBL_MIN_10_EXP` - -(12)科学计数法的指数部分的最大次幂 - -- `FLT_MAX_EXP` -- `DBL_MAX_EXP` -- `LDBL_MAX_EXP` - -(13)科学计数法的指数部分的十进制最大次幂 - -- `FLT_MAX_10_EXP` -- `DBL_MAX_10_EXP` -- `LDBL_MAX_10_EXP` diff --git a/wiki/programming-language/C/lib 标准库/inttypes.h.md b/wiki/programming-language/C/lib 标准库/inttypes.h.md deleted file mode 100644 index 8190f273..00000000 --- a/wiki/programming-language/C/lib 标准库/inttypes.h.md +++ /dev/null @@ -1,48 +0,0 @@ -# inttypes.h - -C 语言还在头文件 inttypes.h 里面,为 stdint.h 定义的四类整数类型,提供了`printf()`和`scanf()`的占位符。 - -- 固定宽度整数类型,比如 int8_t。 -- 最小宽度整数类型,比如 int_least8_t。 -- 最快最小宽度整数类型,比如 int_fast8_t。 -- 最大宽度整数类型,比如 intmax_t。 - -`printf()`的占位符采用`PRI + 原始占位符 + 类型关键字/宽度`的形式构成。举例来说,原始占位符为`%d`,则对应的占位符如下。 - -- PRIdn (固定宽度类型) -- PRIdLEASTn (最小宽度类型) -- PRIdFASTn (最快最小宽度类型) -- PRIdMAX (最大宽度类型) - -上面占位符中的`n`,可以用8、16、32、64代入。 - -下面是用法示例。 - -```c -#include -#include -#include - -int main(void) { - int_least16_t x = 3490; - printf("The value is %" PRIdLEAST16 "!\n", x); -} -``` - -上面示例中,`PRIdLEAST16`对应的整数类型为 int_least16_t,原始占位符为`%d`。另外,`printf()`的第一个参数用到了多个字符串自动合并的写法。 - -下面是其它的原始占位符对应的占位符。 - -- %i:PRIin PRIiLEASTn PRIiFASTn PRIiMAX -- %o:PRIon PRIoLEASTn PRIoFASTn PRIoMAX -- %u:PRIun PRIuLEASTn PRIuFASTn PRIuMAX -- %x:PRIxn PRIxLEASTn PRIxFASTn PRIxMAX -- %X:PRIXn PRIXLEASTn PRIXFASTn PRIXMAX - -`scanf()`的占位符规则也与之类似。 - -- %d:SCNdn SCNdLEASTn SCNdFASTn SCNdMAX -- %i:SCNin SCNiLEASTn SCNiFASTn SCNiMAX -- %o:SCNon SCNoLEASTn SCNoFASTn SCNoMAX -- %u:SCNun SCNuLEASTn SCNuFASTn SCNuMAX -- %x:SCNxn SCNxLEASTn SCNxFASTn SCNxMAX diff --git a/wiki/programming-language/C/lib 标准库/iso646.h.md b/wiki/programming-language/C/lib 标准库/iso646.h.md deleted file mode 100644 index 5b75e7c9..00000000 --- a/wiki/programming-language/C/lib 标准库/iso646.h.md +++ /dev/null @@ -1,23 +0,0 @@ -# iso646.h - -`iso646.h`头文件指定了一些常见运算符的替代拼写。比如,它用关键字`and`代替逻辑运算符`&&`。 - -```c -if (x > 6 and x < 12) -// 等同于 -if (x > 6 && x < 12) -``` - -它定义的替代拼写如下。 - -- and 替代 && -- and_eq 替代 &= -- bitand 替代 & -- bitor 替代 | -- compl 替代 ~ -- not 替代 ! -- not_eq 替代 != -- or 替代 || -- or_eq 替代 |= -- xor 替代 ^ -- xor_eq 替代 ^= diff --git a/wiki/programming-language/C/lib 标准库/limits.h.md b/wiki/programming-language/C/lib 标准库/limits.h.md deleted file mode 100644 index 55d0ff2b..00000000 --- a/wiki/programming-language/C/lib 标准库/limits.h.md +++ /dev/null @@ -1,45 +0,0 @@ -# limits.h - -`limits.h`提供了用来定义各种整数类型(包括字符类型)取值范围的宏。 - -- `CHAR_BIT`:每个字符包含的二进制位数。 -- `SCHAR_MIN`:signed char 类型的最小值。 -- `SCHAR_MAX`:signed char 类型的最大值。 -- `UCHAR_MAX`:unsiged char 类型的最大值。 -- `CHAR_MIN`:char 类型的最小值。 -- `CHAR_MAX`:char 类型的最大值。 -- `MB_LEN_MAX`:多字节字符最多包含的字节数。 -- `SHRT_MIN`:short int 类型的最小值。 -- `SHRT_MAX`:short int 类型的最大值。 -- `USHRT_MAX`:unsigned short int 类型的最大值。 -- `INT_MIN`:int 类型的最小值。 -- `INT_MAX`:int 类型的最大值。 -- `UINT_MAX`:unsigned int 类型的最大值。 -- `LONG_MIN`:long int 类型的最小值。 -- `LONG_MAX`:long int 类型的最大值。 -- `ULONG_MAX`:unsigned long int 类型的最大值。 -- `LLONG_MIN`:long long int 类型的最小值。 -- `LLONG_MAX`:long long int 类型的最大值。 -- `ULLONG_MAX`:unsigned long long int 类型的最大值。 - -下面的示例是使用预处理指令判断,int 类型是否可以用来存储大于 100000 的数。 - -```c -#if INT_MAX < 100000 - #error int type is too small -#endif -``` - -上面示例中,如果 int 类型太小,预处理器会显示一条出错消息。 - -可以使用`limit.h`里面的宏,为类型别名选择正确的底层类型。 - -```c -#if INT_MAX >= 100000 - typedef int Quantity; -#else - typedef long int Quantity; -#endif -``` - -上面示例中,如果整数类型的最大值(`INT_MAX`)不小于100000,那么类型别名`Quantity`指向`int`,否则就指向`long int`。 diff --git a/wiki/programming-language/C/lib 标准库/locale.h.md b/wiki/programming-language/C/lib 标准库/locale.h.md deleted file mode 100644 index 63ac94eb..00000000 --- a/wiki/programming-language/C/lib 标准库/locale.h.md +++ /dev/null @@ -1,142 +0,0 @@ -# locale.h - -## 简介 - -`locale.h`是程序的本地化设置,主要影响以下的行为。 - -- 数字格式 -- 货币格式 -- 字符集 -- 日期和时间格式 - -它设置了以下几个宏。 - -- LC_COLLATE:影响字符串比较函数`strcoll()`和`strxfrm()`。 -- LC_CTYPE:影响字符处理函数的行为。 -- LC_MONETARY:影响货币格式。 -- LC_NUMERIC:影响`printf()`的数字格式。 -- LC_TIME:影响时间格式`strftime()`和`wcsftime()`。 -- LC_ALL:将以上所有类别设置为给定的语言环境。 - -## setlocale() - -`setlocale()`用来设置当前的地区。 - -```c -char* setlocal(int category, const char* locale); -``` - -它接受两个参数。第一个参数表示影响范围,如果值为前面五个表示类别的宏之一,则只影响该宏对应的类别,如果值为`LC_ALL`,则影响所有类别。第二个参数通常只为`"C"`(正常模式)或`""`(本地模式)。 - -任意程序开始时,都隐含下面的调用。 - -```c -setlocale(LC_ALL, "C"); -``` - -下面的语句将格式本地化。 - -```c -setlocale(LC_ALL, ""); -``` - -上面示例中,第二个参数为空字符,表示使用当前环境提供的本地化设置。 - -理论上,第二个参数也可以设为当前系统支持的某种格式。 - -```c -setlocale(LC_ALL, "en_US.UTF-8"); -``` - -但是这样的话,程序的可移植性就变差了,因为无法保证其他系统也会支持那种格式。所以,通常都将第二个参数设为空字符串,使用操作系统的当前设置。 - -`setlocale()`的返回值是一个字符串指针,表示已经设置好的格式。如果调用失败,则返回空指针 NULL。 - -`setlocale()`可以用来查询当前地区,这时第二个参数设为 NULL 就可以了。 - -```c -char *loc; - -loc = setlocale(LC_ALL, NULL); - -// 输出 Starting locale: C -printf("Starting locale: %s\n", loc); - -loc = setlocale(LC_ALL, ""); - -// 输出 Native locale: en_US.UTF-8 -printf("Native locale: %s\n", loc); -``` - -## localeconv() - -`localeconv()`用来获取当前格式的详细信息。 - -```c -struct lconv* localeconv(void); -``` - -该函数返回一个 Struct 结构指针,该结构里面包含了格式信息,它的主要属性如下。 - -- char* mon_decimal_point:货币的十进制小数点字符,比如`.`。 -- char* mon_thousands_sep:货币的千位分隔符,比如`,`。 -- char* mon_grouping:货币的分组描述符。 -- char* positive_sign:货币的正值符号,比如`+`或为空字符串。 -- char* negative_sign:货币的负值符号,比如`-`。 -- char* currency_symbol:货币符号,比如`$`。 -- char frac_digits:打印货币金额时,十进制小数点后面输出几位小数,比如设为`2`。 -- char p_cs_precedes:设为`1`时,货币符号`currency_symbol`出现在非负金额前面。设为`0`时,出现在后面。 -- char n_cs_precedes:设为`1`时,货币符号`currency_symbol`出现在负的货币金额前面。设为`0`时,出现在后面。 -- char p_sep_by_space:决定了非负的货币金额与货币符号之间的分隔字符。 -- char n_sep_by_space:决定了负的货币金额与货币符号之间的分隔字符。 -- char p_sign_posn:决定了非负值的正值符号的位置。 -- char n_sign_posn:决定了负值的负值符号的位置。 -- char* int_curr_symbol:货币的国际符号,比如`USD`。 -- char int_frac_digits:使用国际符号时,`frac_digits`的值。 -- char int_p_cs_precedes:使用国际符号时,`p_cs_precedes`的值。 -- char int_n_cs_precedes:使用国际符号时,`n_cs_precedes`的值。 -- char int_p_sep_by_space:使用国际符号时,`p_sep_by_space`的值。 -- char int_n_sep_by_space:使用国际符号时,`n_sep_by_space`的值。 -- char int_p_sign_posn:使用国际符号时,`p_sign_posn`的值。 -- char int_n_sign_posn:使用国际符号时,`n_sign_posn`的值。 - -下面程序打印当前系统的属性值。 - -```c -#include -#include -#include - -int main () -{ - setlocale (LC_ALL,"zh_CN"); - struct lconv * lc; - lc=localeconv(); - printf ("decimal_point: %s\n",lc->decimal_point); - printf ("thousands_sep: %s\n",lc->thousands_sep); - printf ("grouping: %s\n",lc->grouping); - printf ("int_curr_symbol: %s\n",lc->int_curr_symbol); - printf ("currency_symbol: %s\n",lc->currency_symbol); - printf ("mon_decimal_point: %s\n",lc->mon_decimal_point); - printf ("mon_thousands_sep: %s\n",lc->mon_thousands_sep); - printf ("mon_grouping: %s\n",lc->mon_grouping); - printf ("positive_sign: %s\n",lc->positive_sign); - printf ("negative_sign: %s\n",lc->negative_sign); - printf ("frac_digits: %d\n",lc->frac_digits); - printf ("p_cs_precedes: %d\n",lc->p_cs_precedes); - printf ("n_cs_precedes: %d\n",lc->n_cs_precedes); - printf ("p_sep_by_space: %d\n",lc->p_sep_by_space); - printf ("n_sep_by_space: %d\n",lc->n_sep_by_space); - printf ("p_sign_posn: %d\n",lc->p_sign_posn); - printf ("n_sign_posn: %d\n",lc->n_sign_posn); - printf ("int_frac_digits: %d\n",lc->int_frac_digits); - printf ("int_p_cs_precedes: %d\n",lc->int_p_cs_precedes); - printf ("int_n_cs_precedes: %d\n",lc->int_n_cs_precedes); - printf ("int_p_sep_by_space: %d\n",lc->int_p_sep_by_space); - printf ("int_n_sep_by_space: %d\n",lc->int_n_sep_by_space); - printf ("int_p_sign_posn: %d\n",lc->int_p_sign_posn); - printf ("int_n_sign_posn: %d\n",lc->int_n_sign_posn); - - return 0; -} -``` diff --git a/wiki/programming-language/C/lib 标准库/math.h.md b/wiki/programming-language/C/lib 标准库/math.h.md deleted file mode 100644 index e86e4551..00000000 --- a/wiki/programming-language/C/lib 标准库/math.h.md +++ /dev/null @@ -1,417 +0,0 @@ -# math.h - -`math.h`头文件提供了很多数学函数。 - -很多数学函数的返回值是 double 类型,但是同时提供 float 类型与 long double 类型的版本,比如`pow()`函数就还有`powf()`和`powl()`版本。 - -```c -double pow(double x, double y); -float powf(float x, float y); -long double powl(long double x, long double y); -``` - -为了简洁,下面就略去了函数的`f`后缀(float 类型)和`l`后缀(long double)版本。 - -## 类型和宏 - -math.h 新定义了两个类型别名。 - -- float_t:(当前系统)最有效执行 float 运算的类型,宽度至少与 float 一样。 -- double_t:(当前系统)最有效执行 double 运算的类型,宽度至少与 double 一样。 - -它们的具体类型可以通过宏`FLT_EVAL_METHOD`来了解。 - -| FLT_EVAL_METHOD 的值 | float_t 对应的类型 | double_t 对应的类型 | -|-----------------|--------------|--------------| -| 0 | float | double | -| 1 | double | double | -| 2 | long double | long double | -| 其他 | 由实现决定 | 由实现决定 | - -math.h 还定义了一些宏。 - -- `INFINITY`:表示正无穷,返回一个 float 类型的值。 -- `NAN`:表示非数字(Not-A-Number),返回一个 float 类型的值。 - -## 错误类型 - -数学函数的报错有以下类型。 - -- Range errors:运算结果不能用函数返回类型表示。 -- Domain errors:函数参数不适用当前函数。 -- Pole errors:参数导致函数的极限值变成无限。 -- Overflow errors:运算结果太大,导致溢出。 -- Underflow errors:运算结果太小,导致溢出。 - -变量`math_errhandling`提示了当前系统如何处理数学运算错误。 - -| math_errhandling 的值 | 描述 | -|-----------------------|-----| -| MATH_ERRNO | 系统使用 errno 表示数学错误 | -| MATH_ERREXCEPT | 系统使用异常表示数学错误 | -| MATH_ERREXCEPT | 系统同时使用两者表示数学错误 | - -## 数值类型 - -数学函数的参数可以分成以下几类:正常值,无限值,有限值和非数字。 - -下面的函数用来判断一个值的类型。 - -- fpclassify():返回给定浮点数的分类。 -- isfinite():如果参数不是无限或 NaN,则为真。 -- isinf():如果参数是无限的,则为真。 -- isnan():如果参数不是数字,则为真。 -- isnormal():如果参数是正常数字,则为真。 - -下面是一个例子。 - -```c -isfinite(1.23) // 1 -isinf(1/tan(0)) // 1 -isnan(sqrt(-1)) // 1 -isnormal(1e-310)) // 0 -``` - -## signbit() - -`signbit()`判断参数是否带有符号。如果参数为负值,则返回1,否则返回0。 - -```c -signbit(3490.0) // 0 -signbit(-37.0) // 1 -``` - -## 三角函数 - -以下是三角函数,参数为弧度值。 - -- acos():反余弦。 -- asin():反正弦。 -- atan():反正切 -- atan2():反正切。 -- cos():余弦。 -- sin():正弦。 -- tan():正切。 - -不要忘了,上面所有函数都有 float 版本(函数名加上 f 后缀)和 long double 版本(函数名加上 l 后缀)。 - -下面是一个例子。 - -```c -cos(PI/4) // 0.707107 -``` - -## 双曲函数 - -以下是双曲函数,参数都为浮点数。 - -- acosh():反双曲余弦。 -- asinh():反双曲正弦。 -- atanh():反双曲正切。 -- cosh():双曲余弦。 -- tanh():双曲正切。 -- sinh():双曲正弦。 - -## 指数函数和对数函数 - -以下是指数函数和对数函数,它们的返回值都是 double 类型。 - -- exp():计算欧拉数 e 的乘方,即 ex。 -- exp2():计算 2 的乘方,即 2x。 -- expm1():计算 ex - 1。 -- log():计算自然对数,`exp()`的逆运算。 -- log2():计算以2为底的对数。 -- log10():计算以10为底的对数。 -- logp1():计算一个数加 1 的自然对数,即`ln(x + 1)`。 -- logb():计算以宏`FLT_RADIX`(一般为2)为底的对数,但只返回整数部分。 - -下面是一些例子。 - -```c -exp(3.0) // 20.085500 -log(20.0855) // 3.000000 -log10(10000) // 3.000000 -``` - -如果结果值超出了 C 语言可以表示的最大值,函数将返回`HUGE_VAL`,它是一个在`math.h`中定义的 double 类型的值。 - -如果结果值太小,无法用 double 值表示,函数将返回0。以上这两种情况都属于出错。 - -## frexp() - -`frexp()`将参数分解成浮点数和指数部分(2为底数),比如 1234.56 可以写成 0.6028125 * 211,这个函数就能分解出 0.6028125 和 11。 - -```c -double frexp(double value, int* exp); -``` - -它接受两个参数,第一个参数是用来分解的浮点数,第二个参数是一个整数变量指针。 - -它返回小数部分,并将指数部分放入变量`exp`。如果参数为`0`,则返回的小数部分和指数部分都为`0`。 - -下面是一个例子。 - -```c -double frac; -int expt; - -// expt 的值是 11 -frac = frexp(1234.56, &expt); - -// 输出 1234.56 = 0.6028125 x 2^11 -printf("1234.56 = %.7f x 2^%d\n", frac, expt); -``` - -## ilogb() - -`ilogb()`返回一个浮点数的指数部分,指数的基数是宏`FLT_RADIX`(一般是`2`)。 - -```c -int ilogb(double x); -``` - -它的参数为`x`,返回值是 logr|x|,其中`r`为宏`FLT_RADIX`。 - -下面是用法示例。 - -```c -ilogb(257) // 8 -ilogb(256) // 8 -ilogb(255) // 7 -``` - -## ldexp() - -`ldexp()`将一个数乘以2的乘方。它可以看成是`frexp()`的逆运算,将小数部分和指数部分合成一个`f * 2^n`形式的浮点数。 - -```c -double ldexp(double x, int exp); -``` - -它接受两个参数,第一个参数是乘数`x`,第二个参数是2的指数部分`exp`,返回“x * 2exp”。 - -```c -ldexp(1, 10) // 1024.000000 -ldexp(3, 2) // 12.000000 -ldexp(0.75, 4) // 12.000000 -ldexp(0.5, -1) // 0.250000 -``` - -## modf() - -`modf()`函数提取一个数的整数部分和小数部分。 - -```c - double modf(double value, double* iptr); - ``` - -它接受两个参数,第一个参数`value`表示待分解的数值,第二个参数是浮点数变量`iptr`。返回值是`value`的小数部分,整数部分放入变量`double`。 - -下面是一个例子。 - -```c -// int_part 的值是 3.0 -modf(3.14159, &int_part); // 返回 0.14159 -``` - -## scalbn() - -`scalbn()`用来计算“x * rn”,其中`r`是宏`FLT_RADIX`。 - -```c -double scalbn(double x, int n); -``` - -它接受两个参数,第一个参数`x`是乘数部分,第二个参数`n`是指数部分,返回值是“x * rn”。 - -下面是一些例子。 - -```c -scalbn(2, 8) // 512.000000 -``` - -这个函数有多个版本。 - -- scalbn():指数 n 是 int 类型。 -- scalbnf():float 版本的 scalbn()。 -- scalbnl():long double 版本的 scalbn()。 -- scalbln():指数 n 是 long int 类型。 -- scalblnf():float 版本的 scalbln()。 -- scalblnl():long double 版本的 scalbln()。 - -## round() - -`round()`函数以传统方式进行四舍五入,比如`1.5`舍入到`2`,`-1.5`舍入到`-2`。 - -```c -double round(double x); -``` - -它返回一个浮点数。 - -下面是一些例子。 - -```c -round(3.14) // 3.000000 -round(3.5) // 4.000000 -round(-1.5) // -2.000000 -round(-1.14) // -1.000000 -``` - -它还有一些其他版本。 - -- lround():返回值是 long int 类型。 -- llround():返回值是 long long int 类型。 - -## trunc() - -`trunc()`用来截去一个浮点数的小数部分,将剩下的整数部分以浮点数的形式返回。 - -```c -double trunc(double x); -``` - -下面是一些例子。 - -```c -trunc(3.14) // 3.000000 -trunc(3.8) // 3.000000 -trunc(-1.5) // -1.000000 -trunc(-1.14) // -1.000000 -``` - -## ceil() - -`ceil()`返回不小于其参数的最小整数(double 类型),属于“向上舍入”。 - -```c -double ceil(double x); -``` - -下面是一些例子。 - -```c -ceil(7.1) // 8.0 -ceil(7.9) // 8.0 -ceil(-7.1) // -7.0 -ceil(-7.9) // -7.0 -``` - -## floor() - -`floor()`返回不大于其参数的最大整数,属于“向下舍入”。 - -```c -double floor(double x); -``` - -下面是一些例子。 - -```c -floor(7.1) // 7.0 -floor(7.9) // 7.0 -floor(-7.1) // -8.0 -floor(-7.9) // -8.0 -``` - -下面的函数可以实现“四舍五入”。 - -```c -double round_nearest(double x) { - return x < 0.0 ? ceil(x - 0.5) : floor(x + 0.5); -} -``` - -## fmod() - -`fmod()`返回第一个参数除以第二个参数的余数,就是余值运算符`%`的浮点数版本,因为`%`只能用于整数运算。 - -```c -double fmod(double x, double y); -``` - -它在幕后执行的计算是`x - trunc(x / y) * y`,返回值的符号与`x`的符号相同。 - -```c -fmod(5.5, 2.2) // 1.100000 -fmod(-9.2, 5.1) // -4.100000 -fmod(9.2, 5.1) // 4.100000 -``` - -## 浮点数比较函数 - -以下函数用于两个浮点数的比较,返回值的类型是整数。 - -- isgreater():返回`x > y`的结果。 -- isgreaterequal():返回`x >= y`的结果。 -- isless():返回`x < y`的结果。 -- islessequal():返回`x <= y`的结果。 -- islessgreater():返回`(x < y) || (x > y)`的结果。 - -下面是一些例子。 - -```c -isgreater(10.0, 3.0) // 1 -isgreaterequal(10.0, 10.0) // 1 -isless(10.0, 3.0) // 0 -islessequal(10.0, 3.0) // 0 -islessgreater(10.0, 3.0) // 1 -islessgreater(10.0, 30.0) // 1 -islessgreater(10.0, 10.0) // 0 -``` - -## isunordered() - -`isunordered()`返回两个参数之中,是否存在 NAN。 - -```c -int isunordered(any_floating_type x, any_floating_type y); -``` - -下面是一些例子。 - -```c -isunordered(1.0, 2.0) // 0 -isunordered(1.0, sqrt(-1)) // 1 -isunordered(NAN, 30.0) // 1 -isunordered(NAN, NAN) // 1 -``` - -## 其他函数 - -下面是 math.h 包含的其它函数。 - -- pow():计算参数`x`的`y`次方。 -- sqrt():计算一个数的平方根。 -- cbrt():计算立方根。 -- fabs():计算绝对值。 -- hypot():根据直角三角形的两条直角边,计算斜边。 -- fmax():返回两个参数之中的最大值。 -- fmin():返回两个参数之中的最小值。 -- remainder():返回 IEC 60559 标准的余数,类似于`fmod()`,但是余数范围是从`-y/2`到`y/2`,而不是从`0`到`y`。 -- remquo():同时返回余数和商,余数的计算方法与`remainder()`相同。 -- copysign():返回一个大小等于第一个参数、符号等于第二个参数的值。 -- nan():返回 NAN。 -- nextafter():获取下一个(或者上一个,具体方向取决于第二个参数`y`)当前系统可以表示的浮点值。 -- nextoward():与`nextafter()`相同,除了第二个参数是 long double 类型。 -- fdim():如果第一个参数减去第二个参数大于`0`,则返回差值,否则返回`0`。 -- fma():以快速计算的方式,返回`x * y + z`的结果。 -- nearbyint():在当前舍入方向上,舍入到最接近的整数。当前舍入方向可以使用`fesetround()`函数设定。 -- rint():在当前舍入方向上,舍入到最接近的整数,与`nearbyint()`相同。不同之处是,它会触发浮点数的`INEXACT`异常。 -- lrint():在当前舍入方向上,舍入到最接近的整数,与`rint()`相同。不同之处是,返回值是一个整数,而不是浮点数。 -- erf():计算一个值的误差函数。 -- erfc():计算一个值的互补误差函数。 -- tgamma():计算 Gamma 函数。 -- lgamma():计算 Gamma 函数绝对值的自然对数。 - -下面是一些例子。 - -```c -pow(3, 4) // 81.000000 -sqrt(3.0) // 1.73205 -cbrt(1729.03) // 12.002384 -fabs(-3490.0) // 3490.000000 -hypot(3, 4) // 5.000000 -fmax(3.0, 10.0) // 10.000000 -fmin(10.0, 3.0) // 3.000000 -``` diff --git a/wiki/programming-language/C/lib 标准库/signal.h.md b/wiki/programming-language/C/lib 标准库/signal.h.md deleted file mode 100644 index c9bf30d6..00000000 --- a/wiki/programming-language/C/lib 标准库/signal.h.md +++ /dev/null @@ -1,105 +0,0 @@ -# signal.h - -## 简介 - -`signal.h`提供了信号(即异常情况)的处理工具。所谓“信号”(signal),可以理解成系统与程序之间的短消息,主要用来表示运行时错误,或者发生了异常事件。 - -头文件`signal.h`定义了一系列宏,表示不同的信号。 - -- SIGABRT:异常中止(可能由于调用了 abort() 方法)。 -- SIGFPE:算术运算发生了错误(可能是除以 0 或者溢出)。 -- SIGILL:无效指令。 -- SIGINT:中断。 -- SIGSEGV:无效内存访问。 -- SIGTERM:终止请求。 - -上面每个宏的值都是一个正整数常量。 - -## signal() - -头文件`signal.h`还定义了一个`signal()`函数,用来指定某种信号的处理函数。 - -```c -signal(SIGINT, handler); -``` - -`signal()`接受两个参数,第一个参数是某种信号的宏,第二个参数是处理这个信号的函数指针`handler`。 - -信号处理函数`handler`接受一个 int 类型的参数,表示信号类型。它的原型如下。 - -```c -void (*func)(int); -``` - -`handler`函数体内部可以根据这个整数,判断到底接受到了哪种信号,因为多个信号可以共用同一个处理函数。一旦处理函数执行完成,程序会从信号发生点恢复执行。但是,如果遇到 SIGABRT 信号,处理函数执行完成,系统会让程序中止。 - -当系统向程序发送信号时,程序可以忽略信号,即不指定处理函数。 - -`signal()`的返回值是前一个处理函数的指针,常常把它保存在变量之中,当新的处理函数执行完,再恢复以前的处理函数。 - -```c -void (*orig_handler)(int); -orig_handler = signal(SIGINT, handler); -// SIGINT 信号发生之后 -signal(SIGINT, orig_handler); -``` - -上面示例中,`signal()`为信号`SIGINT`指定了新的处理函数`handler`,把原来的处理函数保存在变量`orig_handler`里面。等到`handler`这个函数用过之后,再恢复原来的处理函数。 - -## 信号相关的宏 - -`signal.h`还提供了信号相关的宏。 - -(1)SIG_DFL - -SIG_DFL 表示默认的处理函数。 - -```c -signal(SIGINT, SIG_DFL); -``` - -上面示例中,SIGINT 的处理函数是默认处理函数,由当前实现决定。 - -(2)SIG_IGN - -SIG_IGN 表示忽略该信号。 - -```c -signal(SIGINT, SIG_IGN); -``` - -上面示例表示不对 SIGINT 信号进行处理。由于程序运行时按下 Ctrl + c 是发出 SIGINT 信号,所以使用该语句后,程序无法用 Ctrl + c 终止。 - -(3)SIG_ERR - -SIG_ERR 是信号处理函数发生错误时,`signal()`的返回值。 - -```c -if (signal(SIGINT, handler) == SIG_ERR) { - perror("signal(SIGINT, handler) failed"); - // ... -} -``` - -上面示例可以判断`handler`处理 SIGINT 时,是否发生错误。 - -## raise() - -`raise()`函数用来在程序中发出信号。 - -```c -int raise(int sig); -``` - -它接受一个信号值作为参数,表示发出该信号。它的返回值是一个整数,可以用来判断信号发出是否成功,0 表示成功,非 0 表示失败。 - -```c -void handler(int sig) { - printf("Handler called for signal %d\n", sig); -} - -signal(SIGINT, handler); -raise(SIGINT); -``` - -上面示例中,`raise()`触发 SIGINT 信号,导致 handler 函数执行。 diff --git a/wiki/programming-language/C/lib 标准库/stdarg.h.md b/wiki/programming-language/C/lib 标准库/stdarg.h.md deleted file mode 100644 index ca4d2814..00000000 --- a/wiki/programming-language/C/lib 标准库/stdarg.h.md +++ /dev/null @@ -1,47 +0,0 @@ -# stdarg.h - -`stdarg.h`定义于函数的可变参数相关的一些方法。 - -- va_list 类型 -- va_start() -- va_arg():获取当前参数 -- va_end()。 - -va_copy():it makes a copy of your va_list variable in the exact same state. -va_copy() can be useful if you need to scan ahead through the arguments but need to also remember your current place. - -接受可变函数作为参数的一些方法。 - -- vprintf() -- vfprintf() -- vsprintf() -- vsnprintf() - -```c -#include -#include - -int my_printf(int serial, const char *format, ...) -{ - va_list va; - - // Do my custom work - printf("The serial number is: %d\n", serial); - - // Then pass the rest off to vprintf() - va_start(va, format); - int rv = vprintf(format, va); - va_end(va); - - return rv; -} - -int main(void) -{ - int x = 10; - float y = 3.2; - - my_printf(3490, "x is %d, y is %f\n", x, y); -} -``` - diff --git a/wiki/programming-language/C/lib 标准库/stdbool.h.md b/wiki/programming-language/C/lib 标准库/stdbool.h.md deleted file mode 100644 index d28b8a3f..00000000 --- a/wiki/programming-language/C/lib 标准库/stdbool.h.md +++ /dev/null @@ -1,43 +0,0 @@ -# stdbool.h - -`stdbool.h`头文件定义了4个宏。 - -- `bool`:定义为`_Bool`。 -- `true`:定义为1。 -- `false`:定义为0。 -- `__bool_true_false_are_defined`:定义为1。 - -```c -bool isEven(int number) { - if (number % 2) { - return true; - } else { - return false; - } -} -``` - -```c -#include -#include - -int main(void) { - unsigned long num; - unsigned long div; - bool isPrime = true; - - num = 64457; - - for (div = 2; (div * div) <= num; div++) { - if (num % div == 0) isPrime = false; - } - - if (isPrime) { - printf("%lu is prime.\n", num); - } else { - printf("%lu is not prime.\n", num); - } - - return 0; -} -``` diff --git a/wiki/programming-language/C/lib 标准库/stddef.h.md b/wiki/programming-language/C/lib 标准库/stddef.h.md deleted file mode 100644 index 2f4003e8..00000000 --- a/wiki/programming-language/C/lib 标准库/stddef.h.md +++ /dev/null @@ -1,39 +0,0 @@ -# stddef.h - -`stddef.h`提供了常用类型和宏的定义,但没有声明任何函数。 - -这个头文件定义的类型如下。 - -- ptrdiff_t:指针相减运算时,返回结果的数据类型。 -- size_t:`sizeof`运算符返回的类型。 -- wchar_t:一种足够大、能容纳各种字符的类型。 - -以上三个类型都是整数类型,其中`ptrdiff_t`是有符号整数,`size_t`是无符号整数。 - -`stddef.h`定义了两个宏。 - -- NULL:空指针。 -- offsetof() - -## offsetof() - -`offsetof()`是`stddef.h`定义的一个宏,用来返回某个属性在 Struct 结构内部的起始位置。由于系统为了字节对齐,可能会在 Struct 结构的属性之间插入空字节,这个宏对于确定某个属性的内存位置很有用。 - -它是一个带参数的宏,接受两个参数。第一个参数是 Struct 结构,第二个参数是该结构的一个属性,返回 Struct 起始位置到该属性之间的字节数。 - -```c -struct s { - char a; - int b[2]; - float c; -}; - -printf("%zu\n", offsetof(struct s, a)); // 0 -printf("%zu\n", offsetof(struct s, b)); // 4 -printf("%zu\n", offsetof(struct s, c)); // 12 -``` - -对于上面这个 Struct 结构,`offsetof(struct s, a)`一定等于`0`,因为`a`属性是第一个属性,与 Struct 结构自身的地址相同。 - -系统为了字节对齐,在`a`属性后面分配了3个空字节,导致`b`属性存储在第4个字节,所以`offsetof(struct s, b)`和`offsetof(struct s, c)`分别是4和12。 - diff --git a/wiki/programming-language/C/lib 标准库/stdint.h.md b/wiki/programming-language/C/lib 标准库/stdint.h.md deleted file mode 100644 index 16bc9906..00000000 --- a/wiki/programming-language/C/lib 标准库/stdint.h.md +++ /dev/null @@ -1,76 +0,0 @@ -# stdint.h - -## 固定宽度的整数类型 - -stdint.h 定义了一些固定宽度的整数类型别名,主要有下面三类。 - -- 宽度完全确定的整数`intN_t`,比如`int32_t`。 -- 宽度不小于某个大小的整数`int_leastN_t`,比如`int_least8_t`。 -- 宽度不小于某个大小、并且处理速度尽可能快的整数`int_fastN_t`,比如`int_fast64_t`。 - -上面所有类型都是有符号的,类型名前面可以加一个前缀`u`,表示无符号类型,比如`uint16_t`。 - -C 语言标准要求定义以下类型。 - -- int8_t(可选) uint8_t(可选) -- int16_t(可选) uint16_t(可选) -- int32_t(可选) uint32_t(可选) -- int64_t(可选) uint64_t(可选) -- int_least8_t uint_least8_t -- int_least16_t uint_least16_t -- int_least32_t uint_least32_t -- int_least64_t uint_least64_t -- int_fast8_t uint_fast8_t -- int_fast16_t uint_fast16_t -- int_fast32_t uint_fast32_t -- int_fast64_t uint_fast64_t - -## 最大宽度的整数类型 - -以下两个类型表示当前系统可用的最大宽度整数。 - -- intmax_t -- uintmax_t - -如果想要尽可能大的整数时,可以使用上面类型。 - -## 固定宽度的整数常量 - -以下一些带参数的宏,可以生成固定宽度的整数常量。 - -- INT8_C(x) UINT8_C(x) -- INT16_C(x) UINT16_C(x) -- INT32_C(x) UINT32_C(x) -- INT64_C(x) UINT64_C(x) -- INTMAX_C(x) UINTMAX_C(x) - -下面是用法示例。 - -```c -uint16_t x = UINT16_C(12); -intmax_t y = INTMAX_C(3490); -``` - -## 固定宽度的整数极限值 - -下面一些宏代表了固定宽度的整数最大值和最小值。 - -- INT8_MAX INT8_MIN UINT8_MAX -- INT16_MAX INT16_MIN UINT16_MAX -- INT32_MAX INT32_MIN UINT32_MAX -- INT64_MAX INT64_MIN UINT64_MAX -- INT_LEAST8_MAX INT_LEAST8_MIN UINT_LEAST8_MAX -- INT_LEAST16_MAX INT_LEAST16_MIN UINT_LEAST16_MAX -- INT_LEAST32_MAX INT_LEAST32_MIN UINT_LEAST32_MAX -- INT_LEAST64_MAX INT_LEAST64_MIN UINT_LEAST64_MAX -- INT_FAST8_MAX INT_FAST8_MIN UINT_FAST8_MAX -- INT_FAST16_MAX INT_FAST16_MIN UINT_FAST16_MAX -- INT_FAST32_MAX INT_FAST32_MIN UINT_FAST32_MAX -- INT_FAST64_MAX INT_FAST64_MIN UINT_FAST64_MAX -- INTMAX_MAX INTMAX_MIN UINTMAX_MAX - -注意,所有无符号整数类型的最小值都为0,所以没有对应的宏。 - -## 占位符 - -C 语言还在头文件 inttypes.h 里面,为上面类型定义了`printf()`和`scanf()`的占位符,参见《inttypes.h》一章。 diff --git a/wiki/programming-language/C/lib 标准库/stdio.h.md b/wiki/programming-language/C/lib 标准库/stdio.h.md deleted file mode 100644 index ff2d9998..00000000 --- a/wiki/programming-language/C/lib 标准库/stdio.h.md +++ /dev/null @@ -1,390 +0,0 @@ -# stdio.h - -`stdio.h`是 C 语言的标准 I/O 库,用于读取和写入文件,也用于控制台的输入和输出。 - -## 标准 I/O 函数 - -以下函数用于控制台的输入和输出。 - -- printf():输出到控制台,详见《基本语法》一章。 -- scanf():从控制台读取输入,详见《I/O 函数》一章。 -- getchar():从控制台读取一个字符,详见《I/O 函数》一章。 -- putchar():向控制台写入一个字符,详见《I/O 函数》一章。 -- gets():从控制台读取整行输入(已废除),详见《I/O 函数》一章。 -- puts():向控制台写入一个字符串,详见《I/O 函数》一章。 - -## 文件操作函数 - -以下函数用于文件操作,详见《文件操作》一章。 - -- fopen():打开文件。 -- fclose():关闭文件。 -- freopen():打开一个新文件,关联一个已经打开的文件指针。 -- fprintf():输出到文件。 -- fscanf():从文件读取数据。 -- getc():从文件读取一个字符。 -- fgetc():从文件读取一个字符。 -- putc():向文件写入一个字符。 -- fputc():向文件写入一个字符。 -- fgets():从文件读取整行。 -- fputs():向文件写入字符串。 -- fread():从文件读取二进制数据。 -- fwrite():向文件写入二进制数据。 -- fseek():将文件内部指针移到指定位置。 -- ftell():获取文件内部指针的当前位置。 -- rewind():将文件内部指针重置到文件开始处。 -- fgetpos():获取文件内部指针的当前位置。 -- fsetpos():设置文件内部指针的当前位置。 -- feof():判断文件内部指针是否指向文件结尾。 -- ferror():返回文件错误指示器的状态。 -- clearerr():重置文件错误指示器。 -- remove():删除文件。 -- rename():文件改名,以及移动文件。 - -## 字符串操作函数 - -以下函数用于操作字符串,详见《字符串操作》一章。 - -- sscanf():从字符串读取数据,详见《I/O 函数》一章。 -- sprintf():输出到字符串。 -- snprintf():输出到字符串的更安全版本,指定了输出字符串的数量。 - -## tmpfile() - -`tmpfile()`函数创建一个临时文件,该文件只在程序运行期间存在,除非手动关闭它。它的原型如下。 - -```c -FILE* tmpfile(void); -``` - -`tmpfile()`返回一个文件指针,可以用于访问该函数创建的临时文件。如果创建失败,返回一个空指针 NULL。 - -```c -FILE* tempptr; -tempptr = tmpfile(); -``` - -调用`close()`方法关闭临时文件后,该文件将被自动删除。 - -`tmpfile()`有两个缺点。一是无法知道临时文件的文件名,二是无法让该文件成为永久文件。 - -## tmpnam() - -`tmpname()`函数为临时文件生成一个名字,确保不会与其他文件重名。它的原型如下。 - -```c -char* tmpname(char* s); -``` - -它的参数是一个字符串变量,`tmpnam()`会把临时文件的文件名复制到这个变量里面,并返回指向该字符串变量的指针。如果生成文件名失败,`tmpnam()`返回空指针 NULL。 - -```c -char filename[L_tmpname]; - -if (tmpnam(filename) != NULL) - // 输出诸如 /tmp/filew9PMuZ 的文件名 - printf("%s\n", filename); -else - printf("Something wrong!\n"); -``` - -上面示例中,`L_tmpname`是`stdio.h`定义的一个宏,指定了临时文件的文件名长度。 - -`tmpname()`的参数也可以是一个空指针 NULL,同样返回指向文件名字符串的指针。 - -```c -char* filename; -filename = tmpnam(NULL); -``` - -上面示例中,变量`filename`就是`tmpnam()`生成的文件名。 - -该函数只是生成一个文件名,稍后可以使用`fopen()`打开该文件并使用它。 - -## fflush() - -`fflush()`用于清空缓存区。它接受一个文件指针作为参数,将缓存区内容写入该文件。 - -```c -fflush(fp); -``` - -如果不需要保存缓存区内容,则可以传入空指针 NULL。 - -```c -fflush(NULL); -``` - -如果清空成功,`fflush()`返回0,否则返回 EOF。 - -注意,`fflush()`一般只用来清空输出缓存区(比如写文件)。如果使用它来清空输入缓存区(比如读文件),属于未定义行为。 - -`fflush()`的一个用途是不等回车键,就强迫输出缓存区。大多数系统都是行缓存,这意味着只有遇到回车键(或者缓存区满了,或者文件读到结尾),缓存区的内容才会输出,`fflush()`可以不等回车键,立即输出。 - -```c -for (int i = 9; i >= 0; i--) { - printf("\r%d", i); - fflush(stdout); - sleep(1); -} -``` - -上面示例是一个倒计时效果,`\r`是回车键,表示每轮循环都会回到当前行的行首,等于删除上一轮循环的输出。`fflush(stdout)`表示立即将缓存输出到显示器,这一行是必需的,否则由于上一行的输出没有回车键,不会触发缓存输出,屏幕上不会显示任何内容,只会等到程序运行结束再一次性输出。 - -## setvbuf() - -`setvbuf()`函数用于定义某个字节流应该如何缓存。它可以接受四个参数。 - -```c -int setvbuf(FILE* stream, char* buffer, int mode, size_t size) -``` - -第一个参数`stream`是文件流。 - -第二个参数`buffer`是缓存区的地址。 - -第三个参数`mode`指定缓存的行为模式,它是下面三个宏之一,这些宏都定义在`stdio.h`。 - -- `_IOFBF`:满缓存。当缓存为空时,才从流读入数据;当缓存满了,才向流写入数据。一般情况下,这是默认设置。 -- `_IOLBF`:行缓存。每次从流读入一行数据,或向流写入一行数据,即以行为单位读写缓存。 -- `_IONBF`:无缓存。不使用缓存区,直接读写设备。 - -第四个参数`size`指定缓存区的大小。较大的缓存区提供更好的性能,而较小的缓存区可以节省空间。`stdio.h`提供了一个宏`BUFSIZ`,表示系统默认的缓存区大小。 - -它的意义在于,使得用户可以在打开一个文件之前,定义自己的文件缓冲区,而不必使用`fopen()`函数打开文件时设定的默认缓冲区。 - -```c -char buffer[N]; - -setvbuf(stream, buffer, _IOFBF, N); -``` - -上面示例设置文件流`stream`的缓存区从地址`buffer`开始,大小为`N`,模式为`_IOFBF`。 - -`setvbuf()`的第二个参数可以为空指针 NULL。这样的话,`setvbuf()`会自己创建一个缓存区。 - -注意,`setvbuf()`的调用必须在对文件流执行任何操作之前。 - -如果调用成功,`setvbuf()`的返回值为`0`,否则返回非零值。 - -下面的例子是将缓存区调整为行缓存。 - -```c -FILE *fp; -char lineBuf[1024]; - -fp = fopen("somefile.txt", "r"); -setvbuf(fp, lineBuf, _IOLBF, 1024); -``` - -## setbuf() - -`setbuf()`是`setvbuf()`的早期版本,可以视为后者的简化版本,也用来定义某个字节流的缓存区。 - -```c -void setbuf(FILE* stream, char* buffer); -``` - -它的第一个参数`stream`是文件流,第二个参数`buffer`是缓存区的地址。 - -它总是可以改写成`setvbuf()`。 - -```c -char buffer[BUFSIZ]; - -setbuf(stream, buffer); - -// 等同于 -setvbuf(stream, buffer, _IOFBF, BUFSIZ); -``` - -上面示例中,`BUFSIZ`是`stdio.h`定义的宏,表示系统默认的缓存区大小。 - -`setbuf()`函数没有返回值。 - -`setbuf()`的第二个参数如果设置为 NULL,表示不进行缓存。 - -```c -setbuf(stdout, NULL); - -// 等同于 -setvbuf(stdout, NULL, _IONBF, 0); -``` - -## ungetc() - -`ungetc()`将从缓存里面读取的上一个字符,重新放回缓存,下一个读取缓存的操作会从这个字符开始。有些操作需要了解下一个字符是什么,再决定应该怎么处理,这时这个函数就很有用。 - -它的原型如下。 - -```c -int ungetc(int c, FILE *stream); -``` - -它的第一个参数是一个字符变量,第二个参数是一个打开的文件流。它的返回值是放回缓存的那个字符,操作失败时,返回 EOF。 - -```c -int ch = fgetc(fp); - -if (isdigit(ch)) { - ch = fgetc(fp); -} - -ungetc(ch, fp); -``` - -上面示例中,如果读取的字符不是数字,就将其放回缓存。 - -## perror() - -`perror()`用于在 stderr 的错误信息之前,添加一个自定义字符串。 - -```c -void perror(const char *s); -``` - -该函数的参数就是在报错信息前添加的字符串。它没有返回值。 - -```c -#include -#include -#include -#include - -int main(void) { - int x = -1; - - errno = 0; - float y = sqrt(x); - if (errno != 0) { - perror("sqrt error"); - exit(EXIT_FAILURE); - } -} -``` - -上面示例中,求`-1`的平方根,导致报错。头文件`errno.h`提供宏`errno`,只要上一步操作出错,这个宏就会设置成非零值。`perror()`用来在报错信息前,加上`sqrt error`的自定义字符串。 - -执行上面的程序,就会得到下面的报错信息。 - -```bash -$ gcc test.c -lm -$ ./a.out -sqrt error: Numerical argument out of domain -``` - -## 可变参数操作函数 - -(1)输出函数 - -下面是`printf()`的变体函数,用于按照给定格式,输出函数的可变参数列表(va_list)。 - -- vprintf():按照给定格式,输出到控制台,默认是显示器。 -- vfprintf():按照给定格式,输出到文件。 -- vsprintf():按照给定格式,输出到字符串。 -- vsnprintf():按照给定格式,输出到字符串的安全版本。 - -它们的原型如下,基本与对应的`printf()`系列函数一致,除了最后一个参数是可变参数对象。 - -```c -#include -#include - -int vprintf( - const char * restrict format, - va_list arg -); - -int vfprintf( - FILE * restrict stream, - const char * restrict format, - va_list arg -); - -int vsprintf( - char * restrict s, - const char * restrict format, - va_list arg -); - -int vsnprintf( - char * restrict s, - size_t n, - const char * restrict format, - va_list arg -); -``` - -它们的返回值都为输出的字符数,如果出错,返回负值。 - -`vsprintf()`和`vsnprintf()`的第一个参数可以为 NULL,用来查看多少个字符会被写入。 - -下面是一个例子。 - -```c -int logger(char *format, ...) { - va_list va; - va_start(va, format); - int result = vprintf(format, va); - va_end(va); - - printf("\n"); - - return result; -} - -// 输出 x = 12 and y = 3.20 -logger("x = %d and y = %.2f", x, y); -``` - -(2)输入函数 - -下面是`scanf()`的变体函数,用于按照给定格式,输入可变参数列表 (va_list)。 - -- vscanf():按照给定格式,从控制台读取(默认为键盘)。 -- vfscanf():按照给定格式,从文件读取。 -- vsscanf():按照给定格式,从字符串读取。 - -它们的原型如下,跟对应的`scanf()`函数基本一致,除了最后一个参数是可变参数对象。 - -```c -#include -#include - -int vscanf( - const char * restrict format, - va_list arg -); - -int vfscanf( - FILE * restrict stream, - const char * restrict format, - va_list arg -); - -int vsscanf( - const char * restrict s, - const char * restrict format, - va_list arg -); -``` - -它们返回成功读取的项数,遇到文件结尾或错误,则返回 EOF。 - -下面是一个例子。 - -```c -int error_check_scanf(int expected_count, char *format, ...) { - va_list va; - - va_start(va, format); - int count = vscanf(format, va); - va_end(va); - - assert(count == expected_count); - - return count; -} - -error_check_scanf(3, "%d, %d/%f", &a, &b, &c); -``` diff --git a/wiki/programming-language/C/lib 标准库/stdlib.h.md b/wiki/programming-language/C/lib 标准库/stdlib.h.md deleted file mode 100644 index 1a21987e..00000000 --- a/wiki/programming-language/C/lib 标准库/stdlib.h.md +++ /dev/null @@ -1,632 +0,0 @@ -# stdlib.h - -## 类型别名和宏 - -stdlib.h 定义了下面的类型别名。 - -- size_t:sizeof 的返回类型。 -- wchar_t:宽字符类型。 - -stdlib.h 定义了下面的宏。 - -- NULL:空指针。 -- EXIT_SUCCESS:函数运行成功时的退出状态。 -- EXIT_FAILURE:函数运行错误时的退出状态。 -- RAND_MAX:rand() 函数可以返回的最大值。 -- MB_CUR_MAX:当前语言环境中,多字节字符占用的最大字节数。 - -## abs(),labs(),llabs() - -这三个函数用于计算整数的绝对值。`abs()`用于 int 类型,`labs()`用于 long int 类型,`llabs()`用于 long long int 类型。 - -```c -int abs(int j); -long int labs(long int j); -long long int llabs(long long int j); -``` - -下面是用法示例。 - -```c -// 输出 |-2| = 2 -printf("|-2| = %d\n", abs(-2)); - -// 输出 |4| = 4 -printf("|4| = %d\n", abs(4)); -``` - -## div(),ldiv(),lldiv() - -这三个函数用来计算两个参数的商和余数。`div()`用于 int 类型的相除,`ldiv()`用于 long int 类型的相除,`lldiv()`用于 long long int 类型的相除。 - -```c -div_t div(int numer, int denom); -ldiv_t ldiv(long int numer, long int denom); -lldiv_t lldiv(long long int numer, long long int denom); -``` - -这些函数把第2个参数(分母)除以第1个参数(分子),产生商和余数。这两个值通过一个数据结构返回,`div()`返回 div_t 结构,`ldiv()`返回 ldiv_t 结构,`lldiv()`返回 lldiv_t 结构。 - -这些结构都包含下面两个字段, - -```c -int quot;  // 商 -int rem;  // 余数 -``` - -它们完整的定义如下。 - -```c -typedef struct { - int quot, rem; -} div_t; - -typedef struct { - long int quot, rem; -} ldiv_t; - -typedef struct { - long long int quot, rem; -} lldiv_t; -``` - -下面是一个例子。 - -```c -div_t d = div(64, -7); - -// 输出 64 / -7 = -9 -printf("64 / -7 = %d\n", d.quot); - -// 输出 64 % -7 = 1 -printf("64 %% -7 = %d\n", d.rem); -``` - -## 字符串转成数值 - -### a 系列函数 - -`stdlib.h`定义了一系列函数,可以将字符串转为数字。 - -- atoi():字符串转成 int 类型。 -- atof():字符串转成 double 类型。 -- atol():字符串转成 long int 类型。 -- atoll():字符串转成 long long int 类型。 - -它们的原型如下。 - -```c -int atoi(const char* nptr); -double atof(const char* nptr); -long int atol(const char* nptr); -long long int atoll(const char* nptr); -``` - -上面函数的参数都是一个字符串指针,字符串开头的空格会被忽略,转换到第一个无效字符处停止。函数名称里面的`a`代表 ASCII,所以`atoi()`的意思是“ASCII to int”。 - -它们返回转换后的数值,如果字符串无法转换,则返回`0`。 - -下面是用法示例。 - -```c -atoi("3490") // 3490 -atof("3.141593") // 3.141593 -``` - -如果参数是数字开头的字符串,`atoi()`会只转换数字部分,比如`atoi("42regular")`会返回整数`42`。如果首字符不是数字,比如“hello world”,则会返回`0`。 - -### str 系列函数(浮点数转换) - -`stdlib.h`还定义了一些更强功能的浮点数转换函数。 - -- strtof():字符串转成 float 类型。 -- strtod():字符串转成 double 类型。 -- strtold():字符串转成 long double 类型。 - -它们的原型如下。 - -```c -float strtof( - const char* restrict nptr, - char** restrict endptr -); - -double strtod( - const char* restrict nptr, - char** restrict endptr -); - -long double strtold( - const char* restrict nptr, - char** restrict endptr -); -``` - -它们都接受两个参数,第一个参数是需要转换的字符串,第二个参数是一个指针,指向原始字符串里面无法转换的部分。 - -- `nptr`:待转换的字符串(起首的空白字符会被忽略)。 -- `endprt`:一个指针,指向不能转换部分的第一个字符。如果字符串可以完全转成数值,该指针指向字符串末尾的终止符`\0`。这个参数如果设为 NULL,就表示不需要处理字符串剩余部分。 - -它们的返回值是已经转换后的数值。如果字符串无法转换,则返回`0`。如果转换结果发生溢出,errno 会被设置为 ERANGE。如果值太大(无论是正数还是负数),函数返回`HUGE_VAL`;如果值太小,函数返回零。 - -```c -char *inp = " 123.4567abdc"; -char *badchar; - -double val = strtod(inp, &badchar); - -printf("%f\n", val); // 123.456700 -printf("%s\n", badchar); // abdc -``` - -字符串可以完全转换的情况下,第二个参数指向`\0`,因此可以用下面的写法判断是否完全转换。 - -```c -if (*endptr == '\0') { - // 完全转换 -} else { - // 存在无法转换的字符 -} -``` - -如果不关心没有转换的部分,则可以将 endptr 设置为 NULL。 - -这些函数还可以将字符串转换为特殊值 Infinity 和 NaN。如果字符串包含 INF 或 INFINITY(大写或小写皆可),则将转换为 Infinity;如果字符串包含 NAN,则将返回 NaN。 - -### str 系列函数(整数转换) - -str 系列函数也有整数转换的对应函数。 - -- strtol():字符串转成 long int 类型。 -- strtoll():字符串转成 long long int 类型。 -- strtoul():字符串转成 unsigned long int 类型。 -- strtoull():字符串转成 unsigned long long int 类型。 - -它们的原型如下。 - -```c -long int strtol( - const char* restrict nptr, - char** restrict endptr, - int base -); - -long long int strtoll( - const char* restrict nptr, - char** restrict endptr, - int base -); - -unsigned long int strtoul( - const char* restrict nptr, - char** restrict endptr, - int base -); - -unsigned long long int strtoull( - const char* restrict nptr, - char** restrict endptr, int base -); -``` - -它们接受三个参数。 - -(1)`nPtr`:待转换的字符串(起首的空白字符会被忽略)。 - -(2)`endPrt`:一个指针,指向不能转换部分的第一个字符。如果字符串可以完全转成数值,该指针指向字符串末尾的终止符`\0`。这个参数如果设为 NULL,就表示不需要处理字符串剩余部分。 - -(3)`base`:待转换整数的进制。这个值应该是`2`到`36`之间的整数,代表相应的进制,如果是特殊值`0`,表示让函数根据数值的前缀,自己确定进制,即如果数字有前缀`0`,则为八进制,如果数字有前缀`0x`或`0X`,则为十六进制。 - -它们的返回值是转换后的数值,如果转换不成功,返回`0`。 - -下面是转换十进制整数的例子。 - -```c -char* s = "3490"; -unsigned long int x = strtoul(u, NULL, 10); - -printf("%lu\n", x); // 3490 -``` - -下面是转换十六进制整数的例子。 - -```c -char* end; - -long value = strtol("0xff", &end, 16); -printf("%ld\n", value); // 255 -printf("%s\n", end); // 无内容 - -value = strtol("0xffxx", &end, 16); -printf("%ld\n", value); // 255 -printf("%s\n", end); // xx -``` - -上面示例中,`strtol()`可以指定字符串包含的是16进制整数。不能转换的部分,可以使用指针`end`进行访问。 - -下面是转换二进制整数的例子。 - -```c -char* s = "101010"; -unsigned long int x = strtoul(s, NULL, 2); - -printf("%lu\n", x); // 42 -``` - -下面是让函数自行判断整数进制的例子。 - -```c -#include -#include - -int main(void) { - const char* string = "-1234567abc"; - char* remainderPtr; - long x = strtol(string, &remainderPtr, 0); - printf("%s\"%s\"\n%s%ld\n%s\"%s\"\n", - "The original string is ", - string, - "The converted value is ", - x, - "The remainder of the original string is ", - remainderPtr - ); -} -``` - -上面代码的输出结果如下。 - -```c -The original string is "-1234567abc" -The converted value is -1234567 -The remainder of the original string is "abc" -``` - -如果被转换的值太大,`strtol()`函数在`errno`中存储`ERANGE`这个值,并返回`LONG_MIN`(原值为负数)或`LONG_MAX`(原值为正数),`strtoul()`则返回`ULONG_MAX`。 - -## rand() - -`rand()`函数用来生成 0~RAND_MAX 之间的随机整数。`RAND_MAX`是一个定义在`stdlib.h`里面的宏,通常等于 INT_MAX。 - -```c -// 原型 -int rand(void); - -// 示例 -int x = rand(); -``` - -如果希望获得整数 N 到 M 之间的随机数(包括 N 和 M 两个端点值),可以使用下面的写法。 - -```c -int x = rand() % (M - N + 1) + N; -``` - -比如,1 到 6 之间的随机数,写法如下。 - -```c -int x = rand() % 6 + 1; -``` - -获得浮点数的随机值,可以使用下面的写法。 - -```c -// 0 到 0.999999 之间的随机数 -printf("0 to 0.99999: %f\n", rand() / ((float)RAND_MAX + 1)); - -// n 到 m 之间的随机数: -// n + m * (rand() / (float)RAND_MAX) -printf("10.5 to 15.7: %f\n", 10.5 + 5.2 * rand() / (float)RAND_MAX); -``` - -上面示例中,由于`rand()`和`RAND_MAX`都是 int 类型,要用显示的类型转换转为浮点数。 - -## srand() - -`rand()`是伪随机数函数,为了增加随机性,必须在调用它之前,使用`srand()`函数重置一下种子值。 - -`srand()`函数接受一个无符号整数(unsigned int)作为种子值,没有返回值。 - -```c -void srand(unsigned int seed); -``` - -通常使用`time(NULL)`函数返回当前距离时间纪元的秒数,作为`srand()`的参数。 - -```c -#include -srand((unsigned int) time(NULL)); -``` - -上面代码中,`time()`的原型定义在头文件`time.h`里面,返回值的类型是类型别名`time_t`,具体的类型与系统有关,所以要强制转换一下类型。`time()`的参数是一个指针,指向一个具体的 time_t 类型的时间值,这里传入空指针`NULL`作为参数,由于 NULL 一般是`0`,所以也可以写成`time(0)`。 - -## abort() - -`abort()`用于不正常地终止一个正在执行的程序。使用这个函数的目的,主要是它会触发 SIGABRT 信号,开发者可以在程序中为这个信号设置一个处理函数。 - -```c -void abort(void); -``` - -该函数没有参数。 - -## exit(),quick_exit(),_Exit() - -这三个函数都用来退出当前正在执行的程序。 - -```c -void exit(int status); -void quick_exit(int status); -void _Exit(int status); -``` - -它们都接受一个整数,表示程序的退出状态,`0`是正常退出,非零值表示发生错误,可以使用宏`EXIT_SUCCESS`和`EXIT_FAILURE`当作参数。它们本身没有返回值。 - -它们的区别是,退出时所做的清理工作不同。`exit()`是正常退出,系统会做完整的清理,比如更新所有文件流,并且删除临时文件。`quick_exit()`是快速退出,系统的清理工作稍微少一点。`_Exit()`是立即退出,不做任何清理工作。 - -下面是一些用法示例。 - -```c -exit(EXIT_SUCCESS); -quick_exit(EXIT_FAILURE); -_Exit(2); -``` - -## atexit(),at_quick_exit() - -`atexit()`用来登记当前程序退出时(调用`exit()`或`main()`正常退出),所要执行的其他函数。 - -`at_quick_exit()`则是登记使用`quick_exit()`方法退出当前程序时,所要执行的其他函数。 - -`exit()`只能触发`atexit()`登记的函数,`quick_exit()`只能触发`at_quick_exit()`登记的函数。 - -```c -int atexit(void (*func)(void)); -int at_quick_exit(void (*func)(void)); -``` - -它们的参数是要执行的函数地址,即函数名。它们的返回值都是调用成功时返回`0`,调用失败时返回非零值。 - -下面是一个例子。 - -```c -void sign_off(void); -void too_bad(void); - -int main(void) { - - int n; - atexit(sign_off);   /* 注册 sign_off()函数 */ - - puts("Enter an integer:"); - if (scanf("%d", &n) != 1) { - puts("That's no integer!"); - atexit(too_bad); /* 注册 too_bad()函数 */ - exit(EXIT_FAILURE); - } - - printf("%d is %s.\n", n, (n % 2 == 0) ? "even" : "odd"); - return 0; -} - -void sign_off(void) { - puts("sign_off"); -} - -void too_bad(void) { - puts("too bad"); -} -``` - -上面示例中,用户输入失败时,会调用`sign_off()`和`too_bad()`函数;但是输入成功时只会调用`sign_off()`。因为只有输入失败时,才会进入`if`语句登记`too_bad()`。 - -另外,如果有多条`atexit()`语句,函数退出时最先调用的,是最后一个登记的函数。 - -`atexit()`登记的函数(如上例的`sign_off`和`too_bad`)应该不带任何参数且返回类型为`void`。通常,这些函数会执行一些清理任务,例如删除临时文件或重置环境变量。 - -`at_quick_exit()`也是同样的规则,下面是一个例子。 - -```c -void exit_handler_1(void) { - printf("1\n"); -} - -void exit_handler_2(void) { - printf("2\n"); -} - -int main(void) { - at_quick_exit(exit_handler_1); - at_quick_exit(exit_handler_2); - quick_exit(0); -} -``` - -执行上面的示例,命令行会先输出2,再输出1。 - -## getenv() - -`getenv()`用于获取环境变量的值。环境变量是操作系统提供的程序之外的一些环境参数。 - -```c -char* getenv(const char* name); -``` - -它的参数是一个字符串,表示环境变量名。返回值也是一个字符串,表示环境变量的值。如果指定的环境变量不存在,则返回 NULL。 - -下面是输出环境变量`$PATH`的值的例子。 - -```c -printf("PATH is %s\n", getenv("PATH")); -``` - -## system() - -`system()`函数用于执行外部程序。它会把它的参数字符串传递给操作系统,让操作系统的命令处理器来执行。 - -```c -void system( char const * command ); -``` - -这个函数的返回值因编译器而异。但是标准规定,如果 NULL 作为参数,表示询问操作系统,是否有可用的命令处理器,如果有的话,返回一个非零值,否则返回零。 - -下面是执行`ls`命令的例子。 - -```c -system("ls -l"); -``` - -## 内存管理函数 - -stdlib.h 提供了一些内存操作函数,下面几个函数详见《内存管理》一章,其余在本节介绍。 - -- malloc():分配内存区域 -- calloc():分配内存区域。 -- realloc():调节内存区域大小。 -- free():释放内存区域。 - -### aligned_alloc() - -很多系统有内存对齐的要求,即内存块的大小必须是某个值(比如64字节)的倍数,这样有利于提高处理速度。`aligned_alloc()`就用于分配满足内存对齐要求的内存块,它的原型如下。 - -```c -void* aligned_alloc(size_t alignment, size_t size); -``` - -它接受两个参数。 - -- alignment:整数,表示内存对齐的单位大小,一般是2的整数次幂(2、4、8、16……)。 -- size:整数,表示内存块的大小。 - -分配成功时,它返回一个无类型指针,指向新分配的内存块。分配失败时,返回 NULL。 - -```c -char* p = aligned_alloc(64, 256); -``` - -上面示例中,`aligned_alloc()`分配的内存块,单位大小是64字节,要分配的字节数是256字节。 - -## qsort() - -`qsort()`用来快速排序一个数组。它对数组成员的类型没有要求,任何类型数组都可以用这个函数排序。 - -```c -void qsort( - void *base, - size_t nmemb, - size_t size, - int (*compar)(const void *, const void *) -); -``` - -该函数接受四个参数。 - -- base:指向要排序的数组开始位置的指针。 -- nmemb:数组成员的数量。 -- size:数组每个成员占用的字节长度。 -- compar:一个函数指针,指向一个比较两个成员的函数。 - -比较函数`compar`将指向数组两个成员的指针作为参数,并比较两个成员。如果第一个参数小于第二个参数,该函数应该返回一个负值;如果两个函数相等,返回`0`;如果第一个参数大于第二个参数,应该返回一个正数。 - -下面是一个用法示例。 - -```c -#include -#include - -int compar(const void* elem0, const void* elem1) { - const int* x = elem0; - const int* y = elem1; - - return *x - *y; -} - -int main(void) { - int a[9] = {14, 2, 3, 17, 10, 8, 6, 1, 13}; - - qsort(a, 9, sizeof(int), compar); - - for (int i = 0; i < 9; i++) - printf("%d ", a[i]); - putchar('\n'); -} -``` - -执行上面示例,会输出排序好的数组“1 2 3 6 8 10 13 14 17”。 - -## bsearch() - -`bsearch()`使用二分法搜索,在数组中搜索一个值。它对数组成员的类型没有要求,任何类型数组都可以用这个函数搜索值。 - -注意,该方法只对已经排序好的数组有效。 - -```c -void *bsearch( - const void* key, - const void* base, - size_t nmemb, - size_t size, - int (*compar)(const void *, const void *) -); -``` - -这个函数接受5个参数。 - -- key:指向要查找的值的指针。 -- base:指向数组开始位置的指针,数组必须已经排序。 -- nmemb:数组成员的数量。 -- size:数组每个成员占用的字节长度。 -- compar:指向一个将待查找值与其他值进行比较的函数的指针。 - -比较函数`compar`将待查找的值作为第一个参数,将要比较的值作为第二个参数。如果第一个参数小于第二个参数,该函数应该返回一个负值;如果两个参数相等,返回`0`;如果第一个参数大于第二个参数,返回一个正值。 - -如果找到待查找的值,`bsearch()`返回指向该值的指针,如果找不到,返回 NULL。 - -下面是一个用法示例。 - -```c -#include -#include - -int compar(const void *key, const void *value) { - const int* k = key; - const int* v = value; - - return *k - *v; -} - -int main(void) { - int a[9] = {2, 6, 9, 12, 13, 18, 20, 32, 47}; - - int* r; - int key; - - key = 12; // 包括在数组中 - r = bsearch(&key, a, 9, sizeof(int), compar); - printf("Found %d\n", *r); - - key = 30; // 不包括在数组中 - r = bsearch(&key, a, 9, sizeof(int), compar); - if (r == NULL) - printf("Didn't find 30\n"); - - return 0; -} -``` - -执行上面的示例,会输出下面的结果。 - -```bash -Found 12 -Didn't find 30 -``` - -## 多字节字符函数 - -stdlib.h 提供了下面的函数,用来操作多字节字符,详见《多字节字符》一章。 - -- mblen():多字节字符的字节长度。 -- mbtowc():将多字节字符转换为宽字符。 -- wctomb():将宽字符转换为多字节字符。 -- mbstowcs():将多字节字符串转换为宽字符串。 -- wcstombs():将宽字符串转换为多字节字符串。 diff --git a/wiki/programming-language/C/lib 标准库/string.h.md b/wiki/programming-language/C/lib 标准库/string.h.md deleted file mode 100644 index c849bd66..00000000 --- a/wiki/programming-language/C/lib 标准库/string.h.md +++ /dev/null @@ -1,346 +0,0 @@ -# string.h - -`string.h`主要定义了字符串处理函数和内存操作函数。 - -## 字符串处理函数 - -以下字符串处理函数,详见《字符串》一章。 - -- strcpy():复制字符串。 -- strncpy():复制字符串,有长度限制。 -- strcat():连接两个字符串。 -- strncat():连接两个字符串,有长度限制。 -- strcmp():比较两个字符串。 -- strncmp():比较两个字符串,有长度限制。 -- strlen():返回字符串的字节数。 - -### strchr(),strrchr() - -`strchr()`和`strrchr()`都用于在字符串中查找指定字符。不同之处是,`strchr()`从字符串开头开始查找,`strrchr()`从字符串结尾开始查找,函数名里面多出来的那个`r`表示 reverse(反向)。 - -```c -char* strchr(char* str, int c); -char* strrchr(char *str, int c); -``` - -它们都接受两个参数,第一个参数是字符串指针,第二个参数是所要查找的字符。 - -一旦找到该字符,它们就会停止查找,并返回指向该字符的指针。如果没有找到,则返回 NULL。 - -下面是一个例子。 - -```c -char *str = "Hello, world!"; -char *p; - -p = strchr(str, ','); // p 指向逗号的位置 -p = strrchr(str, 'o'); // p 指向 world 里面 o 的位置 -``` - -### strspn(),strcspn() - -`strspn()`用来查找属于指定字符集的字符串长度,`strcspn()`正好相反,用来查找不属于指定字符集的字符串长度。 - -```c -size_t strspn(char* str, const char* accept); -size_t strcspn(char *str, const char *reject); -``` - -这两个函数接受两个参数,第一个参数是源字符串,第二个参数是由指定字符组成的字符串。 - -`strspn()`从第一个参数的开头开始查找,一旦发现第一个不属于指定字符集范围的字符,就停止查找,返回到目前为止的字符串长度。如果始终没有不在指定字符集的字符,则返回第一个参数字符串的长度。 - -`strcspn()`则是一旦发现第一个属于指定字符集范围的字符,就停止查找,返回到目前为止的字符串长度。如果始终没有发现指定字符集的字符,则返回第一个参数字符串的长度。 - -```c -char str[] = "hello world"; -int n; - -n = strspn(str1, "aeiou"); -printf("%d\n", n); // n == 0 - -n = strcspn(str1, "aeiou"); -printf("%d\n", n); // n == 1 -``` - -上面示例中,第一个`n`等于0,因为0号位置的字符`h`就不属于指定字符集`aeiou`,可以理解为开头有0个字符属于指定字符集。第二个`n`等于1,因为1号位置的字符`e`属于指定字符集`aeiou`,可以理解为开头有1个字符不属于指定字符集。 - -### strpbrk() - -`strpbrk()`在字符串中搜索指定字符集的任一个字符。 - -```c -char* strpbrk(const char* s1, const char* s2); -``` - -它接受两个参数,第一个参数是源字符串,第二个参数是由指定字符组成的字符串。 - -它返回一个指向第一个匹配字符的指针,如果未找到匹配字符,则返回 NULL。 - -```c -char* s1 = "Hello, world!"; -char* s2 = "dow!"; - -char* p = strpbrk(s1, s2); - -printf("%s\n", p); // "o, world!" -``` - -上面示例中,指定字符集是“dow!”,那么`s1`里面第一个匹配字符是“Hello”的“o”,所以指针`p`指向这个字符。输出的话,就会输出从这个字符直到字符串末尾的“o, world!”。 - -### strstr() - -`strstr()`在一个字符串里面,查找另一个字符串。 - -```c -char *strstr( - const char* str, - const char* substr -); -``` - -它接受两个参数,第一个参数是源字符串,第二个参数是所要查找的子字符串。 - -如果匹配成功,就返回一个指针,指向源字符串里面的子字符串。如果匹配失败,就返回 NULL,表示无法找到子字符串。 - -```c -char* str = "The quick brown fox jumped over the lazy dogs."; -char* p = strstr(str, "lazy"); - -printf("%s\n", p == NULL ? "null": p); // "lazy dogs." -``` - -上面示例中,`strstr()`用来在源字符串`str`里面,查找子字符串`lazy`。从返回的指针到字符串结尾,就是“lazy dogs.”。 - -### strtok() - -`strtok()`用来将一个字符串按照指定的分隔符(delimiter),分解成一系列词元(tokens)。 - -```c -char* strtok(char* str, const char* delim); -``` - -它接受两个参数,第一个参数是待拆分的字符串,第二个参数是指定的分隔符。 - -它返回一个指针,指向分解出来的第一个词元,并将词元结束之处的分隔符替换成字符串结尾标志`\0`。如果没有待分解的词元,它返回 NULL。 - -如果要遍历所有词元,就必须循环调用,参考下面的例子。 - -`strtok()`的第一个参数如果是 NULL,则表示从上一次`strtok()`分解结束的位置,继续往下分解。 - -```c -#include -#include - -int main(void) { - char string[] = "This is a sentence with 7 tokens"; - char* tokenPtr = strtok(string, " "); - - while (tokenPtr != NULL) { - printf("%s\n", tokenPtr); - tokenPtr = strtok(NULL, " "); - } -} -``` - -上面示例将源字符串按照空格,分解词元。它的输出结果如下。 - -```bash -This -is -a -sentence -with -7 -tokens -``` - -注意,`strtok()`会修改原始字符串,将所有分隔符都替换成字符串结尾符号`\0`。因此,最好生成一个原始字符串的拷贝,然后再对这个拷贝执行`strtok()`。 - -### strcoll() - -`strcoll()`用于比较两个启用了本地化设置的字符串,用法基本与`strcmp()`相同。 - -```c -int strcoll(const char *s1, const char *s2); -``` - -请看下面的示例。 - -```c -setlocale(LC_ALL, ""); - -// 报告 é > f -printf("%d\n", strcmp("é", "f")); - -// 报告 é < f -printf("%d\n", strcoll("é", "f")); -``` - -上面示例比较带重音符号的`é`与`f`,`strcmp()`会返回`é`大于`f`,而`strcoll()`就会正确识别`é`排在`f`前面,所以小于`f`。注意,在比较之前,需要使用`setlocale(LC_ALL, "")`,启用本地化设置。 - -### strxfrm() - -`strxfrm()`将一个本地化字符串转成可以使用`strcmp()`进行比较的形式,相当于`strcoll()`内部的第一部分操作。 - -```c -size_t strxfrm( - char * restrict s1, - const char * restrict s2, - size_t n -); -``` - -它接受三个参数,将第二个参数`s2`转为可以使用`strcmp()`比较的形式,并将结果存入第一个参数`s1`。第三个参数`n`用来限定写入的字符数,防止超出`s1`的边界。 - -它返回转换后的字符串长度,不包括结尾的终止符。 - -如果第一个参数是 NULL,第三个参数是0,则不进行实际的转换,只返回转换后所需的字符串长度。 - -下面的示例是用这个函数自己实现一个`strcoll()`。 - -```c -int my_strcoll(char* s1, char* s2) { - int len1 = strxfrm(NULL, s1, 0) + 1; - int len2 = strxfrm(NULL, s2, 0) + 1; - - char *d1 = malloc(len1); - char *d2 = malloc(len2); - - strxfrm(d1, s1, len1); - strxfrm(d2, s2, len2); - - int result = strcmp(d1, d2); - - free(d2); - free(d1); - - return result; -} -``` - -上面示例中,先为两个进行比较的本地化字符串,分配转换后的存储空间,使用`strxfrm()`将它们转为可比较的形式,再用`strcmp()`进行比较。 - -### strerror() - -`strerror()`函数返回特定错误的说明字符串。 - -```c -char *strerror(int errornum); -``` - -它的参数是错误的编号,由`errno.h`定义。返回值是一个指向说明字符串的指针。 - -```c -// 输出 No such file or directory -printf("%s\n", strerror(2)); -``` - -上面示例输出2号错误的说明字符“No such file or directory“。 - -下面的例子是自定义报错信息。 - -```c -#include -#include -#include - -int main(void) { - FILE* fp = fopen("NONEXISTENT_FILE.TXT", "r"); - - if (fp == NULL) { - char* errmsg = strerror(errno); - printf("Error %d opening file: %s\n", errno, errmsg); - } -} -``` - -上面示例中,通过`strerror(errno)`拿到当前的默认报错信息,其中`errno`是`errno.h`定义的宏,表示当前的报错编号。然后,再输出一条自定义的报错信息。 - -## 内存操作函数 - -以下内存操作函数,详见《内存管理》一章。 - -- memcpy():内存复制函数。 -- memmove():内存复制函数(允许重叠)。 -- memcmp():比较两个内存区域。 - -### memchr() - -`memchr()`用于在内存区域中查找指定字符。 - -```c -void* memchr(const void* s, int c, size_t n); -``` - -它接受三个参数,第一个参数是内存区域的指针,第二个参数是所要查找的字符,第三个参数是内存区域的字节长度。 - -一旦找到,它就会停止查找,并返回指向该位置的指针。如果直到检查完指定的字节数,依然没有发现指定字符,则返回 NULL。 - -下面是一个例子。 - -```c -char *str = "Hello, world!"; -char *p; - -p = memchr(str, '!', 13); // p 指向感叹号的位置 -``` - -### memset() - -`memset()`将一段内存全部格式化为指定值。 - -```c -void* memset(void* s, int c, size_t n); -``` - -它的第一个参数是一个指针,指向内存区域的开始位置,第二个参数是待写入的字符值,第三个参数是一个整数,表示需要格式化的字节数。它返回第一个参数(指针)。 - -```c -memset(p, ' ', N); -``` - -上面示例中,p 是一个指针,指向一个长度为 N 个字节的内存区域。`memset()`将该块内存区域的每个字节,都改写为空格字符。 - -下面是另一个例子。 - -```c -char string1[15] = "BBBBBBBBBBBBBB"; - -// 输出 bbbbbbbBBBBBBB -printf("%s\n", (char*) memset(string1, 'b', 7)); -``` - -`memset()`的一个重要用途,就是将数组成员全部初始化为0。 - -```c -memset(arr, 0, sizeof(arr)); -``` - -下面是将 Struct 结构都初始化为0的例子。 - -```c -struct banana { - float ripeness; - char *peel_color; - int grams; -}; - -struct banana b; - -memset(&b, 0, sizeof b); - -b.ripeness == 0.0; // True -b.peel_color == NULL; // True -b.grams == 0; // True -``` - -上面示例,将 Struct banana 的实例 b 的所有属性都初始化为0。 - -## 其他函数 - -```c -void* memset(void* a, int c, size_t n); - -size_t strlen(const char* s); -``` diff --git a/wiki/programming-language/C/lib 标准库/time.h.md b/wiki/programming-language/C/lib 标准库/time.h.md deleted file mode 100644 index fe503b69..00000000 --- a/wiki/programming-language/C/lib 标准库/time.h.md +++ /dev/null @@ -1,363 +0,0 @@ -# time.h - -## time_t - -time_t 是一个表示时间的类型别名,可以视为国际标准时 UTC。它可能是浮点数,也可能是整数,Unix 系统一般是整数。 - -许多系统上,time_t 表示自时间纪元(time epoch)以来的秒数。Unix 的时间纪元是国际标准时 UTC 的1970年1月1日的零分零秒。time_t 如果为负数,则表示时间纪元之前的时间。 - -time_t 一般是32位或64位整数类型的别名,具体类型取决于当前系统。如果是32位带符号整数,time_t 可以表示的时间到 2038年1月19日03:14:07 UTC 为止;如果是32位无符号整数,则表示到2106年。如果是64位带符号整数,可以表示`-2930`亿年到`+2930`亿年的时间范围。 - -## struct tm - -struct tm 是一个数据结构,用来保存时间的各个组成部分,比如小时、分钟、秒、日、月、年等。下面是它的结构。 - -```c -struct tm { - int tm_sec; // 秒数 [0, 60] - int tm_min; // 分钟 [0, 59] - int tm_hour; // 小时 [0, 23] - int tm_mday; // 月份的天数 [1, 31] - int tm_mon; // 月份 [0, 11],一月用 0 表示 - int tm_year; // 距离 1900 的年数 - int tm_wday; // 星期几 [0, 6],星期天用 0 表示 - int tm_yday; // 距离1月1日的天数 [0, 365] - int tm_isdst; // 是否采用夏令时,1 表示采用,0 表示未采用 -}; -``` - -## time() - -`time()`函数返回从时间纪元到现在经过的秒数。 - -```c -time_t time(time_t* returned_value); -``` - -`time()`接受一个 time_t 指针作为参数,返回值会写入指针地址。参数可以是空指针 NULL。 - -`time()`的返回值是 time_t 类型的当前时间。 如果计算机无法提供当前的秒数,或者返回值太大,无法用`time_t`类型表示,`time()`函数就返回`-1`。 - -```c -time_t now; - -// 写法一 -now = time(NULL); - -// 写法二 -time(&now); -``` - -上面示例展示了将当前时间存入变量`now`的两种写法。 - -如果要知道某个操作耗费的精确时间,需要调用两次`time()`,再将两次的返回值相减。 - -```c -time_t begin = time(NULL); - -// ... 执行某些操作 - -time_t end = time(NULL); - -printf("%d\n", end - begin); -``` - -注意,上面的方法只能精确到秒。 - -## ctime() - -`ctime()`用来将 time_t 类型的值直接输出为人类可读的格式。 - -```c -char* ctime( time_t const * time_value ); -``` - -`ctime()`的参数是一个 time_t 指针,返回一个字符串指针。该字符串的格式类似“Sun Jul 4 04:02:48 1976\n\0”,尾部包含换行符和字符串终止标志。 - -下面是一个例子。 - -```c -time_t now; - -now = time(NULL); - -// 输出 Sun Feb 28 18:47:25 2021 -printf("%s", ctime(&now)); -``` - -注意,`ctime()`会在字符串尾部自动添加换行符。 - -## localtime(),gmtime() - -`localtime()`函数用来将 time_t 类型的时间,转换为当前时区的 struct tm 结构。 - -`gmtime()`函数用来将 time_t 类型的时间,转换为 UTC 时间的 struct tm 结构。 - -它们的区别就是返回值,前者是本地时间,后者是 UTC 时间。 - -```c -struct tm* localtime(const time_t* timer); -struct tm* gmtime(const time_t* timer); -``` - -下面是一个例子。 - -```c -time_t now = time(NULL); - -// 输出 Local: Sun Feb 28 20:15:27 2021 -printf("Local: %s", asctime(localtime(&now))); - -// 输出 UTC : Mon Mar 1 04:15:27 2021 -printf("UTC : %s", asctime(gmtime(&now))); -``` - -## asctime() - -`asctime()`函数用来将 struct tm 结构,直接输出为人类可读的格式。该函数会自动在输出的尾部添加换行符。 - -用法示例参考上一小节。 - -## mktime() - -`mktime()`函数用于把一个 struct tm 结构转换为 time_t 值。 - -```c -time_t mktime(struct tm* tm_ptr); -``` - -`mktime()`的参数是一个 struct tm 指针。 - -`mktime()`会自动设置 struct tm 结构里面的`tm_wday`属性和`tm_yday`属性,开发者自己不必填写这两个属性。所以,这个函数常用来获得指定时间是星期几(`tm_wday`)。 - -struct tm 结构的`tm_isdst`属性也可以设为`-1`,让`mktime()`决定是否应该采用夏令时。 - -下面是一个例子。 - -```c -struct tm some_time = { - .tm_year=82, // 距离 1900 的年数 - .tm_mon=3, // 月份 [0, 11] - .tm_mday=12, // 天数 [1, 31] - .tm_hour=12, // 小时 [0, 23] - .tm_min=00, // 分钟 [0, 59] - .tm_sec=04, // 秒数 [0, 60] - .tm_isdst=-1, // 夏令时 -}; - -time_t some_time_epoch; -some_time_epoch = mktime(&some_time); - -// 输出 Mon Apr 12 12:00:04 1982 -printf("%s", ctime(&some_time_epoch)); - -// 输出 Is DST: 0 -printf("Is DST: %d\n", some_time.tm_isdst); -``` - -## difftime() - -`difftime()`用来计算两个时间之间的差异。Unix 系统上,直接相减两个 time_t 值,就可以得到相差的秒数,但是为了程序的可移植性,最好还是使用这个函数。 - -```c -double difftime( time_t time1, time_t time2 ); -``` - -`difftime()`函数接受两个 time_t 类型的时间作为参数,计算 time1 - time2 的差,并把结果转换为秒。 - -注意它的返回值是 double 类型。 - -```c -#include -#include - -int main(void) { - struct tm time_a = { - .tm_year=82, - .tm_mon=3, - .tm_mday=12, - .tm_hour=4, - .tm_min=00, - .tm_sec=04, - .tm_isdst=-1, - }; - - struct tm time_b = { - .tm_year=120, - .tm_mon=10, - .tm_mday=15, - .tm_hour=16, - .tm_min=27, - .tm_sec=00, - .tm_isdst=-1, - }; - - time_t cal_a = mktime(&time_a); - time_t cal_b = mktime(&time_b); - - double diff = difftime(cal_b, cal_a); - - double years = diff / 60 / 60 / 24 / 365.2425; - - // 输出 1217996816.000000 seconds (38.596783 years) between events - printf("%f seconds (%f years) between events\n", diff, years); -} -``` - -上面示例中,折算年份时,为了尽量准确,使用了一年的准确长度 365.2425 天,这样可以抵消闰年的影响。 - -## strftime() - -`strftime()`函数用来将 struct tm 结构转换为一个指定格式的字符串,并复制到指定地址。 - -```c -size_t strftime( - char* str, - size_t maxsize, - const char* format, - const struct tm* timeptr -) -``` - -`strftime()`接受四个参数。 - -- 第一个参数:目标字符串的指针。 -- 第二个参数:目标字符串可以接受的最大长度。 -- 第三个参数:格式字符串。 -- 第四个参数:struct tm 结构。 - -如果执行成功(转换并复制),`strftime()`函数返回复制的字符串长度;如果执行失败,返回`-1`。 - -下面是一个例子。 - -```c -#include -#include - -int main(void) { - char s[128]; - time_t now = time(NULL); - - // %c: 本地时间 - strftime(s, sizeof s, "%c", localtime(&now)); - puts(s); // Sun Feb 28 22:29:00 2021 - - // %A: 完整的星期日期的名称 - // %B: 完整的月份名称 - // %d: 月份的天数 - strftime(s, sizeof s, "%A, %B %d", localtime(&now)); - puts(s); // Sunday, February 28 - - // %I: 小时(12小时制) - // %M: 分钟 - // %S: 秒数 - // %p: AM 或 PM - strftime(s, sizeof s, "It's %I:%M:%S %p", localtime(&now)); - puts(s); // It's 10:29:00 PM - - // %F: ISO 8601 yyyy-mm-dd 格式 - // %T: ISO 8601 hh:mm:ss 格式 - // %z: ISO 8601 时区 - strftime(s, sizeof s, "ISO 8601: %FT%T%z", localtime(&now)); - puts(s); // ISO 8601: 2021-02-28T22:29:00-0800 -} -``` - -下面是常用的格式占位符。 - -- %%:输出 % 字符。 -- %a:星期几的简写形式,以当地时间计算。 -- %A:星期几的完整形式,以当地时间计算。 -- %b:月份的简写形式,以当地时间计算。 -- %B:月份的完整形式,以当地时间计算。 -- %c:日期和时间,使用“%x %X”。 -- %d:月份的天数(01-31)。 -- %H:小时,采用24小时制(00-23)。 -- %I:小时,采用12小时制(00-12)。 -- %J:一年的第几天(001-366)。 -- %m:月数(01-12)。 -- %M:分钟(00~59)。 -- %P:AM 或 PM。 -- %R:相当于"%H:%M"。 -- %S:秒(00-61)。 -- %U:一年的第几星期(00-53),以星期日为第1天。 -- %w:一星期的第几天,星期日为第0天。 -- %W:一年的第几星期(00-53),以星期一为第1天。 -- %x:完整的年月日的日期,以当地时间计算。 -- %X:完整的时分秒的时间,以当地时间计算。 -- %y:两位数年份(00-99)。 -- %Y:四位数年份(例如 1984)。 -- %Z:时区的简写。 - -## timespec_get() - -`timespec_get()`用来将当前时间转成距离时间纪元的纳秒数(十亿分之一秒)。 - -```c -int timespec_get ( struct timespec* ts, int base ) ; -``` - -`timespec_get()`接受两个参数。 - -第一个参数是 struct timespec 结构指针,用来保存转换后的时间信息。struct timespec 的结构如下。 - -```c -struct timespec { - time_t tv_sec; // 秒数 - long tv_nsec; // 纳秒 -}; -``` - -第二个参数是一个整数,表示时间计算的起点。标准只给出了宏 TIME_UTC 这一个可能的值,表示返回距离时间纪元的秒数。 - -下面是一个例子。 - -```c -struct timespec ts; - -timespec_get(&ts, TIME_UTC); - -// 1614581530 s, 806325800 ns -printf("%ld s, %ld ns\n", ts.tv_sec, ts.tv_nsec); - -double float_time = ts.tv_sec + ts.tv_nsec/1000000000.0; - -// 1614581530.806326 seconds since epoch -printf("%f seconds since epoch\n", float_time); -``` - -## clock() - -`clock()`函数返回从程序开始执行到当前的 CPU 时钟周期。一个时钟周期等于 CPU 频率的倒数,比如 CPU 的频率如果是 1G Hz,表示1秒内时钟信号可以变化 10^9 次,那么每个时钟周期就是 10^-9 秒。 - -```c -clock_t clock(void); -``` - -`clock()`函数返回一个数字,表示从程序开始到现在的 CPU 时钟周期的次数。这个值的类型是 clock_t,一般是 long int 类型。 - -为了把这个值转换为秒,应该把它除以常量`CLOCKS_PER_SEC`(每秒的时钟周期),这个常量也由`time.h`定义。 - -```c -printf("CPU time: %f\n", clock() / (double)CLOCKS_PER_SEC); -``` - -上面示例可以输出程序从开始到运行到这一行所花费的秒数。 - -如果计算机无法提供 CPU 时间,或者返回值太大,无法用`clock_t`类型表示,`clock()`函数就返回`-1`。 - -为了知道某个操作所耗费的精确时间,需要调用两次`clock()`,然后将两次的返回值相减。 - -```c -clock_t start = clock(); - -// ... 执行某些操作 - -clock_t end = clock(); - -long double seconds = (float)(end - start) / CLOCKS_PER_SEC; -``` - -## 参考链接 - -- [How to Measure Execution Time of a Program](https://serhack.me/articles/measure-execution-time-program/) diff --git a/wiki/programming-language/C/lib 标准库/wchar.h.md b/wiki/programming-language/C/lib 标准库/wchar.h.md deleted file mode 100644 index af60e28e..00000000 --- a/wiki/programming-language/C/lib 标准库/wchar.h.md +++ /dev/null @@ -1,133 +0,0 @@ -# wchar.h - -宽字符使用两个或四个字节表示一个字符,导致 C 语言常规的字符处理函数都会失效。wchar.h 定义了许多宽字符专用的处理函数。 - -## 类型别名和宏 - -wchar.h 定义了一个类型别名 wint_t,表示宽字符对应整数值。 - -wchar.h 还定义了一个宏 WEOF,表示文件结束字符 EOF 的宽字符版。 - -## btowc(),wctob() - -`btowc()`将单字节字符转换为宽字符,`wctob()`将宽字符转换为单字节字符。 - -```c -wint_t btowc(int c); -int wctob(wint_t c); -``` - -`btowc()`返回一个宽字符。如果参数是 EOF,或转换失败,则返回 WEOF。 - -`wctob()`返回一个单字节字符。如果参数是 WEOF,或者参数宽字符无法对应单个的单字节字符,则返回 EOF。 - -下面是用法示例。 - -```c -wint_t wc = btowc('B'); - -// 输出宽字符 B -wprintf(L"Wide character: %lc\n", wc); - -unsigned char c = wctob(wc); - -// 输出单字节字符 B -wprintf(L"Single-byte character: %c\n", c); -``` - -## fwide() - -`fwide()`用来设置一个字节流是宽字符流,还是多字节字符流。 - -如果使用宽字符专用函数处理字节流,就会默认设置字节流为宽字符流,否则就需要使用`fwide()`显式设置。 - -```c -int fwide(FILE* stream, int mode); -``` - -它接受两个参数,第一个参数是文件指针,第二个参数是字节流模式,有三种选择。 - -- 0:字节流模式保持原样。 -- -1(或其他负值):设为多字节字符流。 -- 1(或其他正值):设为宽字符流。 - -`fwide()`的返回值也分成三种情况:如果是宽字符流,返回一个正值;如果是多字节字符流,返回一个负值;如果是普通字符流,返回`0`。 - -一旦设置了字节流模式,就无法再更改。 - -```c -#include -#include - -int main(void) { - wprintf(L"Hello world!\n"); - int mode = fwide(stdout, 0); - wprintf(L"Stream is %ls-oriented\n", mode < 0 ? L"byte" : L"wide"); -} -``` - -上面示例中,`wprintf()`将字节流隐式设为宽字符模式,所以`fwide(stdout, 0)`的返回值大于零。 - -## 宽字符专用函数 - -下面这些函数基本都是 stdio.h 里面的字符处理函数的宽字符版本,必须使用这些函数来操作宽字符。 - -- fgetwc() 从宽字符流中获取宽字符,对应 fgetc()。 -- fgetws() 从宽字符流中读取宽字符串,对应 fgets()。 -- fputwc() 将宽字符写入宽字符流,对应 fputc()。 -- fputws() 将宽字符串写入宽字符流,对应 fputs()。 -- fwprintf() 格式化宽输出到宽字符流,对应 fprintf()。 -- fwscanf() 来自宽字符流的格式化宽字符输入,对应 fscanf()。 -- getwchar() 从 stdin 获取一个宽字符,对应 getchar()。 -- getwc() 从 stdin 获取一个宽字符,对应 getc()。 -- putwchar() 写一个宽字符到 stdout,对应 putchar()。 -- putwc() 写一个宽字符到 stdout,对应 putc()。 -- swprintf() 格式化宽输出到宽字符串,对应 sprintf()。 -- swscanf() 来自宽字符串的格式化宽输入,对应 sscanf()。 -- ungetwc() 将宽字符推回输入流,对应 ungetc()。 -- vfwprintf() 可变参数的格式化宽字符输出到宽字符流,对应 vfprintf()。 -- vfwscanf() 来自宽字符流的可变参数格式化宽字符输入,对应 vfscanf()。 -- vswprintf() 可变参数的格式化宽字符输出到宽字符串,对应 vswprintf()。 -- vswscanf() 来自宽字符串的可变参数格式化宽字符输入,对应 vsscanf()。 -- vwprintf() 可变参数格式化宽字符输出,对应 vprintf()。 -- vwscanf() 可变参数的格式化宽字符输入,对应 vscanf()。 -- wcscat() 危险地连接宽字符串,对应 strcat()。 -- wcschr() 在宽字符串中查找宽字符,对应 strchr()。 -- wcscmp() 比较宽字符串,对应 strcmp()。 -- wcscoll() 比较两个考虑语言环境的宽字符串,对应 strcoll()。 -- wcscpy() 危险地复制宽字符串,对应 strcpy()。 -- wcscspn() 不是从宽字符串前面开始计算字符,对应 strcspn()。 -- wcsftime() 格式化的日期和时间输出,对应 strftime()。 -- wcslen() 返回宽字符串的长度,对应 strlen()。 -- wcsncat() 更安全地连接宽字符串,对应 strncat()。 -- wcsncmp() 比较宽字符串,长度有限,对应 strncmp()。 -- wcsncpy() 更安全地复制宽字符串,对应 strncpy()。 -- wcspbrk() 在宽字符串中搜索一组宽字符中的一个,对应 strpbrk()。 -- wcsrchr() 从末尾开始在宽字符串中查找宽字符,对应 strrchr()。 -- wcsspn() 从宽字符串前面的集合中计算字符,对应 strspn()。 -- wcsstr() 在另一个宽字符串中找到一个宽字符串,对应 strstr()。 -- wcstod() 将宽字符串转换为 double,对应 strtod()。 -- wcstof() 将宽字符串转换为 float,对应 strtof()。 -- wcstok() 标记一个宽字符串,对应 strtok()。 -- wcstold() 将宽字符串转换为 long double,对应 strtold()。 -- wcstoll() 将宽字符串转换为 long long,对应 strtoll()。 -- wcstol() 将宽字符串转换为 long,对应 strtol()。 -- wcstoull() 将宽字符串转换为 unsigned long long,对应 strtoull()。 -- wcstoul() 将宽字符串转换为 unsigned long,对应 strtoul()。 -- wcsxfrm() 转换宽字符串以根据语言环境进行比较,对应 strxfrm()。 -- wmemcmp() 比较内存中的宽字符,对应 memcmp()。 -- wmemcpy() 复制宽字符内存,对应 memcpy()。 -- wmemmove() 复制宽字符内存,可能重叠,对应 memmove()。 -- wprintf() 格式化宽输出,对应 printf()。 -- wscanf() 格式化宽输入,对应 scanf()。 - -## 多字节字符专用函数 - -wchar.h 也定义了一些多字节字符的专用函数。 - -- mbsinit() 判断 mbstate_t 是否处于初始转换状态。 -- mbrlen() 给定转换状态时,计算多字节字符串的字节数,对应 mblen()。 -- mbrtowc() 给定转换状态时,将多字节字符转换为宽字符,对应 mbtowc()。 -- wctombr() 给定转换状态时,将宽字符转换为多字节字符,对应 wctomb()。 -- mbsrtowcs() 给定转换状态时,将多字节字符串转换为宽字符串,对应 mbstowcs()。 -- wcsrtombs() 给定转换状态时,将宽字符串转换为多字节字符串,对应 wcstombs()。 diff --git a/wiki/programming-language/C/lib 标准库/wctype.h.md b/wiki/programming-language/C/lib 标准库/wctype.h.md deleted file mode 100644 index dce39e08..00000000 --- a/wiki/programming-language/C/lib 标准库/wctype.h.md +++ /dev/null @@ -1,97 +0,0 @@ -# wctype.h - -wctype.h 提供 ctype.h 里面函数的宽字符版本。 - -## 宽字符类型判断函数 - -下面函数判断宽字符的类型。 - -- iswalnum() 测试宽字符是否为字母数字 -- iswalpha() 测试宽字符是否为字母 -- iswblank() 测试这是否是一个宽空白字符 -- iswcntrl() 测试这是否是一个宽控制字符。 -- iswdigit() 测试这个宽字符是否是数字 -- iswgraph() 测试宽字符是否是可打印的非空格字符 -- iswlower() 测试宽字符是否为小写 -- iswprint() 测试宽字符是否可打印 -- iswpunct() 测试宽字符是否为标点符号 -- iswspace() 测试宽字符是否为空格 -- iswupper() 测试宽字符是否为大写 -- iswxdigit() 测试宽字符是否为十六进制数字 - -## wctype(),iswctype() - -`iswctype()`是上一节各种宽字符类型判断函数的通用版本,必须与`wctype()`配合使用。 - -```c -int iswctype(wint_t wc, wctype_t desc); -``` - -`iswctype()`接受两个参数,第一个参数是一个需要判断类型的宽字符,第二个参数是宽字符类型描述,来自`wctype()`的返回值。 - -如果宽字符属于指定类型,`iswctype()`返回一个非零值,否则返回零。 - -`wctype()`用来获取某个种类宽字符的类型描述。 - -```c -wctype_t wctype(const char* property); -``` - -`wctype()`的参数是一个给定的字符串,可用的值如下:alnum、alpha、blank、cntrl、digit、graph、lower、print、punct、space、upper、xdigit。 - -`wctype()`的返回值的类型为 wctype_t,通常是一个整数。如果参数是一个无效值,则返回`0`。 - -```c -if (iswctype(c, wctype("digit"))) -// 相当于 -if (iswdigit(c)) -``` - -上面示例用来判断宽字符`c`是否为数值,相当于`iswdigit()`。 - -`iswctype()`的完整类型判断如下。 - -```c -iswctype(c, wctype("alnum")) // 相当于 iswalnum(c) -iswctype(c, wctype("alpha")) // 相当于 iswalpha(c) -iswctype(c, wctype("blank")) // 相当于 iswblank(c) -iswctype(c, wctype("cntrl")) // 相当于 iswcntrl(c) -iswctype(c, wctype("digit")) // 相当于 iswdigit(c) -iswctype(c, wctype("graph")) // 相当于 iswgraph(c) -iswctype(c, wctype("lower")) // 相当于 iswlower(c) -iswctype(c, wctype("print")) // 相当于 iswprint(c) -iswctype(c, wctype("punct")) // 相当于 iswpunct(c) -iswctype(c, wctype("space")) // 相当于 iswspace(c) -iswctype(c, wctype("upper")) // 相当于 iswupper(c) -iswctype(c, wctype("xdigit")) // 相当于 iswxdigit(c) -``` - -## 大小写转换函数 - -wctype.h 提供以下宽字符大小写转换函数。 - -- towlower() 将大写宽字符转换为小写 -- towupper() 将小写宽字符转换为大写 -- towctrans() 宽字符大小写转换的通用函数 -- wctrans() 大小写转换的辅助函数,配合 towctrans() 使用 - -先看`towlower()`和`towupper()`的用法示例。 - -```c -towlower(L'B') // b -towupper(L'e') // E -``` - -`towctrans()`和`wctrans()`的原型如下。 - -```c -wint_t towctrans(wint_t wc, wctrans_t desc); -wctrans_t wctrans(const char* property); -``` - -下面是它们的用法示例。 - -```c -towctrans(c, wctrans("toupper")) // 相当于 towupper(c) -towctrans(c, wctrans("tolower")) // 相当于 towlower(c) -``` diff --git a/wiki/programming-language/C/内存管理.md b/wiki/programming-language/C/内存管理.md deleted file mode 100644 index b3afdc8a..00000000 --- a/wiki/programming-language/C/内存管理.md +++ /dev/null @@ -1,405 +0,0 @@ ---- -id: 内存管理 -title: 内存管理 -sidebar_position: 11 -data: 2022年3月30日 ---- - -## 简介 - -C 语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。 - -系统管理的内存,主要是函数内部的变量(局部变量)。这部分变量在函数运行时进入内存,函数运行结束后自动从内存卸载。这些变量存放的区域称为”栈“(stack),”栈“所在的内存是系统自动管理的。 - -用户手动管理的内存,主要是程序运行的整个过程中都存在的变量(全局变量),这些变量需要用户手动从内存释放。如果使用后忘记释放,它就一直占用内存,直到程序退出,这种情况称为”内存泄漏“(memory leak)。这些变量所在的内存称为”堆“(heap),”堆“所在的内存是用户手动管理的。 - -## void 指针 - -前面章节已经说过了,每一块内存都有地址,通过指针变量可以获取指定地址的内存块。指针变量必须有类型,否则编译器无法知道,如何解读内存块保存的二进制数据。但是,向系统请求内存的时候,有时不确定会有什么样的数据写入内存,需要先获得内存块,稍后再确定写入的数据类型。 - -为了满足这种需求,C 语言提供了一种不定类型的指针,叫做 void 指针。它只有内存块的地址信息,没有类型信息,等到使用该块内存的时候,再向编译器补充说明,里面的数据类型是什么。 - -另一方面,void 指针等同于无类型指针,可以指向任意类型的数据,但是不能解读数据。void 指针与其他所有类型指针之间是互相转换关系,任一类型的指针都可以转为 void 指针,而 void 指针也可以转为任一类型的指针。 - -```c -int x = 10; - -void* p = &x; // 整数指针转为 void 指针 -int* q = p; // void 指针转为整数指针 -``` - -上面示例演示了,整数指针和 void 指针如何互相转换。`&x`是一个整数指针,`p`是 void 指针,赋值时`&x`的地址会自动解释为 void 类型。同样的,`p`再赋值给整数指针`q`时,`p`的地址会自动解释为整数指针。 - -注意,由于不知道 void 指针指向什么类型的值,所以不能用`*`运算符取出它指向的值。 - -```c -char a = 'X'; -void* p = &a; - -printf("%c\n", *p); // 报错 -``` - -上面示例中,`p`是一个 void 指针,所以这时无法用`*p`取出指针指向的值。 - -void 指针的重要之处在于,很多内存相关函数的返回值就是 void 指针,只给出内存块的地址信息,所以放在最前面进行介绍。 - -## malloc() - -`malloc()`函数用于分配内存,该函数向系统要求一段内存,系统就在“堆”里面分配一段连续的内存块给它。它的原型定义在头文件`stdlib.h`。 - -```c -void* malloc(size_t size) -``` - -它接受一个非负整数作为参数,表示所要分配的内存字节数,返回一个 void 指针,指向分配好的内存块。这是非常合理的,因为`malloc()`函数不知道,将要存储在该块内存的数据是什么类型,所以只能返回一个无类型的 void 指针。 - -可以使用`malloc()`为任意类型的数据分配内存,常见的做法是先使用`sizeof()`函数,算出某种数据类型所需的字节长度,然后再将这个长度传给`malloc()`。 - -```c -int* p = malloc(sizeof(int)); - -*p = 12; -printf("%d\n", *p); // 12 -``` - -上面示例中,先为整数类型分配一段内存,然后将整数`12`放入这段内存里面。这个例子其实不需要使用`malloc()`,因为 C 语言会自动为整数(本例是`12`)提供内存。 - -有时候为了增加代码的可读性,可以对`malloc()`返回的指针进行一次强制类型转换。 - -```c -int* p = (int*) malloc(sizeof(int)); -``` - -上面代码将`malloc()`返回的 void 指针,强制转换成了整数指针。 - -由于`sizeof()`的参数可以是变量,所以上面的例子也可以写成下面这样。 - -```c -int* p = (int*) malloc(sizeof(*p)); -``` - -`malloc()`分配内存有可能分配失败,这时返回常量 NULL。Null 的值为0,是一个无法读写的内存地址,可以理解成一个不指向任何地方的指针。它在包括`stdlib.h`等多个头文件里面都有定义,所以只要可以使用`malloc()`,就可以使用`NULL`。由于存在分配失败的可能,所以最好在使用`malloc()`之后检查一下,是否分配成功。 - -```c -int* p = malloc(sizeof(int)); - -if (p == NULL) { - // 内存分配失败 -} - -// or -if (!p) { - //... -} -``` - -上面示例中,通过判断返回的指针`p`是否为`NULL`,确定`malloc()`是否分配成功。 - -`malloc()`最常用的场合,就是为数组和自定义数据结构分配内存。 - -```c -int* p = (int*) malloc(sizeof(int) * 10); - -for (int i = 0; i < 10; i++) - p[i] = i * 5; -``` - -上面示例中,`p`是一个整数指针,指向一段可以放置10个整数的内存,所以可以用作数组。 - -`malloc()`用来创建数组,有一个好处,就是它可以创建动态数组,即根据成员数量的不同,而创建长度不同的数组。 - -```c -int* p = (int*) malloc(n * sizeof(int)); -``` - -上面示例中,`malloc()`可以根据变量`n`的不同,动态为数组分配不同的大小。 - -注意,`malloc()`不会对所分配的内存进行初始化,里面还保存着原来的值。如果没有初始化,就使用这段内存,可能从里面读到以前的值。程序员要自己负责初始化,比如,字符串初始化可以使用`strcpy()`函数。 - -```c -char* p = malloc(4); -strcpy(p, "abc"); - -// or -p = "abc"; -``` - -上面示例中,字符指针`p`指向一段4个字节的内存,`strcpy()`将字符串“abc”拷贝放入这段内存,完成了这段内存的初始化。 - -## free() - -`free()`用于释放`malloc()`函数分配的内存,将这块内存还给系统以便重新使用,否则这个内存块会一直占用到程序运行结束。该函数的原型定义在头文件`stdlib.h`里面。 - -```c -void free(void* block) -``` - -上面代码中,`free()`的参数是`malloc()`返回的内存地址。下面就是用法实例。 - -```c -int* p = (int*) malloc(sizeof(int)); - -*p = 12; -free(p); -``` - -注意,分配的内存块一旦释放,就不应该再次操作已经释放的地址,也不应该再次使用`free()`对该地址释放第二次。 - -一个很常见的错误是,在函数内部分配了内存,但是函数调用结束时,没有使用`free()`释放内存。 - -```c -void gobble(double arr[], int n) { - double* temp = (double*) malloc(n * sizeof(double)); - // ... -} -``` - -上面示例中,函数`gobble()`内部分配了内存,但是没有写`free(temp)`。这会造成函数运行结束后,占用的内存块依然保留,如果多次调用`gobble()`,就会留下多个内存块。并且,由于指针`temp`已经消失了,也无法访问这些内存块,再次使用。 - -## calloc() - -`calloc()`函数的作用与`malloc()`相似,也是分配内存块。该函数的原型定义在头文件`stdlib.h`。 - -两者的区别主要有两点: - -(1)`calloc()`接受两个参数,第一个参数是某种数据类型的值的数量,第二个是该数据类型的单位字节长度。 - -```c -void* calloc(size_t n, size_t size); -``` - -`calloc()`的返回值也是一个 void 指针。分配失败时,返回 NULL。 - -(2)`calloc()`会将所分配的内存全部初始化为`0`。`malloc()`不会对内存进行初始化,如果想要初始化为`0`,还要额外调用`memset()`函数。 - -```c -int* p = calloc(10, sizeof(int)); - -// 等同于 -int* p = malloc(sizeof(int) * 10); -memset(p, 0, sizeof(int) * 10); -``` - -上面示例中,`calloc()`相当于`malloc() + memset()`。 - -`calloc()`分配的内存块,也要使用`free()`释放。 - -## realloc() - -`realloc()`函数用于修改已经分配的内存块的大小,可以放大也可以缩小,返回一个指向新的内存块的指针。如果分配不成功,返回 NULL。该函数的原型定义在头文件`stdlib.h`。 - -```c -void* realloc(void* block, size_t size) -``` - -它接受两个参数。 - -- `block`:已经分配好的内存块指针(由`malloc()`或`calloc()`或`realloc()`产生)。 -- `size`:该内存块的新大小,单位为字节。 - -`realloc()`可能返回一个全新的地址(数据也会自动复制过去),也可能返回跟原来一样的地址。`realloc()`优先在原有内存块上进行缩减,尽量不移动数据,所以通常是返回原先的地址。如果新内存块小于原来的大小,则丢弃超出的部分;如果大于原来的大小,则不对新增的部分进行初始化(程序员可以自动调用`memset()`)。 - -下面是一个例子,`b`是数组指针,`realloc()`动态调整它的大小。 - -```c -int* b; - -b = malloc(sizeof(int) * 10); -b = realloc(b, sizeof(int) * 2000); -``` - -上面示例中,指针`b`原来指向10个成员的整数数组,使用`realloc()`调整为2000个成员的数组。这就是手动分配数组内存的好处,可以在运行时随时调整数组的长度。 - -`realloc()`的第一个参数可以是 NULL,这时就相当于新建一个指针。 - -```c -char* p = realloc(NULL, 3490); -// 等同于 -char* p = malloc(3490); -``` - -如果`realloc()`的第二个参数是`0`,就会释放掉内存块。 - -由于有分配失败的可能,所以调用`realloc()`以后,最好检查一下它的返回值是否为 NULL。分配失败时,原有内存块中的数据不会发生改变。 - -```c -float* new_p = realloc(p, sizeof(*p * 40)); - -if (new_p == NULL) { - printf("Error reallocing\n"); - return 1; -} -``` - -注意,`realloc()`不会对内存块进行初始化。 - -## restrict 说明符 - -声明指针变量时,可以使用`restrict`说明符,告诉编译器,该块内存区域只有当前指针一种访问方式,其他指针不能读写该块内存。这种指针称为“受限指针”(restrict pointer)。 - -```c -int* restrict p; -p = malloc(sizeof(int)); -``` - -上面示例中,声明指针变量`p`时,加入了`restrict`说明符,使得`p`变成了受限指针。后面,当`p`指向`malloc()`函数返回的一块内存区域,就味着,该区域只有通过`p`来访问,不存在其他访问方式。 - -```c -int* restrict p; -p = malloc(sizeof(int)); - -int* q = p; -*q = 0; // 未定义行为 -``` - -上面示例中,另一个指针`q`与受限指针`p`指向同一块内存,现在该内存有`p`和`q`两种访问方式。这就违反了对编译器的承诺,后面通过`*q`对该内存区域赋值,会导致未定义行为。 - -## memcpy() - -`memcpy()`用于将一块内存拷贝到另一块内存。该函数的原型定义在头文件`string.h`。 - -```c -void* memcpy( - void* restrict dest, - void* restrict source, - size_t n -); -``` - -上面代码中,`dest`是目标地址,`source`是源地址,第三个参数`n`是要拷贝的字节数`n`。如果要拷贝10个 double 类型的数组成员,`n`就等于`10 * sizeof(double)`,而不是`10`。该函数会将从`source`开始的`n`个字节,拷贝到`dest`。 - -`dest`和`source`都是 void 指针,表示这里不限制指针类型,各种类型的内存数据都可以拷贝。两者都有 restrict 关键字,表示这两个内存块不应该有互相重叠的区域。 - -`memcpy()`的返回值是第一个参数,即目标地址的指针。 - -因为`memcpy()`只是将一段内存的值,复制到另一段内存,所以不需要知道内存里面的数据是什么类型。下面是复制字符串的例子。 - -```c -#include -#include - -int main(void) { - char s[] = "Goats!"; - char t[100]; - - memcpy(t, s, sizeof(s)); // 拷贝7个字节,包括终止符 - - printf("%s\n", t); // "Goats!" - - return 0; -} -``` - -上面示例中,字符串`s`所在的内存,被拷贝到字符数组`t`所在的内存。 - -`memcpy()`可以取代`strcpy()`进行字符串拷贝,而且是更好的方法,不仅更安全,速度也更快,它不检查字符串尾部的`\0`字符。 - -```c -char* s = "hello world"; - -size_t len = strlen(s) + 1; -char *c = malloc(len); - -if (c) { - // strcpy() 的写法 - strcpy(c, s); - - // memcpy() 的写法 - memcpy(c, s, len); -} -``` - -上面示例中,两种写法的效果完全一样,但是`memcpy()`的写法要好于`strcpy()`。 - -使用 void 指针,也可以自定义一个复制内存的函数。 - -```c -void* my_memcpy(void* dest, void* src, int byte_count) { - char* s = src; - char* d = dest; - - while (byte_count--) { - *d++ = *s++; - } - - return dest; - -} -``` - -上面示例中,不管传入的`dest`和`src`是什么类型的指针,将它们重新定义成一字节的 Char 指针,这样就可以逐字节进行复制。`*d++ = *s++`语句相当于先执行`*d = *s`(源字节的值复制给目标字节),然后各自移动到下一个字节。最后,返回复制后的`dest`指针,便于后续使用。 - -## memmove() - -`memmove()`函数用于将一段内存数据复制到另一段内存。它跟`memcpy()`的主要区别是,它允许目标区域与源区域有重叠。如果发生重叠,源区域的内容会被更改;如果没有重叠,它与`memcpy()`行为相同。 - -该函数的原型定义在头文件`string.h`。 - -```c -void* memmove( - void* dest, - void* source, - size_t n -); -``` - -上面代码中,`dest`是目标地址,`source`是源地址,`n`是要移动的字节数。`dest`和`source`都是 void 指针,表示可以移动任何类型的内存数据,两个内存区域可以有重叠。 - -`memmove()`返回值是第一个参数,即目标地址的指针。 - -```c -int a[100]; -// ... - -memmove(&a[0], &a[1], 99 * sizeof(int)); -``` - -上面示例中,从数组成员`a[1]`开始的99个成员,都向前移动一个位置。 - -下面是另一个例子。 - -```c -char x[] = "Home Sweet Home"; - -// 输出 Sweet Home Home -printf("%s\n", (char *) memmove(x, &x[5], 10)); -``` - -上面示例中,从字符串`x`的5号位置开始的10个字节,就是“Sweet Home”,`memmove()`将其前移到0号位置,所以`x`就变成了“Sweet Home Home”。 - -## memcmp() - -`memcmp()`函数用来比较两个内存区域。它的原型定义在`string.h`。 - -```c -int memcmp( - const void* s1, - const void* s2, - size_t n -); -``` - -它接受三个参数,前两个参数是用来比较的指针,第三个参数指定比较的字节数。 - -它的返回值是一个整数。两块内存区域的每个字节以字符形式解读,按照字典顺序进行比较,如果两者相同,返回`0`;如果`s1`大于`s2`,返回大于0的整数;如果`s1`小于`s2`,返回小于0的整数。 - -```c -char* s1 = "abc"; -char* s2 = "acd"; -int r = memcmp(s1, s2, 3); // 小于 0 -``` - -上面示例比较`s1`和`s2`的前三个字节,由于`s1`小于`s2`,所以`r`是一个小于0的整数,一般为-1。 - -下面是另一个例子。 - -```c -char s1[] = {'b', 'i', 'g', '\0', 'c', 'a', 'r'}; -char s2[] = {'b', 'i', 'g', '\0', 'c', 'a', 't'}; - -if (memcmp(s1, s2, 3) == 0) // true -if (memcmp(s1, s2, 4) == 0) // true -if (memcmp(s1, s2, 7) == 0) // false -``` - -上面示例展示了,`memcmp()`可以比较内部带有字符串终止符`\0`的内存区域。 diff --git a/wiki/programming-language/C/函数.md b/wiki/programming-language/C/函数.md deleted file mode 100644 index a57062c0..00000000 --- a/wiki/programming-language/C/函数.md +++ /dev/null @@ -1,520 +0,0 @@ ---- -id: 函数 -title: 函数 -sidebar_position: 8 -data: 2022年3月30日 ---- - -## 简介 - -函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。 - -```c -int plus_one(int n) { - return n + 1; -} -``` - -上面的代码声明了一个函数`plus_one()`。 - -函数声明的语法有以下几点,需要注意。 - -(1)返回值类型。函数声明时,首先需要给出返回值的类型,上例是`int`,表示函数`plus_one()`返回一个整数。 - -(2)参数。函数名后面的圆括号里面,需要声明参数的类型和参数名,`plus_one(int n)`表示这个函数有一个整数参数`n`。 - -(3)函数体。函数体要写在大括号里面,后面(即大括号外面)不需要加分号。大括号的起始位置,可以跟函数名在同一行,也可以另起一行,本书采用同一行的写法。 - -(4)`return`语句。`return`语句给出函数的返回值,程序运行到这一行,就会跳出函数体,结束函数的调用。如果函数没有返回值,可以省略`return`语句,或者写成`return;`。 - -调用函数时,只要在函数名后面加上圆括号就可以了,实际的参数放在圆括号里面,就像下面这样。 - -```c -int a = plus_one(13); -// a 等于 14 -``` - -函数调用时,参数个数必须与定义里面的参数个数一致,参数过多或过少都会报错。 - -```c -int plus_one(int n) { - return n + 1; -} - -plus_one(2, 2); // 报错 -plus_one(); // 报错 -``` - -上面示例中,函数`plus_one()`只能接受一个参数,传入两个参数或不传参数,都会报错。 - -函数必须声明后使用,否则会报错。也就是说,一定要在使用`plus_one()`之前,声明这个函数。如果像下面这样写,编译时会报错。 - -```c -int a = plus_one(13); - -int plus_one(int n) { - return n + 1; -} -``` - -上面示例中,在调用`plus_one()`之后,才声明这个函数,编译就会报错。 - -C 语言标准规定,函数只能声明在源码文件的顶层,不能声明在其他函数内部。 - -不返回值的函数,使用`void`关键字表示返回值的类型。没有参数的函数,声明时要用`void`关键字表示参数类型。 - -```c -void myFunc(void) { - // ... -} -``` - -上面的`myFunc()`函数,既没有返回值,调用时也不需要参数。 - -函数可以调用自身,这就叫做递归(recursion)。下面是斐波那契数列的例子。 - -```c -unsigned long Fibonacci(unsigned n) { - if (n > 2) - return Fibonacci(n - 1) + Fibonacci(n - 2); - else - return 1; -} -``` - -上面示例中,函数`Fibonacci()`调用了自身,大大简化了算法。 - -## main() - -C 语言规定,`main()`是程序的入口函数,即所有的程序一定要包含一个`main()`函数。程序总是从这个函数开始执行,如果没有该函数,程序就无法启动。其他函数都是通过它引入程序的。 - -`main()`的写法与其他函数一样,要给出返回值的类型和参数的类型,就像下面这样。 - -```c -int main(void) { - printf("Hello World\n"); - return 0; -} -``` - -上面示例中,最后的`return 0;`表示函数结束运行,返回`0`。 - -C 语言约定,返回值`0`表示函数运行成功,如果返回其他非零整数,就表示运行失败,代码出了问题。系统根据`main()`的返回值,作为整个程序的返回值,确定程序是否运行成功。 - -正常情况下,如果`main()`里面省略`return 0`这一行,编译器会自动加上,即`main()`的默认返回值为0。所以,写成下面这样,效果完全一样。 - -```c -int main(void) { - printf("Hello World\n"); -} -``` - -由于 C 语言只会对`main()`函数默认添加返回值,对其他函数不会这样做,所以建议总是保留`return`语句,以便形成统一的代码风格。 - -## 参数的传值引用 - -如果函数的参数是一个变量,那么调用时,传入的是这个变量的值的拷贝,而不是变量本身。 - -```c -void increment(int a) { - a++; -} - -int i = 10; -increment(i); - -printf("%d\n", i); // 10 -``` - -上面示例中,调用`increment(i)`以后,变量`i`本身不会发生变化,还是等于`10`。因为传入函数的是`i`的拷贝,而不是`i`本身,拷贝的变化,影响不到原始变量。这就叫做“传值引用”。 - -所以,如果参数变量发生变化,最好把它作为返回值传出来。 - -```c -int increment(int a) { - a++; - return a; -} - -int i = 10; -i = increment(i); - -printf("%d\n", i); // 11 -``` - -再看下面的例子,`Swap()`函数用来交换两个变量的值,由于传值引用,下面的写法不会生效。 - -```c -void Swap(int x, int y) { - int temp; - temp = x; - x = y; - y = temp; -} - -int a = 1; -int b = 2; -Swap(a, b); // 无效 -``` - -上面的写法不会产生交换变量值的效果,因为传入的变量是原始变量`a`和`b`的拷贝,不管函数内部怎么操作,都影响不了原始变量。 - -如果想要传入变量本身,只有一个办法,就是传入变量的地址。 - -```c -void Swap(int* x, int* y) { - int temp; - temp = *x; - *x = *y; - *y = temp; -} - -int a = 1; -int b = 2; -Swap(&a, &b); -``` - -上面示例中,通过传入变量`x`和`y`的地址,函数内部就可以直接操作该地址,从而实现交换两个变量的值。 - -虽然跟传参无关,这里特别提一下,函数不要返回内部变量的指针。 - -```c -int* f(void) { - int i; - // ... - return &i; -} -``` - -上面示例中,函数返回内部变量`i`的指针,这种写法是错的。因为当函数结束运行时,内部变量就消失了,这时指向内部变量`i`的内存地址就是无效的,再去使用这个地址是非常危险的。 - -## 函数指针 - -函数本身就是一段内存里面的代码,C 语言允许通过指针获取函数。 - -```c -void print(int a) { - printf("%d\n", a); -} - -void (*print_ptr)(int) = &print; -``` - -上面示例中,变量`print_ptr`是一个函数指针,它指向函数`print()`的地址。函数`print()`的地址可以用`&print`获得。注意,`(*print_ptr)`一定要写在圆括号里面,否则函数参数`(int)`的优先级高于`*`,整个式子就会变成`void* print_ptr(int)`。 - -有了函数指针,通过它也可以调用函数。 - -```c -(*print_ptr)(10); -// 等同于 -print(10); -``` - -比较特殊的是,C 语言还规定,函数名本身就是指向函数代码的指针,通过函数名就能获取函数地址。也就是说,`print`和`&print`是一回事。 - -```c -if (print == &print) // true -``` - -因此,上面代码的`print_ptr`等同于`print`。 - -```c -void (*print_ptr)(int) = &print; -// 或 -void (*print_ptr)(int) = print; - -if (print_ptr == print) // true -``` - -所以,对于任意函数,都有五种调用函数的写法。 - -```c -// 写法一 -print(10) - -// 写法二 -(*print)(10) - -// 写法三 -(&print)(10) - -// 写法四 -(*print_ptr)(10) - -// 写法五 -print_ptr(10) -``` - -为了简洁易读,一般情况下,函数名前面都不加`*`和`&`。 - -这种特性的一个应用是,如果一个函数的参数或返回值,也是一个函数,那么函数原型可以写成下面这样。 - -```c -int compute(int (*myfunc)(int), int, int); -``` - -上面示例可以清晰地表明,函数`compute()`的第一个参数也是一个函数。 - -## 函数原型 - -前面说过,函数必须先声明,后使用。由于程序总是先运行`main()`函数,导致所有其他函数都必须在`main()`函数之前声明。 - -```c -void func1(void) { -} - -void func2(void) { -} - -int main(void) { - func1(); - func2(); - return 0; -} -``` - -上面代码中,`main()`函数必须在最后声明,否则编译时会产生警告,找不到`func1()`或`func2()`的声明。 - -但是,`main()`是整个程序的入口,也是主要逻辑,放在最前面比较好。另一方面,对于函数较多的程序,保证每个函数的顺序正确,会变得很麻烦。 - -C 语言提供的解决方法是,只要在程序开头处给出函数原型,函数就可以先使用、后声明。所谓函数原型,就是提前告诉编译器,每个函数的返回类型和参数类型。其他信息都不需要,也不用包括函数体,具体的函数实现可以后面再补上。 - -```c -int twice(int); - -int main(int num) { - return twice(num); -} - -int twice(int num) { - return 2 * num; -} -``` - -上面示例中,函数`twice()`的实现是放在`main()`后面,但是代码头部先给出了函数原型,所以可以正确编译。只要提前给出函数原型,函数具体的实现放在哪里,就不重要了。 - -函数原型包括参数名也可以,虽然这样对于编译器是多余的,但是阅读代码的时候,可能有助于理解函数的意图。 - -```c -int twice(int); - -// 等同于 -int twice(int num); -``` - -上面示例中,`twice`函数的参数名`num`,无论是否出现在原型里面,都是可以的。 - -注意,函数原型必须以分号结尾。 - -一般来说,每个源码文件的头部,都会给出当前脚本使用的所有函数的原型。 - -## exit() - -`exit()`函数用来终止整个程序的运行。一旦执行到该函数,程序就会立即结束。该函数的原型定义在头文件`stdlib.h`里面。 - -`exit()`可以向程序外部返回一个值,它的参数就是程序的返回值。一般来说,使用两个常量作为它的参数:`EXIT_SUCCESS`(相当于 0)表示程序运行成功,`EXIT_FAILURE`(相当于 1)表示程序异常中止。这两个常数也是定义在`stdlib.h`里面。 - -```c -// 程序运行成功 -// 等同于 exit(0); -exit(EXIT_SUCCESS); - -// 程序异常中止 -// 等同于 exit(1); -exit(EXIT_FAILURE); -``` - -在`main()`函数里面,`exit()`等价于使用`return`语句。其他函数使用`exit()`,就是终止整个程序的运行,没有其他作用。 - -C 语言还提供了一个`atexit()`函数,用来登记`exit()`执行时额外执行的函数,用来做一些退出程序时的收尾工作。该函数的原型也是定义在头文件`stdlib.h`。 - -```c -int atexit(void (*func)(void)); -``` - -`atexit()`的参数是一个函数指针。注意,它的参数函数(下例的`print`)不能接受参数,也不能有返回值。 - -```c -void print(void) { - printf("something wrong!\n"); -} - -atexit(print); -exit(EXIT_FAILURE); -``` - -上面示例中,`exit()`执行时会先自动调用`atexit()`注册的`print()`函数,然后再终止程序。 - -## 函数说明符 - -C 语言提供了一些函数说明符,让函数用法更加明确。 - -### extern 说明符 - -对于多文件的项目,源码文件会用到其他文件声明的函数。这时,当前文件里面,需要给出外部函数的原型,并用`extern`说明该函数的定义来自其他文件。 - -```c -extern int foo(int arg1, char arg2); - -int main(void) { - int a = foo(2, 3); - // ... - return 0; -} -``` - -上面示例中,函数`foo()`定义在其他文件,`extern`告诉编译器当前文件不包含该函数的定义。 - -不过,由于函数原型默认就是`extern`,所以这里不加`extern`,效果是一样的。 - -### static 说明符 - -默认情况下,每次调用函数时,函数的内部变量都会重新初始化,不会保留上一次运行的值。`static`说明符可以改变这种行为。 - -`static`用于函数内部声明变量时,表示该变量只需要初始化一次,不需要在每次调用时都进行初始化。也就是说,它的值在两次调用之间保持不变。 - -```c -#include - -void counter(void) { - static int count = 1; // 只初始化一次 - printf("%d\n", count); - count++; -} - -int main(void) { - counter(); // 1 - counter(); // 2 - counter(); // 3 - counter(); // 4 -} -``` - -上面示例中,函数`counter()`的内部变量`count`,使用`static`说明符修饰,表明这个变量只初始化一次,以后每次调用时都会使用上一次的值,造成递增的效果。 - -注意,`static`修饰的变量初始化时,只能赋值为常量,不能赋值为变量。 - -```c -int i = 3; -static int j = i; // 错误 -``` - -上面示例中,`j`属于静态变量,初始化时不能赋值为另一个变量`i`。 - -另外,在块作用域中,`static`声明的变量有默认值`0`。 - -```c -static int foo; -// 等同于 -static int foo = 0; -``` - -`static`可以用来修饰函数本身。 - -```c -static int Twice(int num) { - int result = num * 2; - return(result); -} -``` - -上面示例中,`static`关键字表示该函数只能在当前文件里使用,如果没有这个关键字,其他文件也可以使用这个函数(通过声明函数原型)。 - -`static`也可以用在参数里面,修饰参数数组。 - -```c -int sum_array(int a[static 3], int n) { - // ... -} -``` - -上面示例中,`static`对程序行为不会有任何影响,只是用来告诉编译器,该数组长度至少为3,某些情况下可以加快程序运行速度。另外,需要注意的是,对于多维数组的参数,`static`仅可用于第一维的说明。 - -### const 说明符 - -函数参数里面的`const`说明符,表示函数内部不得修改该参数变量。 - -```c -void f(int* p) { - // ... -} -``` - -上面示例中,函数`f()`的参数是一个指针`p`,函数内部可能会改掉它所指向的值`*p`,从而影响到函数外部。 - -为了避免这种情况,可以在声明函数时,在指针参数前面加上`const`说明符,告诉编译器,函数内部不能修改该参数所指向的值。 - -```c -void f(const int* p) { - *p = 0; // 该行报错 -} -``` - -上面示例中,声明函数时,`const`指定不能修改指针`p`指向的值,所以`*p = 0`就会报错。 - -但是上面这种写法,只限制修改`p`所指向的值,而`p`本身的地址是可以修改的。 - -```c -void f(const int* p) { - int x = 13; - p = &x; // 允许修改 -} -``` - -上面示例中,`p`本身是可以修改,`const`只限定`*p`不能修改。 - -如果想限制修改`p`,可以把`const`放在`p`前面。 - -```c -void f(int* const p) { - int x = 13; - p = &x; // 该行报错 -} -``` - -如果想同时限制修改`p`和`*p`,需要使用两个`const`。 - -```c -void f(const int* const p) { - // ... -} -``` - -## 可变参数 - -有些函数的参数数量是不确定的,声明函数的时候,可以使用省略号`...`表示可变数量的参数。 - -```c -int printf(const char* format, ...); -``` - -上面示例是`printf()`函数的原型,除了第一个参数,其他参数的数量是可变的,与格式字符串里面的占位符数量有关。这时,就可以用`...`表示可变数量的参数。 - -注意,`...`符号必须放在参数序列的结尾,否则会报错。 - -头文件`stdarg.h`定义了一些宏,可以操作可变参数。 - -(1)`va_list`:一个数据类型,用来定义一个可变参数对象。它必须在操作可变参数时,首先使用。 - -(2)`va_start`:一个函数,用来初始化可变参数对象。它接受两个参数,第一个参数是可变参数对象,第二个参数是原始函数里面,可变参数之前的那个参数,用来为可变参数定位。 - -(3)`va_arg`:一个函数,用来取出当前那个可变参数,每次调用后,内部指针就会指向下一个可变参数。它接受两个参数,第一个是可变参数对象,第二个是当前可变参数的类型。 - -(4)`va_end`:一个函数,用来清理可变参数对象。 - -下面是一个例子。 - -```c -double average(int i, ...) { - double total = 0; - va_list ap; - va_start(ap, i); - for (int j = 1; j <= i; ++j) { - total += va_arg(ap, double); - } - va_end(ap); - return total / i; -} -``` - -上面示例中,`va_list ap`定义`ap`为可变参数对象,`va_start(ap, i)`将参数`i`后面的参数统一放入`ap`,`va_arg(ap, double)`用来从`ap`依次取出一个参数,并且指定该参数为 double 类型,`va_end(ap)`用来清理可变参数对象。 diff --git a/wiki/programming-language/C/变量.md b/wiki/programming-language/C/变量.md deleted file mode 100644 index 0cb0593a..00000000 --- a/wiki/programming-language/C/变量.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -id: 变量 -title: 变量 -sidebar_position: 3 -data: 2022年3月30日 ---- - -变量(variable)可以理解成一块内存区域的名字。通过变量名,可以引用这块内存区域,获取里面存储的值。由于值可能发生变化,所以称为变量,否则就是常量了。 - -## 变量名 - -变量名在 C 语言里面属于标识符(identifier),命名有严格的规范。 - -- 只能由字母(包括大写和小写)、数字和下划线(`_`)组成。 -- 不能以数字开头。 -- 长度不能超过63个字符。 - -下面是一些无效变量名的例子。 - -```c -$zj -j**p -2cat -Hot-tab -tax rate -don't -``` - -上面示例中,每一行的变量名都是无效的。 - -变量名区分大小写,`star`、`Star`、`STAR`都是不同的变量。 - -并非所有的词都能用作变量名,有些词在 C 语言里面有特殊含义(比如`int`),另一些词是命令(比如`continue`),它们都称为关键字,不能用作变量名。另外,C 语言还保留了一些词,供未来使用,这些保留字也不能用作变量名。下面就是 C 语言主要的关键字和保留字。 - -> auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, restrict, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while - -另外,两个下划线开头的变量名,以及一个下划线 + 大写英文字母开头的变量名,都是系统保留的,自己不应该起这样的变量名。 - -## 变量的声明 - -C 语言的变量,必须先声明后使用。如果一个变量没有声明,就直接使用,会报错。 - -每个变量都有自己的类型(type)。声明变量时,必须把变量的类型告诉编译器。 - -```c -int height; -``` - -上面代码声明了变量`height`,并且指定类型为`int`(整数)。 - -如果几个变量具有相同类型,可以在同一行声明。 - -```c -int height, width; - -// 等同于 -int height; -int width; -``` - -注意,声明变量的语句必须以分号结尾。 - -一旦声明,变量的类型就不能在运行时修改。 - -## 变量的赋值 - -C 语言会在变量声明时,就为它分配内存空间,但是不会清除内存里面原来的值。这导致声明变量以后,变量会是一个随机的值。所以,变量一定要赋值以后才能使用。 - -赋值操作通过赋值运算符(`=`)完成。 - -```c -int num; -num = 42; -``` - -上面示例中,第一行声明了一个整数变量`num`,第二行给这个变量赋值。 - -变量的值应该与类型一致,不应该赋予不是同一个类型的值,比如`num`的类型是整数,就不应该赋值为小数。虽然 C 语言会自动转换类型,但是应该避免赋值运算符两侧的类型不一致。 - -变量的声明和赋值,也可以写在一行。 - -```c -int num = 42; -``` - -多个相同类型变量的赋值,可以写在同一行。 - -```c -int x = 1, y = 2; -``` - -注意,赋值表达式有返回值,等于等号右边的值。 - -```c -int x, y; - -x = 1; -y = (x = 2 * x); -``` - -上面代码中,变量`y`的值就是赋值表达式(`x = 2 * x`)的返回值`2`。 - -由于赋值表达式有返回值,所以 C 语言可以写出多重赋值表达式。 - -```c -int x, y, z, m, n; - -x = y = z = m = n = 3; -``` - -上面的代码是合法代码,一次为多个变量赋值。赋值运算符是从右到左执行,所以先为`n`赋值,然后依次为`m`、`z`、`y`和`x`赋值。 - -C 语言有左值(left value)和右值(right value)的概念。左值是可以放在赋值运算符左边的值,一般是变量;右值是可以放在赋值运算符右边的值,一般是一个具体的值。这是为了强调有些值不能放在赋值运算符的左边,比如`x = 1`是合法的表达式,但是`1 = x`就会报错。 - -## 变量的作用域 - -作用域(scope)指的是变量生效的范围。C 语言的变量作用域主要有两种:文件作用域(file scope)和块作用域(block scope)。 - -文件作用域(file scope)指的是,在源码文件顶层声明的变量,从声明的位置到文件结束都有效。 - -```c -int x = 1; - -int main(void) { - printf("%i\n", x); -} -``` - -上面示例中,变量`x`是在文件顶层声明的,从声明位置开始的整个当前文件都是它的作用域,可以在这个范围的任何地方读取这个变量,比如函数`main()`内部就可以读取这个变量。 - -块作用域(block scope)指的是由大括号(`{}`)组成的代码块,它形成一个单独的作用域。凡是在块作用域里面声明的变量,只在当前代码块有效,代码块外部不可见。 - -```c -int a = 12; - -if (a == 12) { - int b = 99; - printf("%d %d\n", a, b); // 12 99 -} - -printf("%d\n", a); // 12 -printf("%d\n", b); // 出错 -``` - -上面例子中,变量`b`是在`if`代码块里面声明的,所以对于大括号外面的代码,这个变量是不存在的。 - -代码块可以嵌套,即代码块内部还有代码块,这时就形成了多层的块作用域。它的规则是:内层代码块可以使用外层声明的变量,但外层不可以使用内层声明的变量。如果内层的变量与外层同名,那么会在当前作用域覆盖外层变量。 - -```c -{ - int i = 10; - - { - int i = 20; - printf("%d\n", i); // 20 - } - - printf("%d\n", i); // 10 -} -``` - -上面示例中,内层和外层都有一个变量`i`,每个作用域都会优先使用当前作用域声明的`i`。 - -最常见的块作用域就是函数,函数内部声明的变量,对于函数外部是不可见的。`for`循环也是一个块作用域,循环变量只对循环体内部可见,外部是不可见的。 - -```c -for (int i = 0; i < 10; i++) - printf("%d\n", i); - -printf("%d\n", i); // 出错 -``` - -上面示例中,`for`循环省略了大括号,但依然是一个块作用域,在外部读取循环变量`i`,编译器就会报错。 diff --git a/wiki/programming-language/C/变量说明符.md b/wiki/programming-language/C/变量说明符.md deleted file mode 100644 index 5da902d1..00000000 --- a/wiki/programming-language/C/变量说明符.md +++ /dev/null @@ -1,244 +0,0 @@ ---- -id: 变量说明符 -title: 变量说明符 -sidebar_position: 19 -data: 2022年3月30日 ---- - -C 语言允许声明变量的时候,加上一些特定的说明符(specifier),为编译器提供变量行为的额外信息。它的主要作用是帮助编译器优化代码,有时会对程序行为产生影响。 - -## const - -`const`说明符表示变量是只读的,不得被修改。 - -```c -const double PI = 3.14159; -PI = 3; // 报错 -``` - -上面示例里面的`const`,表示变量`PI`的值不应改变。如果改变的话,编译器会报错。 - -对于数组,`const`表示数组成员不能修改。 - -```c -const int arr[] = {1, 2, 3, 4}; -arr[0] = 5; // 报错 -``` - -上面示例中,`const`使得数组`arr`的成员无法修改。 - -对于指针变量,`const`有两种写法,含义是不一样的。如果`const`在`*`前面,表示指针指向的值不可修改。 - -```c -// const 表示指向的值 *x 不能修改 -int const * x -// 或者 -const int * x -``` - -下面示例中,对`x`指向的值进行修改导致报错。 - -```c -int p = 1 -const int* x = &p; - -(*x)++; // 报错 -``` - -如果`const`在`*`后面,表示指针包含的地址不可修改。 - -```c -// const 表示地址 x 不能修改 -int* const x -``` - -下面示例中,对`x`进行修改导致报错。 - -```c -int p = 1 -int* const x = &p; - -x++; // 报错 -``` - -这两者可以结合起来。 - -```c -const char* const x; -``` - -上面示例中,指针变量`x`指向一个字符串。两个`const`意味着,`x`包含的内存地址以及`x`指向的字符串,都不能修改。 - -`const`的一个用途,就是防止函数体内修改函数参数。如果某个参数在函数体内不会被修改,可以在函数声明时,对该参数添加`const`说明符。这样的话,使用这个函数的人看到原型里面的`const`,就知道调用函数前后,参数数组保持不变。 - -```c -void find(const int* arr, int n); -``` - -上面示例中,函数`find`的参数数组`arr`有`const`说明符,就说明该数组在函数内部将保持不变。 - -有一种情况需要注意,如果一个指针变量指向`const`变量,那么该指针变量也不应该被修改。 - -```c -const int i = 1; -int* j = &i; -*j = 2; // 报错 -``` - -上面示例中,`j`是一个指针变量,指向变量`i`,即`j`和`i`指向同一个地址。`j`本身没有`const`说明符,但是`i`有。这种情况下,`j`指向的值也不能被修改。 - -## static - -`static`说明符对于全局变量和局部变量有不同的含义。 - -(1)用于局部变量(位于块作用域内部)。 - -`static`用于函数内部声明的局部变量时,表示该变量的值会在函数每次执行后得到保留,下次执行时不会进行初始化,就类似于一个只用于函数内部的全局变量。由于不必每次执行函数时,都对该变量进行初始化,这样可以提高函数的执行速度,详见《函数》一章。 - -(2)用于全局变量(位于块作用域外部)。 - -`static`用于函数外部声明的全局变量时,表示该变量只用于当前文件,其他源码文件不可以引用该变量,即该变量不会被链接(link)。 - -`static`修饰的变量,初始化时,值不能等于变量,必须是常量。 - -```c -int n = 10; -static m = n; // 报错 -``` - -上面示例中,变量`m`有`static`修饰,它的值如果等于变量`n`,就会报错,必须等于常量。 - -只在当前文件里面使用的函数,也可以声明为`static`,表明该函数只在当前文件使用,其他文件可以定义同名函数。 - -```c -static int g(int i); -``` - -## auto - -`auto`说明符表示该变量的存储,由编译器自主分配内存空间,且只存在于定义时所在的作用域,退出作用域时会自动释放。 - -由于只要不是`extern`的变量(外部变量),都是由编译器自主分配内存空间的,这属于默认行为,所以该说明符没有实际作用,一般都省略不写。 - -```c -auto int a; -// 等同于 -int a; -``` - -## extern - -`extern`说明符表示,该变量在其他文件里面声明,没有必要在当前文件里面为它分配空间。通常用来表示,该变量是多个文件共享的。 - -```c -extern int a; -``` - -上面代码中,`a`是`extern`变量,表示该变量在其他文件里面定义和初始化,当前文件不必为它分配存储空间。 - -但是,变量声明时,同时进行初始化,`extern`就会无效。 - -```c -// extern 无效 -extern int i = 0; - -// 等同于 -int i = 0; -``` - -上面代码中,`extern`对变量初始化的声明是无效的。这是为了防止多个`extern`对同一个变量进行多次初始化。 - -函数内部使用`extern`声明变量,就相当于该变量是静态存储,每次执行时都要从外部获取它的值。 - -函数本身默认是`extern`,即该函数可以被外部文件共享,通常省略`extern`不写。如果只希望函数在当前文件可用,那就需要在函数前面加上`static`。 - -```c -extern int f(int i); -// 等同于 -int f(int i); -``` - -## register - -`register`说明符向编译器表示,该变量是经常使用的,应该提供最快的读取速度,所以应该放进寄存器。但是,编译器可以忽略这个说明符,不一定按照这个指示行事。 - -```c -register int a; -``` - -上面示例中,`register`提示编译器,变量`a`会经常用到,要为它提供最快的读取速度。 - -`register`只对声明在代码块内部的变量有效。 - -设为`register`的变量,不能获取它的地址。 - -```c -register int a; -int *p = &a; // 编译器报错 -``` - -上面示例中,`&a`会报错,因为变量`a`可能放在寄存器里面,无法获取内存地址。 - -如果数组设为`register`,也不能获取整个数组或任一个数组成员的地址。 - -```c -register int a[] = {11, 22, 33, 44, 55}; - -int p = a; // 报错 -int a = *(a + 2); // 报错 -``` - -历史上,CPU 内部的缓存,称为寄存器(register)。与内存相比,寄存器的访问速度快得多,所以使用它们可以提高速度。但是它们不在内存之中,所以没有内存地址,这就是为什么不能获取指向它们的指针地址。现代编译器已经有巨大的进步,会尽可能优化代码,按照自己的规则决定怎么利用好寄存器,取得最佳的执行速度,所以可能会忽视代码里面的`register`说明符,不保证一定会把这些变量放到寄存器。 - -## volatile - -`volatile`说明符表示所声明的变量,可能会预想不到地发生变化(即其他程序可能会更改它的值),不受当前程序控制,因此编译器不要对这类变量进行优化,每次使用时都应该查询一下它的值。硬件设备的编程中,这个说明符很常用。 - -```c -volatile int foo; -volatile int* bar; -``` - -`volatile`的目的是阻止编译器对变量行为进行优化,请看下面的例子。 - -```c -int foo = x; -// 其他语句,假设没有改变 x 的值 -int bar = x; -``` - -上面代码中,由于变量`foo`和`bar`都等于`x`,而且`x`的值也没有发生变化,所以编译器可能会把`x`放入缓存,直接从缓存读取值(而不是从 x 的原始内存位置读取),然后对`foo`和`bar`进行赋值。如果`x`被设定为`volatile`,编译器就不会把它放入缓存,每次都从原始位置去取`x`的值,因为在两次读取之间,其他程序可能会改变`x`。 - -## restrict - -`restrict`说明符允许编译器优化某些代码。它只能用于指针,表明该指针是访问数据的唯一方式。 - -```c -int* restrict pt = (int*) malloc(10 * sizeof(int)); -``` - -上面示例中,`restrict`表示变量`pt`是访问 malloc 所分配内存的唯一方式。 - -下面例子的变量`foo`,就不能使用`restrict`修饰符。 - -```c -int foo[10]; -int* bar = foo; -``` - -上面示例中,变量`foo`指向的内存,可以用`foo`访问,也可以用`bar`访问,因此就不能将`foo`设为 restrict。 - -如果编译器知道某块内存只能用一个方式访问,可能可以更好地优化代码,因为不用担心其他地方会修改值。 - -`restrict`用于函数参数时,表示参数的内存地址之间没有重叠。 - -```c -void swap(int* restrict a, int* restrict b) { - int t; - t = *a; - *a = *b; - *b = t; -} -``` - -上面示例中,函数参数声明里的`restrict`表示,参数`a`和参数`b`的内存地址没有重叠。 diff --git a/wiki/programming-language/C/命令行环境.md b/wiki/programming-language/C/命令行环境.md deleted file mode 100644 index caa242d3..00000000 --- a/wiki/programming-language/C/命令行环境.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -id: 命令行环境 -title: 命令行环境 -sidebar_position: 21 -data: 2022年3月30日 ---- - -## 命令行参数 - -C 语言程序可以从命令行接收参数。 - -```bash -./foo hello world -``` - -上面示例中,程序`foo`接收了两个命令行参数`hello`和`world`。 - -程序内部怎么拿到命令行参数呢?C 语言会把命令行输入的内容,放在一个数组里面。`main()`函数的参数可以接收到这个数组。 - -```c -#include - -int main(int argc, char* argv[]) { - for (int i = 0; i < argc; i++) { - printf("arg %d: %s\n", i, argv[i]); - } -} -``` - -上面示例中,`main()`函数有两个参数`argc`(argument count)和`argv`(argument variable)。这两个参数的名字可以任意取,但是一般来说,约定俗成就是使用这两个词。 - -第一个参数`argc`是命令行参数的数量,由于程序名也被计算在内,所以严格地说`argc`是参数数量 + 1。 - -第二个参数`argv`是一个数组,保存了所有的命令行输入,它的每个成员是一个字符串指针。 - -以`./foo hello world`为例,`argc`是3,表示命令行输入有三个组成部分:`./foo`、`hello`、`world`。数组`argv`用来获取这些输入,`argv[0]`是程序名`./foo`,`argv[1]`是`hello`,`argv[2]`是`world`。一般来说,`argv[1]`到`argv[argc - 1]`依次是命令行的所有参数。`argv[argc]`则是一个空指针 NULL。 - -由于字符串指针可以看成是字符数组,所以下面三种写法是等价的。 - -```c -// 写法一 -int main(int argc, char* argv[]) - -// 写法二 -int main(int argc, char** argv) - -// 写法三 -int main(int argc, char argv[][]) -``` - -另一方面,每个命令行参数既可以写成数组形式`argv[i]`,也可以写成指针形式`*(argv + i)`。 - -利用`argc`,可以限定函数只能有多少个参数。 - -```c -#include - -int main(int argc, char** argv) { - if (argc != 3) { - printf("usage: mult x y\n"); - return 1; - } - - printf("%d\n", atoi(argv[1]) * atoi(argv[2])); - return 0; -} -``` - -上面示例中,`argc`不等于`3`就会报错,这样就限定了程序必须有两个参数,才能运行。 - -另外,`argv`数组的最后一个成员是 NULL 指针(`argv[argc] == NULL`)。所以,参数的遍历也可以写成下面这样。 - -```c -for (char** p = argv; *p != NULL; p++) { - printf("arg: %s\n", *p); -} -``` - -上面示例中,指针`p`依次移动,指向`argv`的每个成员,一旦移到空指针 NULL,就表示遍历结束。由于`argv`的地址是固定的,不能执行自增运算(`argv++`),所以必须通过一个中间变量`p`,完成遍历操作。 - -## 退出状态 - -C 语言规定,如果`main()`函数没有`return`语句,那么结束运行的时候,默认会添加一句`return 0`,即返回整数`0`。这就是为什么`main()`语句通常约定返回一个整数值,并且返回整数`0`表示程序运行成功。如果返回非零值,就表示程序运行出了问题。 - -Bash 的环境变量`$?`可以用来读取上一个命令的返回值,从而知道是否运行成功。 - -```bash -$ ./foo hello world -$ echo $? -0 -``` - -上面示例中,`echo $?`用来打印环境变量`$?`的值,该值为`0`,就表示上一条命令运行成功,否则就是运行失败。 - -注意,只有`main()`会默认添加`return 0`,其他函数都没有这个机制。 - -## 环境变量 - -C 语言提供了`getenv()`函数(原型在`stdlib.h`)用来读取命令行环境变量。 - -```c -#include -#include - -int main(void) { - char* val = getenv("HOME"); - - if (val == NULL) { - printf("Cannot find the HOME environment variable\n"); - return 1; - } - - printf("Value: %s\n", val); - return 0; -} -``` - -上面示例中,`getenv("HOME")`用来获取命令行的环境变量`$HOME`,如果这个变量为空(`NULL`),则程序报错返回。 diff --git a/wiki/programming-language/C/多字节字符.md b/wiki/programming-language/C/多字节字符.md deleted file mode 100644 index d1efdeeb..00000000 --- a/wiki/programming-language/C/多字节字符.md +++ /dev/null @@ -1,306 +0,0 @@ ---- -id: 多字节字符 -title: 多字节字符 -sidebar_position: 21 -data: 2022年3月30日 ---- - - -本章介绍 C 语言如何处理非英语字符。 - -## Unicode 简介 - -C 语言诞生时,只考虑了英语字符,使用7位的 ASCII 码表示所有字符。ASCII 码的范围是0到127,也就是100多个字符,所以`char`类型只占用一个字节。 - -但是,如果处理非英语字符,一个字节就不够了,单单是中文,就至少有几万个字符,字符集就势必使用多个字节表示。 - -最初,不同国家有自己的字符编码方式,这样不便于多种字符的混用。因此,后来就逐渐统一到 Unicode 编码,将所有字符放入一个字符集。 - -Unicode 为每个字符提供一个号码,称为码点(code point),其中0到127的部分,跟 ASCII 码是重合的。通常使用“U+十六进制码点”表示一个字符,比如`U+0041`表示字母`A`。 - -Unicode 编码目前一共包含了100多万个字符,码点范围是 U+0000 到 U+10FFFF。完整表达整个 Unicode 字符集,至少需要三个字节。但是,并不是所有文档都需要那么多字符,比如对于 ASCII 码就够用的英语文档,如果每个字符使用三个字节表示,就会比单字节表示的文件体积大出三倍。 - -为了适应不同的使用需求,Unicode 标准委员会提供了三种不同的表示方法,表示 Unicode 码点。 - -- UTF-8:使用1个到4个字节,表示一个码点。不同的字符占用的字节数不一样。 -- UTF-16:对于U+0000 到 U+FFFF 的字符(称为基本平面),使用2个字节表示一个码点。其他字符使用4个字节。 -- UTF-32:统一使用4个字节,表示一个码点。 - -其中,UTF-8 的使用最为广泛,因为对于 ASCII 字符(U+0000 到 U+007F),它只使用一个字节表示,这就跟 ASCII 的编码方式完全一样。 - -C 语言提供了两个宏,表示当前系统支持的编码字节长度。这两个宏都定义在头文件`limits.h`。 - -- `MB_LEN_MAX`:任意支持地区的最大字节长度,定义在`limits.h`。 -- `MB_CUR_MAX`:当前语言的最大字节长度,总是小于或等于`MB_LEN_MAX`,定义在`stdlib.h`。 - -## 字符的表示方法 - -字符表示法的本质,是将每个字符映射为一个整数,然后从编码表获得该整数对应的字符。 - -C 语言提供了不同的写法,用来表示字符的整数号码。 - -- `\123`:以八进制值表示一个字符,斜杠后面需要三个数字。 -- `\x4D`:以十六进制表示一个字符,`\x`后面是十六进制整数。 -- `\u2620`:以 Unicode 码点表示一个字符(不适用于 ASCII 字符),码点以十六进制表示,`\u`后面需要4个字符。 -- `\U0001243F`:以 Unicode 码点表示一个字符(不适用于 ASCII 字符),码点以十六进制表示,`\U`后面需要8个字符。 - -```c -printf("ABC\n"); -printf("\101\102\103\n"); -printf("\x41\x42\x43\n"); -``` - -上面三行都会输出“ABC”。 - -```c -printf("\u2022 Bullet 1\n"); -printf("\U00002022 Bullet 1\n"); -``` - -上面两行都会输出“• Bullet 1”。 - -## 多字节字符的表示 - -C 语言预设只有基本字符,才能使用字面量表示,其它字符都应该使用码点表示,并且当前系统还必须支持该码点的编码方法。 - -所谓基本字符,指的是所有可打印的 ASCII 字符,但是有三个字符除外:`@`、`$`、`` ` ``。 - -因此,遇到非英语字符,应该将其写成 Unicode 码点形式。 - -```c -char* s = "\u6625\u5929"; -printf("%s\n", s); // 春天 -``` - -上面代码会输出中文“春天”。 - -如果当前系统是 UTF-8 编码,可以直接用字面量表示多字节字符。 - -```c -char* s = "春天"; -printf("%s\n", s); -``` - -注意,`\u + 码点`和`\U + 码点`的写法,不能用来表示 ASCII 码字符(码点小于`0xA0`的字符),只有三个字符除外:`0x24`(`$`),`0x40`(`@`)和`0x60`(`` ` ``)。 - -```c -char* s = "\u0024\u0040\u0060"; -printf("%s\n", s); // @$` -``` - -上面代码会输出三个 Unicode 字符“@$`”,但是其它 ASCII 字符都不能用这种表示法表示。 - -为了保证程序执行时,字符能够正确解读,最好将程序环境切换到本地化环境。 - -```c -setlocale(LC_ALL, ""); -``` - -上面代码中,使用`setlocale()`切换执行环境到系统的本地化语言。`setlocale()`的原型定义在头文件`locale.h`,详见标准库部分的《locale.h》章节。 - -像下面这样,指定编码语言也可以。 - -```c -setlocale(LC_ALL, "zh_CN.UTF-8"); -``` - -上面代码将程序执行环境,切换到中文环境的 UTF-8 编码。 - -C 语言允许使用`u8`前缀,对多字节字符串指定编码方式为 UTF-8。 - -```c -char* s = u8"春天"; -printf("%s\n", s); -``` - -一旦字符串里面包含多字节字符,就意味着字符串的字节数与字符数不再一一对应了。比如,字符串的长度为10字节,就不再是包含10个字符,而可能只包含7个字符、5个字符等等。 - -```c -setlocale(LC_ALL, ""); - -char* s = "春天"; -printf("%d\n", strlen(s)); // 6 -``` - -上面示例中,字符串`s`只包含两个字符,但是`strlen()`返回的结果却是6,表示这两个字符一共占据了6个字节。 - -C 语言的字符串函数只针对单字节字符有效,对于多字节字符都会失效,比如`strtok()`、`strchr()`、`strspn()`、`toupper()`、`tolower()`、`isalpha()`等不会得到正确结果。 - -## 宽字符 - -上一小节的多字节字符串,每个字符的字节宽度是可变的。这种编码方式虽然使用起来方便,但是很不利于字符串处理,因此必须逐一检查每个字符占用的字节数。所以除了这种方式,C 语言还提供了确定宽度的多字节字符存储方式,称为宽字符(wide character)。 - -所谓“宽字符”,就是每个字符占用的字节数是固定的,要么是2个字节,要么是4个字节。这样的话,就很容易快速处理。 - -宽字符有一个单独的数据类型 wchar_t,每个宽字符都是这个类型。它属于整数类型的别名,可能是有符号的,也可能是无符号的,由当前实现决定。该类型的长度为16位(2个字节)或32位(4个字节),足以容纳当前系统的所有字符。它定义在头文件`wchar.h`里面。 - -宽字符的字面量必须加上前缀“L”,否则 C 语言会把字面量当作窄字符类型处理。 - -```c -setlocale(LC_ALL, ""); - -wchar_t c = L'牛'; -printf("%lc\n", c); - -wchar_t* s = L"春天"; -printf("%ls\n", s); -``` - -上面示例中,前缀“L”在单引号前面,表示宽字符,对应`printf()`的占位符为`%lc`;在双引号前面,表示宽字符串,对应`printf()`的占位符为`%ls`。 - -宽字符串的结尾也有一个空字符,不过是宽空字符,占用多个字节。 - -处理宽字符,需要使用宽字符专用的函数,绝大部分都定义在头文件`wchar.h`。 - -## 多字节字符处理函数 - -### mblen() - -`mblen()`函数返回一个多字节字符占用的字符数。它的原型定义在头文件`stdlib.h`。 - -```c -int mblen(const char* mbstr, size_t n); -``` - -它接受两个参数,第一个参数是多字节字符串指针,一般会检查该字符串的第一个字符;第二个参数是需要检查的字节数,这个数字不能大于当前系统单个字符占用的最大字节,一般使用`MB_CUR_MAX`。 - -它的返回值是该字符占用的字节数。如果当前字符是空的宽字符,则返回`0`;如果当前字符不是有效的多字节字符,则返回`-1`。 - -```c -setlocale(LC_ALL, ""); - -char* mbs1 = "春天"; -printf("%d\n", mblen(mbs1, MB_CUR_MAX)); // 3 - -char* mbs2 = "abc"; -printf("%d\n", mblen(mbs2, MB_CUR_MAX)); // 1 -``` - -上面示例中,字符串“春天”的第一个字符“春”,占用3个字节;字符串“abc”的第一个字符“a”,占用1个字节。 - -### wctomb() - -`wctomb()`函数(wide character to multibyte)用于将宽字符转为多字节字符。它的原型定义在头文件`stdlib.h`。 - -```c -int wctomb(char* s, wchar_t wc); -``` - -`wctomb()`接受两个参数,第一个参数是作为目标的多字节字符数组,第二个参数是需要转换的一个宽字符。它的返回值是多字节字符存储占用的字节数量,如果无法转换,则返回`-1`。 - -```c -setlocale(LC_ALL, ""); - -wchar_t wc = L'牛'; -char mbStr[10] = ""; - -int nBytes = 0; -nBytes = wctomb(mbStr, wc); - -printf("%s\n", mbStr); // 牛 -printf("%d\n", nBytes); // 3 -``` - -上面示例中,`wctomb()`将宽字符“牛”转为多字节字符,`wctomb()`的返回值表示转换后的多字节字符占用3个字节。 - -### mbtowc() - -`mbtowc()`用于将多字节字符转为宽字符。它的原型定义在头文件`stdlib.h`。 - -```c -int mbtowc( - wchar_t* wchar, - const char* mbchar, - size_t count -); -``` - -它接受3个参数,第一个参数是作为目标的宽字符指针,第二个参数是待转换的多字节字符指针,第三个参数是多字节字符的字节数。 - -它的返回值是多字节字符的字节数,如果转换失败,则返回`-1`。 - -```c -setlocale(LC_ALL, ""); - -char* mbchar = "牛"; -wchar_t wc; -wchar_t* pwc = &wc; - -int nBytes = 0; -nBytes = mbtowc(pwc, mbchar, 3); - -printf("%d\n", nBytes); // 3 -printf("%lc\n", *pwc); // 牛 -``` - -上面示例中,`mbtowc()`将多字节字符“牛”转为宽字符`wc`,返回值是`mbchar`占用的字节数(占用3个字节)。 - -### wcstombs() - -`wcstombs()`用来将宽字符串转换为多字节字符串。它的原型定义在头文件`stdlib.h`。 - -```c -size_t wcstombs( - char* mbstr, - const wchar_t* wcstr, - size_t count -); -``` - -它接受三个参数,第一个参数`mbstr`是目标的多字节字符串指针,第二个参数`wcstr`是待转换的宽字符串指针,第三个参数`count`是用来存储多字节字符串的最大字节数。 - -如果转换成功,它的返回值是成功转换后的多字节字符串的字节数,不包括尾部的字符串终止符;如果转换失败,则返回`-1`。 - -下面是一个例子。 - -```c -setlocale(LC_ALL, ""); - -char mbs[20]; -wchar_t* wcs = L"春天"; - -int nBytes = 0; -nBytes = wcstombs(mbs, wcs, 20); - -printf("%s\n", mbs); // 春天 -printf("%d\n", nBytes); // 6 -``` - -上面示例中,`wcstombs()`将宽字符串`wcs`转为多字节字符串`mbs`,返回值`6`表示写入`mbs`的字符串占用6个字节,不包括尾部的字符串终止符。 - -如果`wcstombs()`的第一个参数是 NULL,则返回转换成功所需要的目标字符串的字节数。 - -### mbstowcs() - -`mbstowcs()`用来将多字节字符串转换为宽字符串。它的原型定义在头文件`stdlib.h`。 - -```c -size_t mbstowcs( - wchar_t* wcstr, - const char* mbstr, - size_t count -); -``` - -它接受三个参数,第一个参数`wcstr`是目标宽字符串,第二个参数`mbstr`是待转换的多字节字符串,第三个参数是待转换的多字节字符串的最大字符数。 - -转换成功时,它的返回值是成功转换的多字节字符的数量;转换失败时,返回`-1`。如果返回值与第三个参数相同,那么转换后的宽字符串不是以 NULL 结尾的。 - -下面是一个例子。 - -```c -setlocale(LC_ALL, ""); - -char* mbs = "天气不错"; -wchar_t wcs[20]; - -int nBytes = 0; -nBytes = mbstowcs(wcs, mbs, 20); - -printf("%ls\n", wcs); // 天气不错 -printf("%d\n", nBytes); // 4 -``` - -上面示例中,多字节字符串`mbs`被`mbstowcs()`转为宽字符串,成功转换了4个字符,所以该函数的返回值为4。 - -如果`mbstowcs()`的第一个参数为`NULL`,则返回目标宽字符串会包含的字符数量。 diff --git a/wiki/programming-language/C/多文件项目.md b/wiki/programming-language/C/多文件项目.md deleted file mode 100644 index be3bfc2d..00000000 --- a/wiki/programming-language/C/多文件项目.md +++ /dev/null @@ -1,236 +0,0 @@ ---- -id: 多文件项目 -title: 多文件项目 -sidebar_position: 20 -data: 2022年3月30日 ---- - - -## 简介 - -一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。 - -假定一个项目有两个源码文件`foo.c`和`bar.c`,其中`foo.c`是主文件,`bar.c`是库文件。所谓“主文件”,就是包含了`main()`函数的项目入口文件,里面会引用库文件定义的各种函数。 - -```c -// File foo.c -#include - -int main(void) { - printf("%d\n", add(2, 3)); // 5! -} -``` - -上面代码中,主文件`foo.c`调用了函数`add()`,这个函数是在库文件`bar.c`里面定义的。 - -```c -// File bar.c - -int add(int x, int y) { - return x + y; -} -``` - -现在,将这两个文件一起编译。 - -```bash -$ gcc -o foo foo.c bar.c - -# 更省事的写法 -$ gcc -o foo *.c -``` - -上面命令中,gcc 的`-o`参数指定生成的二进制可执行文件的文件名,本例是`foo`。 - -这个命令运行后,编译器会发出警告,原因是在编译`foo.c`的过程中,编译器发现一个不认识的函数`add()`,`foo.c`里面没有这个函数的原型或者定义。因此,最好修改一下`foo.c`,在文件头部加入`add()`的原型。 - -```c -// File foo.c -#include - -int add(int, int); - -int main(void) { - printf("%d\n", add(2, 3)); // 5! -} -``` - -现在再编译就没有警告了。 - -你可能马上就会想到,如果有多个文件都使用这个函数`add()`,那么每个文件都需要加入函数原型。一旦需要修改函数`add()`(比如改变参数的数量),就会非常麻烦,需要每个文件逐一改动。所以,通常的做法是新建一个专门的头文件`bar.h`,放置所有在`bar.c`里面定义的函数的原型。 - -```c -// File bar.h - -int add(int, int); -``` - -然后使用`include`命令,在用到这个函数的源码文件里面加载这个头文件`bar.h`。 - -```c -// File foo.c - -#include -#include "bar.h" - -int main(void) { - printf("%d\n", add(2, 3)); // 5! -} -``` - -上面代码中,`#include "bar.h"`表示加入头文件`bar.h`。这个文件没有放在尖括号里面,表示它是用户提供的;它没有写路径,就表示与当前源码文件在同一个目录。 - -然后,最好在`bar.c`里面也加载这个头文件,这样可以让编译器验证,函数原型与函数定义是否一致。 - -```c -// File bar.c -#include "bar.h" - -int add(int a, int b) { - return a + b; -} -``` - -现在重新编译,就可以顺利得到二进制可执行文件。 - -```bash -gcc -o foo foo.c bar.c -``` - -## 重复加载 - -头文件里面还可以加载其他头文件,因此有可能产生重复加载。比如,`a.h`和`b.h`都加载了`c.h`,然后`foo.c`同时加载了`a.h`和`b.h`,这意味着`foo.c`会编译两次`c.h`。 - -最好避免这种重复加载,虽然多次定义同一个函数原型并不会报错,但是有些语句重复使用会报错,比如多次重复定义同一个 Struct 数据结构。解决重复加载的常见方法是,在头文件里面设置一个专门的宏,加载时一旦发现这个宏存在,就不再继续加载当前文件了。 - -```c -// File bar.h -#ifndef BAR_H - #define BAR_H - int add(int, int); -#endif -``` - -上面示例中,头文件`bar.h`使用`#ifndef`和`#endif`设置了一个条件判断。每当加载这个头文件时,就会执行这个判断,查看有没有设置过宏`BAR_H`。如果设置过了,表明这个头文件已经加载过了,就不再重复加载了,反之就先设置一下这个宏,然后加载函数原型。 - -## extern 说明符 - -当前文件还可以使用其他文件定义的变量,这时要使用`extern`说明符,在当前文件中声明,这个变量是其他文件定义的。 - -```c -extern int myVar; -``` - -上面示例中,`extern`说明符告诉编译器,变量`myvar`是其他脚本文件声明的,不需要在这里为它分配内存空间。 - -由于不需要分配内存空间,所以`extern`声明数组时,不需要给出数组长度。 - -```c -extern int a[]; -``` - -这种共享变量的声明,可以直接写在源码文件里面,也可以放在头文件中,通过`#include`指令加载。 - -## static 说明符 - -正常情况下,当前文件内部的全局变量,可以被其他文件使用。有时候,不希望发生这种情况,而是希望某个变量只局限在当前文件内部使用,不要被其他文件引用。 - -这时可以在声明变量的时候,使用`static`关键字,使得该变量变成当前文件的私有变量。 - -```c -static int foo = 3; -``` - -上面示例中,变量`foo`只能在当前文件里面使用,其他文件不能引用。 - -## 编译策略 - -多个源码文件的项目,编译时需要所有文件一起编译。哪怕只是修改了一行,也需要从头编译,非常耗费时间。 - -为了节省时间,通常的做法是将编译拆分成两个步骤。第一步,使用 GCC 的`-c`参数,将每个源码文件单独编译为对象文件(object file)。第二步,将所有对象文件链接在一起,合并生成一个二进制可执行文件。 - -```bash -$ gcc -c foo.c # 生成 foo.o -$ gcc -c bar.c # 生成 bar.o - -# 更省事的写法 -$ gcc -c *.c -``` - -上面命令为源码文件`foo.c`和`bar.c`,分别生成对象文件`foo.o`和`bar.o`。 - -对象文件不是可执行文件,只是编译过程中的一个阶段性产物,文件名与源码文件相同,但是后缀名变成了`.o`。 - -得到所有的对象文件以后,再次使用`gcc`命令,将它们通过链接,合并生成一个可执行文件。 - -```bash -$ gcc -o foo foo.o bar.o - -# 更省事的写法 -$ gcc -o foo *.o -``` - -以后,修改了哪一个源文件,就将这个文件重新编译成对象文件,其他文件不用重新编译,可以继续使用原来的对象文件,最后再将所有对象文件重新链接一次就可以了。由于链接的耗时大大短于编译,这样做就节省了大量时间。 - -## make 命令 - -大型项目的编译,如果全部手动完成,是非常麻烦的,容易出错。一般会使用专门的自动化编译工具,比如 make。 - -make 是一个命令行工具,使用时会自动在当前目录下搜索配置文件 makefile(也可以写成 Makefile)。该文件定义了所有的编译规则,每个编译规则对应一个编译产物。为了得到这个编译产物,它需要知道两件事。 - -- 依赖项(生成该编译产物,需要用到哪些文件) -- 生成命令(生成该编译产物的命令) - -比如,对象文件`foo.o`是一个编译产物,它的依赖项是`foo.c`,生成命令是`gcc -c foo.c`。对应的编译规则如下: - -```c -foo.o: foo.c - gcc -c foo.c -``` - -上面示例中,编译规则由两行组成。第一行首先是编译产物,冒号后面是它的依赖项,第二行则是生成命令。 - -注意,第二行的缩进必须使用 Tab 键,如果使用空格键会报错。 - -完整的配置文件 makefile 由多个编译规则组成,可能是下面的样子。 - -```c -foo: foo.o bar.o - gcc -o foo foo.o bar.o - -foo.o: bar.h foo.c - gcc -c foo.c - -bar.o: bar.h bar.c - gcc -c bar.c -``` - -上面是 makefile 的一个示例文件。它包含三个编译规则,对应三个编译产物(`foo.o`、`bar.o`和`foo`),每个编译规则之间使用空行分隔。 - -有了 makefile,编译时,只要在 make 命令后面指定编译目标(编译产物的名字),就会自动调用对应的编译规则。 - -```bash -$ make foo.o - -# or -$ make bar.o - -# or -$ make foo -``` - -上面示例中,make 命令会根据不同的命令,生成不同的编译产物。 - -如果省略了编译目标,`make`命令会执行第一条编译规则,构建相应的产物。 - -```bash -make -``` - -上面示例中,`make`后面没有编译目标,所以会执行 makefile 的第一条编译规则,本例是`make foo`。由于用户期望执行`make`后得到最终的可执行文件,所以建议总是把最终可执行文件的编译规则,放在 makefile 文件的第一条。makefile 本身对编译规则没有顺序要求。 - -make 命令的强大之处在于,它不是每次执行命令,都会进行编译,而是会检查是否有必要重新编译。具体方法是,通过检查每个源码文件的时间戳,确定在上次编译之后,哪些文件发生过变动。然后,重新编译那些受到影响的编译产物(即编译产物直接或间接依赖于那些发生变动的源码文件),不受影响的编译产物,就不会重新编译。 - -举例来说,上次编译之后,修改了`foo.c`,没有修改`bar.c`和`bar.h`。于是,重新运行`make foo`命令时,Make 就会发现`bar.c`和`bar.h`没有变动过,因此不用重新编译`bar.o`,只需要重新编译`foo.o`。有了新的`foo.o`以后,再跟`bar.o`一起,重新编译成新的可执行文件`foo`。 - -Make 这样设计的最大好处,就是自动处理编译过程,只重新编译变动过的文件,因此大大节省了时间。 diff --git a/wiki/programming-language/C/字符串.md b/wiki/programming-language/C/字符串.md deleted file mode 100644 index 0b18872f..00000000 --- a/wiki/programming-language/C/字符串.md +++ /dev/null @@ -1,600 +0,0 @@ ---- -id: 字符串 -title: 字符串 -sidebar_position: 10 -data: 2022年3月30日 ---- - -## 简介 - -C 语言没有单独的字符串类型,字符串被当作字符数组,即`char`类型的数组。比如,字符串“Hello”是当作数组`{'H', 'e', 'l', 'l', 'o'}`处理的。 - -编译器会给数组分配一段连续内存,所有字符储存在相邻的内存单元之中。在字符串结尾,C 语言会自动添加一个全是二进制`0`的字节,写作`\0`字符,表示字符串结束。字符`\0`不同于字符`0`,前者的 ASCII 码是0(二进制形式`00000000`),后者的 ASCII 码是48(二进制形式`00110000`)。所以,字符串“Hello”实际储存的数组是`{'H', 'e', 'l', 'l', 'o', '\0'}`。 - -所有字符串的最后一个字符,都是`\0`。这样做的好处是,C 语言不需要知道字符串的长度,就可以读取内存里面的字符串,只要发现有一个字符是`\0`,那么就知道字符串结束了。 - -```c -char localString[10]; -``` - -上面示例声明了一个10个成员的字符数组,可以当作字符串。由于必须留一个位置给`\0`,所以最多只能容纳9个字符的字符串。 - -字符串写成数组的形式,是非常麻烦的。C 语言提供了一种简写法,双引号之中的字符,会被自动视为字符数组。 - -```c -{'H', 'e', 'l', 'l', 'o', '\0'} - -// 等价于 -"Hello" -``` - -上面两种字符串的写法是等价的,内部存储方式都是一样的。双引号里面的字符串,不用自己添加结尾字符`\0`,C 语言会自动添加。 - -注意,双引号里面是字符串,单引号里面是字符,两者不能互换。如果把`Hello`放在单引号里面,编译器会报错。 - -```c -// 报错 -'Hello' -``` - -另一方面,即使双引号里面只有一个字符(比如`"a"`),也依然被处理成字符串(存储为2个字节),而不是字符`'a'`(存储为1个字节)。 - -如果字符串内部包含双引号,则该双引号需要使用反斜杠转义。 - -```c -"She replied, \"It does.\"" -``` - -反斜杠还可以表示其他特殊字符,比如换行符(`\n`)、制表符(`\t`)等。 - -```c -"Hello, world!\n" -``` - -如果字符串过长,可以在需要折行的地方,使用反斜杠(`\`)结尾,将一行拆成多行。 - -```c -"hello \ -world" -``` - -上面示例中,第一行尾部的反斜杠,将字符串拆成两行。 - -上面这种写法有一个缺点,就是第二行必须顶格书写,如果想包含缩进,那么缩进也会被计入字符串。为了解决这个问题,C 语言允许合并多个字符串字面量,只要这些字符串之间没有间隔,或者只有空格,C 语言会将它们自动合并。 - -```c -char greeting[50] = "Hello, ""how are you ""today!"; -// 等同于 -char greeting[50] = "Hello, how are you today!"; -``` - -这种新写法支持多行字符串的合并。 - -```c -char greeting[50] = "Hello, " - "how are you " - "today!"; -``` - -`printf()`使用占位符`%s`输出字符串。 - -```c -printf("%s\n", "hello world") -``` - -## 字符串变量的声明 - -字符串变量可以声明成一个字符数组,也可以声明成一个指针,指向字符数组。 - -```c -// 写法一 -char s[14] = "Hello, world!"; - -// 写法二 -char* s = "Hello, world!"; -``` - -上面两种写法都声明了一个字符串变量`s`。如果采用第一种写法,由于字符数组的长度可以让编译器自动计算,所以声明时可以省略字符数组的长度。 - -```c -char s[] = "Hello, world!"; -``` - -上面示例中,编译器会将数组`s`的长度指定为14,正好容纳后面的字符串。 - -字符数组的长度,可以大于字符串的实际长度。 - -```c -char s[50] = "hello"; -``` - -上面示例中,字符数组`s`的长度是`50`,但是字符串“hello”的实际长度只有6(包含结尾符号`\0`),所以后面空出来的44个位置,都会被初始化为`\0`。 - -字符数组的长度,不能小于字符串的实际长度。 - -```c -char s[5] = "hello"; -``` - -上面示例中,字符串数组`s`的长度是`5`,小于字符串“hello”的实际长度6,这时编译器会报错。因为如果只将前5个字符写入,而省略最后的结尾符号`\0`,这很可能导致后面的字符串相关代码出错。 - -字符指针和字符数组,这两种声明字符串变量的写法基本是等价的,但是有两个差异。 - -第一个差异是,指针指向的字符串,在 C 语言内部被当作常量,不能修改字符串本身。 - -```c -char* s = "Hello, world!"; -s[0] = 'z'; // 错误 -``` - -上面代码使用指针,声明了一个字符串变量,然后修改了字符串的第一个字符。这种写法是错的,会导致难以预测的后果,执行时很可能会报错。 - -如果使用数组声明字符串变量,就没有这个问题,可以修改数组的任意成员。 - -```c -char s[] = "Hello, world!"; -s[0] = 'z'; -``` - -为什么字符串声明为指针时不能修改,声明为数组时就可以修改?原因是系统会将字符串的字面量保存在内存的常量区,这个区是不允许用户修改的。声明为指针时,指针变量存储的值是一个指向常量区的内存地址,因此用户不能通过这个地址去修改常量区。但是,声明为数组时,编译器会给数组单独分配一段内存,字符串字面量会被编译器解释成字符数组,逐个字符写入这段新分配的内存之中,而这段新内存是允许修改的。 - -为了提醒用户,字符串声明为指针后不得修改,可以在声明时使用`const`说明符,保证该字符串是只读的。 - -```c -const char* s = "Hello, world!"; -``` - -上面字符串声明为指针时,使用了`const`说明符,就保证了该字符串无法修改。一旦修改,编译器肯定会报错。 - -第二个差异是,指针变量可以指向其它字符串。 - -```c -char* s = "hello"; -s = "world"; -``` - -上面示例中,字符指针可以指向另一个字符串。 - -但是,字符数组变量不能指向另一个字符串。 - -```c -char s[] = "hello"; -s = "world"; // 报错 -``` - -上面示例中,字符数组的数组名,总是指向初始化时的字符串地址,不能修改。 - -同样的原因,声明字符数组后,不能直接用字符串赋值。 - -```c -char s[10]; -s = "abc"; // 错误 -``` - -上面示例中,不能直接把字符串赋值给字符数组变量,会报错。原因是字符数组的变量名,跟所指向的数组是绑定的,不能指向另一个地址。 - -为什么数组变量不能赋值为另一个数组?原因是数组变量所在的地址无法改变,或者说,编译器一旦为数组变量分配地址后,这个地址就绑定这个数组变量了,这种绑定关系是不变的。C 语言也因此规定,数组变量是一个不可修改的左值,即不能用赋值运算符为它重新赋值。 - -想要重新赋值,必须使用 C 语言原生提供的`strcpy()`函数,通过字符串拷贝完成赋值。这样做以后,数组变量的地址还是不变的,即`strcpy()`只是在原地址写入新的字符串,而不是让数组变量指向新的地址。 - -```c -char s[10]; -strcpy(s, "abc"); -``` - -上面示例中,`strcpy()`函数把字符串`abc`拷贝给变量`s`,这个函数的详细用法会在后面介绍。 - -## strlen() - -`strlen()`函数返回字符串的字节长度,不包括末尾的空字符`\0`。该函数的原型如下。 - -```c -// string.h -size_t strlen(const char* s); -``` - -它的参数是字符串变量,返回的是`size_t`类型的无符号整数,除非是极长的字符串,一般情况下当作`int`类型处理即可。下面是一个用法实例。 - -```c -char* str = "hello"; -int len = strlen(str); // 5 -``` - -`strlen()`的原型在标准库的`string.h`文件中定义,使用时需要加载头文件`string.h`。 - -```c -#include -#include - -int main(void) { - char* s = "Hello, world!"; - printf("The string is %zd characters long.\n", strlen(s)); -} -``` - -注意,字符串长度(`strlen()`)与字符串变量长度(`sizeof()`),是两个不同的概念。 - -```c -char s[50] = "hello"; -printf("%d\n", strlen(s)); // 5 -printf("%d\n", sizeof(s)); // 50 -``` - -上面示例中,字符串长度是5,字符串变量长度是50。 - -如果不使用这个函数,可以通过判断字符串末尾的`\0`,自己计算字符串长度。 - -```c -int my_strlen(char *s) { - int count = 0; - while (s[count] != '\0') - count++; - return count; -} -``` - -## strcpy() - -字符串的复制,不能使用赋值运算符,直接将一个字符串赋值给字符数组变量。 - -```c -char str1[10]; -char str2[10]; - -str1 = "abc"; // 报错 -str2 = str1; // 报错 -``` - -上面两种字符串的复制写法,都是错的。因为数组的变量名是一个固定的地址,不能修改,使其指向另一个地址。 - -如果是字符指针,赋值运算符(`=`)只是将一个指针的地址复制给另一个指针,而不是复制字符串。 - -```c -char* s1; -char* s2; - -s1 = "abc"; -s2 = s1; -``` - -上面代码可以运行,结果是两个指针变量`s1`和`s2`指向同一字符串,而不是将字符串`s1`的内容复制给`s2`。 - -C 语言提供了`strcpy()`函数,用于将一个字符串的内容复制到另一个字符串,相当于字符串赋值。该函数的原型定义在`string.h`头文件里面。 - -```c -strcpy(char dest[], const char source[]) -``` - -`strcpy()`接受两个参数,第一个参数是目的字符串数组,第二个参数是源字符串数组。复制字符串之前,必须要保证第一个参数的长度不小于第二个参数,否则虽然不会报错,但会溢出第一个字符串变量的边界,发生难以预料的结果。第二个参数的`const`说明符,表示这个函数不会修改第二个字符串。 - -```c -#include -#include - -int main(void) { - char s[] = "Hello, world!"; - char t[100]; - - strcpy(t, s); - - t[0] = 'z'; - printf("%s\n", s); // "Hello, world!" - printf("%s\n", t); // "zello, world!" -} -``` - -上面示例将变量`s`的值,拷贝一份放到变量`t`,变成两个不同的字符串,修改一个不会影响到另一个。另外,变量`t`的长度大于`s`,复制后多余的位置(结束标志`\0`后面的位置)都为随机值。 - -`strcpy()`也可以用于字符数组的赋值。 - -```c -char str[10]; -strcpy(str, "abcd"); -``` - -上面示例将字符数组变量,赋值为字符串“abcd”。 - -`strcpy()`的返回值是一个字符串指针(即`char*`),指向第一个参数。 - -```c -char* s1 = "beast"; -char s2[40] = "Be the best that you can be."; -char* ps; - -ps = strcpy(s2 + 7, s1); - -puts(s2); // Be the beast -puts(ps); // beast -``` - -上面示例中,从`s2`的第7个位置开始拷贝字符串`beast`,前面的位置不变。这导致`s2`后面的内容都被截去了,因为会连`beast`结尾的空字符一起拷贝。`strcpy()`返回的是一个指针,指向拷贝开始的位置。 - -`strcpy()`返回值的另一个用途,是连续为多个字符数组赋值。 - -```c -strcpy(str1, strcpy(str2, "abcd")); -``` - -上面示例调用两次`strcpy()`,完成两个字符串变量的赋值。 - -另外,`strcpy()`的第一个参数最好是一个已经声明的数组,而不是声明后没有进行初始化的字符指针。 - -```c -char* str; -strcpy(str, "hello world"); // 错误 -``` - -上面的代码是有问题的。`strcpy()`将字符串分配给指针变量`str`,但是`str`并没有进行初始化,指向的是一个随机的位置,因此字符串可能被复制到任意地方。 - -如果不用`strcpy()`,自己实现字符串的拷贝,可以用下面的代码。 - -```c -char* strcpy(char* dest, const char* source) { - char* ptr = dest; - while (*dest++ = *source++); - return ptr; -} - -int main(void) { - char str[25]; - strcpy(str, "hello world"); - printf("%s\n", str); - return 0; -} -``` - -上面代码中,关键的一行是`while (*dest++ = *source++)`,这是一个循环,依次将`source`的每个字符赋值给`dest`,然后移向下一个位置,直到遇到`\0`,循环判断条件不再为真,从而跳出循环。其中,`*dest++`这个表达式等同于`*(dest++)`,即先返回`dest`这个地址,再进行自增运算移向下一个位置,而`*dest`可以对当前位置赋值。 - -`strcpy()`函数有安全风险,因为它并不检查目标字符串的长度,是否足够容纳源字符串的副本,可能导致写入溢出。如果不能保证不会发生溢出,建议使用`strncpy()`函数代替。 - -## strncpy() - -`strncpy()`跟`strcpy()`的用法完全一样,只是多了第3个参数,用来指定复制的最大字符数,防止溢出目标字符串变量的边界。 - -```c -char* strncpy( - char* dest, - char* src, - size_t n -); -``` - -上面原型中,第三个参数`n`定义了复制的最大字符数。如果达到最大字符数以后,源字符串仍然没有复制完,就会停止复制,这时目的字符串结尾将没有终止符`\0`,这一点务必注意。如果源字符串的字符数小于`n`,则`strncpy()`的行为与`strcpy()`完全一致。 - -```c -strncpy(str1, str2, sizeof(str1) - 1); -str1[sizeof(str1) - 1] = '\0'; -``` - -上面示例中,字符串`str2`复制给`str1`,但是复制长度最多为`str1`的长度减去1,`str1`剩下的最后一位用于写入字符串的结尾标志`\0`。这是因为`strncpy()`不会自己添加`\0`,如果复制的字符串片段不包含结尾标志,就需要手动添加。 - -`strncpy()`也可以用来拷贝部分字符串。 - -```c -char s1[40]; -char s2[12] = "hello world"; - -strncpy(s1, s2, 5); -s1[5] = '\0'; - -printf("%s\n", s1); // hello -``` - -上面示例中,指定只拷贝前5个字符。 - -## strcat() - -`strcat()`函数用于连接字符串。它接受两个字符串作为参数,把第二个字符串的副本添加到第一个字符串的末尾。这个函数会改变第一个字符串,但是第二个字符串不变。 - -该函数的原型定义在`string.h`头文件里面。 - -```c -char* strcat(char* s1, const char* s2); -``` - -`strcat()`的返回值是一个字符串指针,指向第一个参数。 - -```c -char s1[12] = "hello"; -char s2[6] = "world"; - -strcat(s1, s2); -puts(s1); // "helloworld" -``` - -上面示例中,调用`strcat()`以后,可以看到字符串`s1`的值变了。 - -注意,`strcat()`的第一个参数的长度,必须足以容纳添加第二个参数字符串。否则,拼接后的字符串会溢出第一个字符串的边界,写入相邻的内存单元,这是很危险的,建议使用下面的`strncat()`代替。 - -## strncat() - -`strncat()`用于连接两个字符串,用法与`strcat()`完全一致,只是增加了第三个参数,指定最大添加的字符数。在添加过程中,一旦达到指定的字符数,或者在源字符串中遇到空字符`\0`,就不再添加了。它的原型定义在`string.h`头文件里面。 - -```c -char* strncat( - const char* dest, - const char* src, - size_t n -); -``` - -`strncat()`返回第一个参数,即目标字符串指针。 - -为了保证连接后的字符串,不超过目标字符串的长度,`strncat()`通常会写成下面这样。 - -```c -strncat( - str1, - str2, - sizeof(str1) - strlen(str1) - 1 -); -``` - -`strncat()`总是会在拼接结果的结尾,自动添加空字符`\0`,所以第三个参数的最大值,应该是`str1`的变量长度减去`str1`的字符串长度,再减去`1`。下面是一个用法实例。 - -```c -char s1[10] = "Monday"; -char s2[8] = "Tuesday"; - -strncat(s1, s2, 3); -puts(s1); // "MondayTue" -``` - -上面示例中,`s1`的变量长度是10,字符长度是6,两者相减后再减去1,得到`3`,表明`s1`最多可以再添加三个字符,所以得到的结果是`MondayTue`。 - -## strcmp() - -如果要比较两个字符串,无法直接比较,只能一个个字符进行比较,C 语言提供了`strcmp()`函数。 - -`strcmp()`函数用于比较两个字符串的内容。该函数的原型如下,定义在`string.h`头文件里面。 - -```c -int strcmp(const char* s1, const char* s2); -``` - -按照字典顺序,如果两个字符串相同,返回值为`0`;如果`s1`小于`s2`,`strcmp()`返回值小于0;如果`s1`大于`s2`,返回值大于0。 - -下面是一个用法示例。 - -```c -// s1 = Happy New Year -// s2 = Happy New Year -// s3 = Happy Holidays - -strcmp(s1, s2) // 0 -strcmp(s1, s3) // 大于 0 -strcmp(s3, s1) // 小于 0 -``` - -注意,`strcmp()`只用来比较字符串,不用来比较字符。因为字符就是小整数,直接用相等运算符(`==`)就能比较。所以,不要把字符类型(`char`)的值,放入`strcmp()`当作参数。 - -## strncmp() - -由于`strcmp()`比较的是整个字符串,C 语言又提供了`strncmp()`函数,只比较到指定的位置。 - -该函数增加了第三个参数,指定了比较的字符数。它的原型定义在`string.h`头文件里面。 - -```c -int strncmp( - const char* s1, - const char* s2, - size_t n -); -``` - -它的返回值与`strcmp()`一样。如果两个字符串相同,返回值为`0`;如果`s1`小于`s2`,`strcmp()`返回值小于0;如果`s1`大于`s2`,返回值大于0。 - -下面是一个例子。 - -```c -char s1[12] = "hello world"; -char s2[12] = "hello C"; - -if (strncmp(s1, s2, 5) == 0) { - printf("They all have hello.\n"); -} -``` - -上面示例只比较两个字符串的前5个字符。 - -## sprintf(),snprintf() - -`sprintf()`函数跟`printf()`类似,但是用于将数据写入字符串,而不是输出到显示器。该函数的原型定义在`stdio.h`头文件里面。 - -```c -int sprintf(char* s, const char* format, ...); -``` - -`sprintf()`的第一个参数是字符串指针变量,其余参数和`printf()`相同,即第二个参数是格式字符串,后面的参数是待写入的变量列表。 - -```c -char first[6] = "hello"; -char last[6] = "world"; -char s[40]; - -sprintf(s, "%s %s", first, last); - -printf("%s\n", s); // hello world -``` - -上面示例中,`sprintf()`将输出内容组合成“hello world”,然后放入了变量`s`。 - -`sprintf()`的返回值是写入变量的字符数量(不计入尾部的空字符`\0`)。如果遇到错误,返回负值。 - -`sprintf()`有严重的安全风险,如果写入的字符串过长,超过了目标字符串的长度,`sprintf()`依然会将其写入,导致发生溢出。为了控制写入的字符串的长度,C 语言又提供了另一个函数`snprintf()`。 - -`snprintf()`只比`sprintf()`多了一个参数`n`,用来控制写入变量的字符串不超过`n - 1`个字符,剩下一个位置写入空字符`\0`。下面是它的原型。 - -```c -int snprintf(char*s, size_t n, const char* format, ...); -``` - -`snprintf()`总是会自动写入字符串结尾的空字符。如果你尝试写入的字符数超过指定的最大字符数,`snprintf()`会写入 n - 1 个字符,留出最后一个位置写入空字符。 - -下面是一个例子。 - -```c -snprintf(s, 12, "%s %s", "hello", "world"); -``` - -上面的例子中,`snprintf()`的第二个参数是12,表示写入字符串的最大长度不超过12(包括尾部的空字符)。 - -`snprintf()`的返回值是写入格式字符串的字符数量(不计入尾部的空字符`\0`)。如果`n`足够大,返回值应该小于`n`,但是有时候格式字符串的长度可能大于`n`,那么这时返回值会大于`n`,但实际上真正写入变量的还是`n-1`个字符。如果遇到错误,返回一个负值。因此,返回值只有在非负并且小于`n`时,才能确认完整的格式字符串写入了变量。 - -## 字符串数组 - -如果一个数组的每个成员都是一个字符串,需要通过二维的字符数组实现。每个字符串本身是一个字符数组,多个字符串再组成一个数组。 - -```c -char weekdays[7][10] = { - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday" -}; -``` - -上面示例就是一个字符串数组,一共包含7个字符串,所以第一维的长度是7。其中,最长的字符串的长度是10(含结尾的终止符`\0`),所以第二维的长度统一设为10。 - -因为第一维的长度,编译器可以自动计算,所以可以省略。 - -```c -char weekdays[][10] = { - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday" -}; -``` - -上面示例中,二维数组第一维的长度,可以由编译器根据后面的赋值,自动计算,所以可以不写。 - -数组的第二维,长度统一定为10,有点浪费空间,因为大多数成员的长度都小于10。解决方法就是把数组的第二维,从字符数组改成字符指针。 - -```c -char* weekdays[] = { - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday" -}; -``` - -上面的字符串数组,其实是一个一维数组,成员就是7个字符指针,每个指针指向一个字符串(字符数组)。 - -遍历字符串数组的写法如下。 - -```c -for (int i = 0; i < 7; i++) { - printf("%s\n", weekdays[i]); -} -``` diff --git a/wiki/programming-language/C/指针.md b/wiki/programming-language/C/指针.md deleted file mode 100644 index acbb134a..00000000 --- a/wiki/programming-language/C/指针.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -id: 指针 -title: 指针 -sidebar_position: 7 -data: 2022年3月30日 ---- - -指针是 C 语言最重要的概念之一,也是最难理解的概念之一。 - -## 简介 - -指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。 - -字符`*`表示指针,通常跟在类型关键字的后面,表示指针指向的是什么类型的值。比如,`char*`表示一个指向字符的指针,`float*`表示一个指向`float`类型的值的指针。 - -```c -int* intPtr; -``` - -上面示例声明了一个变量`intPtr`,它是一个指针,指向的内存地址存放的是一个整数。 - -星号`*`可以放在变量名与类型关键字之间的任何地方,下面的写法都是有效的。 - -```c -int *intPtr; -int * intPtr; -int* intPtr; -``` - -本书使用星号紧跟在类型关键字后面的写法(即`int* intPtr;`),因为这样可以体现,指针变量就是一个普通变量,只不过它的值是内存地址而已。 - -这种写法有一个地方需要注意,如果同一行声明两个指针变量,那么需要写成下面这样。 - -```c -// 正确 -int * foo, * bar; - -// 错误 -int* foo, bar; -``` - -上面示例中,第二行的执行结果是,`foo`是整数指针变量,而`bar`是整数变量,即`*`只对第一个变量生效。 - -一个指针指向的可能还是指针,这时就要用两个星号`**`表示。 - -```c -int** foo; -``` - -上面示例表示变量`foo`是一个指针,指向的还是一个指针,第二个指针指向的则是一个整数。 - -## * 运算符 - -`*`这个符号除了表示指针以外,还可以作为运算符,用来取出指针变量所指向的内存地址里面的值。 - -```c -void increment(int* p) { - *p = *p + 1; -} -``` - -上面示例中,函数`increment()`的参数是一个整数指针`p`。函数体里面,`*p`就表示指针`p`所指向的那个值。对`*p`赋值,就表示改变指针所指向的那个地址里面的值。 - -上面函数的作用是将参数值加`1`。该函数没有返回值,因为传入的是地址,函数体内部对该地址包含的值的操作,会影响到函数外部,所以不需要返回值。事实上,函数内部通过指针,将值传到外部,是 C 语言的常用方法。 - -变量地址而不是变量值传入函数,还有一个好处。对于需要大量存储空间的大型变量,复制变量值传入函数,非常浪费时间和空间,不如传入指针来得高效。 - -## & 运算符 - -`&`运算符用来取出一个变量所在的内存地址。 - -```c -int x = 1; -printf("x's address is %p\n", &x); -``` - -上面示例中,`x`是一个整数变量,`&x`就是`x`的值所在的内存地址。`printf()`的`%p`是内存地址的占位符,可以打印出内存地址。 - -上一小节中,参数变量加`1`的函数,可以像下面这样使用。 - -```c -void increment(int* p) { - *p = *p + 1; -} - -int x = 1; -increment(&x); -printf("%d\n", x); // 2 -``` - -上面示例中,调用`increment()`函数以后,变量`x`的值就增加了1,原因就在于传入函数的是变量`x`的地址`&x`。 - -`&`运算符与`*`运算符互为逆运算,下面的表达式总是成立。 - -```c -int i = 5; - -if (i == *(&i)) // 正确 -``` - -## 指针变量的初始化 - -声明指针变量之后,编译器会为指针变量本身分配一个内存空间,但是这个内存空间里面的值是随机的,也就是说,指针变量指向的值是随机的。这时一定不能去读写指针变量指向的地址,因为那个地址是随机地址,很可能会导致严重后果。 - -```c -int* p; -*p = 1; // 错误 -``` - -上面的代码是错的,因为`p`指向的那个地址是随机的,向这个随机地址里面写入`1`,会导致意想不到的结果。 - -正确做法是指针变量声明后,必须先让它指向一个分配好的地址,然后再进行读写,这叫做指针变量的初始化。 - -```c -int* p; -int i; - -p = &i; -*p = 13; -``` - -上面示例中,`p`是指针变量,声明这个变量后,`p`会指向一个随机的内存地址。这时要将它指向一个已经分配好的内存地址,上例就是再声明一个整数变量`i`,编译器会为`i`分配内存地址,然后让`p`指向`i`的内存地址(`p = &i;`)。完成初始化之后,就可以对`p`指向的内存地址进行赋值了(`*p = 13;`)。 - -为了防止读写未初始化的指针变量,可以养成习惯,将未初始化的指针变量设为`NULL`。 - -```c -int* p = NULL; -``` - -`NULL`在 C 语言中是一个常量,表示地址为`0`的内存空间,这个地址是无法使用的,读写该地址会报错。 - -## 指针的运算 - -指针本质上就是一个无符号整数,代表了内存地址。它可以进行运算,但是规则并不是整数运算的规则。 - -(1)指针与整数值的加减运算 - -指针与整数值的运算,表示指针的移动。 - -```c -short* j; -j = (short*)0x1234; -j = j + 1; // 0x1236 -``` - -上面示例中,`j`是一个指针,指向内存地址`0x1234`。你可能以为`j + 1`等于`0x1235`,但正确答案是`0x1236`。原因是`j + 1`表示指针向内存地址的高位移动一个单位,而一个单位的`short`类型占据两个字节的宽度,所以相当于向高位移动两个字节。同样的,`j - 1`得到的结果是`0x1232`。 - -指针移动的单位,与指针指向的数据类型有关。数据类型占据多少个字节,每单位就移动多少个字节。 - -(2)指针与指针的加法运算 - -指针只能与整数值进行加减运算,两个指针进行加法是非法的。 - -```c -unsigned short* j; -unsigned short* k; -x = j + k; // 非法 -``` - -上面示例是两个指针相加,这是非法的。 - -(3)指针与指针的减法 - -相同类型的指针允许进行减法运算,返回它们之间的距离,即相隔多少个数据单位。 - -高位地址减去低位地址,返回的是正值;低位地址减去高位地址,返回的是负值。 - -这时,减法返回的值属于`ptrdiff_t`类型,这是一个带符号的整数类型别名,具体类型根据系统不同而不同。这个类型的原型定义在头文件`stddef.h`里面。 - -```c -short* j1; -short* j2; - -j1 = (short*)0x1234; -j2 = (short*)0x1236; - -ptrdiff_t dist = j2 - j1; -printf("%d\n", dist); // 1 -``` - -上面示例中,`j1`和`j2`是两个指向 short 类型的指针,变量`dist`是它们之间的距离,类型为`ptrdiff_t`,值为`1`,因为相差2个字节正好存放一个 short 类型的值。 - -(4)指针与指针的比较运算 - -指针之间的比较运算,比较的是各自的内存地址哪一个更大,返回值是整数`1`(true)或`0`(false)。 diff --git a/wiki/programming-language/C/数据类型.md b/wiki/programming-language/C/数据类型.md deleted file mode 100644 index fdd17ded..00000000 --- a/wiki/programming-language/C/数据类型.md +++ /dev/null @@ -1,736 +0,0 @@ ---- -id: 数据类型 -title: 数据类型 -sidebar_position: 6 -data: 2022年3月30日 ---- - -C 语言的每一种数据,都是有类型(type)的,编译器必须知道数据的类型,才能操作数据。所谓“类型”,就是相似的数据所拥有的共同特征,那么一旦知道某个值的数据类型,就能知道该值的特征和操作方式。 - -基本数据类型有三种:字符(char)、整数(int)和浮点数(float)。复杂的类型都是基于它们构建的。 - -## 字符类型 - -字符类型指的是单个字符,类型声明使用`char`关键字。 - -```c -char c = 'B'; -``` - -上面示例声明了变量`c`是字符类型,并将其赋值为字母`B`。 - -C 语言规定,字符常量必须放在单引号里面。 - -在计算机内部,字符类型使用一个字节(8位)存储。C 语言将其当作整数处理,所以字符类型就是宽度为一个字节的整数。每个字符对应一个整数(由 ASCII 码确定),比如`B`对应整数`66`。 - -字符类型在不同计算机的默认范围是不一样的。一些系统默认为`-128`到`127`,另一些系统默认为`0`到`255`。这两种范围正好都能覆盖`0`到`127`的 ASCII 字符范围。 - -只要在字符类型的范围之内,整数与字符是可以互换的,都可以赋值给字符类型的变量。 - -```c -char c = 66; -// 等同于 -char c = 'B'; -``` - -上面示例中,变量`c`是字符类型,赋给它的值是整数66。这跟赋值为字符`B`的效果是一样的。 - -两个字符类型的变量可以进行数学运算。 - -```c -char a = 'B'; // 等同于 char a = 66; -char b = 'C'; // 等同于 char b = 67; - -printf("%d\n", a + b); // 输出 133 -``` - -上面示例中,字符类型变量`a`和`b`相加,视同两个整数相加。占位符`%d`表示输出十进制整数,因此输出结果为133。 - -单引号本身也是一个字符,如果要表示这个字符常量,必须使用反斜杠转义。 - -```c -char t = '\''; -``` - -上面示例中,变量`t`为单引号字符,由于字符常量必须放在单引号里面,所以内部的单引号要使用反斜杠转义。 - -这种转义的写法,主要用来表示 ASCII 码定义的一些无法打印的控制字符,它们也属于字符类型的值。 - -- `\a`:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生。 -- `\b`:退格键,光标回退一个字符,但不删除字符。 -- `\f`:换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于`\v`。 -- `\n`:换行符。 -- `\r`:回车符,光标移到同一行的开头。 -- `\t`:制表符,光标移到下一个水平制表位,通常是下一个8的倍数。 -- `\v`:垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。 -- `\0`:null 字符,代表没有内容。注意,这个值不等于数字0。 - -转义写法还能使用八进制和十六进制表示一个字符。 - -- `\nn`:字符的八进制写法,`nn`为八进制值。 -- `\xnn`:字符的十六进制写法,`nn`为十六进制值。 - -```c -char x = 'B'; -char x = 66; -char x = '\102'; // 八进制 -char x = '\x42'; // 十六进制 -``` - -上面示例的四种写法都是等价的。 - -## 整数类型 - -### 简介 - -整数类型用来表示较大的整数,类型声明使用`int`关键字。 - -```c -int a; -``` - -上面示例声明了一个整数变量`a`。 - -不同计算机的`int`类型的大小是不一样的。比较常见的是使用4个字节(32位)存储一个`int`类型的值,但是2个字节(16位)或8个字节(64位)也有可能使用。它们可以表示的整数范围如下。 - -- 16位:-32,768 到 32,767。 -- 32位:-2,147,483,648 到 2,147,483,647。 -- 64位:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 - -### signed,unsigned - -C 语言使用`signed`关键字,表示一个类型带有正负号,包含负值;使用`unsigned`关键字,表示该类型不带有正负号,只能表示零和正整数。 - -对于`int`类型,默认是带有正负号的,也就是说`int`等同于`signed int`。由于这是默认情况,关键字`signed`一般都省略不写,但是写了也不算错。 - -```c -signed int a; -// 等同于 -int a; -``` - -`int`类型也可以不带正负号,只表示非负整数。这时就必须使用关键字`unsigned`声明变量。 - -```c -unsigned int a; -``` - -整数变量声明为`unsigned`的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。比如,16位的`signed int`最大值为32,767,而`unsigned int`的最大值增大到了65,535。 - -`unsigned int`里面的`int`可以省略,所以上面的变量声明也可以写成下面这样。 - -```c -unsigned a; -``` - -字符类型`char`也可以设置`signed`和`unsigned`。 - -```c -signed char c; // 范围为 -128 到 127 -unsigned char c; // 范围为 0 到 255 -``` - -注意,C 语言规定`char`类型默认是否带有正负号,由当前系统决定。这就是说,`char`不等同于`signed char`,它有可能是`signed char`,也有可能是`unsigned char`。这一点与`int`不同,`int`就是等同于`signed int`。 - -### 整数的子类型 - -如果`int`类型使用4个或8个字节表示一个整数,对于小整数,这样做很浪费空间。另一方面,某些场合需要更大的整数,8个字节还不够。为了解决这些问题,C 语言在`int`类型之外,又提供了三个整数的子类型。这样有利于更精细地限定整数变量的范围,也有利于更好地表达代码的意图。 - -- `short int`(简写为`short`):占用空间不多于`int`,一般占用2个字节(整数范围为-32768~32767)。 -- `long int`(简写为`long`):占用空间不少于`int`,至少为4个字节。 -- `long long int`(简写为`long long`):占用空间多于`long`,至少为8个字节。 - -```c -short int a; -long int b; -long long int c; -``` - -上面代码分别声明了三种整数子类型的变量。 - -默认情况下,`short`、`long`、`long long`都是带符号的(signed),即`signed`关键字省略了。它们也可以声明为不带符号(unsigned),使得能够表示的最大值扩大一倍。 - -```c -unsigned short int a; -unsigned long int b; -unsigned long long int c; -``` - -C 语言允许省略`int`,所以变量声明语句也可以写成下面这样。 - -```c -short a; -unsigned short a; - -long b; -unsigned long b; - -long long c; -unsigned long long c; -``` - -不同的计算机,数据类型的字节长度是不一样的。确实需要32位整数时,应使用`long`类型而不是`int`类型,可以确保不少于4个字节;确实需要64位的整数时,应该使用`long long`类型,可以确保不少于8个字节。另一方面,为了节省空间,只需要16位整数时,应使用`short`类型;需要8位整数时,应该使用`char`类型。 - -### 整数类型的极限值 - -有时候需要查看,当前系统不同整数类型的最大值和最小值,C 语言的头文件`limits.h`提供了相应的常量,比如`SCHAR_MIN`代表 signed char 类型的最小值`-128`,`SCHAR_MAX`代表 signed char 类型的最大值`127`。 - -为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使用这些常量。 - -- `SCHAR_MIN`,`SCHAR_MAX`:signed char 的最小值和最大值。 -- `SHRT_MIN`,`SHRT_MAX`:short 的最小值和最大值。 -- `INT_MIN`,`INT_MAX`:int 的最小值和最大值。 -- `LONG_MIN`,`LONG_MAX`:long 的最小值和最大值。 -- `LLONG_MIN`,`LLONG_MAX`:long long 的最小值和最大值。 -- `UCHAR_MAX`:unsigned char 的最大值。 -- `USHRT_MAX`:unsigned short 的最大值。 -- `UINT_MAX`:unsigned int 的最大值。 -- `ULONG_MAX`:unsigned long 的最大值。 -- `ULLONG_MAX`:unsigned long long 的最大值。 - -### 整数的进制 - -C 语言的整数默认都是十进制数,如果要表示八进制数和十六进制数,必须使用专门的表示法。 - -八进制使用`0`作为前缀,比如`017`、`0377`。 - -```c -int a = 012; // 八进制,相当于十进制的10 -``` - -十六进制使用`0x`或`0X`作为前缀,比如`0xf`、`0X10`。 - -```c -int a = 0x1A2B; // 十六进制,相当于十进制的6699 -``` - -有些编译器使用`0b`前缀,表示二进制数,但不是标准。 - -```c -int x = 0b101010; -``` - -注意,不同的进制只是整数的书写方法,不会对整数的实际存储方式产生影响。所有整数都是二进制形式存储,跟书写方式无关。不同进制可以混合使用,比如`10 + 015 + 0x20`是一个合法的表达式。 - -`printf()`的进制相关占位符如下。 - -- `%d`:十进制整数。 -- `%o`:八进制整数。 -- `%x`:十六进制整数。 -- `%#o`:显示前缀`0`的八进制整数。 -- `%#x`:显示前缀`0x`的十六进制整数。 -- `%#X`:显示前缀`0X`的十六进制整数。 - -```c -int x = 100; -printf("dec = %d\n", x); // 100 -printf("octal = %o\n", x); // 144 -printf("hex = %x\n", x); // 64 -printf("octal = %#o\n", x); // 0144 -printf("hex = %#x\n", x); // 0x64 -printf("hex = %#X\n", x); // 0X64 -``` - -## 浮点数类型 - -任何有小数点的数值,都会被编译器解释为浮点数。所谓“浮点数”就是使用 m * be 的形式,存储一个数值,`m`是小数部分,`b`是基数(通常是`2`),`e`是指数部分。这种形式是精度和数值范围的一种结合,可以表示非常大或者非常小的数。 - -浮点数的类型声明使用`float`关键字,可以用来声明浮点数变量。 - -```c -float c = 10.5; -``` - -上面示例中,变量`c`的就是浮点数类型。 - -`float`类型占用4个字节(32位),其中8位存放指数的值和符号,剩下24位存放小数的值和符号。`float`类型至少能够提供(十进制的)6位有效数字,指数部分的范围为(十进制的)`-37`到`37`,即数值范围为10-37到1037。 - -有时候,32位浮点数提供的精度或者数值范围还不够,C 语言又提供了另外两种更大的浮点数类型。 - -- `double`:占用8个字节(64位),至少提供13位有效数字。 -- `long double`:通常占用16个字节。 - -注意,由于存在精度限制,浮点数只是一个近似值,它的计算是不精确的,比如 C 语言里面`0.1 + 0.2`并不等于`0.3`,而是有一个很小的误差。 - -```c -if (0.1 + 0.2 == 0.3) // false -``` - -C 语言允许使用科学计数法表示浮点数,使用字母`e`来分隔小数部分和指数部分。 - -```c -double x = 123.456e+3; // 123.456 x 10^3 -// 等同于 -double x = 123.456e3; -``` - -上面示例中,`e`后面如果是加号`+`,加号可以省略。注意,科学计数法里面`e`的前后,不能存在空格。 - -另外,科学计数法的小数部分如果是`0.x`或`x.0`的形式,那么`0`可以省略。 - -```c -0.3E6 -// 等同于 -.3E6 - -3.0E6 -// 等同于 -3.E6 -``` - -## 布尔类型 - -C 语言原来并没有为布尔值单独设置一个类型,而是使用整数`0`表示伪,所有非零值表示真。 - -```c -int x = 1; -if (x) { - printf("x is true!\n"); -} -``` - -上面示例中,变量`x`等于`1`,C 语言就认为这个值代表真,从而会执行判断体内部的代码。 - -C99 标准添加了类型`_Bool`,表示布尔值。但是,这个类型其实只是整数类型的别名,还是使用`0`表示伪,`1`表示真,下面是一个示例。 - -```c -_Bool isNormal; - -isNormal = 1; -if (isNormal) - printf("Everything is OK.\n"); -``` - -头文件`stdbool.h`定义了另一个类型别名`bool`,并且定义了`true`代表`1`、`false`代表`0`。只要加载这个头文件,就可以使用这几个关键字。 - -```c -#include - -bool flag = false; -``` - -上面示例中,加载头文件`stdbool.h`以后,就可以使用`bool`定义布尔值类型,以及`false`和`true`表示真伪。 - -## 字面量的类型 - -字面量(literal)指的是代码里面直接出现的值。 - -```c -int x = 123; -``` - -上面代码中,`x`是变量,`123`就是字面量。 - -编译时,字面量也会写入内存,因此编译器必须为字面量指定数据类型,就像必须为变量指定数据类型一样。 - -一般情况下,十进制整数字面量(比如`123`)会被编译器指定为`int`类型。如果一个数值比较大,超出了`int`能够表示的范围,编译器会将其指定为`long int`。如果数值超过了`long int`,会被指定为`unsigned long`。如果还不够大,就指定为`long long`或`unsigned long long`。 - -小数(比如`3.14`)会被指定为`double`类型。 - -## 字面量后缀 - -有时候,程序员希望为字面量指定一个不同的类型。比如,编译器将一个整数字面量指定为`int`类型,但是程序员希望将其指定为`long`类型,这时可以为该字面量加上后缀`l`或`L`,编译器就知道要把这个字面量的类型指定为`long`。 - -```c -int x = 123L; -``` - -上面代码中,字面量`123`有后缀`L`,编译器就会将其指定为`long`类型。这里`123L`写成`123l`,效果也是一样的,但是建议优先使用`L`,因为小写的`l`容易跟数字`1`混淆。 - -八进制和十六进制的值,也可以使用后缀`l`和`L`指定为 Long 类型,比如`020L`和`0x20L`。 - -```c -int y = 0377L; -int z = 0x7fffL; -``` - -如果希望指定为无符号整数`unsigned int`,可以使用后缀`u`或`U`。 - -```c -int x = 123U; -``` - -`L`和`U`可以结合使用,表示`unsigned long`类型。`L`和`U`的大小写和组合顺序无所谓。 - -```c -int x = 123LU; -``` - -对于浮点数,编译器默认指定为 double 类型,如果希望指定为其他类型,需要在小数后面添加后缀`f`(float)或`l`(long double)。 - -科学计数法也可以使用后缀。 - -```c -1.2345e+10F -1.2345e+10L -``` - -总结一下,常用的字面量后缀有下面这些。 - -- `f`和`F`:`float`类型。 -- `l`和`L`:对于整数是`long int`类型,对于小数是`long double`类型。 -- `ll`和`LL`:Long Long 类型,比如`3LL`。 -- `u`和`U`:表示`unsigned int`,比如`15U`、`0377U`。 - -`u`还可以与其他整数后缀结合,放在前面或后面都可以,比如`10UL`、`10ULL`和`10LLU`都是合法的。 - -下面是一些示例。 - -```c -int x = 1234; -long int x = 1234L; -long long int x = 1234LL - -unsigned int x = 1234U; -unsigned long int x = 1234UL; -unsigned long long int x = 1234ULL; - -float x = 3.14f; -double x = 3.14; -long double x = 3.14L; -``` - -## 溢出 - -每一种数据类型都有数值范围,如果存放的数值超出了这个范围(小于最小值或大于最大值),需要更多的二进制位存储,就会发生溢出。大于最大值,叫做向上溢出(overflow);小于最小值,叫做向下溢出(underflow)。 - -一般来说,编译器不会对溢出报错,会正常执行代码,但是会忽略多出来的二进制位,只保留剩下的位,这样往往会得到意想不到的结果。所以,应该避免溢出。 - -```c -unsigned char x = 255; -x = x + 1; - -printf("%d\n", x); // 0 -``` - -上面示例中,变量`x`加`1`,得到的结果不是`256`,而是`0`。因为`x`是`unsign char`类型,最大值是`255`(二进制`11111111`),加`1`后就发生了溢出,`256`(二进制`100000000`)的最高位`1`被丢弃,剩下的值就是`0`。 - -再看下面的例子。 - -```c -unsigned int ui = UINT_MAX; // 4,294,967,295 -ui++; -printf("ui = %u\n", ui); // 0 -ui--; -printf("ui = %u\n", ui); // 4,294,967,295 -``` - -上面示例中,常量`UINT_MAX`是 unsigned int 类型的最大值。如果加`1`,对于该类型就会溢出,从而得到`0`;而`0`是该类型的最小值,再减`1`,又会得到`UINT_MAX`。 - -溢出很容易被忽视,编译器又不会报错,所以必须非常小心。 - -```c -for (unsigned int i = n; i >= 0; --i) // 错误 -``` - -上面代码表面看似乎没有问题,但是循环变量`i`的类型是 unsigned int,这个类型的最小值是`0`,不可能得到小于0的结果。当`i`等于0,再减去`1`的时候,并不会返回`-1`,而是返回 unsigned int 的类型最大值,这个值总是大于等于`0`,导致无限循环。 - -为了避免溢出,最好方法就是将运算结果与类型的极限值进行比较。 - -```c -unsigned int ui; -unsigned int sum; - -// 错误 -if (sum + ui > UINT_MAX) too_big(); -else sum = sum + ui; - -// 正确 -if (ui > UINT_MAX - sum) too_big(); -else sum = sum + ui; -``` - -上面示例中,变量`sum`和`ui`都是 unsigned int 类型,它们相加的和还是 unsigned int 类型,这就有可能发生溢出。但是,不能通过相加的和是否超出了最大值`UINT_MAX`,来判断是否发生了溢出,因为`sum + ui`总是返回溢出后的结果,不可能大于`UINT_MAX`。正确的比较方法是,判断`UINT_MAX - sum`与`ui`之间的大小关系。 - -下面是另一种错误的写法。 - -```c -unsigned int i = 5; -unsigned int j = 7; - -if (i - j < 0) // 错误 - printf("negative\n"); -else - printf("positive\n"); -``` - -上面示例的运算结果,会输出`positive`。原因是变量`i`和`j`都是 unsigned int 类型,`i - j`的结果也是这个类型,最小值为`0`,不可能得到小于`0`的结果。正确的写法是写成下面这样。 - -```c -if (j > i) // .... -``` - -## sizeof 运算符 - -`sizeof`是 C 语言提供的一个运算符,返回某种数据类型或某个值占用的字节数量。它的参数可以是数据类型的关键字,也可以是变量名或某个具体的值。 - -```c -// 参数为数据类型 -int x = sizeof(int); - -// 参数为变量 -int i; -sizeof(i); - -// 参数为数值 -sizeof(3.14); -``` - -上面的第一个示例,返回得到`int`类型占用的字节数量(通常是`4`或`8`)。第二个示例返回整数变量占用字节数量,结果与前一个示例完全一样。第三个示例返回浮点数`3.14`占用的字节数量,由于浮点数的字面量一律存储为 double 类型,所以会返回`8`,因为 double 类型占用的8个字节。 - -`sizeof`运算符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定,`sizeof`到底返回什么类型。不同的系统中,返回值的类型有可能是`unsigned int`,也有可能是`unsigned long`,甚至是`unsigned long long`,对应的`printf()`占位符分别是`%u`、`%lu`和`%llu`。这样不利于程序的可移植性。 - -C 语言提供了一个解决方法,创造了一个类型别名`size_t`,用来统一表示`sizeof`的返回值类型。该别名定义在`stddef.h`头文件(引入`stdio.h`时会自动引入)里面,对应当前系统的`sizeof`的返回值类型,可能是`unsigned int`,也可能是`unsigned long`。 - -C 语言还提供了一个常量`SIZE_MAX`,表示`size_t`可以表示的最大整数。所以,`size_t`能够表示的整数范围为`[0, SIZE_MAX]`。 - -`printf()`有专门的占位符`%zd`或`%zu`,用来处理`size_t`类型的值。 - -```c -printf("%zd\n", sizeof(int)); -``` - -上面代码中,不管`sizeof`返回值的类型是什么,`%zd`占位符(或`%zu`)都可以正确输出。 - -如果当前系统不支持`%zd`或`%zu`,可使用`%u`(unsigned int)或`%lu`(unsigned long int)代替。 - -## 类型的自动转换 - -某些情况下,C 语言会自动转换某个值的类型。 - -### 赋值运算 - -赋值运算符会自动将右边的值,转成左边变量的类型。 - -(1)浮点数赋值给整数变量 - -浮点数赋予整数变量时,C 语言直接丢弃小数部分,而不是四舍五入。 - -```c -int x = 3.14; -``` - -上面示例中,变量`x`是整数类型,赋给它的值是一个浮点数。编译器会自动把`3.14`先转为`int`类型,丢弃小数部分,再赋值给`x`,因此`x`的值是`3`。 - -这种自动转换会导致部分数据的丢失(`3.14`丢失了小数部分),所以最好不要跨类型赋值,尽量保证变量与所要赋予的值是同一个类型。 - -注意,舍弃小数部分时,不是四舍五入,而是整个舍弃。 - -```c -int x = 12.99; -``` - -上面示例中,`x`等于`12`,而不是四舍五入的`13`。 - -(2)整数赋值给浮点数变量 - -整数赋值给浮点数变量时,会自动转为浮点数。 - -```c -float y = 12 * 2; -``` - -上面示例中,变量`y`的值不是`24`,而是`24.0`,因为等号右边的整数自动转为了浮点数。 - -(3)窄类型赋值给宽类型 - -字节宽度较小的整数类型,赋值给字节宽度较大的整数变量时,会发生类型提升,即窄类型自动转为宽类型。 - -比如,`char`或`short`类型赋值给`int`类型,会自动提升为`int`。 - -```c -char x = 10; -int i = x + y; -``` - -上面示例中,变量`x`的类型是`char`,由于赋值给`int`类型,所以会自动提升为`int`。 - -(4)宽类型赋值给窄类型 - -字节宽度较大的类型,赋值给字节宽度较小的变量时,会发生类型降级,自动转为后者的类型。这时可能会发生截值(truncation),系统会自动截去多余的二进制位,导致难以预料的结果。 - -```javascript -int i = 321; -char ch = i; // ch 的值是 65 (321 - 256) -``` - -上面例子中,变量`ch`是`char`类型,宽度是8个二进制位。变量`i`是`int`类型,将`i`赋值给`ch`,后者只能容纳`i`(二进制形式为`101000001`,共9位)的后八位,前面多出来的二进制位被丢弃,保留后八位就变成了`01000001`(十进制的65,相当于字符`A`)。 - -浮点数赋值给整数类型的值,也会发生截值,浮点数的小数部分会被截去。 - -```c -double pi = 3.14159; -int i = pi; // i 的值为 3 -``` - -上面示例中,`i`等于`3`,`pi`的小数部分被截去了。 - -### 混合类型的运算 - -不同类型的值进行混合计算时,必须先转成同一个类型,才能进行计算。转换规则如下: - -(1)整数与浮点数混合运算时,整数转为浮点数类型,与另一个运算数类型相同。 - -```c -3 + 1.2 // 4.2 -``` - -上面示例是`int`类型与`float`类型的混合计算,`int`类型的`3`会先转成`float`的`3.0`,再进行计算,得到`4.2`。 - -(2)不同的浮点数类型混合运算时,宽度较小的类型转为宽度较大的类型,比如`float`转为`double`,`double`转为`long double`。 - -(3)不同的整数类型混合运算时,宽度较小的类型会提升为宽度较大的类型。比如`short`转为`int`,`int`转为`long`等,有时还会将带符号的类型`signed`转为无符号`unsigned`。 - -下面例子的执行结果,可能会出人意料。 - -```c -int a = -5; -if (a < sizeof(int)) - do_something(); -``` - -上面示例中,变量`a`是带符号整数,`sizeof(int)`是`size_t`类型,这是一个无符号整数。按照规则,signed int 自动转为 unsigned int,所以`a`会自动转成无符号整数`4294967291`(转换规则是`-5`加上无符号整数的最大值,再加1),导致比较失败,`do_something()`不会执行。 - -所以,最好避免无符号整数与有符号整数的混合运算。因为这时 C 语言会自动将`signed int`转为`unsigned int`,可能不会得到预期的结果。 - -### 整数类型的运算 - -两个相同类型的整数运算时,或者单个整数的运算,一般来说,运算结果也属于同一类型。但是有一个例外,宽度小于`int`的类型,运算结果会自动提升为`int`。 - -```c -unsigned char a = 66; - -if ((-a) < 0) printf("negative\n"); -else printf("positive\n"); -``` - -上面示例中,变量`a`是 unsigned char 类型,这个类型不可能小于0,但是`-a`不是 unsigned char 类型,会自动转为 int 类型,导致上面的代码输出 negative。 - -再看下面的例子。 - -```c -unsigned char a = 1; -unsigned char b = 255; -unsigned char c = 255; - -if ((a - 5) < 0) do_something(); -if ((b + c) > 300) do_something(); -``` - -上面示例中,表达式`a - 5`和`b + c`都会自动转为 int 类型,所以函数`do_something()`会执行两次。 - -### 函数 - -函数的参数和返回值,会自动转成函数定义里指定的类型。 - -```c -int dostuff(int, unsigned char); - -char m = 42; -unsigned short n = 43; -long long int c = dostuff(m, n); -``` - -上面示例中,参数变量`m`和`n`不管原来的类型是什么,都会转成函数`dostuff()`定义的参数类型。 - -下面是返回值自动转换类型的例子。 - -```c -char func(void) { - int a = 42; - return a; -} -``` - -上面示例中,函数内部的变量`a`是`int`类型,但是返回的值是`char`类型,因为函数定义中返回的是这个类型。 - -## 类型的显式转换 - -原则上,应该避免类型的自动转换,防止出现意料之外的结果。C 语言提供了类型的显式转换,允许手动转换类型。 - -只要在一个值或变量的前面,使用圆括号指定类型`(type)`,就可以将这个值或变量转为指定的类型,这叫做“类型指定”(casting)。 - -```c -(unsigned char) ch -``` - -上面示例将变量`ch`转成无符号的字符类型。 - -```c -long int y = (long int) 10 + 12; -``` - -上面示例中,`(long int)`将`10`显式转为`long int`类型。这里的显示转换其实是不必要的,因为赋值运算符会自动将右边的值,转为左边变量的类型。 - -## 可移植类型 - -C 语言的整数类型(short、int、long)在不同计算机上,占用的字节宽度可能是不一样的,无法提前知道它们到底占用多少个字节。 - -程序员有时控制准确的字节宽度,这样的话,代码可以有更好的可移植性,头文件`stdint.h`创造了一些新的类型别名。 - -(1)精确宽度类型(exact-width integer type),保证某个整数类型的宽度是确定的。 - -- `int8_t`:8位有符号整数。 -- `int16_t`:16位有符号整数。 -- `int32_t`:32位有符号整数。 -- `int64_t`:64位有符号整数。 -- `uint8_t`:8位无符号整数。 -- `uint16_t`:16位无符号整数。 -- `uint32_t`:32位无符号整数。 -- `uint64_t`:64位无符号整数。 - -上面这些都是类型别名,编译器会指定它们指向的底层类型。比如,某个系统中,如果`int`类型为32位,`int32_t`就会指向`int`;如果`long`类型为32位,`int32_t`则会指向`long`。 - -下面是一个使用示例。 - -```c -#include -#include - -int main(void) { - int32_t x32 = 45933945; - printf("x32 = %d\n", x32); - return 0; -} -``` - -上面示例中,变量`x32`声明为`int32_t`类型,可以保证是32位的宽度。 - -(2)最小宽度类型(minimum width type),保证某个整数类型的最小长度。 - -- int_least8_t -- int_least16_t -- int_least32_t -- int_least64_t -- uint_least8_t -- uint_least16_t -- uint_least32_t -- uint_least64_t - -上面这些类型,可以保证占据的字节不少于指定宽度。比如,`int_least8_t`表示可以容纳8位有符号整数的最小宽度的类型。 - -(3)最快的最小宽度类型(fast minimum width type),可以使整数计算达到最快的类型。 - -- int_fast8_t -- int_fast16_t -- int_fast32_t -- int_fast64_t -- uint_fast8_t -- uint_fast16_t -- uint_fast32_t -- uint_fast64_t - -上面这些类型是保证字节宽度的同时,追求最快的运算速度,比如`int_fast8_t`表示对于8位有符号整数,运算速度最快的类型。这是因为某些机器对于特定宽度的数据,运算速度最快,举例来说,32位计算机对于32位数据的运算速度,会快于16位数据。 - -(4)可以保存指针的整数类型。 - -- `intptr_t`:可以存储指针(内存地址)的有符号整数类型。 -- `uintptr_t`:可以存储指针的无符号整数类型。 - -(5)最大宽度整数类型,用于存放最大的整数。 - -- `intmax_t`:可以存储任何有效的有符号整数的类型。 -- `uintmax_t`:可以存放任何有效的无符号整数的类型。 - -上面的这两个类型的宽度比`long long`和`unsigned long`更大。 - diff --git a/wiki/programming-language/C/数组.md b/wiki/programming-language/C/数组.md deleted file mode 100644 index 59b43fe7..00000000 --- a/wiki/programming-language/C/数组.md +++ /dev/null @@ -1,548 +0,0 @@ ---- -id: 数组 -title: 数组 -sidebar_position: 9 -data: 2022年3月30日 ---- - -## 简介 - -数组是一组相同类型的值,按照顺序储存在一起。数组通过变量名后加方括号表示,方括号里面是数组的成员数量。 - -```c -int scores[100]; -``` - -上面示例声明了一个数组`scores`,里面包含100个成员,每个成员都是`int`类型。 - -注意,声明数组时,必须给出数组的大小。 - -数组的成员从`0`开始编号,所以数组`scores[100]`就是从第0号成员一直到第99号成员,最后一个成员的编号会比数组长度小`1`。 - -数组名后面使用方括号指定编号,就可以引用该成员。也可以通过该方式,对该位置进行赋值。 - -```c -scores[0] = 13; -scores[99] = 42; -``` - -上面示例对数组`scores`的第一个位置和最后一个位置,进行了赋值。 - -注意,如果引用不存在的数组成员(即越界访问数组),并不会报错,所以必须非常小心。 - -```c -int scores[100]; - -scores[100] = 51; -``` - -上面示例中,数组`scores`只有100个成员,因此`scores[100]`这个位置是不存在的。但是,引用这个位置并不会报错,会正常运行,使得紧跟在`scores`后面的那块内存区域被赋值,而那实际上是其他变量的区域,因此不知不觉就更改了其他变量的值。这很容易引发错误,而且难以发现。 - -数组也可以在声明时,使用大括号,同时对每一个成员赋值。 - -```c -int a[5] = {22, 37, 3490, 18, 95}; -``` - -注意,使用大括号赋值时,必须在数组声明时赋值,否则编译时会报错。 - -```c -int a[5]; -a = {22, 37, 3490, 18, 95}; // 报错 -``` - -上面代码中,数组`a`声明之后再进行大括号赋值,导致报错。 - -报错的原因是,C 语言规定,数组变量一旦声明,就不得修改变量指向的地址,具体会在后文解释。由于同样的原因,数组赋值之后,再用大括号修改值,也是不允许的。 - -```c -int a[5] = {1, 2, 3, 4, 5}; -a = {22, 37, 3490, 18, 95}; // 报错 -``` - -上面代码中,数组`a`赋值后,再用大括号重新赋值也是不允许的。 - -使用大括号赋值时,大括号里面的值不能多于数组的长度,否则编译时会报错。 - -如果大括号里面的值,少于数组的成员数量,那么未赋值的成员自动初始化为`0`。 - -```c -int a[5] = {22, 37, 3490}; -// 等同于 -int a[5] = {22, 37, 3490, 0, 0}; -``` - -如果要将整个数组的每一个成员都设置为零,最简单的写法就是下面这样。 - -```c -int a[100] = {0}; -``` - -数组初始化时,可以指定为哪些位置的成员赋值。 - -```c -int a[15] = {[2] = 29, [9] = 7, [14] = 48}; -``` - -上面示例中,数组的2号、9号、14号位置被赋值,其他位置的值都自动设为0。 - -指定位置的赋值可以不按照顺序,下面的写法与上面的例子是等价的。 - -```c -int a[15] = {[9] = 7, [14] = 48, [2] = 29}; -``` - -指定位置的赋值与顺序赋值,可以结合使用。 - -```c -int a[15] = {1, [5] = 10, 11, [10] = 20, 21} -``` - -上面示例中,0号、5号、6号、10号、11号被赋值。 - -C 语言允许省略方括号里面的数组成员数量,这时将根据大括号里面的值的数量,自动确定数组的长度。 - -```c -int a[] = {22, 37, 3490}; -// 等同于 -int a[3] = {22, 37, 3490}; -``` - -上面示例中,数组`a`的长度,将根据大括号里面的值的数量,确定为`3`。 - -省略成员数量时,如果同时采用指定位置的赋值,那么数组长度将是最大的指定位置再加1。 - -```c -int a[] = {[2] = 6, [9] = 12}; -``` - -上面示例中,数组`a`的最大指定位置是`9`,所以数组的长度是10。 - -## 数组长度 - -`sizeof`运算符会返回整个数组的字节长度。 - -```c -int a[] = {22, 37, 3490}; -int arrLen = sizeof(a); // 12 -``` - -上面示例中,`sizeof`返回数组`a`的字节长度是`12`。 - -由于数组成员都是同一个类型,每个成员的字节长度都是一样的,所以数组整体的字节长度除以某个数组成员的字节长度,就可以得到数组的成员数量。 - -```c -sizeof(a) / sizeof(a[0]) -``` - -上面示例中,`sizeof(a)`是整个数组的字节长度,`sizeof(a[0])`是数组成员的字节长度,相除就是数组的成员数量。 - -注意,`sizeof`返回值的数据类型是`size_t`,所以`sizeof(a) / sizeof(a[0])`的数据类型也是`size_t`。在`printf()`里面的占位符,要用`%zd`或`%zu`。 - -```c -int x[12]; - -printf("%zu\n", sizeof(x)); // 48 -printf("%zu\n", sizeof(int)); // 4 -printf("%zu\n", sizeof(x) / sizeof(int)); // 12 -``` - -上面示例中,`sizeof(x) / sizeof(int)`就可以得到数组成员数量`12`。 - -## 多维数组 - -C 语言允许声明多个维度的数组,有多少个维度,就用多少个方括号,比如二维数组就使用两个方括号。 - -```c -int board[10][10]; -``` - -上面示例声明了一个二维数组,第一个维度有10个成员,第二个维度也有10个成员。 - -多维数组可以理解成,上层维度的每个成员本身就是一个数组。比如上例中,第一个维度的每个成员本身就是一个有10个成员的数组,因此整个二维数组共有100个成员(10 x 10 = 100)。 - -三维数组就使用三个方括号声明,以此类推。 - -```c -int c[4][5][6]; -``` - -引用二维数组的每个成员时,需要使用两个方括号,同时指定两个维度。 - -```c -board[0][0] = 13; -board[9][9] = 13; -``` - -注意,`board[0][0]`不能写成`board[0, 0]`,因为`0, 0`是一个逗号表达式,返回第二个值,所以`board[0, 0]`等同于`board[0]`。 - -跟一维数组一样,多维数组每个维度的第一个成员也是从`0`开始编号。 - -多维数组也可以使用大括号,一次性对所有成员赋值。 - -```c -int a[2][5] = { - {0, 1, 2, 3, 4}, - {5, 6, 7, 8, 9} -}; -``` - -上面示例中,`a`是一个二维数组,这种赋值写法相当于将第一维的每个成员写成一个数组。这种写法不用为每个成员都赋值,缺少的成员会自动设置为`0`。 - -多维数组也可以指定位置,进行初始化赋值。 - -```c -int a[2][2] = {[0][0] = 1, [1][1] = 2}; -``` - -上面示例中,指定了`[0][0]`和`[1][1]`位置的值,其他位置就自动设为`0`。 - -不管数组有多少维度,在内存里面都是线性存储,`a[0][0]`的后面是`a[0][1]`,`a[0][1]`的后面是`a[1][0]`,以此类推。因此,多维数组也可以使用单层大括号赋值,下面的语句与上面的赋值语句是完全等同的。 - -```c -int a[2][2] = {1, 0, 0, 2}; -``` - -## 变长数组 - -数组声明的时候,数组长度除了使用常量,也可以使用变量。这叫做变长数组(variable-length array,简称 VLA)。 - -```c -int n = x + y; -int arr[n]; -``` - -上面示例中,数组`arr`就是变长数组,因为它的长度取决于变量`n`的值,编译器没法事先确定,只有运行时才能知道`n`是多少。 - -变长数组的根本特征,就是数组长度只有运行时才能确定。它的好处是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。 - -任何长度需要运行时才能确定的数组,都是变长数组。 - -```c -int i = 10; - -int a1[i]; -int a2[i + 5]; -int a3[i + k]; -``` - -上面示例中,三个数组的长度都需要运行代码才能知道,编译器并不知道它们的长度,所以它们都是变长数组。 - -变长数组也可以用于多维数组。 - -```c -int m = 4; -int n = 5; -int c[m][n]; -``` - -上面示例中,`c[m][n]`就是二维变长数组。 - -## 数组的地址 - -数组是一连串连续储存的同类型值,只要获得起始地址(首个成员的内存地址),就能推算出其他成员的地址。请看下面的例子。 - -```c -int a[5] = {11, 22, 33, 44, 55}; -int* p; - -p = &a[0]; - -printf("%d\n", *p); // Prints "11" -``` - -上面示例中,`&a[0]`就是数组`a`的首个成员`11`的内存地址,也是整个数组的起始地址。反过来,从这个地址(`*p`),可以获得首个成员的值`11`。 - -由于数组的起始地址是常用操作,`&array[0]`的写法有点麻烦,C 语言提供了便利写法,数组名等同于起始地址,也就是说,数组名就是指向第一个成员(`array[0]`)的指针。 - -```c -int a[5] = {11, 22, 33, 44, 55}; - -int* p = &a[0]; -// 等同于 -int* p = a; -``` - -上面示例中,`&a[0]`和数组名`a`是等价的。 - -这样的话,如果把数组名传入一个函数,就等同于传入一个指针变量。在函数内部,就可以通过这个指针变量获得整个数组。 - -函数接受数组作为参数,函数原型可以写成下面这样。 - -```c -// 写法一 -int sum(int arr[], int len); -// 写法二 -int sum(int* arr, int len); -``` - -上面示例中,传入一个整数数组,与传入一个整数指针是同一回事,数组符号`[]`与指针符号`*`是可以互换的。下一个例子是通过数组指针对成员求和。 - -```c -int sum(int* arr, int len) { - int i; - int total = 0; - - // 假定数组有 10 个成员 - for (i = 0; i < len; i++) { - total += arr[i]; - } - return total; -} -``` - -上面示例中,传入函数的是一个指针`arr`(也是数组名)和数组长度,通过指针获取数组的每个成员,从而求和。 - -`*`和`&`运算符也可以用于多维数组。 - -```c -int a[4][2]; - -// 取出 a[0][0] 的值 -*(a[0]); -// 等同于 -**a -``` - -上面示例中,由于`a[0]`本身是一个指针,指向第二维数组的第一个成员`a[0][0]`。所以,`*(a[0])`取出的是`a[0][0]`的值。至于`**a`,就是对`a`进行两次`*`运算,第一次取出的是`a[0]`,第二次取出的是`a[0][0]`。同理,二维数组的`&a[0][0]`等同于`*a`。 - -注意,数组名指向的地址是不能更改的。声明数组时,编译器自动为数组分配了内存地址,这个地址与数组名是绑定的,不可更改,下面的代码会报错。 - -```c -int ints[100]; -ints = NULL; // 报错 -``` - -上面示例中,重新为数组名赋值,改变原来的内存地址,就会报错。 - -这也导致不能将一个数组名赋值给另外一个数组名。 - -```c -int a[5] = {1, 2, 3, 4, 5}; - -// 写法一 -int b[5] = a; // 报错 - -// 写法二 -int b[5]; -b = a; // 报错 -``` - -上面两种写法都会更改数组`b`的地址,导致报错。 - -## 数组指针的加减法 - -C 语言里面,数组名可以进行加法和减法运算,等同于在数组成员之间前后移动,即从一个成员的内存地址移动到另一个成员的内存地址。比如,`a + 1`返回下一个成员的地址,`a - 1`返回上一个成员的地址。 - -```c -int a[5] = {11, 22, 33, 44, 55}; - -for (int i = 0; i < 5; i++) { - printf("%d\n", *(a + i)); -} -``` - -上面示例中,通过指针的移动遍历数组,`a + i`的每轮循环每次都会指向下一个成员的地址,`*(a + i)`取出该地址的值,等同于`a[i]`。对于数组的第一个成员,`*(a + 0)`(即`*a`)等同于`a[0]`。 - -由于数组名与指针是等价的,所以下面的等式总是成立。 - -```c -a[b] == *(a + b) -``` - -上面代码给出了数组成员的两种访问方式,一种是使用方括号`a[b]`,另一种是使用指针`*(a + b)`。 - -如果指针变量`p`指向数组的一个成员,那么`p++`就相当于指向下一个成员,这种方法常用来遍历数组。 - -```c -int a[] = {11, 22, 33, 44, 55, 999}; - -int* p = a; - -while (*p != 999) { - printf("%d\n", *p); - p++; -} -``` - -上面示例中,通过`p++`让变量`p`指向下一个成员。 - -注意,数组名指向的地址是不能变的,所以上例中,不能直接对`a`进行自增,即`a++`的写法是错的,必须将`a`的地址赋值给指针变量`p`,然后对`p`进行自增。 - -遍历数组一般都是通过数组长度的比较来实现,但也可以通过数组起始地址和结束地址的比较来实现。 - -```c -int sum(int* start, int* end) { - int total = 0; - - while (start < end) { - total += *start; - start++; - } - - return total; -} - -int arr[5] = {20, 10, 5, 39, 4}; -printf("%i\n", sum(arr, arr + 5)); -``` - -上面示例中,`arr`是数组的起始地址,`arr + 5`是结束地址。只要起始地址小于结束地址,就表示还没有到达数组尾部。 - -反过来,通过数组的减法,可以知道两个地址之间有多少个数组成员,请看下面的例子,自己实现一个计算数组长度的函数。 - -```c -int arr[5] = {20, 10, 5, 39, 88}; -int* p = arr; - -while (*p != 88) - p++; - -printf("%i\n", p - arr); // 4 -``` - -上面示例中,将某个数组成员的地址,减去数组起始地址,就可以知道,当前成员与起始地址之间有多少个成员。 - -对于多维数组,数组指针的加减法对于不同维度,含义是不一样的。 - -```c -int arr[4][2]; - -// 指针指向 arr[1] -arr + 1; - -// 指针指向 arr[0][1] -arr[0] + 1 -``` - -上面示例中,`arr`是一个二维数组,`arr + 1`是将指针移动到第一维数组的下一个成员,即`arr[1]`。由于每个第一维的成员,本身都包含另一个数组,即`arr[0]`是一个指向第二维数组的指针,所以`arr[0] + 1`的含义是将指针移动到第二维数组的下一个成员,即`arr[0][1]`。 - -同一个数组的两个成员的指针相减时,返回它们之间的距离。 - -```c -int* p = &a[5]; -int* q = &a[1]; - -printf("%d\n", p - q); // 4 -printf("%d\n", q - p); // -4 -``` - -上面示例中,变量`p`和`q`分别是数组5号位置和1号位置的指针,它们相减等于4或-4。 - -## 数组的复制 - -由于数组名是指针,所以复制数组不能简单地复制数组名。 - -```c -int* a; -int b[3] = {1, 2, 3}; - -a = b; -``` - -上面的写法,结果不是将数组`b`复制给数组`a`,而是让`a`和`b`指向同一个数组。 - -复制数组最简单的方法,还是使用循环,将数组元素逐个进行复制。 - -```c -for (i = 0; i < N; i++) - a[i] = b[i]; -``` - -上面示例中,通过将数组`b`的成员逐个复制给数组`a`,从而实现数组的赋值。 - -另一种方法是使用`memcpy()`函数(定义在头文件`string.h`),直接把数组所在的那一段内存,再复制一份。 - -```c -memcpy(a, b, sizeof(b)); -``` - -上面示例中,将数组`b`所在的那段内存,复制给数组`a`。这种方法要比循环复制数组成员要快。 - -## 作为函数的参数 - -### 声明参数数组 - -数组作为函数的参数,一般会同时传入数组名和数组长度。 - -```c -int sum_array(int a[], int n) { - // ... -} - -int a[] = {3, 5, 7, 3}; -int sum = sum_array(a, 4); -``` - -上面示例中,函数`sum_array()`的第一个参数是数组本身,也就是数组名,第二个参数是数组长度。 - -由于数组名就是一个指针,如果只传数组名,那么函数只知道数组开始的地址,不知道结束的地址,所以才需要把数组长度也一起传入。 - -如果函数的参数是多维数组,那么除了第一维的长度可以当作参数传入函数,其他维的长度需要写入函数的定义。 - -```c -int sum_array(int a[][4], int n) { - // ... -} - -int a[2][4] = { - {1, 2, 3, 4}, - {8, 9, 10, 11} -}; -int sum = sum_array(a, 2); -``` - -上面示例中,函数`sum_array()`的参数是一个二维数组。第一个参数是数组本身(`a[][4]`),这时可以不写第一维的长度,因为它作为第二个参数,会传入函数,但是一定要写第二维的长度`4`。 - -这是因为函数内部拿到的,只是数组的起始地址`a`,以及第一维的成员数量`2`。如果要正确计算数组的结束地址,还必须知道第一维每个成员的字节长度。写成`int a[][4]`,编译器就知道了,第一维每个成员本身也是一个数组,里面包含了4个整数,所以每个成员的字节长度就是`4 * sizeof(int)`。 - -### 变长数组作为参数 - -变长数组作为函数参数时,写法略有不同。 - -```c -int sum_array(int n, int a[n]) { - // ... -} - -int a[] = {3, 5, 7, 3}; -int sum = sum_array(4, a); -``` - -上面示例中,数组`a[n]`是一个变长数组,它的长度取决于变量`n`的值,只有运行时才能知道。所以,变量`n`作为参数时,顺序一定要在变长数组前面,这样运行时才能确定数组`a[n]`的长度,否则就会报错。 - -因为函数原型可以省略参数名,所以变长数组的原型中,可以使用`*`代替变量名,也可以省略变量名。 - -```c -int sum_array(int, int [*]); -int sum_array(int, int []); -``` - -上面两种变长函数的原型写法,都是合法的。 - -变长数组作为函数参数有一个好处,就是多维数组的参数声明,可以把后面的维度省掉了。 - -```c -// 原来的写法 -int sum_array(int a[][4], int n); - -// 变长数组的写法 -int sum_array(int n, int m, int a[n][m]); -``` - -上面示例中,函数`sum_array()`的参数是一个多维数组,按照原来的写法,一定要声明第二维的长度。但是使用变长数组的写法,就不用声明第二维长度了,因为它可以作为参数传入函数。 - -### 数组字面量作为参数 - -C 语言允许将数组字面量作为参数,传入函数。 - -```c -// 数组变量作为参数 -int a[] = {2, 3, 4, 5}; -int sum = sum_array(a, 4); - -// 数组字面量作为参数 -int sum = sum_array((int []){2, 3, 4, 5}, 4); -``` - -上面示例中,两种写法是等价的。第二种写法省掉了数组变量的声明,直接将数组字面量传入函数。`{2, 3, 4, 5}`是数组值的字面量,`(int [])`类似于强制的类型转换,告诉编译器怎么理解这组值。 diff --git a/wiki/programming-language/C/文件操作.md b/wiki/programming-language/C/文件操作.md deleted file mode 100644 index 1928d39a..00000000 --- a/wiki/programming-language/C/文件操作.md +++ /dev/null @@ -1,835 +0,0 @@ ---- -id: 文件操作 -title: 文件操作 -sidebar_position: 18 -data: 2022年3月30日 ---- - -本章介绍 C 语言如何操作文件。 - -## 文件指针 - -C 语言提供了一个 FILE 数据结构,记录了操作一个文件所需要的信息。该结构定义在头文件`stdio.h`,所有文件操作函数都要通过这个数据结构,获取文件信息。 - -开始操作一个文件之前,就要定义一个指向该文件的 FILE 指针,相当于获取一块内存区域,用来保存文件信息。 - -```c -FILE* fp; -``` - -上面示例定义了一个 FILE 指针`fp`。 - -下面是一个读取文件的完整示例。 - -```c -#include - -int main(void) { - FILE* fp; - char c; - - fp = fopen("hello.txt", "r"); - if (fp == NULL) { - return -1; - } - - c = fgetc(fp); - printf("%c\n", c); - - fclose(fp); - - return 0; -} -``` - -上面示例中,新建文件指针`fp`以后,依次使用了下面三个文件操作函数,分成三个步骤。其他的文件操作,大致上也是这样的步骤。 - -第一步,使用`fopen()`打开指定文件,返回一个 File 指针。如果出错,返回 NULL。 - -它相当于将指定文件的信息与新建的文件指针`fp`相关联,在 FILE 结构内部记录了这样一些信息:文件内部的当前读写位置、读写报错的记录、文件结尾指示器、缓冲区开始位置的指针、文件标识符、一个计数器(统计拷贝进缓冲区的字节数)等等。后继的操作就可以使用这个指针(而不是文件名)来处理指定文件。 - -同时,它还为文件建立一个缓存区。由于存在缓存区,也可以说`fopen()`函数“打开一个了流”,后继的读写文件都是流模式。 - -第二步,使用读写函数,从文件读取数据,或者向文件写入数据。上例使用了`fgetc()`函数,从已经打开的文件里面,读取一个字符。 - -`fgetc()`一调用,文件的数据块先拷贝到缓冲区。不同的计算机有不同的缓冲区大小,一般是512字节或是它的倍数,如4096或16384。随着计算机硬盘容量越来越大,缓冲区也越来越大。 - -`fgetc()`从缓冲区读取数据,同时将文件指针内部的读写位置指示器,指向所读取字符的下一个字符。所有的文件读取函数都使用相同的缓冲区,后面再调用任何一个读取函数,都将从指示器指向的位置,即上一次读取函数停止的位置开始读取。 - -当读取函数发现已读完缓冲区里面的所有字符时,会请求把下一个缓冲区大小的数据块,从文件拷贝到缓冲区中。读取函数就以这种方式,读完文件的所有内容,直到文件结尾。不过,上例是只从缓存区读取一个字符。当函数在缓冲区里面,读完文件的最后一个字符时,就把 FILE 结构里面的文件结尾指示器设置为真。于是,下一次再调用读取函数时,会返回常量 EOF。EOF 是一个整数值,代表文件结尾,一般是`-1`。 - -第三步,`fclose()`关闭文件,同时清空缓存区。 - -上面是文件读取的过程,文件写入也是类似的方式,先把数据写入缓冲区,当缓冲区填满后,缓存区的数据将被转移到文件中。 - -## fopen() - -`fopen()`函数用来打开文件。所有文件操作的第一步,都是使用`fopen()`打开指定文件。这个函数的原型定义在头文件`stdio.h`。 - -```c -FILE* fopen(char* filename, char* mode); -``` - -它接受两个参数。第一个参数是文件名(可以包含路径),第二个参数是模式字符串,指定对文件执行的操作,比如下面的例子中,`r`表示以读取模式打开文件。 - -```c -fp = fopen("in.dat", "r"); -``` - -成功打开文件以后,`fopen()`返回一个 FILE 指针,其他函数可以用这个指针操作文件。如果无法打开文件(比如文件不存在或没有权限),会返回空指针 NULL。所以,执行`fopen()`以后,最好判断一下,有没有打开成功。 - -```c -fp = fopen("hello.txt", "r"); - -if (fp == NULL) { - printf("Can't open file!\n"); - exit(EXIT_FAILURE); -} -``` - -上面示例中,如果`fopen()`返回一个空指针,程序就会报错。 - -`fopen()`的模式字符串有以下几种。 - -- `r`:读模式,只用来读取数据。如果文件不存在,返回 NULL 指针。 -- `w`:写模式,只用来写入数据。如果文件存在,文件长度会被截为0,然后再写入;如果文件不存在,则创建该文件。 -- `a`:写模式,只用来在文件尾部追加数据。如果文件不存在,则创建该文件。 -- `r+`:读写模式。如果文件存在,指针指向文件开始处,可以在文件头部添加数据。如果文件不存在,返回 NULL 指针。 -- `w+`:读写模式。如果文件存在,文件长度会被截为0,然后再写入数据。这种模式实际上读不到数据,反而会擦掉数据。如果文件不存在,则创建该文件。 -- `a+`:读写模式。如果文件存在,指针指向文件结尾,可以在现有文件末尾添加内容。如果文件不存在,则创建该文件。 - -上一小节说过,`fopen()`函数会为打开的文件创建一个缓冲区。读模式下,创建的是读缓存区;写模式下,创建的是写缓存区;读写模式下,会同时创建两个缓冲区。C 语言通过缓存区,以流的形式,向文件读写数据。 - -数据在文件里面,都是以二进制形式存储。但是,读取的时候,有不同的解读方法:以原本的二进制形式解读,叫做“二进制流”;将二进制数据转成文本,以文本形式解读,叫做“文本流”。写入操作也是如此,分成以二进制写入和以文本写入,后者会多一个文本转二进制的步骤。 - -`fopen()`的模式字符串,默认是以文本流读写。如果添加`b`后缀(表示 binary),就会以“二进制流”进行读写。比如,`rb`是读取二进制数据模式,`wb`是写入二进制数据模式。 - -模式字符串还有一个`x`后缀,表示独占模式(exclusive)。如果文件已经存在,则打开文件失败;如果文件不存在,则新建文件,打开后不再允许其他程序或线程访问当前文件。比如,`wx`表示以独占模式写入文件,如果文件已经存在,就会打开失败。 - -## 标准流 - -Linux 系统默认提供三个已经打开的文件,它们的文件指针如下。 - -- `stdin`(标准输入):默认来源为键盘,文件指针编号为`0`。 -- `stdout`(标准输出):默认目的地为显示器,文件指针编号为`1`。 -- `stderr`(标准错误):默认目的地为显示器,文件指针编号为`2`。 - -Linux 系统的文件,不一定是数据文件,也可以是设备文件,即文件代表一个可以读或写的设备。文件指针`stdin`默认是把键盘看作一个文件,读取这个文件,就能获取用户的键盘输入。同理,`stdout`和`stderr`默认是把显示器看作一个文件,将程序的运行结果写入这个文件,用户就能看到运行结果了。它们的区别是,`stdout`写入的是程序的正常运行结果,`stderr`写入的是程序的报错信息。 - -这三个输入和输出渠道,是 Linux 默认提供的,所以分别称为标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。因为它们的实现是一样的,都是文件流,所以合称为“标准流”。 - -Linux 允许改变这三个文件指针(文件流)指向的文件,这称为重定向(redirection)。 - -如果标准输入不绑定键盘,而是绑定其他文件,可以在文件名前面加上小于号`<`,跟在程序名后面。这叫做“输入重定向”(input redirection)。 - -```bash -demo < in.dat -``` - -上面示例中,`demo`程序代码里面的`stdin`,将指向文件`in.dat`,即从`in.dat`获取数据。 - -如果标准输出绑定其他文件,而不是显示器,可以在文件名前加上大于号`>`,跟在程序名后面。这叫做“输出重定向”(output redirection)。 - -```bash -demo > out.dat -``` - -上面示例中,`demo`程序代码里面的`stdout`,将指向文件`out.dat`,即向`out.dat`写入数据。 - -输出重定向`>`会先擦去`out.dat`的所有原有的内容,然后再写入。如果希望写入的信息追加在`out.dat`的结尾,可以使用`>>`符号。 - -```bash -demo >> out.dat -``` - -上面示例中,`demo`程序代码里面的`stdout`,将向文件`out.dat`写入数据。与`>`不同的是,写入的开始位置是`out.dat`的文件结尾。 - -标准错误的重定向符号是`2>`。其中的`2`代表文件指针的编号,即`2>`表示将2号文件指针的写入,重定向到`err.txt`。2号文件指针就是标准错误`stderr`。 - -```bash -demo > out.dat 2> err.txt -``` - -上面示例中,`demo`程序代码里面的`stderr`,会向文件`err.txt`写入报错信息。而`stdout`向文件`out.dat`写入。 - -输入重定向和输出重定向,也可以结合在一条命令里面。 - -```bash -$ demo < in.dat > out.dat - -// or -$ demo > out.dat < in.dat -``` - -重定向还有另一种情况,就是将一个程序的标准输出`stdout`,指向另一个程序的标准输入`stdin`,这时要使用`|`符号。 - -```bash -random | sum -``` - -上面示例中,`random`程序代码里面的`stdout`的写入,会从`sum`程序代码里面的`stdin`被读取。 - -## fclose() - -`fclose()`用来关闭已经使用`fopen()`打开的文件。它的原型定义在`stdin.h`。 - -```c -int fclose(FILE* stream); -``` - -它接受一个文件指针`fp`作为参数。如果成功关闭文件,`fclose()`函数返回整数`0`;如果操作失败(比如磁盘已满,或者出现 I/O 错误),则返回一个特殊值 EOF(详见下一小节)。 - -```c -if (fclose(fp) != 0) - printf("Something wrong."); -``` - -不再使用的文件,都应该使用`fclose()`关闭,否则无法释放资源。一般来说,系统对同时打开的文件数量有限制,及时关闭文件可以避免超过这个限制。 - -## EOF - -C 语言的文件操作函数的设计是,如果遇到文件结尾,就返回一个特殊值。程序接收到这个特殊值,就知道已经到达文件结尾了。 - -头文件`stdio.h`为这个特殊值定义了一个宏`EOF`(end of file 的缩写),它的值一般是`-1`。这是因为从文件读取的二进制值,不管作为无符号数字解释,还是作为 ASCII 码解释,都不可能是负值,所以可以很安全地返回`-1`,不会跟文件本身的数据相冲突。 - -需要注意的是,不像字符串结尾真的存储了`\0`这个值,`EOF`并不存储在文件结尾,文件中并不存在这个值,完全是文件操作函数发现到达了文件结尾,而返回这个值。 - -## freopen() - -`freopen()`用于新打开一个文件,直接关联到某个已经打开的文件指针。这样可以复用文件指针。它的原型定义在头文件`stdio.h`。 - -```c -FILE* freopen(char* filename, char* mode, FILE stream); -``` - -它跟`fopen()`相比,就是多出了第三个参数,表示要复用的文件指针。其他两个参数都一样,分别是文件名和打开模式。 - -```c -freopen("output.txt", "w", stdout); -printf("hello"); -``` - -上面示例将文件`output.txt`关联到`stdout`,此后向`stdout`写入的内容,都会写入`output.txt`。由于`printf()`默认就是输出到`stdout`,所以运行上面的代码以后,文件`output.txt`会被写入`hello`。 - -`freopen()`的返回值是它的第三个参数(文件指针)。如果打开失败(比如文件不存在),会返回空指针 NULL。 - -`freopen()`会自动关闭原先已经打开的文件,如果文件指针并没有指向已经打开的文件,则`freopen()`等同于`fopen()`。 - -下面是`freopen()`关联`scanf()`的例子。 - -```c -int i, i2; - -scanf("%d", &i); - -freopen("someints.txt", "r", stdin); -scanf("%d", &i2); -``` - -上面例子中,一共调用了两次`scanf()`,第一次调用是从键盘读取,然后使用`freopen()`将`stdin`指针关联到某个文件,第二次调用就会从该文件读取。 - -某些系统允许使用`freopen()`,改变文件的打开模式。这时,`freopen()`的第一个参数应该是 NULL。 - -```c -freopen(NULL, "wb", stdout); -``` - -上面示例将`stdout`的打开模式从`w`改成了`wb`。 - -## fgetc(),getc() - -`fgetc()`和`getc()`用于从文件读取一个字符。它们的用法跟`getchar()`类似,区别是`getchar()`只用来从`stdin`读取,而这两个函数是从任意指定的文件读取。它们的原型定义在头文件`stdio.h`。 - -```c -int fgetc(FILE *stream) -int getc(FILE *stream); -``` - -`fgetc()`与`getc()`的用法是一样的,都只有文件指针一个参数。两者的区别是,`getc()`一般用宏来实现,而`fgetc()`是函数实现,所以前者的性能可能更好一些。注意,虽然这两个函数返回的是一个字符,但是它们的返回值类型却不是`char`,而是`int`,这是因为读取失败的情况下,它们会返回 EOF,这个值一般是`-1`。 - -```c -#include - -int main(void) { - FILE *fp; - fp = fopen("hello.txt", "r"); - - int c; - while ((c = getc(fp)) != EOF) - printf("%c", c); - - fclose(fp); -} -``` - -上面示例中,`getc()`依次读取文件的每个字符,将其放入变量`c`,直到读到文件结尾,返回 EOF,循环终止。变量`c`的类型是`int`,而不是`char`,因为有可能等于负值,所以设为`int`更好一些。 - -## fputc(),putc() - -`fputc()`和`putc()`用于向文件写入一个字符。它们的用法跟`putchar()`类似,区别是`putchar()`是向`stdout`写入,而这两个函数是向文件写入。它们的原型定义在头文件`stdio.h`。 - -```c -int fputc(int char, FILE *stream); -int putc(int char, FILE *stream); -``` - -`fputc()`与`putc()`的用法是一样,都接受两个参数,第一个参数是待写入的字符,第二个参数是文件指针。它们的区别是,`putc()`通常是使用宏来实现,而`fputc()`只作为函数来实现,所以理论上,`putc()`的性能会好一点。 - -写入成功时,它们返回写入的字符;写入失败时,返回 EOF。 - -## fprintf() - -`fprintf()`用于向文件写入格式化字符串,用法与`printf()`类似。区别是`printf()`总是写入`stdout`,而`fprintf()`则是写入指定的文件,它的第一个参数必须是一个文件指针。它的原型定义在头文件`stdio.h`。 - -```c -int fprintf(FILE* stream, const char* format, ...) -``` - -`fprintf()`可以替代`printf()`。 - -```c -printf("Hello, world!\n"); -fprintf(stdout, "Hello, world!\n"); -``` - -上面例子中,指定`fprintf()`写入`stdout`,结果就等同于调用`printf()`。 - -```c -fprintf(fp, "Sum: %d\n", sum); -``` - -上面示例是向文件指针`fp`写入指定格式的字符串。 - -下面是向`stderr`输出错误信息的例子。 - -```c -fprintf(stderr, "Something number.\n"); -``` - -## fscanf() - -`fscanf()`用于按照给定的模式,从文件中读取内容,用法跟`scanf()`类似。区别是`scanf()`总是从`stdin`读取数据,而`fscanf()`是从文件读入数据,它的原型定义在头文件`stdio.h`,第一个参数必须是文件指针。 - -```c -int fscanf(FILE* stream, const char* format, ...); -``` - -下面是一个例子。 - -```c -fscanf(fp, "%d%d", &i, &j); -``` - -上面示例中,`fscanf()`从文件`fp`里面,读取两个整数,放入变量`i`和`j`。 - -使用`fscanf()`的前提是知道文件的结构,它的占位符解析规则与`scanf()`完全一致。由于`fscanf()`可以连续读取,直到读到文件尾,或者发生错误(读取失败、匹配失败),才会停止读取,所以`fscanf()`通常放在循环里面。 - -```c -while(fscanf(fp, "%s", words) == 1) - puts(words); -``` - -上面示例中,`fscanf()`依次读取文件的每个词,将它们一行打印一个,直到文件结束。 - -`fscanf()`的返回值是赋值成功的变量数量,如果赋值失败会返回 EOF。 - -## fgets() - -`fgets()`用于从文件读取指定长度的字符串,它名字的第一个字符是`f`,就代表`file`。它的原型定义在头文件`stdio.h`。 - -```c -char* fgets(char* str, int STRLEN, File* fp); -``` - -它的第一个参数`str`是一个字符串指针,用于存放读取的内容。第二个参数`STRLEN`指定读取的长度,第三个参数是一个 FILE 指针,指向要读取的文件。 - -`fgets()`读取 STRLEN - 1 个字符之后,或者遇到换行符与文件结尾,就会停止读取,然后在已经读取的内容末尾添加一个空字符`\0`,使之成为一个字符串。注意,`fgets()`会将换行符(`\n`)存储进字符串。 - -如果`fgets`的第三个参数是`stdin`,就可以读取标准输入,等同于`scanf()`。 - -```c -fgets(str, sizeof(str), stdin); -``` - -读取成功时,`fgets()`的返回值是它的第一个参数,即指向字符串的指针,否则返回空指针 NULL。 - -`fgets()`可以用来读取文件的每一行,下面是读取文件所有行的例子。 - -```c -#include - -int main(void) { - FILE* fp; - char s[1024]; // 数组必须足够大,足以放下一行 - int linecount = 0; - - fp = fopen("hello.txt", "r"); - - while (fgets(s, sizeof s, fp) != NULL) - printf("%d: %s", ++linecount, s); - - fclose(fp); -} -``` - -上面示例中,每读取一行,都会输出行号和该行的内容。 - -下面的例子是循环读取用户的输入。 - -```c -char words[10]; - -puts("Enter strings (q to quit):"); - -while (fgets(words, 10, stdin) != NULL) { - if (words[0] == 'q' && words[1] == '\n') - break; - - puts(words); -} - -puts("Done."); -``` - -上面的示例中,如果用户输入的字符串大于9个字符,`fgets()`会多次读取。直到遇到`q` + 回车键,才会退出循环。 - -## fputs() - -`fputs()`函数用于向文件写入字符串,和`puts()`函数只有一点不同,那就是它不会在字符串末尾添加换行符。这是因为`fgets()`保留了换行符,所以`fputs()`就不添加了。`fputs()`函数通常与`fgets()`配对使用。 - -它的原型定义在`stdio.h`。 - -```c -int fputs(const char* str, FILE* stream); -``` - -它接受两个参数,第一个参数是字符串指针,第二个参数是要写入的文件指针。如果第二个参数为`stdout`(标准输出),就是将内容输出到计算机屏幕,等同于`printf()`。 - -```c -char words[14]; - -puts("Enter a string, please."); -fgets(words, 14, stdin); - -puts("This is your string:"); -fputs(words, stdout); -``` - -上面示例中,先用`fgets()`从`stdin`读取用户输入,然后用`fputs()`输出到`stdout`。 - -写入成功时,`fputs()`返回一个非负整数,否则返回 EOF。 - -## fwrite() - -`fwrite()`用来一次性写入较大的数据块,主要用途是将数组数据一次性写入文件,适合写入二进制数据。它的原型定义在`stdio.h`。 - -```c -size_t fwrite( - const void* ptr, - size_t size, - size_t nmemb, - FILE* fp -); -``` - -它接受四个参数。 - -- `ptr`:数组指针。 -- `size`:每个数组成员的大小,单位字节。 -- `nmemb`:数组成员的数量。 -- `fp`:要写入的文件指针。 - -注意,`fwrite()`原型的第一个参数类型是`void*`,这是一个无类型指针,编译器会自动将参数指针转成`void*`类型。正是由于`fwrite()`不知道数组成员的类型,所以才需要知道每个成员的大小(第二个参数)和成员数量(第三个参数)。 - -`fwrite()`函数的返回值是成功写入的数组成员的数量(注意不是字节数)。正常情况下,该返回值就是第三个参数`nmemb`,但如果出现写入错误,只写入了一部分成员,返回值会比`nmemb`小。 - -要将整个数组`arr`写入文件,可以采用下面的写法。 - -```c -fwrite( - arr, - sizeof(arr[0]), - sizeof(arr) / sizeof(arr[0]), - fp -); -``` - -上面示例中,`sizeof(a[0])`是每个数组成员占用的字节,`sizeof(a) / sizeof(a[0])`是整个数组的成员数量。 - -下面的例子是将一个大小为256字节的字符串写入文件。 - -```c -char buffer[256]; - -fwrite(buffer, 1, 256, fp); -``` - -上面示例中,数组`buffer`每个成员是1个字节,一共有256个成员。由于`fwrite()`是连续内存复制,所以写成`fwrite(buffer, 256, 1, fp)`也能达到目的。 - -`fwrite()`没有规定一定要写入整个数组,只写入数组的一部分也是可以的。 - -任何类型的数据都可以看成是1字节数据组成的数组,或者是一个成员的数组,所以`fwrite()`实际上可以写入任何类型的数据,而不仅仅是数组。比如,`fwrite()`可以将一个 Struct 结构写入文件保存。 - -```c -fwrite(&s, sizeof(s), 1, fp); -``` - -上面示例中,`s`是一个 Struct 结构指针,可以看成是一个成员的数组。注意,如果`s`的属性包含指针,存储时需要小心,因为保存指针可能没意义,还原出来的时候,并不能保证指针指向的数据还存在。 - -`fwrite()`以及后面要介绍的`fread()`,比较适合读写二进制数据,因为它们不会对写入的数据进行解读。二进制数据可能包含空字符`\0`,这是 C 语言的字符串结尾标记,所以读写二进制文件,不适合使用文本读写函数(比如`fprintf()`等)。 - -下面是一个写入二进制文件的例子。 - -```c -#include - -int main(void) { - FILE* fp; - unsigned char bytes[] = {5, 37, 0, 88, 255, 12}; - - fp = fopen("output.bin", "wb"); - fwrite(bytes, sizeof(char), sizeof(bytes), fp); - fclose(fp); - return 0; -} -``` - -上面示例中,写入二进制文件时,`fopen()`要使用`wb`模式打开,表示二进制写入。`fwrite()`可以把数据解释成单字节数组,因此它的第二个参数是`sizeof(char)`,第三个参数是数组的总字节数`sizeof(bytes)`。 - -上面例子写入的文件`output.bin`,使用十六进制编辑器打开,会是下面的内容。 - -```c -05 25 00 58 ff 0c -``` - -`fwrite()`还可以连续向一个文件写入数据。 - -```c -struct clientData myClient = {1, 'foo bar'}; - -for (int i = 1; i <= 100; i++) { - fwrite(&myClient, sizeof(struct clientData), 1, cfPtr); -} -``` - -上面示例中,`fwrite()`连续将100条数据写入文件。 - -## fread() - -`fread()`函数用于一次性从文件读取较大的数据块,主要用途是将文件内容读入一个数组,适合读取二进制数据。它的原型定义在头文件`stdio.h`。 - -```c -size_t fread( - void* ptr, - size_t size, - size_t nmemb, - FILE* fp -); -``` - -它接受四个参数,与`fwrite()`完全相同。 - -- `ptr`:数组地址。 -- `size`:每个数组成员的大小,单位为字节。 -- `nmemb`:数组的成员数量。 -- `fp`:文件指针。 - -要将文件内容读入数组`arr`,可以采用下面的写法。 - -```c -fread( - arr, - sizeof(arr[0]), - sizeof(arr) / sizeof(arr[0]), - fp -); -``` - -上面示例中,数组长度(第二个参数)和每个成员的大小(第三个参数)的乘积,就是数组占用的内存空间的大小。`fread()`会从文件(第四个参数)里面读取相同大小的内容,然后将`ptr`(第一个参数)指向这些内容的内存地址。 - -下面的例子是将文件内容读入一个10个成员的双精度浮点数数组。 - -```c -double earnings[10]; -fread(earnings, sizeof(double), 10, fp); -``` - -上面示例中,每个数组成员的大小是`sizeof(double)`,一个有10个成员,就会从文件`fp`读取`sizeof(double) * 10`大小的内容。 - -`fread()`函数的返回值是成功读取的数组成员的数量。正常情况下,该返回值就是第三个参数`nmemb`,但如果出现读取错误或读到文件结尾,该返回值就会比`nmemb`小。所以,检查`fread()`的返回值是非常重要的。 - -`fread()`和`fwrite()`可以配合使用。在程序终止之前,使用`fwrite()`将数据保存进文件,下次运行时再用`fread()`将数据还原进入内存。 - -下面是读取上一节生成的二进制文件`output.bin`的例子。 - -```c -#include - -int main(void) { - FILE* fp; - unsigned char c; - - fp = fopen("output.bin", "rb"); - while (fread(&c, sizeof(char), 1, fp) > 0) - printf("%d\n", c); - return 0; -} -``` - -运行后,得到如下结果。 - -```c -5 -37 -0 -88 -255 -12 -``` - -## feof() - -`feof()`函数判断文件的内部指针是否指向文件结尾。它的原型定义在头文件`stdio.h`。 - -```c -int feof(FILE *fp); -``` - -`feof()`接受一个文件指针作为参数。如果已经到达文件结尾,会返回一个非零值(表示 true),否则返回`0`(表示 false)。 - -诸如`fgetc()`这样的文件读取函数,如果返回 EOF,有两种可能,一种可能是已读取到文件结尾,另一种可能是出现读取错误。`feof()`可以用来判断到底是那一种情况。 - -下面是通过`feof()`判断是否到达文件结尾,从而循环读取整个文件的例子。 - -```c -int num; -char name[50]; - -FILE* cfPtr = fopen("clients.txt", "r"); - -while (!feof(cfPtr)) { - fscanf(cfPtr, "%d%s\n", &num, name); - printf("%d %s\n", num, name); -} - -fclose(cfPtr); -``` - -上面示例通过循环判断`feof()`是否读到文件结尾,从而实现读出整个文件内容。 - -`feof()`为真时,可以通过`fseek()`、`rewind()`、`fsetpos()`函数改变文件内部读写位置的指示器,从而清除这个函数的状态。 - -## fseek() - -每个文件指针都有一个内部指示器(内部指针),记录当前打开的文件的读写位置(file position),即下一次读写从哪里开始。文件操作函数(比如`getc()`、`fgets()`、`fscanf()`和`fread()`等)都从这个指示器指定的位置开始按顺序读写文件。 - -如果希望改变这个指示器,将它移到文件的指定位置,可以使用`fseek()`函数。它的原型定义在头文件`stdio.h`。 - -```c -int fseek(FILE* stream, long int offset, int whence); -``` - -`fseek()`接受3个参数。 - -- `stream`:文件指针。 -- `offset`:距离基准(第三个参数)的字节数。类型为 long int,可以为正值(向文件末尾移动)、负值(向文件开始处移动)或 0(保持不动)。 -- `whence`:位置基准,用来确定计算起点。它的值是以下三个宏(定义在`stdio.h`):`SEEK_SET`(文件开始处)、`SEEK_CUR`(内部指针的当前位置)、`SEEK_END`(文件末尾) - -请看下面的例子。 - -```c -// 定位到文件开始处 -fseek(fp, 0L, SEEK_SET); - -// 定位到文件末尾 -fseek(fp, 0L, SEEK_END); - -// 从当前位置后移2个字节 -fseek(fp, 2L, SEEK_CUR); - -// 定位到文件第10个字节 -fseek(fp, 10L, SEEK_SET); - -// 定位到文件倒数第10个字节 -fseek(fp, -10L, SEEK_END); -``` - -上面示例中,`fseek()`的第二个参数为 long 类型,所以移动距离必须加上后缀`L`,将其转为 long 类型。 - -下面的示例逆向输出文件的所有字节。 - -```c -for (count = 1L; count <= size; count++) { - fseek(fp, -count, SEEK_END); - ch = getc(fp); -} -``` - -注意,`fseek()`最好只用来操作二进制文件,不要用来读取文本文件。因为文本文件的字符有不同的编码,某个位置的准确字节位置不容易确定。 - -正常情况下,`fseek()`的返回值为0。如果发生错误(如移动的距离超出文件的范围),返回值为非零值(比如`-1`)。 - -## ftell() - -`ftell()`函数返回文件内部指示器的当前位置。它的原型定义在头文件`stdio.h`。 - -```c -long int ftell(FILE* stream); -``` - -它接受一个文件指针作为参数。返回值是一个 long 类型的整数,表示内部指示器的当前位置,即文件开始处到当前位置的字节数,`0`表示文件开始处。如果发生错误,`ftell()`返回`-1L`。 - -`ftell()`可以跟`fseek()`配合使用,先记录内部指针的位置,一系列操作过后,再用`fseek()`返回原来的位置。 - -```c -long file_pos = ftell(fp); - -// 一系列文件操作之后 -fseek(fp, file_pos, SEEK_SET); -``` - -下面的例子先将指示器定位到文件结尾,然后得到文件开始处到结尾的字节数。 - -```c -fseek(fp, 0L, SEEK_END); -size = ftell(fp); -``` - -## rewind() - -`rewind()`函数可以让文件的内部指示器回到文件开始处。它的原型定义在`stdio.h`。 - -```c -void rewind(file* stream); -``` - -它接受一个文件指针作为参数。 - -`rewind(fp)`基本等价于`fseek(fp, 0l, seek_set)`,唯一的区别是`rewind()`没有返回值,而且会清除当前文件的错误指示器。 - -## fgetpos(),fsetpos() - -`fseek()`和`ftell()`有一个潜在的问题,那就是它们都把文件大小限制在 long int 类型能表示的范围内。这看起来相当大,但是在32位计算机上,long int 的长度为4个字节,能够表示的范围最大为 4GB。随着存储设备的容量迅猛增长,文件也越来越大,往往会超出这个范围。鉴于此,C 语言新增了两个处理大文件的新定位函数:`fgetpos()`和`fsetpos()`。 - -它们的原型都定义在头文件`stdio.h`。 - -```c -int fgetpos(FILE* stream, fpos_t* pos); -int fsetpos(FILE* stream, const fpos_t* pos); -``` - -`fgetpos()`函数会将文件内部指示器的当前位置,存储在指针变量`pos`。该函数接受两个参数,第一个是文件指针,第二个存储指示器位置的变量。 - -`fsetpos()`函数会将文件内部指示器的位置,移动到指针变量`pos`指定的地址。注意,变量`pos`必须是通过调用`fgetpos()`方法获得的。`fsetpos()`的两个参数与`fgetpos()`必须是一样的。 - -记录文件内部指示器位置的指针变量`pos`,类型为`fpos_t*`(file position type 的缩写,意为文件定位类型)。它不一定是整数,也可能是一个 Struct 结构。 - -下面是用法示例。 - -```c -fpos_t file_pos; -fgetpos(fp, &file_pos); - -// 一系列文件操作之后 -fsetpos(fp, &file_pos); -``` - -上面示例中,先用`fgetpos()`获取内部指针的位置,后面再用`fsetpos()`恢复指针的位置。 - -执行成功时,`fgetpos()`和`fsetpos()`都会返回`0`,否则返回非零值。 - -## ferror(),clearerr() - -所有的文件操作函数如果执行失败,都会在文件指针里面记录错误状态。后面的操作只要读取错误指示器,就知道前面的操作出错了。 - -`ferror()`函数用来返回错误指示器的状态。可以通过这个函数,判断前面的文件操作是否成功。它的原型定义在头文件`stdio.h`。 - -```c -int ferror(FILE *stream); -``` - -它接受一个文件指针作为参数。如果前面的操作出现错误,`ferror()`就会返回一个非零整数(表示 true),否则返回`0`。 - -`clearerr()`函数用来重置出错指示器。它的原型定义在头文件`stdio.h`。 - -```c -void clearerr(FILE* fp); -``` - -它接受一个文件指针作为参数,没有返回值。 - -下面是一个例子。 - -```c -FILE* fp = fopen("file.txt", "w"); -char c = fgetc(fp); - -if (ferror(fp)) { - printf("读取文件:file.txt 时发生错误\n"); -} - -clearerr(fp); -``` - -上面示例中,`fgetc()`尝试读取一个以”写模式“打开的文件,读取失败就会返回 EOF。这时调用`ferror()`就可以知道上一步操作出错了。处理完以后,再用`clearerr()`清除出错状态。 - -文件操作函数如果正常执行,`ferror()`和`feof()`都会返回零。如果执行不正常,就要判断到底是哪里出了问题。 - -```c -if (fscanf(fp, "%d", &n) != 1) { - if (ferror(fp)) { - printf("io error\n"); - } - if (feof(fp)) { - printf("end of file\n"); - } - - clearerr(fp); - - fclose(fp); -} -``` - -上面示例中,当`fscanf()`函数报错时,通过检查`ferror()`和`feof()`,确定到底发生什么问题。这两个指示器改变状态后,会保持不变,所以要用`clearerr()`清除它们,`clearerr()`可以同时清除两个指示器。 - -## remove() - -`remove()`函数用于删除指定文件。它的原型定义在头文件`stdio.h`。 - -```c -int remove(const char* filename); -``` - -它接受文件名作为参数。如果删除成功,`remove()`返回`0`,否则返回非零值。 - -```c -remove("foo.txt"); -``` - -上面示例删除了`foo.txt`文件。 - -注意,删除文件必须是在文件关闭的状态下。如果是用`fopen()`打开的文件,必须先用`fclose()`关闭后再删除。 - -## rename() - -`rename()`函数用于文件改名,也用于移动文件。它的原型定义在头文件`stdio.h`。 - -```c -int rename(const char* old_filename, const char* new_filename); -``` - -它接受两个参数,第一个参数是现在的文件名,第二个参数是新的文件名。如果改名成功,`rename()`返回`0`,否则返回非零值。 - -```c -rename("foo.txt", "bar.txt"); -``` - -上面示例将`foo.txt`改名为`bar.txt`。 - -注意,改名后的文件不能与现有文件同名。另外,如果要改名的文件已经打开了,必须先关闭,然后再改名,对打开的文件进行改名会失败。 - -下面是移动文件的例子。 - -```c -rename("/tmp/evidence.txt", "/home/beej/nothing.txt"); -``` diff --git a/wiki/programming-language/C/流程控制.md b/wiki/programming-language/C/流程控制.md deleted file mode 100644 index 0933ed4f..00000000 --- a/wiki/programming-language/C/流程控制.md +++ /dev/null @@ -1,440 +0,0 @@ ---- -id: 流程控制 -title: 流程控制 -sidebar_position: 5 -data: 2022年3月30日 ---- - -C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。 - -## if 语句 - -`if`语句用于条件判断,满足条件时,就执行指定的语句。 - -```c -if (expression) statement -``` - -上面式子中,表达式`expression`为真(值不为`0`)时,就执行`statement`语句。 - -`if`后面的判断条件`expression`外面必须有圆括号,否则会报错。语句体部分`statement`可以是一个语句,也可以是放在大括号里面的复合语句。下面是一个例子。 - -```c -if (x == 10) printf("x is 10"); -``` - -上面示例中,当变量`x`为`10`时,就会输出一行文字。对于只有一个语句的语句体,语句部分通常另起一行。 - -```c -if (x == 10) - printf("x is 10\n"); -``` - -如果有多条语句,就需要把它们放在大括号里面,组成一个复合语句。 - -```c -if (line_num == MAX_LINES) { - line_num = 0; - page_num++; -} -``` - -`if`语句可以带有`else`分支,指定条件不成立时(表达式`expression`的值为`0`),所要执行的代码。 - -```c -if (expression) statement -else statement -``` - -下面是一个例子。 - -```c -if (i > j) - max = i; -else - max = j; -``` - -如果`else`的语句部分多于一行,同样可以把它们放在大括号里面。 - -`else`可以与另一个`if`语句连用,构成多重判断。 - -```c -if (expression) - statement -else if (expression) - statement -... -else if (expression) - statement -else - statement -``` - -如果有多个`if`和`else`,可以记住这样一条规则,`else`总是跟最接近的`if`匹配。 - -```c -if (number > 6) - if (number < 12) - printf("The number is more than 6, less than 12.\n"); -else - printf("It is wrong number.\n"); -``` - -上面示例中,`else`部分匹配最近的`if`(即`number < 12`),所以如果`number`等于6,就不会执行`else`的部分。 - -这样很容易出错,为了提供代码的可读性,建议使用大括号,明确`else`匹配哪一个`if`。 - -```c -if (number > 6) { - if (number < 12) { - printf("The number is more than 6, less than 12.\n"); - } -} else { - printf("It is wrong number.\n"); -} -``` - -上面示例中,使用了大括号,就可以清晰地看出`else`匹配外层的`if`。 - -## 三元运算符 ? - -C 语言有一个三元表达式`?:`,可以用作`if...else`的简写形式。 - -```c - ? : -``` - -这个操作符的含义是,表达式`expression1`如果为`true`(非0值),就执行`expression2`,否则执行`expression3`。 - -下面是一个例子,返回两个值之中的较大值。 - -```c -(i > j) ? i : j; -``` - -上面的代码等同于下面的`if`语句。 - -```c -if (i > j) - return i; -else - return j; -``` - -## switch 语句 - -switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的`else if`改成更易用、可读性更好的形式。 - -```c -switch (expression) { - case value1: statement - case value2: statement - default: statement -} -``` - -上面代码中,根据表达式`expression`不同的值,执行相应的`case`分支。如果找不到对应的值,就执行`default`分支。 - -下面是一个例子。 - -```c -switch (grade) { - case 0: - printf("False"); - break; - case 1: - printf("True"); - break; - default: - printf("Illegal"); -} -``` - -上面示例中,根据变量`grade`不同的值,会执行不同的`case`分支。如果等于`0`,执行`case 0`的部分;如果等于`1`,执行`case 1`的部分;否则,执行`default`的部分。`default`表示处理以上所有`case`都不匹配的情况。 - -每个`case`语句体的结尾,都应该有一个`break`语句,作用是跳出整个`switch`结构,不再往下执行。如果缺少`break`,就会导致继续执行下一个`case`或`default`分支。 - -```c -switch (grade) { - case 0: - printf("False"); - case 1: - printf("True"); - break; - default: - printf("Illegal"); -} -``` - -上面示例中,`case 0`的部分没有`break`语句,导致这个分支执行完以后,不会跳出`switch`结构,继续执行`case 1`分支。 - -利用这个特点,如果多个`case`分支对应同样的语句体,可以写成下面这样。 - -```c -switch (grade) { - case 0: - case 1: - printf("True"); - break; - default: - printf("Illegal"); -} -``` - -上面示例中,`case 0`分支没有任何语句,导致`case 0`和`case 1`都会执行同样的语句体。 - -`case`后面的语句体,不用放在大括号里面,这也是为什么需要`break`的原因。 - -`default`分支用来处理前面的 case 都不匹配的情况,最好放在所有 case 的后面,这样就不用写`break`语句。这个分支是可选的,如果没有该分支,遇到所有的 case 都不匹配的情况,就会直接跳出整个 switch 代码块。 - -## while 语句 - -`while`语句用于循环结构,满足条件时,不断执行循环体。 - -```c -while (expression) - statement -``` - -上面代码中,如果表达式`expression`为非零值(表示真),就会执行`statement`语句,然后再次判断`expression`是否为零;如果`expression`为零(表示伪)就跳出循环,不再执行循环体。 - -```c -while (i < n) - i = i + 2; -``` - -上面示例中,只要`i`小于`n`,`i`就会不断增加2。 - -如果循环体有多个语句,就需要使用大括号将这些语句组合在一起。 - -```c -while (expression) { - statement; - statement; -} -``` - -下面是一个例子。 - -```c -i = 0; - -while (i < 10) { - printf("i is now %d!\n", i); - i++; -} - -printf("All done!\n"); -``` - -上面代码中,循环体会执行10次,每次将`i`增加`1`,直到等于`10`才退出循环。 - -只要条件为真,`while`会产生无限循环。下面是一种常见的无限循环的写法。 - -```c -while (1) { - // ... -} -``` - -上面的示例虽然是无限循环,但是循环体内部可以用`break`语句跳出循环。 - -## do...while 结构 - -`do...while`结构是`while`的变体,它会先执行一次循环体,然后再判断是否满足条件。如果满足的话,就继续执行循环体,否则跳出循环。 - -```c -do statement -while (expression); -``` - -上面代码中,不管条件`expression`是否成立,循环体`statement`至少会执行一次。每次`statement`执行完毕,就会判断一次`expression`,决定是否结束循环。 - -```c -i = 10; - -do --i; -while (i > 0); -``` - -上面示例中,变量`i`先减去1,再判断是否大于0。如果大于0,就继续减去1,直到`i`等于`0`为止。 - -如果循环部分有多条语句,就需要放在大括号里面。 - -```c -i = 10; - -do { - printf("i is %d\n", i); - i++; -} while (i < 10); - -printf("All done!\n"); -``` - -上面例子中,变量`i`并不满足小于`10`的条件,但是循环体还是会执行一次。 - -## for 语句 - -`for`语句是最常用的循环结构,通常用于精确控制循环次数。 - -```c -for (initialization; continuation; action) - statement; -``` - -上面代码中,`for`语句的条件部分(即圆括号里面的部分)有三个表达式。 - -- `initialization`:初始化表达式,用于初始化循环变量,只执行一次。 -- `continuation`:判断表达式,只要为`true`,就会不断执行循环体。 -- `action`:循环变量处理表达式,每轮循环结束后执行,使得循环变量发生变化。 - -循环体部分的`statement`可以是一条语句,也可以是放在大括号里面的复合语句。下面是一个例子。 - -```c -for (int i = 10; i > 0; i--) - printf("i is %d\n", i); -``` - -上面示例中,循环变量`i`在`for`的第一个表达式里面声明,该变量只用于本次循环。离开循环体之后,就会失效。 - -条件部分的三个表达式,每一个都可以有多个语句,语句与语句之间使用逗号分隔。 - -```c -int i, j; -for (i = 0, j = 999; i < 10; i++, j--) { - printf("%d, %d\n", i, j); -} -``` - -上面示例中,初始化部分有两个语句,分别对变量`i`和`j`进行赋值。 - -`for`的三个表达式都不是必需的,甚至可以全部省略,这会形成无限循环。 - -```c -for (;;) { - printf("本行会无限循环地打印。\n" ); -} -``` - -上面示例由于没有判断条件,就会形成无限循环。 - -## break 语句 - -`break`语句有两种用法。一种是与`switch`语句配套使用,用来中断某个分支的执行,这种用法前面已经介绍过了。另一种用法是在循环体内部跳出循环,不再进行后面的循环了。 - -```c -for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - printf("%d, %d\n", i, j); - break; - } -} -``` - -上面示例中,`break`语句使得循环跳到下一个`i`。 - -```c -while ((ch = getchar()) != EOF) { - if (ch == '\n') break; - putchar(ch); -} -``` - -上面示例中,一旦读到换行符(`\n`),`break`命令就跳出整个`while`循环,不再继续读取了。 - -注意,`break`命令只能跳出循环体和`switch`结构,不能跳出`if`结构。 - -```c -if (n > 1) { - if (n > 2) break; // 无效 - printf("hello\n"); -} -``` - -上面示例中,`break`语句是无效的,因为它不能跳出外层的`if`结构。 - -## continue 语句 - -`continue`语句用于在循环体内部终止本轮循环,进入下一轮循环。只要遇到`continue`语句,循环体内部后面的语句就不执行了,回到循环体的头部,开始执行下一轮循环。 - -```c -for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - printf("%d, %d\n", i, j); - continue; - } -} -``` - -上面示例中,有没有`continue`语句,效果一样,都表示跳到下一个`j`。 - -```c -while ((ch = getchar()) != '\n') { - if (ch == '\t') continue; - putchar(ch); -} -``` - -上面示例中,只要读到的字符是制表符(`\t`),就用`continue`语句跳过该字符,读取下一个字符。 - -## goto 语句 - -goto 语句用于跳到指定的标签名。这会破坏结构化编程,建议不要轻易使用,这里为了语法的完整,介绍一下它的用法。 - -```c -char ch; - -top: ch = getchar(); - -if (ch == 'q') - goto top; -``` - -上面示例中,`top`是一个标签名,可以放在正常语句的前面,相当于为这行语句做了一个标记。程序执行到`goto`语句,就会跳转到它指定的标签名。 - -```c -infinite_loop: - print("Hello, world!\n"); - goto infinite_loop; -``` - -上面的代码会产生无限循环。 - -goto 的一个主要用法是跳出多层循环。 - -```c -for(...) { - for (...) { - while (...) { - do { - if (some_error_condition) - goto bail; - } while(...); - } - } -} - -bail: -// ... ... -``` - -上面代码有很复杂的嵌套循环,不使用 goto 的话,想要完全跳出所有循环,写起来很麻烦。 - -goto 的另一个用途是提早结束多重判断。 - -```c -if (do_something() == ERR) - goto error; -if (do_something2() == ERR) - goto error; -if (do_something3() == ERR) - goto error; -if (do_something4() == ERR) - goto error; -``` - -上面示例有四个判断,只要有一个发现错误,就使用 goto 跳过后面的判断。 - -注意,goto 只能在同一个函数之中跳转,并不能跳转到其他函数。 diff --git a/wiki/programming-language/C/简介.md b/wiki/programming-language/C/简介.md deleted file mode 100644 index e023e7c4..00000000 --- a/wiki/programming-language/C/简介.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -id: 简介 -title: 简介 -sidebar_position: 1 -data: 2022年3月30日 ---- - -## 历史 - -C 语言最初是作为 Unix 系统的开发工具而发明的。 - -1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix 是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言。 - -1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C 语言。 - -1973年,整个 Unix 系统都使用 C 语言重写。此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。 - -1988年,美国国家标准协会(ANSI)正式将 C 语言标准化,标志着 C 语言开始稳定和规范化。 - -几十年后的今天,C 语言依然是最广泛使用、最流行的系统编程语言之一,Unix 和 Linux 系统现在还是使用 C 语言开发。 - -## C 语言的特点 - -C 语言能够长盛不衰、广泛应用,主要原因是它有一些鲜明的特点。 - -(1)低级语言 - -C 语言能够直接操作硬件、管理内存、跟操作系统对话,这使得它是一种非常接近底层的语言,也就是低级语言,非常适合写需要跟硬件交互、有极高性能要求的程序。 - -(2)可移植性 - -C 语言的原始设计目的,是将 Unix 系统移植到其他计算机架构。这使得它从一开始就非常注重可移植性,C 程序可以相对简单地移植到各种硬件架构和操作系统。 - -除了计算机,C 语言现在还是嵌入式系统的首选编程语言,汽车、照相机、家用电器等设备的底层系统都是用 C 语言编程,这也是因为它良好的可移植性。 - -(3)简单性 - -C 语言的语法相对简单,语法规则不算太多,也几乎没有语法糖。一般来说,如果两个语法可以完成几乎相同的事情,C 语言就只会提供一种,这样大大减少了语言的复杂性。 - -而且,C 语言的语法都是基础语法,不提供高级的数据结构,比如 C 语言没有“类”(class),复杂的数据结构都需要自己构造。 - -(4)灵活性 - -C 语言对程序员的限制很少。它假设程序员知道自己在干嘛,不会限制你做各种危险的操作,你干什么都可以,后果也由自己负责。 - -C 语言的哲学是“信任程序员,不要妨碍他们做事”。比如,它让程序员自己管理内存,不提供内存自动清理功能。另外,也不提供类型检查、数组的负索引检查、指针位置的检查等保护措施。 - -表面上看,这似乎很危险,但是对于高级程序员来说,却有了更大的编程自由。不过,这也使得 C 语言的 debug 不太容易。 - -(5)总结 - -上面这些特点,使得 C 语言可以写出性能非常强、完全发挥硬件潜力的程序,而且 C 语言的编译器实现难度相对较低。但是另一方面,C 语言代码容易出错,一般程序员不容易写好。 - -此外,当代很多流行语言都是以 C 语言为基础,比如 C++、Java、C#、JavaScript 等等。学好 C 语言有助于对这些语言加深理解。 - -## C 语言的版本 - -历史上,C 语言有过多个版本。 - -(1)K&R C - -`K&R C`指的是 C 语言的原始版本。1978年,C 语言的发明者丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林(Brian Kernighan)合写了一本著名的教材《C 编程语言》(The C programming language)。由于 C 语言还没有成文的语法标准,这本书就成了公认标准,以两位作者的姓氏首字母作为版本简称“K&R C”。 - -(2)ANSI C(又称 C89 或 C90) - -C 语言的原始版本非常简单,对很多情况的描述非常模糊,加上 C 语法依然在快速发展,要求将 C 语言标准化的呼声越来越高。 - -1989年,美国国家标准协会(ANSI)制定了一套 C 语言标准。1990年,国际标准化组织(ISO)通过了这个标准。它被称为“ANSI C”,也可以按照发布年份,称为“C89 或 C90”。 - -(3)C95 - -1995年,美国国家标准协会对1989年的那个标准,进行了补充,加入多字节字符和宽字符的支持。这个版本称为 C95。 - -(4)C99 - -C 语言标准的第一次大型修订,发生在1999年,增加了许多语言特性,比如双斜杠(`//`)的注释语法。这个版本称为 C99,是目前最流行的 C 版本。 - -(5)C11 - -2011年,标准化组织再一次对 C 语言进行修订,增加了 Unicode 和多线程的支持。这个版本称为 C11。 - -(6)C17 - -C11 标准在2017年进行了修补,但发布是在2018年。新版本只是解决了 C11 的一些缺陷,没有引入任何新功能。这个版本称为 C17。 - -(7)C2x - -标准化组织正在讨论 C 语言的下一个版本,据说可能会在2023年通过,到时就会称为 C23。 - -## C 语言的编译 - -C 语言是一种编译型语言,源码都是文本文件,本身无法执行。必须通过编译器,生成二进制的可执行文件,才能执行。编译器将代码从文本翻译成二进制指令的过程,就称为编译阶段,又称为“编译时”(compile time),跟运行阶段(又称为“运行时”)相区分。 - -目前,最常见的 C 语言编译器是自由软件基金会推出的 GCC 编译器,它可以免费使用。本书也使用这个编译器。Linux 和 Mac 系统可以直接安装 GCC,Windows 系统可以安装 MinGW。但是,也可以不用这么麻烦,网上有在线编译器,能够直接在网页上模拟运行 C 代码,查看结果,下面就是两个这样的工具。 - -- CodingGround: -- OnlineGDB: - -本书的例子都使用 GCC 在命令行进行编译。 - -## Hello World 示例 - -C 语言的源代码文件,通常以后缀名`.c`结尾。下面是一个简单的 C 程序`hello.c`。它就是一个普通的文本文件,任何文本编译器都能用来写。 - -```c -#include - -int main(void) { - printf("Hello World\n"); - return 0; -} -``` - -上面这个程序的唯一作用,就是在屏幕上面显示“Hello World”。 - -这里不讲解这些代码是什么意思,只是作为一个例子,让大家看看 C 代码应该怎么编译和运行。假设你已经安装好了 GCC 编译器,可以打开命令行,执行下面的命令。 - -```Shell -gcc hello.cc -``` - -上面命令使用`gcc`编译器,将源文件`hello.c`编译成二进制代码。注意,`$`是命令行提示符,你真正需要输入的是`$`后面的部分。 - -运行这个命令以后,默认会在当前目录下生成一个编译产物文件`a.out`(assembler output 的缩写,Windows 平台为`a.exe`)。执行该文件,就会在屏幕上输出`Hello World`。 - -```shell -$ ./a.out -Hello World -``` - -GCC 的`-o`参数(output 的缩写)可以指定编译产物的文件名。 - -```shell -gcc -o hello hello.c -``` - -上面命令的`-o hello`指定,编译产物的文件名为`hello`(取代默认的`a.out`)。编译后就会生成一个名叫`hello`的可执行文件,相当于为`a.out`指定了名称。执行该文件,也会得到同样的结果。 - -```shell -$ ./hello -Hello World -``` - -GCC 的`-std=`参数(standard 的缩写)还可以指定按照哪个 C 语言的标准进行编译。 - -```shell -gcc -std=c99 hello.c -``` - -上面命令指定按照 C99 标准进行编译。 - -注意,`-std`后面需要用`=`连接参数,而不是像上面的`-o`一样用空格,并且`=`前后也不能有多余的空格。 diff --git a/wiki/programming-language/C/语法.md b/wiki/programming-language/C/语法.md deleted file mode 100644 index 79e6768a..00000000 --- a/wiki/programming-language/C/语法.md +++ /dev/null @@ -1,381 +0,0 @@ ---- -id: 语法 -title: 语法 -sidebar_position: 2 -data: 2022年3月30日 ---- - -## 语句 - -C 语言的代码由一行行语句(statement)组成。语句就是程序执行的一个操作命令。C 语言规定,语句必须使用分号结尾,除非有明确规定可以不写分号。 - -```c -int x = 1; -``` - -上面就是一个变量声明语句,声明整数变量`x`,并且将值设为`1`。 - -多个语句可以写在一行。 - -```c -int x; x = 1; -``` - -上面示例是两个语句写在一行。所以,语句之间的换行符并不是必需的,只是为了方便阅读代码。 - -一个语句也可以写成多行,这时就要依靠分号判断语句在哪一行结束。 - -```c -int x; -x -= -1 -; -``` - -上面示例中,第二个语句`x = 1;`被拆成了四行。编译器会自动忽略代码里面的换行。 - -单个分号也是有效语句,称为“空语句”,虽然毫无作用。 - -```c -; -``` - -## 表达式 - -C 语言的各种计算,主要通过表达式完成。表达式(expression)是一个计算式,用来获取值。 - -```c -1 + 2 -``` - -上面代码就是一个表达式,用来获取`1 + 2`这个算术计算的结果。 - -表达式加上分号,也可以成为语句,但是没有实际的作用。 - -```c -8; -3 + 4; -``` - -上面示例是两个表达式,加上分号以后成为语句。 - -表达式与语句的区别主要是两点: - -- 语句可以包含表达式,但是表达式本身不构成语句。 -- 表达式都有返回值,语句不一定有。因为语句用来执行某个命令,很多时候不需要返回值,比如变量声明语句(`int x = 1`)就没有返回值。 - -## 语句块 - -C 语言允许多个语句使用一对大括号`{}`,组成一个块,也称为复合语句(compounded statement)。在语法上,语句块可以视为多个语句组成的一个复合语句。 - -```c -{ - int x; - x = 1; -} -``` - -上面示例中,大括号形成了一个语句块。 - -大括号的结尾不需要添加分号。 - -## 空格 - -C 语言里面的空格,主要用来帮助编译器区分语法单位。如果语法单位不用空格就能区分,空格就不是必须的,只是为了增加代码的可读性。 - -```c -int x = 1; -// 等同于 -int x=1; -``` - -上面示例中,赋值号(`=`)前后有没有空格都可以,因为编译器这里不借助空格,就能区分语法单位。 - -语法单位之间的多个空格,等同于单个空格。 - -```c -int x = 1; -``` - -上面示例中,各个语法单位之间的多个空格,跟单个空格的效果是一样的。 - -空格还用来表示缩进。多层级的代码有没有缩进,其实对于编译器来说并没有差别,没有缩进的代码也是完全可以运行的。强调代码缩进,只是为了增强代码可读性,便于区分代码块。 - -大多数 C 语言的风格要求是,下一级代码比上一级缩进4个空格。为了书写的紧凑,本书采用缩写两个空格。 - -```c -// 缩进四个空格 -if (x > 0) - printf("positive\n"); - -// 缩进两个空格 -if (x > 0) - printf("positive\n"); -``` - -只包含空格的行被称为空白行,编译器会完全忽略该行。 - -## 注释 - -注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。 - -C 语言的注释有两种表示方法。第一种方法是将注释放在`/*...*/`之间,内部可以分行。 - -```c -/* 注释 */ - -/* - 这是一行注释 -*/ -``` - -这种注释可以插在行内。 - -```c -int open(char* s /* file name */, int mode); -``` - -上面示例中,`/* file name */`用来对函数参数进行说明,跟在它后面的代码依然会有效执行。 - -这种注释一定不能忘记写结束符号`*/`,否则很容易导致错误。 - -```c -printf("a "); /* 注释一 -printf("b "); -printf("c "); /* 注释二 */ -printf("d "); -``` - -上面示例的原意是,第一行和第三行代码的尾部,有两个注释。但是,第一行注释忘记写结束符号,导致注释一延续到第三行结束。 - -第二种写法是将注释放在双斜杠`//`后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾。这是 C99 标准新增的语法。 - -```c -// 这是一行注释 - -int x = 1; // 这也是注释 -``` - -不管是哪一种注释,都不能放在双引号里面。双引号里面的注释符号,会成为字符串的一部分,解释为普通符号,失去注释作用。 - -```c -printf("// hello /* world */ "); -``` - -上面示例中,双引号里面的注释符号,都会被视为普通字符,没有注释作用。 - -编译时,注释会被替换成一个空格,所以`min/* space */Value`会变成`min Value`,而不是`minValue`。 - -## printf() - -### 基本用法 - -本书的示例会大量用到`printf()`函数,这里先介绍一下这个函数。 - -`printf()`的作用是将参数文本输出到屏幕。它名字里面的`f`代表`format`(格式化),表示可以定制输出文本的格式。 - -```c -printf("Hello World"); -``` - -上面命令会在屏幕上输出一行文字“Hello World”。 - -`printf()`不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符`\n`。 - -```c -printf("Hello World\n"); -``` - -如果文本内部有换行,也是通过插入换行符来实现。 - -```c -printf("Hello\nWorld\n"); -``` - -上面示例先输出一个`Hello`,然后换行,在下一行开头输出`World`,然后又是一个换行。 - -上面示例也可以写成两个`printf()`,效果完全一样。 - -```c -printf("Hello\n"); -printf("World\n"); -``` - -`printf()`是在标准库的头文件`stdio.h`定义的。使用这个函数之前,必须在源码文件头部引入这个头文件。 - -```c -#include - -int main(void) { - printf("Hello World\n"); -} -``` - -上面示例中,只有在源码头部加上`#include `,才能使用`printf()`这个函数。`#include`指令的详细解释,请看《预处理器》一章。 - -### 占位符 - -`printf()`可以在输出文本中指定占位符。所谓“占位符”,就是这个位置可以用其他值代入。 - -```c -// 输出 There are 3 apples -printf("There are %i apples\n", 3); -``` - -上面示例中,`There are %i apples\n`是输出文本,里面的`%i`就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律为百分号`%`,第二个字符表示占位符的类型,`%i`表示这里代入的值必须是一个整数。 - -`printf()`的第二个参数就是替换占位符的值,上面的例子是整数`3`替换`%i`。执行后的输出结果就是`There are 3 apples`。 - -常用的占位符除了`%i`,还有`%s`表示代入的是字符串。 - -```c -printf("%s will come tonight\n", "Jane"); -``` - -上面示例中,`%s`表示代入的是一个字符串,所以`printf()`的第二个参数就必须是字符串,这个例子是`Jane`。执行后的输出就是`Jane will come tonight`。 - -输出文本里面可以使用多个占位符。 - -```c -printf("%s says it is %i o'clock\n", "Ben", 21); -``` - -上面示例中,输出文本`%s says it is %i o'clock`有两个占位符,第一个是字符串占位符`%s`,第二个是整数占位符`%i`,分别对应`printf()`的第二个参数(`Ben`)和第三个参数(`21`)。执行后的输出就是`Ben says it is 21 o'clock`。 - -`printf()`参数与占位符是一一对应关系,如果有`n`个占位符,`printf()`的参数就应该有`n + 1`个。如果参数个数少于对应的占位符,`printf()`可能会输出内存中的任意值。 - -`printf()`的占位符有许多种类,与 C 语言的数据类型相对应。下面按照字母顺序,列出常用的占位符,方便查找,具体含义在后面章节介绍。 - -- `%a`:浮点数。 -- `%A`:浮点数。 -- `%c`:字符。 -- `%d`:十进制整数。 -- `%e`:使用科学计数法的浮点数,指数部分的`e`为小写。 -- `%E`:使用科学计数法的浮点数,指数部分的`E`为大写。 -- `%i`:整数,基本等同于`%d`。 -- `%f`:小数(包含`float`类型和`double`类型)。 -- `%g`:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的`e`为小写。 -- `%G`:等同于`%g`,唯一的区别是指数部分的`E`为大写。 -- `%hd`:十进制 short int 类型。 -- `%ho`:八进制 short int 类型。 -- `%hx`:十六进制 short int 类型。 -- `%hu`:unsigned short int 类型。 -- `%ld`:十进制 long int 类型。 -- `%lo`:八进制 long int 类型。 -- `%lx`:十六进制 long int 类型。 -- `%lu`:unsigned long int 类型。 -- `%lld`:十进制 long long int 类型。 -- `%llo`:八进制 long long int 类型。 -- `%llx`:十六进制 long long int 类型。 -- `%llu`:unsigned long long int 类型。 -- `%Le`:科学计数法表示的 long double 类型浮点数。 -- `%Lf`:long double 类型浮点数。 -- `%n`:已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。 -- `%o`:八进制整数。 -- `%p`:指针。 -- `%s`:字符串。 -- `%u`:无符号整数(unsigned int)。 -- `%x`:十六进制整数。 -- `%zd`:`size_t`类型。 -- `%%`:输出一个百分号。 - -### 输出格式 - -`printf()`可以定制占位符的输出格式。 - -(1)限定宽度 - -`printf()`允许限定占位符的最小宽度。 - -```c -printf("%5d\n", 123); // 输出为 " 123" -``` - -上面示例中,`%5d`表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。 - -输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的`%`的后面插入一个`-`号。 - -```c -printf("%-5d\n", 123); // 输出为 "123 " -``` - -上面示例中,输出内容`123`的后面添加了空格。 - -对于小数,这个限定符会限制所有数字的最小显示宽度。 - -```c -// 输出 " 123.450000" -printf("%12f\n", 123.45); -``` - -上面示例中,`%12f`表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以`123.45`输出结果的头部会添加2个空格。 - -(2)总是显示正负号 - -默认情况下,`printf()`不对正数显示`+`号,只对负数显示`-`号。如果想让正数也输出`+`号,可以在占位符的`%`后面加一个`+`。 - -```c -printf("%+d\n", 12); // 输出 +12 -printf("%+d\n", -12); // 输出 -12 -``` - -上面示例中,`%+d`可以确保输出的数值,总是带有正负号。 - -(3)限定小数位数 - -输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成`%.2f`。 - -```c -// 输出 Number is 0.50 -printf("Number is %.2f\n", 0.5); -``` - -上面示例中,如果希望小数点后面输出3位(`0.500`),占位符就要写成`%.3f`。 - -这种写法可以与限定宽度占位符,结合使用。 - -```c -// 输出为 " 0.50" -printf("%6.2f\n", 0.5); -``` - -上面示例中,`%6.2f`表示输出字符串最小宽度为6,小数位数为2。所以,输出字符串的头部有两个空格。 - -最小宽度和小数位数这两个限定值,都可以用`*`代替,通过`printf()`的参数传入。 - -```c -printf("%*.*f\n", 6, 2, 0.5); - -// 等同于 -printf("%6.2f\n", 0.5); -``` - -上面示例中,`%*.*f`的两个星号通过`printf()`的两个参数`6`和`2`传入。 - -(4)输出部分字符串 - -`%s`占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用`%.[m]s`指定输出的长度,其中`[m]`代表一个数字,表示所要输出的长度。 - -```c -// 输出 hello -printf("%.5s\n", "hello world"); -``` - -上面示例中,占位符`%.5s`表示只输出字符串“hello world”的前5个字符,即“hello”。 - -## 标准库,头文件 - -程序需要用到的功能,不一定需要自己编写,C 语言可能已经自带了。程序员只要去调用这些自带的功能,就省得自己编写代码了。举例来说,`printf()`这个函数就是 C 语言自带的,只要去调用它,就能实现在屏幕上输出内容。 - -C 语言自带的所有这些功能,统称为“标准库”(standard library),因为它们是写入标准的,到底包括哪些功能,应该怎么使用的,都是规定好的,这样才能保证代码的规范和可移植。 - -不同的功能定义在不同的文件里面,这些文件统称为“头文件”(header file)。如果系统自带某一个功能,就一定还会自带描述这个功能的头文件,比如`printf()`的头文件就是系统自带的`stdio.h`。头文件的后缀通常是`.h`。 - -如果要使用某个功能,就必须先加载对应的头文件,加载使用的是`#include`命令。这就是为什么使用`printf()`之前,必须先加载`stdio.h`的原因。 - -```c -#include -``` - -注意,加载头文件的`#include`语句不需要分号结尾,详见《预处理器》一章。 diff --git a/wiki/programming-language/C/运算符.md b/wiki/programming-language/C/运算符.md deleted file mode 100644 index 414ef222..00000000 --- a/wiki/programming-language/C/运算符.md +++ /dev/null @@ -1,465 +0,0 @@ ---- -id: 运算符 -title: 运算符 -sidebar_position: 4 -data: 2022年3月30日 ---- - -C 语言的运算符非常多,一共有 50 多种,可以分成若干类。 - -## 算术运算符 - -算术运算符专门用于算术运算,主要有下面几种。 - -- `+`:正值运算符(一元运算符) -- `-`:负值运算符(一元运算符) -- `+`:加法运算符(二元运算符) -- `-`:减法运算符(二元运算符) -- `*`:乘法运算符 -- `/`:除法运算符 -- `%`:余值运算符 - -(1)`+`,`-` - -`+`和`-`既可以作为一元运算符,也可以作为二元运算符。所谓“一元运算符”,指的是只需要一个运算数就可以执行。一元运算符`-`用来改变一个值的正负号。 - -```c -int x = -12; -``` - -上面示例中,`-`将`12`这个值变成`-12`。 - -一元运算符`+`对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。 - -```c -int x = -12; -int y = +x; -``` - -上面示例中,变量`y`的值还是`-12`,因为`+`不会改变正负值。 - -二元运算符`+`和`-`用来完成加法和减法。 - -```c -int x = 4 + 22; -int y = 61 - 23; -``` - -(2)`*` - -运算符`*`用来完成乘法。 - -```c -int num = 5; -printf("%i\n", num * num); // 输出 25 -``` - -(3)`/` - -运算符`/`用来完成除法。注意,两个整数相除,得到还是一个整数。 - -```c -float x = 6 / 4; -printf("%f\n", x); // 输出 1.000000 -``` - -上面示例中,尽管变量`x`的类型是`float`(浮点数),但是`6 / 4`得到的结果是`1.0`,而不是`1.5`。原因就在于 C 语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。 - -如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时 C 语言就会进行浮点数除法。 - -```c -float x = 6.0 / 4; // 或者写成 6 / 4.0 -printf("%f\n", x); // 输出 1.500000 -``` - -上面示例中,`6.0 / 4`表示进行浮点数除法,得到的结果就是`1.5`。 - -下面是另一个例子。 - -```c -int score = 5; -score = (score / 20) * 100; -``` - -上面的代码,你可能觉得经过运算,`score`会等于`25`,但是实际上`score`等于`0`。这是因为`score / 20`是整除,会得到一个整数值`0`,所以乘以`100`后得到的也是`0`。 - -为了得到预想的结果,可以将除数`20`改成`20.0`,让整除变成浮点数除法。 - -```c -score = (score / 20.0) * 100; -``` - -(4)`%` - -运算符`%`表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。 - -```c -int x = 6 % 4; // 2 -``` - -负数求模的规则是,结果的正负号由第一个运算数的正负号决定。 - -```c -11 % -5 // 1 --11 % -5 // -1 --11 % 5 // -1 -``` - -上面示例中,第一个运算数的正负号(`11`或`-11`)决定了结果的正负号。 - -(5)赋值运算的简写形式 - -如果变量对自身的值进行算术运算,C 语言提供了简写形式,允许将赋值运算符和算术运算符结合成一个运算符。 - -- `+=` -- `-=` -- `*=` -- `/=` -- `%=` - -下面是一些例子。 - -```c -i += 3; // 等同于 i = i + 3 -i -= 8; // 等同于 i = i - 8 -i *= 9; // 等同于 i = i * 9 -i /= 2; // 等同于 i = i / 2 -i %= 5; // 等同于 i = i % 5 -``` - -## 自增运算符,自减运算符 - -C 语言提供两个运算符,对变量自身进行`+ 1`和`- 1`的操作。 - -- `++`:自增运算符 -- `--`:自减运算符 - -```c -i++; // 等同于 i = i + 1 -i--; // 等同于 i = i - 1 -``` - -这两个运算符放在变量的前面或后面,结果是不一样的。`++var`和`--var`是先执行自增或自减操作,再返回操作后`var`的值;`var++`和`var--`则是先返回操作前`var`的值,再执行自增或自减操作。 - -```c -int i = 42; -int j; - -j = (i++ + 10); -// i: 43 -// j: 52 - -j = (++i + 10) -// i: 44 -// j: 54 -``` - -上面示例中,自增运算符的位置差异,会导致变量`j`得到不同的值。这样的写法很容易出现意料之外的结果,为了消除意外,可以改用下面的写法。 - -```c -/* 写法一 */ -j = (i + 10); -i++; - -/* 写法二 */ -i++; -j = (i + 10); -``` - -上面示例中,变量`i`的自增运算与返回值是分离的两个步骤,这样就不太会出错,也提高了代码的可读性。 - -## 关系运算符 - -C 语言用于比较的表达式,称为“关系表达式”(relational expression),里面使用的运算符就称为“关系运算符”(relational operator),主要有下面6个。 - -- `>` 大于运算符 -- `<` 小于运算符 -- `>=` 大于等于运算符 -- `<=` 小于等于运算符 -- `==` 相等运算符 -- `!=` 不相等运算符 - -下面是一些例子。 - -```c -a == b; -a != b; -a < b; -a > b; -a <= b; -a >= b; -``` - -关系表达式通常返回`0`或`1`,表示真伪。C 语言中,`0`表示伪,所有非零值表示真。比如,`20 > 12`返回`1`,`12 > 20`返回`0`。 - -关系表达式常用于`if`或`while`结构。 - -```c -if (x == 3) { - printf("x is 3.\n"); -} -``` - -注意,相等运算符`==`与赋值运算符`=`是两个不一样的运算符,不要混淆。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。 - -```c -if (x = 3) ... -``` - -上面示例中,原意是`x == 3`,但是不小心写成`x = 3`。这个式子表示对变量`x`赋值`3`,它的返回值为`3`,所以`if`判断总是为真。 - -为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。 - -```c -if (3 == x) ... -``` - -这样的话,如果把`==`误写成`=`,编译器就会报错。 - -```c -/* 报错 */ -if (3 = x) ... -``` - -另一个需要避免的错误是,多个关系运算符不宜连用。 - -```c -i < j < k -``` - -上面示例中,连续使用两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量`j`的值在`i`和`k`之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式。 - -```c -(i < j) < k -``` - -上面式子中,`i < j`返回`0`或`1`,所以最终是`0`或`1`与变量`k`进行比较。如果想要判断变量`j`的值是否在`i`和`k`之间,应该使用下面的写法。 - -```c -i < j && j < k -``` - -## 逻辑运算符 - -逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。 - -- `!`:否运算符(改变单个表达式的真伪)。 -- `&&`:与运算符(两侧的表达式都为真,则为真,否则为伪)。 -- `||`:或运算符(两侧至少有一个表达式为真,则为真,否则为伪)。 - -下面是与运算符的例子。 - -```c -if (x < 10 && y > 20) - printf("Doing something!\n"); -``` - -上面示例中,只有`x < 10`和`y > 20`同时为真,`x < 10 && y > 20`才会为真。 - -下面是否运算符的例子。 - -```c -if (!(x < 12)) - printf("x is not less than 12\n"); -``` - -上面示例中,由于否运算符`!`具有比`<`更高的优先级,所以必须使用括号,才能对表达式`x < 12`进行否运算。当然,合理的写法是`if (x >= 12)`,这里只是为了举例。 - -对于逻辑运算符来说,任何非零值都表示真,零值表示伪。比如,`5 || 0`会返回`1`,`5 && 0`会返回`0`。 - -逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。 - -```c -if (number != 0 && 12/number == 2) -``` - -上面示例中,如果`&&`左侧的表达式(`number != 0`)为伪,即`number`等于`0`时,右侧的表达式(`12/number == 2`)是不会执行的。因为这时左侧表达式返回`0`,整个`&&`表达式肯定为伪,就直接返回`0`,不再执行右侧的表达式了。 - -由于逻辑运算符的执行顺序是先左后右,所以下面的代码是有问题的。 - -```c -while ((x++ < 10) && (x + y < 20)) -``` - -上面示例中,执行左侧表达式后,变量`x`的值就已经变了。等到执行右侧表达式的时候,是用新的值在计算,这通常不是原始意图。 - -## 位运算符 - -C 语言提供一些位运算符,用来操作二进制位(bit)。 - -(1)取反运算符`~` - -取反运算符`~`是一个一元运算符,用来将每一个二进制位变成相反值,即`0`变成`1`,`1`变成`0`。 - -```c -// 返回 01101100 -~ 10010011 -``` - -上面示例中,`~`对每个二进制位取反,就得到了一个新的值。 - -注意,`~`运算符不会改变变量的值,只是返回一个新的值。 - -(2)与运算符`&` - -与运算符`&`将两个值的每一个二进制位进行比较,返回一个新的值。当两个二进制位都为`1`,就返回`1`,否则返回`0`。 - -```c -// 返回 00010001 -10010011 & 00111101 -``` - -上面示例中,两个八位二进制数进行逐位比较,返回一个新的值。 - -与运算符`&`可以与赋值运算符`=`结合,简写成`&=`。 - -```c -int val = 3; -val = val & 0377; - -// 简写成 -val &= 0377; -``` - -(3)或运算符`|` - -或运算符`|`将两个值的每一个二进制位进行比较,返回一个新的值。两个二进制位只要有一个为`1`(包含两个都为`1`的情况),就返回`1`,否则返回`0`。 - -```c -// 返回 10111111 -10010011 | 00111101 -``` - -或运算符`|`可以与赋值运算符`=`结合,简写成`|=`。 - -```c -int val = 3; -val = val | 0377; - -// 简写为 -val |= 0377; -``` - -(4)异或运算符`^` - -异或运算符`^`将两个值的每一个二进制位进行比较,返回一个新的值。两个二进制位有且仅有一个为`1`,就返回`1`,否则返回`0`。 - -```c -// 返回 10101110 -10010011 ^ 00111101 -``` - -异或运算符`^`可以与赋值运算符`=`结合,简写成`^=`。 - -```c -int val = 3; -val = val ^ 0377; - -// 简写为 -val ^= 0377; -``` - -(5)左移运算符`<<` - -左移运算符`<<`将左侧运算数的每一位,向左移动指定的位数,尾部空出来的位置使用`0`填充。 - -```c -// 1000101000 -10001010 << 2 -``` - -上面示例中,`10001010`的每一个二进制位,都向左侧移动了两位。 - -左移运算符相当于将运算数乘以2的指定次方,比如左移2位相当于乘以4(2的2次方)。 - -左移运算符`<<`可以与赋值运算符`=`结合,简写成`<<=`。 - -```c -int val = 1; -val = val << 2; - -// 简写为 -val <<= 2; -``` - -(6)右移运算符`>>` - -右移运算符`>>`将左侧运算数的每一位,向右移动指定的位数,尾部无法容纳的值将丢弃,头部空出来的位置使用`0`填充。 - -```c -// 返回 00100010 -10001010 >> 2 -``` - -上面示例中,`10001010`的每一个二进制位,都向右移动两位。最低的两位`10`被丢弃,头部多出来的两位补`0`,所以最后得到`00100010`。 - -注意,右移运算符最好只用于无符号整数,不要用于负数。因为不同系统对于右移后如何处理负数的符号位,有不同的做法,可能会得到不一样的结果。 - -右移运算符相当于将运算数除以2的指定次方,比如右移2位就相当于除以4(2的2次方)。 - -右移运算符`>>`可以与赋值运算符`=`结合,简写成`>>=`。 - -```c -int val = 1; -val = val >> 2; - -// 简写为 -val >>= 2; -``` - -## 逗号运算符 - -逗号运算符用于将多个表达式写在一起,从左到右依次运行每个表达式。 - -```c -x = 10, y = 20; -``` - -上面示例中,有两个表达式(`x = 10`和`y = 20`),逗号使得它们可以放在同一条语句里面。 - -逗号运算符返回最后一个表达式的值,作为整个语句的值。 - -```c -int x; -x = 1, 2, 3; -``` - -上面示例中,逗号的优先级低于赋值运算符,所以先执行赋值运算,再执行逗号运算,变量`x`等于`1`。 - -## 运算优先级 - -优先级指的是,如果一个表达式包含多个运算符,哪个运算符应该优先执行。各种运算符的优先级是不一样的。 - -```c -3 + 4 * 5; -``` - -上面示例中,表达式`3 + 4 * 5`里面既有加法运算符(`+`),又有乘法运算符(`*`)。由于乘法的优先级高于加法,所以会先计算`4 * 5`,而不是先计算`3 + 4`。 - -如果两个运算符优先级相同,则根据运算符是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符(`=`)。 - -```c -5 * 6 / 2; -``` - -上面示例中,`*`和`/`的优先级相同,它们都是左结合运算符,所以从左到右执行,先计算`5 * 6`,再计算`6 / 2`。 - -运算符的优先级顺序很复杂。下面是部分运算符的优先级顺序(按照优先级从高到低排列)。 - -- 圆括号(`()`) -- 自增运算符(`++`),自减运算符(`--`) -- 一元运算符(`+`和`-`) -- 乘法(`*`),除法(`/`) -- 加法(`+`),减法(`-`) -- 关系运算符(`<`、`>`等) -- 赋值运算符(`=`) - -由于圆括号的优先级最高,可以使用它改变其他运算符的优先级。 - -```c -int x = (3 + 4) * 5; -``` - -上面示例中,由于添加了圆括号,加法会先于乘法进行运算。 - -完全记住所有运算符的优先级没有必要,解决方法是多用圆括号,防止出现意料之外的情况,也有利于提高代码的可读性。 diff --git a/wiki/programming-language/C/预处理器.md b/wiki/programming-language/C/预处理器.md deleted file mode 100644 index d03a0186..00000000 --- a/wiki/programming-language/C/预处理器.md +++ /dev/null @@ -1,590 +0,0 @@ ---- -id: 预处理器 -title: 预处理器 -sidebar_position: 16 -data: 2022年3月30日 ---- - -## 简介 - -C 语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。 - -预处理器首先会清理代码,进行删除注释、多行的语句合成一个逻辑行等等。然后,执行`#`开头的预处理指令。本章介绍 C 语言的预处理指令。 - -预处理指令可以出现在程序的任何地方,但是习惯上,往往放在代码的开头部分。 - -每个预处理指令都以`#`开头,放在一行的行首,指令前面可以有空白字符(比如空格或制表符)。`#`和指令的其余部分之间也可以有空格,但是为了兼容老的编译器,一般不留空格。 - -所有预处理指令都是一行的,除非在行尾使用反斜杠,将其折行。指令结尾处不需要分号。 - -## `#define` - -`#define`是最常见的预处理指令,用来将指定的词替换成另一个词。它的参数分成两个部分,第一个参数就是要被替换的部分,其余参数是替换后的内容。每条替换规则,称为一个宏(macro)。 - -```c -#define MAX 100 -``` - -上面示例中,`#define`指定将源码里面的`MAX`,全部替换成`100`。`MAX`就称为一个宏。 - -宏的名称不允许有空格,而且必须遵守 C 语言的变量命名规则,只能使用字母、数字与下划线(`_`),且首字符不能是数字。 - -宏是原样替换,指定什么内容,就一模一样替换成什么内容。 - -```c -#define HELLO "Hello, world" - -// 相当于 printf("%s", "Hello, world"); -printf("%s", HELLO); -``` - -上面示例中,宏`HELLO`会被原样替换成`"Hello, world"`。 - -`#define`指令可以出现在源码文件的任何地方,从指令出现的地方到该文件末尾都有效。习惯上,会将`#define`放在源码文件的头部。它的主要好处是,会使得程序的可读性更好,也更容易修改。 - -`#define`指令从`#`开始,一直到换行符为止。如果整条指令过长,可以在折行处使用反斜杠,延续到下一行。 - -```c -#define OW "C programming language is invented \ -in 1970s." -``` - -上面示例中,第一行结尾的反斜杠将`#define`指令拆成两行。 - -`#define`允许多重替换,即一个宏可以包含另一个宏。 - -```c -#define TWO 2 -#define FOUR TWO*TWO -``` - -上面示例中,`FOUR`会被替换成`2*2`。 - -注意,如果宏出现在字符串里面(即出现在双引号中),或者是其他标识符的一部分,就会失效,并不会发生替换。 - -```c -#define TWO 2 - -// 输出 TWO -printf("TWO\n"); - -// 输出 22 -const TWOs = 22; -printf("%d\n", TWOs); -``` - -上面示例中,双引号里面的`TWO`,以及标识符`TWOs`,都不会被替换。 - -同名的宏可以重复定义,只要定义是相同的,就没有问题。如果定义不同,就会报错。 - -```c -// 正确 -#define FOO hello -#define FOO hello - -// 报错 -#define BAR hello -#define BAR world -``` - -上面示例中,宏`FOO`没有变化,所以可以重复定义,宏`BAR`发生了变化,就报错了。 - -## 带参数的宏 - -### 基本用法 - -宏的强大之处在于,它的名称后面可以使用括号,指定接受一个或多个参数。 - -```c -#define SQUARE(X) X*X -``` - -上面示例中,宏`SQUARE`可以接受一个参数`X`,替换成`X*X`。 - -注意,宏的名称与左边圆括号之间,不能有空格。 - -这个宏的用法如下。 - -```c -// 替换成 z = 2*2; -z = SQUARE(2); -``` - -这种写法很像函数,但又不是函数,而是完全原样的替换,会跟函数有不一样的行为。 - -```c -#define SQUARE(X) X*X - -// 输出19 -printf("%d\n", SQUARE(3 + 4)); -``` - -上面示例中,`SQUARE(3 + 4)`如果是函数,输出的应该是49(`7*7`);宏是原样替换,所以替换成`3 + 4*3 + 4`,最后输出19。 - -可以看到,原样替换可能导致意料之外的行为。解决办法就是在定义宏的时候,尽量多使用圆括号,这样可以避免很多意外。 - -```c -#define SQUARE(X) ((X) * (X)) -``` - -上面示例中,`SQUARE(X)`替换后的形式,有两层圆括号,就可以避免很多错误的发生。 - -宏的参数也可以是空的。 - -```c -#define getchar() getc(stdin) -``` - -上面示例中,宏`getchar()`的参数就是空的。这种情况其实可以省略圆括号,但是加上了,会让它看上去更像函数。 - -一般来说,带参数的宏都是一行的。下面是两个例子。 - -```c -#define MAX(x, y) ((x)>(y)?(x):(y)) -#define IS_EVEN(n) ((n)%2==0) -``` - -如果宏的长度过长,可以使用反斜杠(`\`)折行,将宏写成多行。 - -```c -#define PRINT_NUMS_TO_PRODUCT(a, b) { \ - int product = (a) * (b); \ - for (int i = 0; i < product; i++) { \ - printf("%d\n", i); \ - } \ -} -``` - -上面示例中,替换文本放在大括号里面,这是为了创造一个块作用域,避免宏内部的变量污染外部。 - -带参数的宏也可以嵌套,一个宏里面包含另一个宏。 - -```c -#define QUADP(a, b, c) ((-(b) + sqrt((b) * (b) - 4 * (a) * (c))) / (2 * (a))) -#define QUADM(a, b, c) ((-(b) - sqrt((b) * (b) - 4 * (a) * (c))) / (2 * (a))) -#define QUAD(a, b, c) QUADP(a, b, c), QUADM(a, b, c) -``` - -上面示例是一元二次方程组求解的宏,由于存在正负两个解,所以宏`QUAD`先替换成另外两个宏`QUADP`和`QUADM`,后者再各自替换成一个解。 - -那么,什么时候使用带参数的宏,什么时候使用函数呢? - -一般来说,应该首先使用函数,它的功能更强、更容易理解。宏有时候会产生意想不到的替换结果,而且往往只能写成一行,除非对换行符进行转义,但是可读性就变得很差。 - -宏的优点是相对简单,本质上是字符串替换,不涉及数据类型,不像函数必须定义数据类型。而且,宏将每一处都替换成实际的代码,省掉了函数调用的开销,所以性能会好一些。另外,以前的代码大量使用宏,尤其是简单的数学运算,为了读懂前人的代码,需要对它有所了解。 - -### `#`运算符,`##`运算符 - -由于宏不涉及数据类型,所以替换以后可能为各种类型的值。如果希望替换后的值为字符串,可以在替换文本的参数前面加上`#`。 - -```c -#define STR(x) #x - -// 等同于 printf("%s\n", "3.14159"); -printf("%s\n", STR(3.14159)); -``` - -上面示例中,`STR(3.14159)`会被替换成`3.14159`。如果`x`前面没有`#`,这会被解释成一个浮点数,有了`#`以后,就会被转换成字符串。 - -下面是另一个例子。 - -```c -#define XNAME(n) "x"#n - -// 输出 x4 -printf("%s\n", XNAME(4)); -``` - -上面示例中,`#n`指定参数输出为字符串,再跟前面的字符串结合,最终输出为`"x4"`。如果不加`#`,这里实现起来就很麻烦了。 - -如果替换后的文本里面,参数需要跟其他标识符连在一起,组成一个新的标识符,可以使用`##`运算符。它起到粘合作用,将参数“嵌入”一个标识符之中。 - -```c -#define MK_ID(n) i##n -``` - -上面示例中,`n`是宏`MK_ID`的参数,这个参数需要跟标识符`i`粘合在一起,这时`i`和`n`之间就要使用`##`运算符。下面是这个宏的用法示例。 - -```c -int MK_ID(1), MK_ID(2), MK_ID(3); -// 替换成 -int i1, i2, i3; -``` - -上面示例中,替换后的文本`i1`、`i2`、`i3`是三个标识符,参数`n`是标识符的一部分。从这个例子可以看到,`##`运算符的一个主要用途是批量生成变量名和标识符。 - -### 不定参数的宏 - -宏的参数还可以是不定数量的(即不确定有多少个参数),`...`表示剩余的参数。 - -```c -#define X(a, b, ...) (10*(a) + 20*(b)), __VA_ARGS__ -``` - -上面示例中,`X(a, b, ...)`表示`X()`至少有两个参数,多余的参数使用`...`表示。在替换文本中,`__VA_ARGS__`代表多余的参数(每个参数之间使用逗号分隔)。下面是用法示例。 - -```c -X(5, 4, 3.14, "Hi!", 12) -// 替换成 -(10*(5) + 20*(4)), 3.14, "Hi!", 12 -``` - -注意,`...`只能替代宏的尾部参数,不能写成下面这样。 - -```c -// 报错 -#define WRONG(X, ..., Y) #X #__CA_ARGS__ #Y -``` - -上面示例中,`...`替代中间部分的参数,这是不允许的,会报错。 - -`__VA_ARGS__`前面加上一个`#`号,可以让输出变成一个字符串。 - -```c -#define X(...) #__VA_ARGS__ - -printf("%s\n", X(1,2,3)); // Prints "1, 2, 3" -``` - -## `#undef` - -`#undef`指令用来取消已经使用`#define`定义的宏。 - -```c -#define LIMIT 400 -#undef LIMIT -``` - -上面示例的`undef`指令取消已经定义的宏`LIMIT`,后面就可以重新用 LIMIT 定义一个宏。 - -有时候想重新定义一个宏,但不确定是否以前定义过,就可以先用`#undef`取消,然后再定义。因为同名的宏如果两次定义不一样,会报错,而`#undef`的参数如果是不存在的宏,并不会报错。 - -GCC 的`-U`选项可以在命令行取消宏的定义,相当于`#undef`。 - -```bash -gcc -ULIMIT foo.c -``` - -上面示例中的`-U`参数,取消了宏`LIMIT`,相当于源文件里面的`#undef LIMIT`。 - -## `#include` - -`#include`指令用于编译时将其他源码文件,加载进入当前文件。它有两种形式。 - -```c -// 形式一 -#include // 加载系统提供的文件 - -// 形式二 -#include "foo.h" // 加载用户提供的文件 -``` - -形式一,文件名写在尖括号里面,表示该文件是系统提供的,通常是标准库的库文件,不需要写路径。因为编译器会到系统指定的安装目录里面,去寻找这些文件。 - -形式二,文件名写在双引号里面,表示该文件由用户提供,具体的路径取决于编译器的设置,可能是当前目录,也可能是项目的工作目录。如果所要包含的文件在其他位置,就需要指定路径,下面是一个例子。 - -```c -#include "/usr/local/lib/foo.h" -``` - -GCC 编译器的`-I`参数,也可以用来指定`include`命令中用户文件的加载路径。 - -```bash -gcc -Iinclude/ -o code code.c -``` - -上面命令中,`-Iinclude/`指定从当前目录的`include`子目录里面,加载用户自己的文件。 - -`#include`最常见的用途,就是用来加载包含函数原型的头文件(后缀名为`.h`),参见《多文件编译》一章。多个`#include`指令的顺序无关紧要,多次包含同一个头文件也是合法的。 - -## `#if...#endif` - -`#if...#endif`指令用于预处理器的条件判断,满足条件时,内部的行会被编译,否则就被编译器忽略。 - -```c -#if 0 - const double pi = 3.1415; // 不会执行 -#endif -``` - -上面示例中,`#if`后面的`0`,表示判断条件不成立。所以,内部的变量定义语句会被编译器忽略。`#if 0`这种写法常用来当作注释使用,不需要的代码就放在`#if 0`里面。 - -`#if`后面的判断条件,通常是一个表达式。如果表达式的值不等于`0`,就表示判断条件为真,编译内部的语句;如果表达式的值等于0,表示判断条件为伪,则忽略内部的语句。 - -`#if...#endif`之间还可以加入`#else`指令,用于指定判断条件不成立时,需要编译的语句。 - -```c -#define FOO 1 - -#if FOO - printf("defined\n"); -#else - printf("not defined\n"); -#endif -``` - -上面示例中,宏`FOO`如果定义过,会被替换成`1`,从而输出`defined`,否则输出`not defined`。 - -如果有多个判断条件,还可以加入`#elif`命令。 - -```c -#if HAPPY_FACTOR == 0 - printf("I'm not happy!\n"); -#elif HAPPY_FACTOR == 1 - printf("I'm just regular\n"); -#else - printf("I'm extra happy!\n"); -#endif -``` - -上面示例中,通过`#elif`指定了第二重判断。注意,`#elif`的位置必须在`#else`之前。如果多个判断条件皆不满足,则执行`#else`的部分。 - -没有定义过的宏,等同于`0`。因此如果`UNDEFINED`是一个没有定义过的宏,那么`#if UNDEFINED`为伪,而`#if !UNDEFINED`为真。 - -`#if`的常见应用就是打开(或关闭)调试模式。 - -```c -#define DEBUG 1 - -#if DEBUG -printf("value of i : %d\n", i); -printf("value of j : %d\n", j); -#endif -``` - -上面示例中,通过将`DEBUG`设为`1`,就打开了调试模式,可以输出调试信息。 - -GCC 的`-D`参数可以在编译时指定宏的值,因此可以很方便地打开调试开关。 - -```bash -gcc -DDEBUG=1 foo.c -``` - -上面示例中,`-D`参数指定宏`DEBUG`为`1`,相当于在代码中指定`#define DEBUG 1`。 - -## `#ifdef...#endif` - -`#ifdef...#endif`指令用于判断某个宏是否定义过。 - -有时源码文件可能会重复加载某个库,为了避免这种情况,可以在库文件里使用`#define`定义一个空的宏。通过这个宏,判断库文件是否被加载了。 - -```c -#define EXTRA_HAPPY -``` - -上面示例中,`EXTRA_HAPPY`就是一个空的宏。 - -然后,源码文件使用`#ifdef...#endif`检查这个宏是否定义过。 - -```c -#ifdef EXTRA_HAPPY - printf("I'm extra happy!\n"); -#endif -``` - -上面示例中,`#ifdef`检查宏`EXTRA_HAPPY`是否定义过。如果已经存在,表示加载过库文件,就会打印一行提示。 - -`#ifdef`可以与`#else`指令配合使用。 - -```c -#ifdef EXTRA_HAPPY - printf("I'm extra happy!\n"); -#else - printf("I'm just regular\n"); -#endif -``` - -上面示例中,如果宏`EXTRA_HAPPY`没有定义过,就会执行`#else`的部分。 - -`#ifdef...#else...#endif`可以用来实现条件加载。 - -```c -#ifdef MAVIS - #include "foo.h" - #define STABLES 1 -#else - #include "bar.h" - #define STABLES 2 -#endif -``` - -上面示例中,通过判断宏`MAVIS`是否定义过,实现加载不同的头文件。 - -## defined 运算符 - -上一节的`#ifdef`指令,等同于`#if defined`。 - -```c -#ifdef FOO -// 等同于 -#if defined FOO -``` - -上面示例中,`defined`是一个预处理运算符,如果它的参数是一个定义过的宏,就会返回1,否则返回0。 - -使用这种语法,可以完成多重判断。 - -```c -#if defined FOO - x = 2; -#elif defined BAR - x = 3; -#endif -``` - -这个运算符的一个应用,就是对于不同架构的系统,加载不同的头文件。 - -```c -#if defined IBMPC - #include "ibmpc.h" -#elif defined MAC - #include "mac.h" -#else - #include "general.h" -#endif -``` - -上面示例中,不同架构的系统需要定义对应的宏。代码根据不同的宏,加载对应的头文件。 - -## `#ifndef...#endif` - -`#ifndef...#endif`指令跟`#ifdef...#endif`正好相反。它用来判断,如果某个宏没有被定义过,则执行指定的操作。 - -```c -#ifdef EXTRA_HAPPY - printf("I'm extra happy!\n"); -#endif - -#ifndef EXTRA_HAPPY - printf("I'm just regular\n"); -#endif -``` - -上面示例中,针对宏`EXTRA_HAPPY`是否被定义过,`#ifdef`和`#ifndef`分别指定了两种情况各自需要编译的代码。 - -`#ifndef`常用于防止重复加载。举例来说,为了防止头文件`myheader.h`被重复加载,可以把它放在`#ifndef...#endif`里面加载。 - -```c -#ifndef MYHEADER_H - #define MYHEADER_H - #include "myheader.h" -#endif -``` - -上面示例中,宏`MYHEADER_H`对应文件名`myheader.h`的大写。只要`#ifndef`发现这个宏没有被定义过,就说明该头文件没有加载过,从而加载内部的代码,并会定义宏`MYHEADER_H`,防止被再次加载。 - -`#ifndef`等同于`#if !defined`。 - -```c -#ifndef FOO -// 等同于 -#if !defined FOO -``` - -## 预定义宏 - -C 语言提供一些预定义的宏,可以直接使用。 - -- `__DATE__`:编译日期,格式为“Mmm dd yyyy”的字符串(比如 Nov 23 2021)。 -- `__TIME__`:编译时间,格式为“hh:mm:ss”。 -- `__FILE__`:当前文件名。 -- `__LINE__`:当前行号。 -- `__func__`:当前正在执行的函数名。该预定义宏必须在函数作用域使用。 -- `__STDC__`:如果被设为1,表示当前编译器遵循 C 标准。 -- `__STDC_HOSTED__`:如果被设为1,表示当前编译器可以提供完整的标准库;否则被设为0(嵌入式系统的标准库常常是不完整的)。 -- `__STDC_VERSION__`:编译所使用的 C 语言版本,是一个格式为`yyyymmL`的长整数,C99 版本为“199901L”,C11 版本为“201112L”,C17 版本为“201710L”。 - -下面示例打印这些预定义宏的值。 - -```c -#include - -int main(void) { - printf("This function: %s\n", __func__); - printf("This file: %s\n", __FILE__); - printf("This line: %d\n", __LINE__); - printf("Compiled on: %s %s\n", __DATE__, __TIME__); - printf("C Version: %ld\n", __STDC_VERSION__); -} - -/* 输出如下 - -This function: main -This file: test.c -This line: 7 -Compiled on: Mar 29 2021 19:19:37 -C Version: 201710 - -*/ -``` - -## `#line` - -`#line`指令用于覆盖预定义宏`__LINE__`,将其改为自定义的行号。后面的行将从`__LINE__`的新值开始计数。 - -```c -// 将下一行的行号重置为 300 -#line 300 -``` - -上面示例中,紧跟在`#line 300`后面一行的行号,将被改成300,其后的行会在300的基础上递增编号。 - -`#line`还可以改掉预定义宏`__FILE__`,将其改为自定义的文件名。 - -```c -#line 300 "newfilename" -``` - -上面示例中,下一行的行号重置为`300`,文件名重置为`newfilename`。 - -## `#error` - -`#error`指令用于让预处理器抛出一个错误,终止编译。 - -```c -#if __STDC_VERSION__ != 201112L - #error Not C11 -#endif -``` - -上面示例指定,如果编译器不使用 C11 标准,就中止编译。GCC 编译器会像下面这样报错。 - -```bash -$ gcc -std=c99 newish.c -newish.c:14:2: error: #error Not C11 -``` - -上面示例中,GCC 使用 C99 标准编译,就报错了。 - -```c -#if INT_MAX < 100000 - #error int type is too small -#endif -``` - -上面示例中,编译器一旦发现`INT`类型的最大值小于`100,000`,就会停止编译。 - -`#error`指令也可以用在`#if...#elif...#else`的部分。 - -```c -#if defined WIN32 - // ... -#elif defined MAC_OS - // ... -#elif defined LINUX - // ... -#else - #error NOT support the operating system -#endif -``` - -## `#pragma` - -`#pragma`指令用来修改编译器属性。 - -```c -// 使用 C99 标准 -#pragma c9x on -``` - -上面示例让编译器以 C99 标准进行编译。 diff --git a/wiki/programming-language/Java/基本语法.md b/wiki/programming-language/Java/基本语法.md deleted file mode 100644 index 68f06883..00000000 --- a/wiki/programming-language/Java/基本语法.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -id: 基本语法 -title: 基本语法 -sidebar_position: 2 -data: 2022年4月26日 ---- - -## 数据类型 - -![数据类型](https://static.7wate.com/img/2022/04/26/e2015296349fd.png) - -- 整数型:byte、short、int、long -- 浮点型:float、double -- 字符型:char -- 布尔型:boolean - -Java 是对**大小写敏感**的语言,类的首字母**应该**大写,包名**尽量**小写。 - -## 运算符 - -### 赋值运算符 - -| 操作符 | 描述 | 例子 | -| :------ | :----------------------------------------------------------- | :--------------------------------------- | -| = | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C | -| + = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A | -| - = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A | -| * = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A | -| / = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A | -| (%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A | -| << = | 左移位赋值运算符 | C << = 2等价于C = C << 2 | -| >> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 | -| &= | 按位与赋值运算符 | C&= 2等价于C = C&2 | -| ^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 | -| \| = | 按位或赋值操作符 | C \| = 2等价于C = C \| 2 | - -### 算数运算符 - -![算数运算符](https://static.7wate.com/img/2022/04/26/25fe089bb6d71.png) - -算数运算符需要注意的就是**优先级问题**,当表达式中存在多个操作符时,**操作符的优先级顺序决定了计算顺序**,例如先乘除后加减,**()**的优先级最高。 - -### 自增、自减运算符 - -```java -int a = 1; -int b = ++a; -int c = a++; -``` - -### 比较运算符 - -![运算符](https://static.7wate.com/img/2022/04/26/9663777e364a1.png) - -比较运算符的运算结果是 boolean 型,运算结果成立时,运算的结果为 true,否则为 false。 - -### 逻辑运算符 - -![逻辑运算符](https://static.7wate.com/img/2022/04/26/80929b128342d.png) - -![运算结果](https://static.7wate.com/img/2022/04/26/edb8162f888c0.png) - -### 位运算符 - -按位运算符用来操作整数基本类型中的每个**比特位**,按位操作符会对两个参数中对应的位执行**布尔代数运算**,并最终生成一个结果。假设整数变量 A 的值为 60 和变量 B 的值为 13: - -| 操作符 | 描述 | 例子 | -| :----- | :----------------------------------------------------------- | :----------------------------- | -| & | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 | -| \| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A \| B)得到61,即 0011 1101 | -| ^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 | -| 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 | -| << | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 | -| >> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 | -| >>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 | - -### 三元运算符 - -语法为:条件表达式 ?表达式1:表达式2,如果条件表达式结果为 true 则执行表达式 1,否则执行表达式 2。 - -```java -variable x = (expression) ? value if true : value if false -``` - -## 关键字 - -| 类别 | | | | | | | | -| -------------------- | -------- | ---------- | -------- | ------------ | ---------- | --------- | ------ | -| 访问控制 | private | protected | public | | | | | -| 类,方法和变量修饰符 | abstract | class | extends | final | implements | interface | native | -| | new | static | strictfp | synchronized | transient | volatile | | -| 程序控制 | break | continue | return | do | while | if | else | -| | for | instanceof | switch | case | default | | | -| 错误处理 | try | catch | throw | throws | finally | | | -| 包相关 | import | package | | | | | | -| 基本类型 | boolean | byte | char | double | float | int | long | -| | short | null | true | false | | | | -| 变量引用 | super | this | void | | | | | -| 保留字 | goto | const | | | | | | - -## 注释 - -```java -public class HelloWorld { - /* - * 这是第一个Java程序 - * 它将打印Hello World - * 这是一个多行注释的示例 - * - */ - public static void main(String[] args){ - // 这是单行注释的示例 - /* 这个也是单行注释的示例 */ - System.out.println("Hello World"); - } -} -``` diff --git a/wiki/programming-language/Java/控制语句.md b/wiki/programming-language/Java/控制语句.md deleted file mode 100644 index 70e98a8a..00000000 --- a/wiki/programming-language/Java/控制语句.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -id: 控制语句 -title: 控制语句 -sidebar_position: 3 -data: 2022年4月26日 ---- - -Java 中的控制语句其实和 C 一样,会涉及刀包括 **if-else、while、do-while、for、return、break、switch**。 - -## 条件语句 - -### if 语句 - -```java -int a = 10; - -if(a > 10){ - return true; -} - -return false; -``` - -### if...else 语句 - -```java -int a = 10; -int b = 11; - -if(a >= b){ - System.out.println("a >= b"); -}else{ - System.out.println("a < b"); -} -``` - -### if...else if 多分支语句 - -```java -int x = 40; - -if(x > 60) { - System.out.println("x的值大于60"); -} else if (x > 30) { - System.out.println("x的值大于30但小于60"); -} else if (x > 0) { - System.out.println("x的值大于0但小于30"); -} else { - System.out.println("x的值小于等于0"); -} -``` - -### switch 多分支语句 - -```java -switch (week) { - case 1: - System.out.println("Monday"); - break; - case 2: - System.out.println("Tuesday"); - break; - case 3: - System.out.println("Wednesday"); - break; - case 4: - System.out.println("Thursday"); - break; - case 5: - System.out.println("Friday"); - break; - case 6: - System.out.println("Saturday"); - break; - case 7: - System.out.println("Sunday"); - break; - default: - System.out.println("No Else"); - break; -} -``` - -## 循环语句 - -### while 循环语句 - -```java -while(布尔值){ - 表达式 -} -``` - -### do...while 循环语句 - -while 与 do...while 循环的唯一区别是 do...while 语句最少执行一次。 - -```java -int b = 10; -do { - System.out.println("b== " + b); - b--; -} while(b == 1); -``` - -### for 循环语句 - -```java -for(初始化; 布尔表达式; 步进){} -``` - -每次迭代前会测试布尔表达式,如果获得的结果是 false,就会执行 for 语句后面的代码;每次循环结束,会按照步进的值执行下一次循环。 - -#### 逗号操作符 - -在 for 语句表达式初始化部分,可以使用一系列的逗号分隔的语句;通过逗号操作符,可以在 for 语句内定义多个变量。 - -```java -for(int i = 1; j = i + 10;i < 5;i++, j = j * 2){} -``` - -#### for-each 语句 - -for-each 语句是一种更加简介的、方便对数组和集合进行遍历的方法。 - -```java -int array[] = {7, 8, 9}; - -for (int arr : array) { - System.out.println(arr); -} -``` - -## 跳转语句 - -### break 语句 - -终止循环 - -### continue 语句 - -跳出当前循环、执行下次循环。 - -### return 语句 - -返回语句 diff --git a/wiki/programming-language/Java/简介.md b/wiki/programming-language/Java/简介.md deleted file mode 100644 index b0cbd438..00000000 --- a/wiki/programming-language/Java/简介.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: 简介 -title: 简介 -sidebar_position: 1 -data: 2022年4月25日 ---- - -## Java 是什么 - -Java 是世界上使用最广泛的编程语言之一。 - -Java 最初由 Sun Microsystems 在 1990 年代开发,用于开发从 Web 应用程序到移动应用程序,再到批处理应用程序的所有内容。Java 最初是一种纯粹的面向对象的语言,但现在已经发展成为一种多范例语言,可以高度适应任何情况。拥有庞大的开发人员社区和支持库,Java 是开发几乎所有类型的应用程序的理想选择。 - -Java 是最初由开发 James Gosling (詹姆斯·高斯林,他被称为 Java 编程语言之父)在 Sun Microsystems 公司(现已被 Oracle 收购),并于1995年发布了作为 Sun 公司的一个核心组成部分 Java 平台。 - -James Gosling (詹姆斯·高斯林),Mike Sheridan (迈克·谢里丹)和 Patrick Naughton (帕特里克·诺顿)于 1991 年 6月启动了 Java 语言项目。Java 最初是为交互式电视设计的,但在当时的数字有线电视行业来说太先进了。该语言最初是在 James Gosling (詹姆斯·高斯林)办公室外的一棵橡树之后被称为 Oak 的。 - -后来,该项目以 *Green* 命名,并最终从 Java coffee (印度尼西亚的一种咖啡)重命名为 *Java*。 - -### Java SE - -**Java SE(Java Platform Standard Edition,Java 平台标准版)**以前称为 J2SE,它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java EE 提供基础,如 Java 语言基础、JDBC 操作、I/O 操作、网络通信以及多线程等技术。 - -### Java EE - -**Java EE(Java Platform Enterprise Edition,Java 平台企业版)**以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(Service Oriented Architecture,SOA)和 Web 2.0 应用程序。 - -### Java ME - -**Java ME(Java Platform Micro Edition,Java 平台微型版)**以前称为 J2ME,也叫 K-JAVA。 Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。 - -Java ME 包括灵活的用户界面、健壮的安全模型、丰富的内置网络协议以及对可以动态下载的联网和离线应用程序。基于 Java ME 规范的应用程序 只需编写一次就可以用于许多设备,而且可以利用每个设备的本机功能。 - -## Java 的特点 - -### 简单 - -Java 语言的风格很像 C 语言和 C++ 语言,是一种纯粹的面向对象语言,它继承了 C++ 语言面向对象的技术核心,但是拋弃了 C++ 的一些缺点,比如说容易引起错误的指针以及多继承等,同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼。 - -### 面对对象 - -Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。 - -### 平台独立性 - -平台独立性的具体表现在于,Java 是“**一次编写,到处运行(Write Once,Run any Where)**”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。 - -### 可移植性 - -Java 基本数据类型的数据大小都做了统一的规定,没有“与具体实现相关”的概念。所以 .jar 文件能够同时在 Windows、Mac OS、Linux 系统下运行,不需要再次编译。 - -### 多线程 - -Java 语言是容易实现多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。实现多线程的方式主要有下面这几种: - -- 用户空间中实现多线程 -- 内核空间中实现多线程 -- 用户和内核空间中混合实现线程 - -### 高性能 - -编写的代码,经过 javac 编译器编译为字节码(bytecode),经过 JVM 内嵌的解释器将字节码转为机器码,这是解释执行,这种效率相对较低。但部分 JVM 的实现比如 Hotspot JVM 都提供了 **JIT(Just in Time)动态编译器**,JIT 能够在运行时将热点代码编译机器码。随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。 - -### 健壮性 - -Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。 - -### 分布式 - -Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。 - -### 安全性 - -Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 - -## Java 的开发环境 - -### JDK - -JDK(Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。JDK 是整个 java 的核心,包括了 Java 运行环境(Java Runtime Environment),一些 Java 工具和 Java 的核心类库(Java API)。 - -### JRE - -JRE(Java Runtime Environment)是个运行环境,运行 Java 程序的时候就需要 JRE。JDK 里面包含 JRE,因此只要安装了 JDK 就可以编辑、运行 Java 程序。如果只是运行普通的 java 程序无须安装 JDK,只需要安装 JRE 即可。 diff --git a/wiki/programming-language/Java/面对对象.md b/wiki/programming-language/Java/面对对象.md deleted file mode 100644 index 8e928920..00000000 --- a/wiki/programming-language/Java/面对对象.md +++ /dev/null @@ -1,658 +0,0 @@ ---- -id: 面对对象 -title: 面对对象 -sidebar_position: 4 -data: 2022年4月27日 - ---- - -在 Java 中,**万事万物都是对象**。 Java 也是面对对象的高级编程语言,面对对象语言具有如下特征 - -- 面对对象是一种常见的思想,比较符合人们的思考习惯; -- 面对对象可以将复杂的业务逻辑简单化,增强代码复用性; -- 面对对象具有抽象、封装、继承、多态等特性; - -## 类 - -类——相当于是一系列对象的抽象。具体就比如自动车一样,车的长、宽、高是车的**数据**;车的骑行,喇叭是车的**方法**。 - -### 定义 - -```java -class ClassName{ - // body -} -``` - -### 创建 - -```java -ClassName classname = new ClassName(); -``` - -### 构造 - -在 Java 类中,通过构造方法在对象**创建时期调用一次**来确保每个对象都被**初始化**。构造方法比较特殊,没有参数类型和返回值,构造方法名称务必和类名保持一致,并且一个类可以拥有多个构造方法。 - -```java -class Apple { - int sum; - String color; - - public Apple(){} - public Apple(int sum){} - public Apple(String color){} - public Apple(int sum,String color){} - -} - -// 创建对象 -class createApple { - public static void main(String[] args) { - Apple apple1 = new Apple(); - Apple apple2 = new Apple(1); - Apple apple3 = new Apple("red"); - Apple apple4 = new Apple(2,"color"); - } -} -``` - -如果类中没有定义任何构造方法,那么 JVM 会自动生成一个默认构造方法。 - -## 面对对象 - -### 封装 - -封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。 - -#### 数据 - -数据也可以被称为属性,数据可以是任意类型的对象,也可以是基本数据类型。 - -```java -Class A{ - int a; - Apple apple; -} -``` - -#### 方法 - -方法(函数)通过封装多行代码的实现,用来**简化代码**、**利于维护**、**重复调用**、**模块化编程**和**提高开发效率**。 - -```java -修饰符 返回值类型 方法名(参数类型 参数名){ - ... - 方法体 - ... - return 返回值; -} -``` - -- **修饰符:**定义方法的访问类型。 -- **返回值类型 :**定义方法返回值类型。如果方法没有返回值,返回值类型是关键字 **void**。 -- **函数名:**调用方法的实际访问名称。 -- **参数类型:**方法调用时,限定传递参数类型。 -- **参数名:**方法调用时,传递的实际参数。方法定义时,限定的形式参数。 -- **方法体:**定义方法的功能 - -#### 权限 - -![访问权限](https://static.7wate.com/img/2022/04/27/46262496c680a.png) - -#### 实例 - -```java -public class EncapTest{ - - private String name; - private String idNum; - private int age; - - public int getAge(){ - return age; - } - - public String getName(){ - return name; - } - - public String getIdNum(){ - return idNum; - } - - public void setAge( int newAge){ - age = newAge; - } - - public void setName(String newName){ - name = newName; - } - - public void setIdNum( String newId){ - idNum = newId; - } -} -``` - -### 继承 - -继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。从而减少重复代码,提高维护性,代码也更佳简洁,提高代码的复用性。 - -![继承图示例](https://static.7wate.com/img/2022/04/27/4439d9883fb7a.jpg) - -#### 类型 - -Java 不支持多继承,但支持多重继承。 - -![继承类型](https://static.7wate.com/img/2022/04/27/75c38968a30e6.png) - -#### 特性 - -- 子类拥有父类非 private 的属性、方法。 -- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 -- 子类可以用自己的方式实现父类的方法。 -- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。 -- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。 - -#### 关键字 - -- **extends:**类的继承是单一继承,一个子类只能拥有一个父类。 -- **implements:**变相的使 java 具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。 -- **super:**通过 super 关键字来实现对父类成员的访问,用来引用当前对象的父类。 -- **this:**指向自己的引用。 -- **final:**类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。 - -```java -class 父类 { -} - -class 子类 extends 父类 { -} - -// 单一继承 - -public class Animal { - private String name; - private int id; - - public Animal(String myName, String myid) { - //初始化属性值 - } - public void eat() { //吃东西方法的具体实现 } - public void sleep() { //睡觉方法的具体实现 } -} - -public class Penguin extends Animal{ - -} - -// 继承多个接口 - -public interface A { - public void eat(); - public void sleep(); -} - -public interface B { - public void show(); -} - -public class C implements A,B { -} - -// super 与 this 关键字 - -class Animal { - void eat() { - System.out.println("animal : eat"); - } -} - -class Dog extends Animal { - - void eat() { - System.out.println("dog : eat"); - } - - void eatTest() { - this.eat(); // this 调用自己的方法 - super.eat(); // super 调用父类方法 - } -} - -public class Test { - public static void main(String[] args) { - Animal a = new Animal(); - a.eat(); - Dog d = new Dog(); - d.eatTest(); - } -} - -// final 关键字 - -final class 类名 { /*方法体*/ } - -[public / private / default / protected] final 返回值类型 方法名(){ /*方法体*/ } -``` - -### 多态 - -多态是同一个行为具有多个不同表现形式或形态的能力。 - -多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: - -![多态图例](https://static.7wate.com/img/2022/04/27/ac5f133d3c528.png) - -#### 优点 - -- 消除类型之间的耦合关系 -- 可替换性 -- 可扩充性 -- 接口性 -- 灵活性 -- 简化性 - -#### 多态存在的三个必要条件 - -- 继承 -- 重写 -- 父类引用指向子类对象 - -#### 多态的实现方式 - -- 重写 - -- 接口 - -- 抽象类和抽象方法 - -### 重写与重载 - -#### 重写 - -重写与重载虽然名字相似,但却是完全不同的东西。方法重写的描述是对**子类和父类**之间的。 - -- 子类中重写的方法必须与父类保持一致,包括返回值类型、方法名、参数列表。 -- 子类中重写的方法可以使用 @Override 注解来标识。 -- 子类中重写方法的访问权限不能低于父类中方法的访问权限。 - -```java -class Fruit { - - public void eat(){ - System.out.printl('eat fruit'); - } -} - -class Apple extends Fruit{ - - @Override - public void eat(){ - System.out.printl('eat apple'); - } -} -``` - -#### 重载 - -相同的方法名拥有独一无二的参数列表,其中包括参数的类型、顺序、数量等构成了方法重载的必要条件。 - -- **方法名称必须相同。** -- **参数列表必须不相同(类型、顺序、数量不同等)。** -- 返回类型不同不构成方法重载。 -- 重载是在编译时,具体由编译器确定使用那个方法。 - -**即外壳不变,核心重写!** - -```java -public class Apple { - int sum; - String color; - - public Apple(){} - public Apple(int sum){} - - public int getApple(int num){ - return 1; - } - - public String getApple(String color){ - return "color"; - } - -} -``` - -#### 重写与重载的区别 - -| 区别点 | 重载方法 | 重写方法 | -| :------: | :------: | :--------------------------------------------: | -| 参数列表 | 必须修改 | 一定不能修改 | -| 返回类型 | 可以修改 | 一定不能修改 | -| 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 | -| 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) | - -方法的重写(Overriding)和重载(Overloading)是 java 多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。 - -1. 方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。 -2. 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。 -3. 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。 - -![区别图例](https://static.7wate.com/img/2022/04/27/4fdd076693397.png) - -- - -## 抽象 - -在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 - -由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。 - -父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 - -- 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。 -- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。 -- 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。 -- 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。 -- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。 - -### 抽象类 - -```java -// 抽象类 -public abstract class Employee { - private String name; - private String address; - private int number; - - public Employee(String name, String address, int number) { - System.out.println("Constructing an Employee"); - this.name = name; - this.address = address; - this.number = number; - } - - public double computePay() { - System.out.println("Inside Employee computePay"); - return 0.0; - } - - public void mailCheck() { - System.out.println("Mailing a check to " + this.name - + " " + this.address); - } - - public String toString() { - return name + " " + address + " " + number; - } - - public String getName() { - return name; - } - - public String getAddress() { - return address; - } - - public void setAddress(String newAddress) { - address = newAddress; - } - - public int getNumber() { - return number; - } -} - -// 继承抽象类 - -public class Salary extends Employee { - private double salary; //Annual salary - - public Salary(String name, String address, int number, double salary) { - super(name, address, number); - setSalary(salary); - } - - public void mailCheck() { - System.out.println("Within mailCheck of Salary class "); - System.out.println("Mailing check to " + getName() - + " with salary " + salary); - } - - public double getSalary() { - return salary; - } - - public void setSalary(double newSalary) { - if(newSalary >= 0.0) { - salary = newSalary; - } - } - - public double computePay() { - System.out.println("Computing salary pay for " + getName()); - return salary/52; - } -} - -// 实例化 Salary 对象 - -public class AbstractDemo { - public static void main(String [] args) { - Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00); - Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00); - - System.out.println("Call mailCheck using Salary reference --"); - s.mailCheck(); - - System.out.println("\n Call mailCheck using Employee reference--"); - e.mailCheck(); - } -} -``` - -### 抽象方法 - -如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。同时抽象方法必须遵守如下约定: - -- 如果一个类包含抽象方法,那么该类必须是抽象类。 -- 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。 - -```java -// 抽象方法 -public abstract class Employee { - private String name; - private String address; - private int number; - - /* - Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。 - 抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。 - */ - - public abstract double computePay(); - //其余代码 -} -``` - -## 接口 - -接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 - -接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。 - -接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。 - -### 特点 - -- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 **public abstract**(只能是 public abstract,其他修饰符都会报错)。 -- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 **public static final** 变量(并且只能是 public,用 private 修饰会报编译错误)。 -- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。 - -**接口与类相同点** - -- 一个接口可以有多个方法。 -- 接口文件保存在 .java 结尾的文件中,文件名使用接口名。 -- 接口的字节码文件保存在 .class 结尾的文件中。 -- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。 - -**接口与类不同点** - -- 接口不能用于实例化对象。 -- 接口没有构造方法。 -- 接口中所有的方法必须是抽象方法。 -- 接口不能包含成员变量,除了 static 和 final 变量。 -- 接口不是被类继承了,而是要被类实现。 -- 接口支持多继承。 - -```java -// 接口声明 -[可见度] interface 接口名称 [extends 其他的接口名] { - // 声明变量 - // 抽象方法 -} - -// 接口定义 -interface Animal { - public void eat(); - public void travel(); -} - -// 接口实现 -...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ... - -// 继承实例 -public class MammalInt implements Animal{ - - public void eat(){ - System.out.println("Mammal eats"); - } - - public void travel(){ - System.out.println("Mammal travels"); - } - - public int noOfLegs(){ - return 0; - } - - public static void main(String args[]){ - MammalInt m = new MammalInt(); - m.eat(); - m.travel(); - } -} -``` - -重写接口中声明的方法时,需要注意以下规则: - -- 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。 -- 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。 -- 如果实现接口的类是抽象类,那么就没必要实现该接口的方法。 - -在实现接口的时候,也要注意一些规则: - -- 一个类可以同时实现多个接口。 -- 一个类只能继承一个类,但是能实现多个接口。 -- 一个接口能继承另一个接口,这和类之间的继承比较相似。 - -### 多继承 - -在Java中,类的多继承是不合法,但接口允许多继承。 - -在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示: - -```java -public interface Hockey extends Sports, Event -``` - -## 包 - -为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。 - -一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。 - -- **package:**定义包 - -```java -package pkg1[.pkg2[.pkg3…]]; - -// 定义 -// 路径是 net/java/util/Something.java -package net.java.util; -public class Something{ - ... -} - -``` - -- **import:**导入包 - -```java -import package1[.package2…].(classname|*); - -// 定义 -package payroll; - -public class Boss { - public void payEmployee(Employee e) { - e.mailCheck(); - } -} - - -// 通配符 -import payroll.*; - -// 引入 Employee 类 -import payroll.Employee - -``` - -### 作用 - -1. 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。 - -2. 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。 - -3. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。 - -Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。 - -```java -// 在 animals 包中加入一个接口(interface) - -/* 文件名: Animal.java */ -package animals; - -interface Animal { - public void eat(); - public void travel(); -} - -package animals; - -/* 文件名 : MammalInt.java */ -public class MammalInt implements Animal{ - - public void eat(){ - System.out.println("Mammal eats"); - } - - public void travel(){ - System.out.println("Mammal travels"); - } - - public int noOfLegs(){ - return 0; - } - - public static void main(String args[]){ - MammalInt m = new MammalInt(); - m.eat(); - m.travel(); - } -} -``` diff --git a/wiki/software-engineering/home.md b/wiki/software-engineering/home.md deleted file mode 100644 index 0d3352b0..00000000 --- a/wiki/software-engineering/home.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -slug: / -sidebar_position: 1 ---- - -# Home - -软件工程 ~ 🤩🤩🤩 - - - diff --git a/work/front-end-engineer/基础/_category_.json b/work/front-end-engineer/基础/_category_.json deleted file mode 100644 index b408cad8..00000000 --- a/work/front-end-engineer/基础/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "基础", - "position": 2, - "link": { - "type": "generated-index", - "title": "基础" - } -} \ No newline at end of file diff --git a/work/front-end-engineer/工具/_category_.json b/work/front-end-engineer/工具/_category_.json deleted file mode 100644 index 72402216..00000000 --- a/work/front-end-engineer/工具/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "工具", - "position": 3, - "link": { - "type": "generated-index", - "title": "工具" - } -} \ No newline at end of file diff --git a/work/front-end-engineer/文化/_category_.json b/work/front-end-engineer/文化/_category_.json deleted file mode 100644 index 96197e79..00000000 --- a/work/front-end-engineer/文化/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "文化", - "position": 1, - "link": { - "type": "generated-index", - "title": "文化" - } -} \ No newline at end of file diff --git a/work/roadmap/求职经验/_category_.json b/work/roadmap/求职经验/_category_.json deleted file mode 100644 index f422cdcd..00000000 --- a/work/roadmap/求职经验/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "求职经验", - "position": 3, - "link": { - "type": "generated-index", - "title": "求职经验" - } -} \ No newline at end of file diff --git a/work/roadmap/简历攻略/_category_.json b/work/roadmap/简历攻略/_category_.json deleted file mode 100644 index be96e9cc..00000000 --- a/work/roadmap/简历攻略/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "简历攻略", - "position": 2, - "link": { - "type": "generated-index", - "title": "简历攻略" - } -} \ No newline at end of file diff --git a/work/roadmap/职业规划/_category_.json b/work/roadmap/职业规划/_category_.json deleted file mode 100644 index 54e454b3..00000000 --- a/work/roadmap/职业规划/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "职业规划", - "position": 1, - "link": { - "type": "generated-index", - "title": "职业规划" - } -} \ No newline at end of file diff --git a/work/roadmap/职场心得/_category_.json b/work/roadmap/职场心得/_category_.json deleted file mode 100644 index f36e1699..00000000 --- a/work/roadmap/职场心得/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "职场心得", - "position": 6, - "link": { - "type": "generated-index", - "title": "职场心得" - } -} \ No newline at end of file diff --git a/work/roadmap/薪酬攻略/_category_.json b/work/roadmap/薪酬攻略/_category_.json deleted file mode 100644 index 8fabd2c3..00000000 --- a/work/roadmap/薪酬攻略/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "薪酬攻略", - "position": 5, - "link": { - "type": "generated-index", - "title": "薪酬攻略" - } -} \ No newline at end of file diff --git a/work/roadmap/面试法则/_category_.json b/work/roadmap/面试法则/_category_.json deleted file mode 100644 index edea6fcb..00000000 --- a/work/roadmap/面试法则/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "面试法则", - "position": 4, - "link": { - "type": "generated-index", - "title": "面试法则" - } -} \ No newline at end of file