From b792a75c578d3a2bfc3084a92e7298867b9647a4 Mon Sep 17 00:00:00 2001
From: CyC2018 <1029579233@qq.com>
Date: Tue, 13 Mar 2018 09:17:09 +0800
Subject: [PATCH 01/66] auto commit
---
notes/计算机操作系统.md | 33 ++++++++++++++++++++-------------
notes/计算机网络.md | 2 +-
2 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md
index abd75b6c..2e7f2ab9 100644
--- a/notes/计算机操作系统.md
+++ b/notes/计算机操作系统.md
@@ -25,9 +25,10 @@
* [1.2 短作业优先](#12-短作业优先)
* [1.3 最短剩余时间优先](#13-最短剩余时间优先)
* [2. 交互式系统中的调度](#2-交互式系统中的调度)
- * [2.1 轮转调度](#21-轮转调度)
- * [2.2 优先级调度](#22-优先级调度)
- * [2.3 多级队列](#23-多级队列)
+ * [2.1 优先权优先](#21-优先权优先)
+ * [2.2 时间片轮转](#22-时间片轮转)
+ * [2.3 多级反馈队列](#23-多级反馈队列)
+ * [2.4 短进程优先](#24-短进程优先)
* [3. 实时系统中的调度](#3-实时系统中的调度)
* [进程同步](#进程同步)
* [1. 临界区](#1-临界区)
@@ -210,13 +211,7 @@ shortest remaining time next(SRTN)。
### 2. 交互式系统中的调度
-#### 2.1 轮转调度
-
-将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。
-
-时间片轮转算法的效率和时间片的大小有很大关系。如果时间片设置太短会导致过多的进程切换,减低 CPU 效率;而设得太长有可能引起对短的交互请求的响应时间变长。
-
-#### 2.2 优先级调度
+#### 2.1 优先权优先
除了可以手动赋予优先权之外,还可以把响应比作为优先权,这种调度方式叫做高响应比优先调度算法。
@@ -224,13 +219,25 @@ shortest remaining time next(SRTN)。
这种调度算法主要是为了解决 SJF 中长作业可能会饿死的问题,因为随着等待时间的增长,响应比也会越来越高。
-#### 2.3 多级队列
+#### 2.2 时间片轮转
+
+将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。
+
+时间片轮转算法的效率和时间片的大小有很大关系。因为每次进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,进程切换太频繁,在进程切换上就会花过多时间。
+
+#### 2.3 多级反馈队列
-如果一个进程需要执行 100 个时间片,如果采用轮转调度算法,那么需要交换 100 次。多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要 7 (包括最初的装入)的交换。
+1. 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权越高的队列中,为每个进程所规定的执行时间片就越小。
-每个队列的优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。
+2. 当一个新进程进入内存后,首先将它放入第一队列的末尾,按 FCFS 原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入下一个队列的队尾。
+
+3. 仅当前 i-1 个队列均空时,才会调度第 i 个队列中的进程。
+
+优点:实时性好,同时适合运行短作业和长作业。
+
+#### 2.4 短进程优先
### 3. 实时系统中的调度
diff --git a/notes/计算机网络.md b/notes/计算机网络.md
index eb6a8a7b..c049586b 100644
--- a/notes/计算机网络.md
+++ b/notes/计算机网络.md
@@ -327,7 +327,7 @@ CSMA/CD 表示载波监听多点接入 / 碰撞检测。
- **多点接入** :说明这是总线型网络,许多计算机以多点的方式连接到总线上。
- **载波监听** :每个站都必须不停地监听信道。在发送前,如果检听信道正在使用,就必须等待。
-- **碰撞检测** :在发送中,如果检听到信道已有其它站正在发送数据,就表示发生了碰撞。虽然每一个站在发送数据之前都已经检听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。
+- **碰撞检测** :在发送中,如果监听到信道已有其它站正在发送数据,就表示发生了碰撞。虽然每一个站在发送数据之前都已经检听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。
From 8032120435ff9d2efb312e34551b1d7047fe76d8 Mon Sep 17 00:00:00 2001
From: CyC2018 <36260787+CyC2018@users.noreply.github.com>
Date: Tue, 13 Mar 2018 09:52:45 +0800
Subject: [PATCH 02/66] Update download.md
---
other/download.md | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/other/download.md b/other/download.md
index 53f8b9d1..e67e0cb5 100644
--- a/other/download.md
+++ b/other/download.md
@@ -1,6 +1,3 @@
-# 科普
-
-
# 网络
@@ -42,6 +39,10 @@
+# 科普
+
+
+
# 打包
> [百度网盘](https://pan.baidu.com/s/1o9oD1s2#list/path=%2F&parentPath=%2F)
From ea99b4c3ea95c9636ea3d13c8469bf3b3d382152 Mon Sep 17 00:00:00 2001
From: CyC2018 <36260787+CyC2018@users.noreply.github.com>
Date: Tue, 13 Mar 2018 09:53:36 +0800
Subject: [PATCH 03/66] Update download.md
---
other/download.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/other/download.md b/other/download.md
index e67e0cb5..60662495 100644
--- a/other/download.md
+++ b/other/download.md
@@ -41,7 +41,7 @@
# 科普
-
+
# 打包
From 50c606abf6b3689849d2c0576fed7e2f1793b846 Mon Sep 17 00:00:00 2001
From: CyC2018 <36260787+CyC2018@users.noreply.github.com>
Date: Tue, 13 Mar 2018 09:55:41 +0800
Subject: [PATCH 04/66] Update download.md
---
other/download.md | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/other/download.md b/other/download.md
index 60662495..d65ae5aa 100644
--- a/other/download.md
+++ b/other/download.md
@@ -1,3 +1,18 @@
+
+* [网络](#网络)
+* [操作系统](#操作系统)
+* [算法](#算法)
+* [设计模式](#设计模式)
+* [数据库](#数据库)
+* [Redis](#redis)
+* [Java](#java)
+* [C++](#c++)
+* [工具](#工具)
+* [编码实践](#编码实践)
+* [科普](#科普)
+* [打包](#打包)
+
+
# 网络
From d2f117d739ef9c8aa8248edf9b078deff79edae4 Mon Sep 17 00:00:00 2001
From: CyC2018 <1029579233@qq.com>
Date: Tue, 13 Mar 2018 10:00:39 +0800
Subject: [PATCH 05/66] auto commit
---
README.md | 12 +-
notes/Git.md | 173 ++++++++
notes/正则表达式.md | 409 ++++++++++++++++++
pics/0f6fe85a-b680-47ea-af67-21ab98a62f8c.jpg | Bin 0 -> 13312 bytes
pics/1164a71f-413d-494a-9cc8-679fb6a2613d.jpg | Bin 0 -> 12288 bytes
pics/17976404-95f5-480e-9cb4-250e6aa1d55f.png | Bin 0 -> 16384 bytes
pics/245fd2fb-209c-4ad5-bc5e-eb5664966a0e.jpg | Bin 0 -> 23552 bytes
pics/46f66e88-e65a-4ad0-a060-3c63fe22947c.png | Bin 0 -> 15360 bytes
pics/5292faa6-0141-4638-bf0f-bb95b081dcba.jpg | Bin 0 -> 13312 bytes
pics/58e57a21-6b6b-40b6-af85-956dd4e0f55a.jpg | Bin 0 -> 15360 bytes
pics/7a29acce-f243-4914-9f00-f2988c528412.jpg | Bin 0 -> 101376 bytes
pics/a1198642-9159-4d88-8aec-c3b04e7a2563.jpg | Bin 0 -> 30720 bytes
pics/bc775758-89ab-4805-9f9c-78b8739cf780.jpg | Bin 0 -> 12288 bytes
pics/dd78a1fe-1ff3-4bcf-a56f-8c003995beb6.jpg | Bin 0 -> 16384 bytes
pics/fb546e12-e1fb-4b72-a1fb-8a7f5000dce6.jpg | Bin 0 -> 8192 bytes
15 files changed, 593 insertions(+), 1 deletion(-)
create mode 100644 notes/Git.md
create mode 100644 notes/正则表达式.md
create mode 100644 pics/0f6fe85a-b680-47ea-af67-21ab98a62f8c.jpg
create mode 100644 pics/1164a71f-413d-494a-9cc8-679fb6a2613d.jpg
create mode 100644 pics/17976404-95f5-480e-9cb4-250e6aa1d55f.png
create mode 100644 pics/245fd2fb-209c-4ad5-bc5e-eb5664966a0e.jpg
create mode 100644 pics/46f66e88-e65a-4ad0-a060-3c63fe22947c.png
create mode 100644 pics/5292faa6-0141-4638-bf0f-bb95b081dcba.jpg
create mode 100644 pics/58e57a21-6b6b-40b6-af85-956dd4e0f55a.jpg
create mode 100644 pics/7a29acce-f243-4914-9f00-f2988c528412.jpg
create mode 100644 pics/a1198642-9159-4d88-8aec-c3b04e7a2563.jpg
create mode 100644 pics/bc775758-89ab-4805-9f9c-78b8739cf780.jpg
create mode 100644 pics/dd78a1fe-1ff3-4bcf-a56f-8c003995beb6.jpg
create mode 100644 pics/fb546e12-e1fb-4b72-a1fb-8a7f5000dce6.jpg
diff --git a/README.md b/README.md
index 668da0c1..3a430572 100644
--- a/README.md
+++ b/README.md
@@ -89,7 +89,17 @@ File, InputStream OutputStream, Reader Writer, Serializable, Socket, NIO
整理了一些常见考点。
-## 编码实践 :hammer:
+## 工具 :hammer:
+
+> [Git](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/重构.md)
+
+整理一些 Git 的使用和概念。
+
+> [正则表达式](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/正则表达式.md)
+
+整理自《正则表达式必知必会》
+
+## 编码实践
> [重构](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/重构.md)
diff --git a/notes/Git.md b/notes/Git.md
new file mode 100644
index 00000000..f327141b
--- /dev/null
+++ b/notes/Git.md
@@ -0,0 +1,173 @@
+
+
+
+* [学习资料](#学习资料)
+* [集中式与分布式](#集中式与分布式)
+* [Git 的中心服务器](#git-的中心服务器)
+* [Git 工作流](#git-工作流)
+* [分支实现](#分支实现)
+* [冲突](#冲突)
+* [Fast forward](#fast-forward)
+* [分支管理策略](#分支管理策略)
+* [储藏(Stashing)](#储藏stashing)
+* [SSH 传输设置](#ssh-传输设置)
+* [.gitignore 文件](#gitignore-文件)
+* [Git 命令一览](#git-命令一览)
+
+
+
+# 学习资料
+
+> [Github : my-git](https://github.com/xirong/my-git)
+
+汇总式的资料收集和简介,下面的很多资料都是从这里找到的。
+
+> [git - 简明指南](http://rogerdudler.github.io/git-guide/index.zh.html)
+
+简洁明了。
+
+> [图解 Git](http://marklodato.github.io/visual-git-guide/index-zh-cn.html)
+
+图文式简介。
+
+> [廖雪峰 : Git教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
+
+比较系统的对 git 进行介绍,很适合学习。
+
+> [Learn Git Branching](https://learngitbranching.js.org/)
+
+交互式学习。
+
+# 集中式与分布式
+
+Git 属于分布式版本控制系统,而 SVN 属于集中式。
+
+集中式版本控制只有中心服务器拥有一份代码,而分布式版本控制每个人的电脑上就有一份完整的代码。
+
+集中式版本控制有安全性问题,当中心服务器挂了所有人都没办法工作了。
+
+集中式版本控制需要连网才能工作,如果网速过慢,那么提交一个文件的会慢的无法让人忍受。而分布式版本控制不需要连网就能工作。
+
+分布式版本控制新建分支、合并分支操作速度非常快,而集中式版本控制新建一个分支相当于复制一份完整代码。
+
+# Git 的中心服务器
+
+Git 的中心服务器用来交换每个用户的修改。没有中心服务器也能工作,但是中心服务器能够 24 小时保持开机状态,这样就能更方便的交换修改。Github 就是一种 Git 中心服务器。
+
+# Git 工作流
+
+
+
+新建一个仓库之后,当前目录就成为了工作区,工作区下有一个隐藏目录 .git,它属于 Git 的版本库。
+
+Git 版本库有一个称为 stage 的暂存区,还有自动创建的 master 分支以及指向分支的 HEAD 指针。
+
+
+
+- git add files 把文件的修改添加到暂存区
+- git commit 把暂存区的修改提交到当前分支,提交之后暂存区就被清空了
+- git reset -- files 使用当前分支上的修改覆盖暂缓区,用来撤销最后一次 git add files
+- git checkout -- files 使用暂存区的修改覆盖工作目录,用来撤销本地修改
+
+
+
+可以跳过暂存区域直接从分支中取出修改或者直接提交修改到分支中
+
+- git commit -a 直接把所有文件的修改添加到暂缓区然后执行提交
+- git checkout HEAD -- files 取出最后一次修改,可以用来进行回滚操作
+
+# 分支实现
+
+Git 把每次提交都连成一条时间线。分支使用指针来实现,例如 master 分支指针指向时间线的最后一个节点,也就是最后一次提交。HEAD 指针指向的是当前分支。
+
+
+
+新建分支是新建一个指针指向时间线的最后一个节点,并让 HEAD 指针指向新分支表示新分支成为当前分支。
+
+
+
+每次提交只会让当前分支向前移动,而其它分支不会移动。
+
+
+
+合并分支也只需要改变指针即可。
+
+
+
+# 冲突
+
+当两个分支都对同一个文件进行了修改,在分支合并时就会产生冲突。
+
+
+
+Git 会使用 <<<<<<< ,======= ,>>>>>>> 标记出不同分支的内容,只需要把不同分支中冲突部分修改成一样就能解决冲突。
+
+```
+<<<<<<< HEAD
+Creating a new branch is quick & simple.
+=======
+Creating a new branch is quick AND simple.
+>>>>>>> feature1
+```
+
+# Fast forward
+
+"快进式合并"(fast-farward merge),会直接将 master 分支指向合并的分支,这种模式下进行分支合并会丢失分支信息,也就不能在分支历史上看出分支信息。
+
+可以在合并时加上 --no-ff 参数来禁用 Fast forward 模式,并且加上 -m 参数让合并时产生一个新的 commit。
+
+```
+$ git merge --no-ff -m "merge with no-ff" dev
+```
+
+
+
+# 分支管理策略
+
+master 分支应该是非常稳定的,只用来发布新版本;
+
+日常开发在开发分支 dev 上进行。
+
+
+
+# 储藏(Stashing)
+
+在一个分支上操作之后,如果还没有将修改提交到分支上,此时进行切换分支,那么另一个分支上也能看到新的修改。这是因为所有分支都共用一个工作区的缘故。
+
+可以使用 git stash 将当前分支的修改储藏起来,此时当前工作区的所有修改都会被存到栈上,也就是说当前工作区是干净的,没有任何未提交的修改。此时就可以安全的切换到其它分支上了。
+
+```
+$ git stash
+Saved working directory and index state \ "WIP on master: 049d078 added the index file"
+HEAD is now at 049d078 added the index file (To restore them type "git stash apply")
+```
+
+该功能可以用于 bug 分支的实现。如果当前正在 dev 分支上进行开发,但是此时 master 上有个 bug 需要修复,但是 dev 分支上的开发还未完成,不想立即提交。在新建 bug 分支并切换到 bug 分支之前就需要使用 git stash 将 dev 分支的未提交修改储藏起来。
+
+# SSH 传输设置
+
+Git 仓库和 Github 中心仓库之间是通过 SSH 加密。
+
+如果工作区下没有 .ssh 目录,或者该目录下没有 id_rsa 和 id_rsa.pub 这两个文件,可以通过以下命令来创建 SSH Key:
+
+```
+$ ssh-keygen -t rsa -C "youremail@example.com"
+```
+
+然后把公钥 id_rsa.pub 的内容复制到 Github "Account settings" 的 SSH Keys 中。
+
+# .gitignore 文件
+
+忽略以下文件:
+
+1. 操作系统自动生成的文件,比如缩略图;
+2. 编译生成的中间文件,比如 Java 编译产生的 .class 文件;
+3. 自己的敏感信息,比如存放口令的配置文件。
+
+不需要全部自己编写,可以到 [https://github.com/github/gitignore](https://github.com/github/gitignore) 中进行查询。
+
+# Git 命令一览
+
+
+
+比较详细的地址:http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf
diff --git a/notes/正则表达式.md b/notes/正则表达式.md
new file mode 100644
index 00000000..371e4caf
--- /dev/null
+++ b/notes/正则表达式.md
@@ -0,0 +1,409 @@
+
+* [概述](#概述)
+* [匹配单个字符](#匹配单个字符)
+* [匹配一组字符](#匹配一组字符)
+* [使用元字符](#使用元字符)
+ * [匹配空白字符](#匹配空白字符)
+ * [匹配特定的字符类别](#匹配特定的字符类别)
+ * [使用 POSIX 字符类](#使用-posix-字符类)
+* [重复匹配](#重复匹配)
+* [位置匹配](#位置匹配)
+ * [单词边界](#单词边界)
+ * [字符串边界](#字符串边界)
+* [使用子表达式](#使用子表达式)
+* [回溯引用](#回溯引用)
+ * [替换](#替换)
+ * [大小写转换](#大小写转换)
+* [前后查找](#前后查找)
+* [嵌入条件](#嵌入条件)
+ * [回溯引用条件](#回溯引用条件)
+ * [前后查找条件](#前后查找条件)
+
+
+
+# 概述
+
+正则表达式用于文本内容的查找和替换。
+
+正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或者软件。
+
+一个问题往往可以用多种正则表达式方案来解决。
+
+[正则表达式在线工具](http://tool.chinaz.com/regex)
+
+# 匹配单个字符
+
+正则表达式一般是区分大小写的,但是也有些实现是不区分。
+
+**.** 可以用来匹配任何的单个字符,但是在绝大多数实现里面,不能匹配换行符;
+
+**\\** 是元字符,表示它有特殊的含义,而不是字符本身的含义。如果需要匹配 . ,那么要用 \ 进行转义,即在 . 前面加上 \ 。
+
+**正则表达式**
+
+```
+nam.
+```
+
+**匹配结果**
+
+My **name** is Zheng.
+
+# 匹配一组字符
+
+**[ ]** 定义一个字符集合;
+
+0-9、a-z 定义了一个字符区间,区间使用 ASCII 码来确定。字符区间只能用在 [ ] 之间,因此 **-** 元字符只有在 [ ] 之间才是元字符,在 [ ] 之外就是一个普通字符;
+
+**^** 是取非操作,必须在 [ ] 字符集合中使用;
+
+**应用**
+
+匹配以 abc 为开头,并且最后一个字母不为数字的字符串:
+
+**正则表达式**
+
+```
+abc[^0-9]
+```
+
+**匹配结果**
+
+**abcd**
+abc1
+abc2
+
+# 使用元字符
+
+## 匹配空白字符
+
+| 元字符 | 说明 |
+| ------------ | ------------ |
+| [\b] | 回退(删除)一个字符 |
+| \f | 换页符 |
+| \n | 换行符 |
+| \r | 回车符 |
+| \t | 制表符 |
+| \v | 垂直制表符 |
+
+\r\n 是 Windows 中的文本行结束标签,在 Unix/Linux 则是 \n ;\r\n\r\n 可以匹配 Windows 下的空白行,因为它将匹配两个连续的行尾标签,而这正是两条记录之间的空白行;
+
+. 是元字符,前提是没有对它们进行转义; f 和 n 也是元字符,但是前提是对他们进行了转义。
+
+## 匹配特定的字符类别
+
+**1. 数字元字符**
+
+| 元字符 | 说明 |
+| ------------ | ------------ |
+| \d | 数字字符,等价于 [0-9] |
+| \D | 非数字字符,等价于 [^0-9] |
+
+**2. 字母数字元字符**
+
+| 元字符 | 说明 |
+| ------------ | ------------ |
+| \w | 大小写字母,下划线和数字,等价于 [a-zA-Z0-9\_] |
+| \W | 对 \w 取非 |
+
+**3. 空白字符元字符**
+
+| 元字符 | 说明 |
+| ------------ | ------------ |
+| \s | 任何一个空白字符,等价于 [\f\n\r\t\v] |
+| \S | 对 \s 取非 |
+
+\x 匹配十六进制字符,\0 匹配八进制,例如 \x0A 对应 ASCII 字符 10 ,等价于 \n,也就是它会匹配 \n 。
+
+## 使用 POSIX 字符类
+
+| 字符类 | 说明 |
+| --- | --- |
+| [:alnum:] | 字母数字字符 |
+| [:alpha:] | 字母字符 |
+| [:cntrl:] | 控制字符 |
+| [:digit:] | 数字字符 |
+| [:graph:] | 非空白字符 ( 非空格、控制字符等 ) |
+| [:lower:] | 小写字母 |
+| [:print:] | 与 [:graph:] 相似,但是包含空格字符 |
+| [:punct:] | 标点字符 |
+| [:space:] | 所有的空白字符 ( 换行符、空格、制表符 ) |
+| [:upper:] | 大写字母 |
+| [:xdigit:] | 允许十六进制的数字 (0-9a-fA-F) |
+
+并不是所有正则表达式实现都支持 POSIX 字符类,也不一定使用它。
+
+使用时需要用两对方括号,例如 [[:alpha:]]。
+
+# 重复匹配
+
+**\+** 匹配 1 个或者多个字符, **\*** 匹配 0 个或者多个,**?** 匹配 0 个或者 1 个。
+
+**应用**
+
+匹配邮箱地址。
+
+**正则表达式**
+
+```
+[\w.]+@\w+.\w+
+```
+
+[\w.] 匹配的是字母数字或者 . ,在其后面加上 + ,表示匹配多次。在字符集合 [ ] 里,. 不是元字符;
+
+**匹配结果**
+
+**abc.def@qq.com**
+
+为了可读性,常常把转义的字符放到字符集合 [ ] 中,但是含义是相同的。
+
+```
+\w+@\w+.\w+
+[\w]+@[\w]+.[\w]+
+```
+
+**{n}** 匹配 n 个字符,**{m, n}** 匹配 m\~n 个字符,**{m,}** 至少匹配 m 个字符;
+
+\* 和 + 都是贪婪型元字符,会匹配最多的内容,在元字符后面加 ? 可以转换为懒惰型元字符,例如 \*?、+? 和 {m, n}? 。
+
+**正则表达式**
+
+```
+a.+c
+```
+
+由于 + 是贪婪型的,因此 .+ 会匹配更可能多的内容,所以会把整个 abcabcabc 文本都匹配,而不是只匹配前面的 abc 文本。用懒惰型可以实现匹配前面的。
+
+**匹配结果**
+
+**abcabcabc**
+
+# 位置匹配
+
+## 单词边界
+
+**\b** 可以匹配一个单词的边界,边界是指位于 \w 和 \W 之间的位置;**\B** 匹配一个不是单词边界的位置。
+
+\b 只匹配位置,不匹配字符,因此 \babc\b 匹配出来的结果为 3 个字符。
+
+## 字符串边界
+
+**^** 匹配整个字符串的开头,**$** 匹配结尾。
+
+^ 元字符在字符集合中用作求非,在字符集合外用作匹配字符串的开头。
+
+使用 (?m) 来打开分行匹配模式,在该模式下,换行被当做字符串的边界。
+
+**应用**
+
+匹配代码中以 // 开始的注释行
+
+**正则表达式**
+
+```
+(?m)^\s*//.*$
+```
+
+如果没用 (?m),则只会匹配 // 注释 1 以及之后的所有内容,因为 * 是贪婪型的。用了分行匹配模式之后,换行符被当成是字符串分隔符,因此能正确匹配出两个注释内容。
+
+**匹配结果**
+
+public void fun() {
+ **// 注释 1**
+ int a = 1;
+ int b = 2;
+ **// 注释 2**
+ int c = a + b;
+}
+
+# 使用子表达式
+
+使用 **( )** 定义一个子表达式。子表达式的内容可以当成一个独立元素,即可以将它看成一个字符,并且使用 * 等元字符。
+
+子表达式可以嵌套,但是嵌套层次过深会变得很难理解。
+
+**正则表达式**
+
+```
+(ab) {2,}
+```
+
+**匹配结果**
+
+**ababab**
+
+**|** 是或元字符,它把左边和右边所有的部分都看成单独的两个部分,两个部分只要有一个匹配就行。
+
+```
+(19|20)\d{2}
+```
+
+**匹配结果**
+
+**1900
+2010**
+1020
+
+**应用**
+
+匹配 IP 地址。IP 地址中每部分都是 0-255 的数字,用正则表达式匹配时以下情况是合法的:
+
+1. 一位或者两位的数字
+2. 1 开头的三位数
+3. 2 开头,第 2 位是 0-4 的三位数
+4. 25 开头,第 3 位是 0-5 的三位数
+
+**正则表达式**
+
+```
+(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.) {3}(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])))
+```
+
+**匹配结果**
+
+**192.168.0.1**
+555.555.555.555
+
+# 回溯引用
+
+回溯引用使用 **\n** 来引用某个子表达式,其中 n 代表的是子表达式的序号,从 1 开始。它和子表达式匹配的内容一致,比如子表达式匹配到 abc ,那么回溯引用部分也需要匹配 abc 。
+
+**应用**
+
+匹配 HTML 中合法的标题元素。
+
+**正则表达式**
+
+\1 将回溯引用子表达式 (h[1-6]) 匹配的内容,也就是说必须和子表达式匹配的内容一致。
+
+```
+<(h[1-6])>\w*?\1>
+```
+
+**匹配结果**
+
+**<h1>x</h1>
+<h2>x</h2>**
+<h3>x</h1>
+
+## 替换
+
+需要用到两个正则表达式。
+
+**应用**
+
+修改电话号码格式。
+
+**文本**
+
+313-555-1234
+
+**查找正则表达式**
+
+```
+(\d{3})(-)(\d{3})(-)(\d{4})
+```
+
+**替换正则表达式**
+
+在第一个子表达式查找的结果加上 () ,然后加一个空格,在第三个和第五个字表达式查找的结果中间加上 - 进行分隔。
+
+```
+($1) $3-$5
+```
+
+**结果**
+
+(313) 555-1234
+
+## 大小写转换
+
+| 元字符 | 说明 |
+| ---| ---|
+| \l | 把下个字符转换为小写 |
+| \u| 把下个字符转换为大写 |
+| \L | 把\L 和\E 之间的字符全部转换为小写 |
+| \U | 把\U 和\E 之间的字符全部转换为大写 |
+| \E | 结束\L 或者\U |
+
+**应用**
+
+把文本的第二个和第三个字符转换为大写。
+
+**文本**
+
+abcd
+
+**查找**
+
+```
+(\w)(\w{2})(\w)
+```
+
+**替换**
+
+```
+$1\U$2\E$3
+```
+
+**结果**
+
+aBCd
+
+# 前后查找
+
+前后查找规定了匹配的内容首尾应该匹配的内容,但是又不包含首尾匹配的内容。向前查找用 **?=** 来定义,它规定了尾部匹配的内容,这个匹配的内容在 ?= 之后定义。所谓向前查找,就是规定了一个匹配的内容,然后以这个内容为尾部向前面查找需要匹配的内容。向后匹配用 ?<= 定义。
+
+**应用**
+
+查找出邮件地址 @ 字符前面的部分。
+
+**正则表达式**
+
+```
+\w+(?=@)
+```
+
+**结果**
+
+**abc** @qq.com
+
+对向前和向后查找取非,只要把 = 替换成 ! 即可,比如 (?=) 替换成 (?!) 。取非操作使得匹配那些首尾不符合要求的内容。
+
+# 嵌入条件
+
+## 回溯引用条件
+
+条件判断为某个子表达式是否匹配,如果匹配则需要继续匹配条件表达式后面的内容。
+
+**正则表达式**
+
+子表达式 (\\() 匹配一个左括号,其后的 ? 表示匹配 0 个或者 1 个。 ?(1) 为条件,当子表达式 1 匹配时条件成立,需要执行 \) 匹配,也就是匹配右括号。
+
+```
+(\()?abc(?(1)\))
+```
+
+**结果**
+
+**(abc)**
+**abc**
+(abc
+
+## 前后查找条件
+
+条件为定义的首尾是否匹配,如果匹配,则继续执行后面的匹配。注意,首尾不包含在匹配的内容中。
+
+**正则表达式**
+
+ ?(?=-) 为前向查找条件,只有在以 - 为前向查找的结尾能匹配 \d{5} ,才继续匹配 -\d{4} 。
+
+```
+\d{5}(?(?=-)-\d{4})
+```
+
+**结果**
+
+**11111**
+22222-
+**33333-4444**
diff --git a/pics/0f6fe85a-b680-47ea-af67-21ab98a62f8c.jpg b/pics/0f6fe85a-b680-47ea-af67-21ab98a62f8c.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..502722afa0867ce6807663bec6d996384b19afd5
GIT binary patch
literal 13312
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%0AYE3onB!BqPA9
z&HiwLAS4X+@D<*=l!LLe=5BYeLS=PuexYpWT+UrzyNl~hyBLiIO)sT$BMX$;-gNif
zpbyq?^HbYS9=c)W8((`0);Zp^CKq>tpNI{Ktc{%}Vl7nHVhS3G;&}xS|1qLi?bYYBaBpgtV0`Suj*!3cCwSw
zHth@M_TPqZ_tT6%v#m5&_!{7$O1A}V3U)dwc0OrYhg}sr#f-`$3#H$f^2|YJKG6ku
z77`Wpfo9BA>8fD5@5V#CDzyb|J63BUAWq9*Q_PcULFf{p={D3YB=
zWKk|V6RA1o0BdoJ()R+(%qU|{kJuVu+^R+0{$(azWQ#DS*c^;M&L!`|kZ~OpdkZG+
zVs(_y?~*?5MLmXPuoch%8@gvd2c?1ewNdFHT7KT7Axg;|RXW>t?)AATBhCCFe|_LL
zoZ28(Sn05sqyeM_sGpP=goa#ILu<^jZD=-x^#F2&9|}kZ%Piz5Q)@&1<`t4T3Wcg@
zuab?$D;5CC-|1>QTF7V)TldF+f=5%isQVPRu%g?O0Dpb5Fcx%1Sd(C^MLL87aK-Ap
znbQ@WP3K%F1cY3^aBmf!v7dgouF@Sv&>i06;WhX=0LzOhz3#+>YMa-moFJ#PL6`-vS
zI+$!^+Kwc*oQ}BMQ^1Xca7ZEITxt&2cxr;Vg^Od8fEA?R=Q_^NiFn`QID^rV5c<|*
jo}^4~baa%%!2qD_l9%Ylq)&A@{r~O%|J(onwEzDG5DJe!
literal 0
HcmV?d00001
diff --git a/pics/1164a71f-413d-494a-9cc8-679fb6a2613d.jpg b/pics/1164a71f-413d-494a-9cc8-679fb6a2613d.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1804cdb19932d65ea9bbc81a4e8354db2a51958f
GIT binary patch
literal 12288
zcmdUV2UJsAx9-M(AjN=Er9?W42nwhm5EUuP0Ynf`N<>f$Rir~qY!s;iB1(&bG%1lT
zh(tPwf`EV&fe?y-A&Ec;A?5A!-W~UzckX!S{_h{}ANRbStUXfpUVDCPuQ|VO&b2w;
zI5U9odDC;I02db*a20$3oC&}ffb7`u`y1T2!8Z>d4-Ypt4?i#OPCh|?K|uk20Rf@i
zdxV8{i|iH<5Ed5}*()k0CMF1#kQ5h{+#@O``gbT_du`l!6#_($-b;DOr+B8aMeO1LMM?YG?fbj<#U&)A_9?5V
zsvS6}qkHW52|az|vnHly=I74a+Fi1DaJ+oQ-Q)TV&znfEz@Xre(6I1`2M?p7V`3l0
zrKUYef12^^d1hYztAfI!;*!@@)it$s^=}&*Tie<@I=i}iJ`N6j9Ud9|Ha1R}CC<$+
zEdE$prv6%6-=J;Mw-~?U;sPN53)a6Q`x7n^5Z4ZFZU{H;@3^>jgn|ts!p$RpWapmK
zHoR^Ddlin};}boT^0KmJm!kGXirBT=1N`DjIs|3v@6i4yvVRQN{eKGCzXSUZT;qTs
zgbTcR5D@?lux#_<)PR3^YkEL?K`$vq?Wf-b1IiwwB_1Ad)3U$6(2C&wGv2tt(~yYTtZ2H
zRMvzfBx<@0y;}3B6$om0gde-k3$w`tM*rpG{m^cjbC(~+yVH>|O3q=Q-D;4}534#Hxhf-)
z9Py*cWm|@+L2Z7O!6}y5D%nuPk_CbeQl}^*imM<7A`n;($rSVh8zA3e%j0
zH4SBtVG@76L^W8sTcIsIt{NUQ>
zNSX^hbQaFnODO#;nWJE_@b$MNJvEQIfj1|Jt8u^_2HBr9wRg}+*gL|du)w=?WnXRO
zo0=g~wn6H-{o^O(p7#@6?``XcnXY}nK$uc5r_*Q?F8cCnhL@iCsnb1SQCI0unh702
zS#*rI8${_RVnjX#x*X5!zGG@8_Ok}CF%kXSHwPhVn;q3Po|4re(acxlL>6mvS6rgh
zX${`{MTuakH@tcQ{lo#jNwfJ4%fs-U8Svd~?PU!0f{U~0P_26Gp2=N11G(>AvV)y5
z^9j~vxFa&*l#A2fjC_M8Q3$%fm+!`k@#1owcpLJ`ZWNu$ygHLItwd}237^S=*WX56
z8@NgjB*qs!=*;v%Un*!X@}J1Fxw{)P{{q4t+SRNEAup@t-R1xPph+tsb$n&wDiZjs
z-gNKZ;C7hvWQrQo)P{}t=+$fqMC+5cRaH(Y;gSADt80f;h0>0?=Xs_jWz%q@SBgrJ
z$0BH1fkj^815=KZodcHKrRl+n+#>5Qpy`;ahzV~?RxxT%qbtt9KG$%NC=htTrZw19;)1M;M>ul?&f{m5P@ZEX%{c3uwgOI7I%DE+LSvT%Lhu
zh#fO?o9KbB6
z>RMyHL2VPB#PwMF`)RT5M+kWi&|++)gOaA;+T!s%D2v1mOJn;woq&l?`p_mrgCZ`f4UOJd`P>R%<7GC)LuzTi=`p(^1m+i36){+cwLTESQ)L!iP
zySHXDRw;fam%&T2r0)HVY68;u>bhC|gP)^X6BCaN<{|U)@q)sqNC;<}Q?OVLP!r1B
zgPVo7S*-N-?^K`Y+y6ql{j@{R?BMsQrGsS?R?8rlSGS?+&06{X83_%v8-}>yftMt*{B2)EF-S<
zGG#$E0cw3^rb%!66g{%Tl%}q>nz|r)
zc-!Vl+1S!X6ga*1Azf7(o9imyLJhN{54ihDijZ6t35X=4gH-VX@1RjMEV^?xP-UNA2c=(rJo>SgU`sh%xn|~C?N?kI2<^6H+{POtE
zjfR$u`QyCjBFo37DTeOO^x+vY)EhRIk=gDYA?@86=hVvq!iYN>FtHdJO&yph5-s~h
zCz%xa-JZ*^pw-+UuVH`MdJB$+(mtL(pZmVhYjfZ3sFTj!{z}7__K~*WL3M$22Y&*7
zcLnwpUGoZs^nEdQXHJQ3)0(7Ip!6}Ve8@aE){7=*`>^$#-gdulh~KEy^2lhx_kQ@w
z@Jgwfb>HZy8QW}d{7^<3(jHfATIpH^ITVony8cCJ&9`qgUhP*?vTaKVbE^|Z={L(n
zZA{Et|AuoFDobY(`^CacSK8|2!pfwJu|E!&nk4+hn0)JSGB
zEV)BYjH>9Y@if0c@z85{g4SHXI@P2D`IcGn!ks&`bX@ac5MpG1?MoEqs%4(7M>g$!pxlV$bwMo#ee9-U;0$9fu63W9@eH
z^PAz35l-c7Qqsq;eHY$uG;||Ss+8t8Bfq?^{H7n(evmguYwKCkqGV4+hV_t!PN_M`
zheWKePjGWjyv1`Ruc=|A)JCn(vS1;kGh2Zyb_1MF*KUG4;P2YRJ~7WzW0?EpAR|pC
zbFBPrqsdPSs?rS*Sb5O!0;Z;(`8atWX7nBh`116fmL1Va?0h!u_BrNQw1SnWr`l>7
zGXXzVPmCJv@a2)#)&jE-4)94WFOHII4(@@!b5jRJC(?gQUQP!D1>pcM
zH6pHuV@VnuKuNI^yD@`VSH_tg<^XqIveno(=Q}X(zOG|Zh**j>Zfh^ffde3@m>-Rd
z=H?3=;Qk#>w;LZ
zu+-63BUtk=86xd%p6S4M^wv)A1z7xaZRmYwFlD8qS+**&*ssDTWTHpM%%j5bI`2!#
z-;ITqD6pPCy#*^gZj}bet#=ZB_0j__SOm`hf3zi-+5TiKK@P^POo${iO)w
z>pr<2YbVYk0;ljcMmw1&tLfg9MT;SguUnrbGiObmwYw)%F{kMcwVjfO#N`gZ$JP~Z
zuUk|u&V?nIIQ(R{+x!6i9&LZ;**~6Zp|ZB!(8K!E_k&5Q1hdu^yAh)U^t(}K1)7i)
zkxza4kRj=}oi`y%EQj`Sqlc%y)_Tht)SnK%o#M%6D7<(>t&a(Iy2tYrUoiDsgqeT1
zbR`qw(1qp&rx|jI!Fo1~J`y(3Zgi5W`)$q7-S>=n`PIN-cRNJ@?V4Ub`@0ZrJ3jP^
z13a{~r@|i8-qqfnU*whMZ%@kkWU74%=3#^2L+z!Li5y@oWA=MS3oa=$b9p?Z5QP__
zH=i9pY=t(@Y4k|aTRb7Qc}s8Zwi?&XzjWnhMHYCqn`9ZL6}^%J@T<=Fl*l!{wvIJ0
zEqNbQ!@c7L_Q`RB#gq=<&ZCmBu2Tbrzk-DVEi1Fw;gjFHq|s;N&>6Fz_c}lBD)QDx
zzudoESAR~P`6P2o0%QY<1qa|dmYo{5(vDW5j=bAHZMeZMI+(cllus;LLhpm&Yp5iq
z3$Mm)n+Mb^TqVcy6@r
zmOWNPXQK~W>?=};<4+(vqYCPn)0$T;?df-I}y1Yo-`=Cu&p`bIr*7$XQT6c20%8fW9Rggc8b)LZVmN^)J=*j_Bd8
znZoXQy(^%{oF5gf%PJXL=6`QlwxkBz?9u&oBbftmzoT0UC3sg%g~hZpp28!Gm-m%T
z`NTAwbc7Bz;N`$fLT|N6z?TE;;{AY^^=1oGl^?Ik4;3~e%PPzlz17otHo*$WVqWug
zRw9^+#gh}o8|xpS0z4X_9hyRW!F)_i&Et}9vsVcz+f&9Pj^Xv!NifxV98c)zPimH!
zI#+a%)!fF~e|VtzEL(}UF6;z3ZUZmu&A>zjon*ORYE0_2tc+Scd|2gbiHz5-8%pZ{
z1c80p7}Ei#tJNpy?h3LN_JTo;c#)ez{;~@>&-^wnLY18p*4K%dKU=RAJ-`W?7|yP`
zxh4dN&YySE_5^Dn0R)TBXAq+Fdix=gT<5L2kmDHvW({4;n(G?aCrMngx4c(bC+#ao
z_OF#`YLMMHK9DW${}N5US(gP-&tCl^X@Rb<5AsL8n}ty{flTVfJnJGG~kw&>eCo
zS-GKM(=-gV@a?ELbPc_7`y@S@aBZT39->&bR3B>;
zrWCW8aGC=IIHGk`e@<^-2y^Oy11O<#Z^lpi#`KZwJU6A=u;)_weP>eoJ}$$3pmLW{
zdaTT5d9Ts_eVvT6G%p#VhW;}1q-_3-r}Up4@o|58Q)eV3X<`4jJ(fxj
z?iVXYnLmtE{$OAZj7Nq6A@#<^Gy
z0Qvw`_p2qPw^ahZ(xj2s%Vs?^;{exR52E%{bh_>6aAOE7M_(ATzHdXcs=2acvx@_y
z=xHSUAa26fwBUroW(mxf#Uc&>hB~Gtj534}!2bvw0=wk^Y?T`52Mi#GA&7$ajv@tb
zO{QPKLpi_?yMOy$3r0}%un`^X6T2O{35Ts|bAbP%&$936egsrgRGsc*eF46hEsuHp
z8cP9%h7j2Chz5z+)^e#>%=ql&Le?N@mEcgC=4)z@rika3*O+J6!aM
z@6?YxUWfpHE5;C>v!y}#R_)Cg-~fXClxcQU7Gfl)%5?+t%LdaLvkBj8%$C?}>t{%V
zYG(Tf2Z(}E@Xd0VFJmD5X)~reoGpbV;8_C4@a3>S8WesTy#fDaGYuPuJ*tIv;vmlZ
z!j82-PV
zT!0umNyxmNDPa1obFT5R$hvaclLZix|2fW=r8oWsVz+xeL4#1E`zyG=Itp0h(ZN
z**}0AmyZmU_y~#Sy(Ugt$L$0u(i^26--hSXVERWCF1F|DK3*OT{k5i)Qhy|YAz15&
zLb1}Cv_mPXU747e7sI2rZwD%_)jkS#im`v(8FD|0(q`MYZKvj96oKanoRXj@GW8E{oZZ-%yTc9*d4Ab(P!Ol#?
zJ*FNt`MfQ176$QpI;t5C6CA-QbPlBbuqeL+0dxBClOO7Hr3N+0Ok;oVfY9qg?Xgtz
zV;PB#$?wRn;8f!|MYR)$SA#Pr>S%d!82&=_poU_9-(dKXDr89tmuDa_vweasO}Dii
z4qAyUDO=BSLW(bl-R5t7ZKn9u!9>EuVsoi>Zjd>2w1lLwU58u1&*Y2Yk%;IcEVAS`
z&95gw0f5B+$txPentYJ$9;##Hn(wwH~0lI6)ts~oS
zTQLW5e{hp>%(V>~eoJ#}FDOo6lT5S!WLD+`Es2f{Yd0ne8FsJqLRn8sIY65>^Ehbx
zjnR$#|L`60o(O&XmfHU_mwStqY7$YHM_FDqV+H;0a5N4eZXg@dag8eW;0*^Td|PqN
ze=LSjL)Gyml-`oQe<=?8Xjv_Okr7^w2ZznI7Y??8x7gN-s
zu;sZQ^}>A}ceDm+YM-w%npwZx_tDP}-eixq;sALkU8Yssvx(>(_3C>
z4OImD+Mx7a>sMTy`IMk|7%Y2E5}VbR-Uph|d$^NXX|wR%--{@$BFme}ONtJkK{~kT
za>iPM-aq5emUGDL*!%F=x53Zydz6$L&t>16Sm>eQ@`Ard68&-%%7Ewy%}p?+TPZ&@-N{7LubY$hEq-0=~nZ2q(yMI
z5j1OD_b~@Ja?u%eij}9}V@7E^^$Zgpd>z(zz95`xON*&=8AKfz0Lzty5t;a3sqe%i
zCCSk-Yyr>ngt$R^fDNc_zHk7oZ461B0~oQzIRM_@YyxBv#MUOIp0ynTGJrrS?JhVz
z*5JgML2`iE-w9%P`xItC^>?xZDT5k}SmDuR@WilzUJhVaiCEu*rv$-2IVDEYGU^`}
z51|YX!{bgkCNF|?W4R3m$S;a#z$@``fVkK7h#HBmEIq;7DCO!y@CJhfxYjU~spHw@
z&ro`b-~5H37O^Y8tULre|HuJs1NtvLLeP)F7Hl%hs=7B32wh
z^9Hc8_#dfPKpyMCbe1`x2eA7
zh&}nv-%(2MAh#sz@t1cShM#t36_GB_YHG1c2@-KM_hgl6?APISR%wO%g;9h+lc!g~
z{W(V|=qR6%ai7-FX(1T1gah;l(>-;QvPsOP>K3?va$N2KYEc`GA9X@bX4pV6n3xkX
zZMIesGHZeqK6=1@QNE$y9f3q?Q{*xzT^}Meql3IJRS&JNctk1KB%PXL1tR#--{BJF
zOmjS+flsD*eSsrgwPU0)XU%IoXk;MvQ%dnx&MAYWVFt9oOT=sZdcjXYoKU;P!K&>0
zl8}+Ni}pF5{Z_|Z(m8;O)j7h7+x4HN)6YXe8SC_Fr9(q(r)R4~qZhj$T>Ep`sUeH*
z%0pdv^LFo8al3D@_?X-&UNm&UdzC@=B$|ve55egNLR)fFt>l7o`G;`20&7xz?ay~4
zPGvua@7vD&>qO^|D}i)lS}Gk$#E+E{A5O#2639iz0nNv_cmue2=x+_&pI(G^_neq*
zCKomyitYYz^i2!zOHr;l7zE=*j)B9P;Jz3F2|a#tA=a=jJy^{m%bu+qY!qX#DKqLq
z>`%zuMfZH!Q%X;3Zw$$}dYApnDQb>*Lgtru7g`O|qR-|*T^T7HuEp@hOK)YN2AB3q
zYpctZP3WhsIB!P7XP)A#r=w~eakG^7Q!l7*+;$hCH;>3f_!IMEAF-8wx5_(;*p+ao-xB*l$j}pta-P2eF9196*sLN7EJeQ%uldVO3q7a0(ci
z6Cy_A*9}!%B4_*`9X>mr7*%|7z2OmDf8&D`{0d9>H6t49`+CgMGn_lrzWTs9w{&Cm
zl4U+a6W|uebZkR9?=0cx%*?v4%K?HBchaVePqmHeO?N=+v9P~Vx;JBZ~fmJmYW
z-A;d@o5!Uz15{0(|JoU`+NVE@Kec?qEooddPRVihbghjk0C`jLmyg~+j<@H^4KbZw
zEblv9>QkTT%Y^y{LRe#pSB(!a9w4xC5GpwiOa_hgu`P0XHE)O60$%kAjN`HL7rU$u
zp^3E4BVCdm=!6mLID-TE^a>|
zEX{IQX9+#uF2Qfdt_6$3Fj5MIOuO^N@A}u^o4URje}+nwyIN#c3_J+XzL(1!&GyDp
z&SS?Goxdu-!w7kaTgq$9eOtbGde7n;lNo+evoQMuo}0aEMPzvjMtKsrd@JY6_vKXS
z5(T5;{*TxKAl(0FI>obdTGU8=n*9YK;S&{I87z@b_%77am*Y3xe)`7*8iC5(23HvW
zxa|7p&yZ;P7$wb&K2Pa#p}4-iS5|vs-w~Cg*V150558ML35b162&=&0^tK}X{=`gI
z*R%0{tA|g%pj_KonU1GhUnSf*v1o7ue`+O-o=$0N#fUMFA4??4iuXDVW-T0XZLbg}
zk_D5X?}3|0qZ1U``=ZmBqLmPdkig=w!X(1^s@#Wx2qW|$w%+<-GjyyjhJaM0*0-y7
zZREt)|jGo-Hd{!_Au)3A@u17ALs8~17sESj6
zLB0PsTn77Ny?F=t*w`!jbKW*Ylzzg(yjxS#&T(!*?j&=)F*4Z|kJyi%z;dHPsVD6R
z{81-GGn;e#qE&_l?r$A3|CCKR-DUJl);mM&Kxaa>*x0%O+!z}Bsl-f7S5h_fPR+=)
z_8KkR6`6ZZ@?Evx4OOKyGU6rT4X!hOTKq?2a*VF`gh}%GM4@b0h)edWL9U%U1r&A(
zsMD0EYpr;(^=aM*)4H77JC)p@7%hkp$I4OpLOI!-+%Q215D
zHz-TsRf<0$=jr7OGV>1p&cQv*m4!E6wfap1i45&cE0x^KNxiJ}h}VZLGKH9R8xze%
z)9beGF0s6}lS8E|{R=Pt(b~{|*Kx1*ALsVCIB*J_Od!@^?OefjyZC
z#nr2SZZ)+jxm5ekh#X55ExlUxV<^>6XD}qv7e5KEB1D+A{$*wPZ-F0tT+4X2E{oFF
zH$*x%noQ37xv*`KE;mc?IWOeQ%W1qhw@@PUtYU
z{AcProZj!Ao;4rV(9~HvH066yz|ca$&P+L7kF>_+EIPff>B30Qth%*KqJvY`<|D$k
zG(uM-u-!+*`UIKmY%RqjIzGt=qfDt3TpmhD&-V=;S!QYayCl~Uo9dsQQ#?luO(ws7
zql|7&PbOgYA#=61Luo$cYSlUA^Ga8FZSSiulH8p}n7ns9sTw}3@`J(gXEHmnN3oOV
zzfGu|4D2Gh;C|-iVPY~eA4~0vE(kn2xDcHIoEvFT=RL>12YrD
zJ$zz(Fc@sl1*3BoFxYlI7>rAXcPIFZMUGGr_~5#2VWKcA-W#8Ldq0hLr~Y!d`92IZBu4eo!0J%(Br{xkqlUu1n8!)#+1d0
zQIB2U;ULl4PTD8je>>kx4IQ!c1hWOpMu4B2`IcQ*5~Lp=OX0|nUgZ@!%6qkqS95ML
zMH>6J>rC$jgHA}cONtI$t=FzoBNhE@;mRzh(73XfzW3o#!6Ptpya1jk-0!hJYNMZB
zjfTw}09Ld*q_&YDxk$u4O$Ks^Vt$2VwpFRKv-)|`Nd>s#d|M8sAw(w|KUUQBe
znDY(LTIb!~h{8~XJ3`^7zR!SHLi&F0W4N_tAF96g$O8@5sIct?{&!J-YFC7-HNLP7J57)9Dw2`MDc|2||
z{QH-|&FH#?i50EJdvc?Ho$ijD|C+s5rkF^^lwT*^-=z{+dqSNp;_|9uTy-vxKeS@&
zC6nWo?>w%I8Y#%xnj8;$xD|ABvCE62IY0MmE^H5fD?WPuH1B`UNLY&eYN3Un%xI2R
z*HEWFuN>WSS{t?<#R%&yZ^=+J-o{?*t#DS|!<`nk_N}po9hVLth~4Th3quc`Nvod2
zhNIpt8rD!HFvH#68^{p4xc+2hK6T@ZTJPiL|MCfDuWQ^{&PyB5D}2qLfC
z;-i!r;lu9SGTZ{(!V;Pl^E=;J%kxqTD$dRaYp0=u72uXsTj&cQ{uibnjh$@@~Jujlg%yB?}D)5Wn}
zhXW~lE$WC{xs7ygnYuH2At=|b=>P0rGhf{!M7#83O1zP_K9#)#%9q~!IbV!C;7a3`
zNsK#pRD-(Jx1f9Emtc6eLxvp}A3A6#alyo`HK!~_DkAx-_aD4&A+b;VBiw|38MtdxR*~;aku2Q#s8z(9ra9o+d%`-xA$_Iu
z)V$Jx0#)(S#YukABY#nSmE#Kb^C;Ja4IN14t_*7H>-=>)YF~8zK(tgY{Pk~J#)fx^
zi#X&T@dkS=eu;QmRuA=7t(8A5_`=;Qzc_atyNr>>WVt3ZiU|K-kM#fRz%uv7)1eO_
z;txFJ&hi-vJ%OMTf?zWm5DJZ6B*iqtV+hx`5@)R}tjhXvq{q%9%oq}XXbDevhb#ne
znDTk2p{rI3ZF86Wjvpxun0tafdm>zvcf?hSDB^R1Syd;C18w2IL(
zvV>t*`@&`*xLXcyU~ejXDurh+8JTm;hO6?zxJA81A*!ZsG?P&EWf=!k>H_|UcZ_RO%*)%db)I(3j~xEk5y`Fn9YaZZh6gl$)dA+JW1
zZnmd=Mf_Om5t7u_YHNSF9+rIsEaONjJW$r)p^rqv
zjkcsU8`#tbxhxdB^(gjPQ{p5{_#QCrpLQ?*j--DkvF`fKjZ&jvybAU;T?|?N1IHH>
zU|o`6g-_2V@5nsitf%TXdu8yAI{iiEh7jy!;}&P0w7NJ+CN?2GxsGfDN4fDWHiJ-S
zLjE(^eqwV_ZVdJfXNUjDkU#Cxu?+fxLw)_#8Ye*lvzXNyC(c&1tv(fZ?TQp}oM9##
zN@4m4FdYwQ<#)u9_1)+xl$GnJl#`_Qk7O%5wb-8oxf2W<=8tEe}PB+%P-Hu!_C$
z=Q4eoc9Gn$8A%OG9qOf)YG|63wy=(7U@
z-?Vpz8`uX?^SvqE+`_Qz{lLgG&)1fw>pDgp{K;Rvw^(6YggVR?hgCNM6T7Be5!7*Z
z`g)!JJQD}&0(l7x^#QDf4)@+CXY$F9G5mFS_W3SEwWlwEOWAwi#noo5E3ojJP+oU&
z)+%$qyv=IT@w$m`qaaXOA%7KFAUG!^FNDVW>W^l3so}P5J0Z
zrAs`ry<(|Tn}VnNN5Yg%le-7B@-B97*EtQXi#yP1c0lP%38#TIwxj?{d+AMv69hAE
zeLPC)$WX_~!}<(?RRw}UJXFfYYn&3-4&C6=PIKp?hHXxVh46>pyqu{)Vi?AVC@~da
zW>UcI@Yy7Uw{J!jy|k`_5HkKzz6{mu7)1S(vMu{6yr-CBB=S2~xB-Mf&8R>pbkF9-
zv^G0Q$^Le`iuaJEsV3OZ$`_M?gJ&zr#46uO0}3Au4>iB5>NWfY?jmCE^AA#VZYmw=
z*Nk3~hv9&^Qb&@fIx^@W5>z3ZcGU+i*-v|}(E5otYSicJd-ph1-i$?Zbw$T(Z=O+K
z>9ef77I*eAfUk5UcX$ZoG$C|LoF;SV%lY3Pas)nJRwI8wz^dFoJpR)=tfw0Q0F?eq
zRG_F9gGVnq{P8Aa;SG=Xv#iZ!ERkEM1Zgk-$mnYEx>Qg+_iCz27^m
zmR4L6!Vk-XR=@qg@hhL<*8)W@@G3YFM`MFoWPkPn7%m8WRzh$omw~cijz>wY+rZ8U
z0YC6DH`((p+N*B_-5vjs$&<3Q7Mcjw(>ZywGn2tA3Z8EmB*0$(1BKTKbrtNu`QP-`
zy}O29UL#{_W|g{#)+IKtIMj`$PL=}9M;cgF_>)#_=;AvO%tZ|FwjXPaGaoh&O_j}L
zkh%?}K&L?>@?0lspf05`a=MKY%FazYC_O0>>V7qCn{lG2505ki6Oi0p#W706A#NFm
z7D<=|)H*v#GUz>;X!q*xex=Ywet*geeXx%I$c(zdIz9x}UbnT$CU53(`2N*ezO23n
zO_U7$vX|0RBbOD@L-y~!+*;A+Qr0)TY8Wq>kr6QQ06@b%DBAxq(Oj|e
zcOS)Oh0+jdrvtxT7YSe9Ub5c!s13Q@sFE_X-kY@vy#ARVLdy3bWai-x>o?dpXN-Mq
z?S0Qz1FX&I4Sa#x%MHVIYvprX!R`Q^6Lmm@+!^(0-c#D!Kbu_1;IVFo&z3ijZizUc
z9!c@*R01STl>pdI`jmPa!w(CAjxg?*y~ATcbOo@2SaG%57}+aAaBzZE&SU0-NxrQT
z)2*O+n3D*un-gyz5c5^mO%k-;RO{qf7;WoHL(>OdaqiFW;<^uQ
z6Bv`6=~31&K&UcF{!}e>!y3XkL9VVB(5b>O450|jD^)9A%3}yADfm_dF8E9IbnzMaj4!s9hshM^nqPw4(Isv#Y6Ob~VGq
zuExiC+|ZM2Sqto|Dk^|m-;5XE!L8#;kh;u$T4zr+`9g^e?iTw9W#2X-=(?Bweg9uI
z)#g+okB&`>_sY!FdK@Wc9m6YV6LW4m&wyjYhdpy6*Dj&IXG=t%T|NQ7iKu?=Z>a;(&4F;ulF=HW1mqqTF
zXme1M9?|c;jOfk`dz7Ksv)~*DLACo7k7U5>pUqST?I+>Z{$qhyBy~4*
z!S82CSAoNw&^Z<`84D~R4Ot*&sxxaIZVmQ8*)PqUn|BgA6+vS2v$tnwZ`)&Oj|?Rj
zp+Soc6gE1e9y1!utTR~NJUQ6RppT5orKxssMD7#?ezsd)%Gw%57gu|dCJ^vkn(j>L
z*Rb{j3L)?NC(^Tw<9g}nK6CAlHywPMyBLO&n}*fi3=`Y&0BePIw#?RgyC)+};=}k2
zYr@?w0EIJ5QjB8ldjhPPjA4;U$j~M6Fb^N^>(1XH@kb!)Pt+
zH9YhP!>XgS$7yc{PZ-r^=gItMDFOK6L9nVbpIcu`EPE
zef6`_t42Ys)i%=AeTv3oSP_q=2$CXiq!*u_-GG~A*`a|k6KY{>L8_R|xmZm%W54BY
z?4MDI*1)Yn3f)@j*IIT{wuLy;`ie-N~WrmT291Oz$bJ6J5b|nRnfK3)Yf4#O_Nk
zwh$tR;&Z7iUffHK&BHvv7o|F@>x-Rp>P9Yd+6MeADA{y3vP`S!|fjvADPgArDI
zFUB9?DoRFlT|u(ooyA#<51U0q=dzxbg>mSKs|f|kGn$o-QaJHh&64h1=^&+^sMKK>
zYrNjwu`=Qc4!MTlso1=ms5L8(xTE=eZk;yDI#O^%GbdsF51qNqa1G>Jsx$
z7axoeMor}Yv0~hr4rdoRTjP*nY+e!O1k-Vk9-poghc@`6`C}p2!-CoyU5v_gp<>td
z*9KDc1Ht6pg$j6zb)K{p5;Mbj`NZYL5c_uSyu2!L3K1r++{brY%yjZg_cu5AF|Txd
z3nS^&-Gn2%RhFJr6^k{DZL12F%=PN~_X=jY3y%C)K%lx)G1>1*LkcKKFt5-
z-2`L9n&Mklg~0ZMr4HU%5~puIL{f=C8Gj!t9ALZbT@F!RdUm89P1CG<((7$N(lx4*
zgkw-Iz~puoP3GR-xk7#A$BTQ`YpRWz@e3F-7k@nb0;PUFYa(j$UBCD1=xNe1EmpVR
zEsRB;K7Ad*Dq6|drBHX-baHb-q;WxCFfaCOCJ$M=z%REW@JwjE0N!(4!081Q%+29J;?(BAR?#$WfdAE8*)%pe
zveTn@0`s9M*E+YY3|+#hJ}{!%?4>mya?Q)Xy7MX(pFfs9k*OJMALah`{$67KZQxr}
zbU%pbOy=;qt~+wp8K+dk5DqMOsUIP~Rx;=BY|H2jP0k
zz3+%^Y!^LrbvVBfo%r5Q>pm4F)T7}cDV}QDprq2%xvRBX*`q;9^|W`cdqY_D#U-qp
zT7~4pb=3^MUG10Zx~Ds=XvFHGkRP@(=py@{i(QO{l2{eJD#o
zXuG#FYU-+l22OA!1uuZ2^cj={mQ%$LV*xH^>D?#V>)OL=#%V}UWRdht8=rK&QsW)F
zIe?m+KF_FDRHpbL_G^V!dZtzHv!ez(kDn69yQRcpZ{Sw$WUpke?dKrFqC6!nJg;no
zEQ-9eO<
zK8rwg9WGk*OcOID(Azz(_)+@Gt%NFC%@0}(b%nUSQg%FKgc_MLopcMau58O`9b^P(
zy4h>`jh6OoP_=x6MXe2l);C#=^GtHs=28~%t4>HIr>)7rYCg7sf!8?C`C6w{xL4T+xI}wPFT6bT!ABGBN>;!g!PY%evYVf+
zS$JyUva^+Oz4s&^TO8LDLQ`p!jD3>EV_l<}60p(d_vpFriq=y@j0|Q$LMzNJY<$V3
zDs)0{9fe@wRt{QR7pn03&7?d`@v(evFafj>E7-<7x0nv*YL`sHG;tPPmZe=OG5Lg
zAd_#IBC$?i?je^FY+v?)%B*2$rKYJJPmu^ZJxX|lIEn7#_2M57Y1!WqlO&@OmzY`i
z`%EAXO+;N_elv-^h%f1t3KhK2Yt7?mc)F?e{`QDik(~;OO}eKk@!iUnhE`UA
zx<>I0=y%?C&d2d?c0_|qv-iWGBcM4P%
zz_j@UZS{CWHpIq0z8?^d^8C?tYETWB@q)J#?=K@Eq->IDVpn>_W
z&1IIOH}Cd*(1tv~K}m7E;%`h2S72LW*_thLh?oLPj-bFdI|Tns@--;LCR7^tmWsZnj
z*wXXGm|?DWQ!+_|lATB#<9O)!$6%SZ;N#sjVh50v*e;9;qn-~-`c%W{s=kKIjO|h#
zp5b@Exs8a2xYzZ6dq<~?X`qHj!4
z&Hi13<@M4}kD*u5Sqpx&BT?vCM)kJH7XH?k7Cs)!g=V<5c78qgm}w>C*(P5roMIFp
z4IZL~b0V>;Rn6tX;qD3uwUUR@sDZ04uP`heVeFeiGs)xpD*Sn4e}OZ;FR1K9?DB=Q
z{J~BGY$|IL$Brs%PBU#7OA81X5{++-WlPo~$7*{qcyEsj4WT0Wsc1RA1MQz;8X5;j
z{PM=C@Q#+4%06b%N?MRpKihuQ{%be9TiK$DGqdP!J<1cUGCc3bTywK=sV)}i-Y24U
z)GpBO!HTLP89Qb?`_{z9LpJ)WW~jTESeZ>EJvTK_i0rh>fyJ+VGWuQozMk@hlU}5W
z#g&7_PXojl6@mA^;#-$WBvkuf9YB9nAqp(nQT;Xyp0KX`t#pj@yJOhO%pQFAblpJJ
z%Hf>xz{H@%LGk!Gmy!BA=D7Kh)alIN4s=22wOXuAXY^`Jlob5Xhm+S6wmdTT?^orRB
zk1iRgKv#a`)nl@q!q(cHLfU*{iAs6O-!eh>_>^c?+r@i
zejhXIU&OI?^gnO4;wjl%)SBFPuW(T;@XbEV@4d5oWpI`Xb&~q(=Eq=#`l;(yS}R2n
z3W$0|yk}r%OiMhrZ0!TT?8+A$rJmWhA;$PT9^#6*YB*+0nDjb5|MJ}Az=%O`q=L)o
zPHWtXM6nv<=0I*i;<}X;W0**1T%(;UI-PG~ja{)2vM91Fl@(n)>JT*NjwYgo^$k_}
z9@$1LO{=2e!I?KZ{t{BiTHg^{*zZz_POuH4L~p-eZQIZpDaAZ`Q02G#
z6Vr7P!*f+}D)DyyX{7^oQ|idN6Sb!1OOJY>W4@}X>J(njYQ-kAyJlPbdwRby3`7s{Q-OfrXs&`y6+pVm_gRD--8`qs7VnYL9orM>LS3>r6TxH>f6xw_WF
zuRpflzv^qKtP*SR6|%Ek{C;h@BD2Er#aCs4@%hs_j3SdjrJh@^;;v5>!fMDHZ8^PPj)&Z%h!|Tp{ID_#Ucz+97)vuOquUwc
zo}N#lyPvb3)cfo!QSn0X6tM^?E#10z>sd_(Q*xn1#0|RIoZN%q
zrD}dR<}0`J42814tNxiuNV9n;u${JLF!Nxyf0r=*;Z?&6;_>i`;qZ~1zyZ|kg8>wJ
z<>{H@d49Jpc-^=2COav0R0}jwTj=N8vOC5#S)-HQ9`?A_zM7)Iu2Zh9yWGTT8zp;_
z^p%=|p7phq`r;fW>Gv}w<>v#*Jqp#F{#>A_O5?2jA~xH
zteI3zFo^eLMjJ2*2?M&cvqr!TI3)V7Ce!-mLnPu}Ez{xBm74Jzcopw4;@(~nTz{(A
zmzY2Mj-e+eEvu@CmKpQ)^G$EL^a$vW4k3S>%h>YKxLlSR^ZS>?f>f46y5F6Ifi{2Q
z64`mOa6-Co=9Vkw$i`5;yCmwmf@J4MNjb;(8&;ya?-i4>`7`sbgz1!V1vy!&tdH#@
zYJa)V5J&aP&G;&O*-~ou?NZT=``VvAu_GK9Ze$zIndE*{hrRa5KOyHP%
z{Giur%Hk6CYnR554<|#75wu)CjB09)9(AeCJ@S%KfR@&viAL}n-Q>HD={zbK3FSAsI2$3L{S|;oE#l9DX|mk
zF&9UFSu%N3A*<{=)9rtyNmgcHuPvgux$Hzfb;v8W%&o8&8IO~dSqwPFU1D{xOG72-
z<&KQBWdCyo8Pa)yrnsyC4F#lZTh3Qo(g}oVpo|GaEK_WNaZHw%`j|EBkKVPR5#%Kh
zrl*_8s?GKjH{|TaEc{KdEMqXooTW@?ntD?A@#~UuL5J9%`wL1~%47j2%Xeebvv+T_
zH#R+X;ehn{R81%X&PnmaSWV#?iaZ>6%?(D0VCfx&u=4T@^cj*P`^^v00
z__|GSi7&Qdgph^jyPu?{ZTYF3ZWL2Pwt6Kd6?MDO7Spftq*^;AFf);moIl-URs#6Pme4N$`^Xdr& 4&9?NLEfNREt$2Fp
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 |