diff --git a/2019/09/09/ACM/index.html b/2019/09/09/ACM/index.html deleted file mode 100644 index 1ebc7c0..0000000 --- a/2019/09/09/ACM/index.html +++ /dev/null @@ -1,677 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ACM | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

ACM - - -

- - -
- - - - -
- - -

因为本社团ACM实力属实拉跨,所以只能找嘉豪学姐帮忙,所以链接指向的是嘉豪学姐的博客

https://blog.csdn.net/weixin_43870697

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/09/10/\345\246\202\344\275\225\346\255\243\347\241\256\344\270\213\350\275\275\344\270\200\344\270\252\350\275\257\344\273\266/index.html" "b/2019/09/10/\345\246\202\344\275\225\346\255\243\347\241\256\344\270\213\350\275\275\344\270\200\344\270\252\350\275\257\344\273\266/index.html" deleted file mode 100644 index d0bc7f2..0000000 --- "a/2019/09/10/\345\246\202\344\275\225\346\255\243\347\241\256\344\270\213\350\275\275\344\270\200\344\270\252\350\275\257\344\273\266/index.html" +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 如何正确下载一个软件 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

如何正确下载一个软件 - - -

- - -
- - - - -
- - -

如何正确下载一个软件

众所周知,一般的比较好用的软件都是国外的(实话实说,国内软件做的确实拉跨) ,所以很多时候下载成为了难住大家的第一关,鉴于确实很对人对英语有比较深的恐惧感,所以这篇博客,以受众较广的Adobe全家桶为例教大家如何下载软件。

-

第一步:选择正确的搜索引擎

目前我想大家用的搜索引擎还是百度居多,但这里我要实名diss百度,使用百度很多时候前面好多篇都是广告,还有很多(balabalablabla。。。此处省略一万字)总而言之,现在的百度,往往是广告排在了广告的前面,所以我推荐大家使用bing的搜索引擎,虽然也会有广告,但排版方式比百度强了很多倍(别问我为啥不用goole,因为默认你们不会翻墙)

-

第二步: 选择正确的搜索方式

image

-

选择这种搜索方式,你知道哪个是官网吗???而且如果官网是英文,你会不会点进去就退出然后选择那种第三方软件园然后下载?

-

反正我当年是这么选的。

- - -

但如果你们选择搜索的时候多打上官网俩个字,也许结果就会不同

-

image

-

就像这样一样前俩个一般都是官网。

-

第三步:选择要下载的版本

ps:鉴于adobe官网是中文所以换成了下载pycharm

-

image

-

进入官网之后,往往都会有一个大大大大大大的download键

-

点一下即可进入下载页面

-

image

-

一般点过download的页面就会进入选择下载哪个的页面,一般会让你选择下载具体哪种版本,选择你的操作系统,一般都选择windows,具体哪个版本应该也都有说明,可以翻译一波看看啥意思决定下载哪个,然后下载后安装就行了。

-

关于安装,无非是自定义安装到哪个盘里,需要加载哪些插件。

-

这里就不在赘述了。

-

所以,希望看完这篇教程的你,不要再问怎么下载XXX软件了,官网,download ,ok!!!!!!真·有手就行

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/09/15/\350\247\243\345\206\263\347\276\216\345\270\235\350\211\257\345\277\203\346\203\263\350\243\205\344\270\212Ubuntu\346\262\241\347\275\221\347\232\204\351\227\256\351\242\230/index.html" "b/2019/09/15/\350\247\243\345\206\263\347\276\216\345\270\235\350\211\257\345\277\203\346\203\263\350\243\205\344\270\212Ubuntu\346\262\241\347\275\221\347\232\204\351\227\256\351\242\230/index.html" deleted file mode 100644 index 613c8f9..0000000 --- "a/2019/09/15/\350\247\243\345\206\263\347\276\216\345\270\235\350\211\257\345\277\203\346\203\263\350\243\205\344\270\212Ubuntu\346\262\241\347\275\221\347\232\204\351\227\256\351\242\230/index.html" +++ /dev/null @@ -1,692 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 解决美帝良心想装上Ubuntu没网的问题 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

解决美帝良心想装上Ubuntu没网的问题 - - -

- - -
- - - - -
- - -

1.因为要写代码的时候需要Linux的环境,所以屁颠屁颠的掏出来了自己的优盘下了个Ubuntu18.04的镜像,然后做了个双系统(这一步具体怎么做网上教程很多,我也就不多说了)

-

2.然后开机的时候居然发现没有WiFi,没有WiFi,没有WiFi!!!

-

然后百度查了好多都说是驱动问题,结果我手机数据线插上电脑浪费了3个G装了无数遍驱动也没解决这个问题,最后看到了一个可能是

-

无线网卡没有权限的原因,然后就敲了两行命令,改了个配置文件,就可以愉快的连接上Wifi了,所以这里记录下来,供各位使用。

- -

3.

-

首先你先确认你的驱动确实装了(具体怎么看,可以网上搜索),

-

第二步,打开终端,敲入 rfkill list all 会出现如下信息

-

0:ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked:yes
1:ideapad_bluetooth: Bluetooth
Soft blocked: no
Hard blocked: yes
2:phy0: Wireless LAN
Soft blocked: no
Hard blocked:no
3:hci0: Bluetooth
Soft blocked: yes
Hard blocked: no

-

我们可以看到 ideapad_wlan的hard blocked默认为yes,所以导致wifi无法开启。

-

办法一(暂时):

-

(1)sudo modprobe -r ideapad_laptop

-

输入完这个命令大概应该就可以连接WiFi了,但是呢还有一个问题就是,没有彻底解决问题,每次开机都要重新执行一次命令,所以我们需要改一下配置文件,以达到我们的目的。

-

方法二(推荐):
通过列入黑名单的方式来实现自动移出ideapad_laptop设备。
1)创建/etc/modprobe.d/ideapad.conf文件:
sudo touch /etc/modprobe.d/ideapad.conf
2)编辑ideapad.conf文件:
sudo gedit ideapad.conf
3) 在ideapad.conf文件中添加:
blacklist ideapad_laptop
4) 关闭并保存ideapad.conf文件,移除ideapad_laptop设备:
sudo modprobe -r ideapad_laptop
5) 注销重启Ubuntu系统,可以看到无线设备能够被打开,并能搜索到WiFi信号。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/09/25/\351\200\211\346\213\251\346\255\243\347\241\256\347\232\204\346\265\217\350\247\210\345\231\250/index.html" "b/2019/09/25/\351\200\211\346\213\251\346\255\243\347\241\256\347\232\204\346\265\217\350\247\210\345\231\250/index.html" deleted file mode 100644 index 5eebc7d..0000000 --- "a/2019/09/25/\351\200\211\346\213\251\346\255\243\347\241\256\347\232\204\346\265\217\350\247\210\345\231\250/index.html" +++ /dev/null @@ -1,698 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 选择正确的浏览器 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

选择正确的浏览器 - - -

- - -
- - - - -
- - -

对于浏览器的选择,这里肯定首推chrome

-

当然无脑尬吹不可取,

-

先说说它的优点:chrome速度快和简洁是最大的优点,而且书签比起其他的浏览器方便很多,基于google账号可以实现多端同步(但是吧可能需要一点其他手段才能申请google账号)而且不会弹窗广告

-

还有就是如果学习前端的话,F12(开发者模式)也挺方便的

- -

但缺点同样不少:最大的问题就是可能占用内存较大,然后就是不支持网银,还有和Flash几乎水火不容,我都不知道为什么,有时候,我明明设置好了flash一直允许,下次打开网页又要我重新设置

-

当然chrome的一些快键键就不再多说了打开设置按钮都可以看到,什么shift+左键看新窗口,ctrl+左键开界面,估计大伙也都知道。

-

关于如何给一个网页权限

-

image

-

是在隐私设置里的的网站设置里,在这里面就可以设置给一个网站什么权限了,一般推荐大家使用先询问,不要设置禁止,当年我用chrome抢课就吃了没弹窗的亏,我还在痛骂学校的网站,后来才知道原来是我自己憨批了。。。

-

然后还有就是设置下载内容最好改一下地址,我记得默认好像是C。。

-

这里搜索引擎的话,我主推bing

-

如果想玩一下别人的界面的话可以先选择你想修改的东西,右击点检查,然后界面就会变成这样,

-

image

-

然后对着双击对着里面的内容修改就行了,当然这种东西只会在你的电脑上有效,因为这个网站的本质前端文件还是没有改变的,只是在你这显示出来的被你改变了而已。

-

还有就是一些搜索引擎的应用,想了解的话可以去知乎上或着百度搜一下,挺多教程的,这里我就不赘述了。

-

当然既然谈到chrome了就离不开插件了,当然很多优秀的插件需要在google应用商店下载,也有的在国内站点有资源可以下载使用。
我这里给大家推荐几个我比较喜欢用的插件吧
OneTab,可以一键把你的所有标签页变成一个列表,节省内存,你用的时候可以从中选择打开一个或打开多个,我挺喜欢的。
AdGuard广告拦截器挺方便的,可以去除很多广告(滑稽)简直爽的一批
还有就是万能的Tampermonkey也就是俗称油候,用他运行脚本简直爽的不要不要的,而且网络上有很多写好的脚本,简直万能。
划词翻译的话我觉得可以要也可以不要,chrome自己也带翻译,不过好像只能全文。
好了,就到这吧,不啰嗦了。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/09/30/\345\205\263\344\272\216\345\274\200\345\217\221\346\235\277/index.html" "b/2019/09/30/\345\205\263\344\272\216\345\274\200\345\217\221\346\235\277/index.html" deleted file mode 100644 index a4c1978..0000000 --- "a/2019/09/30/\345\205\263\344\272\216\345\274\200\345\217\221\346\235\277/index.html" +++ /dev/null @@ -1,707 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 关于开发板 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

关于开发板 - - -

- - -
- - - - -
- - -

为什么要学开发板

众所周知,近些年,物联网是很火的一个名词,而它的兴盛源于对信息获取的便捷性。

-

而开发板是物联网中最重要的一环,可以说开发板配合传感器负责了物联网中的俩项,获取信息和传输信息。

-

而且物联网的入门没有想象中的那么难,而且物联网可以看做和互联网是一样的,只不过是连接了传感器并将信息发到一个地方并进行处理。

-

当然,我只告诉大家怎么学物联网中开发板即底层的部分,因为其他部分基本是软件工程或计科专业才会去做的数据处理和可视化等处理。

-

好了,不废话了,步入正题。

- -

我推荐的开发板类型

如果是刚入门学习开发板的话,我比较推荐学习Arduino体系,因为Arduino体系是类C的代码编写,而且相较于其他体系是资源最多的体系,而Arduino体系里比较好用的开发板有Arduino UNO,Arduino Mega,这俩个是比较经典的开发板而且实用性比51强得多。如果想购买的话可以去淘宝或者京东购买。

-

Arduino入门教程

刚才也说过了,Arduino体系是资源最多的体系,这么多人珠玉在前,我就不献丑了,这里给大家推荐一个比较好的地方

-

http://mc.dfrobot.com.cn/thread-280817-1-1.html

-

而且这里面有购买配套套件的地方,就是有点小贵,建议大家量力而行,俩仨个人一起买一套也行。

-

这里面教程也是比较详细的,你知道LED灯 长脚是正极短脚负极,而在开发板上需要自己在代码里定义正极接口,负极就是GND接口。

-

基本就能正确的完成里面的所有示例。

-

ESP32板子(进阶部分)

如果你把上面的所有示例都完成了的话,且继续有兴趣钻研开发板,

-

那这部分就是为你精心准备的,如果上面的示例做完了,且感觉自己对开发板没啥兴趣,也可以看看这部分图一乐,不想看的话也不会有很大的影响。

-

我开始也说了,开发板负责了获取信息和传输信息,如果细心的话你们也发现了,Arduino的教程里面只涉及到了获取信息,或者控制点小东西,完全没和网络进行交互。

-

其实也不能说没有和网络进行交流,只是教程里没有体现罢了,我想你可能记得有的教程里用到了串口监视器,而串口监视器其实也是一种开发板和电脑进行通信,你也可以用电脑获取到信息然后再和外界就行信息的交流只是有点麻烦而已,有兴趣的话可以自己了解一下,或者可以私聊问我,这里就不再赘述了。

-

好了,步入这个专题的正题,ESP32板子。

-

当然ESP32有很多体系方法去编写代码,这里只提供Arduino体系的教程。

-

当然,ESP32作为开发板界的新贵,拥护他的人也不少。我在这里给大家贴出我认为很好的教程链接(真的不是我懒,真的是珠玉在前,我写很可能会误导大家)

-

Arduino IDE 配置ESP32的环境

-

https://blog.csdn.net/Naisu_kun/article/details/84958561

-

而这个教程里面,看到编写上传程序即可,批量烧录固件到模块中不用看。

-

而ESP32 连接网络(应该是手机开热点,校园网应该不行)

-

https://blog.csdn.net/solar_Lan/article/details/80049747

-

ESP32基础的应该就这些了进阶的项目建议看这里

-

https://randomnerdtutorials.com/?s=ESP32+Arduino

-

虽然是英文文档但确实不错,用翻译凑合看吧

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/10/15/python\347\210\254\350\231\253\345\210\235\347\252\245-\344\270\200/index.html" "b/2019/10/15/python\347\210\254\350\231\253\345\210\235\347\252\245-\344\270\200/index.html" deleted file mode 100644 index 2ba626c..0000000 --- "a/2019/10/15/python\347\210\254\350\231\253\345\210\235\347\252\245-\344\270\200/index.html" +++ /dev/null @@ -1,702 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - python爬虫初窥(一) | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

python爬虫初窥(一) - - -

- - -
- - - - -
- - -

python爬虫初窥(一)

前言

互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML,CSS,JS代码返回给浏览器,代码经由浏览器解析,将丰富多彩的页面呈现在我们眼前。而本教程是利用python进行爬虫的一个入入入入入入入入门级教程,小白向。

1.什么是爬虫

如果我们把互联网比作一个蜘蛛网,数据便存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,

- -

沿着网抓取自己的猎物(数据)

-

从技术层面来说,爬虫就是程序通过模拟浏览器的行为:向网站发起请求,获取网站的资源,

-

当然获取资源后还需要对数据进行提取和过滤这样才能继续使用。

-

2.爬虫的基本流程

程序发送请求———>获取响应内容————>解析内容————>保存数据

-

而这个流程里所需的知识一般有:

-

HTML,因为你要解析内容就要知道从内容中获取你想要的数据,所以这就需要你对HTML有所了解,这样你才知道你怎么去找你想要提取的内容。

-

Python,因为这篇教程是用python语言写的爬虫,所以对python的了解是必须的,如果你以前对python不了解,建议去https://learnku.com/docs/tutorial/3.7.0这个网站先了解一下python的基本语法。

-

TCP/IP,HTTP协议,这些能让你了解爬虫的逻辑而不至于一头雾水去学习爬虫,

-

还有就是细分的话解析内容的时候需要,re(正则表达式),第三方解析库beautifulsoup,json模块等。保存数据的话可能牵扯到数据库或者文件读写等内容。

-

3.http协议 请求与相应

image

-

Request 用户将自己的请求通过浏览器(client)发送给服务器(server),请求可能带自己的个人信息

-

Response:服务器接受请求,分析用户发来的请求信息,然后返回数据(返回数据可能包括图片,htmm,css,js的代码)

-

而Request分为GET/POST请求,GET一般为提交请求获取一个页面,而POST会提交数据给服务器然后获取新的页面

-

4.运行环境

我使用的是WIN10,python是3.7,IDE是PyCharm,Pycharm有社区版,而且如果学校能注册学校邮箱的话也是可以白嫖四年专业版的(咱们学校好像是可以的)。

-

5.第三方库的安装

第三方库的安装的话,我个人建议如果不太熟悉不同版本python或者虚拟环境python和pip的关系的话,可以使用pycharm添加第三方库,也很方便。

-

https://blog.csdn.net/qiannianguji01/article/details/50397046这是pycharm添加第三方库的教程。

-

因为pip方便是方便,但如果不太了解python第三方库添加日后可能会感到迷惑。

-

这次的教程就这样,下一篇开始代码的讲解

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/10/16/python\347\210\254\350\231\253\345\210\235\347\252\245\357\274\210\344\272\214\357\274\211requests\345\272\223/index.html" "b/2019/10/16/python\347\210\254\350\231\253\345\210\235\347\252\245\357\274\210\344\272\214\357\274\211requests\345\272\223/index.html" deleted file mode 100644 index 67ad95d..0000000 --- "a/2019/10/16/python\347\210\254\350\231\253\345\210\235\347\252\245\357\274\210\344\272\214\357\274\211requests\345\272\223/index.html" +++ /dev/null @@ -1,705 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - python爬虫初窥(二)requests库 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

python爬虫初窥(二)requests库 - - -

- - -
- - - - -
- - -

python爬虫初窥(二)requests库

1.前言

上一节说过了,爬虫是模拟浏览器向服务器发送请求,然后获取服务器的响应。然后再对数据进行处理,所以我们要利用requests库发送各种HTTP请求来获取网站上的数据。

2.运行环境

系统版本

我使用的是win10,不太喜欢(其实还是没钱)Mac。。。。所以这个教程就以win为例了。

- - -

python版本

-

我的是3.6版本,关于如何下载python本博客里也有教程(滑稽)

-

3.IDE

我使用的是pycharm,是JB公司的产品,简直好用的一批好吧。吹爆

-

4.安装requests库

如何利用pycharm安装第三方库可以参考上篇教程贴的连接的例子。

-

而如果你想深入了解requests库的话可以参考这个文档http://cn.python-requests.org/zh_CN/latest/,这个文档还是很顶的。

-

5.开工

废话这么多,想必大家也看烦了,现在开始编写代码吧。

-

由于本篇教程小白向,所以怎么使用pycharm写python代码也顺便教给你们吧

-

https://jingyan.baidu.com/article/09ea3ede7826d5c0afde3942.html可以参考这篇教程

-

当然,我们这里要输入的代码不是hello world

-

而是下面的代码

-
1
2
3
import requests #导入requests库
r = requests.get('https://haut-hardware-of-league.github.io/') #像目标url地址发送get请求,返回一个response对象
print(r.text) #r.text是http response的网页HTML
- -

你是不是想问就这就这就这就这就这?

-

没错,就这就这就这就这就这

-

执行完之后底部便会出现输出结果,这就完成了python爬虫的第一步,获取网页的HTML内容。

-

当然你可以给get加其他参数或者使用post请求,当然,由于这里是小白向,就不多言了,而且我在上面贴的有中文的官方文档的连接,有兴趣深究的可以去看一下,下面我就再简单介绍一个requests库好了。

-

get请求

无参数的

-

r = requests.get("https://unsplash.com")

-

这也是我们刚刚用到的,其实就是向网站发送一个get请求,返回值存到了r里,r的type是response

-

当然get请求也可以传参数

-
1
2
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
- -

上面代码向服务器发送的请求就包含了俩个参数,key1和key2,以及俩个参数的值,

-

实际上构成了这个网址http://httpbin.org/get?key1=value1&key2=value2

-

post请求

无参数的post请求和get请求一样只不过把get改为post即可

-

有参数的post请求其实和get也一样,也是把get改为post就行了

-
1
2
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
- -

post请求是用来提交数据的,即填写一堆输入框比如账号密码啥的,然后提交。

-

其他请求平常用的也不多我就不赘述了。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/10/21/python\347\210\254\350\231\253\345\210\235\347\252\245-\344\270\211/index.html" "b/2019/10/21/python\347\210\254\350\231\253\345\210\235\347\252\245-\344\270\211/index.html" deleted file mode 100644 index b064716..0000000 --- "a/2019/10/21/python\347\210\254\350\231\253\345\210\235\347\252\245-\344\270\211/index.html" +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - python爬虫初窥(三) | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

python爬虫初窥(三) - - -

- - -
- - - - -
- - -

python爬虫初窥(三)BeautifulSoup库

1.前言

13上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据,而第一篇的时候就说过了,爬虫获取到信息后下面就是对信息的处理,而我比较喜欢使用处理数据的库是用BeautifulSoup这个库。

2.运行环境

同上篇一样 且自行安装BeautifulSoup库

- -

https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/这里是这个库的中文网站。

-

3.开工

3.1 原理

Beautiful Soup将HTML文档看成一个复杂的树形结构,每个节点都是Python对象,而所有对象可以归纳为四个类型,Tag , NavigableString , BeautifulSoup , Comment

-
3.2 Tag

我们知道HTML代码可以说所有内容都是存放在标签里的,而这个库的标签也是这个意思。

-

我们找个例子来了解一下吧。

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc, 'lxml') #声明BeautifulSoup对象
find = soup.find('p') #使用find方法查到第一个p标签
print("find's return type is ", type(find)) #输出返回值类型
print("find's content is", find) #输出find获取的值
print("find's Tag Name is ", find.name) #输出标签的名字
print("find's Attribute(class) is ", find['class']) #输出标签的class属性值
- -

image

-

可以看到,你查到的是第一个P标签。

-

而找到的标签里有 .name和.attribute类型,.attribute是返回那个class的类型

-
3.3 NavigableString

这个就是标签中的文本内容但是不含标签,你可以试一下例子

-

再上面的例子中 最后一行加入print(‘NavigableString is:’, find.string) 就可以得到下面的输出

-

image

-
3.4 BeautifulSoup

这个对象表示一个文档的全部内容,支持遍历文档树和搜索

-
3.5 Comment

这个对象是HTML中的注释

-
1
2
3
4
5
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup)
comment = soup.b.string
type(comment)
# <class 'bs4.element.Comment'> //应该输出内容
- -
3.6 BeautifulSoup的遍历方法

一般常用的有子节点,父节点,及标签名的方式遍历

-

关于子节点和父节点的定义可参考这篇 https://www.w3school.com.cn/htmldom/dom_nodes.asp

-
3.6.1 节点和标签名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
soup.head #查找head标签
soup.p #查找第一个p标签

#对标签的直接子节点进行循环
for child in title_tag.children:
print(child)

soup.parent #父节点

# 所有父节点
for parent in link.parents:
if parent is None:
print(parent)
else:
print(parent.name)

# 兄弟节点
sibling_soup.b.next_sibling #后面的兄弟节点
sibling_soup.c.previous_sibling #前面的兄弟节点

#所有兄弟节点
for sibling in soup.a.next_siblings:
print(repr(sibling))

for sibling in soup.find(id="link3").previous_siblings:
print(repr(sibling))
- -
3.6.2 搜索文档树

常用的方式是find()和find_all(),不常用的我就不多提了,想看的可以去官方文档查一下

-

可以通过tag的name,即名字为name的tag

-

attr参数,就是tag的属性,即class

-

string参数,搜索文档中字符串的内容

-

recursive 参数: 调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点。如果只想搜索tag的直接子节点,可以使用参数 recursive=False 。可以看一下示例

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
soup.find_all("title")
# [<title>The Dormouse's story</title>]
#
soup.find_all("p", "title")
# [<p class="title"><b>The Dormouse's story</b></p>]
#
soup.find_all("a")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
#
soup.find_all(id="link2")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
#
import re
soup.find(string=re.compile("sisters"))
# u'Once upon a time there were three little sisters; and their names were\n'
- -

现在最基本的python爬虫需要用的东西都已经介绍完了,下面来进行下实战吧

-

实战

这次就爬个天气预报的信息好了

-
1
2
3
4
5
6
7
8
9
10
11
import requests

url = 'http://www.weather.com.cn/weather/101230101.shtml'

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/69.0.3486.0 Safari/537.36'} # 模拟一个报头,将爬虫变为浏览器
response = requests.get(url=url, headers=header)
response.encoding = 'utf-8' # 指定返回信息的编码格式

print(response.text)
- -

然后输出内容应该是一大堆内容,这里就不贴图了。

-

然后现在我们找到我们需要爬下来的内容,首先打开开发者模式可以看到右边一坨花花绿绿的代码,不要慌张,我教你怎么正确寻找你要的东西。

-

以这个页面为例我们想要的肯定是这一部分内容

-

image

-

你可以对着他们点击右键然后有个叫检查或者审查元素的按钮,这样你就可以看见右边的的代码会跳到一个地方,然后根据那个地方你可以找他的父节点或者其他的,可以看见他的HTML标签和class然后就可以用BS库进行提取了。

-

-

就比如这个,这个单个的标签是 li class为 sky啥啥啥的的,而且可以看到他的父标签是ul class是

-

t clearfix

-

-

然后我们验证一下,父标签果然就是这一列。

-

然后我们就开始用BS库进行解析吧

-
1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
from bs4 import BeautifulSoup
url = 'http://www.weather.com.cn/weather/101230101.shtml'

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/69.0.3486.0 Safari/537.36'}

response = requests.get(url=url, headers=header)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'lxml')
weather = soup.find('ul', class_='t clearfix') # 定位 HTML标签为UL 类型为t clearfix的内容
print(weather.text)
- -

这个代码里面 weather就是我们想要提取出来的内容了。

-

当然你也可以通过正则表达式来获取更详细的信息。

-

然后你就可以对这些数据进行处理,比如文件的存贮,发送到其他地方,这都随你便了。

-

当然还有就是我们这里并没有应对反爬虫的机制,也没有涉及到发送post请求的爬虫,我就不赘述了,有兴趣的

-

关于python爬虫的教程就到这把,如果大家有兴趣的话可以去试点更多有意思的,比如爬图片然后存贮到其他地方,我这里就不再赘述了。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/11/06/\345\256\211\350\243\205python/index.html" "b/2019/11/06/\345\256\211\350\243\205python/index.html" deleted file mode 100644 index 128c1f8..0000000 --- "a/2019/11/06/\345\256\211\350\243\205python/index.html" +++ /dev/null @@ -1,698 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - win10下安装python | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

win10下安装python - - -

- - -
- - - - -
- - -

1.自己的碎碎念

python现在作为很火的语言也越来越受大家欢迎,对有经验的程序猿还好,但对新手程序猿来说(尤其是选择恐惧症)来说,安装python恐怕是一件难事,今天就分享给大家我安装python的方法

2.环境需求

win10

-

python版本:python3.7

- -

3.下载步骤

当然这里还有一个推荐方法就是直接利用微软自带的应用商店安装一键安装,也很方便。不过我个人还是比较喜欢这种手动下载的方法
1.首先要到python官网下载python,需要下载对应的版本(我觉得都9102年了应该很少有32位的电脑了吧)不过以防万一,大家还是去搜一下怎么去查自己系统多少位吧,我这里就不再赘述了

-

https://www.python.org/downloads/windows/ 这里是python的官方下载网址,估计不少初学者看见这个页面头都大了(就像我一样,不知道下载哪个)

-

首先你先选择你要安装的版本,

-

image

-

我们这里安装3.7.4版本,所以点击一下即可

-

进入页面后直接拉到最后有列表如下

-

image

-

(Windows x86-64 executable installer)我们点一下这个链接,就可以下载了

-

4.安装步骤

下载完成后双击执行下载的exe程序,进入安装界面

-

image

-

请选择 Custo那一串(汉语意思为自定义安装,为啥不让他自动安装心里应该清楚)并且记得把该页面最下面俩个方框的对勾打上

-

然后直接点next进入这个页面

-

image

-

这里你就可以自定义python的安装路径了,然后直接install即可

-

5.验证安装

image 安装完成后出现这个界面

-

然后再进入cmd 输入python -V

-

示例如下
如果显示python的版本则安装成功

-

则安装成功

-

开始愉快的使用python吧

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/11/06/\350\256\260\345\275\225\344\270\200\346\254\241\345\215\232\345\256\242\350\277\201\347\247\273/index.html" "b/2019/11/06/\350\256\260\345\275\225\344\270\200\346\254\241\345\215\232\345\256\242\350\277\201\347\247\273/index.html" deleted file mode 100644 index fad4acf..0000000 --- "a/2019/11/06/\350\256\260\345\275\225\344\270\200\346\254\241\345\215\232\345\256\242\350\277\201\347\247\273/index.html" +++ /dev/null @@ -1,682 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 记录一次博客迁移 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

记录一次博客迁移 - - -

- - -
- - - - -
- - -

记录一下这次的博客迁移

因为以前的懒和图方便,把图床和博客的服务器都放在了github上,白嫖别人的资源。

但事实证明了白嫖不是永久的

image

在前几天就得到了惨痛的教训,因为图片放在github上,所以全部图片加载不出来,这也导致很多博客本来简单易懂,这一来,变得难的离谱,本来我还想等着等着他恢复凑合着用吧。

但当我一天想更新一篇文章的时候!!!!!!

- - - - -

我发现文章也没法更新了,而且github仓库里可以更新,但我的博客却不会更新,简直抓狂,无奈,只能选择把所有服务都部署在我自己的服务器上,这样才能不受人掣肘。

-

当然,因为博客也刚起步,整个迁移的工作量也不大,就是把所有图片的引用路径和以前在github部署的配置文件都改一下,但还是要引以为戒,尽量在自己可以掌控的范围内做事情。

-

冲冲冲!!!

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/11/19/git\345\210\235\347\252\245/index.html" "b/2019/11/19/git\345\210\235\347\252\245/index.html" deleted file mode 100644 index 30207d9..0000000 --- "a/2019/11/19/git\345\210\235\347\252\245/index.html" +++ /dev/null @@ -1,716 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Git初窥 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

Git初窥 - - -

- - -
- - - - -
- - -

初衷

因为学校留作业要交Github上,但又很厌烦在页面上点来点去的方法,所以写下命令行git提交文件的方法供大家使用,我个人认为如果会用的话是能提升工作效率的。

安装git

我假设你是在Windows系统上

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

- - - -

image

-

安装完成了,请在命令行输入俩行命令

-
1
2
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
- -

其中把“Your name”更改为你的github名字

-

email更改为你的github注册的邮箱即可。

-

然后以我的github中的仓库为例吧

-

在你想要存放文件的地方打开git bash或者cmd命令行

-

然后输入

-

git clone +“你的仓库的地址”

-

我的就是

-

git clone https://github.com/hhhhhpc/LabExercises_02

-

然后等待下载你会发现有一个文件夹了,

-

然后使用cd命令进入这个文件夹

-

image

-

然后再文件夹里创建一个新的文件

-

image

-

当然,你可以在这个新的文件夹里放很多其他的东西。

-

然后在命令行里输入 git add .

-

这条命令是为了告诉git你添加了什么文件,用.这个通配符是让他把更改的文件都算上。

-

如果不报错的话请输入git commit -m “xxxx”

-

这是为了告诉git你这次提交更改了什么

-

就拿我这次来示例,我是创建了个test文件,就可以写

-

git commit -m “test”

-

如果这俩步里面报错了的话请不要慌张,一般你把报错信息复制去搜索一下都能解决问题。

-

然后这两步做完在命令行里输入

-

git push即可,这样你在本地文件夹里更改的操作就能更新在你的github上。

-

我个人是比较推荐这种方式的,毕竟点来点去的方法工作效率是有点低的。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2019/12/15/test/index.html b/2019/12/15/test/index.html deleted file mode 100644 index 65e9647..0000000 --- a/2019/12/15/test/index.html +++ /dev/null @@ -1,663 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - test | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

test - - -

- - -
- - - - -
- - -

dararadafaga8913141
upload successful

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/12/15/\345\256\211\350\243\205python/index.html" "b/2019/12/15/\345\256\211\350\243\205python/index.html" deleted file mode 100644 index 02df5b5..0000000 --- "a/2019/12/15/\345\256\211\350\243\205python/index.html" +++ /dev/null @@ -1,710 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - win10下安装python | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

win10下安装python - - -

- - -
- - - - -
- - -

1.自己的碎碎念

python现在作为很火的语言也越来越受大家欢迎,对有经验的程序猿还好,但对新手程序猿来说(尤其是选择恐惧症)来说,安装python恐怕是一件难事,今天就分享给大家我安装python的方法

2.环境需求

win10

-

python版本:python3.7

- -

3.下载步骤

当然这里还有一个推荐方法就是直接利用微软自带的应用商店安装一键安装,也很方便。不过我个人还是比较喜欢这种手动下载的方法
1.首先要到python官网下载python,需要下载对应的版本(我觉得都9102年了应该很少有32位的电脑了吧)不过以防万一,大家还是去搜一下怎么去查自己系统多少位吧,我这里就不再赘述了

-

https://www.python.org/downloads/windows/ 这里是python的官方下载网址,估计不少初学者看见这个页面头都大了(就像我一样,不知道下载哪个)

-

首先你先选择你要安装的版本,

-

image

-

我们这里安装3.7.4版本,所以点击一下即可

-

进入页面后直接拉到最后有列表如下

-

image

-

(Windows x86-64 executable installer)我们点一下这个链接,就可以下载了

-

4.安装步骤

下载完成后双击执行下载的exe程序,进入安装界面

-

image

-

请选择 Custo那一串(汉语意思为自定义安装,为啥不让他自动安装心里应该清楚)并且记得把该页面最下面俩个方框的对勾打上

-

然后直接点next进入这个页面

-

image

-

这里你就可以自定义python的安装路径了,然后直接install即可

-

5.验证安装

image 安装完成后出现这个界面

-

然后再进入cmd 输入python -V

-

示例如下
如果显示python的版本则安装成功

-

则安装成功

-

开始愉快的使用python吧

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2019/12/16/Untitled13/index.html b/2019/12/16/Untitled13/index.html deleted file mode 100644 index 62ea3c5..0000000 --- a/2019/12/16/Untitled13/index.html +++ /dev/null @@ -1,657 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Untitled13 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

Untitled13 - - -

- - -
- - - - -
- - -

eara

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2019/12/19/Linux-on-Windows/index.html b/2019/12/19/Linux-on-Windows/index.html deleted file mode 100644 index ee8a653..0000000 --- a/2019/12/19/Linux-on-Windows/index.html +++ /dev/null @@ -1,729 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Linux on Windows | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

Linux on Windows - - -

- - -
- - - - -
- - -

前言

毋庸置疑的是,Windows是家用平台的巨头,Linux是服务器端的主流系统,而在实际生产中时常遇到需要使用二者的情况,而本篇文章正是讨论如何将二者安装于同一硬件基础上。其中包括既传统的双系统,虚拟机系统,又涉及Windows 10的新特性,WSL系统。

双系统

基于硬件的双系统,此处概念的Linux完全独立于windows。优点是二者独立,互不干扰,且系统完整,不会出现诡异的问题,系统资源也能得到完整利用。

- -

安装双系统只需要准备烧录好镜像的U盘(引导程序及镜像),并在BIOS里以U盘引导启动并按照指引完成安装即可。

-

当然,此种方案的缺点也十分明显,由于两个系统相互独立,因此要想进行切换,就必须进行硬件层次上的重启,不仅耗时而且资料会得到损失。

-

虚拟机

虚拟机的运行需要硬件的支持,因为某些CPU并不支持虚拟化。常见的Windows虚拟机包括但不仅限于virtualbox,VMware。。。此类虚拟机优势即是两者相对独立,并且可以随时进行切换,系统选择灵活,资源调控便捷。当然,优点多多,缺点也有,那就是资源占用问题,由于虚拟出了一个操作系统,因此,资源占用十分严重,而且常用虚拟软件的授权费挺贵哈。

-

安装流程也全称是GUI界面,不过需要注意资源的分配,虚拟机和主机的配置要恰到好处,避免虚拟机或主机发生卡顿,当然,既然是虚拟技术,就必然有性能损耗。

-

巨硬WSL

巨硬这个可以说是非常硬了,WSL是“Windows Subsystem for Linux”的简称,从名称可以看出来WSL被归类为Windows的子系统,是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,最早在Windows 10的1607中出现并延续下来。当然,这个子系统,非常干净,除去内核的文本Ubuntu 16.04LTS只有195MB大小。当然,这样的Linux是不自带编译器的。

-

实现原理

-

简的来说,便是LX会话器担任Windows与Linux交互的媒介,并通络内核模式与运行在用户模式下的Pico进行交互,Pico进程则负责模拟并运行相应的二进制文件,大部分情况下对Linux的操作会被映射为对Windows内核的调用。
参考

-

安装

1,Windows版本高于1607并在设置下的更新与安全中打开开发者人员模式。

-

2,接着在PowerShell下键入
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux以打开Windows子系统功能。

-

同样,也可以在控制面板下手动打开“适用于Windows的Linux子系统”。

-

-

3,重启之后在Microsoft Store下选择想要安装的Linux发行版,等待安装流程结束,设置新用户名及密码。

-

后期配置

系统安装之后,因为Ubuntu的默认root账户密码是每次开机随机生成的,可以使用
sudo passwd root
来修改root账户密码。

-

此外,由于众所周知的原因,Ubuntu的apt包管理服务器设在国外,因此需要修改为国内镜像源。

-
1
2
# 备份原文件
cp /etc/apt/sources.list /etc/apt/sources.list_backup
- -
1
2
# 修改源配置文件
vim /etc/apt/sources.list
- -

修改内容为(当然可以选用其它软件源):

-
1
2
3
4
5
6
7
8
9
10
11
12
13
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
- -

之后使用

-
1
apt-get update
- -

更新包索引来生效。

-

当然,由于与Windows共用一套硬件,而Windows下的服务占用了22端口,因此需要更换Linux的SSH登陆端口。

-

修改配置文件之前使用

-
1
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
- -

来备份原配置文件。此处通过修改/etc/shh/sshd_config来实现对SSH的配置。

-
1
vim /etc/ssh/sshd_config
- -

进入编辑界面,接着修改port 为2333(或者其他不与Windows产生冲突的端口),将ListenAddress前的注释去掉以修改SSH监听地址。接下来按照自己的需求修改对应值,例如可将UsePrivilegeSeparation值修改为no,PasswordAuthentication值修改为yes,PermitRootLogin修改为yes。具体依靠个人情况配置,这里贴一篇博文

-

安装配置之后,重启SSH服务。接着以IP为127.0.0.1或者主机localhost,端口号2333进行SSH连接。例如

-
1
ssh root@localhost -p 2333
- -

连接到本地SSH服务,倘若需要在主机以外访问SSH,则需配置防火墙。

-

安装基本组件后即可依据个人环境要求配置Linux,倘若报错,可能是因为这个精简的Linux缺少了依赖库,下载安装即可。

-

*

-
1
2
3
#倘若遇到Cannot load host key则可以考虑重新生成公私匙。
rm /etc/ssh/ssh*key
dpkg-reconfigure openssh-serve
- -

-

分析

此种运行Linux的方式,占用系统资源少,调用方便,但由于是Windows子系统,因此存在一定的兼容问题,但是一般生产生活完全够用。

-

资源

WSL提供了两种可被Linux访问的文件系统:VolFs和DriveFs。前者在各方面都非常类似于常规的Linux文件系统,包括权限支持、symbolic链接、大小写敏感,以及Windows文件系统中不允许使用的字符。后者提供了与Windows相互访问的方式,使得用户能够在Linux中看到所有Windows卷。

-

因此,Linux与Windows的资源是允许相互访问的,Linux下的/mnt挂载的有Windows的盘符,当然也有全部文件。

-


Windows下的Linux文件则存放在C:\Users[用户名]\AppData\Local\Packages[对应包名],例如我可以通过C:\Users\wrzto\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc来访问Linux资源。

-

当然,值得注意的是,但二者的资源处于相对竞争状态时,Windows优先获取资源。

-

资料

Linux修改软件源帮助

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/12/19/Windows\345\256\211\350\243\205\346\226\207\344\273\266\345\210\235\346\216\242/index.html" "b/2019/12/19/Windows\345\256\211\350\243\205\346\226\207\344\273\266\345\210\235\346\216\242/index.html" deleted file mode 100644 index c4bfd37..0000000 --- "a/2019/12/19/Windows\345\256\211\350\243\205\346\226\207\344\273\266\345\210\235\346\216\242/index.html" +++ /dev/null @@ -1,700 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Windows安装文件初探 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

Windows安装文件初探 - - -

- - -
- - - - -
- - -

首先声明,我只是感兴趣于iso内的安装文件,并无他意,这篇文章也仅仅代表我个人的观点与立场。一个有意思的地方是,安装文件里的文本相当一部分编码采用的是扩展集UTF-16而非UTF-8或GBK。

概览

我的系统是政府精简版1709,使用rufus烧录,大体上精简了一部分次要功能。
ZgubU1.png

我的U盘位于/run/media/raincorn/WIN10_CMGE/,该目录下有5个文件夹以及4个文件。

- - -

文件

注意,下文若未单独指明,文本文件内容编码则为UTF-8。

-

autorun.inf

文件内容:

-
1
2
3
4
5
6
7
[AutoRun.Amd64]
open=setup.exe
icon=setup.exe,0

[AutoRun]
open=sources\SetupError.exe x64
icon=sources\SetupError.exe,0
- -

inf文件,即为windows操作系统下用来描述设备或文件等信息的文件。此处的autorun.info,顾名思义,是针对X86 电脑的自动运行标识符。文件内容反馈出的含义为运行setup.exe,并可用于指定盘符图标。

-

bootmgr

传统BIOS模式下的引导文件。

-

传统BIOS+MBR启动流程为:

-
    -
  • PC上电,主板芯片组加电自检(POST)。
  • -
  • 自检通过则优先从设置的默认设备启动。
  • -
  • 读取位于硬盘第一扇区的MBR记录,并搜寻活动分区。
  • -
  • 在根目录下读取bootmgr(启动管理器),此时计算机控制权交由bootmgr。
  • -
  • bootmgr搜索boot目录下的BCD(启动配置数据),若存在多个启动选项则会交由用户选择,反之直接启动。
  • -
  • bootmgr继续读取并运行Windows\System32\winload.exe。
  • -
  • winload.exe则完成内核读取与其余启动过程。
  • -
-

简洁版便是:BIOS-POST-MBR-Bootmgr-BCD-Winload.exe-内核

-

bootmgr.efi

UEFI启动的引导文件。

-

经典UEFI+GPT启动流程为:

-
    -
  • PC加电,UEFI 读取位于 ESP 分区 EFI/Microsoft/Boot/目录下的 bootmgfw.efi 。
  • -
  • 运行bootmgr.efi并将计算机控制权交于 bootmgfw 。
  • -
  • bootmgfw搜索并读取EFI/Microsoft/Boot/BCD,若有多个启动选项则交由用户选择,反之启动默认系统。
  • -
  • 默认启动 Windows之后,bootmgrfw 搜索并读取 Windows 分区 Windows\System32 目录下的 winload.efi 程序。
  • -
  • winload.efi完成后续内核加载与启动流程。
  • -
-

二者区别:ZgubU1.png

-

setup.exe

用于正常windows环境或者预安装环境下启动安装程序的应用文件。

-

文件夹内容

boot

BIOS启动流程所需的文件。

-

EFI

UEFI启动流程所需的文件。

-

sources

Windowa安装文件所在位置,一般而言包含install.wim和预安装环境。

-

support

包含帮助信息以及系统工具。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/12/19/\344\273\216iCloud\350\277\201\347\247\273\347\205\247\347\211\207\345\210\260Google-Photos/index.html" "b/2019/12/19/\344\273\216iCloud\350\277\201\347\247\273\347\205\247\347\211\207\345\210\260Google-Photos/index.html" deleted file mode 100644 index 5352d83..0000000 --- "a/2019/12/19/\344\273\216iCloud\350\277\201\347\247\273\347\205\247\347\211\207\345\210\260Google-Photos/index.html" +++ /dev/null @@ -1,683 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 从iCloud迁移照片到Google Photos | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

从iCloud迁移照片到Google Photos - - -

- - -
- - - - -
- - -

缘由&要求

Google大法好,Photos无限容量备份照片!

当然,需要一台位于境外的VPS,从iCloud上拉资源,再上传到Google Drive。

从iCloud上下载

由于Apple没有开放iCloud的API,于是关于iCloud下载的第三方程序少之又少。于是我找到了这个icloudpd

- - -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#以Ubuntu/Debian系统为例
#下载并安装pip,若为安装unzip,则需使用apt-get install unzip。
root@Raincorn:/icloud# wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
--2019-01-30 20:58:55-- https://bootstrap.pypa.io/get-pip.py
Resolving bootstrap.pypa.io (bootstrap.pypa.io)... 151.101.0.175, 151.101.64.175, 151.101.128.175, ...
Connecting to bootstrap.pypa.io (bootstrap.pypa.io)|151.101.0.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1700321 (1.6M) [text/x-python]
Saving to: ‘get-pip.py’

get-pip.py 100%[===========================>] 1.62M --.-KB/s in 0.02s

2019-01-30 20:58:55 (79.4 MB/s) - ‘get-pip.py’ saved [1700321/1700321]

root@Raincorn:/icloud# python get-pip.py
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Collecting pip
Downloading
Successfully installed pip-19.0.1 setuptools-40.7.1 wheel-0.32.3
#由于已经由pip收录,可以使用pip install icloudpd来安装icloudpd。
- -

使用icloud photos(注意,photos为你要保存照片的目录,可自定义为其他。)
接着会要求输入iCloud账号密码,验证完成后就会开始下载,我用了51分20秒把2324张照片下载了下来。但是为什么速度不理想,原因很大程度上是因为苹果的iCloud服务器由云上贵州接管,服务器在国内,晚上又是高峰时段。

-

上传到Google Drive

Google作为行业巨头,全力推行开源事业,有关Drive的有关程序网上比比皆是,我这里介绍我正在使用的一个名为rclone的管理程序。

-

rclone的安装

下载rclone

1
2
3
4
5
6
7
#按照官方Docs操作就好。
#首先下载并解压rclone
root@Raincorn:~# wget https://downloads.rclone.org/rclone-current-linux-amd64.zip

root@Raincorn:~# unzip rclone-current-linux-amd64.zip

root@Raincorn:~# cd rclone-*linux-amd64
- -

复制赋权

1
2
3
4
5
6
cp rclone /usr/bin/

chown root:root /usr/bin/rclone

chmod 755 /usr/bin/rclone
#至于为什么要有这一步,可以参考之前那篇关于[环境变量](https://raincorn.top/2018/08/29/%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/)的文章,间的来说,就是为了在用rclone时能够找到对应的程序。
- -

安装帮助页面

1
2
3
4
5
mkdir -p /usr/local/share/man/man1

cp rclone.1 /usr/local/share/man/man1/

mandb
- -

配置

键入rclone config即可进入配置页面。

-

这里是配置实例,基本上有些英语基础就没问题。也可以参考https://rclone.org/drive/ 给出的实例,或者https://www.chenweiliang.com/cwl-694.html 的例子。

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
root@Raincorn:/rclone# rclone config
2019/01/30 21:25:58 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n(创建新的Drive类型)
name> Google(自定义配置的名称)
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / A stackable unification remote, which can appear to merge the contents of several remotes
\ "union"
2 / Alias for a existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Dropbox
\ "dropbox"
9 / Encrypt/Decrypt a remote
\ "crypt"
10 / FTP Connection
\ "ftp"
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
13 / Hubic
\ "hubic"
14 / JottaCloud
\ "jottacloud"

Storage> 12(选择类型,会随着版本变动而有所变化。)
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Google Application Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
\ "drive"
2 / Read-only access to file metadata and file contents.
\ "drive.readonly"
/ Access to files created by rclone only.
3 | These are visible in the drive website.
| File authorization is revoked when the user deauthorizes the app.
\ "drive.file"
/ Allows read and write access to the Application Data folder.
4 | This is not visible in the drive website.
\ "drive.appfolder"
/ Allows read-only access to file metadata but
5 | does not allow any access to read or download file content.
\ "drive.metadata.readonly"
scope> 1(即允许rclone获得你全部的Drive访问权限。)
ID of the root folder
Leave blank normally.
Fill in to access "Computers" folders. (see docs).
Enter a string value. Press Enter for the default ("").
root_folder_id>
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default ("").
service_account_file>
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n(不进行高级配置。)
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> n
If your browser doesn't open automatically go to the following link: https://accounts.google.com/(你需要登陆的链接。)
Enter verification code> 4/4gBaYe2_(你在网页中获得erification code)
Configure this as a team drive?
y) Yes
n) No
y/n> n
--------------------
[Google]
type = drive
scope = drive
token = {"access_token":"ya29.GluhBkLo5l7zLGZFmeHEbBSWFxJD8HaiAqpDLmD7BPPFUGcpXrgnnd8pWoahZJvgyv9Qk5yc7TxRLRmxKt31N8mmjP4bbvr2sSb_E8ZbpRNetFtglc2SrjMRFW6z","token_type":"Bearer","refresh_token":"1/jmLzUeXGBUqMVHV_k4x8F6UhPXkbMW-U-zJpnGnnv6I","expiry":"2019-01-30T22:28:52.644486809+08:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
Google drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
- -

开始上传Google Drive

(本地文件夹以origin,Drive文件夹以backup为例)
在web端新建一个名为backup的文件夹,新建完成后使用

-
1
2
3
4
5
root@Raincorn:/rclone# rclone lsd Google:
-1 2019-01-30 21:32:54 -1 backup
#这里的“Google”即为你所创建的配置名称,backup即为你刚刚新建的那个用来备份的文件夹。
root@Raincorn:/rclone# rclone copy /root/origin Google:backup
#/root/origin为源文件夹,Google:backup为配置名称+远程文件夹。
- -

挂到Screen中,第二天即可迁移完成。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/12/19/\345\246\202\344\275\225\350\276\223\345\207\272Hello-World\357\274\201/index.html" "b/2019/12/19/\345\246\202\344\275\225\350\276\223\345\207\272Hello-World\357\274\201/index.html" deleted file mode 100644 index a05a0a6..0000000 --- "a/2019/12/19/\345\246\202\344\275\225\350\276\223\345\207\272Hello-World\357\274\201/index.html" +++ /dev/null @@ -1,796 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 如何输出Hello World! | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

如何输出Hello World! - - -

- - -
- - - - -
- - -

One issue!

据说在学习一门语言的时候输出Hello World!会带来好运。

哪怎么输出Hello World呢?难道就是像下面这样:

1
2
3
4
5
6
#include<stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
- - - -

是的,我们就是要输出上述源代码。

-

输出源码

如果我们直接运行

-
1
2
3
4
5
6
7
8
9
10
int main()
{
printf("#include<stdio.h>
int main()
{
printf("Hello World!");
return 0;
}");
return 0;
}
- -

不出意外地报错,由于各种语言存在保留字以及需要使用无法输入的字符,因此需要对部分地方进行转义。u0dVJS.jpg
修改后的源码如下:

-
1
2
3
4
5
int main()
{
printf("#include <stdio.h>\nint main()\n{\nprintf(\"Hello world\\n\");\nreturn 0;\n}");
return 0;
}
- -

此处,我们对换行符通过\n进行了转义,还对”以及\进行了转义。

-

AWSL

u0ySt1.jpg
阿伟死了!这道题与上述问题相似,不过又有一个坑。
u0yxKS.jpg
我最开始的源码是这样的:

-
1
2
3
4
5
int main()
{
printf("#include <bits/stdc++.h>\nusing namespace std;\n\nint main()\n{\n\t//输出 Hello World !\n\tcout<<\"Hello World !\"<<endl;\n\n\treturn 0;\n}");
return 0;
}
- -

我使用了\n和\t来对上述源码进行转义,提交之后报格式错误。由于有了前几题的心酸历程,我去仔细看了下格式,发现缩进只有四个空格。而我使用Mingw-W64编译出来的代码中制表符占据了八个空格的位置,不同编译器以及编辑器的差异造成了上述问题。

-

修改后的源码如下:

-
1
2
3
4
5
int main()
{
printf("#include <bits/stdc++.h>\nusing namespace std;\n\nint main()\n{\n //输出 Hello World !\n cout<<\"Hello World !\"<<endl;\n\n return 0;\n}");
return 0;
}
- -

在使用Tab还是Space的问题上的讨论似乎成为了与Vim/Emacs哪个更好相似的问题。

-

转义表

以下即为C语言常用转义字符表格:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT)009
\v垂直制表(VT)011
'单引号039
"双引号034
\\反斜杠092
-

当然C语言也提供一种数字转义方法,如下:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
八进制转义十六进制转义名称/意义
\7\x07响铃
\10\x08退格
\12\x0A换行
\14\x0C换页
\40\x20空格
\60\x300
\101\x41A
\141x61a
- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/12/19/\345\256\211\350\243\205python/index.html" "b/2019/12/19/\345\256\211\350\243\205python/index.html" deleted file mode 100644 index 0a4d11c..0000000 --- "a/2019/12/19/\345\256\211\350\243\205python/index.html" +++ /dev/null @@ -1,705 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - win10下安装Python | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

win10下安装Python - - -

- - -
- - - - -
- - -
-

我来砸场了!Windows在1903更新中实现了Python开箱即用的体验,你只需要在cmd中输入python3,系统便会引导你去Store下载Python依赖包。QqGiQS.jpg

-

1.自己的碎碎念

python现在作为很火的语言也越来越受大家欢迎,对有经验的程序猿还好,但对新手程序猿来说(尤其是选择恐惧症)来说,安装python恐怕是一件难事,今天就分享给大家我安装python的方法

2.环境需求

win10

-

python版本:python3.7

- -

3.下载步骤

当然这里还有一个推荐方法就是直接利用微软自带的应用商店安装一键安装,也很方便。不过我个人还是比较喜欢这种手动下载的方法
1.首先要到python官网下载python,需要下载对应的版本(我觉得都9102年了应该很少有32位的电脑了吧)不过以防万一,大家还是去搜一下怎么去查自己系统多少位吧,我这里就不再赘述了

-

https://www.python.org/downloads/windows/ 这里是python的官方下载网址,估计不少初学者看见这个页面头都大了(就像我一样,不知道下载哪个)

-

首先你先选择你要安装的版本,

-

image

-

我们这里安装3.7.4版本,所以点击一下即可

-

进入页面后直接拉到最后有列表如下

-

image

-

(Windows x86-64 executable installer)我们点一下这个链接,就可以下载了

-

4.安装步骤

下载完成后双击执行下载的exe程序,进入安装界面

-

image

-

请选择 Custo那一串(汉语意思为自定义安装,为啥不让他自动安装心里应该清楚)并且记得把该页面最下面俩个方框的对勾打上

-

然后直接点next进入这个页面

-

image

-

这里你就可以自定义python的安装路径了,然后直接install即可

-

5.验证安装

image 安装完成后出现这个界面

-

然后再进入cmd 输入python -V

-

示例如下
如果显示python的版本则安装成功

-

则安装成功

-

开始愉快的使用python吧

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2019/12/21/Windows\350\223\235\345\261\217\345\210\206\346\236\220/index.html" "b/2019/12/21/Windows\350\223\235\345\261\217\345\210\206\346\236\220/index.html" deleted file mode 100644 index e03101f..0000000 --- "a/2019/12/21/Windows\350\223\235\345\261\217\345\210\206\346\236\220/index.html" +++ /dev/null @@ -1,757 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Windows蓝屏分析 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

Windows蓝屏分析 - - -

- - -
- - - - -
- - -

Windows10蓝屏

-

蓝屏死机(英语:Blue Screen of Death,缩写为:BSoD)指的是微软Windows 操作系统在无法从一个系统错误中恢复过来时所显示的屏幕图像。

-

先抛出来解决方案:

    -
  • 卸载最近一次的Windows更新,并尝试加载最近一次正常启动时的注册表
  • -
  • 卸载最近安装的驱动程序或者尝试升级/降级该驱动
  • -
  • 移除最近添加的硬件设备
  • -
  • 将QQ更换为Windows Store的UWP版本并移除所有第三方杀毒软件
  • -
  • 运行sfc /scannow以检查系统镜像
  • -
  • 重装系统
  • -
  • 重买电脑
  • -
- - - -

若无法正常启动,请尝试进入安全模式或者PE进行操作。

-

所以定期备份是个很好的习惯!本文中需要额外下载的示例或者资料,均可与此处下载。

-
-

背景

首先需要说明的是,Windows蓝屏是一种系统保护机制(可以把Windows蓝屏比喻成感冒/发烧),是Windows为保护硬件及数据的策略,当发生诸如内存非法访问,堆栈溢出等错误而Windows无法处理时,Windows将主动崩溃。虽然蓝屏的原因有很多,但其一定发生在内核层(Ring 0)。

-
-

crash type:
0x01: High IRQL fault (Kernel-mode)
0x02: Buffer overflow
0x03: Code overwrite
0x04: Stack trash
0x05: High IRQL fault (User-mode)
0x06: Stack overflow
0x07: Hardcoded breakpoint
0x08: Double Free

-
-

以上是NotMyFault列举的常见Windows崩溃原因。

-

崩溃分析

当Windows崩溃时,显示器会切换至低分辨率下的VGA显示模式,显示蓝色背景并给出停止代码与建议,当Dump文件转存完毕后,系统将自动进行重启。

-

蓝屏代码

我们可以根据Windows蓝屏时候的错误代码进行初步判断,但无法将错误定位到具体驱动或者进程。蓝屏恢复方法可以参考微软官方指引,具体错误代码可以查阅此网站或者查阅前文资料中的Code Lists。至于我为什么不贴中文译版,因为翻译实在太烂了。

-

Dump分析

很不幸的是,很多时候蓝屏代码并不能帮助你准确定位问题,以便解决具体的进程或者驱动。这个时候我们需要分析Windows的内存崩溃转储文件来得出具体结论,这里的内核Dump文件即为发生崩溃时内存的部分/完整内容拷贝,具体步骤如下文所述。

-

创建转储文件

在Control Panel\System and Security\System的Advanced system settings选项,Advanced选项卡,Startup and Recovery选项下便可设置。
Startup and Recovery
拉开Write debugging information选项即可查看转储内存类型:None/Small/Kernel/Complete/Automatic/Active。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
类型含义
None不创建转储日志
Small仅保留基本信息,引起崩溃的线程内核栈与关联内存栈
Kernel保留当前运行时的进程列表,堆栈以及驱动程序列表
Complete记录Windows崩溃时能够访问的所有内存
Automatic类似Kernel,但在Paging file大小存在差异
Active类似Complete,但初步筛选故障Pages
-

下载工具

WinDbg

目前微软发布WinDbg主要借助Windows SDK,安装可以参考文档,或者使用我提供的离线包WinDbg测试页面

-

WinDbg Preview

预览版为UWP应用,可直接于Microsoft Store直接下载。Store详情页
WinDbg Preview测试页面
Tips:如果你需要参考其它指南的话,建议安装前者,网络上大多资料均介绍此版本,不过二者差距较小,当然我很喜欢后者。

-

Symbols配置

-

When applications, libraries, drivers, or operating systems are linked, the linker that creates the .exe and .dll files also creates a number of additional files known as symbol files.

-
-

在崩溃分析中,我们可以使用Symbols来定位Windows原生应用或者内容发生崩溃时的具体进程,驱动,函数。配置Symbols有若干方法,以下推荐两种,请根据实际条件选择:

-
    -
  • 配置环境变量在本地缓存并指向Symbols公共服务器,新建系统系统变量,名称设置为_NT_SYMBOL_PATH,变量值为SRV*c:\symbol*http://msdl.microsoft.com/download/symbols ,其中SRV*与*http://… 之间的路径为Symbols文件在本地的缓存路径,例如我的缓存路径为c:\symbol。
    该句的意思即告诉WinDbg,Symbols文件位于c:\symbol,当在该路径下无法寻找到目标Symbols时,主动从http://msdl.microsoft.com/download/symbols 下载缓存。
    Symbols路径配置
    重启系统后生效,在这里分享一个技能点,在cmd中输入set PATH=C:后关闭cmd即可使环境变量在Windows不重启的情况下生效。
  • -
  • 借助dbgcmd(注意不是cmd),输入.symfix+ c:\symbol即可将当前Workspace的Symbols指向c:\symbol,之后再使用.sympath即可输出当前Symbols的配置路径,最后reload便可开始根据当前系统版本同步Symbols,如果一切正常,你会在C:\symbol目录下看到下载的文件。
  • -
-
1
2
3
4
0: kd> .symfix c:\symbol  
0: kd> .sympath
Symbol search path is: srv*
Expanded Symbol search path is: cache*c:\symbol;SRV*https://msdl.microsoft.com/download/symbols
- -

配置好的测试页面会出现类似下图的提示,Symbol search path is: SRV\*c:\symbol\* http://msdl.microsoft.com/download/symbols。PATH路径
Tips:

-
    -
  • 目前msdl服务器似乎被墙了,请将代理置为全局。
  • -
  • 下载Symbols的过程中左下角会提示当前下载的任务名称,右侧会出现进度条,如果没有,请检查网络。
  • -
  • !!!网络问题很重要
  • -
  • 如果安装过程中遇到困难,请尝试将WinDbg的安装目录添加到环境变量中,以便寻找到SYMSRV.DLL和SYMSTORE.EXE。然而,我无法寻找到UWP版本的安装目录,请安装上文提到的第一个版本的WinDbg。

    Dump分析

    把文件丢进WinDbg等待Symbols下载完成后便可开始分析,如果你运气够好,初步的分析下,你可能会看到“Probably caused by ***”的文本,基本上即为出现问题的具体驱动/进程了。
  • -
-

如果没有分析结果,或者全部指向ntoskrnl类似的内核程序时,我们需要考虑进一步分析。在dbgcmd中输入!analyze -v便可开始进一步分析,我们可能会看到类似如下的Stack_text调用情况。
Stack调用
计算机中的Stack向低地址方向生长,于是从下至上分析,可以看到是nvlddmkm先后调用了dxgkrnl的DpiDispatchPower,DpiFdoDispatchPower,DpiFdoHandleDevicePower函数,在调用DpiFdoHandleDevicePower后即引发了watchdog.exe,随后NT内核的KeBugCheckEx启动,引发蓝屏。我们可以推测出出错的程序可能是dxgkrnl或者nvlddmkm,即DirectX程序,nVidia驱动程序。因此建议对DX进行修复,对N卡驱动进行升/降级。
MODULE_NAME
从文件末尾的MODULE_NAME可以看到端倪,基本判断问题为DirectX程序与nVidia驱动的不兼容。

-

我们随后又进行了验证,dbgcmd中输入!process即可开始验证。
验证
在这里我们较为关注Image: System这句与ReadMemory error: Cannot get nt!KeMaximumIncrement value. -fffff78000000000: Unable to get shared data基本判断为栈溢出。

-

驱动判断

你可以使用Google来搜索该驱动属于何种设备,并尝试更新/回退。当Google搜索不到一些冷门硬件时,我们需要使用lm(list module),使用命令lm kv m nvlddmkm(k——kernel,内核;v——verbose,详细;m——match,匹配)来列出该模块的具体信息。nvlddmkm具体信息上图中,我们可以看到列出了该模块的时间戳,路径,名称,校验码等。同时,通过查阅主机的注册表我们也可以得出具体路径以及设备。

-

作死之路

如果你想要更多的Dump来分析,请左转Microsoft Community,我在我的附件里(前文可下载)附上了9份Dump文件,本次分析的文件结果也已导出为html格式,于附件中。






如果你想变得更强大,欢迎阅读书籍《深入解析Windows操作系统》,绝对是一本好书,就是有“点”厚?!
《深入解析Windows操作系统》第六版下册

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2020/01/01/CPU\345\257\204\345\255\230\345\231\250\346\200\273\347\273\223/index.html" "b/2020/01/01/CPU\345\257\204\345\255\230\345\231\250\346\200\273\347\273\223/index.html" deleted file mode 100644 index dece47c..0000000 --- "a/2020/01/01/CPU\345\257\204\345\255\230\345\231\250\346\200\273\347\273\223/index.html" +++ /dev/null @@ -1,743 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CPU寄存器总结 | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

CPU寄存器总结 - - -

- - -
- - - - -
- - -

X86架构通用寄存器只有8个,其余为不可直接操作寄存器。在叙述寄存器单元之前,我们先将CPU内部分为三大块:

控制单元(Control Unit)

程序计数器 PC(Program Counter)、指令寄存器 IR(Instruction Register)、指令译码器 ID(Instruction Decoder)和操作控制器 OC(Operation Controller)。

- -

运算逻辑单元(Arithmetic Logic Unit)

算术运算与逻辑运算,进行加减乘除基础运算与位移运算。

-

储存单元(Storage Unit)

包含寄存器,片内缓存L1~L4,其中L1分为数据缓存与指令缓存,L4主要在Iris上以eDRAM的形式存在。
X64片内寄存器

-

状态寄存器

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
字长通用寄存器指针寄存器索引寄存器区段寄存器标志寄存器
16 BitsAX BX CX DXBP SP IPSI DICS DS SS ESFLAGS
32 BitsEAX EBX ECX EDXEBP ESP EIPESI EDICS DS SS ES FS GSEFLAGS
64 BitsRAX RBX RCX RDX R8~R15RBP RSP RIPRSI RDICS DS SS ES FS GSRFLAGS
-
    -
  • AX BX CX DX 可分为高八位与低八位,例AH(High),BL(Low),寄存器之间的长度必须相同才可进行运算。
  • -
  • BP —— Base Pointer(基址指针),SP —— Stack Pointer (堆栈指针),标记Stack基准和移动的指针。
  • -
  • 指针寄存器IP记录下一条指令的偏移地址。
  • -
  • 指针寄存器SI DI指向数组内部。
  • -
  • 区段寄存器CS DS SS ES 产生储存器的绝对地址。
  • -
  • 标记寄存器FLAGS标志零位,奇偶,符号,进位等。
  • -
  • EAX EBX ECX EDX 低16位与AX BX CX DX相兼容。
  • -
  • R8~R15为X64新增通用寄存器。
    通用寄存器
    指针寄存器
  • -
-

指令集专用寄存器

(我的CPU为i7-6700HQ : X86,X86-64,MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,VT-x, AVX, AVX2, FMA3, AES,TSX)

-
    -
  • MM —— MMX(Matrix Math eXtensions,矩阵数学扩展)指令集使用,SIMD(单指令多数据(Single Instruction Multiple Data))多媒体指令集,意在提高多媒体处理能力。

    -
  • -
  • XMM —— SSE(Streaming SIMD Extensions,单一指令多数据流扩展)指令集使用,MMX继任,主要用于提高数学运算性能。

    -
  • -
  • YMM ZMM —— AVX (Advanced Vector Extensions,高级向量扩展指令集)指令集使用,作为AVX继任,将XMM寄存器扩展到YMM乃至512 Bits的ZMM。

    -
  • -
  • VT-x指令集主要用于硬件虚拟化操作,AES指令集主要用于提高系统加解密速度,FMA为AVX指令集子集,用来提高特定运算场景运算速度。

    -

    系统专用寄存器:

  • -
  • CR —— Control Register(控制寄存器)

    -
  • -
  • DR —— Debug Register(调试寄存器)

    -
  • -
  • TR —— Test Register(测试寄存器)

    -
  • -
-

改动此类寄存器需要Ring 0级别的权限,所以我称之为操作系统专用寄存器。

-

二十一世纪二十年代第一天,莫有啥好说的。

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2020/01/14/\350\247\243\345\206\263Ubuntu\345\205\263\346\234\272\345\215\241\347\225\214\351\235\24290s/index.html" "b/2020/01/14/\350\247\243\345\206\263Ubuntu\345\205\263\346\234\272\345\215\241\347\225\214\351\235\24290s/index.html" deleted file mode 100644 index 75a6e0c..0000000 --- "a/2020/01/14/\350\247\243\345\206\263Ubuntu\345\205\263\346\234\272\345\215\241\347\225\214\351\235\24290s/index.html" +++ /dev/null @@ -1,681 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 解决Ubuntu关机卡界面90s | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

解决Ubuntu关机卡界面90s - - -

- - -
- - - - -
- - -

解决ubuntu关机卡界面90s

注意了,这个不是系统的问题,是配置的问题。网上有很多其他的方案,下载watchdog啊,或者一行命令什么的,其实只需要改一下配置文件就可以了。

sudo vim /etc/systemd/system.conf

可以使用vim也可以使用ubuntu自带的gedit,用vim的话需要先apt安装一下。

- - -

# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details.

[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#ShowStatus=yes
#CrashChangeVT=no
#CrashShell=no
#CrashReboot=no
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=1 2
#JoinControllers=cpu,cpuacct net_cls,net_prio
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
#CapabilityBoundingSet=
#SystemCallArchitectures=
#TimerSlackNSec=
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
DefaultTimeoutStartSec=90s
DefaultTimeoutStopSec=90s
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultIOAccounting=no
#DefaultIPAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=no
#DefaultTasksAccounting=yes
#DefaultTasksMax=
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=
#IPAddressAllow=
#IPAddressDeny=

-

配置文件大概就长这样,找到加粗的俩行,把#注释去掉并且修改时间为1,就可以解决了

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/2020/01/14/\350\247\243\345\206\263ubuntu\345\205\263\346\234\272\345\215\241\347\225\214\351\235\24290s/index.html" "b/2020/01/14/\350\247\243\345\206\263ubuntu\345\205\263\346\234\272\345\215\241\347\225\214\351\235\24290s/index.html" deleted file mode 100644 index be7bfd7..0000000 --- "a/2020/01/14/\350\247\243\345\206\263ubuntu\345\205\263\346\234\272\345\215\241\347\225\214\351\235\24290s/index.html" +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- - -
-
- - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

解决ubuntu关机卡界面90s

注意了,这个不是系统的问题,是配置的问题。网上有很多其他的方案,下载watchdog啊,或者一行命令什么的,其实只需要改一下配置文件就可以了。

sudo vim /etc/systemd/system.conf

可以使用vim也可以使用ubuntu自带的gedit,用vim的话需要先apt安装一下。

- - -

# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details.

-

[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#ShowStatus=yes
#CrashChangeVT=no
#CrashShell=no
#CrashReboot=no
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=1 2
#JoinControllers=cpu,cpuacct net_cls,net_prio
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
#CapabilityBoundingSet=
#SystemCallArchitectures=
#TimerSlackNSec=
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultIOAccounting=no
#DefaultIPAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=no
#DefaultTasksAccounting=yes
#DefaultTasksMax=
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=
#IPAddressAllow=
#IPAddressDeny=

-

配置文件大概就长这样,找到加粗的俩行,把#注释去掉并且修改时间为1,就可以解决了

- -
- - - - - - - - - -
- - - -
- -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..92bc6a0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 HAUT180158 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..febb02d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# HAUT-the-league-of-hardware +这是河南工业大学 硬件联盟社团的Github项目,创立这个项目的目的是为了将自己做的东西一直在社团里传承下去从而帮助社团发扬光大,里面会放很多我们自己做的小东西, +比如社团官网,抽奖小程序等等。 diff --git a/Untitled/index.html b/Untitled/index.html deleted file mode 100644 index 231109b..0000000 --- a/Untitled/index.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Untitled | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - -
- - - -
-
- -

Untitled - -

- - - -
- - - - -
- -

13

- - -
- - - -
- - - - - -
- - -
- - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/09/index.html b/archives/2019/09/index.html deleted file mode 100644 index b7a667e..0000000 --- a/archives/2019/09/index.html +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -

- - - -

- - - -
-
- - - - -
-
- - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/10/index.html b/archives/2019/10/index.html deleted file mode 100644 index debdabb..0000000 --- a/archives/2019/10/index.html +++ /dev/null @@ -1,661 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/11/index.html b/archives/2019/11/index.html deleted file mode 100644 index dbae9a3..0000000 --- a/archives/2019/11/index.html +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/12/index.html b/archives/2019/12/index.html deleted file mode 100644 index d0a8f7a..0000000 --- a/archives/2019/12/index.html +++ /dev/null @@ -1,748 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/index.html b/archives/2019/index.html deleted file mode 100644 index e4cff2c..0000000 --- a/archives/2019/index.html +++ /dev/null @@ -1,867 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/page/2/index.html b/archives/2019/page/2/index.html deleted file mode 100644 index 568513e..0000000 --- a/archives/2019/page/2/index.html +++ /dev/null @@ -1,751 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -

- - - -

- - - -
-
- - - - -
-
- - - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/01/index.html b/archives/2020/01/index.html deleted file mode 100644 index fe4a404..0000000 --- a/archives/2020/01/index.html +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2020

-
- - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/index.html b/archives/2020/index.html deleted file mode 100644 index 95cad8f..0000000 --- a/archives/2020/index.html +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2020

-
- - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/index.html b/archives/index.html deleted file mode 100644 index 0420060..0000000 --- a/archives/index.html +++ /dev/null @@ -1,872 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2020

-
- - - - - - - - - - - - - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/page/2/index.html b/archives/page/2/index.html deleted file mode 100644 index 82fb14a..0000000 --- a/archives/page/2/index.html +++ /dev/null @@ -1,809 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - - - - - - - - - - - - - -
- - - - - -
-
-
- - - - - - Um..! 18 posts in total. Keep on posting. -
- - - - - - - - - -
-

2019

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -

- - - -

- - - -
-
- - - - -
-
- - - - - - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/css/main.css b/css/main.css deleted file mode 100644 index 71c7ded..0000000 --- a/css/main.css +++ /dev/null @@ -1,2797 +0,0 @@ -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} -body { - margin: 0; -} -main { - display: block; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -a { - background-color: transparent; -} -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} -b, -strong { - font-weight: bolder; -} -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -0.25em; -} -sup { - top: -0.5em; -} -img { - border-style: none; -} -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} -button, -input { -/* 1 */ - overflow: visible; -} -button, -select { -/* 1 */ - text-transform: none; -} -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} -fieldset { - padding: 0.35em 0.75em 0.625em; -} -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} -progress { - vertical-align: baseline; -} -textarea { - overflow: auto; -} -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} -[type='search'] { - outline-offset: -2px; /* 2 */ - -webkit-appearance: textfield; /* 1 */ -} -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} -::-webkit-file-upload-button { - font: inherit; /* 2 */ - -webkit-appearance: button; /* 1 */ -} -details { - display: block; -} -summary { - display: list-item; -} -template { - display: none; -} -[hidden] { - display: none; -} -::selection { - background: #262a30; - color: #fff; -} -body { - background: #eee; - color: #555; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-size: 1em; - line-height: 2; -} -@media (max-width: 991px) { - body { - padding-right: 0; - } -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-weight: bold; - line-height: 1.5; - margin: 20px 0 15px; - padding: 0; -} -h1 { - font-size: 1.75em; -} -h2 { - font-size: 1.625em; -} -h3 { - font-size: 1.5em; -} -h4 { - font-size: 1.375em; -} -h5 { - font-size: 1.25em; -} -h6 { - font-size: 1.125em; -} -p { - margin: 0 0 20px 0; -} -a, -span.exturl { - overflow-wrap: break-word; - word-wrap: break-word; - background-color: transparent; - border-bottom: 1px solid #999; - color: #555; - outline: none; - text-decoration: none; - cursor: pointer; -} -a:hover, -span.exturl:hover { - border-bottom-color: #222; - color: #222; -} -iframe, -img, -video { - display: block; - margin-left: auto; - margin-right: auto; - max-width: 100%; -} -hr { - background-color: #ddd; - background-image: repeating-linear-gradient(-45deg, #fff, #fff 4px, transparent 4px, transparent 8px); - border: 0; - height: 3px; - margin: 40px 0; -} -blockquote { - border-left: 4px solid #ddd; - color: #666; - margin: 0; - padding: 0 15px; -} -blockquote cite::before { - content: '-'; - padding: 0 5px; -} -dt { - font-weight: 700; -} -dd { - margin: 0; - padding: 0; -} -kbd { - background-color: #f9f9f9; - background-image: linear-gradient(top, #eee, #fff, #eee); - border: 1px solid #ccc; - border-radius: 0.2em; - box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); - font-family: inherit; - padding: 0.1em 0.3em; - white-space: nowrap; -} -.text-left { - text-align: left; -} -.text-center { - text-align: center; -} -.text-right { - text-align: right; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.clearfix::before, -.clearfix::after { - content: ' '; - display: table; -} -.clearfix::after { - clear: both; -} -.pullquote { - width: 45%; -} -.pullquote.left { - float: left; - margin-left: 5px; - margin-right: 10px; -} -.pullquote.right { - float: right; - margin-left: 10px; - margin-right: 5px; -} -.translation { - color: #999; - font-size: 0.875em; - margin-top: -20px; -} -.table-container { - -webkit-overflow-scrolling: touch; - overflow: auto; -} -table { - border-collapse: collapse; - border-spacing: 0; - font-size: 0.875em; - margin: 0 0 20px 0; - width: 100%; -} -table > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -table > tbody > tr:hover { - background-color: #f5f5f5; -} -caption, -th, -td { - font-weight: normal; - padding: 8px; - text-align: left; - vertical-align: middle; -} -th, -td { - border: 1px solid #ddd; - border-bottom: 3px solid #ddd; -} -th { - font-weight: 700; - padding-bottom: 10px; -} -td { - border-bottom-width: 1px; -} -html, -body { - height: 100%; -} -.container { - min-height: 100%; - position: relative; -} -.header-inner { - margin: 0 auto; - padding: 100px 0 70px; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .container .header-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .container .header-inner { - width: 73%; - } -} -.main-inner { - margin: 0 auto; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .container .main-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .container .main-inner { - width: 73%; - } -} -.footer { - padding: 20px 0; -} -.footer-inner { - box-sizing: border-box; - margin: 0 auto; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .container .footer-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .container .footer-inner { - width: 73%; - } -} -pre, -.highlight { - background: #f7f7f7; - color: #4d4d4c; - line-height: 1.6; - margin: 0 auto 20px; -} -pre, -code { - font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; -} -code { - overflow-wrap: break-word; - word-wrap: break-word; - background: #eee; - border-radius: 3px; - color: #555; - padding: 2px 4px; -} -pre { - overflow: auto; - padding: 10px; -} -pre code { - background: none; - color: #4d4d4c; - font-size: 0.875em; - padding: 0; - text-shadow: none; -} -.highlight *::selection { - background: #d6d6d6; -} -.highlight pre { - border: 0; - margin: 0; - padding: 10px 0; -} -.highlight table { - border: 0; - margin: 0; - width: auto; -} -.highlight td { - border: 0; - padding: 0; -} -.highlight figcaption { - background: #eee; - border-bottom: 1px solid #e9e9e9; - color: #4d4d4c; - line-height: 1em; - margin: 0; - padding: 0.5em; -} -.highlight figcaption::before, -.highlight figcaption::after { - content: ' '; - display: table; -} -.highlight figcaption::after { - clear: both; -} -.highlight figcaption a { - color: #4d4d4c; - float: right; -} -.highlight figcaption a:hover { - border-bottom-color: #4d4d4c; -} -.highlight .gutter pre { - background-color: #eff2f3; - color: #869194; - padding-left: 10px; - padding-right: 10px; - text-align: right; -} -.highlight .code pre { - background-color: #f7f7f7; - padding-left: 10px; - width: 100%; -} -.gutter { - -moz-user-select: none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; -} -.gist table { - width: auto; -} -.gist table td { - border: 0; -} -pre .deletion { - background: #fdd; -} -pre .addition { - background: #dfd; -} -pre .meta { - color: #eab700; - -moz-user-select: none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; -} -pre .comment { - color: #8e908c; -} -pre .variable, -pre .attribute, -pre .tag, -pre .name, -pre .regexp, -pre .ruby .constant, -pre .xml .tag .title, -pre .xml .pi, -pre .xml .doctype, -pre .html .doctype, -pre .css .id, -pre .css .class, -pre .css .pseudo { - color: #c82829; -} -pre .number, -pre .preprocessor, -pre .built_in, -pre .builtin-name, -pre .literal, -pre .params, -pre .constant, -pre .command { - color: #f5871f; -} -pre .ruby .class .title, -pre .css .rules .attribute, -pre .string, -pre .symbol, -pre .value, -pre .inheritance, -pre .header, -pre .ruby .symbol, -pre .xml .cdata, -pre .special, -pre .formula { - color: #718c00; -} -pre .title, -pre .css .hexcolor { - color: #3e999f; -} -pre .function, -pre .python .decorator, -pre .python .title, -pre .ruby .function .title, -pre .ruby .title .keyword, -pre .perl .sub, -pre .javascript .title, -pre .coffeescript .title { - color: #4271ae; -} -pre .keyword, -pre .javascript .function { - color: #8959a8; -} -.blockquote-center { - border-left: none; - margin: 40px 0; - padding: 0; - position: relative; - text-align: center; -} -.blockquote-center::before, -.blockquote-center::after { - background-position: 0 -6px; - background-repeat: no-repeat; - background-size: 22px 22px; - content: ' '; - display: block; - height: 24px; - opacity: 0.2; - position: absolute; - width: 100%; -} -.blockquote-center::before { - background-image: url("http://github.com/images/quote-l.svg"); - border-top: 1px solid #ccc; - top: -20px; -} -.blockquote-center::after { - background-image: url("http://github.com/images/quote-r.svg"); - background-position: 100% 8px; - border-bottom: 1px solid #ccc; - bottom: -20px; -} -.blockquote-center p, -.blockquote-center div { - text-align: center; -} -.post-body .group-picture img { - border: 0; - box-sizing: border-box; - margin: 0 auto; - padding: 0 3px; -} -.post-body .group-picture-row { - margin-bottom: 6px; - overflow: hidden; -} -.post-body .group-picture-column { - float: left; - margin-bottom: 10px; -} -.post-body .label { - display: inline; - padding: 0 2px; -} -.post-body .label.default { - background-color: #f0f0f0; -} -.post-body .label.primary { - background-color: #efe6f7; -} -.post-body .label.info { - background-color: #e5f2f8; -} -.post-body .label.success { - background-color: #e7f4e9; -} -.post-body .label.warning { - background-color: #fcf6e1; -} -.post-body .label.danger { - background-color: #fae8eb; -} -.post-body .tabs { - margin-bottom: 20px; -} -.post-body .tabs, -.tabs-comment { - display: block; - padding-top: 10px; - position: relative; -} -.post-body .tabs ul.nav-tabs, -.tabs-comment ul.nav-tabs { - display: flex; - flex-wrap: wrap; - margin: 0; - margin-bottom: -1px; - padding: 0; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs, - .tabs-comment ul.nav-tabs { - display: block; - margin-bottom: 5px; - } -} -.post-body .tabs ul.nav-tabs li.tab, -.tabs-comment ul.nav-tabs li.tab { - background-color: #fff; - border-bottom: 1px solid #ddd; - border-left: 1px solid transparent; - border-right: 1px solid transparent; - border-top: 3px solid transparent; - flex-grow: 1; - list-style-type: none; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab, - .tabs-comment ul.nav-tabs li.tab { - border-bottom: 1px solid transparent; - border-left: 3px solid transparent; - border-right: 1px solid transparent; - border-top: 1px solid transparent; - } -} -.post-body .tabs ul.nav-tabs li.tab a, -.tabs-comment ul.nav-tabs li.tab a { - border-bottom: initial; - display: block; - line-height: 1.8em; - outline: 0; - padding: 0.25em 0.75em; - text-align: center; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-out; -} -.post-body .tabs ul.nav-tabs li.tab a i, -.tabs-comment ul.nav-tabs li.tab a i { - width: 1.285714285714286em; -} -.post-body .tabs ul.nav-tabs li.tab.active, -.tabs-comment ul.nav-tabs li.tab.active { - border-bottom: 1px solid transparent; - border-left: 1px solid #ddd; - border-right: 1px solid #ddd; - border-top: 3px solid #fc6423; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab.active, - .tabs-comment ul.nav-tabs li.tab.active { - border-bottom: 1px solid #ddd; - border-left: 3px solid #fc6423; - border-right: 1px solid #ddd; - border-top: 1px solid #ddd; - } -} -.post-body .tabs ul.nav-tabs li.tab.active a, -.tabs-comment ul.nav-tabs li.tab.active a { - color: #555; - cursor: default; -} -.post-body .tabs .tab-content .tab-pane, -.tabs-comment .tab-content .tab-pane { - border: 1px solid #ddd; - padding: 20px 20px 0 20px; -} -.post-body .tabs .tab-content .tab-pane:not(.active), -.tabs-comment .tab-content .tab-pane:not(.active) { - display: none; -} -.post-body .tabs .tab-content .tab-pane.active, -.tabs-comment .tab-content .tab-pane.active { - display: block; -} -.post-body .note { - margin-bottom: 20px; - padding: 15px; - position: relative; - border: 1px solid #eee; - border-left-width: 5px; - border-radius: 3px; -} -.post-body .note h2, -.post-body .note h3, -.post-body .note h4, -.post-body .note h5, -.post-body .note h6 { - margin-top: 0; - border-bottom: initial; - margin-bottom: 0; - padding-top: 0; -} -.post-body .note p:first-child, -.post-body .note ul:first-child, -.post-body .note ol:first-child, -.post-body .note table:first-child, -.post-body .note pre:first-child, -.post-body .note blockquote:first-child, -.post-body .note img:first-child { - margin-top: 0; -} -.post-body .note p:last-child, -.post-body .note ul:last-child, -.post-body .note ol:last-child, -.post-body .note table:last-child, -.post-body .note pre:last-child, -.post-body .note blockquote:last-child, -.post-body .note img:last-child { - margin-bottom: 0; -} -.post-body .note.default { - border-left-color: #777; -} -.post-body .note.default h2, -.post-body .note.default h3, -.post-body .note.default h4, -.post-body .note.default h5, -.post-body .note.default h6 { - color: #777; -} -.post-body .note.primary { - border-left-color: #6f42c1; -} -.post-body .note.primary h2, -.post-body .note.primary h3, -.post-body .note.primary h4, -.post-body .note.primary h5, -.post-body .note.primary h6 { - color: #6f42c1; -} -.post-body .note.info { - border-left-color: #428bca; -} -.post-body .note.info h2, -.post-body .note.info h3, -.post-body .note.info h4, -.post-body .note.info h5, -.post-body .note.info h6 { - color: #428bca; -} -.post-body .note.success { - border-left-color: #5cb85c; -} -.post-body .note.success h2, -.post-body .note.success h3, -.post-body .note.success h4, -.post-body .note.success h5, -.post-body .note.success h6 { - color: #5cb85c; -} -.post-body .note.warning { - border-left-color: #f0ad4e; -} -.post-body .note.warning h2, -.post-body .note.warning h3, -.post-body .note.warning h4, -.post-body .note.warning h5, -.post-body .note.warning h6 { - color: #f0ad4e; -} -.post-body .note.danger { - border-left-color: #d9534f; -} -.post-body .note.danger h2, -.post-body .note.danger h3, -.post-body .note.danger h4, -.post-body .note.danger h5, -.post-body .note.danger h6 { - color: #d9534f; -} -.btn { - background: #fff; - border: 2px solid #555; - border-radius: 2px; - color: #555; - display: inline-block; - font-size: 0.875em; - line-height: 2; - padding: 0 20px; - text-decoration: none; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; - transition-property: background-color; -} -.btn:hover { - background: #222; - border-color: #222; - color: #fff; -} -.btn + .btn { - margin: 0 0 8px 8px; -} -.btn .fa-fw { - text-align: left; - width: 1.285714285714286em; -} -.btn-bar { - background: #555; - border-radius: 1px; - display: block; - height: 2px; - width: 22px; -} -.btn-bar + .btn-bar { - margin-top: 4px; -} -.page-number-basic, -.pagination .prev, -.pagination .next, -.pagination .page-number, -.pagination .space { - display: inline-block; - margin: 0 10px; - padding: 0 11px; - position: relative; - top: -1px; -} -@media (max-width: 767px) { - .page-number-basic, - .pagination .prev, - .pagination .next, - .pagination .page-number, - .pagination .space { - margin: 0 5px; - } -} -.pagination { - border-top: 1px solid #eee; - margin: 120px 0 40px; - text-align: center; -} -.pagination .prev, -.pagination .next, -.pagination .page-number { - border-bottom: 0; - border-top: 1px solid #eee; - transition-property: border-color; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.pagination .prev:hover, -.pagination .next:hover, -.pagination .page-number:hover { - border-top-color: #222; -} -.pagination .space { - margin: 0; - padding: 0; -} -.pagination .prev { - margin-left: 0; -} -.pagination .next { - margin-right: 0; -} -.pagination .page-number.current { - background: #ccc; - border-top-color: #ccc; - color: #fff; -} -@media (max-width: 767px) { - .pagination { - border-top: none; - } - .pagination .prev, - .pagination .next, - .pagination .page-number { - border-bottom: 1px solid #eee; - border-top: 0; - margin-bottom: 10px; - padding: 0 10px; - } - .pagination .prev:hover, - .pagination .next:hover, - .pagination .page-number:hover { - border-bottom-color: #222; - } -} -.comments { - margin: 60px 20px 0; - overflow: hidden; -} -.comment-button-group { - display: flex; - flex-wrap: wrap-reverse; - justify-content: center; - margin: 1em 0; -} -.comment-button-group .comment-button { - margin: 0.1em 0.2em; -} -.comment-button-group .comment-button.active { - background: #222; - border-color: #222; - color: #fff; -} -.comment-position { - display: none; -} -.comment-position.active { - display: block; -} -.tabs-comment { - background: #fff; - margin-top: 4em; - padding-top: 0; -} -.tabs-comment .comments { - border: 0; - box-shadow: none; - margin-top: 0; - padding-top: 0; -} -.back-to-top { - background: #222; - bottom: -100px; - box-sizing: border-box; - color: #fff; - cursor: pointer; - font-size: 12px; - left: 30px; - opacity: 0.6; - padding: 0 6px; - position: fixed; - text-align: center; - transition-property: bottom; - z-index: 1050; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; - width: 24px; -} -.back-to-top span { - display: none; -} -.back-to-top:hover { - color: #fc6423; -} -.back-to-top.back-to-top-on { - bottom: 30px; -} -@media (max-width: 991px) { - .back-to-top { - left: 20px; - opacity: 0.8; - } -} -.header { - background: transparent; -} -.header-inner { - position: relative; -} -.headband { - background: #222; - height: 3px; -} -.site-meta { - margin: 0; - text-align: center; -} -@media (max-width: 767px) { - .site-meta { - text-align: center; - } -} -.brand { - background: #222; - border-bottom: none; - color: #fff; - display: inline-block; - line-height: 1.375em; - padding: 0 40px; - position: relative; -} -.brand:hover { - color: #fff; -} -.logo { - display: inline-block; - line-height: 36px; - margin-right: 5px; - vertical-align: top; -} -.site-title { - display: inline-block; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-size: 1.375em; - font-weight: normal; - line-height: 1.5; - vertical-align: top; -} -.site-subtitle { - color: #ddd; - font-size: 0.8125em; - margin-top: 10px; -} -.use-motion .brand { - opacity: 0; -} -.use-motion .logo, -.use-motion .site-title, -.use-motion .site-subtitle, -.use-motion .custom-logo-image { - opacity: 0; - position: relative; - top: -10px; -} -.site-nav-toggle { - display: none; - left: 10px; - position: absolute; -} -@media (max-width: 767px) { - .site-nav-toggle { - display: block; - } -} -.site-nav-toggle button { - background: transparent; - border: 0; - margin-top: 2px; - padding: 9px 10px; -} -.site-nav { - display: block; -} -@media (max-width: 767px) { - .site-nav { - border-top: 1px solid #ddd; - clear: both; - display: none; - margin: 0 -10px; - padding: 0 10px; - } -} -.site-nav.site-nav-on { - display: block; -} -.menu { - margin-top: 20px; - padding-left: 0; - text-align: center; -} -.menu-item { - display: inline-block; - list-style: none; - margin: 0 10px; -} -@media (max-width: 767px) { - .menu-item { - margin-top: 10px; - } -} -.menu-item a, -.menu-item span.exturl { - border-bottom: 1px solid transparent; - display: block; - font-size: 0.8125em; - line-height: inherit; - transition-property: border-color; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.menu-item a:hover, -.menu-item span.exturl:hover { - border-bottom-color: #222; -} -.menu-item .fa { - margin-right: 5px; -} -.use-motion .menu-item { - opacity: 0; -} -.post-body { - overflow-wrap: break-word; - word-wrap: break-word; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; -} -@media (min-width: 1200px) { - .post-body { - font-size: 1.125em; - } -} -@media (max-width: 767px) { - .post-body { - font-size: 0.875em; - } -} -.post-body span.exturl .fa { - font-size: 0.875em; - margin-left: 4px; -} -.post-body .image-caption, -.post-body .figure .caption { - color: #999; - font-size: 0.875em; - font-weight: bold; - line-height: 1; - margin: -20px auto 15px; - text-align: center; -} -.post-sticky-flag { - display: inline-block; - transform: rotate(30deg); -} -.use-motion .post-block, -.use-motion .pagination, -.use-motion .comments { - opacity: 0; -} -.use-motion .post-header { - opacity: 0; -} -.use-motion .post-body { - opacity: 0; -} -.use-motion .collection-header { - opacity: 0; -} -.post-button { - margin-top: 40px; -} -.posts-collapse { - margin-left: 55px; - position: relative; - z-index: 1010; -} -@media (max-width: 767px) { - .posts-collapse { - margin-left: 20px; - margin-right: 20px; - } -} -.posts-collapse .collection-title { - font-size: 1.125em; - position: relative; -} -.posts-collapse .collection-title::before { - background: #999; - border: 1px solid #fff; - border-radius: 50%; - content: ' '; - height: 10px; - left: 0; - margin-left: -6px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 10px; -} -.posts-collapse .collection-year { - margin: 60px 0; - position: relative; -} -.posts-collapse .collection-year::before { - background: #bbb; - border-radius: 50%; - content: ' '; - height: 8px; - left: 0; - margin-left: -4px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 8px; -} -.posts-collapse .collection-header { - margin: 0 0 0 20px; -} -.posts-collapse .collection-header small { - color: #bbb; - margin-left: 5px; -} -.posts-collapse article { - margin: 30px 0; -} -.posts-collapse .post-header { - border-bottom: 1px dashed #ccc; - position: relative; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; - transition-property: border; -} -.posts-collapse .post-header::before { - background: #bbb; - border: 1px solid #fff; - border-radius: 50%; - content: ' '; - height: 6px; - left: 0; - margin-left: -4px; - position: absolute; - top: 0.75em; - width: 6px; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; - transition-property: background; -} -.posts-collapse .post-header:hover { - border-bottom-color: #666; -} -.posts-collapse .post-header:hover::before { - background: #222; -} -.posts-collapse .post-title { - font-size: 1em; - font-weight: normal; - line-height: inherit; - margin-bottom: 0; - margin-left: 3.75em; -} -.posts-collapse .post-title::after { - margin-left: 3px; - opacity: 0.6; -} -.posts-collapse .post-title a, -.posts-collapse .post-title span.exturl { - border-bottom: none; - color: #666; -} -.posts-collapse .post-meta { - font-size: 0.75em; - left: 20px; - position: absolute; - top: 5px; -} -.posts-collapse::after { - background: #f5f5f5; - content: ' '; - height: 100%; - left: 0; - margin-left: -2px; - position: absolute; - top: 1.25em; - width: 4px; - z-index: -1; -} -.posts-collapse .fa-external-link { - font-size: 0.875em; - margin-left: 5px; -} -.post-eof { - background: #ccc; - height: 1px; - margin: 80px auto 60px; - text-align: center; - width: 8%; -} -article:last-child .post-eof { - display: none; -} -.posts-expand { - padding-top: 40px; -} -@media (max-width: 767px) { - .posts-expand { - margin: 0 20px; - } -} -@media (min-width: 992px) { - .post-body { - text-align: justify; - } -} -@media (max-width: 991px) { - .post-body { - text-align: justify; - } -} -.post-body h2, -.post-body h3, -.post-body h4, -.post-body h5, -.post-body h6 { - padding-top: 10px; -} -.post-body h2 .header-anchor, -.post-body h3 .header-anchor, -.post-body h4 .header-anchor, -.post-body h5 .header-anchor, -.post-body h6 .header-anchor { - border-bottom-style: none; - color: #ccc; - float: right; - margin-left: 10px; - visibility: hidden; -} -.post-body h2 .header-anchor:hover, -.post-body h3 .header-anchor:hover, -.post-body h4 .header-anchor:hover, -.post-body h5 .header-anchor:hover, -.post-body h6 .header-anchor:hover { - color: inherit; -} -.post-body h2:hover .header-anchor, -.post-body h3:hover .header-anchor, -.post-body h4:hover .header-anchor, -.post-body h5:hover .header-anchor, -.post-body h6:hover .header-anchor { - visibility: visible; -} -.post-body img { - border: 1px solid #ddd; - box-sizing: border-box; - padding: 3px; -} -@media (max-width: 767px) { - .post-body img { - padding: initial; - } -} -.post-body iframe, -.post-body img, -.post-body video { - margin-bottom: 20px; -} -.post-body .video-container { - height: 0; - margin-bottom: 20px; - overflow: hidden; - padding-top: 75%; - position: relative; - width: 100%; -} -.post-body .video-container iframe, -.post-body .video-container object, -.post-body .video-container embed { - height: 100%; - left: 0; - margin: 0; - position: absolute; - top: 0; - width: 100%; -} -.post-gallery { - border-collapse: separate; - display: table; - table-layout: fixed; - width: 100%; -} -.post-gallery-row { - display: table-row; -} -.post-gallery .post-gallery-img { - border: 0; - display: table-cell; - text-align: center; - vertical-align: middle; -} -.post-gallery .post-gallery-img img { - border: 0; - max-height: 100%; - max-width: 100%; -} -.fancybox-close, -.fancybox-close:hover { - border: 0; -} -.posts-expand .post-meta { - color: #999; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - margin: 3px 0 60px 0; - text-align: center; -} -.posts-expand .post-meta .post-description { - font-size: 0.875em; - margin-top: 2px; -} -.posts-expand .post-meta time { - border-bottom: 1px dashed #999; - cursor: help; -} -.post-meta .post-meta-item + .post-meta-item::before { - content: '|'; - margin: 0 0.5em; -} -.post-meta .post-meta-item { - font-size: 0.75em; -} -.post-meta-divider { - margin: 0 0.5em; -} -.post-meta-item-icon { - margin-right: 3px; -} -@media (max-width: 991px) { - .post-meta-item-icon { - display: inline-block; - } -} -@media (max-width: 991px) { - .post-meta-item-text { - display: none; - } -} -.post-nav { - border-top: 1px solid #eee; - display: table; - margin-top: 15px; - width: 100%; -} -.post-nav-divider { - display: table-cell; - width: 10%; -} -.post-nav-item { - display: table-cell; - padding: 10px 0 0 0; - vertical-align: top; - width: 45%; -} -.post-nav-item a { - border-bottom: none; - color: #555; - display: block; - font-size: 0.875em; - line-height: 1.6; - position: relative; -} -.post-nav-item a:hover { - border-bottom: none; - color: #222; -} -.post-nav-item a:active { - top: 2px; -} -.post-nav-item .fa { - font-size: 0.75em; - margin-right: 5px; -} -.post-nav-next a { - padding-left: 5px; -} -.post-nav-prev { - text-align: right; -} -.post-nav-prev a { - padding-right: 5px; -} -.post-nav-prev .fa { - margin-left: 5px; -} -.rtl.post-body p, -.rtl.post-body a, -.rtl.post-body h1, -.rtl.post-body h2, -.rtl.post-body h3, -.rtl.post-body h4, -.rtl.post-body h5, -.rtl.post-body h6, -.rtl.post-body li, -.rtl.post-body ul, -.rtl.post-body ol { - direction: rtl; - font-family: UKIJ Ekran; -} -.rtl.post-title { - font-family: UKIJ Ekran; -} -.post-tags { - margin-top: 40px; - text-align: center; -} -.post-tags a { - display: inline-block; - font-size: 0.8125em; - margin-right: 10px; -} -.posts-expand .post-title { - overflow-wrap: break-word; - word-wrap: break-word; - font-weight: 400; - margin: initial; - text-align: center; -} -.posts-expand .post-title-link { - border-bottom: none; - color: #555; - display: inline-block; - line-height: 1.2; - position: relative; - vertical-align: top; -} -.posts-expand .post-title-link::before { - background-color: #000; - bottom: 0; - content: ''; - height: 2px; - left: 0; - position: absolute; - transform: scaleX(0); - visibility: hidden; - width: 100%; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.posts-expand .post-title-link:hover::before { - transform: scaleX(1); - visibility: visible; -} -.posts-expand .post-title-link .fa { - font-size: 0.875em; - margin-left: 5px; -} -.post-widgets { - border-top: 1px solid #eee; - margin-top: 15px; - text-align: center; -} -.wp_rating { - height: 20px; - line-height: 20px; - margin-top: 10px; - padding-top: 6px; - text-align: center; -} -.social-like { - display: flex; - font-size: 0.875em; - justify-content: center; - text-align: center; -} -.vk_like { - align-self: center; - height: 21px; - padding-top: 7px; - width: 85px; -} -.fb_like { - align-self: center; - height: 30px; -} -.post-body p a { - color: #0593d3; - border-bottom: none; -} -.post-body p a:hover { - color: #0477ab; - text-decoration: underline; -} -.sidebar { - background: #222; - bottom: 0; - box-shadow: inset 0 2px 6px #000; - position: fixed; - top: 0; - z-index: 1040; -} -.sidebar a, -.sidebar span.exturl { - border-bottom-color: #555; - color: #999; -} -.sidebar a:hover, -.sidebar span.exturl:hover { - border-bottom-color: #eee; - color: #eee; -} -@media (max-width: 991px) { - .sidebar { - display: none; - } -} -.sidebar-inner { - color: #999; - padding: 20px 10px; - text-align: center; -} -.site-overview-wrap { - overflow-x: hidden; - overflow-y: auto; -} -.cc-license { - margin-top: 10px; - text-align: center; -} -.cc-license .cc-opacity { - border-bottom: none; - opacity: 0.7; -} -.cc-license .cc-opacity:hover { - opacity: 0.9; -} -.cc-license img { - display: inline-block; -} -.site-author-image { - border: 1px solid #eee; - display: block; - height: auto; - margin: 0 auto; - max-width: 120px; - padding: 2px; -} -.site-author-name { - color: #222; - font-weight: 600; - margin: 0; - text-align: center; -} -.site-description { - color: #999; - font-size: 0.8125em; - margin-top: 0; - text-align: center; -} -.links-of-author { - margin-top: 20px; -} -.links-of-author a, -.links-of-author span.exturl { - border-bottom-color: #555; - display: inline-block; - font-size: 0.8125em; - margin-bottom: 10px; - margin-right: 10px; - vertical-align: middle; -} -.links-of-author a::before, -.links-of-author span.exturl::before { - background: #db39ff; - border-radius: 50%; - content: ' '; - display: inline-block; - height: 4px; - margin-right: 3px; - vertical-align: middle; - width: 4px; -} -.feed-link, -.chat { - margin-top: 10px; -} -.feed-link a, -.chat a { - border: 1px solid #fc6423; - border-radius: 4px; - color: #fc6423; - display: inline-block; - padding: 0 15px; -} -.feed-link a .fa, -.chat a .fa { - margin-right: 5px; -} -.feed-link a:hover, -.chat a:hover { - background: #fc6423; - border: 1px solid #fc6423; - color: #fff; -} -.feed-link a:hover .fa, -.chat a:hover .fa { - color: #fff; -} -.links-of-blogroll { - font-size: 0.8125em; - margin-top: 10px; -} -.links-of-blogroll-title { - font-size: 0.875em; - font-weight: 600; - margin-top: 0; -} -.links-of-blogroll-list { - list-style: none; - margin: 0; - padding: 0; -} -.links-of-blogroll-item { - padding: 2px 10px; -} -.links-of-blogroll-item a, -.links-of-blogroll-item span.exturl { - box-sizing: border-box; - display: inline-block; - max-width: 280px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -#sidebar-dimmer { - display: none; -} -@media (max-width: 767px) { - #sidebar-dimmer { - background: #000; - display: block; - height: 100%; - left: 100%; - opacity: 0; - position: fixed; - top: 0; - width: 100%; - z-index: 1020; - } - .sidebar-active + #sidebar-dimmer { - opacity: 0.7; - transform: translateX(-100%); - transition: opacity 0.5s; - } -} -.sidebar-nav { - margin: 0 0 20px; - padding-left: 0; -} -.sidebar-nav li { - border-bottom: 1px solid transparent; - color: #555; - cursor: pointer; - display: inline-block; - font-size: 0.875em; -} -.sidebar-nav li.sidebar-nav-overview { - margin-left: 10px; -} -.sidebar-nav li:hover { - color: #fc6423; -} -.sidebar-nav .sidebar-nav-active { - border-bottom-color: #fc6423; - color: #fc6423; -} -.sidebar-nav .sidebar-nav-active:hover { - color: #fc6423; -} -.sidebar-panel { - display: none; -} -.sidebar-panel-active { - display: block; -} -.sidebar-toggle { - background: #222; - bottom: 45px; - cursor: pointer; - height: 14px; - left: 30px; - line-height: 0; - padding: 5px; - position: fixed; - width: 14px; - z-index: 1050; -} -@media (max-width: 991px) { - .sidebar-toggle { - left: 20px; - opacity: 0.8; - display: none; - } -} -.sidebar-toggle-line { - background: #fff; - display: inline-block; - height: 2px; - margin-top: 3px; - position: relative; - transition: all 0.4s; - vertical-align: top; - width: 100%; -} -.sidebar-toggle-line:first-child { - margin-top: 0; -} -.sidebar-toggle:hover .sidebar-toggle-line { - background: #fc6423; -} -.post-toc-wrap { - overflow-x: hidden; - overflow-y: auto; -} -.post-toc { - font-size: 0.875em; -} -.post-toc ol { - list-style: none; - margin: 0; - padding: 0 2px 5px 10px; - text-align: left; -} -.post-toc ol > ol { - padding-left: 0; -} -.post-toc ol a { - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; - border-bottom-color: #ccc; - color: #666; - transition-property: all; -} -.post-toc ol a:hover { - border-bottom-color: #000; - color: #000; -} -.post-toc .nav-item { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - line-height: 1.8; -} -.post-toc .nav .nav-child { - display: none; -} -.post-toc .nav .active > .nav-child { - display: block; -} -.post-toc .nav .active-current > .nav-child { - display: block; -} -.post-toc .nav .active-current > .nav-child > .nav-item { - display: block; -} -.post-toc .nav .active > a { - border-bottom-color: #fc6423; - color: #fc6423; -} -.post-toc .nav .active-current > a { - color: #fc6423; -} -.post-toc .nav .active-current > a:hover { - color: #fc6423; -} -.site-state { - display: flex; - justify-content: center; - line-height: 1.4; - margin-top: 10px; - overflow: hidden; - text-align: center; - white-space: nowrap; -} -.site-state-item { - border-left: 1px solid #eee; - padding: 0 15px; -} -.site-state-item:first-child { - border-left: none; -} -.site-state-item a { - border-bottom: none; -} -.site-state-item-count { - color: inherit; - display: block; - font-size: 1em; - font-weight: 600; - text-align: center; -} -.site-state-item-name { - color: #999; - font-size: 0.8125em; -} -.footer { - color: #999; - font-size: 0.875em; -} -.footer.footer-fixed { - bottom: 0; - left: 0; - position: absolute; - right: 0; -} -.footer img { - border: 0; -} -.footer-inner { - text-align: center; -} -.with-love { - color: #808080; - display: inline-block; - margin: 0 5px; -} -.powered-by, -.theme-info { - display: inline-block; -} -@-moz-keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@-webkit-keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@-o-keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -.search-pop-overlay { - background-color: rgba(0,0,0,0.3); - display: none; - height: 100%; - left: 0; - overflow: hidden; - position: fixed; - top: 0; - width: 100%; - z-index: 2080; -} -.search-popup { - background: #fff; - border-radius: 5px; - color: #333; - display: none; - height: 80%; - left: 50%; - margin-left: -350px; - padding: 0; - position: fixed; - top: 10%; - width: 700px; - z-index: 9999; -} -@media (max-width: 767px) { - .search-popup { - border-radius: 0; - height: 100%; - left: 0; - margin: 0; - padding: 0; - top: 0; - width: 100%; - } -} -.search-popup .search-icon, -.search-popup .popup-btn-close { - color: #999; - display: inline-block; - font-size: 18px; - height: 36px; - padding-left: 10px; - padding-right: 10px; - width: 18px; -} -.search-popup .popup-btn-close { - border-left: 1px solid #eee; - cursor: pointer; - float: right; -} -.search-popup .popup-btn-close:hover .fa { - color: #222; -} -.search-popup .search-header { - background: #f5f5f5; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - padding: 5px; -} -.search-loading-icon { - margin: 20% auto 0 auto; - text-align: center; -} -.search-popup ul.search-result-list { - margin: 0 5px; - padding: 0; -} -.search-popup p.search-result { - border-bottom: 1px dashed #ccc; - padding: 5px 0; -} -.search-popup a.search-result-title { - font-weight: bold; -} -.search-popup .search-keyword { - border-bottom: 1px dashed #f00; - color: #f00; - font-weight: bold; -} -.search-popup #search-result { - height: calc(100% - 55px); - overflow: auto; - padding: 5px 25px; - position: relative; -} -.search-popup .search-input-container { - display: inline-block; - height: 36px; - line-height: 36px; - padding: 0 5px; - position: absolute; - width: calc(100% - 90px); -} -.search-popup .search-input-container input { - background: transparent; - border: 0; - display: block; - height: 20px; - outline: none; - padding: 8px 0; - vertical-align: middle; - width: 100%; -} -.search-popup #no-result { - color: #ccc; - left: 50%; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); -} -.category-all-page .category-all-title { - text-align: center; -} -.category-all-page .category-all { - margin-top: 20px; -} -.category-all-page .category-list { - list-style: none; - margin: 0; - padding: 0; -} -.category-all-page .category-list-item { - margin: 5px 10px; -} -.category-all-page .category-list-count { - color: #bbb; -} -.category-all-page .category-list-count::before { - content: ' ('; - display: inline; -} -.category-all-page .category-list-count::after { - content: ') '; - display: inline; -} -.category-all-page .category-list-child { - padding-left: 10px; -} -#event-list { - padding: 0px; -} -#event-list hr { - background: #222; - margin: 20px 0 45px 0; -} -#event-list hr::after { - background: #222; - color: #fff; - content: 'NOW'; - display: inline-block; - font-weight: bold; - padding: 0 5px; - text-align: right; -} -#event-list li.event { - background: #f9f9f9; - margin: 20px 0; - min-height: 40px; - padding-left: 10px; -} -#event-list li.event h2.event-summary { - margin: 0; - padding-bottom: 3px; -} -#event-list li.event h2.event-summary::before { - color: #bbb; - content: '\f111'; - display: inline-block; - font-family: 'FontAwesome'; - font-size: 10px; - margin-right: 25px; - vertical-align: middle; -} -#event-list li.event span.event-relative-time { - color: #bbb; - display: inline-block; - font-size: 12px; - font-weight: 400; - padding-left: 12px; -} -#event-list li.event span.event-details { - color: #bbb; - display: block; - line-height: 18px; - margin-left: 56px; - padding-bottom: 6px; - padding-top: 3px; - text-indent: -24px; -} -#event-list li.event span.event-details::before { - color: #bbb; - display: inline-block; - font-family: FontAwesome; - margin-right: 9px; - text-align: center; - text-indent: 0; - width: 14px; -} -#event-list li.event span.event-details.event-location::before { - content: '\f041'; -} -#event-list li.event span.event-details.event-duration::before { - content: '\f017'; -} -#event-list li.event-past { - background: #fcfcfc; - padding: 15px 0 15px 10px; -} -#event-list li.event-past > * { - opacity: 0.9; -} -#event-list li.event-past h2.event-summary { - color: #bbb; -} -#event-list li.event-past h2.event-summary::before { - color: #dfdfdf; -} -#event-list li.event-now { - background: #222; - color: #fff; - padding: 15px 0 15px 10px; -} -#event-list li.event-now h2.event-summary::before { - animation: dot-flash 1s alternate infinite ease-in-out; - color: #fff; -} -#event-list li.event-now * { - color: #fff !important; -} -#event-list li.event-future { - background: #222; - color: #fff; - padding: 15px 0 15px 10px; -} -#event-list li.event-future h2.event-summary::before { - animation: dot-flash 1s alternate infinite ease-in-out; - color: #fff; -} -#event-list li.event-future * { - color: #fff !important; -} -@-moz-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@-webkit-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@-o-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -ul.breadcrumb { - font-size: 0.75em; - list-style: none; - margin: 1em 0; - padding: 0 2em; - text-align: center; -} -ul.breadcrumb li { - display: inline; -} -ul.breadcrumb li + li::before { - content: '/\00a0'; - font-weight: normal; - padding: 0.5em; -} -ul.breadcrumb li + li:last-child { - font-weight: bold; -} -.tag-cloud { - text-align: center; -} -.tag-cloud a { - display: inline-block; - margin: 10px; -} -.tag-cloud a:hover { - color: #222 !important; -} -.header { - margin: 0 auto; - position: relative; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .header { - width: 1160px; - } -} -@media (min-width: 1600px) { - .header { - width: 73%; - } -} -@media (max-width: 991px) { - .header { - width: auto; - } -} -.header-inner { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - overflow: hidden; - padding: 0; - position: absolute; - top: 0; - width: 240px; -} -@media (min-width: 1200px) { - .container .header-inner { - width: 240px; - } -} -@media (max-width: 991px) { - .header-inner { - border-radius: initial; - position: relative; - width: auto; - } -} -.main::before, -.main::after { - content: ' '; - display: table; -} -.main::after { - clear: both; -} -@media (max-width: 991px) { - .container .main-inner { - width: auto; - } -} -.content-wrap { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - box-sizing: border-box; - float: right; - min-height: 700px; - padding: 40px; - width: calc(100% - 252px); -} -@media (min-width: 768px) and (max-width: 991px) { - .content-wrap { - border-radius: initial; - padding: 20px; - width: 100%; - } -} -@media (max-width: 767px) { - .content-wrap { - border-radius: initial; - min-height: auto; - padding: 20px; - width: 100%; - } -} -.sidebar { - background: #eee; - box-shadow: none; - float: left; - position: static; - width: 240px; -} -@media (max-width: 991px) { - .sidebar { - display: none; - } -} -.sidebar-toggle { - display: none; -} -.footer-inner { - padding-left: 260px; -} -@media (max-width: 991px) { - .footer-inner { - padding: 0; - width: auto; - } -} -.back-to-top { - left: auto; - right: 30px; -} -@media (max-width: 991px) { - .back-to-top { - right: 20px; - } -} -.site-brand-container { - position: relative; -} -.site-meta { - background: #222; - color: #fff; - padding: 20px 0; -} -@media (max-width: 991px) { - .site-meta { - box-shadow: 0 0 16px rgba(0,0,0,0.5); - } -} -.brand { - background: none; - padding: 0; -} -.brand:hover { - color: #fff; -} -.site-subtitle { - font-weight: initial; - margin: 10px 10px 0; -} -.custom-logo-image { - margin-top: 20px; -} -@media (max-width: 991px) { - .custom-logo-image { - display: none; - } -} -.site-nav-toggle { - left: 20px; - top: 50%; - transform: translateY(-50%); -} -@media (min-width: 768px) and (max-width: 991px) { - .site-nav-toggle { - display: block; - } -} -.site-nav { - border-top: none; -} -@media (min-width: 768px) and (max-width: 991px) { - .site-nav { - display: none; - } -} -.menu-item-active a, -.menu .menu-item a:hover, -.menu .menu-item span.exturl:hover { - background: #f9f9f9; - border-bottom-color: #fff; -} -.menu .menu-item { - display: block; - margin: 0; -} -.menu .menu-item a, -.menu .menu-item span.exturl { - box-sizing: border-box; - line-height: inherit; - padding: 5px 20px; - position: relative; - text-align: left; - transition-property: background-color; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -@media (hover: none) { - .menu .menu-item a:hover, - .menu .menu-item span.exturl:hover { - background: none; - } -} -.menu .menu-item .badge { - background-color: #ccc; - border-radius: 10px; - color: #fff; - display: inline-block; - float: right; - font-weight: 700; - line-height: 1; - margin: 0.35em 0 0 0; - padding: 2px 5px; - text-align: center; - text-shadow: 1px 1px 0 rgba(0,0,0,0.1); - vertical-align: middle; - white-space: nowrap; -} -.menu .menu-item br { - display: none; -} -.btn-bar { - background-color: #fff; -} -.sub-menu { - background: #fff; - border-bottom: 1px solid #ddd; - margin: 0; - padding: 6px 0; -} -.sub-menu .menu-item { - display: inline-block; -} -.sub-menu .menu-item a, -.sub-menu .menu-item span.exturl { - margin: 5px 10px; - padding: initial; -} -.sub-menu .menu-item a:hover, -.sub-menu .menu-item span.exturl:hover { - background: initial; - color: #fc6423; -} -.sub-menu .menu-item-active a { - background: #fff; - border-bottom-color: #fc6423; - color: #fc6423; -} -.sub-menu .menu-item-active a:hover { - background: #fff; - border-bottom-color: #fc6423; -} -.sidebar { - bottom: auto; - right: auto; -} -.sidebar a, -.sidebar span.exturl { - color: #555; -} -.sidebar a:hover, -.sidebar span.exturl:hover { - border-bottom-color: #222; - color: #222; -} -.sidebar-inner { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - box-sizing: border-box; - color: #555; - width: 240px; - opacity: 0; -} -.sidebar-inner.affix { - position: fixed; - top: 12px; -} -.sidebar-inner.affix-bottom { - position: absolute; -} -.site-author::before, -.site-author::after { - content: ' '; - display: table; -} -.site-author::after { - clear: both; -} -.site-state-item { - padding: 0 10px; -} -.feed-link, -.chat { - border-bottom: 1px dotted #ccc; - border-top: 1px dotted #ccc; - text-align: center; -} -.feed-link a, -.chat a { - border: 0; - color: #fc6423; - display: block; -} -.feed-link a:hover, -.chat a:hover { - background: none; - border: 0; - color: #e34603; -} -.feed-link a:hover .fa, -.chat a:hover .fa { - color: #e34603; -} -.links-of-author { - display: flex; - flex-wrap: wrap; - justify-content: center; -} -.links-of-author-item { - margin: 5px 0 0; - width: 50%; -} -.links-of-author-item a, -.links-of-author-item span.exturl { - box-sizing: border-box; - display: inline-block; - margin-bottom: 0; - margin-right: 0; - max-width: 216px; - overflow: hidden; - padding: 0 5px; - text-overflow: ellipsis; - white-space: nowrap; -} -.links-of-author-item a, -.links-of-author-item span.exturl { - border-bottom: none; - display: block; - text-decoration: none; -} -.links-of-author-item a::before, -.links-of-author-item span.exturl::before { - display: none; -} -.links-of-author-item a:hover, -.links-of-author-item span.exturl:hover { - background: #eee; - border-radius: 4px; -} -.links-of-author-item .fa { - margin-right: 2px; -} -.links-of-blogroll { - padding: 3px 0 0; - text-align: center; -} -.links-of-blogroll-item { - padding: 0; -} -.content-wrap { - background: initial; - border-radius: initial; - box-shadow: initial; - padding: initial; -} -.post-block { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - padding: 40px; -} -#posts > article + article .post-block { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin-top: 12px; -} -.comments { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin: auto; - margin-top: 12px; - padding: 40px; -} -.tabs-comment { - margin-top: 1em; -} -.posts-expand { - padding-top: initial; -} -.posts-expand .post-title-link { - line-height: inherit; -} -.post-nav-divider { - width: 4%; -} -.post-nav-item { - width: 48%; -} -.post-eof { - display: none; -} -.pagination { - background: #fff; - border-radius: initial; - border-top: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin: 12px 0 0; - padding: 10px 0 10px; -} -.pagination .prev, -.pagination .next, -.pagination .page-number { - margin-bottom: initial; - top: initial; -} -.main { - padding-bottom: initial; -} -.footer { - bottom: auto; -} -.sub-menu { - border-bottom: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); -} -.sub-menu + #content > #posts .post-block { - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin-top: 12px; -} -@media (min-width: 768px) and (max-width: 991px) { - .sub-menu + #content > #posts .post-block { - margin-top: 10px; - } -} -@media (max-width: 767px) { - .sub-menu + #content > #posts .post-block { - margin-top: 8px; - } -} -.post-body h1, -.post-body h2 { - border-bottom: 1px solid #eee; -} -.post-body h3 { - border-bottom: 1px dotted #eee; -} -@media (min-width: 768px) and (max-width: 991px) { - .content-wrap { - padding: 10px; - } - .posts-expand { - margin: initial; - } - .posts-expand .post-button { - margin-top: 20px; - } - .post-block { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - padding: 20px; - } - #posts > article + article .post-block { - margin-top: 10px; - } - .comments { - margin-top: 10px; - padding: 10px 20px; - } - .pagination { - margin: 10px 0 0; - } -} -@media (max-width: 767px) { - .content-wrap { - padding: 8px; - } - .posts-expand { - margin: initial; - } - .posts-expand .post-button { - margin: 12px 0; - } - .post-block { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - min-height: auto; - padding: 12px; - } - #posts > article + article .post-block { - margin-top: 8px; - } - .comments { - margin-top: 8px; - padding: 10px 12px; - } - .pagination { - margin: 8px 0 0; - } -} diff --git a/images/algolia_logo.svg b/images/algolia_logo.svg deleted file mode 100644 index 4702423..0000000 --- a/images/algolia_logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/images/apple-touch-icon-next.png b/images/apple-touch-icon-next.png deleted file mode 100644 index 86a0d1d..0000000 Binary files a/images/apple-touch-icon-next.png and /dev/null differ diff --git a/images/avatar.gif b/images/avatar.gif deleted file mode 100644 index 28411fd..0000000 Binary files a/images/avatar.gif and /dev/null differ diff --git a/images/cc-by-nc-nd.svg b/images/cc-by-nc-nd.svg deleted file mode 100644 index 79a4f2e..0000000 --- a/images/cc-by-nc-nd.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-nc-sa.svg b/images/cc-by-nc-sa.svg deleted file mode 100644 index bf6bc26..0000000 --- a/images/cc-by-nc-sa.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-nc.svg b/images/cc-by-nc.svg deleted file mode 100644 index 3697349..0000000 --- a/images/cc-by-nc.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-nd.svg b/images/cc-by-nd.svg deleted file mode 100644 index 934c61e..0000000 --- a/images/cc-by-nd.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-sa.svg b/images/cc-by-sa.svg deleted file mode 100644 index 463276a..0000000 --- a/images/cc-by-sa.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by.svg b/images/cc-by.svg deleted file mode 100644 index 4bccd14..0000000 --- a/images/cc-by.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-zero.svg b/images/cc-zero.svg deleted file mode 100644 index 0f86639..0000000 --- a/images/cc-zero.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/favicon-16x16-next.png b/images/favicon-16x16-next.png deleted file mode 100644 index de8c5d3..0000000 Binary files a/images/favicon-16x16-next.png and /dev/null differ diff --git a/images/favicon-32x32-next.png b/images/favicon-32x32-next.png deleted file mode 100644 index e02f5f4..0000000 Binary files a/images/favicon-32x32-next.png and /dev/null differ diff --git a/images/logo.svg b/images/logo.svg deleted file mode 100644 index cbb3937..0000000 --- a/images/logo.svg +++ /dev/null @@ -1,23 +0,0 @@ - -image/svg+xml diff --git a/images/pasted-0.png b/images/pasted-0.png deleted file mode 100644 index ee68c7d..0000000 Binary files a/images/pasted-0.png and /dev/null differ diff --git a/images/quote-l.svg b/images/quote-l.svg deleted file mode 100644 index 6dd94a4..0000000 --- a/images/quote-l.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - diff --git a/images/quote-r.svg b/images/quote-r.svg deleted file mode 100644 index 312b64d..0000000 --- a/images/quote-r.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/index.html b/index.html deleted file mode 100644 index 3d12735..0000000 --- a/index.html +++ /dev/null @@ -1,1604 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 硬件联盟博客 - - - - - - - - - - - - - - -
-
- - - - -
- - 0% -
- - -
-
-
- - -
- -
-
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

解决ubuntu关机卡界面90s

注意了,这个不是系统的问题,是配置的问题。网上有很多其他的方案,下载watchdog啊,或者一行命令什么的,其实只需要改一下配置文件就可以了。

sudo vim /etc/systemd/system.conf

可以使用vim也可以使用ubuntu自带的gedit,用vim的话需要先apt安装一下。

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

X86架构通用寄存器只有8个,其余为不可直接操作寄存器。在叙述寄存器单元之前,我们先将CPU内部分为三大块:

控制单元(Control Unit)

程序计数器 PC(Program Counter)、指令寄存器 IR(Instruction Register)、指令译码器 ID(Instruction Decoder)和操作控制器 OC(Operation Controller)。

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

Windows10蓝屏

-

蓝屏死机(英语:Blue Screen of Death,缩写为:BSoD)指的是微软Windows 操作系统在无法从一个系统错误中恢复过来时所显示的屏幕图像。

-

先抛出来解决方案:

    -
  • 卸载最近一次的Windows更新,并尝试加载最近一次正常启动时的注册表
  • -
  • 卸载最近安装的驱动程序或者尝试升级/降级该驱动
  • -
  • 移除最近添加的硬件设备
  • -
  • 将QQ更换为Windows Store的UWP版本并移除所有第三方杀毒软件
  • -
  • 运行sfc /scannow以检查系统镜像
  • -
  • 重装系统
  • -
  • 重买电脑
  • -
- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

One issue!

据说在学习一门语言的时候输出Hello World!会带来好运。

哪怎么输出Hello World呢?难道就是像下面这样:

1
2
3
4
5
6
#include<stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -
-

我来砸场了!Windows在1903更新中实现了Python开箱即用的体验,你只需要在cmd中输入python3,系统便会引导你去Store下载Python依赖包。QqGiQS.jpg

-

1.自己的碎碎念

python现在作为很火的语言也越来越受大家欢迎,对有经验的程序猿还好,但对新手程序猿来说(尤其是选择恐惧症)来说,安装python恐怕是一件难事,今天就分享给大家我安装python的方法

2.环境需求

win10

-

python版本:python3.7

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

前言

毋庸置疑的是,Windows是家用平台的巨头,Linux是服务器端的主流系统,而在实际生产中时常遇到需要使用二者的情况,而本篇文章正是讨论如何将二者安装于同一硬件基础上。其中包括既传统的双系统,虚拟机系统,又涉及Windows 10的新特性,WSL系统。

双系统

基于硬件的双系统,此处概念的Linux完全独立于windows。优点是二者独立,互不干扰,且系统完整,不会出现诡异的问题,系统资源也能得到完整利用。

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

缘由&要求

Google大法好,Photos无限容量备份照片!

当然,需要一台位于境外的VPS,从iCloud上拉资源,再上传到Google Drive。

从iCloud上下载

由于Apple没有开放iCloud的API,于是关于iCloud下载的第三方程序少之又少。于是我找到了这个icloudpd

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

首先声明,我只是感兴趣于iso内的安装文件,并无他意,这篇文章也仅仅代表我个人的观点与立场。一个有意思的地方是,安装文件里的文本相当一部分编码采用的是扩展集UTF-16而非UTF-8或GBK。

概览

我的系统是政府精简版1709,使用rufus烧录,大体上精简了一部分次要功能。
ZgubU1.png

我的U盘位于/run/media/raincorn/WIN10_CMGE/,该目录下有5个文件夹以及4个文件。

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

初衷

因为学校留作业要交Github上,但又很厌烦在页面上点来点去的方法,所以写下命令行git提交文件的方法供大家使用,我个人认为如果会用的话是能提升工作效率的。

安装git

我假设你是在Windows系统上

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - -
- - - - - -
-

- - - -

- - -
- - - - -
- - -

记录一下这次的博客迁移

因为以前的懒和图方便,把图床和博客的服务器都放在了github上,白嫖别人的资源。

但事实证明了白嫖不是永久的

image

在前几天就得到了惨痛的教训,因为图片放在github上,所以全部图片加载不出来,这也导致很多博客本来简单易懂,这一来,变得难的离谱,本来我还想等着等着他恢复凑合着用吧。

但当我一天想更新一篇文章的时候!!!!!!

- - -
- - Read more » - -
- - - - -
- - - - -
-
- -
-
- - - -
- - -
- - - - - -
- - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/js/algolia-search.js b/js/algolia-search.js deleted file mode 100644 index 07966d8..0000000 --- a/js/algolia-search.js +++ /dev/null @@ -1,109 +0,0 @@ -/* global instantsearch, CONFIG */ - -window.addEventListener('DOMContentLoaded', () => { - const algoliaSettings = CONFIG.algolia; - - let search = instantsearch({ - appId : algoliaSettings.appID, - apiKey : algoliaSettings.apiKey, - indexName : algoliaSettings.indexName, - searchFunction: helper => { - let searchInput = document.querySelector('#search-input input'); - if (searchInput.value) { - helper.search(); - } - } - }); - - window.pjax && search.on('render', () => { - window.pjax.refresh(document.getElementById('algolia-hits')); - }); - - // Registering Widgets - [ - instantsearch.widgets.searchBox({ - container : '#search-input', - placeholder: algoliaSettings.labels.input_placeholder - }), - - instantsearch.widgets.stats({ - container: '#algolia-stats', - templates: { - body: data => { - let stats = algoliaSettings.labels.hits_stats - .replace(/\$\{hits}/, data.nbHits) - .replace(/\$\{time}/, data.processingTimeMS); - return `${stats} - - Algolia - -
`; - } - } - }), - - instantsearch.widgets.hits({ - container : '#algolia-hits', - hitsPerPage: algoliaSettings.hits.per_page || 10, - templates : { - item: data => { - let link = data.permalink ? data.permalink : CONFIG.root + data.path; - return `${data._highlightResult.title.value}`; - }, - empty: data => { - return `
- ${algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query)} -
`; - } - }, - cssClasses: { - item: 'algolia-hit-item' - } - }), - - instantsearch.widgets.pagination({ - container : '#algolia-pagination', - scrollTo : false, - showFirstLast: false, - labels : { - first : '', - last : '', - previous: '', - next : '' - }, - cssClasses: { - root : 'pagination', - item : 'pagination-item', - link : 'page-number', - active : 'current', - disabled: 'disabled-item' - } - }) - ].forEach(search.addWidget, search); - - search.start(); - - // Handle and trigger popup window - document.querySelector('.popup-trigger').addEventListener('click', () => { - document.body.style.overflow = 'hidden'; - document.querySelector('.search-pop-overlay').style.display = 'block'; - document.querySelector('.popup').style.display = 'block'; - document.querySelector('#search-input input').focus(); - }); - - // Monitor main search box - const onPopupClose = () => { - document.body.style.overflow = ''; - document.querySelector('.search-pop-overlay').style.display = 'none'; - document.querySelector('.popup').style.display = 'none'; - }; - - document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose); - document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); - window.addEventListener('pjax:success', onPopupClose); - window.addEventListener('keyup', event => { - if (event.which === 27) { - onPopupClose(); - } - }); -}); diff --git a/js/bookmark.js b/js/bookmark.js deleted file mode 100644 index c36ca44..0000000 --- a/js/bookmark.js +++ /dev/null @@ -1,59 +0,0 @@ -/* global CONFIG */ - -window.addEventListener('DOMContentLoaded', () => { - 'use strict'; - - var doSaveScroll = () => { - localStorage.setItem('bookmark' + location.pathname, window.scrollY); - }; - - var scrollToMark = () => { - var top = localStorage.getItem('bookmark' + location.pathname); - top = parseInt(top, 10); - // If the page opens with a specific hash, just jump out - if (!isNaN(top) && location.hash === '') { - // Auto scroll to the position - window.anime({ - targets : [document.documentElement, document.body], - duration : 200, - easing : 'linear', - scrollTop: top - }); - } - }; - // Register everything - var init = function(trigger) { - // Create a link element - var link = document.querySelector('.book-mark-link'); - // Scroll event - window.addEventListener('scroll', () => { - window.scrollY === 0 ? link.classList.add('book-mark-link-fixed') : link.classList.remove('book-mark-link-fixed'); - }); - // Register beforeunload event when the trigger is auto - if (trigger === 'auto') { - // Register beforeunload event - window.addEventListener('beforeunload', doSaveScroll); - window.addEventListener('pjax:send', doSaveScroll); - } - // Save the position by clicking the icon - link.addEventListener('click', event => { - event.preventDefault(); - doSaveScroll(); - window.anime({ - targets : link, - duration: 200, - easing : 'linear', - top : -30, - complete: () => { - setTimeout(() => { - link.style.top = ''; - }, 400); - } - }); - }); - scrollToMark(); - window.addEventListener('pjax:success', scrollToMark); - }; - - init(CONFIG.bookmark.save); -}); diff --git a/js/local-search.js b/js/local-search.js deleted file mode 100644 index e2bc55e..0000000 --- a/js/local-search.js +++ /dev/null @@ -1,319 +0,0 @@ -/* global CONFIG */ - -window.addEventListener('DOMContentLoaded', () => { - // Popup Window - let isfetched = false; - let datas; - let isXml = true; - // Search DB path - let searchPath = CONFIG.path; - if (searchPath.length === 0) { - searchPath = 'search.xml'; - } else if (/json$/i.test(searchPath)) { - isXml = false; - } - const path = CONFIG.root + searchPath; - const input = document.getElementById('search-input'); - const resultContent = document.getElementById('search-result'); - - // Ref: https://github.com/ForbesLindesay/unescape-html - const unescapeHtml = html => { - return String(html) - .replace(/"/g, '"') - .replace(/'/g, '\'') - .replace(/:/g, ':') - // Replace all the other &#x; chars - .replace(/&#(\d+);/g, (m, p) => { - return String.fromCharCode(p); - }) - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/&/g, '&'); - }; - - const getIndexByWord = (word, text, caseSensitive) => { - let wordLen = word.length; - if (wordLen === 0) { - return []; - } - let startPosition = 0; - let position = []; - let index = []; - if (!caseSensitive) { - text = text.toLowerCase(); - word = word.toLowerCase(); - } - while ((position = text.indexOf(word, startPosition)) > -1) { - index.push({ - position: position, - word : word - }); - startPosition = position + wordLen; - } - return index; - }; - - // Merge hits into slices - const mergeIntoSlice = (start, end, index, searchText) => { - let item = index[index.length - 1]; - let position = item.position; - let word = item.word; - let hits = []; - let searchTextCountInSlice = 0; - while (position + word.length <= end && index.length !== 0) { - if (word === searchText) { - searchTextCountInSlice++; - } - hits.push({ - position: position, - length : word.length - }); - let wordEnd = position + word.length; - - // Move to next position of hit - index.pop(); - while (index.length !== 0) { - item = index[index.length - 1]; - position = item.position; - word = item.word; - if (wordEnd > position) { - index.pop(); - } else { - break; - } - } - } - return { - hits : hits, - start : start, - end : end, - searchTextCount: searchTextCountInSlice - }; - }; - - // Highlight title and content - const highlightKeyword = (text, slice) => { - let result = ''; - let prevEnd = slice.start; - slice.hits.forEach(hit => { - result += text.substring(prevEnd, hit.position); - let end = hit.position + hit.length; - result += `${text.substring(hit.position, end)}`; - prevEnd = end; - }); - result += text.substring(prevEnd, slice.end); - return result; - }; - - const inputEventFunction = () => { - let searchText = input.value.trim().toLowerCase(); - let keywords = searchText.split(/[-\s]+/); - if (keywords.length > 1) { - keywords.push(searchText); - } - let resultItems = []; - if (searchText.length > 0) { - // Perform local searching - datas.forEach(data => { - // Only match articles with not empty titles - if (!data.title) { - return; - } - let searchTextCount = 0; - let title = data.title.trim(); - let titleInLowerCase = title.toLowerCase(); - let content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : ''; - if (CONFIG.localsearch.unescape) { - content = unescapeHtml(content); - } - let contentInLowerCase = content.toLowerCase(); - let articleUrl = decodeURIComponent(data.url).replace(/\/{2,}/g, '/'); - let indexOfTitle = []; - let indexOfContent = []; - keywords.forEach(keyword => { - indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false)); - indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false)); - }); - - // Show search results - if (indexOfTitle.length > 0 || indexOfContent.length > 0) { - let hitCount = indexOfTitle.length + indexOfContent.length; - // Sort index by position of keyword - [indexOfTitle, indexOfContent].forEach(index => { - index.sort((itemLeft, itemRight) => { - if (itemRight.position !== itemLeft.position) { - return itemRight.position - itemLeft.position; - } - return itemLeft.word.length - itemRight.word.length; - }); - }); - - let slicesOfTitle = []; - if (indexOfTitle.length !== 0) { - let tmp = mergeIntoSlice(0, title.length, indexOfTitle, searchText); - searchTextCount += tmp.searchTextCountInSlice; - slicesOfTitle.push(tmp); - } - - let slicesOfContent = []; - while (indexOfContent.length !== 0) { - let item = indexOfContent[indexOfContent.length - 1]; - let position = item.position; - let word = item.word; - // Cut out 100 characters - let start = position - 20; - let end = position + 80; - if (start < 0) { - start = 0; - } - if (end < position + word.length) { - end = position + word.length; - } - if (end > content.length) { - end = content.length; - } - let tmp = mergeIntoSlice(start, end, indexOfContent, searchText); - searchTextCount += tmp.searchTextCountInSlice; - slicesOfContent.push(tmp); - } - - // Sort slices in content by search text's count and hits' count - slicesOfContent.sort((sliceLeft, sliceRight) => { - if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) { - return sliceRight.searchTextCount - sliceLeft.searchTextCount; - } else if (sliceLeft.hits.length !== sliceRight.hits.length) { - return sliceRight.hits.length - sliceLeft.hits.length; - } - return sliceLeft.start - sliceRight.start; - }); - - // Select top N slices in content - let upperBound = parseInt(CONFIG.localsearch.top_n_per_article, 10); - if (upperBound >= 0) { - slicesOfContent = slicesOfContent.slice(0, upperBound); - } - - let resultItem = ''; - - if (slicesOfTitle.length !== 0) { - resultItem += `
  • ${highlightKeyword(title, slicesOfTitle[0])}`; - } else { - resultItem += `
  • ${title}`; - } - - slicesOfContent.forEach(slice => { - resultItem += `

    ${highlightKeyword(content, slice)}...

    `; - }); - - resultItem += '
  • '; - resultItems.push({ - item : resultItem, - searchTextCount: searchTextCount, - hitCount : hitCount, - id : resultItems.length - }); - } - }); - } - if (keywords.length === 1 && keywords[0] === '') { - resultContent.innerHTML = '
    '; - } else if (resultItems.length === 0) { - resultContent.innerHTML = '
    '; - } else { - resultItems.sort((resultLeft, resultRight) => { - if (resultLeft.searchTextCount !== resultRight.searchTextCount) { - return resultRight.searchTextCount - resultLeft.searchTextCount; - } else if (resultLeft.hitCount !== resultRight.hitCount) { - return resultRight.hitCount - resultLeft.hitCount; - } - return resultRight.id - resultLeft.id; - }); - let searchResultList = ''; - resultContent.innerHTML = searchResultList; - window.pjax && window.pjax.refresh(resultContent); - } - }; - - const fetchData = callback => { - fetch(path) - .then(response => response.text()) - .then(res => { - // Get the contents from search data - isfetched = true; - datas = isXml ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map(item => { - return { - title : item.querySelector('title').innerHTML, - content: item.querySelector('content').innerHTML, - url : item.querySelector('url').innerHTML - }; - }) : JSON.parse(res); - - // Remove loading animation - document.querySelector('.search-pop-overlay').innerHTML = ''; - document.body.style.overflow = ''; - - if (callback) { - callback(); - } - }); - }; - - if (CONFIG.localsearch.preload) { - fetchData(); - } - - const proceedSearch = () => { - document.body.style.overflow = 'hidden'; - document.querySelector('.search-pop-overlay').style.display = 'block'; - document.querySelector('.popup').style.display = 'block'; - document.getElementById('search-input').focus(); - }; - - // Search function - const searchFunc = () => { - document.querySelector('.search-pop-overlay').style.display = ''; - document.querySelector('.search-pop-overlay').innerHTML = '
    '; - fetchData(proceedSearch); - }; - - if (CONFIG.localsearch.trigger === 'auto') { - input.addEventListener('input', inputEventFunction); - } else { - document.querySelector('.search-icon').addEventListener('click', inputEventFunction); - input.addEventListener('keypress', event => { - if (event.keyCode === 13) { - inputEventFunction(); - } - }); - } - - // Handle and trigger popup window - document.querySelector('.popup-trigger').addEventListener('click', event => { - event.stopPropagation(); - if (isfetched === false) { - searchFunc(); - } else { - proceedSearch(); - } - }); - - // Monitor main search box - const onPopupClose = () => { - document.body.style.overflow = ''; - document.querySelector('.search-pop-overlay').style.display = 'none'; - document.querySelector('.popup').style.display = 'none'; - }; - - document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose); - document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); - window.addEventListener('pjax:success', onPopupClose); - window.addEventListener('keyup', event => { - if (event.which === 27) { - onPopupClose(); - } - }); -}); diff --git a/js/motion.js b/js/motion.js deleted file mode 100644 index 999b9d1..0000000 --- a/js/motion.js +++ /dev/null @@ -1,169 +0,0 @@ -/* global NexT, CONFIG, Velocity */ - -NexT.motion = {}; - -NexT.motion.integrator = { - queue : [], - cursor: -1, - init : function() { - this.queue = []; - this.cursor = -1; - return this; - }, - add: function(fn) { - this.queue.push(fn); - return this; - }, - next: function() { - this.cursor++; - var fn = this.queue[this.cursor]; - typeof fn === 'function' && fn(NexT.motion.integrator); - }, - bootstrap: function() { - this.next(); - } -}; - -NexT.motion.middleWares = { - logo: function(integrator) { - var sequence = []; - var brand = document.querySelector('.brand'); - var image = document.querySelector('.custom-logo-image'); - var title = document.querySelector('.site-title'); - var subtitle = document.querySelector('.site-subtitle'); - var logoLineTop = document.querySelector('.logo-line-before i'); - var logoLineBottom = document.querySelector('.logo-line-after i'); - - brand && sequence.push({ - e: brand, - p: {opacity: 1}, - o: {duration: 200} - }); - - function getMistLineSettings(element, translateX) { - return { - e: element, - p: {translateX: translateX}, - o: { - duration : 500, - sequenceQueue: false - } - }; - } - - function pushImageToSequence() { - sequence.push({ - e: image, - p: {opacity: 1, top: 0}, - o: {duration: 200} - }); - } - - NexT.utils.isMist() && logoLineTop && logoLineBottom - && sequence.push( - getMistLineSettings(logoLineTop, '100%'), - getMistLineSettings(logoLineBottom, '-100%') - ); - - NexT.utils.isMuse() && image && pushImageToSequence(); - - title && sequence.push({ - e: title, - p: {opacity: 1, top: 0}, - o: {duration: 200} - }); - - subtitle && sequence.push({ - e: subtitle, - p: {opacity: 1, top: 0}, - o: {duration: 200} - }); - - (NexT.utils.isPisces() || NexT.utils.isGemini()) && image && pushImageToSequence(); - - if (sequence.length > 0) { - sequence[sequence.length - 1].o.complete = function() { - integrator.next(); - }; - Velocity.RunSequence(sequence); - } else { - integrator.next(); - } - - if (CONFIG.motion.async) { - integrator.next(); - } - }, - - menu: function(integrator) { - - Velocity(document.querySelectorAll('.menu-item'), 'transition.slideDownIn', { - display : null, - duration: 200, - complete: function() { - integrator.next(); - } - }); - - if (CONFIG.motion.async) { - integrator.next(); - } - }, - - postList: function(integrator) { - - var postBlock = document.querySelectorAll('.post-block, .pagination, .comments'); - var postBlockTransition = CONFIG.motion.transition.post_block; - var postHeader = document.querySelectorAll('.post-header'); - var postHeaderTransition = CONFIG.motion.transition.post_header; - var postBody = document.querySelectorAll('.post-body'); - var postBodyTransition = CONFIG.motion.transition.post_body; - var collHeader = document.querySelectorAll('.collection-header'); - var collHeaderTransition = CONFIG.motion.transition.coll_header; - var hasPost = postBlock.length > 0; - - if (hasPost) { - var postMotionOptions = window.postMotionOptions || { - stagger : 100, - drag : true, - complete: function() { - integrator.next(); - } - }; - - if (CONFIG.motion.transition.post_block) { - Velocity(postBlock, 'transition.' + postBlockTransition, postMotionOptions); - } - if (CONFIG.motion.transition.post_header) { - Velocity(postHeader, 'transition.' + postHeaderTransition, postMotionOptions); - } - if (CONFIG.motion.transition.post_body) { - Velocity(postBody, 'transition.' + postBodyTransition, postMotionOptions); - } - if (CONFIG.motion.transition.coll_header) { - Velocity(collHeader, 'transition.' + collHeaderTransition, postMotionOptions); - } - } - if (NexT.utils.isPisces() || NexT.utils.isGemini()) { - integrator.next(); - } - }, - - sidebar: function(integrator) { - NexT.utils.updateSidebarPosition(); - var sidebarAffix = document.querySelector('.sidebar-inner'); - var sidebarAffixTransition = CONFIG.motion.transition.sidebar; - // Only for Pisces | Gemini. - if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) { - Velocity(sidebarAffix, 'transition.' + sidebarAffixTransition, { - display : null, - duration: 200, - complete: function() { - // After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini. - sidebarAffix.style.transform = 'initial'; - } - }); - } - integrator.next(); - } -}; diff --git a/js/next-boot.js b/js/next-boot.js deleted file mode 100644 index 48bda0d..0000000 --- a/js/next-boot.js +++ /dev/null @@ -1,114 +0,0 @@ -/* global NexT, CONFIG, Velocity */ - -NexT.boot = {}; - -NexT.boot.registerEvents = function() { - - NexT.utils.registerScrollPercent(); - NexT.utils.registerCanIUseTag(); - - // Mobile top menu bar. - document.querySelector('.site-nav-toggle button').addEventListener('click', () => { - var siteNav = document.querySelector('.site-nav'); - var ON_CLASS_NAME = 'site-nav-on'; - var animateAction = siteNav.classList.contains(ON_CLASS_NAME) ? 'slideUp' : 'slideDown'; - - if (typeof Velocity === 'function') { - Velocity(siteNav, animateAction, { - duration: 200, - complete: function() { - siteNav.classList.toggle(ON_CLASS_NAME); - } - }); - } else { - siteNav.classList.toggle(ON_CLASS_NAME); - } - }); - - var TAB_ANIMATE_DURATION = 200; - document.querySelectorAll('.sidebar-nav li').forEach((element, index) => { - element.addEventListener('click', event => { - var item = event.currentTarget; - var activeTabClassName = 'sidebar-nav-active'; - var activePanelClassName = 'sidebar-panel-active'; - if (item.classList.contains(activeTabClassName)) return; - - var targets = document.querySelectorAll('.sidebar-panel'); - var target = targets[index]; - var currentTarget = targets[1 - index]; - window.anime({ - targets : currentTarget, - duration: TAB_ANIMATE_DURATION, - easing : 'linear', - opacity : 0, - complete: () => { - // Prevent adding TOC to Overview if Overview was selected when close & open sidebar. - currentTarget.classList.remove(activePanelClassName); - target.style.opacity = 0; - target.classList.add(activePanelClassName); - window.anime({ - targets : target, - duration: TAB_ANIMATE_DURATION, - easing : 'linear', - opacity : 1 - }); - } - }); - - [...item.parentNode.children].forEach(element => { - element.classList.remove(activeTabClassName); - }); - item.classList.add(activeTabClassName); - }); - }); - - window.addEventListener('resize', NexT.utils.initSidebarDimension); - - window.addEventListener('hashchange', () => { - var tHash = location.hash; - if (tHash !== '' && !tHash.match(/%\S{2}/)) { - var target = document.querySelector(`.tabs ul.nav-tabs li a[href="http://github.com/$%7BtHash%7D"]`); - target && target.click(); - } - }); -}; - -NexT.boot.refresh = function() { - - /** - * Register JS handlers by condition option. - * Need to add config option in Front-End at 'layout/_partials/head.swig' file. - */ - CONFIG.fancybox && NexT.utils.wrapImageWithFancyBox(); - CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img'); - CONFIG.lazyload && window.lozad('.post-body img').observe(); - CONFIG.pangu && window.pangu.spacingPage(); - - CONFIG.exturl && NexT.utils.registerExtURL(); - CONFIG.copycode.enable && NexT.utils.registerCopyCode(); - NexT.utils.registerTabsTag(); - NexT.utils.registerActiveMenuItem(); - NexT.utils.registerSidebarTOC(); - NexT.utils.wrapTableWithBox(); - NexT.utils.registerVideoIframe(); -}; - -NexT.boot.motion = function() { - // Define Motion Sequence & Bootstrap Motion. - if (CONFIG.motion.enable) { - NexT.motion.integrator - .add(NexT.motion.middleWares.logo) - .add(NexT.motion.middleWares.menu) - .add(NexT.motion.middleWares.postList) - .add(NexT.motion.middleWares.sidebar) - .bootstrap(); - } else { - NexT.utils.updateSidebarPosition(); - } -}; - -window.addEventListener('DOMContentLoaded', () => { - NexT.boot.registerEvents(); - NexT.boot.refresh(); - NexT.boot.motion(); -}); diff --git a/js/schemes/muse.js b/js/schemes/muse.js deleted file mode 100644 index 8b6056a..0000000 --- a/js/schemes/muse.js +++ /dev/null @@ -1,190 +0,0 @@ -/* global NexT, CONFIG, Velocity */ - -window.addEventListener('DOMContentLoaded', () => { - - var sidebarToggleLines = { - lines: [], - init : function() { - this.lines.forEach(line => { - line.transform('init'); - }); - }, - arrow: function() { - this.lines.forEach(line => { - line.transform('arrow'); - }); - }, - close: function() { - this.lines.forEach(line => { - line.transform('close'); - }); - } - }; - - function SidebarToggleLine(settings) { - this.status = Object.assign({ - init: { - width : '100%', - opacity : 1, - transform: 'rotate(0deg)', - top : 0, - left : 0 - } - }, settings.status); - this.transform = function(status) { - Object.assign(document.querySelector(settings.el).style, this.status[status]); - }; - } - - var isRight = CONFIG.sidebar.position === 'right'; - - sidebarToggleLines.lines = [new SidebarToggleLine({ - el : '.sidebar-toggle-line-first', - status: isRight - ? { - arrow: {width: '50%', transform: 'rotate(-45deg)', top: '2px'}, - close: {width: '100%', transform: 'rotate(-45deg)', top: '5px'} - } : { - arrow: {width: '50%', transform: 'rotate(45deg)', top: '2px', left: '50%'}, - close: {width: '100%', transform: 'rotate(-45deg)', top: '5px', left: '0px'} - } - }), new SidebarToggleLine({ - el : '.sidebar-toggle-line-middle', - status: isRight - ? { - arrow: {width: '90%'}, - close: {opacity: 0} - } : { - arrow: {width: '90%', left: '2px'}, - close: {opacity: 0, left: '0px'} - } - }), new SidebarToggleLine({ - el : '.sidebar-toggle-line-last', - status: isRight - ? { - arrow: {width: '50%', transform: 'rotate(45deg)', top: '-2px'}, - close: {width: '100%', transform: 'rotate(45deg)', top: '-5px'} - } : { - arrow: {width: '50%', transform: 'rotate(-45deg)', top: '-2px', left: '50%'}, - close: {width: '100%', transform: 'rotate(45deg)', top: '-5px', left: '0px'} - } - })]; - - var SIDEBAR_WIDTH = CONFIG.sidebar.width || 320; - var SIDEBAR_DISPLAY_DURATION = 400; - var mousePos = {}; var touchPos = {}; - - var sidebarToggleMotion = { - sidebarEl : document.querySelector('.sidebar'), - isSidebarVisible: false, - init : function() { - sidebarToggleLines.init(); - - window.addEventListener('mousedown', this.mousedownHandler.bind(this)); - window.addEventListener('mouseup', this.mouseupHandler.bind(this)); - document.querySelector('#sidebar-dimmer').addEventListener('click', this.clickHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('click', this.clickHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('mouseenter', this.mouseEnterHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('mouseleave', this.mouseLeaveHandler.bind(this)); - this.sidebarEl.addEventListener('touchstart', this.touchstartHandler.bind(this)); - this.sidebarEl.addEventListener('touchend', this.touchendHandler.bind(this)); - this.sidebarEl.addEventListener('touchmove', event => event.preventDefault()); - window.addEventListener('sidebar:show', this.showSidebar.bind(this)); - window.addEventListener('sidebar:hide', this.hideSidebar.bind(this)); - }, - mousedownHandler: function(event) { - mousePos.X = event.pageX; - mousePos.Y = event.pageY; - }, - mouseupHandler: function(event) { - var deltaX = event.pageX - mousePos.X; - var deltaY = event.pageY - mousePos.Y; - var clickingBlankPart = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)) < 20 && event.target.matches('.main'); - if (this.isSidebarVisible && (clickingBlankPart || event.target.matches('img.medium-zoom-image, .fancybox img'))) { - this.hideSidebar(); - } - }, - clickHandler: function() { - this.isSidebarVisible ? this.hideSidebar() : this.showSidebar(); - }, - mouseEnterHandler: function() { - if (!this.isSidebarVisible) { - sidebarToggleLines.arrow(); - } - }, - mouseLeaveHandler: function() { - if (!this.isSidebarVisible) { - sidebarToggleLines.init(); - } - }, - touchstartHandler: function(event) { - touchPos.X = event.touches[0].clientX; - touchPos.Y = event.touches[0].clientY; - }, - touchendHandler: function(event) { - var deltaX = event.changedTouches[0].clientX - touchPos.X; - var deltaY = event.changedTouches[0].clientY - touchPos.Y; - var effectiveSliding = Math.abs(deltaY) < 20 && ((deltaX > 30 && isRight) || (deltaX < -30 && !isRight)); - if (this.isSidebarVisible && effectiveSliding) { - this.hideSidebar(); - } - }, - showSidebar: function() { - this.isSidebarVisible = true; - this.sidebarEl.classList.add('sidebar-active'); - if (typeof Velocity === 'function') { - Velocity(document.querySelectorAll('.sidebar .motion-element:not(.site-state)'), isRight ? 'transition.slideRightIn' : 'transition.slideLeftIn', { - stagger: 50, - drag : true - }); - Velocity(document.querySelector('.site-state'), isRight ? 'transition.slideRightIn' : 'transition.slideLeftIn', { - stagger: 50, - drag : true, - display: 'flex' - }); - } - - sidebarToggleLines.close(); - NexT.utils.isDesktop() && window.anime(Object.assign({ - targets : document.body, - duration: SIDEBAR_DISPLAY_DURATION, - easing : 'linear' - }, isRight ? { - 'padding-right': SIDEBAR_WIDTH - } : { - 'padding-left': SIDEBAR_WIDTH - })); - }, - hideSidebar: function() { - this.isSidebarVisible = false; - this.sidebarEl.classList.remove('sidebar-active'); - - sidebarToggleLines.init(); - NexT.utils.isDesktop() && window.anime(Object.assign({ - targets : document.body, - duration: SIDEBAR_DISPLAY_DURATION, - easing : 'linear' - }, isRight ? { - 'padding-right': 0 - } : { - 'padding-left': 0 - })); - } - }; - sidebarToggleMotion.init(); - - function updateFooterPosition() { - var containerHeight = document.querySelector('.container').offsetHeight; - var footer = document.getElementById('footer'); - if (footer.classList.contains('footer-fixed')) containerHeight += footer.outerHeight(true); - if (containerHeight < window.innerHeight) { - footer.classList.add('footer-fixed'); - } else { - footer.classList.remove('footer-fixed'); - } - } - - updateFooterPosition(); - window.addEventListener('resize', updateFooterPosition); - window.addEventListener('scroll', updateFooterPosition); -}); diff --git a/js/schemes/pisces.js b/js/schemes/pisces.js deleted file mode 100644 index c75118e..0000000 --- a/js/schemes/pisces.js +++ /dev/null @@ -1,86 +0,0 @@ -/* global NexT, CONFIG */ - -var Affix = { - init: function(element, options) { - this.element = element; - this.offset = options || 0; - this.affixed = null; - this.unpin = null; - this.pinnedOffset = null; - this.checkPosition(); - window.addEventListener('scroll', this.checkPosition.bind(this)); - window.addEventListener('click', this.checkPositionWithEventLoop.bind(this)); - window.matchMedia('(min-width: 992px)').addListener(event => { - if (event.matches) { - this.offset = NexT.utils.getAffixParam(); - this.checkPosition(); - } - }); - }, - getState: function(scrollHeight, height, offsetTop, offsetBottom) { - let scrollTop = window.scrollY; - let targetHeight = window.innerHeight; - if (offsetTop != null && this.affixed === 'top') return scrollTop < offsetTop ? 'top' : false; - if (this.affixed === 'bottom') { - if (offsetTop != null) return this.unpin <= this.element.getBoundingClientRect().top ? false : 'bottom'; - return scrollTop + targetHeight <= scrollHeight - offsetBottom ? false : 'bottom'; - } - let initializing = this.affixed === null; - let colliderTop = initializing ? scrollTop : this.element.getBoundingClientRect().top + scrollTop; - let colliderHeight = initializing ? targetHeight : height; - if (offsetTop != null && scrollTop <= offsetTop) return 'top'; - if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'; - return false; - }, - getPinnedOffset: function() { - if (this.pinnedOffset) return this.pinnedOffset; - this.element.classList.remove('affix-top', 'affix-bottom'); - this.element.classList.add('affix'); - return (this.pinnedOffset = this.element.getBoundingClientRect().top); - }, - checkPositionWithEventLoop() { - setTimeout(this.checkPosition.bind(this), 1); - }, - checkPosition: function() { - if (window.getComputedStyle(this.element).display === 'none') return; - let height = this.element.offsetHeight - CONFIG.sidebarPadding; - let offset = this.offset; - let offsetTop = offset.top; - let offsetBottom = offset.bottom; - let scrollHeight = document.body.scrollHeight; - let affix = this.getState(scrollHeight, height, offsetTop, offsetBottom); - if (this.affixed !== affix) { - if (this.unpin != null) this.element.style.top = ''; - let affixType = 'affix' + (affix ? '-' + affix : ''); - this.affixed = affix; - this.unpin = affix === 'bottom' ? this.getPinnedOffset() : null; - this.element.classList.remove('affix', 'affix-top', 'affix-bottom'); - this.element.classList.add(affixType); - } - if (affix === 'bottom') { - this.element.style.top = scrollHeight - height - offsetBottom + 'px'; - } - } -}; - -NexT.utils.getAffixParam = function() { - const sidebarOffset = CONFIG.sidebar.offset || 12; - - let headerOffset = document.querySelector('.header-inner').offsetHeight + sidebarOffset; - let footer = document.querySelector('#footer'); - let footerInner = document.querySelector('.footer-inner'); - let footerMargin = footer.offsetHeight - footerInner.offsetHeight; - let footerOffset = footer.offsetHeight + footerMargin; - - document.querySelector('.sidebar').style.marginTop = headerOffset + 'px'; - - return { - top : headerOffset - sidebarOffset, - bottom: footerOffset - }; -}; - -window.addEventListener('DOMContentLoaded', () => { - - Affix.init(document.querySelector('.sidebar-inner'), NexT.utils.getAffixParam()); -}); diff --git a/js/utils.js b/js/utils.js deleted file mode 100644 index f3af20c..0000000 --- a/js/utils.js +++ /dev/null @@ -1,415 +0,0 @@ -/* global NexT, CONFIG */ - -HTMLElement.prototype.outerHeight = function(flag) { - var height = this.offsetHeight; - if (!flag) return height; - var style = window.getComputedStyle(this); - height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10); - return height; -}; - -HTMLElement.prototype.wrap = function(wrapper) { - this.parentNode.insertBefore(wrapper, this); - this.parentNode.removeChild(this); - wrapper.appendChild(this); -}; - -NexT.utils = { - - /** - * Wrap images with fancybox. - */ - wrapImageWithFancyBox: function() { - document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(element => { - var $image = $(element); - var imageLink = $image.attr('data-src') || $image.attr('src'); - var $imageWrapLink = $image.wrap(``).parent('a'); - if ($image.is('.post-gallery img')) { - $imageWrapLink.addClass('post-gallery-img'); - $imageWrapLink.attr('data-fancybox', 'gallery').attr('rel', 'gallery'); - } else if ($image.is('.group-picture img')) { - $imageWrapLink.attr('data-fancybox', 'group').attr('rel', 'group'); - } else { - $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default'); - } - - var imageTitle = $image.attr('title') || $image.attr('alt'); - if (imageTitle) { - $imageWrapLink.append(`

    ${imageTitle}

    `); - // Make sure img title tag will show correctly in fancybox - $imageWrapLink.attr('title', imageTitle).attr('data-caption', imageTitle); - } - }); - - $.fancybox.defaults.hash = false; - $('.fancybox').fancybox({ - loop : true, - helpers: { - overlay: { - locked: false - } - } - }); - }, - - registerExtURL: function() { - document.querySelectorAll('.exturl').forEach(element => { - element.addEventListener('click', event => { - var exturl = event.currentTarget.getAttribute('data-url'); - var decurl = decodeURIComponent(escape(window.atob(exturl))); - window.open(decurl, '_blank', 'noopener'); - return false; - }); - }); - }, - - /** - * One-click copy code support. - */ - registerCopyCode: function() { - document.querySelectorAll('figure.highlight').forEach(e => { - const initButton = button => { - if (CONFIG.copycode.style === 'mac') { - button.innerHTML = ''; - } else { - button.innerText = CONFIG.translation.copy_button; - } - }; - const box = document.createElement('div'); - box.classList.add('highlight-wrap'); - e.wrap(box); - e.parentNode.insertAdjacentHTML('beforeend', '
    '); - var button = e.parentNode.querySelector('.copy-btn'); - button.addEventListener('click', event => { - var target = event.currentTarget; - var code = [...target.parentNode.querySelectorAll('.code .line')].map(element => { - return element.innerText; - }).join('\n'); - var ta = document.createElement('textarea'); - var yPosition = window.scrollY; - ta.style.top = yPosition + 'px'; // Prevent page scrolling - ta.style.position = 'absolute'; - ta.style.opacity = '0'; - ta.readOnly = true; - ta.value = code; - document.body.append(ta); - const selection = document.getSelection(); - const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false; - ta.select(); - ta.setSelectionRange(0, code.length); - ta.readOnly = false; - var result = document.execCommand('copy'); - if (CONFIG.copycode.show_result) { - target.innerText = result ? CONFIG.translation.copy_success : CONFIG.translation.copy_failure; - } - ta.blur(); // For iOS - target.blur(); - if (selected) { - selection.removeAllRanges(); - selection.addRange(selected); - } - document.body.removeChild(ta); - }); - button.addEventListener('mouseleave', event => { - setTimeout(() => { - initButton(event.target); - }, 300); - }); - initButton(button); - }); - }, - - wrapTableWithBox: function() { - document.querySelectorAll('table').forEach(table => { - const box = document.createElement('div'); - box.className = 'table-container'; - table.wrap(box); - }); - }, - - registerVideoIframe: function() { - document.querySelectorAll('iframe').forEach(element => { - const SUPPORTED_PLAYERS = [ - 'www.youtube.com', - 'player.vimeo.com', - 'player.youku.com', - 'player.bilibili.com', - 'www.tudou.com' - ]; - const pattern = new RegExp(SUPPORTED_PLAYERS.join('|')); - if (!element.parentNode.matches('.video-container') && element.src.search(pattern) > 0) { - const box = document.createElement('div'); - box.className = 'video-container'; - element.wrap(box); - let width = Number(element.width); let height = Number(element.height); - if (width && height) { - element.parentNode.style.paddingTop = (height / width * 100) + '%'; - } - } - }); - }, - - registerScrollPercent: function() { - var THRESHOLD = 50; - var backToTop = document.querySelector('.back-to-top'); - var readingProgressBar = document.querySelector('.reading-progress-bar'); - // For init back to top in sidebar if page was scrolled after page refresh. - window.addEventListener('scroll', () => { - var scrollPercent; - if (backToTop || readingProgressBar) { - var docHeight = document.querySelector('.container').offsetHeight; - var winHeight = window.innerHeight; - var contentVisibilityHeight = docHeight > winHeight ? docHeight - winHeight : document.body.scrollHeight - winHeight; - var scrollPercentRounded = Math.round(100 * window.scrollY / contentVisibilityHeight); - scrollPercent = Math.min(scrollPercentRounded, 100) + '%'; - } - if (backToTop) { - window.scrollY > THRESHOLD ? backToTop.classList.add('back-to-top-on') : backToTop.classList.remove('back-to-top-on'); - backToTop.querySelector('span').innerText = scrollPercent; - } - if (readingProgressBar) { - readingProgressBar.style.width = scrollPercent; - } - }); - - backToTop && backToTop.addEventListener('click', () => { - window.anime({ - targets : [document.documentElement, document.body], - duration : 500, - easing : 'linear', - scrollTop: 0 - }); - }); - }, - - /** - * Tabs tag listener (without twitter bootstrap). - */ - registerTabsTag: function() { - // Binding `nav-tabs` & `tab-content` by real time permalink changing. - document.querySelectorAll('.tabs ul.nav-tabs .tab').forEach(tab => { - tab.addEventListener('click', event => { - event.preventDefault(); - var target = event.currentTarget; - // Prevent selected tab to select again. - if (!target.classList.contains('active')) { - // Add & Remove active class on `nav-tabs` & `tab-content`. - [...target.parentNode.children].forEach(item => { - item.classList.remove('active'); - }); - target.classList.add('active'); - var tActive = document.getElementById(target.querySelector('a').getAttribute('href').replace('#', '')); - [...tActive.parentNode.children].forEach(item => { - item.classList.remove('active'); - }); - tActive.classList.add('active'); - // Trigger event - tActive.dispatchEvent(new Event('tabs:click', { - bubbles: true - })); - } - }); - }); - - window.dispatchEvent(new Event('tabs:register')); - }, - - registerCanIUseTag: function() { - // Get responsive height passed from iframe. - window.addEventListener('message', e => { - var data = e.data; - if ((typeof data === 'string') && (data.indexOf('ciu_embed') > -1)) { - var featureID = data.split(':')[1]; - var height = data.split(':')[2]; - document.querySelector(`iframe[data-feature=${featureID}]`).style.height = parseInt(height, 10) + 'px'; - } - }, false); - }, - - registerActiveMenuItem: function() { - document.querySelectorAll('.menu-item').forEach(element => { - var target = element.querySelector('a[href]'); - if (!target) return; - var isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', ''); - var isSubPath = target.pathname !== CONFIG.root && location.pathname.indexOf(target.pathname) === 0; - if (target.hostname === location.hostname && (isSamePath || isSubPath)) { - element.classList.add('menu-item-active'); - } else { - element.classList.remove('menu-item-active'); - } - }); - }, - - registerSidebarTOC: function() { - const navItems = document.querySelectorAll('.post-toc li'); - const sections = [...navItems].map(element => { - var link = element.querySelector('a.nav-link'); - // TOC item animation navigate. - link.addEventListener('click', event => { - event.preventDefault(); - var target = document.getElementById(event.currentTarget.getAttribute('href').replace('#', '')); - var offset = target.getBoundingClientRect().top + window.scrollY; - window.anime({ - targets : [document.documentElement, document.body], - duration : 500, - easing : 'linear', - scrollTop: offset + 10 - }); - }); - return document.getElementById(link.getAttribute('href').replace('#', '')); - }); - - var tocElement = document.querySelector('.post-toc-wrap'); - function activateNavByIndex(target) { - if (target.classList.contains('active-current')) return; - - document.querySelectorAll('.post-toc .active').forEach(element => { - element.classList.remove('active', 'active-current'); - }); - target.classList.add('active', 'active-current'); - var parent = target.parentNode; - while (!parent.matches('.post-toc')) { - if (parent.matches('li')) parent.classList.add('active'); - parent = parent.parentNode; - } - // Scrolling to center active TOC element if TOC content is taller then viewport. - window.anime({ - targets : tocElement, - duration : 200, - easing : 'linear', - scrollTop: tocElement.scrollTop - (tocElement.offsetHeight / 2) + target.getBoundingClientRect().top - tocElement.getBoundingClientRect().top - }); - } - - function findIndex(entries) { - let index = 0; - let entry = entries[index]; - if (entry.boundingClientRect.top > 0) { - index = sections.indexOf(entry.target); - return index === 0 ? 0 : index - 1; - } - for (;index < entries.length; index++) { - if (entries[index].boundingClientRect.top <= 0) { - entry = entries[index]; - } else { - return sections.indexOf(entry.target); - } - } - return sections.indexOf(entry.target); - } - - function createIntersectionObserver(marginTop) { - marginTop = Math.floor(marginTop + 10000); - let intersectionObserver = new IntersectionObserver((entries, observe) => { - let scrollHeight = document.documentElement.scrollHeight + 100; - if (scrollHeight > marginTop) { - observe.disconnect(); - createIntersectionObserver(scrollHeight); - return; - } - let index = findIndex(entries); - activateNavByIndex(navItems[index]); - }, { - rootMargin: marginTop + 'px 0px -100% 0px', - threshold : 0 - }); - sections.forEach(item => intersectionObserver.observe(item)); - } - createIntersectionObserver(document.documentElement.scrollHeight); - }, - - hasMobileUA: function() { - var ua = navigator.userAgent; - var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g; - - return pa.test(ua); - }, - - isTablet: function() { - return window.screen.width < 992 && window.screen.width > 767 && this.hasMobileUA(); - }, - - isMobile: function() { - return window.screen.width < 767 && this.hasMobileUA(); - }, - - isDesktop: function() { - return !this.isTablet() && !this.isMobile(); - }, - - isMuse: function() { - return CONFIG.scheme === 'Muse'; - }, - - isMist: function() { - return CONFIG.scheme === 'Mist'; - }, - - isPisces: function() { - return CONFIG.scheme === 'Pisces'; - }, - - isGemini: function() { - return CONFIG.scheme === 'Gemini'; - }, - - /** - * Init Sidebar & TOC inner dimensions on all pages and for all schemes. - * Need for Sidebar/TOC inner scrolling if content taller then viewport. - */ - initSidebarDimension: function() { - var sidebarNav = document.querySelector('.sidebar-nav'); - var sidebarNavHeight = sidebarNav.style.display !== 'none' ? sidebarNav.outerHeight(true) : 0; - var sidebarOffset = CONFIG.sidebar.offset || 12; - var sidebarb2tHeight = CONFIG.back2top.enable && CONFIG.back2top.sidebar ? document.querySelector('.back-to-top').offsetHeight : 0; - var sidebarSchemePadding = CONFIG.sidebarPadding + sidebarNavHeight + sidebarb2tHeight; - // Margin of sidebar b2t: 8px -10px -20px, brings a different of 12px. - if (NexT.utils.isPisces() || NexT.utils.isGemini()) sidebarSchemePadding += (sidebarOffset * 2) - 12; - // Initialize Sidebar & TOC Height. - var sidebarWrapperHeight = document.body.offsetHeight - sidebarSchemePadding + 'px'; - document.querySelector('.site-overview-wrap').style.maxHeight = sidebarWrapperHeight; - document.querySelector('.post-toc-wrap').style.maxHeight = sidebarWrapperHeight; - }, - - updateSidebarPosition: function() { - var sidebarNav = document.querySelector('.sidebar-nav'); - var hasTOC = document.querySelector('.post-toc'); - if (hasTOC) { - sidebarNav.style.display = ''; - sidebarNav.classList.add('motion-element'); - document.querySelector('.sidebar-nav-toc').click(); - } else { - sidebarNav.style.display = 'none'; - sidebarNav.classList.remove('motion-element'); - document.querySelector('.sidebar-nav-overview').click(); - } - NexT.utils.initSidebarDimension(); - if (!this.isDesktop() || this.isPisces() || this.isGemini()) return; - // Expand sidebar on post detail page by default, when post has a toc. - var display = CONFIG.page.sidebar; - if (typeof display !== 'boolean') { - // There's no definition sidebar in the page front-matter. - display = CONFIG.sidebar.display === 'always' || (CONFIG.sidebar.display === 'post' && hasTOC); - } - if (display) { - window.dispatchEvent(new Event('sidebar:show')); - } - }, - - getScript: function(url, callback, condition) { - if (condition) { - callback(); - } else { - var script = document.createElement('script'); - script.onload = script.onreadystatechange = function(_, isAbort) { - if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) { - script.onload = script.onreadystatechange = null; - script = undefined; - if (!isAbort && callback) setTimeout(callback, 0); - } - }; - script.src = url; - document.head.appendChild(script); - } - } -}; diff --git a/lib/anime.min.js b/lib/anime.min.js deleted file mode 100644 index 99b263a..0000000 --- a/lib/anime.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * anime.js v3.1.0 - * (c) 2019 Julian Garnier - * Released under the MIT license - * animejs.com - */ - -!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n.anime=e()}(this,function(){"use strict";var n={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0},e={duration:1e3,delay:0,endDelay:0,easing:"easeOutElastic(1, .5)",round:0},r=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective"],t={CSS:{},springs:{}};function a(n,e,r){return Math.min(Math.max(n,e),r)}function o(n,e){return n.indexOf(e)>-1}function u(n,e){return n.apply(null,e)}var i={arr:function(n){return Array.isArray(n)},obj:function(n){return o(Object.prototype.toString.call(n),"Object")},pth:function(n){return i.obj(n)&&n.hasOwnProperty("totalLength")},svg:function(n){return n instanceof SVGElement},inp:function(n){return n instanceof HTMLInputElement},dom:function(n){return n.nodeType||i.svg(n)},str:function(n){return"string"==typeof n},fnc:function(n){return"function"==typeof n},und:function(n){return void 0===n},hex:function(n){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)},rgb:function(n){return/^rgb/.test(n)},hsl:function(n){return/^hsl/.test(n)},col:function(n){return i.hex(n)||i.rgb(n)||i.hsl(n)},key:function(r){return!n.hasOwnProperty(r)&&!e.hasOwnProperty(r)&&"targets"!==r&&"keyframes"!==r}};function c(n){var e=/\(([^)]+)\)/.exec(n);return e?e[1].split(",").map(function(n){return parseFloat(n)}):[]}function s(n,e){var r=c(n),o=a(i.und(r[0])?1:r[0],.1,100),u=a(i.und(r[1])?100:r[1],.1,100),s=a(i.und(r[2])?10:r[2],.1,100),f=a(i.und(r[3])?0:r[3],.1,100),l=Math.sqrt(u/o),d=s/(2*Math.sqrt(u*o)),p=d<1?l*Math.sqrt(1-d*d):0,h=1,v=d<1?(d*l-f)/p:-f+l;function g(n){var r=e?e*n/1e3:n;return r=d<1?Math.exp(-r*d*l)*(h*Math.cos(p*r)+v*Math.sin(p*r)):(h+v*r)*Math.exp(-r*l),0===n||1===n?n:1-r}return e?g:function(){var e=t.springs[n];if(e)return e;for(var r=0,a=0;;)if(1===g(r+=1/6)){if(++a>=16)break}else a=0;var o=r*(1/6)*1e3;return t.springs[n]=o,o}}function f(n){return void 0===n&&(n=10),function(e){return Math.round(e*n)*(1/n)}}var l,d,p=function(){var n=11,e=1/(n-1);function r(n,e){return 1-3*e+3*n}function t(n,e){return 3*e-6*n}function a(n){return 3*n}function o(n,e,o){return((r(e,o)*n+t(e,o))*n+a(e))*n}function u(n,e,o){return 3*r(e,o)*n*n+2*t(e,o)*n+a(e)}return function(r,t,a,i){if(0<=r&&r<=1&&0<=a&&a<=1){var c=new Float32Array(n);if(r!==t||a!==i)for(var s=0;s=.001?function(n,e,r,t){for(var a=0;a<4;++a){var i=u(e,r,t);if(0===i)return e;e-=(o(e,r,t)-n)/i}return e}(t,l,r,a):0===d?l:function(n,e,r,t,a){for(var u,i,c=0;(u=o(i=e+(r-e)/2,t,a)-n)>0?r=i:e=i,Math.abs(u)>1e-7&&++c<10;);return i}(t,i,i+e,r,a)}}}(),h=(l={linear:function(){return function(n){return n}}},d={Sine:function(){return function(n){return 1-Math.cos(n*Math.PI/2)}},Circ:function(){return function(n){return 1-Math.sqrt(1-n*n)}},Back:function(){return function(n){return n*n*(3*n-2)}},Bounce:function(){return function(n){for(var e,r=4;n<((e=Math.pow(2,--r))-1)/11;);return 1/Math.pow(4,3-r)-7.5625*Math.pow((3*e-2)/22-n,2)}},Elastic:function(n,e){void 0===n&&(n=1),void 0===e&&(e=.5);var r=a(n,1,10),t=a(e,.1,2);return function(n){return 0===n||1===n?n:-r*Math.pow(2,10*(n-1))*Math.sin((n-1-t/(2*Math.PI)*Math.asin(1/r))*(2*Math.PI)/t)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(n,e){d[n]=function(){return function(n){return Math.pow(n,e+2)}}}),Object.keys(d).forEach(function(n){var e=d[n];l["easeIn"+n]=e,l["easeOut"+n]=function(n,r){return function(t){return 1-e(n,r)(1-t)}},l["easeInOut"+n]=function(n,r){return function(t){return t<.5?e(n,r)(2*t)/2:1-e(n,r)(-2*t+2)/2}}}),l);function v(n,e){if(i.fnc(n))return n;var r=n.split("(")[0],t=h[r],a=c(n);switch(r){case"spring":return s(n,e);case"cubicBezier":return u(p,a);case"steps":return u(f,a);default:return u(t,a)}}function g(n){try{return document.querySelectorAll(n)}catch(n){return}}function m(n,e){for(var r=n.length,t=arguments.length>=2?arguments[1]:void 0,a=[],o=0;o1&&(r-=1),r<1/6?n+6*(e-n)*r:r<.5?e:r<2/3?n+(e-n)*(2/3-r)*6:n}if(0==u)e=r=t=i;else{var f=i<.5?i*(1+u):i+u-i*u,l=2*i-f;e=s(l,f,o+1/3),r=s(l,f,o),t=s(l,f,o-1/3)}return"rgba("+255*e+","+255*r+","+255*t+","+c+")"}(n):void 0;var e,r,t,a}function C(n){var e=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(n);if(e)return e[1]}function B(n,e){return i.fnc(n)?n(e.target,e.id,e.total):n}function P(n,e){return n.getAttribute(e)}function I(n,e,r){if(M([r,"deg","rad","turn"],C(e)))return e;var a=t.CSS[e+r];if(!i.und(a))return a;var o=document.createElement(n.tagName),u=n.parentNode&&n.parentNode!==document?n.parentNode:document.body;u.appendChild(o),o.style.position="absolute",o.style.width=100+r;var c=100/o.offsetWidth;u.removeChild(o);var s=c*parseFloat(e);return t.CSS[e+r]=s,s}function T(n,e,r){if(e in n.style){var t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=n.style[e]||getComputedStyle(n).getPropertyValue(t)||"0";return r?I(n,a,r):a}}function D(n,e){return i.dom(n)&&!i.inp(n)&&(P(n,e)||i.svg(n)&&n[e])?"attribute":i.dom(n)&&M(r,e)?"transform":i.dom(n)&&"transform"!==e&&T(n,e)?"css":null!=n[e]?"object":void 0}function E(n){if(i.dom(n)){for(var e,r=n.style.transform||"",t=/(\w+)\(([^)]*)\)/g,a=new Map;e=t.exec(r);)a.set(e[1],e[2]);return a}}function F(n,e,r,t){var a,u=o(e,"scale")?1:0+(o(a=e,"translate")||"perspective"===a?"px":o(a,"rotate")||o(a,"skew")?"deg":void 0),i=E(n).get(e)||u;return r&&(r.transforms.list.set(e,i),r.transforms.last=e),t?I(n,i,t):i}function N(n,e,r,t){switch(D(n,e)){case"transform":return F(n,e,t,r);case"css":return T(n,e,r);case"attribute":return P(n,e);default:return n[e]||0}}function A(n,e){var r=/^(\*=|\+=|-=)/.exec(n);if(!r)return n;var t=C(n)||0,a=parseFloat(e),o=parseFloat(n.replace(r[0],""));switch(r[0][0]){case"+":return a+o+t;case"-":return a-o+t;case"*":return a*o+t}}function L(n,e){if(i.col(n))return O(n);if(/\s/g.test(n))return n;var r=C(n),t=r?n.substr(0,n.length-r.length):n;return e?t+e:t}function j(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function S(n){for(var e,r=n.points,t=0,a=0;a0&&(t+=j(e,o)),e=o}return t}function q(n){if(n.getTotalLength)return n.getTotalLength();switch(n.tagName.toLowerCase()){case"circle":return o=n,2*Math.PI*P(o,"r");case"rect":return 2*P(a=n,"width")+2*P(a,"height");case"line":return j({x:P(t=n,"x1"),y:P(t,"y1")},{x:P(t,"x2"),y:P(t,"y2")});case"polyline":return S(n);case"polygon":return r=(e=n).points,S(e)+j(r.getItem(r.numberOfItems-1),r.getItem(0))}var e,r,t,a,o}function $(n,e){var r=e||{},t=r.el||function(n){for(var e=n.parentNode;i.svg(e)&&i.svg(e.parentNode);)e=e.parentNode;return e}(n),a=t.getBoundingClientRect(),o=P(t,"viewBox"),u=a.width,c=a.height,s=r.viewBox||(o?o.split(" "):[0,0,u,c]);return{el:t,viewBox:s,x:s[0]/1,y:s[1]/1,w:u/s[2],h:c/s[3]}}function X(n,e){function r(r){void 0===r&&(r=0);var t=e+r>=1?e+r:0;return n.el.getPointAtLength(t)}var t=$(n.el,n.svg),a=r(),o=r(-1),u=r(1);switch(n.property){case"x":return(a.x-t.x)*t.w;case"y":return(a.y-t.y)*t.h;case"angle":return 180*Math.atan2(u.y-o.y,u.x-o.x)/Math.PI}}function Y(n,e){var r=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,t=L(i.pth(n)?n.totalLength:n,e)+"";return{original:t,numbers:t.match(r)?t.match(r).map(Number):[0],strings:i.str(n)||e?t.split(r):[]}}function Z(n){return m(n?y(i.arr(n)?n.map(b):b(n)):[],function(n,e,r){return r.indexOf(n)===e})}function Q(n){var e=Z(n);return e.map(function(n,r){return{target:n,id:r,total:e.length,transforms:{list:E(n)}}})}function V(n,e){var r=x(e);if(/^spring/.test(r.easing)&&(r.duration=s(r.easing)),i.arr(n)){var t=n.length;2===t&&!i.obj(n[0])?n={value:n}:i.fnc(e.duration)||(r.duration=e.duration/t)}var a=i.arr(n)?n:[n];return a.map(function(n,r){var t=i.obj(n)&&!i.pth(n)?n:{value:n};return i.und(t.delay)&&(t.delay=r?0:e.delay),i.und(t.endDelay)&&(t.endDelay=r===a.length-1?e.endDelay:0),t}).map(function(n){return k(n,r)})}function z(n,e){var r=[],t=e.keyframes;for(var a in t&&(e=k(function(n){for(var e=m(y(n.map(function(n){return Object.keys(n)})),function(n){return i.key(n)}).reduce(function(n,e){return n.indexOf(e)<0&&n.push(e),n},[]),r={},t=function(t){var a=e[t];r[a]=n.map(function(n){var e={};for(var r in n)i.key(r)?r==a&&(e.value=n[r]):e[r]=n[r];return e})},a=0;a-1&&(_.splice(o,1),r=_.length)}else a.tick(e);t++}n()}else U=cancelAnimationFrame(U)}return n}();function rn(r){void 0===r&&(r={});var t,o=0,u=0,i=0,c=0,s=null;function f(n){var e=window.Promise&&new Promise(function(n){return s=n});return n.finished=e,e}var l,d,p,h,v,g,y,b,M=(d=w(n,l=r),p=w(e,l),h=z(p,l),v=Q(l.targets),g=W(v,h),y=J(g,p),b=K,K++,k(d,{id:b,children:[],animatables:v,animations:g,duration:y.duration,delay:y.delay,endDelay:y.endDelay}));f(M);function x(){var n=M.direction;"alternate"!==n&&(M.direction="normal"!==n?"normal":"reverse"),M.reversed=!M.reversed,t.forEach(function(n){return n.reversed=M.reversed})}function O(n){return M.reversed?M.duration-n:n}function C(){o=0,u=O(M.currentTime)*(1/rn.speed)}function B(n,e){e&&e.seek(n-e.timelineOffset)}function P(n){for(var e=0,r=M.animations,t=r.length;e2||(b=Math.round(b*p)/p)),h.push(b)}var k=d.length;if(k){g=d[0];for(var O=0;O0&&(M.began=!0,I("begin")),!M.loopBegan&&M.currentTime>0&&(M.loopBegan=!0,I("loopBegin")),d<=r&&0!==M.currentTime&&P(0),(d>=l&&M.currentTime!==e||!e)&&P(e),d>r&&d=e&&(u=0,M.remaining&&!0!==M.remaining&&M.remaining--,M.remaining?(o=i,I("loopComplete"),M.loopBegan=!1,"alternate"===M.direction&&x()):(M.paused=!0,M.completed||(M.completed=!0,I("loopComplete"),I("complete"),!M.passThrough&&"Promise"in window&&(s(),f(M)))))}return M.reset=function(){var n=M.direction;M.passThrough=!1,M.currentTime=0,M.progress=0,M.paused=!0,M.began=!1,M.loopBegan=!1,M.changeBegan=!1,M.completed=!1,M.changeCompleted=!1,M.reversePlayback=!1,M.reversed="reverse"===n,M.remaining=M.loop,t=M.children;for(var e=c=t.length;e--;)M.children[e].reset();(M.reversed&&!0!==M.loop||"alternate"===n&&1===M.loop)&&M.remaining++,P(M.reversed?M.duration:0)},M.set=function(n,e){return R(n,e),M},M.tick=function(n){i=n,o||(o=i),T((i+(u-o))*rn.speed)},M.seek=function(n){T(O(n))},M.pause=function(){M.paused=!0,C()},M.play=function(){M.paused&&(M.completed&&M.reset(),M.paused=!1,_.push(M),C(),U||en())},M.reverse=function(){x(),C()},M.restart=function(){M.reset(),M.play()},M.reset(),M.autoplay&&M.play(),M}function tn(n,e){for(var r=e.length;r--;)M(n,e[r].animatable.target)&&e.splice(r,1)}return"undefined"!=typeof document&&document.addEventListener("visibilitychange",function(){document.hidden?(_.forEach(function(n){return n.pause()}),nn=_.slice(0),rn.running=_=[]):nn.forEach(function(n){return n.play()})}),rn.version="3.1.0",rn.speed=1,rn.running=_,rn.remove=function(n){for(var e=Z(n),r=_.length;r--;){var t=_[r],a=t.animations,o=t.children;tn(e,a);for(var u=o.length;u--;){var i=o[u],c=i.animations;tn(e,c),c.length||i.children.length||o.splice(u,1)}a.length||o.length||t.pause()}},rn.get=N,rn.set=R,rn.convertPx=I,rn.path=function(n,e){var r=i.str(n)?g(n)[0]:n,t=e||100;return function(n){return{property:n,el:r,svg:$(r),totalLength:q(r)*(t/100)}}},rn.setDashoffset=function(n){var e=q(n);return n.setAttribute("stroke-dasharray",e),e},rn.stagger=function(n,e){void 0===e&&(e={});var r=e.direction||"normal",t=e.easing?v(e.easing):null,a=e.grid,o=e.axis,u=e.from||0,c="first"===u,s="center"===u,f="last"===u,l=i.arr(n),d=l?parseFloat(n[0]):parseFloat(n),p=l?parseFloat(n[1]):0,h=C(l?n[1]:n)||0,g=e.start||0+(l?d:0),m=[],y=0;return function(n,e,i){if(c&&(u=0),s&&(u=(i-1)/2),f&&(u=i-1),!m.length){for(var v=0;v-1&&_.splice(o,1);for(var s=0;s li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.fa-pull-left { - float: left; -} -.fa-pull-right { - float: right; -} -.fa.fa-pull-left { - margin-right: .3em; -} -.fa.fa-pull-right { - margin-left: .3em; -} -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-feed:before, -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper-pp:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-resistance:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-intersex:before, -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-genderless:before { - content: "\f22d"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} -.fa-yc:before, -.fa-y-combinator:before { - content: "\f23b"; -} -.fa-optin-monster:before { - content: "\f23c"; -} -.fa-opencart:before { - content: "\f23d"; -} -.fa-expeditedssl:before { - content: "\f23e"; -} -.fa-battery-4:before, -.fa-battery:before, -.fa-battery-full:before { - content: "\f240"; -} -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: "\f241"; -} -.fa-battery-2:before, -.fa-battery-half:before { - content: "\f242"; -} -.fa-battery-1:before, -.fa-battery-quarter:before { - content: "\f243"; -} -.fa-battery-0:before, -.fa-battery-empty:before { - content: "\f244"; -} -.fa-mouse-pointer:before { - content: "\f245"; -} -.fa-i-cursor:before { - content: "\f246"; -} -.fa-object-group:before { - content: "\f247"; -} -.fa-object-ungroup:before { - content: "\f248"; -} -.fa-sticky-note:before { - content: "\f249"; -} -.fa-sticky-note-o:before { - content: "\f24a"; -} -.fa-cc-jcb:before { - content: "\f24b"; -} -.fa-cc-diners-club:before { - content: "\f24c"; -} -.fa-clone:before { - content: "\f24d"; -} -.fa-balance-scale:before { - content: "\f24e"; -} -.fa-hourglass-o:before { - content: "\f250"; -} -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: "\f251"; -} -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: "\f252"; -} -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: "\f253"; -} -.fa-hourglass:before { - content: "\f254"; -} -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: "\f255"; -} -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: "\f256"; -} -.fa-hand-scissors-o:before { - content: "\f257"; -} -.fa-hand-lizard-o:before { - content: "\f258"; -} -.fa-hand-spock-o:before { - content: "\f259"; -} -.fa-hand-pointer-o:before { - content: "\f25a"; -} -.fa-hand-peace-o:before { - content: "\f25b"; -} -.fa-trademark:before { - content: "\f25c"; -} -.fa-registered:before { - content: "\f25d"; -} -.fa-creative-commons:before { - content: "\f25e"; -} -.fa-gg:before { - content: "\f260"; -} -.fa-gg-circle:before { - content: "\f261"; -} -.fa-tripadvisor:before { - content: "\f262"; -} -.fa-odnoklassniki:before { - content: "\f263"; -} -.fa-odnoklassniki-square:before { - content: "\f264"; -} -.fa-get-pocket:before { - content: "\f265"; -} -.fa-wikipedia-w:before { - content: "\f266"; -} -.fa-safari:before { - content: "\f267"; -} -.fa-chrome:before { - content: "\f268"; -} -.fa-firefox:before { - content: "\f269"; -} -.fa-opera:before { - content: "\f26a"; -} -.fa-internet-explorer:before { - content: "\f26b"; -} -.fa-tv:before, -.fa-television:before { - content: "\f26c"; -} -.fa-contao:before { - content: "\f26d"; -} -.fa-500px:before { - content: "\f26e"; -} -.fa-amazon:before { - content: "\f270"; -} -.fa-calendar-plus-o:before { - content: "\f271"; -} -.fa-calendar-minus-o:before { - content: "\f272"; -} -.fa-calendar-times-o:before { - content: "\f273"; -} -.fa-calendar-check-o:before { - content: "\f274"; -} -.fa-industry:before { - content: "\f275"; -} -.fa-map-pin:before { - content: "\f276"; -} -.fa-map-signs:before { - content: "\f277"; -} -.fa-map-o:before { - content: "\f278"; -} -.fa-map:before { - content: "\f279"; -} -.fa-commenting:before { - content: "\f27a"; -} -.fa-commenting-o:before { - content: "\f27b"; -} -.fa-houzz:before { - content: "\f27c"; -} -.fa-vimeo:before { - content: "\f27d"; -} -.fa-black-tie:before { - content: "\f27e"; -} -.fa-fonticons:before { - content: "\f280"; -} -.fa-reddit-alien:before { - content: "\f281"; -} -.fa-edge:before { - content: "\f282"; -} -.fa-credit-card-alt:before { - content: "\f283"; -} -.fa-codiepie:before { - content: "\f284"; -} -.fa-modx:before { - content: "\f285"; -} -.fa-fort-awesome:before { - content: "\f286"; -} -.fa-usb:before { - content: "\f287"; -} -.fa-product-hunt:before { - content: "\f288"; -} -.fa-mixcloud:before { - content: "\f289"; -} -.fa-scribd:before { - content: "\f28a"; -} -.fa-pause-circle:before { - content: "\f28b"; -} -.fa-pause-circle-o:before { - content: "\f28c"; -} -.fa-stop-circle:before { - content: "\f28d"; -} -.fa-stop-circle-o:before { - content: "\f28e"; -} -.fa-shopping-bag:before { - content: "\f290"; -} -.fa-shopping-basket:before { - content: "\f291"; -} -.fa-hashtag:before { - content: "\f292"; -} -.fa-bluetooth:before { - content: "\f293"; -} -.fa-bluetooth-b:before { - content: "\f294"; -} -.fa-percent:before { - content: "\f295"; -} -.fa-gitlab:before { - content: "\f296"; -} -.fa-wpbeginner:before { - content: "\f297"; -} -.fa-wpforms:before { - content: "\f298"; -} -.fa-envira:before { - content: "\f299"; -} -.fa-universal-access:before { - content: "\f29a"; -} -.fa-wheelchair-alt:before { - content: "\f29b"; -} -.fa-question-circle-o:before { - content: "\f29c"; -} -.fa-blind:before { - content: "\f29d"; -} -.fa-audio-description:before { - content: "\f29e"; -} -.fa-volume-control-phone:before { - content: "\f2a0"; -} -.fa-braille:before { - content: "\f2a1"; -} -.fa-assistive-listening-systems:before { - content: "\f2a2"; -} -.fa-asl-interpreting:before, -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; -} -.fa-deafness:before, -.fa-hard-of-hearing:before, -.fa-deaf:before { - content: "\f2a4"; -} -.fa-glide:before { - content: "\f2a5"; -} -.fa-glide-g:before { - content: "\f2a6"; -} -.fa-signing:before, -.fa-sign-language:before { - content: "\f2a7"; -} -.fa-low-vision:before { - content: "\f2a8"; -} -.fa-viadeo:before { - content: "\f2a9"; -} -.fa-viadeo-square:before { - content: "\f2aa"; -} -.fa-snapchat:before { - content: "\f2ab"; -} -.fa-snapchat-ghost:before { - content: "\f2ac"; -} -.fa-snapchat-square:before { - content: "\f2ad"; -} -.fa-pied-piper:before { - content: "\f2ae"; -} -.fa-first-order:before { - content: "\f2b0"; -} -.fa-yoast:before { - content: "\f2b1"; -} -.fa-themeisle:before { - content: "\f2b2"; -} -.fa-google-plus-circle:before, -.fa-google-plus-official:before { - content: "\f2b3"; -} -.fa-fa:before, -.fa-font-awesome:before { - content: "\f2b4"; -} -.fa-handshake-o:before { - content: "\f2b5"; -} -.fa-envelope-open:before { - content: "\f2b6"; -} -.fa-envelope-open-o:before { - content: "\f2b7"; -} -.fa-linode:before { - content: "\f2b8"; -} -.fa-address-book:before { - content: "\f2b9"; -} -.fa-address-book-o:before { - content: "\f2ba"; -} -.fa-vcard:before, -.fa-address-card:before { - content: "\f2bb"; -} -.fa-vcard-o:before, -.fa-address-card-o:before { - content: "\f2bc"; -} -.fa-user-circle:before { - content: "\f2bd"; -} -.fa-user-circle-o:before { - content: "\f2be"; -} -.fa-user-o:before { - content: "\f2c0"; -} -.fa-id-badge:before { - content: "\f2c1"; -} -.fa-drivers-license:before, -.fa-id-card:before { - content: "\f2c2"; -} -.fa-drivers-license-o:before, -.fa-id-card-o:before { - content: "\f2c3"; -} -.fa-quora:before { - content: "\f2c4"; -} -.fa-free-code-camp:before { - content: "\f2c5"; -} -.fa-telegram:before { - content: "\f2c6"; -} -.fa-thermometer-4:before, -.fa-thermometer:before, -.fa-thermometer-full:before { - content: "\f2c7"; -} -.fa-thermometer-3:before, -.fa-thermometer-three-quarters:before { - content: "\f2c8"; -} -.fa-thermometer-2:before, -.fa-thermometer-half:before { - content: "\f2c9"; -} -.fa-thermometer-1:before, -.fa-thermometer-quarter:before { - content: "\f2ca"; -} -.fa-thermometer-0:before, -.fa-thermometer-empty:before { - content: "\f2cb"; -} -.fa-shower:before { - content: "\f2cc"; -} -.fa-bathtub:before, -.fa-s15:before, -.fa-bath:before { - content: "\f2cd"; -} -.fa-podcast:before { - content: "\f2ce"; -} -.fa-window-maximize:before { - content: "\f2d0"; -} -.fa-window-minimize:before { - content: "\f2d1"; -} -.fa-window-restore:before { - content: "\f2d2"; -} -.fa-times-rectangle:before, -.fa-window-close:before { - content: "\f2d3"; -} -.fa-times-rectangle-o:before, -.fa-window-close-o:before { - content: "\f2d4"; -} -.fa-bandcamp:before { - content: "\f2d5"; -} -.fa-grav:before { - content: "\f2d6"; -} -.fa-etsy:before { - content: "\f2d7"; -} -.fa-imdb:before { - content: "\f2d8"; -} -.fa-ravelry:before { - content: "\f2d9"; -} -.fa-eercast:before { - content: "\f2da"; -} -.fa-microchip:before { - content: "\f2db"; -} -.fa-snowflake-o:before { - content: "\f2dc"; -} -.fa-superpowers:before { - content: "\f2dd"; -} -.fa-wpexplorer:before { - content: "\f2de"; -} -.fa-meetup:before { - content: "\f2e0"; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} diff --git a/lib/font-awesome/css/font-awesome.css.map b/lib/font-awesome/css/font-awesome.css.map deleted file mode 100644 index 60763a8..0000000 --- a/lib/font-awesome/css/font-awesome.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], -"names": [], -"file": "font-awesome.css" -} diff --git a/lib/font-awesome/css/font-awesome.min.css b/lib/font-awesome/css/font-awesome.min.css deleted file mode 100644 index 540440c..0000000 --- a/lib/font-awesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('http://github.com/fonts/fontawesome-webfont.eot?v=4.7.0');src:url('http://github.com/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('http://github.com/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('http://github.com/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('http://github.com/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('http://github.com/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/lib/font-awesome/fonts/fontawesome-webfont.eot b/lib/font-awesome/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca..0000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.woff b/lib/font-awesome/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a..0000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.woff2 b/lib/font-awesome/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/lib/velocity/velocity.min.js b/lib/velocity/velocity.min.js deleted file mode 100644 index 58244c8..0000000 --- a/lib/velocity/velocity.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ -/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */ -!function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;sn;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;cO;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)}); \ No newline at end of file diff --git a/lib/velocity/velocity.ui.min.js b/lib/velocity/velocity.ui.min.js deleted file mode 100644 index 8706945..0000000 --- a/lib/velocity/velocity.ui.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* VelocityJS.org UI Pack (5.0.4). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License. Portions copyright Daniel Eden, Christian Pucci. */ -!function(t){"function"==typeof require&&"object"==typeof exports?module.exports=t():"function"==typeof define&&define.amd?define(["velocity"],t):t()}(function(){return function(t,a,e,r){function n(t,a){var e=[];return t&&a?($.each([t,a],function(t,a){var r=[];$.each(a,function(t,a){for(;a.toString().length<5;)a="0"+a;r.push(a)}),e.push(r.join(""))}),parseFloat(e[0])>parseFloat(e[1])):!1}if(!t.Velocity||!t.Velocity.Utilities)return void(a.console&&console.log("Velocity UI Pack: Velocity must be loaded first. Aborting."));var i=t.Velocity,$=i.Utilities,s=i.version,o={major:1,minor:1,patch:0};if(n(o,s)){var l="Velocity UI Pack: You need to update Velocity (jquery.velocity.js) to a newer version. Visit http://github.com/julianshapiro/velocity.";throw alert(l),new Error(l)}i.RegisterEffect=i.RegisterUI=function(t,a){function e(t,a,e,r){var n=0,s;$.each(t.nodeType?[t]:t,function(t,a){r&&(e+=t*r),s=a.parentNode,$.each(["height","paddingTop","paddingBottom","marginTop","marginBottom"],function(t,e){n+=parseFloat(i.CSS.getPropertyValue(a,e))})}),i.animate(s,{height:("In"===a?"+":"-")+"="+n},{queue:!1,easing:"ease-in-out",duration:e*("In"===a?.6:1)})}return i.Redirects[t]=function(n,s,o,l,c,u){function f(){s.display!==r&&"none"!==s.display||!/Out$/.test(t)||$.each(c.nodeType?[c]:c,function(t,a){i.CSS.setPropertyValue(a,"display","none")}),s.complete&&s.complete.call(c,c),u&&u.resolver(c||n)}var p=o===l-1;a.defaultDuration="function"==typeof a.defaultDuration?a.defaultDuration.call(c,c):parseFloat(a.defaultDuration);for(var d=0;d1&&($.each(a.reverse(),function(t,e){var r=a[t+1];if(r){var n=e.o||e.options,s=r.o||r.options,o=n&&n.sequenceQueue===!1?"begin":"complete",l=s&&s[o],c={};c[o]=function(){var t=r.e||r.elements,a=t.nodeType?[t]:t;l&&l.call(a,a),i(e)},r.o?r.o=$.extend({},s,c):r.options=$.extend({},s,c)}}),a.reverse()),i(a[0])}}(window.jQuery||window.Zepto||window,window,document)}); \ No newline at end of file diff --git a/lottery.py b/lottery.py new file mode 100644 index 0000000..bf7e2ce --- /dev/null +++ b/lottery.py @@ -0,0 +1,64 @@ +import tkinter +import threading +import random + +windows = tkinter.Tk() +windows.title('硬件技术联盟抽奖') +windows.geometry('1000x500') +label1 = tkinter.Label(windows, text='请输入抽奖人数') # 标签 +label1.pack() +e = tkinter.Entry() +e.pack() + +starts = 0 + +# 是否停止标志 + +notround = False + + +# 定义开始函数 + + +def round(): + t = threading.Thread(target=started) + t.start() + + +def started(): + + global notround + + while True: + + # 检测停止按钮是否被按下 + if notround == True: + notround = False + + return starts + # 程序延时 + number = e.get() + number = int(number) + things = range(1, number + 1) + maxvalue = len(things) + luckboy = random.choice(things) + label3 = tkinter.Label(windows, fg='red', text='中奖号码为') + label3.place(x=450, y=250) + label2 = tkinter.Label(windows, fg='red', text=luckboy, font=('Arial', 20), width=15, height=5) + label2.place(x=350, y=300) + print(luckboy) + + +def stops(): + global notround + + notround = True + + +btn1 = tkinter.Button(windows, text='开始', bg='white', command=round) +btn1.place(x=450, y=100, width=130, height=40) + +btn2 = tkinter.Button(windows, text='停止', bg='white', command=stops) +btn2.place(x=450, y=150, width=130, height=40) + +windows.mainloop() diff --git a/page/2/index.html b/page/2/index.html deleted file mode 100644 index 414cf96..0000000 --- a/page/2/index.html +++ /dev/null @@ -1,1423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - -
    - -
    -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    python爬虫初窥(三)BeautifulSoup库

    1.前言

    13上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据,而第一篇的时候就说过了,爬虫获取到信息后下面就是对信息的处理,而我比较喜欢使用处理数据的库是用BeautifulSoup这个库。

    2.运行环境

    同上篇一样 且自行安装BeautifulSoup库

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    python爬虫初窥(二)requests库

    1.前言

    上一节说过了,爬虫是模拟浏览器向服务器发送请求,然后获取服务器的响应。然后再对数据进行处理,所以我们要利用requests库发送各种HTTP请求来获取网站上的数据。

    2.运行环境

    系统版本

    我使用的是win10,不太喜欢(其实还是没钱)Mac。。。。所以这个教程就以win为例了。

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    python爬虫初窥(一)

    前言

    互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML,CSS,JS代码返回给浏览器,代码经由浏览器解析,将丰富多彩的页面呈现在我们眼前。而本教程是利用python进行爬虫的一个入入入入入入入入门级教程,小白向。

    1.什么是爬虫

    如果我们把互联网比作一个蜘蛛网,数据便存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    为什么要学开发板

    众所周知,近些年,物联网是很火的一个名词,而它的兴盛源于对信息获取的便捷性。

    -

    而开发板是物联网中最重要的一环,可以说开发板配合传感器负责了物联网中的俩项,获取信息和传输信息。

    -

    而且物联网的入门没有想象中的那么难,而且物联网可以看做和互联网是一样的,只不过是连接了传感器并将信息发到一个地方并进行处理。

    -

    当然,我只告诉大家怎么学物联网中开发板即底层的部分,因为其他部分基本是软件工程或计科专业才会去做的数据处理和可视化等处理。

    -

    好了,不废话了,步入正题。

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    对于浏览器的选择,这里肯定首推chrome

    -

    当然无脑尬吹不可取,

    -

    先说说它的优点:chrome速度快和简洁是最大的优点,而且书签比起其他的浏览器方便很多,基于google账号可以实现多端同步(但是吧可能需要一点其他手段才能申请google账号)而且不会弹窗广告

    -

    还有就是如果学习前端的话,F12(开发者模式)也挺方便的

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    1.因为要写代码的时候需要Linux的环境,所以屁颠屁颠的掏出来了自己的优盘下了个Ubuntu18.04的镜像,然后做了个双系统(这一步具体怎么做网上教程很多,我也就不多说了)

    -

    2.然后开机的时候居然发现没有WiFi,没有WiFi,没有WiFi!!!

    -

    然后百度查了好多都说是驱动问题,结果我手机数据线插上电脑浪费了3个G装了无数遍驱动也没解决这个问题,最后看到了一个可能是

    -

    无线网卡没有权限的原因,然后就敲了两行命令,改了个配置文件,就可以愉快的连接上Wifi了,所以这里记录下来,供各位使用。

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    如何正确下载一个软件

    众所周知,一般的比较好用的软件都是国外的(实话实说,国内软件做的确实拉跨) ,所以很多时候下载成为了难住大家的第一关,鉴于确实很对人对英语有比较深的恐惧感,所以这篇博客,以受众较广的Adobe全家桶为例教大家如何下载软件。

    -

    第一步:选择正确的搜索引擎

    目前我想大家用的搜索引擎还是百度居多,但这里我要实名diss百度,使用百度很多时候前面好多篇都是广告,还有很多(balabalablabla。。。此处省略一万字)总而言之,现在的百度,往往是广告排在了广告的前面,所以我推荐大家使用bing的搜索引擎,虽然也会有广告,但排版方式比百度强了很多倍(别问我为啥不用goole,因为默认你们不会翻墙)

    -

    第二步: 选择正确的搜索方式

    image

    -

    选择这种搜索方式,你知道哪个是官网吗???而且如果官网是英文,你会不会点进去就退出然后选择那种第三方软件园然后下载?

    -

    反正我当年是这么选的。

    - - -
    - - Read more » - -
    - - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - -
    - - - - - -
    -

    - - - -

    - - -
    - - - - -
    - - -

    因为本社团ACM实力属实拉跨,所以只能找嘉豪学姐帮忙,所以链接指向的是嘉豪学姐的博客

    https://blog.csdn.net/weixin_43870697

    - - - -
    - - - - -
    -
    - -
    -
    - - - -
    - - -
    - - - - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/search.xml b/public/search.xml deleted file mode 100644 index b04ded1..0000000 --- a/public/search.xml +++ /dev/null @@ -1,771 +0,0 @@ - - - - 解决Ubuntu关机卡界面90s - /2020/01/14/%E8%A7%A3%E5%86%B3Ubuntu%E5%85%B3%E6%9C%BA%E5%8D%A1%E7%95%8C%E9%9D%A290s/ - 解决ubuntu关机卡界面90s

    注意了,这个不是系统的问题,是配置的问题。网上有很多其他的方案,下载watchdog啊,或者一行命令什么的,其实只需要改一下配置文件就可以了。

    sudo vim /etc/systemd/system.conf

    可以使用vim也可以使用ubuntu自带的gedit,用vim的话需要先apt安装一下。

    - - -

    # This file is part of systemd.
    #
    # systemd is free software; you can redistribute it and/or modify it
    # under the terms of the GNU Lesser General Public License as published by
    # the Free Software Foundation; either version 2.1 of the License, or
    # (at your option) any later version.
    #
    # Entries in this file show the compile time defaults.
    # You can change settings by editing this file.
    # Defaults can be restored by simply deleting this file.
    #
    # See systemd-system.conf(5) for details.

    [Manager]
    #LogLevel=info
    #LogTarget=journal-or-kmsg
    #LogColor=yes
    #LogLocation=no
    #DumpCore=yes
    #ShowStatus=yes
    #CrashChangeVT=no
    #CrashShell=no
    #CrashReboot=no
    #CtrlAltDelBurstAction=reboot-force
    #CPUAffinity=1 2
    #JoinControllers=cpu,cpuacct net_cls,net_prio
    #RuntimeWatchdogSec=0
    #ShutdownWatchdogSec=10min
    #CapabilityBoundingSet=
    #SystemCallArchitectures=
    #TimerSlackNSec=
    #DefaultTimerAccuracySec=1min
    #DefaultStandardOutput=journal
    #DefaultStandardError=inherit
    DefaultTimeoutStartSec=90s
    DefaultTimeoutStopSec=90s
    #DefaultRestartSec=100ms
    #DefaultStartLimitIntervalSec=10s
    #DefaultStartLimitBurst=5
    #DefaultEnvironment=
    #DefaultCPUAccounting=no
    #DefaultIOAccounting=no
    #DefaultIPAccounting=no
    #DefaultBlockIOAccounting=no
    #DefaultMemoryAccounting=no
    #DefaultTasksAccounting=yes
    #DefaultTasksMax=
    #DefaultLimitCPU=
    #DefaultLimitFSIZE=
    #DefaultLimitDATA=
    #DefaultLimitSTACK=
    #DefaultLimitCORE=
    #DefaultLimitRSS=
    #DefaultLimitNOFILE=
    #DefaultLimitAS=
    #DefaultLimitNPROC=
    #DefaultLimitMEMLOCK=
    #DefaultLimitLOCKS=
    #DefaultLimitSIGPENDING=
    #DefaultLimitMSGQUEUE=
    #DefaultLimitNICE=
    #DefaultLimitRTPRIO=
    #DefaultLimitRTTIME=
    #IPAddressAllow=
    #IPAddressDeny=

    -

    配置文件大概就长这样,找到加粗的俩行,把#注释去掉并且修改时间为1,就可以解决了

    -]]>
    - - 环境配置 - -
    - - CPU寄存器总结 - /2020/01/01/CPU%E5%AF%84%E5%AD%98%E5%99%A8%E6%80%BB%E7%BB%93/ - X86架构通用寄存器只有8个,其余为不可直接操作寄存器。在叙述寄存器单元之前,我们先将CPU内部分为三大块:

    控制单元(Control Unit)

    程序计数器 PC(Program Counter)、指令寄存器 IR(Instruction Register)、指令译码器 ID(Instruction Decoder)和操作控制器 OC(Operation Controller)。

    - -

    运算逻辑单元(Arithmetic Logic Unit)

    算术运算与逻辑运算,进行加减乘除基础运算与位移运算。

    -

    储存单元(Storage Unit)

    包含寄存器,片内缓存L1~L4,其中L1分为数据缓存与指令缓存,L4主要在Iris上以eDRAM的形式存在。
    X64片内寄存器

    -

    状态寄存器

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    字长通用寄存器指针寄存器索引寄存器区段寄存器标志寄存器
    16 BitsAX BX CX DXBP SP IPSI DICS DS SS ESFLAGS
    32 BitsEAX EBX ECX EDXEBP ESP EIPESI EDICS DS SS ES FS GSEFLAGS
    64 BitsRAX RBX RCX RDX R8~R15RBP RSP RIPRSI RDICS DS SS ES FS GSRFLAGS
    -
      -
    • AX BX CX DX 可分为高八位与低八位,例AH(High),BL(Low),寄存器之间的长度必须相同才可进行运算。
    • -
    • BP —— Base Pointer(基址指针),SP —— Stack Pointer (堆栈指针),标记Stack基准和移动的指针。
    • -
    • 指针寄存器IP记录下一条指令的偏移地址。
    • -
    • 指针寄存器SI DI指向数组内部。
    • -
    • 区段寄存器CS DS SS ES 产生储存器的绝对地址。
    • -
    • 标记寄存器FLAGS标志零位,奇偶,符号,进位等。
    • -
    • EAX EBX ECX EDX 低16位与AX BX CX DX相兼容。
    • -
    • R8~R15为X64新增通用寄存器。
      通用寄存器
      指针寄存器
    • -
    -

    指令集专用寄存器

    (我的CPU为i7-6700HQ : X86,X86-64,MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,VT-x, AVX, AVX2, FMA3, AES,TSX)

    -
      -
    • MM —— MMX(Matrix Math eXtensions,矩阵数学扩展)指令集使用,SIMD(单指令多数据(Single Instruction Multiple Data))多媒体指令集,意在提高多媒体处理能力。

      -
    • -
    • XMM —— SSE(Streaming SIMD Extensions,单一指令多数据流扩展)指令集使用,MMX继任,主要用于提高数学运算性能。

      -
    • -
    • YMM ZMM —— AVX (Advanced Vector Extensions,高级向量扩展指令集)指令集使用,作为AVX继任,将XMM寄存器扩展到YMM乃至512 Bits的ZMM。

      -
    • -
    • VT-x指令集主要用于硬件虚拟化操作,AES指令集主要用于提高系统加解密速度,FMA为AVX指令集子集,用来提高特定运算场景运算速度。

      -

      系统专用寄存器:

    • -
    • CR —— Control Register(控制寄存器)

      -
    • -
    • DR —— Debug Register(调试寄存器)

      -
    • -
    • TR —— Test Register(测试寄存器)

      -
    • -
    -

    改动此类寄存器需要Ring 0级别的权限,所以我称之为操作系统专用寄存器。

    -

    二十一世纪二十年代第一天,莫有啥好说的。

    -]]>
    -
    - - Windows蓝屏分析 - /2019/12/21/Windows%E8%93%9D%E5%B1%8F%E5%88%86%E6%9E%90/ - Windows10蓝屏

    -

    蓝屏死机(英语:Blue Screen of Death,缩写为:BSoD)指的是微软Windows 操作系统在无法从一个系统错误中恢复过来时所显示的屏幕图像。

    -

    先抛出来解决方案:

      -
    • 卸载最近一次的Windows更新,并尝试加载最近一次正常启动时的注册表
    • -
    • 卸载最近安装的驱动程序或者尝试升级/降级该驱动
    • -
    • 移除最近添加的硬件设备
    • -
    • 将QQ更换为Windows Store的UWP版本并移除所有第三方杀毒软件
    • -
    • 运行sfc /scannow以检查系统镜像
    • -
    • 重装系统
    • -
    • 重买电脑
    • -
    - - - -

    若无法正常启动,请尝试进入安全模式或者PE进行操作。

    -

    所以定期备份是个很好的习惯!本文中需要额外下载的示例或者资料,均可与此处下载。

    -
    -

    背景

    首先需要说明的是,Windows蓝屏是一种系统保护机制(可以把Windows蓝屏比喻成感冒/发烧),是Windows为保护硬件及数据的策略,当发生诸如内存非法访问,堆栈溢出等错误而Windows无法处理时,Windows将主动崩溃。虽然蓝屏的原因有很多,但其一定发生在内核层(Ring 0)。

    -
    -

    crash type:
    0x01: High IRQL fault (Kernel-mode)
    0x02: Buffer overflow
    0x03: Code overwrite
    0x04: Stack trash
    0x05: High IRQL fault (User-mode)
    0x06: Stack overflow
    0x07: Hardcoded breakpoint
    0x08: Double Free

    -
    -

    以上是NotMyFault列举的常见Windows崩溃原因。

    -

    崩溃分析

    当Windows崩溃时,显示器会切换至低分辨率下的VGA显示模式,显示蓝色背景并给出停止代码与建议,当Dump文件转存完毕后,系统将自动进行重启。

    -

    蓝屏代码

    我们可以根据Windows蓝屏时候的错误代码进行初步判断,但无法将错误定位到具体驱动或者进程。蓝屏恢复方法可以参考微软官方指引,具体错误代码可以查阅此网站或者查阅前文资料中的Code Lists。至于我为什么不贴中文译版,因为翻译实在太烂了。

    -

    Dump分析

    很不幸的是,很多时候蓝屏代码并不能帮助你准确定位问题,以便解决具体的进程或者驱动。这个时候我们需要分析Windows的内存崩溃转储文件来得出具体结论,这里的内核Dump文件即为发生崩溃时内存的部分/完整内容拷贝,具体步骤如下文所述。

    -

    创建转储文件

    在Control Panel\System and Security\System的Advanced system settings选项,Advanced选项卡,Startup and Recovery选项下便可设置。
    Startup and Recovery
    拉开Write debugging information选项即可查看转储内存类型:None/Small/Kernel/Complete/Automatic/Active。

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    类型含义
    None不创建转储日志
    Small仅保留基本信息,引起崩溃的线程内核栈与关联内存栈
    Kernel保留当前运行时的进程列表,堆栈以及驱动程序列表
    Complete记录Windows崩溃时能够访问的所有内存
    Automatic类似Kernel,但在Paging file大小存在差异
    Active类似Complete,但初步筛选故障Pages
    -

    下载工具

    WinDbg

    目前微软发布WinDbg主要借助Windows SDK,安装可以参考文档,或者使用我提供的离线包WinDbg测试页面

    -

    WinDbg Preview

    预览版为UWP应用,可直接于Microsoft Store直接下载。Store详情页
    WinDbg Preview测试页面
    Tips:如果你需要参考其它指南的话,建议安装前者,网络上大多资料均介绍此版本,不过二者差距较小,当然我很喜欢后者。

    -

    Symbols配置

    -

    When applications, libraries, drivers, or operating systems are linked, the linker that creates the .exe and .dll files also creates a number of additional files known as symbol files.

    -
    -

    在崩溃分析中,我们可以使用Symbols来定位Windows原生应用或者内容发生崩溃时的具体进程,驱动,函数。配置Symbols有若干方法,以下推荐两种,请根据实际条件选择:

    -
      -
    • 配置环境变量在本地缓存并指向Symbols公共服务器,新建系统系统变量,名称设置为_NT_SYMBOL_PATH,变量值为SRV*c:\symbol*http://msdl.microsoft.com/download/symbols ,其中SRV*与*http://… 之间的路径为Symbols文件在本地的缓存路径,例如我的缓存路径为c:\symbol。
      该句的意思即告诉WinDbg,Symbols文件位于c:\symbol,当在该路径下无法寻找到目标Symbols时,主动从http://msdl.microsoft.com/download/symbols 下载缓存。
      Symbols路径配置
      重启系统后生效,在这里分享一个技能点,在cmd中输入set PATH=C:后关闭cmd即可使环境变量在Windows不重启的情况下生效。
    • -
    • 借助dbgcmd(注意不是cmd),输入.symfix+ c:\symbol即可将当前Workspace的Symbols指向c:\symbol,之后再使用.sympath即可输出当前Symbols的配置路径,最后reload便可开始根据当前系统版本同步Symbols,如果一切正常,你会在C:\symbol目录下看到下载的文件。
    • -
    -
    0: kd> .symfix c:\symbol  
    0: kd> .sympath
    Symbol search path is: srv*
    Expanded Symbol search path is: cache*c:\symbol;SRV*https://msdl.microsoft.com/download/symbols
    - -

    配置好的测试页面会出现类似下图的提示,Symbol search path is: SRV\*c:\symbol\* http://msdl.microsoft.com/download/symbols。PATH路径
    Tips:

    -
      -
    • 目前msdl服务器似乎被墙了,请将代理置为全局。
    • -
    • 下载Symbols的过程中左下角会提示当前下载的任务名称,右侧会出现进度条,如果没有,请检查网络。
    • -
    • !!!网络问题很重要
    • -
    • 如果安装过程中遇到困难,请尝试将WinDbg的安装目录添加到环境变量中,以便寻找到SYMSRV.DLL和SYMSTORE.EXE。然而,我无法寻找到UWP版本的安装目录,请安装上文提到的第一个版本的WinDbg。

      Dump分析

      把文件丢进WinDbg等待Symbols下载完成后便可开始分析,如果你运气够好,初步的分析下,你可能会看到“Probably caused by ***”的文本,基本上即为出现问题的具体驱动/进程了。
    • -
    -

    如果没有分析结果,或者全部指向ntoskrnl类似的内核程序时,我们需要考虑进一步分析。在dbgcmd中输入!analyze -v便可开始进一步分析,我们可能会看到类似如下的Stack_text调用情况。
    Stack调用
    计算机中的Stack向低地址方向生长,于是从下至上分析,可以看到是nvlddmkm先后调用了dxgkrnl的DpiDispatchPower,DpiFdoDispatchPower,DpiFdoHandleDevicePower函数,在调用DpiFdoHandleDevicePower后即引发了watchdog.exe,随后NT内核的KeBugCheckEx启动,引发蓝屏。我们可以推测出出错的程序可能是dxgkrnl或者nvlddmkm,即DirectX程序,nVidia驱动程序。因此建议对DX进行修复,对N卡驱动进行升/降级。
    MODULE_NAME
    从文件末尾的MODULE_NAME可以看到端倪,基本判断问题为DirectX程序与nVidia驱动的不兼容。

    -

    我们随后又进行了验证,dbgcmd中输入!process即可开始验证。
    验证
    在这里我们较为关注Image: System这句与ReadMemory error: Cannot get nt!KeMaximumIncrement value. -fffff78000000000: Unable to get shared data基本判断为栈溢出。

    -

    驱动判断

    你可以使用Google来搜索该驱动属于何种设备,并尝试更新/回退。当Google搜索不到一些冷门硬件时,我们需要使用lm(list module),使用命令lm kv m nvlddmkm(k——kernel,内核;v——verbose,详细;m——match,匹配)来列出该模块的具体信息。nvlddmkm具体信息上图中,我们可以看到列出了该模块的时间戳,路径,名称,校验码等。同时,通过查阅主机的注册表我们也可以得出具体路径以及设备。

    -

    作死之路

    如果你想要更多的Dump来分析,请左转Microsoft Community,我在我的附件里(前文可下载)附上了9份Dump文件,本次分析的文件结果也已导出为html格式,于附件中。






    如果你想变得更强大,欢迎阅读书籍《深入解析Windows操作系统》,绝对是一本好书,就是有“点”厚?!
    《深入解析Windows操作系统》第六版下册

    -]]>
    -
    - - 如何输出Hello World! - /2019/12/19/%E5%A6%82%E4%BD%95%E8%BE%93%E5%87%BAHello-World%EF%BC%81/ - One issue!

    据说在学习一门语言的时候输出Hello World!会带来好运。

    哪怎么输出Hello World呢?难道就是像下面这样:

    #include<stdio.h>
    int main()
    {
    printf("Hello World!");
    return 0;
    }
    - - - -

    是的,我们就是要输出上述源代码。

    -

    输出源码

    如果我们直接运行

    -
    int main()
    {
    printf("#include<stdio.h>
    int main()
    {
    printf("Hello World!");
    return 0;
    }");
    return 0;
    }
    - -

    不出意外地报错,由于各种语言存在保留字以及需要使用无法输入的字符,因此需要对部分地方进行转义。u0dVJS.jpg
    修改后的源码如下:

    -
    int main()
    {
    printf("#include <stdio.h>\nint main()\n{\nprintf(\"Hello world\\n\");\nreturn 0;\n}");
    return 0;
    }
    - -

    此处,我们对换行符通过\n进行了转义,还对”以及\进行了转义。

    -

    AWSL

    u0ySt1.jpg
    阿伟死了!这道题与上述问题相似,不过又有一个坑。
    u0yxKS.jpg
    我最开始的源码是这样的:

    -
    int main()
    {
    printf("#include <bits/stdc++.h>\nusing namespace std;\n\nint main()\n{\n\t//输出 Hello World !\n\tcout<<\"Hello World !\"<<endl;\n\n\treturn 0;\n}");
    return 0;
    }
    - -

    我使用了\n和\t来对上述源码进行转义,提交之后报格式错误。由于有了前几题的心酸历程,我去仔细看了下格式,发现缩进只有四个空格。而我使用Mingw-W64编译出来的代码中制表符占据了八个空格的位置,不同编译器以及编辑器的差异造成了上述问题。

    -

    修改后的源码如下:

    -
    int main()
    {
    printf("#include <bits/stdc++.h>\nusing namespace std;\n\nint main()\n{\n //输出 Hello World !\n cout<<\"Hello World !\"<<endl;\n\n return 0;\n}");
    return 0;
    }
    - -

    在使用Tab还是Space的问题上的讨论似乎成为了与Vim/Emacs哪个更好相似的问题。

    -

    转义表

    以下即为C语言常用转义字符表格:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    转义字符意义ASCII码值(十进制)
    \a响铃(BEL)007
    \b退格(BS) ,将当前位置移到前一列008
    \f换页(FF),将当前位置移到下页开头012
    \n换行(LF) ,将当前位置移到下一行开头010
    \r回车(CR) ,将当前位置移到本行开头013
    \t水平制表(HT)009
    \v垂直制表(VT)011
    '单引号039
    "双引号034
    \\反斜杠092
    -

    当然C语言也提供一种数字转义方法,如下:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    八进制转义十六进制转义名称/意义
    \7\x07响铃
    \10\x08退格
    \12\x0A换行
    \14\x0C换页
    \40\x20空格
    \60\x300
    \101\x41A
    \141x61a
    -]]>
    -
    - - win10下安装Python - /2019/12/19/%E5%AE%89%E8%A3%85python/ - -

    我来砸场了!Windows在1903更新中实现了Python开箱即用的体验,你只需要在cmd中输入python3,系统便会引导你去Store下载Python依赖包。QqGiQS.jpg

    -

    1.自己的碎碎念

    python现在作为很火的语言也越来越受大家欢迎,对有经验的程序猿还好,但对新手程序猿来说(尤其是选择恐惧症)来说,安装python恐怕是一件难事,今天就分享给大家我安装python的方法

    2.环境需求

    win10

    -

    python版本:python3.7

    - -

    3.下载步骤

    当然这里还有一个推荐方法就是直接利用微软自带的应用商店安装一键安装,也很方便。不过我个人还是比较喜欢这种手动下载的方法
    1.首先要到python官网下载python,需要下载对应的版本(我觉得都9102年了应该很少有32位的电脑了吧)不过以防万一,大家还是去搜一下怎么去查自己系统多少位吧,我这里就不再赘述了

    -

    https://www.python.org/downloads/windows/ 这里是python的官方下载网址,估计不少初学者看见这个页面头都大了(就像我一样,不知道下载哪个)

    -

    首先你先选择你要安装的版本,

    -

    image

    -

    我们这里安装3.7.4版本,所以点击一下即可

    -

    进入页面后直接拉到最后有列表如下

    -

    image

    -

    (Windows x86-64 executable installer)我们点一下这个链接,就可以下载了

    -

    4.安装步骤

    下载完成后双击执行下载的exe程序,进入安装界面

    -

    image

    -

    请选择 Custo那一串(汉语意思为自定义安装,为啥不让他自动安装心里应该清楚)并且记得把该页面最下面俩个方框的对勾打上

    -

    然后直接点next进入这个页面

    -

    image

    -

    这里你就可以自定义python的安装路径了,然后直接install即可

    -

    5.验证安装

    image 安装完成后出现这个界面

    -

    然后再进入cmd 输入python -V

    -

    示例如下
    如果显示python的版本则安装成功

    -

    则安装成功

    -

    开始愉快的使用python吧

    -]]>
    - - 代码 - 环境配置 - -
    - - Linux on Windows - /2019/12/19/Linux-on-Windows/ - 前言

    毋庸置疑的是,Windows是家用平台的巨头,Linux是服务器端的主流系统,而在实际生产中时常遇到需要使用二者的情况,而本篇文章正是讨论如何将二者安装于同一硬件基础上。其中包括既传统的双系统,虚拟机系统,又涉及Windows 10的新特性,WSL系统。

    双系统

    基于硬件的双系统,此处概念的Linux完全独立于windows。优点是二者独立,互不干扰,且系统完整,不会出现诡异的问题,系统资源也能得到完整利用。

    - -

    安装双系统只需要准备烧录好镜像的U盘(引导程序及镜像),并在BIOS里以U盘引导启动并按照指引完成安装即可。

    -

    当然,此种方案的缺点也十分明显,由于两个系统相互独立,因此要想进行切换,就必须进行硬件层次上的重启,不仅耗时而且资料会得到损失。

    -

    虚拟机

    虚拟机的运行需要硬件的支持,因为某些CPU并不支持虚拟化。常见的Windows虚拟机包括但不仅限于virtualbox,VMware。。。此类虚拟机优势即是两者相对独立,并且可以随时进行切换,系统选择灵活,资源调控便捷。当然,优点多多,缺点也有,那就是资源占用问题,由于虚拟出了一个操作系统,因此,资源占用十分严重,而且常用虚拟软件的授权费挺贵哈。

    -

    安装流程也全称是GUI界面,不过需要注意资源的分配,虚拟机和主机的配置要恰到好处,避免虚拟机或主机发生卡顿,当然,既然是虚拟技术,就必然有性能损耗。

    -

    巨硬WSL

    巨硬这个可以说是非常硬了,WSL是“Windows Subsystem for Linux”的简称,从名称可以看出来WSL被归类为Windows的子系统,是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,最早在Windows 10的1607中出现并延续下来。当然,这个子系统,非常干净,除去内核的文本Ubuntu 16.04LTS只有195MB大小。当然,这样的Linux是不自带编译器的。

    -

    实现原理

    -

    简的来说,便是LX会话器担任Windows与Linux交互的媒介,并通络内核模式与运行在用户模式下的Pico进行交互,Pico进程则负责模拟并运行相应的二进制文件,大部分情况下对Linux的操作会被映射为对Windows内核的调用。
    参考

    -

    安装

    1,Windows版本高于1607并在设置下的更新与安全中打开开发者人员模式。

    -

    2,接着在PowerShell下键入
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux以打开Windows子系统功能。

    -

    同样,也可以在控制面板下手动打开“适用于Windows的Linux子系统”。

    -

    -

    3,重启之后在Microsoft Store下选择想要安装的Linux发行版,等待安装流程结束,设置新用户名及密码。

    -

    后期配置

    系统安装之后,因为Ubuntu的默认root账户密码是每次开机随机生成的,可以使用
    sudo passwd root
    来修改root账户密码。

    -

    此外,由于众所周知的原因,Ubuntu的apt包管理服务器设在国外,因此需要修改为国内镜像源。

    -
    # 备份原文件
    cp /etc/apt/sources.list /etc/apt/sources.list_backup
    - -
    # 修改源配置文件
    vim /etc/apt/sources.list
    - -

    修改内容为(当然可以选用其它软件源):

    -
    # 默认注释了源码仓库,如有需要可自行取消注释
    deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

    # 预发布软件源,不建议启用
    # deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    - -

    之后使用

    -
    apt-get update
    - -

    更新包索引来生效。

    -

    当然,由于与Windows共用一套硬件,而Windows下的服务占用了22端口,因此需要更换Linux的SSH登陆端口。

    -

    修改配置文件之前使用

    -
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
    - -

    来备份原配置文件。此处通过修改/etc/shh/sshd_config来实现对SSH的配置。

    -
    vim /etc/ssh/sshd_config
    - -

    进入编辑界面,接着修改port 为2333(或者其他不与Windows产生冲突的端口),将ListenAddress前的注释去掉以修改SSH监听地址。接下来按照自己的需求修改对应值,例如可将UsePrivilegeSeparation值修改为no,PasswordAuthentication值修改为yes,PermitRootLogin修改为yes。具体依靠个人情况配置,这里贴一篇博文

    -

    安装配置之后,重启SSH服务。接着以IP为127.0.0.1或者主机localhost,端口号2333进行SSH连接。例如

    -
    ssh root@localhost -p 2333
    - -

    连接到本地SSH服务,倘若需要在主机以外访问SSH,则需配置防火墙。

    -

    安装基本组件后即可依据个人环境要求配置Linux,倘若报错,可能是因为这个精简的Linux缺少了依赖库,下载安装即可。

    -

    *

    -
    #倘若遇到Cannot load host key则可以考虑重新生成公私匙。
    rm /etc/ssh/ssh*key
    dpkg-reconfigure openssh-serve
    - -

    -

    分析

    此种运行Linux的方式,占用系统资源少,调用方便,但由于是Windows子系统,因此存在一定的兼容问题,但是一般生产生活完全够用。

    -

    资源

    WSL提供了两种可被Linux访问的文件系统:VolFs和DriveFs。前者在各方面都非常类似于常规的Linux文件系统,包括权限支持、symbolic链接、大小写敏感,以及Windows文件系统中不允许使用的字符。后者提供了与Windows相互访问的方式,使得用户能够在Linux中看到所有Windows卷。

    -

    因此,Linux与Windows的资源是允许相互访问的,Linux下的/mnt挂载的有Windows的盘符,当然也有全部文件。

    -


    Windows下的Linux文件则存放在C:\Users[用户名]\AppData\Local\Packages[对应包名],例如我可以通过C:\Users\wrzto\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc来访问Linux资源。

    -

    当然,值得注意的是,但二者的资源处于相对竞争状态时,Windows优先获取资源。

    -

    资料

    Linux修改软件源帮助

    -]]>
    - - Windows - -
    - - 从iCloud迁移照片到Google Photos - /2019/12/19/%E4%BB%8EiCloud%E8%BF%81%E7%A7%BB%E7%85%A7%E7%89%87%E5%88%B0Google-Photos/ - 缘由&要求

    Google大法好,Photos无限容量备份照片!

    当然,需要一台位于境外的VPS,从iCloud上拉资源,再上传到Google Drive。

    从iCloud上下载

    由于Apple没有开放iCloud的API,于是关于iCloud下载的第三方程序少之又少。于是我找到了这个icloudpd

    - - -
    #以Ubuntu/Debian系统为例
    #下载并安装pip,若为安装unzip,则需使用apt-get install unzip。
    root@Raincorn:/icloud# wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
    --2019-01-30 20:58:55-- https://bootstrap.pypa.io/get-pip.py
    Resolving bootstrap.pypa.io (bootstrap.pypa.io)... 151.101.0.175, 151.101.64.175, 151.101.128.175, ...
    Connecting to bootstrap.pypa.io (bootstrap.pypa.io)|151.101.0.175|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1700321 (1.6M) [text/x-python]
    Saving to: ‘get-pip.py’

    get-pip.py 100%[===========================>] 1.62M --.-KB/s in 0.02s

    2019-01-30 20:58:55 (79.4 MB/s) - ‘get-pip.py’ saved [1700321/1700321]

    root@Raincorn:/icloud# python get-pip.py
    DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
    Collecting pip
    Downloading
    Successfully installed pip-19.0.1 setuptools-40.7.1 wheel-0.32.3
    #由于已经由pip收录,可以使用pip install icloudpd来安装icloudpd。
    - -

    使用icloud photos(注意,photos为你要保存照片的目录,可自定义为其他。)
    接着会要求输入iCloud账号密码,验证完成后就会开始下载,我用了51分20秒把2324张照片下载了下来。但是为什么速度不理想,原因很大程度上是因为苹果的iCloud服务器由云上贵州接管,服务器在国内,晚上又是高峰时段。

    -

    上传到Google Drive

    Google作为行业巨头,全力推行开源事业,有关Drive的有关程序网上比比皆是,我这里介绍我正在使用的一个名为rclone的管理程序。

    -

    rclone的安装

    下载rclone

    #按照官方Docs操作就好。
    #首先下载并解压rclone
    root@Raincorn:~# wget https://downloads.rclone.org/rclone-current-linux-amd64.zip

    root@Raincorn:~# unzip rclone-current-linux-amd64.zip

    root@Raincorn:~# cd rclone-*linux-amd64
    - -

    复制赋权

    cp rclone /usr/bin/

    chown root:root /usr/bin/rclone

    chmod 755 /usr/bin/rclone
    #至于为什么要有这一步,可以参考之前那篇关于[环境变量](https://raincorn.top/2018/08/29/%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/)的文章,间的来说,就是为了在用rclone时能够找到对应的程序。
    - -

    安装帮助页面

    mkdir -p /usr/local/share/man/man1

    cp rclone.1 /usr/local/share/man/man1/

    mandb
    - -

    配置

    键入rclone config即可进入配置页面。

    -

    这里是配置实例,基本上有些英语基础就没问题。也可以参考https://rclone.org/drive/ 给出的实例,或者https://www.chenweiliang.com/cwl-694.html 的例子。

    -
    root@Raincorn:/rclone# rclone config
    2019/01/30 21:25:58 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
    No remotes found - make a new one
    n) New remote
    s) Set configuration password
    q) Quit config
    n/s/q> n(创建新的Drive类型)
    name> Google(自定义配置的名称)
    Type of storage to configure.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / A stackable unification remote, which can appear to merge the contents of several remotes
    \ "union"
    2 / Alias for a existing remote
    \ "alias"
    3 / Amazon Drive
    \ "amazon cloud drive"
    4 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
    \ "s3"
    5 / Backblaze B2
    \ "b2"
    6 / Box
    \ "box"
    7 / Cache a remote
    \ "cache"
    8 / Dropbox
    \ "dropbox"
    9 / Encrypt/Decrypt a remote
    \ "crypt"
    10 / FTP Connection
    \ "ftp"
    11 / Google Cloud Storage (this is not Google Drive)
    \ "google cloud storage"
    12 / Google Drive
    \ "drive"
    13 / Hubic
    \ "hubic"
    14 / JottaCloud
    \ "jottacloud"

    Storage> 12(选择类型,会随着版本变动而有所变化。)
    ** See help for drive backend at: https://rclone.org/drive/ **

    Google Application Client Id
    Leave blank normally.
    Enter a string value. Press Enter for the default ("").
    client_id>
    Google Application Client Secret
    Leave blank normally.
    Enter a string value. Press Enter for the default ("").
    client_secret>
    Scope that rclone should use when requesting access from drive.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Full access all files, excluding Application Data Folder.
    \ "drive"
    2 / Read-only access to file metadata and file contents.
    \ "drive.readonly"
    / Access to files created by rclone only.
    3 | These are visible in the drive website.
    | File authorization is revoked when the user deauthorizes the app.
    \ "drive.file"
    / Allows read and write access to the Application Data folder.
    4 | This is not visible in the drive website.
    \ "drive.appfolder"
    / Allows read-only access to file metadata but
    5 | does not allow any access to read or download file content.
    \ "drive.metadata.readonly"
    scope> 1(即允许rclone获得你全部的Drive访问权限。)
    ID of the root folder
    Leave blank normally.
    Fill in to access "Computers" folders. (see docs).
    Enter a string value. Press Enter for the default ("").
    root_folder_id>
    Service Account Credentials JSON file path
    Leave blank normally.
    Needed only if you want use SA instead of interactive login.
    Enter a string value. Press Enter for the default ("").
    service_account_file>
    Edit advanced config? (y/n)
    y) Yes
    n) No
    y/n> n(不进行高级配置。)
    Remote config
    Use auto config?
    * Say Y if not sure
    * Say N if you are working on a remote or headless machine or Y didn't work
    y) Yes
    n) No
    y/n> n
    If your browser doesn't open automatically go to the following link: https://accounts.google.com/(你需要登陆的链接。)
    Enter verification code> 4/4gBaYe2_(你在网页中获得erification code)
    Configure this as a team drive?
    y) Yes
    n) No
    y/n> n
    --------------------
    [Google]
    type = drive
    scope = drive
    token = {"access_token":"ya29.GluhBkLo5l7zLGZFmeHEbBSWFxJD8HaiAqpDLmD7BPPFUGcpXrgnnd8pWoahZJvgyv9Qk5yc7TxRLRmxKt31N8mmjP4bbvr2sSb_E8ZbpRNetFtglc2SrjMRFW6z","token_type":"Bearer","refresh_token":"1/jmLzUeXGBUqMVHV_k4x8F6UhPXkbMW-U-zJpnGnnv6I","expiry":"2019-01-30T22:28:52.644486809+08:00"}
    --------------------
    y) Yes this is OK
    e) Edit this remote
    d) Delete this remote
    y/e/d> y
    Current remotes:

    Name Type
    ==== ====
    Google drive

    e) Edit existing remote
    n) New remote
    d) Delete remote
    r) Rename remote
    c) Copy remote
    s) Set configuration password
    q) Quit config
    e/n/d/r/c/s/q> q
    - -

    开始上传Google Drive

    (本地文件夹以origin,Drive文件夹以backup为例)
    在web端新建一个名为backup的文件夹,新建完成后使用

    -
    root@Raincorn:/rclone# rclone lsd Google:
    -1 2019-01-30 21:32:54 -1 backup
    #这里的“Google”即为你所创建的配置名称,backup即为你刚刚新建的那个用来备份的文件夹。
    root@Raincorn:/rclone# rclone copy /root/origin Google:backup
    #/root/origin为源文件夹,Google:backup为配置名称+远程文件夹。
    - -

    挂到Screen中,第二天即可迁移完成。

    -]]>
    -
    - - Windows安装文件初探 - /2019/12/19/Windows%E5%AE%89%E8%A3%85%E6%96%87%E4%BB%B6%E5%88%9D%E6%8E%A2/ - 首先声明,我只是感兴趣于iso内的安装文件,并无他意,这篇文章也仅仅代表我个人的观点与立场。一个有意思的地方是,安装文件里的文本相当一部分编码采用的是扩展集UTF-16而非UTF-8或GBK。

    概览

    我的系统是政府精简版1709,使用rufus烧录,大体上精简了一部分次要功能。
    ZgubU1.png

    我的U盘位于/run/media/raincorn/WIN10_CMGE/,该目录下有5个文件夹以及4个文件。

    - - -

    文件

    注意,下文若未单独指明,文本文件内容编码则为UTF-8。

    -

    autorun.inf

    文件内容:

    -
    [AutoRun.Amd64]
    open=setup.exe
    icon=setup.exe,0

    [AutoRun]
    open=sources\SetupError.exe x64
    icon=sources\SetupError.exe,0
    - -

    inf文件,即为windows操作系统下用来描述设备或文件等信息的文件。此处的autorun.info,顾名思义,是针对X86 电脑的自动运行标识符。文件内容反馈出的含义为运行setup.exe,并可用于指定盘符图标。

    -

    bootmgr

    传统BIOS模式下的引导文件。

    -

    传统BIOS+MBR启动流程为:

    -
      -
    • PC上电,主板芯片组加电自检(POST)。
    • -
    • 自检通过则优先从设置的默认设备启动。
    • -
    • 读取位于硬盘第一扇区的MBR记录,并搜寻活动分区。
    • -
    • 在根目录下读取bootmgr(启动管理器),此时计算机控制权交由bootmgr。
    • -
    • bootmgr搜索boot目录下的BCD(启动配置数据),若存在多个启动选项则会交由用户选择,反之直接启动。
    • -
    • bootmgr继续读取并运行Windows\System32\winload.exe。
    • -
    • winload.exe则完成内核读取与其余启动过程。
    • -
    -

    简洁版便是:BIOS-POST-MBR-Bootmgr-BCD-Winload.exe-内核

    -

    bootmgr.efi

    UEFI启动的引导文件。

    -

    经典UEFI+GPT启动流程为:

    -
      -
    • PC加电,UEFI 读取位于 ESP 分区 EFI/Microsoft/Boot/目录下的 bootmgfw.efi 。
    • -
    • 运行bootmgr.efi并将计算机控制权交于 bootmgfw 。
    • -
    • bootmgfw搜索并读取EFI/Microsoft/Boot/BCD,若有多个启动选项则交由用户选择,反之启动默认系统。
    • -
    • 默认启动 Windows之后,bootmgrfw 搜索并读取 Windows 分区 Windows\System32 目录下的 winload.efi 程序。
    • -
    • winload.efi完成后续内核加载与启动流程。
    • -
    -

    二者区别:ZgubU1.png

    -

    setup.exe

    用于正常windows环境或者预安装环境下启动安装程序的应用文件。

    -

    文件夹内容

    boot

    BIOS启动流程所需的文件。

    -

    EFI

    UEFI启动流程所需的文件。

    -

    sources

    Windowa安装文件所在位置,一般而言包含install.wim和预安装环境。

    -

    support

    包含帮助信息以及系统工具。

    -]]>
    -
    - - Git初窥 - /2019/11/19/git%E5%88%9D%E7%AA%A5/ - 初衷

    因为学校留作业要交Github上,但又很厌烦在页面上点来点去的方法,所以写下命令行git提交文件的方法供大家使用,我个人认为如果会用的话是能提升工作效率的。

    安装git

    我假设你是在Windows系统上

    在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

    安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

    - - - -

    image

    -

    安装完成了,请在命令行输入俩行命令

    -
    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
    - -

    其中把“Your name”更改为你的github名字

    -

    email更改为你的github注册的邮箱即可。

    -

    然后以我的github中的仓库为例吧

    -

    在你想要存放文件的地方打开git bash或者cmd命令行

    -

    然后输入

    -

    git clone +“你的仓库的地址”

    -

    我的就是

    -

    git clone https://github.com/hhhhhpc/LabExercises_02

    -

    然后等待下载你会发现有一个文件夹了,

    -

    然后使用cd命令进入这个文件夹

    -

    image

    -

    然后再文件夹里创建一个新的文件

    -

    image

    -

    当然,你可以在这个新的文件夹里放很多其他的东西。

    -

    然后在命令行里输入 git add .

    -

    这条命令是为了告诉git你添加了什么文件,用.这个通配符是让他把更改的文件都算上。

    -

    如果不报错的话请输入git commit -m “xxxx”

    -

    这是为了告诉git你这次提交更改了什么

    -

    就拿我这次来示例,我是创建了个test文件,就可以写

    -

    git commit -m “test”

    -

    如果这俩步里面报错了的话请不要慌张,一般你把报错信息复制去搜索一下都能解决问题。

    -

    然后这两步做完在命令行里输入

    -

    git push即可,这样你在本地文件夹里更改的操作就能更新在你的github上。

    -

    我个人是比较推荐这种方式的,毕竟点来点去的方法工作效率是有点低的。

    -]]>
    - - 代码 - -
    - - 记录一次博客迁移 - /2019/11/06/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1%E5%8D%9A%E5%AE%A2%E8%BF%81%E7%A7%BB/ - 记录一下这次的博客迁移

    因为以前的懒和图方便,把图床和博客的服务器都放在了github上,白嫖别人的资源。

    但事实证明了白嫖不是永久的

    image

    在前几天就得到了惨痛的教训,因为图片放在github上,所以全部图片加载不出来,这也导致很多博客本来简单易懂,这一来,变得难的离谱,本来我还想等着等着他恢复凑合着用吧。

    但当我一天想更新一篇文章的时候!!!!!!

    - - - - -

    我发现文章也没法更新了,而且github仓库里可以更新,但我的博客却不会更新,简直抓狂,无奈,只能选择把所有服务都部署在我自己的服务器上,这样才能不受人掣肘。

    -

    当然,因为博客也刚起步,整个迁移的工作量也不大,就是把所有图片的引用路径和以前在github部署的配置文件都改一下,但还是要引以为戒,尽量在自己可以掌控的范围内做事情。

    -

    冲冲冲!!!

    -]]>
    - - 日常 - -
    - - python爬虫初窥(三) - /2019/10/21/python%E7%88%AC%E8%99%AB%E5%88%9D%E7%AA%A5-%E4%B8%89/ - python爬虫初窥(三)BeautifulSoup库

    1.前言

    13上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据,而第一篇的时候就说过了,爬虫获取到信息后下面就是对信息的处理,而我比较喜欢使用处理数据的库是用BeautifulSoup这个库。

    2.运行环境

    同上篇一样 且自行安装BeautifulSoup库

    - -

    https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/这里是这个库的中文网站。

    -

    3.开工

    3.1 原理

    Beautiful Soup将HTML文档看成一个复杂的树形结构,每个节点都是Python对象,而所有对象可以归纳为四个类型,Tag , NavigableString , BeautifulSoup , Comment

    -
    3.2 Tag

    我们知道HTML代码可以说所有内容都是存放在标签里的,而这个库的标签也是这个意思。

    -

    我们找个例子来了解一下吧。

    -
    from bs4 import BeautifulSoup

    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="title"><b>The Dormouse's story</b></p>
    <p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>

    <p class="story">...</p>
    """
    soup = BeautifulSoup(html_doc, 'lxml') #声明BeautifulSoup对象
    find = soup.find('p') #使用find方法查到第一个p标签
    print("find's return type is ", type(find)) #输出返回值类型
    print("find's content is", find) #输出find获取的值
    print("find's Tag Name is ", find.name) #输出标签的名字
    print("find's Attribute(class) is ", find['class']) #输出标签的class属性值
    - -

    image

    -

    可以看到,你查到的是第一个P标签。

    -

    而找到的标签里有 .name和.attribute类型,.attribute是返回那个class的类型

    -
    3.3 NavigableString

    这个就是标签中的文本内容但是不含标签,你可以试一下例子

    -

    再上面的例子中 最后一行加入print(‘NavigableString is:’, find.string) 就可以得到下面的输出

    -

    image

    -
    3.4 BeautifulSoup

    这个对象表示一个文档的全部内容,支持遍历文档树和搜索

    -
    3.5 Comment

    这个对象是HTML中的注释

    -
    markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
    soup = BeautifulSoup(markup)
    comment = soup.b.string
    type(comment)
    # <class 'bs4.element.Comment'> //应该输出内容
    - -
    3.6 BeautifulSoup的遍历方法

    一般常用的有子节点,父节点,及标签名的方式遍历

    -

    关于子节点和父节点的定义可参考这篇 https://www.w3school.com.cn/htmldom/dom_nodes.asp

    -
    3.6.1 节点和标签名
    soup.head #查找head标签
    soup.p #查找第一个p标签

    #对标签的直接子节点进行循环
    for child in title_tag.children:
    print(child)

    soup.parent #父节点

    # 所有父节点
    for parent in link.parents:
    if parent is None:
    print(parent)
    else:
    print(parent.name)

    # 兄弟节点
    sibling_soup.b.next_sibling #后面的兄弟节点
    sibling_soup.c.previous_sibling #前面的兄弟节点

    #所有兄弟节点
    for sibling in soup.a.next_siblings:
    print(repr(sibling))

    for sibling in soup.find(id="link3").previous_siblings:
    print(repr(sibling))
    - -
    3.6.2 搜索文档树

    常用的方式是find()和find_all(),不常用的我就不多提了,想看的可以去官方文档查一下

    -

    可以通过tag的name,即名字为name的tag

    -

    attr参数,就是tag的属性,即class

    -

    string参数,搜索文档中字符串的内容

    -

    recursive 参数: 调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点。如果只想搜索tag的直接子节点,可以使用参数 recursive=False 。可以看一下示例

    -
    soup.find_all("title")
    # [<title>The Dormouse's story</title>]
    #
    soup.find_all("p", "title")
    # [<p class="title"><b>The Dormouse's story</b></p>]
    #
    soup.find_all("a")
    # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
    # <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
    # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
    #
    soup.find_all(id="link2")
    # [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
    #
    import re
    soup.find(string=re.compile("sisters"))
    # u'Once upon a time there were three little sisters; and their names were\n'
    - -

    现在最基本的python爬虫需要用的东西都已经介绍完了,下面来进行下实战吧

    -

    实战

    这次就爬个天气预报的信息好了

    -
    import requests

    url = 'http://www.weather.com.cn/weather/101230101.shtml'

    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
    'AppleWebKit/537.36 (KHTML, like Gecko) '
    'Chrome/69.0.3486.0 Safari/537.36'} # 模拟一个报头,将爬虫变为浏览器
    response = requests.get(url=url, headers=header)
    response.encoding = 'utf-8' # 指定返回信息的编码格式

    print(response.text)
    - -

    然后输出内容应该是一大堆内容,这里就不贴图了。

    -

    然后现在我们找到我们需要爬下来的内容,首先打开开发者模式可以看到右边一坨花花绿绿的代码,不要慌张,我教你怎么正确寻找你要的东西。

    -

    以这个页面为例我们想要的肯定是这一部分内容

    -

    image

    -

    你可以对着他们点击右键然后有个叫检查或者审查元素的按钮,这样你就可以看见右边的的代码会跳到一个地方,然后根据那个地方你可以找他的父节点或者其他的,可以看见他的HTML标签和class然后就可以用BS库进行提取了。

    -

    -

    就比如这个,这个单个的标签是 li class为 sky啥啥啥的的,而且可以看到他的父标签是ul class是

    -

    t clearfix

    -

    -

    然后我们验证一下,父标签果然就是这一列。

    -

    然后我们就开始用BS库进行解析吧

    -
    import requests
    from bs4 import BeautifulSoup
    url = 'http://www.weather.com.cn/weather/101230101.shtml'

    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
    'AppleWebKit/537.36 (KHTML, like Gecko) '
    'Chrome/69.0.3486.0 Safari/537.36'}

    response = requests.get(url=url, headers=header)
    response.encoding = 'utf-8'
    soup = BeautifulSoup(response.text, 'lxml')
    weather = soup.find('ul', class_='t clearfix') # 定位 HTML标签为UL 类型为t clearfix的内容
    print(weather.text)
    - -

    这个代码里面 weather就是我们想要提取出来的内容了。

    -

    当然你也可以通过正则表达式来获取更详细的信息。

    -

    然后你就可以对这些数据进行处理,比如文件的存贮,发送到其他地方,这都随你便了。

    -

    当然还有就是我们这里并没有应对反爬虫的机制,也没有涉及到发送post请求的爬虫,我就不赘述了,有兴趣的

    -

    关于python爬虫的教程就到这把,如果大家有兴趣的话可以去试点更多有意思的,比如爬图片然后存贮到其他地方,我这里就不再赘述了。

    -]]>
    - - 代码 - -
    - - python爬虫初窥(二)requests库 - /2019/10/16/python%E7%88%AC%E8%99%AB%E5%88%9D%E7%AA%A5%EF%BC%88%E4%BA%8C%EF%BC%89requests%E5%BA%93/ - python爬虫初窥(二)requests库

    1.前言

    上一节说过了,爬虫是模拟浏览器向服务器发送请求,然后获取服务器的响应。然后再对数据进行处理,所以我们要利用requests库发送各种HTTP请求来获取网站上的数据。

    2.运行环境

    系统版本

    我使用的是win10,不太喜欢(其实还是没钱)Mac。。。。所以这个教程就以win为例了。

    - - -

    python版本

    -

    我的是3.6版本,关于如何下载python本博客里也有教程(滑稽)

    -

    3.IDE

    我使用的是pycharm,是JB公司的产品,简直好用的一批好吧。吹爆

    -

    4.安装requests库

    如何利用pycharm安装第三方库可以参考上篇教程贴的连接的例子。

    -

    而如果你想深入了解requests库的话可以参考这个文档http://cn.python-requests.org/zh_CN/latest/,这个文档还是很顶的。

    -

    5.开工

    废话这么多,想必大家也看烦了,现在开始编写代码吧。

    -

    由于本篇教程小白向,所以怎么使用pycharm写python代码也顺便教给你们吧

    -

    https://jingyan.baidu.com/article/09ea3ede7826d5c0afde3942.html可以参考这篇教程

    -

    当然,我们这里要输入的代码不是hello world

    -

    而是下面的代码

    -
    import requests #导入requests库
    r = requests.get('https://haut-hardware-of-league.github.io/') #像目标url地址发送get请求,返回一个response对象
    print(r.text) #r.text是http response的网页HTML
    - -

    你是不是想问就这就这就这就这就这?

    -

    没错,就这就这就这就这就这

    -

    执行完之后底部便会出现输出结果,这就完成了python爬虫的第一步,获取网页的HTML内容。

    -

    当然你可以给get加其他参数或者使用post请求,当然,由于这里是小白向,就不多言了,而且我在上面贴的有中文的官方文档的连接,有兴趣深究的可以去看一下,下面我就再简单介绍一个requests库好了。

    -

    get请求

    无参数的

    -

    r = requests.get("https://unsplash.com")

    -

    这也是我们刚刚用到的,其实就是向网站发送一个get请求,返回值存到了r里,r的type是response

    -

    当然get请求也可以传参数

    -
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.get("http://httpbin.org/get", params=payload)
    - -

    上面代码向服务器发送的请求就包含了俩个参数,key1和key2,以及俩个参数的值,

    -

    实际上构成了这个网址http://httpbin.org/get?key1=value1&key2=value2

    -

    post请求

    无参数的post请求和get请求一样只不过把get改为post即可

    -

    有参数的post请求其实和get也一样,也是把get改为post就行了

    -
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post("http://httpbin.org/post", data=payload)
    - -

    post请求是用来提交数据的,即填写一堆输入框比如账号密码啥的,然后提交。

    -

    其他请求平常用的也不多我就不赘述了。

    -]]>
    - - 代码 - -
    - - python爬虫初窥(一) - /2019/10/15/python%E7%88%AC%E8%99%AB%E5%88%9D%E7%AA%A5-%E4%B8%80/ - python爬虫初窥(一)

    前言

    互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML,CSS,JS代码返回给浏览器,代码经由浏览器解析,将丰富多彩的页面呈现在我们眼前。而本教程是利用python进行爬虫的一个入入入入入入入入门级教程,小白向。

    1.什么是爬虫

    如果我们把互联网比作一个蜘蛛网,数据便存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,

    - -

    沿着网抓取自己的猎物(数据)

    -

    从技术层面来说,爬虫就是程序通过模拟浏览器的行为:向网站发起请求,获取网站的资源,

    -

    当然获取资源后还需要对数据进行提取和过滤这样才能继续使用。

    -

    2.爬虫的基本流程

    程序发送请求———>获取响应内容————>解析内容————>保存数据

    -

    而这个流程里所需的知识一般有:

    -

    HTML,因为你要解析内容就要知道从内容中获取你想要的数据,所以这就需要你对HTML有所了解,这样你才知道你怎么去找你想要提取的内容。

    -

    Python,因为这篇教程是用python语言写的爬虫,所以对python的了解是必须的,如果你以前对python不了解,建议去https://learnku.com/docs/tutorial/3.7.0这个网站先了解一下python的基本语法。

    -

    TCP/IP,HTTP协议,这些能让你了解爬虫的逻辑而不至于一头雾水去学习爬虫,

    -

    还有就是细分的话解析内容的时候需要,re(正则表达式),第三方解析库beautifulsoup,json模块等。保存数据的话可能牵扯到数据库或者文件读写等内容。

    -

    3.http协议 请求与相应

    image

    -

    Request 用户将自己的请求通过浏览器(client)发送给服务器(server),请求可能带自己的个人信息

    -

    Response:服务器接受请求,分析用户发来的请求信息,然后返回数据(返回数据可能包括图片,htmm,css,js的代码)

    -

    而Request分为GET/POST请求,GET一般为提交请求获取一个页面,而POST会提交数据给服务器然后获取新的页面

    -

    4.运行环境

    我使用的是WIN10,python是3.7,IDE是PyCharm,Pycharm有社区版,而且如果学校能注册学校邮箱的话也是可以白嫖四年专业版的(咱们学校好像是可以的)。

    -

    5.第三方库的安装

    第三方库的安装的话,我个人建议如果不太熟悉不同版本python或者虚拟环境python和pip的关系的话,可以使用pycharm添加第三方库,也很方便。

    -

    https://blog.csdn.net/qiannianguji01/article/details/50397046这是pycharm添加第三方库的教程。

    -

    因为pip方便是方便,但如果不太了解python第三方库添加日后可能会感到迷惑。

    -

    这次的教程就这样,下一篇开始代码的讲解

    -]]>
    - - 代码 - -
    - - 关于开发板 - /2019/09/30/%E5%85%B3%E4%BA%8E%E5%BC%80%E5%8F%91%E6%9D%BF/ - 为什么要学开发板

    众所周知,近些年,物联网是很火的一个名词,而它的兴盛源于对信息获取的便捷性。

    -

    而开发板是物联网中最重要的一环,可以说开发板配合传感器负责了物联网中的俩项,获取信息和传输信息。

    -

    而且物联网的入门没有想象中的那么难,而且物联网可以看做和互联网是一样的,只不过是连接了传感器并将信息发到一个地方并进行处理。

    -

    当然,我只告诉大家怎么学物联网中开发板即底层的部分,因为其他部分基本是软件工程或计科专业才会去做的数据处理和可视化等处理。

    -

    好了,不废话了,步入正题。

    - -

    我推荐的开发板类型

    如果是刚入门学习开发板的话,我比较推荐学习Arduino体系,因为Arduino体系是类C的代码编写,而且相较于其他体系是资源最多的体系,而Arduino体系里比较好用的开发板有Arduino UNO,Arduino Mega,这俩个是比较经典的开发板而且实用性比51强得多。如果想购买的话可以去淘宝或者京东购买。

    -

    Arduino入门教程

    刚才也说过了,Arduino体系是资源最多的体系,这么多人珠玉在前,我就不献丑了,这里给大家推荐一个比较好的地方

    -

    http://mc.dfrobot.com.cn/thread-280817-1-1.html

    -

    而且这里面有购买配套套件的地方,就是有点小贵,建议大家量力而行,俩仨个人一起买一套也行。

    -

    这里面教程也是比较详细的,你知道LED灯 长脚是正极短脚负极,而在开发板上需要自己在代码里定义正极接口,负极就是GND接口。

    -

    基本就能正确的完成里面的所有示例。

    -

    ESP32板子(进阶部分)

    如果你把上面的所有示例都完成了的话,且继续有兴趣钻研开发板,

    -

    那这部分就是为你精心准备的,如果上面的示例做完了,且感觉自己对开发板没啥兴趣,也可以看看这部分图一乐,不想看的话也不会有很大的影响。

    -

    我开始也说了,开发板负责了获取信息和传输信息,如果细心的话你们也发现了,Arduino的教程里面只涉及到了获取信息,或者控制点小东西,完全没和网络进行交互。

    -

    其实也不能说没有和网络进行交流,只是教程里没有体现罢了,我想你可能记得有的教程里用到了串口监视器,而串口监视器其实也是一种开发板和电脑进行通信,你也可以用电脑获取到信息然后再和外界就行信息的交流只是有点麻烦而已,有兴趣的话可以自己了解一下,或者可以私聊问我,这里就不再赘述了。

    -

    好了,步入这个专题的正题,ESP32板子。

    -

    当然ESP32有很多体系方法去编写代码,这里只提供Arduino体系的教程。

    -

    当然,ESP32作为开发板界的新贵,拥护他的人也不少。我在这里给大家贴出我认为很好的教程链接(真的不是我懒,真的是珠玉在前,我写很可能会误导大家)

    -

    Arduino IDE 配置ESP32的环境

    -

    https://blog.csdn.net/Naisu_kun/article/details/84958561

    -

    而这个教程里面,看到编写上传程序即可,批量烧录固件到模块中不用看。

    -

    而ESP32 连接网络(应该是手机开热点,校园网应该不行)

    -

    https://blog.csdn.net/solar_Lan/article/details/80049747

    -

    ESP32基础的应该就这些了进阶的项目建议看这里

    -

    https://randomnerdtutorials.com/?s=ESP32+Arduino

    -

    虽然是英文文档但确实不错,用翻译凑合看吧

    -]]>
    - - 代码 - -
    - - 选择正确的浏览器 - /2019/09/25/%E9%80%89%E6%8B%A9%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%B5%8F%E8%A7%88%E5%99%A8/ - 对于浏览器的选择,这里肯定首推chrome

    -

    当然无脑尬吹不可取,

    -

    先说说它的优点:chrome速度快和简洁是最大的优点,而且书签比起其他的浏览器方便很多,基于google账号可以实现多端同步(但是吧可能需要一点其他手段才能申请google账号)而且不会弹窗广告

    -

    还有就是如果学习前端的话,F12(开发者模式)也挺方便的

    - -

    但缺点同样不少:最大的问题就是可能占用内存较大,然后就是不支持网银,还有和Flash几乎水火不容,我都不知道为什么,有时候,我明明设置好了flash一直允许,下次打开网页又要我重新设置

    -

    当然chrome的一些快键键就不再多说了打开设置按钮都可以看到,什么shift+左键看新窗口,ctrl+左键开界面,估计大伙也都知道。

    -

    关于如何给一个网页权限

    -

    image

    -

    是在隐私设置里的的网站设置里,在这里面就可以设置给一个网站什么权限了,一般推荐大家使用先询问,不要设置禁止,当年我用chrome抢课就吃了没弹窗的亏,我还在痛骂学校的网站,后来才知道原来是我自己憨批了。。。

    -

    然后还有就是设置下载内容最好改一下地址,我记得默认好像是C。。

    -

    这里搜索引擎的话,我主推bing

    -

    如果想玩一下别人的界面的话可以先选择你想修改的东西,右击点检查,然后界面就会变成这样,

    -

    image

    -

    然后对着双击对着里面的内容修改就行了,当然这种东西只会在你的电脑上有效,因为这个网站的本质前端文件还是没有改变的,只是在你这显示出来的被你改变了而已。

    -

    还有就是一些搜索引擎的应用,想了解的话可以去知乎上或着百度搜一下,挺多教程的,这里我就不赘述了。

    -

    当然既然谈到chrome了就离不开插件了,当然很多优秀的插件需要在google应用商店下载,也有的在国内站点有资源可以下载使用。
    我这里给大家推荐几个我比较喜欢用的插件吧
    OneTab,可以一键把你的所有标签页变成一个列表,节省内存,你用的时候可以从中选择打开一个或打开多个,我挺喜欢的。
    AdGuard广告拦截器挺方便的,可以去除很多广告(滑稽)简直爽的一批
    还有就是万能的Tampermonkey也就是俗称油候,用他运行脚本简直爽的不要不要的,而且网络上有很多写好的脚本,简直万能。
    划词翻译的话我觉得可以要也可以不要,chrome自己也带翻译,不过好像只能全文。
    好了,就到这吧,不啰嗦了。

    -]]>
    - - 日常 - -
    - - 解决美帝良心想装上Ubuntu没网的问题 - /2019/09/15/%E8%A7%A3%E5%86%B3%E7%BE%8E%E5%B8%9D%E8%89%AF%E5%BF%83%E6%83%B3%E8%A3%85%E4%B8%8AUbuntu%E6%B2%A1%E7%BD%91%E7%9A%84%E9%97%AE%E9%A2%98/ - 1.因为要写代码的时候需要Linux的环境,所以屁颠屁颠的掏出来了自己的优盘下了个Ubuntu18.04的镜像,然后做了个双系统(这一步具体怎么做网上教程很多,我也就不多说了)

    -

    2.然后开机的时候居然发现没有WiFi,没有WiFi,没有WiFi!!!

    -

    然后百度查了好多都说是驱动问题,结果我手机数据线插上电脑浪费了3个G装了无数遍驱动也没解决这个问题,最后看到了一个可能是

    -

    无线网卡没有权限的原因,然后就敲了两行命令,改了个配置文件,就可以愉快的连接上Wifi了,所以这里记录下来,供各位使用。

    - -

    3.

    -

    首先你先确认你的驱动确实装了(具体怎么看,可以网上搜索),

    -

    第二步,打开终端,敲入 rfkill list all 会出现如下信息

    -

    0:ideapad_wlan: Wireless LAN
    Soft blocked: no
    Hard blocked:yes
    1:ideapad_bluetooth: Bluetooth
    Soft blocked: no
    Hard blocked: yes
    2:phy0: Wireless LAN
    Soft blocked: no
    Hard blocked:no
    3:hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

    -

    我们可以看到 ideapad_wlan的hard blocked默认为yes,所以导致wifi无法开启。

    -

    办法一(暂时):

    -

    (1)sudo modprobe -r ideapad_laptop

    -

    输入完这个命令大概应该就可以连接WiFi了,但是呢还有一个问题就是,没有彻底解决问题,每次开机都要重新执行一次命令,所以我们需要改一下配置文件,以达到我们的目的。

    -

    方法二(推荐):
    通过列入黑名单的方式来实现自动移出ideapad_laptop设备。
    1)创建/etc/modprobe.d/ideapad.conf文件:
    sudo touch /etc/modprobe.d/ideapad.conf
    2)编辑ideapad.conf文件:
    sudo gedit ideapad.conf
    3) 在ideapad.conf文件中添加:
    blacklist ideapad_laptop
    4) 关闭并保存ideapad.conf文件,移除ideapad_laptop设备:
    sudo modprobe -r ideapad_laptop
    5) 注销重启Ubuntu系统,可以看到无线设备能够被打开,并能搜索到WiFi信号。

    -]]>
    - - 环境配置 - -
    - - 如何正确下载一个软件 - /2019/09/10/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E4%B8%8B%E8%BD%BD%E4%B8%80%E4%B8%AA%E8%BD%AF%E4%BB%B6/ - 如何正确下载一个软件

    众所周知,一般的比较好用的软件都是国外的(实话实说,国内软件做的确实拉跨) ,所以很多时候下载成为了难住大家的第一关,鉴于确实很对人对英语有比较深的恐惧感,所以这篇博客,以受众较广的Adobe全家桶为例教大家如何下载软件。

    -

    第一步:选择正确的搜索引擎

    目前我想大家用的搜索引擎还是百度居多,但这里我要实名diss百度,使用百度很多时候前面好多篇都是广告,还有很多(balabalablabla。。。此处省略一万字)总而言之,现在的百度,往往是广告排在了广告的前面,所以我推荐大家使用bing的搜索引擎,虽然也会有广告,但排版方式比百度强了很多倍(别问我为啥不用goole,因为默认你们不会翻墙)

    -

    第二步: 选择正确的搜索方式

    image

    -

    选择这种搜索方式,你知道哪个是官网吗???而且如果官网是英文,你会不会点进去就退出然后选择那种第三方软件园然后下载?

    -

    反正我当年是这么选的。

    - - -

    但如果你们选择搜索的时候多打上官网俩个字,也许结果就会不同

    -

    image

    -

    就像这样一样前俩个一般都是官网。

    -

    第三步:选择要下载的版本

    ps:鉴于adobe官网是中文所以换成了下载pycharm

    -

    image

    -

    进入官网之后,往往都会有一个大大大大大大的download键

    -

    点一下即可进入下载页面

    -

    image

    -

    一般点过download的页面就会进入选择下载哪个的页面,一般会让你选择下载具体哪种版本,选择你的操作系统,一般都选择windows,具体哪个版本应该也都有说明,可以翻译一波看看啥意思决定下载哪个,然后下载后安装就行了。

    -

    关于安装,无非是自定义安装到哪个盘里,需要加载哪些插件。

    -

    这里就不在赘述了。

    -

    所以,希望看完这篇教程的你,不要再问怎么下载XXX软件了,官网,download ,ok!!!!!!真·有手就行

    -]]>
    - - 日常 - -
    - - ACM - /2019/09/09/ACM/ - 因为本社团ACM实力属实拉跨,所以只能找嘉豪学姐帮忙,所以链接指向的是嘉豪学姐的博客

    https://blog.csdn.net/weixin_43870697

    -]]>
    - - 算法 - -
    -
    diff --git a/tags/Windows/index.html b/tags/Windows/index.html deleted file mode 100644 index dfa8778..0000000 --- a/tags/Windows/index.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tag: Windows | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    -

    WindowsTag -

    -
    - - - - - - - - -
    -

    2019

    -
    - - - - - - -
    -
    - - - - - - - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/index.html b/tags/index.html deleted file mode 100644 index cd65cbc..0000000 --- a/tags/index.html +++ /dev/null @@ -1,595 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tags | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - -
    - - - -
    -
    - -

    tags - -

    - - - -
    - - - - -
    - -
    -
    - 5 tags in total -
    - -
    - -
    - - - -
    - - - - - -
    - - -
    - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/tags/\344\273\243\347\240\201/index.html" "b/tags/\344\273\243\347\240\201/index.html" deleted file mode 100644 index 953369f..0000000 --- "a/tags/\344\273\243\347\240\201/index.html" +++ /dev/null @@ -1,742 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tag: 代码 | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    -

    代码Tag -

    -
    - - - - - - - - -
    -

    2019

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/tags/\346\227\245\345\270\270/index.html" "b/tags/\346\227\245\345\270\270/index.html" deleted file mode 100644 index 3d963d1..0000000 --- "a/tags/\346\227\245\345\270\270/index.html" +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tag: 日常 | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    -

    日常Tag -

    -
    - - - - - - - - -
    -

    2019

    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/tags/\347\216\257\345\242\203\351\205\215\347\275\256/index.html" "b/tags/\347\216\257\345\242\203\351\205\215\347\275\256/index.html" deleted file mode 100644 index 003112d..0000000 --- "a/tags/\347\216\257\345\242\203\351\205\215\347\275\256/index.html" +++ /dev/null @@ -1,660 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tag: 环境配置 | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    -

    环境配置Tag -

    -
    - - - - - - - - -
    -

    2020

    -
    - - - - - - - - - - - -
    -

    2019

    -
    - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/tags/\347\256\227\346\263\225/index.html" "b/tags/\347\256\227\346\263\225/index.html" deleted file mode 100644 index ddf1bd6..0000000 --- "a/tags/\347\256\227\346\263\225/index.html" +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tag: 算法 | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    -

    算法Tag -

    -
    - - - - - - - - -
    -

    2019

    -
    - - -
    -
    - -

    - - - -

    - - - -
    -
    - - - -
    -
    - - - - - - - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/.idea/cloudms.iml b/website/.idea/cloudms.iml new file mode 100644 index 0000000..c8efcbb --- /dev/null +++ b/website/.idea/cloudms.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/website/.idea/misc.xml b/website/.idea/misc.xml new file mode 100644 index 0000000..7a5c067 --- /dev/null +++ b/website/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/website/.idea/modules.xml b/website/.idea/modules.xml new file mode 100644 index 0000000..97172bf --- /dev/null +++ b/website/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/website/.idea/thriftCompiler.xml b/website/.idea/thriftCompiler.xml new file mode 100644 index 0000000..7bc123c --- /dev/null +++ b/website/.idea/thriftCompiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/website/.idea/workspace.xml b/website/.idea/workspace.xml new file mode 100644 index 0000000..e937c7b --- /dev/null +++ b/website/.idea/workspace.xml @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 手机号
    + 专业
    + + + + + \ No newline at end of file diff --git a/website/msgapp/__init__.py b/website/msgapp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/msgapp/__pycache__/__init__.cpython-36.pyc b/website/msgapp/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..732eb81 Binary files /dev/null and b/website/msgapp/__pycache__/__init__.cpython-36.pyc differ diff --git a/website/msgapp/__pycache__/__init__.cpython-37.pyc b/website/msgapp/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..57700df Binary files /dev/null and b/website/msgapp/__pycache__/__init__.cpython-37.pyc differ diff --git a/website/msgapp/__pycache__/urls.cpython-36.pyc b/website/msgapp/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000..7bb9818 Binary files /dev/null and b/website/msgapp/__pycache__/urls.cpython-36.pyc differ diff --git a/website/msgapp/__pycache__/urls.cpython-37.pyc b/website/msgapp/__pycache__/urls.cpython-37.pyc new file mode 100644 index 0000000..47a6f4b Binary files /dev/null and b/website/msgapp/__pycache__/urls.cpython-37.pyc differ diff --git a/website/msgapp/__pycache__/views.cpython-36.pyc b/website/msgapp/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000..319944d Binary files /dev/null and b/website/msgapp/__pycache__/views.cpython-36.pyc differ diff --git a/website/msgapp/__pycache__/views.cpython-37.pyc b/website/msgapp/__pycache__/views.cpython-37.pyc new file mode 100644 index 0000000..7ab0212 Binary files /dev/null and b/website/msgapp/__pycache__/views.cpython-37.pyc differ diff --git a/website/msgapp/admin.py b/website/msgapp/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/website/msgapp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/website/msgapp/apps.py b/website/msgapp/apps.py new file mode 100644 index 0000000..042fa8f --- /dev/null +++ b/website/msgapp/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MsgappConfig(AppConfig): + name = 'msgapp' diff --git a/website/msgapp/migrations/__init__.py b/website/msgapp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/msgapp/models.py b/website/msgapp/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/website/msgapp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/website/msgapp/templates/MsgSingleWeb.html b/website/msgapp/templates/MsgSingleWeb.html new file mode 100644 index 0000000..9783538 --- /dev/null +++ b/website/msgapp/templates/MsgSingleWeb.html @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 硬件技术联盟迎新官网 + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + +

    硬件技术联盟欢迎你

    + + + + + +
    +
    + {% csrf_token %} +

    Sign up to join + +

    +
    + + +
    + +
    + + +
    + +
    + + +
    + + + + +
    + + + + + + + + + + + + +
    +

    详情请咨询,QQ:1159107353

    +
    + + + diff --git a/website/msgapp/templates/succeed.html b/website/msgapp/templates/succeed.html new file mode 100644 index 0000000..877d8ec --- /dev/null +++ b/website/msgapp/templates/succeed.html @@ -0,0 +1,57 @@ + + + + + 硬件技术联盟迎新官网 + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + +

    报名成功

    + + + + + + + + + + + diff --git a/website/msgapp/tests.py b/website/msgapp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/website/msgapp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/website/msgapp/urls.py b/website/msgapp/urls.py new file mode 100644 index 0000000..30eb83e --- /dev/null +++ b/website/msgapp/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.msgproc), +] \ No newline at end of file diff --git a/website/msgapp/views.py b/website/msgapp/views.py new file mode 100644 index 0000000..8b2ff0c --- /dev/null +++ b/website/msgapp/views.py @@ -0,0 +1,18 @@ +#coding=utf-8 +from django.shortcuts import render +from datetime import datetime + +# Create your views here. +def msgproc(request): + datalist = [] + if request.method == "POST": + name = request.POST.get("name", None) + phone = request.POST.get("phone", None) + major = request.POST.get("major", None) + time = datetime.now() + with open('msgdata.txt', 'a+') as f: + f.write("{}--{}--{}--{}--\n".format(name, phone,\ + major, time.strftime("%Y-%m-%d %H:%M:%S"))) + return render(request,'succeed.html') + if request.method == "GET": + return render(request, "MsgSingleWeb.html", {"data":datalist}) diff --git a/website/msgdata.txt b/website/msgdata.txt new file mode 100644 index 0000000..a1edf5b --- /dev/null +++ b/website/msgdata.txt @@ -0,0 +1,10 @@ +孔令琴--13298303050--None--2019-09-03 05:03:17-- +刘晨辉--13298142893--None--2019-09-03 05:06:45-- +臭弟弟--67756386--None--2019-09-03 05:30:18-- +张海南--15838772409--None--2019-09-03 05:32:09-- +朱玥潼--13298305710--None--2019-09-03 05:37:22-- +刘强强--18394617854--None--2019-09-03 05:38:21-- +计科刘强强--18394617854--None--2019-09-03 05:38:44-- +��--123--����--2019-09-03 15:29:15-- +����--13298142893--����--2019-09-03 15:53:02-- +����--13298142893--����--2019-09-03 15:54:21-- diff --git a/website/readme.md b/website/readme.md new file mode 100644 index 0000000..4025430 --- /dev/null +++ b/website/readme.md @@ -0,0 +1,3 @@ +用这个在本机运行的话只需要python环境和一个编译器,需要添加第三方库django,sqlite3 +然后在命令行里进入下载该文件的目录执行 python manage.py runserver +即可在本机访问页面 diff --git a/website/static/msgapp/css/fontawesome-all.css b/website/static/msgapp/css/fontawesome-all.css new file mode 100644 index 0000000..da0d623 --- /dev/null +++ b/website/static/msgapp/css/fontawesome-all.css @@ -0,0 +1,2726 @@ +/*! + * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-male:before { + content: "\f183"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nintendo-switch:before { + content: "\f418"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-random:before { + content: "\f074"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-road:before { + content: "\f018"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-train:before { + content: "\f238"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: normal; + src: url("http://github.com/webfonts/fa-brands-400.eot"); + src: url("http://github.com/webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("http://github.com/webfonts/fa-brands-400.woff2") format("woff2"), url("http://github.com/webfonts/fa-brands-400.woff") format("woff"), url("http://github.com/webfonts/fa-brands-400.ttf") format("truetype"), url("http://github.com/webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + src: url("http://github.com/webfonts/fa-regular-400.eot"); + src: url("http://github.com/webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("http://github.com/webfonts/fa-regular-400.woff2") format("woff2"), url("http://github.com/webfonts/fa-regular-400.woff") format("woff"), url("http://github.com/webfonts/fa-regular-400.ttf") format("truetype"), url("http://github.com/webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + src: url("http://github.com/webfonts/fa-solid-900.eot"); + src: url("http://github.com/webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("http://github.com/webfonts/fa-solid-900.woff2") format("woff2"), url("http://github.com/webfonts/fa-solid-900.woff") format("woff"), url("http://github.com/webfonts/fa-solid-900.ttf") format("truetype"), url("http://github.com/webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/website/static/msgapp/css/style.css b/website/static/msgapp/css/style.css new file mode 100644 index 0000000..c5d78bb --- /dev/null +++ b/website/static/msgapp/css/style.css @@ -0,0 +1,594 @@ +/* reset */ + +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +dl, +dt, +dd, +ol, +nav ul, +nav li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} + +ol, +ul { + list-style: none; + margin: 0px; + padding: 0px; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* start editing from here */ + +a { + text-decoration: none; +} + +.txt-rt { + text-align: right; +} + +/* text align right */ + +.txt-lt { + text-align: left; +} + +/* text align left */ + +.txt-center { + text-align: center; +} + +/* text align center */ + +.float-rt { + float: right; +} + +/* float right */ + +.float-lt { + float: left; +} + +/* float left */ + +.clear { + clear: both; +} + +/* clear float */ + +.pos-relative { + position: relative; +} + +/* Position Relative */ + +.pos-absolute { + position: absolute; +} + +/* Position Absolute */ + +.vertical-base { + vertical-align: baseline; +} + +/* vertical align baseline */ + +.vertical-top { + vertical-align: top; +} + +/* vertical align top */ + +nav.vertical ul li { + display: block; +} + +/* vertical menu */ + +nav.horizontal ul li { + display: inline-block; +} + +/* horizontal menu */ + +img { + max-width: 100%; +} + +/*end reset*/ + +body { + font-family: 'Open Sans', sans-serif; + font-size: 100%; + background: #2196F3; +} + +/*--header--*/ + +h1 { + font-size: 3.5em; + color: #fff; + letter-spacing: 3px; + text-align: center; + font-style: italic; + margin: 3vw 1vw; + font-family: 'Josefin Sans', sans-serif; +} + +h1 span, +h2 i { + color: #f7296f; +} + +h2 { + color: #fff; + font-size: 22px; + font-weight: 500; + letter-spacing: 1px; + text-transform: capitalize; + margin-bottom: 1em; +} + +/*--//header--*/ + +/*-- content --*/ + +.sub-main-w3 { + display: -webkit-flex; + display: -webkit-box; + display: -moz-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} + +.sub-main-w3 form { + max-width: 600px; + margin: 0 5vw; + background: rgba(10, 10, 10, 0.17); + padding: 3.5vw; + box-sizing: border-box; + display: -webkit-flex; + display: flex; + flex-wrap: wrap; + justify-content: center; + border-bottom: 8px solid #f7296f; + border-radius: 30px 30px 50px 50px; +} + +.form-style-agile { + margin-bottom: 1.5em; + flex-basis: 100%; + -webkit-flex-basis: 100%; +} + +.sub-main-w3 label { + font-size: 14px; + color: #fff; + display: inline-block; + font-weight: 500; + margin-bottom: 12px; + text-transform: capitalize; + letter-spacing: 1px; +} + +.sub-main-w3 label i { + font-size: 15px; + margin-left: 5px; + color: #f7296f; + border-radius: 50%; + line-height: 1.9; + text-align: center; +} + +.form-style-agile input[type="text"], +.form-style-agile input[type="password"] { + width: 100%; + color: #000; + outline: none; + font-size: 14px; + letter-spacing: 1px; + padding: 15px 15px; + box-sizing: border-box; + border: none; + border: 1px solid #000; + background: #fff; +} + +.sub-main-w3 input[type="submit"] { + color: #fff; + background: #f7296f; + border: none; + padding: 13px 0; + margin-top: 30px; + outline: none; + width: 36%; + font-size: 16px; + cursor: pointer; + letter-spacing: 2px; + -webkit-transition: 0.5s all; + -o-transition: 0.5s all; + -moz-transition: 0.5s all; + -ms-transition: 0.5s all; + transition: 0.5s all; + box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.49); +} + +.sub-main-w3 input[type="submit"]:hover { + background: #000; + -webkit-transition: 0.5s all; + -o-transition: 0.5s all; + -moz-transition: 0.5s all; + -ms-transition: 0.5s all; + transition: 0.5s all; +} + +.wthree-text { + width: 100%; +} + +.wthree-text ul li:nth-child(1) { + float: left; +} + +.wthree-text ul li:nth-child(2) { + float: right; +} + +.wthree-text ul li { + display: inline-block; +} + +.wthree-text ul li a { + color: #fff; + font-size: 14px; + letter-spacing: 1px; + font-weight: 500; +} + +/*-- checkbox --*/ + +.wthree-text label { + font-size: 15px; + color: #fff; + cursor: pointer; + position: relative; +} + +.wthree-text { + text-align: center; +} + +input.checkbox { + background: #f7296f; + cursor: pointer; + width: 1.2em; + height: 1.2em; + vertical-align: text-bottom; +} + +input.checkbox:before { + content: ""; + position: absolute; + width: 1.2em; + height: 1.2em; + background: inherit; + cursor: pointer; +} + +input.checkbox:after { + content: ""; + position: absolute; + top: 4px; + left: 4px; + z-index: 1; + width: 1em; + height: 1em; + border: 1px solid #fff; + -webkit-transition: .4s ease-in-out; + -moz-transition: .4s ease-in-out; + -o-transition: .4s ease-in-out; + transition: .4s ease-in-out; +} + +input.checkbox:checked:after { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + height: .5rem; + border-color: #fff; + border-top-color: transparent; + border-right-color: transparent; +} + +.anim input.checkbox:checked:after { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + height: .5rem; + border-color: transparent; + border-right-color: transparent; + animation: .4s rippling .4s ease; + animation-fill-mode: forwards; +} + +@keyframes rippling { + 50% { + border-left-color: #fff; + } + 100% { + border-bottom-color: #fff; + border-left-color: #fff; + } +} + +/*-- //checkbox --*/ + +/*--placeholder-color--*/ + +::-webkit-input-placeholder { + color: #000; +} + +:-moz-placeholder { + /* Firefox 18- */ + color: #000; +} + +::-moz-placeholder { + /* Firefox 19+ */ + color: #000; +} + +:-ms-input-placeholder { + color: #000; +} + +/*-- //placeholder-color --*/ + +/*-- //content --*/ + +/*-- copyright --*/ + +.footer { + margin: 4vw .3vw 2vw; +} + +.footer p { + font-size: 14px; + color: #fff; + letter-spacing: 2px; + text-align: center; + line-height: 1.8; +} + +.footer p a { + color: #fff; + -webkit-transition: 0.5s all; + -o-transition: 0.5s all; + -moz-transition: 0.5s all; + -ms-transition: 0.5s all; + transition: 0.5s all; +} + +.footer p a:hover { + color: #f7296f; + -webkit-transition: 0.5s all; + -o-transition: 0.5s all; + -moz-transition: 0.5s all; + -ms-transition: 0.5s all; + transition: 0.5s all; +} + +/*-- //copyright --*/ + +/*-- bg effect --*/ + +#bg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; +} + +#bg canvas { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/*-- //bg effect --*/ + +/*--responsive--*/ + +@media(max-width:1920px) { + h1 { + font-size: 3.5vw; + } +} + +@media(max-width:1024px) { + h1 { + font-size: 4.5vw; + } +} + +@media(max-width:800px) { + h1 { + font-size: 2.6em; + } +} + +@media(max-width:480px) { + h1 { + font-size: 2.3em; + letter-spacing: 1px; + } + .sub-main-w3 form { + padding: 7.5vw; + } + .footer p { + letter-spacing: 1px; + } +} + +@media(max-width:414px) { + .form-style-agile input[type="text"], + .form-style-agile input[type="password"] { + font-size: 13px; + padding: 13px 15px; + } + .wthree-text ul li:nth-child(1), + .wthree-text ul li:nth-child(2) { + float: none; + } + .wthree-text ul li:nth-child(2) { + margin-top: 10px; + } + .sub-main-w3 input[type="submit"] { + width: 56%; + } + .wthree-text ul li { + display: block; + } +} + +@media(max-width:320px) { + h1 { + font-size: 1.8em; + margin: 5vw 1vw; + } + .sub-main-w3 form { + padding: 25px 14px; + } +} + +/*--//responsive--*/ \ No newline at end of file diff --git a/website/static/msgapp/js/canva_moving_effect.js b/website/static/msgapp/js/canva_moving_effect.js new file mode 100644 index 0000000..ecbe9ac --- /dev/null +++ b/website/static/msgapp/js/canva_moving_effect.js @@ -0,0 +1,235 @@ +(function($){ + var canvas = $('#bg').children('canvas'), + background = canvas[0], + foreground1 = canvas[1], + foreground2 = canvas[2], + config = { + circle: { + amount: 18, + layer: 3, + color: [157, 97, 207], + alpha: 0.3 + }, + line: { + amount: 12, + layer: 3, + color: [255, 255, 255], + alpha: 0.3 + }, + speed: 0.5, + angle: 20 + }; + + if (background.getContext){ + var bctx = background.getContext('2d'), + fctx1 = foreground1.getContext('2d'), + fctx2 = foreground2.getContext('2d'), + M = window.Math, // Cached Math + degree = config.angle/360*M.PI*2, + circles = [], + lines = [], + wWidth, wHeight, timer; + + requestAnimationFrame = window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + window.msRequestAnimationFrame || + window.oRequestAnimationFrame || + function(callback, element) { setTimeout(callback, 1000 / 60); }; + + cancelAnimationFrame = window.cancelAnimationFrame || + window.mozCancelAnimationFrame || + window.webkitCancelAnimationFrame || + window.msCancelAnimationFrame || + window.oCancelAnimationFrame || + clearTimeout; + + var setCanvasHeight = function(){ + wWidth = $(window).width(); + wHeight = $(window).height(), + + canvas.each(function(){ + this.width = wWidth; + this.height = wHeight; + }); + }; + + var drawCircle = function(x, y, radius, color, alpha){ + var gradient = fctx1.createRadialGradient(x, y, radius, x, y, 0); + gradient.addColorStop(0, 'rgba('+color[0]+','+color[1]+','+color[2]+','+alpha+')'); + gradient.addColorStop(1, 'rgba('+color[0]+','+color[1]+','+color[2]+','+(alpha-0.1)+')'); + + fctx1.beginPath(); + fctx1.arc(x, y, radius, 0, M.PI*2, true); + fctx1.fillStyle = gradient; + fctx1.fill(); + }; + + var drawLine = function(x, y, width, color, alpha){ + var endX = x+M.sin(degree)*width, + endY = y-M.cos(degree)*width, + gradient = fctx2.createLinearGradient(x, y, endX, endY); + gradient.addColorStop(0, 'rgba('+color[0]+','+color[1]+','+color[2]+','+alpha+')'); + gradient.addColorStop(1, 'rgba('+color[0]+','+color[1]+','+color[2]+','+(alpha-0.1)+')'); + + fctx2.beginPath(); + fctx2.moveTo(x, y); + fctx2.lineTo(endX, endY); + fctx2.lineWidth = 3; + fctx2.lineCap = 'round'; + fctx2.strokeStyle = gradient; + fctx2.stroke(); + }; + + var drawBack = function(){ + bctx.clearRect(0, 0, wWidth, wHeight); + + var gradient = []; + + gradient[0] = bctx.createRadialGradient(wWidth*0.3, wHeight*0.1, 0, wWidth*0.3, wHeight*0.1, wWidth*0.9); + gradient[0].addColorStop(0, 'rgb(0, 26, 77)'); + gradient[0].addColorStop(1, 'transparent'); + + bctx.translate(wWidth, 0); + bctx.scale(-1,1); + bctx.beginPath(); + bctx.fillStyle = gradient[0]; + bctx.fillRect(0, 0, wWidth, wHeight); + + gradient[1] = bctx.createRadialGradient(wWidth*0.1, wHeight*0.1, 0, wWidth*0.3, wHeight*0.1, wWidth); + gradient[1].addColorStop(0, 'rgb(0, 150, 240)'); + gradient[1].addColorStop(0.8, 'transparent'); + + bctx.translate(wWidth, 0); + bctx.scale(-1,1); + bctx.beginPath(); + bctx.fillStyle = gradient[1]; + bctx.fillRect(0, 0, wWidth, wHeight); + + gradient[2] = bctx.createRadialGradient(wWidth*0.1, wHeight*0.5, 0, wWidth*0.1, wHeight*0.5, wWidth*0.5); + gradient[2].addColorStop(0, 'rgb(40, 20, 105)'); + gradient[2].addColorStop(1, 'transparent'); + + bctx.beginPath(); + bctx.fillStyle = gradient[2]; + bctx.fillRect(0, 0, wWidth, wHeight); + }; + + var animate = function(){ + var sin = M.sin(degree), + cos = M.cos(degree); + + if (config.circle.amount > 0 && config.circle.layer > 0){ + fctx1.clearRect(0, 0, wWidth, wHeight); + for (var i=0, len = circles.length; i wWidth + radius){ + x = -radius; + } else if (x < -radius){ + x = wWidth + radius + } else { + x += sin*speed; + } + + if (y > wHeight + radius){ + y = -radius; + } else if (y < -radius){ + y = wHeight + radius; + } else { + y -= cos*speed; + } + + item.x = x; + item.y = y; + drawCircle(x, y, radius, item.color, item.alpha); + } + } + + if (config.line.amount > 0 && config.line.layer > 0){ + fctx2.clearRect(0, 0, wWidth, wHeight); + for (var j=0, len = lines.length; j wWidth + width * sin){ + x = -width * sin; + } else if (x < -width * sin){ + x = wWidth + width * sin; + } else { + x += sin*speed; + } + + if (y > wHeight + width * cos){ + y = -width * cos; + } else if (y < -width * cos){ + y = wHeight + width * cos; + } else { + y -= cos*speed; + } + + item.x = x; + item.y = y; + drawLine(x, y, width, item.color, item.alpha); + } + } + + timer = requestAnimationFrame(animate); + }; + + var createItem = function(){ + circles = []; + lines = []; + + if (config.circle.amount > 0 && config.circle.layer > 0){ + for (var i=0; i 0 && config.line.layer > 0){ + for (var m=0; m=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" - - - - - - - - - - - - - - - - - - - - - - - 如何正确下载一个软件 | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - -
    - - - -
    -
    - -

    如何正确下载一个软件 - -

    - - - -
    - - - - -
    - -

    如何正确下载一个软件

    众所周知,一般的比较好用的软件都是国外的(实话实说,国内软件做的确实拉跨) ,所以很多时候下载成为了难住大家的第一关,鉴于确实很对人对英语有比较深的恐惧感,所以这篇博客,以受众较广的Adobe全家桶为例教大家如何下载软件。

    第一步:选择正确的搜索引擎

    目前我想大家用的搜索引擎还是百度居多,但这里我要实名diss百度,使用百度很多时候前面好多篇都是广告,还有很多(balabalablabla。。。此处省略一万字)总而言之,现在的百度,往往是广告排在了广告的前面,所以我推荐大家使用bing的搜索引擎,虽然也会有广告,但排版方式比百度强了很多倍(别问我为啥不用goole,因为默认你们不会翻墙)

    - -

    第二步: 选择正确的搜索方式

    image

    -

    -

    选择这种搜索方式,你知道哪个是官网吗???而且如果官网是英文,你会不会点进去就退出然后选择那种第三方软件园然后下载?

    -

    反正我当年是这么选的。

    -

    但如果你们选择搜索的时候多打上官网俩个字,也许结果就会不同

    -

    image

    -

    就像这样一样前俩个一般都是官网。

    -

    第三步:选择要下载的版本

    ps:鉴于adobe官网是中文所以换成了下载pycharm

    -

    image

    -

    进入官网之后,往往都会有一个大大大大大大的download键

    -

    点一下即可进入下载页面

    -

    image

    -

    一般点过download的页面就会进入选择下载哪个的页面,一般会让你选择下载具体哪种版本,选择你的操作系统,一般都选择windows,具体哪个版本应该也都有说明,可以翻译一波看看啥意思决定下载哪个,然后下载后安装就行了。

    -

    关于安装,无非是自定义安装到哪个盘里,需要加载哪些插件。

    -

    这里就不在赘述了。

    -

    所以,希望看完这篇教程的你,不要再问怎么下载XXX软件了,官网,download ,ok!!!!!!真·有手就行

    - - -
    - - - -
    - - - - - -
    - - -
    - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\350\247\243\345\206\263\347\276\216\345\270\235\350\211\257\345\277\203\346\203\263\350\243\205\344\270\212Ubuntu\346\262\241\347\275\221\347\232\204\351\227\256\351\242\230.html" "b/\350\247\243\345\206\263\347\276\216\345\270\235\350\211\257\345\277\203\346\203\263\350\243\205\344\270\212Ubuntu\346\262\241\347\275\221\347\232\204\351\227\256\351\242\230.html" deleted file mode 100644 index f7c033f..0000000 --- "a/\350\247\243\345\206\263\347\276\216\345\270\235\350\211\257\345\277\203\346\203\263\350\243\205\344\270\212Ubuntu\346\262\241\347\275\221\347\232\204\351\227\256\351\242\230.html" +++ /dev/null @@ -1,606 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 硬件联盟博客 - - - - - - - - - - - - - - -
    -
    - - - - -
    - - 0% -
    - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - -
    - - - -
    -
    - -

    - -

    - - - -
    - - - - -
    - -

    解决联想y7000 Ubuntu没有Wifi问题

    1.因为要写代码的时候需要Linux的环境,所以屁颠屁颠的掏出来了自己的优盘下了个Ubuntu18.04的镜像,然后做了个双系统(这一步具体怎么做网上教程很多,我也就不多说了)

    2.然后开机的时候居然发现没有WiFi,没有WiFi,没有WiFi!!!

    然后百度查了好多都说是驱动问题,结果我手机数据线插上电脑浪费了3个G装了无数遍驱动也没解决这个问题,最后看到了一个可能是

    - - -

    无线网卡没有权限的原因,然后就敲了两行命令,改了个配置文件,就可以愉快的连接上Wifi了,所以这里记录下来,供各位使用。

    -

    3.

    -

    首先你先确认你的驱动确实装了(具体怎么看,可以网上搜索),

    -

    第二步,打开终端,敲入 rfkill list all 会出现如下信息

    -

    0:ideapad_wlan: Wireless LAN
    Soft blocked: no
    Hard blocked:yes
    1:ideapad_bluetooth: Bluetooth
    Soft blocked: no
    Hard blocked: yes
    2:phy0: Wireless LAN
    Soft blocked: no
    Hard blocked:no
    3:hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

    -

    我们可以看到 ideapad_wlan的hard blocked默认为yes,所以导致wifi无法开启。

    -

    办法一(暂时):

    -

    (1)sudo modprobe -r ideapad_laptop

    -

    输入完这个命令大概应该就可以连接WiFi了,但是呢还有一个问题就是,没有彻底解决问题,每次开机都要重新执行一次命令,所以我们需要改一下配置文件,以达到我们的目的。

    -

    方法二(推荐):
    通过列入黑名单的方式来实现自动移出ideapad_laptop设备。
    1)创建/etc/modprobe.d/ideapad.conf文件:
    sudo touch /etc/modprobe.d/ideapad.conf
    2)编辑ideapad.conf文件:
    sudo gedit ideapad.conf
    3) 在ideapad.conf文件中添加:
    blacklist ideapad_laptop
    4) 关闭并保存ideapad.conf文件,移除ideapad_laptop设备:
    sudo modprobe -r ideapad_laptop
    5) 注销重启Ubuntu系统,可以看到无线设备能够被打开,并能搜索到WiFi信号。

    - - -
    - - - -
    - - - - - -
    - - -
    - - -
    - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -