diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..60af890d --- /dev/null +++ b/.htaccess @@ -0,0 +1,7 @@ + + Options +FollowSymlinks + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] + \ No newline at end of file diff --git a/.user.ini b/.user.ini new file mode 100644 index 00000000..753ef897 --- /dev/null +++ b/.user.ini @@ -0,0 +1 @@ +open_basedir=/www/wwwroot/api.isoyu.com/:/tmp/:/proc/ \ No newline at end of file diff --git a/360cdn.txt b/360cdn.txt new file mode 100644 index 00000000..cac68c43 --- /dev/null +++ b/360cdn.txt @@ -0,0 +1 @@ +s3tyroN6daiDpnarfX \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 00000000..76696651 --- /dev/null +++ b/404.html @@ -0,0 +1,64 @@ + + + + +正在连接服务器... + + + + +
+
+ 正在向服务器发起请求....
+ 服务器找不到您所请求的文件或脚本
+ 正在重试#1....
+ 服务器找不到您所请求的文件或脚本 #1
+ 正在重试#2....
+ 服务器找不到您所请求的文件或脚本 #2
+ 正在重试#3....
+ 服务器找不到您所请求的文件或脚本 #3
+ 失败, 未找到 +
+ + + \ No newline at end of file diff --git a/ARU_GIF_L.php b/ARU_GIF_L.php new file mode 100644 index 00000000..4c412fe2 --- /dev/null +++ b/ARU_GIF_L.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/ARU_GIF_S.php b/ARU_GIF_S.php new file mode 100644 index 00000000..bbcd9ad7 --- /dev/null +++ b/ARU_GIF_S.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/ARU_GIF_XL.php b/ARU_GIF_XL.php new file mode 100644 index 00000000..56e4a994 --- /dev/null +++ b/ARU_GIF_XL.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/ARU_PNG_L.php b/ARU_PNG_L.php new file mode 100644 index 00000000..29a40d83 --- /dev/null +++ b/ARU_PNG_L.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/ARU_PNG_S.php b/ARU_PNG_S.php new file mode 100644 index 00000000..4a640627 --- /dev/null +++ b/ARU_PNG_S.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/ARU_PNG_XL.php b/ARU_PNG_XL.php new file mode 100644 index 00000000..36df266c --- /dev/null +++ b/ARU_PNG_XL.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..574a39c4 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,32 @@ + +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 +版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) +All rights reserved。 +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +Apache Licence是著名的非盈利开源组织Apache采用的协议。 +该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, +允许代码修改,再作为开源或商业软件发布。需要满足 +的条件: +1. 需要给代码的用户一份Apache Licence ; +2. 如果你修改了代码,需要在被修改的文件中说明; +3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 +带有原来代码中的协议,商标,专利声明和其他原来作者规 +定需要包含的说明; +4. 如果再发布的产品中包含一个Notice文件,则在Notice文 +件中需要带有本协议内容。你可以在Notice中增加自己的 +许可,但不可以表现为对Apache Licence构成更改。 +具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..2bde8392 --- /dev/null +++ b/README.md @@ -0,0 +1,1301 @@ +# 姬长信API +一个免费提供公益数据和随机妹子生活照抱枕图动漫壁纸背景图的API https://api.isoyu.com/ +=============== +食用方法 + + 基于Thinkphp完善整理API接口。始于2017 + + 公益中国:宝贝回家核心数据(ssl) + + 新闻分类(头条/军事/娱乐/体育/科技/艺术/教育/要闻)数据接口 + + 视频分类(精品视频/搞笑视频/美女视频/体育视频/新闻现场)接口 + + 图片(cosplay)接口,花瓣相册接口 + + 段子笑话接口、天气预报接口 + + IT资讯前端开发日报、知乎日报等 + + 招聘信息 + + bing每日图片壁纸 + + 二维码在线生成(phpqrcode) + + ARU(阿鲁)表情包[作者授权] + + 内置动漫二次元美女图片壁纸随机美女,宠物图片,随机动漫图片,随机抱枕图,卡通图片,二次元图片,IP图片 + + 各种精品美图,美术基础,游戏原画设定,插画,漫画,动画造型设定, +动画学习教程,动漫教程,画集,画册,UI,场景,3D模型素材,三次元艺用模特图片,二次元萝莉,萌图福利,可爱美少女壁纸,CG资源素材 + +--- +###### 须知:姬长信API将会记录你的域名、使用流量、调用次数等重要信息,如介意,请勿使用。管理员邮箱admin@isoyu.com +--- +###### 条款:姬长信API拥有所有运行权,在某些特定情况下,姬长信API有权利禁止你的网站调用。 +--- +###### 赞助&打赏:[http://fuligou.isoyu.com/yff/](http://fuligou.isoyu.com/yff/) +--- +## GY.公益数据 + +说明:公益中国🇨🇳 +### 1 宝贝回家/腾讯公益404核心数据 + **接口地址:** + `https://api.isoyu.com/gy/` +   `https://api.isoyu.com/gy/data.js` + + **说明:** +   腾讯公益404应该很多人都知道,在独立开发者圈内取得了很大的成功!但我认为这个公益页面不应该局限于404页面,而是广告位类单独板块。这才是真正的公益行为!现在几乎所有网站都是HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议,而腾讯还停留在http时代,腾讯公益404难以满足现有需求。所以做了这个,网站只需要在自己的页面中嵌入一段简单的代码,就能通过互联网来迅速传播失踪儿童信息,从而提高找回失踪儿童的概率。失踪儿童信息来自宝贝回家寻子网。静态资源支持ssl.最后信息于2018年04月14日更改,共232条信息。 + + **附:** + 传播即是希望!如果您想在您的网站添加一个类似的效果,出于公益性质,我可以无偿为您提供技术支持,愿天下的宝贝都能永伴自己父母身边 + +   **调用例子:** +   + +1. + +```javascript + + + +``` + +2. +```javascript + + +``` +或者用onload来动态加载高度 + +```javascript + + + +js部分 + + + +``` +3.解析json https://api.isoyu.com/gy/data.js 不作多描述(浏览器直接访问会乱码,可以下载查看。charset为UTF-8) + +![姬长信API](https://i.loli.net/2018/04/02/5ac1eb7a3cbc7.png) + +## 0. 壁纸模块 +说明:含http与https方式,国内外CDN驱动 +使用百度云加速专业版,腾讯万象优图。 +调用方法:以img直接调用即可。比如 + +```javascript + +姬长信api + +``` + +### 0.1 每日bing + + **接口地址:**`bing_images.php` + + **调用例子:** + +`//api.isoyu.com/bing_images.php` + +### 0.2 美女图片壁纸 +说明:已经用了万象优图筛选,若遇到大尺度图片请记录图片id并admin@isoyu.com,我们会在第一时间删除 +*2017.07.31增加至2257张* + + **接口地址:**`mm_images.php` + + **调用例子:** + +![姬长信API](https://api.isoyu.com/mm_images.php) + +`//api.isoyu.com/mm_images.php` +### 0.3 动态IP签名图片 +说明:可能会显cdnIP,字体<书体坊兰亭体> + **可选参数:** + `signature`自定义文本 + **接口地址:** + +`ip_images.php`或`ip_images.php?signature=早安` + + **调用例子:** +![姬长信API](https://api.isoyu.com/ip_images.php?signature=早安) +`//api.isoyu.com/ip_images.php`或`//api.isoyu.com/ip_images.php?signature=早安` + +### 0.4 动态图 +说明:资源还是有点少 + + **接口地址:** +`gif_images.php` + **调用例子:** +`//api.isoyu.com/gif_images.php` + +### 0.5 抱枕图生成器 +说明:已经用了万象优图筛选,若遇到露骨图片请记录图片id并admin@isoyu.com,我们会在第一时间删除。 +*2017.08.14增加至7391张,共20G。部分单个图片大小最高会在60Mb,所以加载会慢。* + + **接口地址:**`bao_images.php` + + **调用例子:** +![姬长信API](https://api.isoyu.com/bao_images.php) +`//api.isoyu.com/bao_images.php` +### 0.6 ARU(阿鲁)表情包 +说明:格式为png,gif 大小为s,l,xl ARU(阿鲁)表情包。表情包作者:`@_SiC_ `创意:@YDXX丶(室友) + +*2018.01.06更新* +*2018.01.09ARU(阿鲁)表情包。表情包作者:`@_SiC_ `已免费授权,会长期更新。* + **接口地址:** + + + + + + + + + + + + + +
GIFARU_GIF_S.phpARU_GIF_L.phpARU_GIF_XL.php
PNGARU_PNG_S.phpARU_PNG_L.phpARU_PNG_XL.php
+ + + **调用例子:** +   ![姬长信API](https://api.isoyu.com/ARU_GIF_S.php) +   `//api.isoyu.com/ARU_GIF_S.php` +### 0.7 在线二维码 +说明:依靠phpqrcode,Version: 1.1.4 Build: 2010100721 这是QR码2-D条码生成器的PHP实现。这是基于由Kentaro Fukuchi编写的C libqrencode的纯php-LGPL许可实现。 + +支持数字,字母数字,8位和汉字编码。(汉字编码没有完全测试,如果你是日本编码启用,你可以通过验证:) :)) +导出为PNG图像,并以位表形式导出数据缓存提高计算速度. + +下面是参数介绍。 + +**url**: *二维码对应的网址* + +**m** : *二维码白色边框尺寸,缺省值: 0px* + +**e** : *容错级别(errorLevel),可选参数如下(缺省值 L)*: + > L水平 7%的字码可被修正 + > M水平 15%的字码可被修正 + > Q水平 25%的字码可被修正 + > H水平 30%的字码可被修正 +**p** : *二维码尺寸,可选范围1-40(递增值为25.1=25x25,2=50x50...最大1000。具体大小和容错级别有关)(缺省值:3)* + +**例子**:   + +![姬长信API](https://api.isoyu.com/qr/?m=0&e=L&p=5&url=https://api.isoyu.com) + +`https://api.isoyu.com/qr/?m=0&e=L&p=5&url=https://api.isoyu.com` + + +## 1. 新闻模块 + +说明: 包括 新闻模块banner轮播图接口、新闻分类列表分类接口、新闻详情接口、本地新闻接口 如下详情: + +### 1.1 新闻轮播图接口 + + **必选参数:** + 无 + **接口地址:** + `News/banner` + + **调用例子:** + `//api.isoyu.com/index.php/api/News/banner` + + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: + +### 1.2 新闻分类列表分类接口 + + **必选参数:** + `type` int : 新闻类型 + + + + + + + + + + + + + + + + + + + + + + + + +
type01234567
名称头条军事娱乐体育科技艺术教育要闻
+ + `page` int : 分页页数,每页返回10条 + + **接口地址:** + `/News/new_list?type=1&page=20` + + **调用例子:** + `//api.isoyu.com/index.php/api/News/new_list?type=1&page=20` + + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: + + + + +### 1.3 新闻详情接口 + + **必选参数:** + `postid` 新闻列表下的 postid + + **接口地址:** + `/index.php/api/News/new_detail?postid=CLJN5K2M000181KT` + + **调用例子:** + `//api.isoyu.com/index.php/api/News/new_detail?postid=CLJN5K2M000181KT` + + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +```javascript +{ + "msg": "success", + "code": 1, + "data": { + "body": "

  毛泽东同志在《论持久战》一文中指出,日本的军力在东方是一等的。抗战中,真实的侵华日军并非像某些影视作品中所描述的那样不堪一击,而是十分凶狠猖狂、具有很强战斗力。为了战胜这只军国主义怪兽,中国军民进行了长达14年的生死搏斗才赢得战争胜利。中国人民抗日战争可以说是异常惨烈,这是为什么呢?这又能给今天的我们以什么样启示呢?

  为什么抗日战争异常惨烈?

  ——侵华日军作战能力分析及启示

  ■王晓辉 李雨樵

  毛泽东同志在《论持久战》一文中指出,日本的军力在东方是一等的。抗战中,真实的侵华日军并非像某些影视作品中所描述的那样不堪一击,而是十分凶狠猖狂、具有很强战斗力。为了战胜这只军国主义怪兽,中国军民进行了长达14年的生死搏斗才赢得战争胜利。中国人民抗日战争可以说是异常惨烈,这是为什么呢?这又能给今天的我们以什么样启示呢?

  部队结构合成,具备了协同作战能力

  日本发动侵华战争时已经完成了工业化,其军队在组织结构和武器装备上已经初步完成机械化。日本陆军是侵华的主力,师团是其具有确定编制的第一级作战单位,一般由步兵、炮兵、骑兵、工兵和辎重部队等混合编成。其中,除步兵外,炮兵、骑兵、工兵等兵种也属于直接作战力量,其数量几乎占了师团编成内联队数量的一半。因此,一支现代陆军所要求的火力、突击力、机动力与保障力等,日军师团一个也不缺。故日军的陆、海、空军既能联手打大战,单个陆军师团也敢孤军突入,与数倍于己的对手独立作战。如淞沪会战与武汉会战,是日军侵华的两次大规模陆、海、空三军联合作战。日军两度获胜,反映出其三军协同作战的能力,这是当时中国军队所不及的;也反映出当时中国军队的落后,是一种结构性的整体性的落后。

  结构决定功能,体系决定战斗力。军队结构落后于时代、落后于战争形态和作战方式发展,必然丧失军事竞争主动权。可以说,在未来战场上,谁的结构更利于集聚潜能、释放效能,谁的结构更符合制胜机理、打赢要求,谁就能占据优势、赢得先机。

  武器装备精良,形成了联合火力杀伤

  抗战期间,中日两军在武器装备质量数量方面存在着很大的差距。以侵华日军一个常设师团(即甲种师团)与中国精锐的陆军第88师(德械师)相比,两军装备的各种枪炮在性能上互有优长,但在数量上却拉开了差距:日军步枪数量是中国军队的1.6倍多,轻重机枪是2倍多,野战重炮是4倍多。在密集火力与重火力杀伤等方面,日本陆军对中国陆军构成了成倍的数量优势。此外,日本陆军作战还可以得到相当数量的空中火力支援以及坦克装甲部队的加强,可构筑一张陆、海、空三军联合火力网。如淞沪会战,是抗战中中日两军精锐部队首次硬碰硬的较量,也是中国军队牺牲最大、战斗最为惨烈的一役。中国军队进攻时,就会陷入日军的立体火力网;防御时,又会饱受日军的火力轰击,兵员损失达到一天一个师的惨烈程度。因此,面对侵华日军的立体火力网,中国军队只能凭借数量优势,以人海填火海,极为悲壮。

  武器装备是构成战斗力最直接的物质基础。武器装备落后,人的能动作用在战争中也很难最大限度地发挥出来,要打赢战争就会付出更大的代价。因此,要赢得胜利既要敢于亮剑,又要善于铸剑,加快构建适应未来战争和履行使命要求的武器装备体系。

  作战组织严密,使得攻防转换比较灵活

  侵华日军作战组织与实施严密,使其火力杀伤更加精准、高效,因此总能掌控战场主动权。比如日军在淞沪会战时,首先,通过观测气球侦察中国军队阵地,标定攻击目标,然后召唤飞机、野战重炮与海军舰炮进行狂轰滥炸,尽量摧毁中国军队阵地。其次,待其陆、海、空火力突击后,日军便出动坦克掩护步兵,向中国军队阵地发起猛攻;与此同时,其炮兵火力实施延伸射击,对中国军队后方增援部队进行火力拦阻,力求大量杀伤有生力量。再次,如遭遇中国军队强力还击,日军即再次召唤火力轰击,然后再进行新一波步、坦协同攻击。此外,日本战机以组、队形式,在战场上空巡视,发现中国军队目标即进行轰炸与扫射,或召唤野战重炮与舰炮进行远程轰击。由于侵华日军在作战组织与实施上的严密性,使其无论在大兵团联合作战中,还是小股部队攻防战斗中,都能够做到军种间行动联合,步、坦、炮间火力协同,左右邻间相互配合,发挥出整体战力来。而正面战场中国军队在指挥上鲜有灵活创举,基本上处于见招拆招的被动地位。

  战争对抗不仅是力量的对抗,而是综合较量。作战指挥,不是简单照条文操作或单纯计算就能解决的,面对战争复杂性的增加,单纯的技术或者单纯的谋略,都不可能掌控战场的主动权。而是应该谋力并举,既要讲指导的艺术,又要注重实力,二者相互支撑、不可偏废。

  军事训练严苛,保证了人员较高作战素养

  日军严苛的军事训练是其作战素养较高的主要原因。日军的训练可分为军官和士兵两部分,具有训练层次科学、训练课目覆盖面大、训练要求严格的特点。通过陆军士官学校文理兼顾的各兵种专业课程训练和后期各类技术兵种军官学校再教育,使得日军能够培养出一支高质量的基层军官队伍,且便于各兵种间的沟通和配合。士兵依照《步兵操典》组织常规单兵综合素质训练和中队以上的协同作战训练以及两个月的大队、联队级作战协同训练。而且日军新兵在转入小队、中队级协同战术训练时,往往会被老兵们带着加练夜间100米精确射击、避弹奔跑及针对避弹奔跑的射击方法、狙击与反狙击术、突发情况下防守与反击的动作等额外的训练课目,这些都是在战场上非常实用的技术。相比之下,当时中国军队则面临着军官受教育层次低、训练体系不完整、训练经费欠缺、训练装备差等问题。因缺少科学系统的训练,中国军队手中少量精良武器装备在战场上常常不能充分发挥应有作用。

  军事训练是未来战争的预演。坚持军事训练是和平时期军队战斗力生成的基本途径。打仗硬碰硬,训练必须实打实。军事训练水平上不去,部队战斗力也很难提高,战时必然吃大亏。所以,要想赢得未来战争,必须通过严酷的实战化训练这块“磨刀石”,把打赢本领锤炼得更过硬。

  情报工作缜密,获得了事半功倍的作战效果

  自明治维新以来,日军在对外扩张战争中,屡屡尝到情报工作带来的甜头,故其视情报侦察为战争制胜的捷径,始终高度重视情报侦察工作。日本发动侵华战争前的数十年间,在中国加紧了对未来预定战场的情报侦察。如据日本防卫厅战史研究所编写的《大本营陆军部》记载,1923年日军就制订了对中国的作战计划设想要点。根据此要点,1925年,日军参谋本部作战科长畑俊六率参谋本部、陆军省、海军军令部作战科等一行人员,乘军舰用一个月的时间,对上海至汉口的登陆点逐段进行侦察,这为以后日军进攻淞沪、武汉等要地,摸清兵要地志情况做好了准备。九一八事变后,日军更是通过各种途径、运用各种手段进行情报侦察,可以说无孔不入、用尽其力。比如当时中国军用地图的兵要地志却没有日军地图标注得清晰完备。

  “知彼知己,百战不殆”。情报工作的优劣、得失与高下,对于战争决策、作战部署乃至最后的战争胜负,起到极为重要的作用。通过缜密细致长期的情报工作,找出对手要害,针对性地设计战法,就能达到“四两拨千斤”的作战效果。

  思想控制严密,部队具有畸形的战斗意志

  抗战初期,侵华日军士兵普遍表现“不怕死”,这与长期日本武士道的文化贻害有关,但是更大程度上还是因为受到了军国主义思想的毒害。日本在近代走上武力扩张的道路之后,非常重视向军人灌输“效忠天皇”的封建忠君思想,同时日本还开展反华灭华教育;将侵略战争说成是为了解决日本“人口过剩”问题,捍卫日本的“生命线”“主权线”等。日军士兵长期受到军国主义思想的毒害,形成畸形的死战不降的战斗意志。在战局陷入僵持后,日军往往会组织自杀式的死亡冲锋。二战末期,美国最终决定先向日本投掷原子弹,而不是直接登陆日本。一个很重要的原因,就是美国惮于日本在本土进行“玉碎”作战,将会给美军带来巨大人员伤亡。与日军不同,中国军民的抵抗意志和战斗精神是在民族危亡中激发出来的,具有自发性、深刻性和持久性、正义性,这也是我们最终取得抗战胜利的重要原因。

  战斗意志是军队战斗力的重要构成。今天,培育军人的战斗意志,必须以过硬的军事技术和丰富的科技知识作基础。要把战斗意志培育融入军事训练内容体系,渗入各项军事实践活动,紧紧围绕担负的作战任务,练胆量、练意志、练作风、练技术战术,保证战斗意志和军事素质同步提升。

  编后感言:

  以敌为鉴是赢得胜利的重要方式

  面对侵华日军这部高效运转的战争机器,这头人类历史上武装到牙齿的法西斯主义怪兽,中国军民不屈不挠、奋起抵抗,使侵略者陷入人民战争的汪洋大海。侵华日军是“很难打”,但绝非“不可战胜”。特别是到了战争中后期,随着日本战争潜力的枯竭、士兵反战情绪的蔓延,侵华日军的战斗力迅速衰落,已难逃失败投降的结局。历史已经雄辩地证明,正义必胜、和平必胜、人民必胜。因此,作为战胜者,承认敌人的强悍不需要什么勇气,但需要秉持正确认知态度。以敌为鉴为我所用,是胜者恒强的重要手段,也是赢得胜利的方式。随意消费血与火的历史,是对历史的不尊重,更是对未来的不负责任。

原标题:为何抗日战争异常惨烈?日军并非神剧不堪一击

", + "ydbaike": [], + "replyCount": 86, + "link": [], + "img": [ + { + "ref": "", + "pixel": "600*399", + "alt": "", + "src": "http://cms-bucket.nosdn.127.net/catchpic/5/5a/5a67d106dd715cc465c97092d71b197b.jpg" + } + ], + "votes": [], + "shareLink": "https://c.m.163.com/news/a/CLJN5K2M000181KT.html?spss=newsapp&spsw=1", + "digest": "", + "topiclist_news": [ + { + "hasCover": false, + "subnum": "超过1000万", + "alias": "Military", + "tname": "军事", + "ename": "junshi", + "tid": "T1348648141035", + "cid": "C1348647991705" + } + ], + "dkeys": "日军,中国军队,侵华日军,淞沪会战", + "ec": "李曦_NN2587", + "topiclist": [ + { + "hasCover": false, + "subnum": "181.4万", + "alias": "网易军事频道,关注军事新闻", + "tname": "网易军事", + "ename": "wangyijunshi", + "tid": "T1401334013017", + "cid": "C1378977941637" + } + ], + "docid": "CLJN5K2M000181KT", + "picnews": true, + "title": "为何抗战异常惨烈?日军并非如神剧中不堪一击", + "tid": "", + "template": "recommend", + "threadVote": 30, + "threadAgainst": 3, + "boboList": [], + "category": "历史", + "replyBoard": "news_junshi_bbs", + "source": "中国军网", + "hasNext": false, + "voicecomment": "off", + "relative_sys": [ + { + "id": "CLBSS1EJ000187UE", + "title": "抗战期间,中国哪里的军人最容易变节投敌?", + "source": "大象公会", + "imgsrc": "http://cms-bucket.nosdn.127.net/f636439c8a89400c8cb829bfba778b2820170526101336.jpeg", + "docID": "CLBSS1EJ000187UE", + "from": "HZ", + "type": "doc", + "ptime": "2017-05-26 10:13:36", + "href": "" + }, + { + "id": "CL7JRHFB0523D46J", + "title": "一寸山河一寸血,南京光华门血战,撤退时教导总队泪奔了", + "source": "不二书说历史", + "imgsrc": "http://dingyue.nosdn.127.net/Ewnq46iqIU4hDHPhr3V80sK30DcK384lkBe0hNvRFoP=V1495621093803compressflag.jpg", + "docID": "CL7JRHFB0523D46J", + "from": "HZ", + "type": "doc", + "ptime": "2017-05-24 18:19:07", + "href": "" + }, + { + "id": "CLC2DNAH05239N17", + "title": "淞沪会战中,日军对中国军队是这样记载的!", + "source": "68讲台", + "imgsrc": "http://dingyue.nosdn.127.net/ogdZAXPtO2q8OK06qjeDTz2tWJ6bdjQ6MnqxnptQHvanQ1495770638931compressflag.jpg", + "docID": "CLC2DNAH05239N17", + "from": "HZ", + "type": "doc", + "ptime": "2017-05-26 11:50:42", + "href": "" + } + ], + "book": [], + "ptime": "2017-05-29 11:07:54" + } +} + +``` + + +### 1.3 本地新闻 + +**必选参数:** + `name` 地名 如:`广东省_深圳市`,`江西省_南昌市` 不填写获取你的定位默认地址 + + `page` 分页 如0 从第0 条数据开始返回10条数据(最新的10条数据) 10 20 30 每次返回10条数据 + + **接口地址:** + `/News/local_news?name=广东省_深圳市&page=0` + + **调用例子:** + `//api.isoyu.com/index.php/api/News/local_news?name=广东省_深圳市&page=0` + + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: + ``` + ``` + + + + +## 2. 视频模块 + +说明: 包括 视频首页数据、视频分类列表 视频详情、如下详情: + +### 2.1 视频首页数据 + +**必选参数:** + `无` + + **接口地址:** + `/Video/index` + + **调用例子:** `//api.isoyu.com/index.php/api/Video/index` + + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: + ``` + ``` + +### 2.2 视频分类列表 +**必选参数:** +`type` int : 新闻类型 + + + + + + + + + + + + + + + + + +
type01234
名称精品视频搞笑视频美女视频体育视频新闻现场
+ `page` int : 分页页数,每页返回10条 + **接口地址:** + + `/Video/video_type?type=2&page=10` + **调用例子:** + + `//api.isoyu.com/index.php/api/Video/video_type?type=2&page=10` + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +``` javascript +{ + "msg": "success", + "code": 1, + "data": [ + { + "sizeSHD": 22050, + "replyCount": 0, + "videosource": "新媒体", + "mp4Hd_url": "http://flv2.bn.netease.com/videolib3/1705/30/aYNXb0812/HD/aYNXb0812-mobile.mp4", + "title": "小清新美女爱跳舞,夜里房间优雅独舞", + "cover": "http://vimg3.ws.126.net/image/snapshot/2017/5/J/F/VCKOETEJF.jpg", + "videoTopic": { + "alias": "多彩人生,你我共同编织", + "tname": "韬哥学霸哥", + "ename": "T1494085453258", + "tid": "T1494085453258", + "topic_icons": "http://dingyue.nosdn.127.net/tHYrjgCtrdmQP3Nvygaa75m3BMOxdY5ZJ8RVPGgMj9Njt1494085452329.jpg" + }, + "description": "小清新美女爱跳舞,夜里房间优雅独舞", + "replyid": "BKOD7PO4050835RB", + "length": 147, + "m3u8_url": "http://flv.bn.netease.com/videolib3/1705/30/aYNXb0812/SD/movie_index.m3u8", + "vid": "VBKOD7PO4", + "topicName": "韬哥学霸哥", + "votecount": 0, + "topicImg": "http://vimg3.ws.126.net/image/snapshot/2017/5/9/B/VCKI1SH9B.jpg", + "topicDesc": "让生活慢下来,品味阅读,享受人生,活到老学到老,教育大家,心灵美好,我们一起携手共创美好世界。", + "topicSid": "VCKI1SH8S", + "replyBoard": "video_bbs", + "playCount": 0, + "sectiontitle": "", + "mp4_url": "http://flv2.bn.netease.com/videolib3/1705/30/aYNXb0812/SD/aYNXb0812-mobile.mp4", + "playersize": 1, + "sizeSD": 11025, + "sizeHD": 14700, + "m3u8Hd_url": "http://flv.bn.netease.com/videolib3/1705/30/aYNXb0812/HD/movie_index.m3u8", + "ptime": "2017-05-30 10:21:30" + } + ] +} +``` + +### 2.3 视频详情 +**必选参数:** +`vid` 视频列表下的vid VEKKO9TJP + +**接口地址:** +`/Video/video_detail?vid=VEKKO9TJP` + +**调用例子:** + `//api.isoyu.com/index.php/api/Video/video_detail?vid=VEKKO9TJP` + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: + +```javascript +{ + "msg": "success", + "code": 1, + "data": { + "topicid": "1000", + "replyCount": 0, + "mp4Hd_url": "http://flv2.bn.netease.com/videolib3/1705/29/BWixL8250/HD/BWixL8250-mobile.mp4", + "recommend": [], + "title": "搞笑段子:老婆,咱们去旅游吧", + "hits": 0, + "cover": "http://vimg1.ws.126.net/image/snapshot/2017/5/S/Q/VCKMKITSQ.jpg", + "replyBoard": "video_bbs", + "replyid": "EKKO9TJP050835RB", + "mp4_url": "http://flv2.bn.netease.com/videolib3/1705/29/BWixL8250/SD/BWixL8250-mobile.mp4", + "length": 13, + "videotype": "搞笑的小妖精", + "playersize": 0, + "vurl": "http://v.163.com/paike/VCH0LU18J/VEKKO9TJP.html", + "m3u8Hd_url": "http://flv.bn.netease.com/videolib3/1705/29/BWixL8250/HD/movie_index.m3u8", + "m3u8_url": "http://flv.bn.netease.com/videolib3/1705/29/BWixL8250/SD/movie_index.m3u8", + "ptime": "2017-05-29 00:17:56", + "vid": "VEKKO9TJP" + } +} + +``` + +## 3. 笑话段子轻松一刻 + +说明: 包括 视频首页数据、视频分类列表 视频详情、如下详情: + +### 3.1 笑话段子 + +**必选参数:** + `page` 分页数 10 20 30 + + **接口地址:** + `/Joke/index?page=10` + + **调用例子:** + `//api.isoyu.com/index.php/api/joke/index?page=10` + 返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +```javascript +{ + "msg": "success", + "code": 1, + "data": [ + { + "adtype": 0, + "boardid": "comment_bbs", + "clkNum": 0, + "danmu": 1, + "digest": "上语文课时,老师提问:“小明,请你用文明礼貌的‘礼’字造个句子。”小明思索了一会说:“爸爸提着包出门托人办事。”老师说:“没‘礼’字呀?”小明认真的说:“咋没‘礼’呀?礼在包里呢,爸爸说没礼人家不办事。”", + "docid": "CEJIS0I69001S0I7", + "downTimes": 208, + "imgType": 0, + "imgsum": 0, + "picCount": 0, + "program": "HY", + "recNews": 0, + "recType": 0, + "refreshPrompt": 0, + "replyCount": 4, + "replyid": "CEJIS0I69001S0I7", + "source": "ZOL笑话大全", + "title": "幽默的孩子和家长,不只是好笑。", + "upTimes": 309 + } + ] +} +``` + + +## 4. 图片相册接口 + +说明: 包括 Cosplay相册、花瓣相册: + +### 4.1 cosplay 相册 + +**必选参数:** + `page` 分页数 10 20 30 + + **接口地址:** + `/Picture/index?page=20` + + **调用例子:** + `//api.isoyu.com/index.php/api/picture/index?page=20` + +返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +```javascript +{ + "msg": "success", + "code": 1, + "data": [ + { + "desc": "喜欢神奇宝贝的人一定都知道鲤鱼王。这个特别的精灵没有特别强大的能力,除了长相呆萌,好像没有其他优点。不过下面这名男子却对这个超弱的精灵情有独钟,他戴着鲤鱼王面具大玩Cosplay,照片被上传到网路后立刻成为网友们热议的话题。", + "pvnum": "", + "createdate": "2017-01-11 01:39:21", + "scover": "http://img3.cache.netease.com/photo/0031/2017-01-11/s_CAFBLLL26LRK0031.jpg", + "setname": "靠Cosplay鲤鱼王而走红的型男真面目", + "cover": "http://img3.cache.netease.com/photo/0031/2017-01-11/CAFBLLL26LRK0031.jpg", + "pics": [ + "http://img3.cache.netease.com/photo/0031/2017-01-11/CAFBLLL26LRK0031.jpg", + "http://img4.cache.netease.com/photo/0031/2017-01-11/CAFBLLTT6LRK0031.jpg", + "http://img4.cache.netease.com/photo/0031/2017-01-11/CAFBLM0J6LRK0031.jpg" + ], + "clientcover1": "", + "replynum": "57", + "topicname": "", + "setid": "91744", + "seturl": "http://play.163.com/photoview/6LRK0031/91744.html", + "datetime": "2017-01-11 01:42:32", + "clientcover": "", + "imgsum": "7", + "tcover": "http://img4.cache.netease.com/photo/0031/2017-01-11/t_CAFBLLL26LRK0031.jpg" + }, + { + "desc": "最后要推荐的一组图是台湾Coser:Mon小夢夢的最新作品——菲利克斯COS。在原作里,这位角色拥有着不属于女性的萌系着装以及言行举止,然而事实上却是个真·汉子......", + "pvnum": "", + "createdate": "2017-01-10 10:58:46", + "scover": "http://img4.cache.netease.com/photo/0031/2017-01-10/s_CADP9L5P6LRK0031.jpg", + "setname": "灵魂陷入危机之中 Re:0菲利克斯COS", + "cover": "http://img3.cache.netease.com/photo/0031/2017-01-10/CADP9L5P6LRK0031.jpg", + "pics": [ + "http://img3.cache.netease.com/photo/0031/2017-01-10/CADP9L5P6LRK0031.jpg", + "http://img3.cache.netease.com/photo/0031/2017-01-10/CADP9JU36LRK0031.jpg", + "http://img4.cache.netease.com/photo/0031/2017-01-10/CADP9K7J6LRK0031.jpg" + ], + "clientcover1": "", + "replynum": "0", + "topicname": "", + "setid": "91731", + "seturl": "http://play.163.com/photoview/6LRK0031/91731.html", + "datetime": "2017-01-10 11:00:15", + "clientcover": "", + "imgsum": "5", + "tcover": "http://img3.cache.netease.com/photo/0031/2017-01-10/t_CADP9L5P6LRK0031.jpg" + } + ] +} + +``` + +### 4.2 花瓣照片相册 + +**必选参数:** + `无` 每次生成20条随机数据 + + **接口地址:** + `/Picture/hua_ban` + + **调用例子:** + `https://api.isoyu.com/index.php/api/Picture/hua_ban` + +返回数据(每次返回是20条数据,这里就不全部列出来了)如下图: +```javascript +{ + "msg": "success", + "code": 1, + "data": [ + { + "img": "http://img.hb.aicdn.com/623a6284b7fb7cc297bfadaf101a07677817136543f3a-ksxY2x", + "title": "小清新女生", + "desc": "唯美气息" + }, + + { + "img": "http://img.hb.aicdn.com/1130866c1c6b90456f0488d2d42279740740c97d6d805-DHmPo2", + "title": "小清新女生", + "desc": "唯美气息" + } + ] +} +``` + + +## 5. 天气预报 + +说明: 获取城市天气预报: + +### 5.1 获取城市天气预报 + +**必选参数:** + `city` 城市地址 如 `深圳市` `北京市` + + **接口地址:** + `/Weather/get_weather?city=广州市` + + **调用例子:** + `//api.isoyu.comm/index.php/api/Weather/get_weather?city=广州市` + +返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +```javascript +{ + "error": 0, + "status": "success", + "date": "2017-05-31", + "results": [ + { + "currentCity": "广州市", + "pm25": "57", + "index": [ + { + "title": "穿衣", + "zs": "热", + "tipt": "穿衣指数", + "des": "天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。" + }, + { + "title": "洗车", + "zs": "不宜", + "tipt": "洗车指数", + "des": "不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。" + }, + { + "title": "感冒", + "zs": "少发", + "tipt": "感冒指数", + "des": "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。" + }, + { + "title": "运动", + "zs": "较适宜", + "tipt": "运动指数", + "des": "天气较好,较适宜进行各种运动,但因湿度偏高,请适当降低运动强度。" + }, + { + "title": "紫外线强度", + "zs": "中等", + "tipt": "紫外线强度指数", + "des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。" + } + ], + "weather_data": [ + { + "date": "周三 05月31日 (实时:32℃)", + "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png", + "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png", + "weather": "多云", + "wind": "南风3-4级", + "temperature": "32 ~ 26℃" + }, + { + "date": "周四", + "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/leizhenyu.png", + "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png", + "weather": "雷阵雨转大雨", + "wind": "西南风4-5级", + "temperature": "32 ~ 24℃" + }, + { + "date": "周五", + "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png", + "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/zhenyu.png", + "weather": "大雨转阵雨", + "wind": "微风", + "temperature": "29 ~ 24℃" + }, + { + "date": "周六", + "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png", + "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/zhongyu.png", + "weather": "中到大雨转中雨", + "wind": "微风", + "temperature": "28 ~ 24℃" + } + ] + } + ] +} + +``` + +## 6. Web 前端开发资讯日报 + +说明: 获取每日前端开发日报列表、单日日报详情信息列表: + +### 6.1 每日前端开发日报列表 + +**必选参数:** + `page` 1,2,3 第一页第一二页日报列表当前日期一次往前走 + + **接口地址:** + `/Web/web_daily_list?page=1` + + **调用例子:** + `https://api.isoyu.com/index.php/api/Web/web_daily_list?page=1` + +返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +```javascript +{ + "msg": "success", + "code": 1, + "data": [ + { + "title": "20170530 前端开发日报", + "date": "2017-05-31", + "desc": "Vue全家桶填坑之路;Webpack 最详解;前端开发规范:命名规范、html 规范、css 规范、js 规范;前端性能优化的三个维度;Angular4实现个人作品展示站;HTTP Session 的工作原理以及几个思维扩展;React 教 ...", + "daily_id": 20170530 + }, + { + "title": "20170529 前端开发日报", + "date": "2017-05-30", + "desc": "web前端面试题汇总(JS);Vue 重写前端导航;Webpack 2 中一些常见的优化措施;Canvas之基础;https那些事;煦涵说JSON;redux-demo;Angular 组件间通信 WEB前端面试题汇总(JS)如何解决跨域问 ...", + "daily_id": 20170529 + }, + { + "title": "20170528 前端开发日报", + "date": "2017-05-29", + "desc": "大白话 JavaScript 创建对象思维导图;学习阮一峰的WebSocket;从 JavaScript 作用域说开去;前端周刊第 57 期:《战争与和平版》的 CSS-IN-JS 黑历史;Alloy 前端周刊第 7 期;JavaScrip ...", + "daily_id": 20170528 + }, + { + "title": "20170527 前端开发日报", + "date": "2017-05-28", + "desc": "JavaScript 函数式编程指南;JS 函数式编程指南(中文版);快速掌握ECMAScript 6新特性;基于 TypeScript 的 Node.js 框架 Nest 正式版发布(下);2017-05-27 前端日报;一个后端程序员的 ...", + "daily_id": 20170527 + }, + { + "title": "20170526 前端开发日报", + "date": "2017-05-27", + "desc": "Vue.js 入门最佳项目实践-个人博客全栈应用从零到上线;JTaro:基于 Vue 2.0 的轻量级 SPA 框架;为什么我们需要 Vuex;【小程序可用】css3 animation 实现的跑马灯;Sessions by Pusher: ...", + "daily_id": 20170526 + }, + { + "title": "20170525 前端开发日报", + "date": "2017-05-26", + "desc": "不仅仅是粘贴复制——聊聊前端脚手架;值得多聊聊的 Promise 模式,以及它能解决什么问题;发布自己第一个 npm 组件包(基于 Vue 的文字跑马灯组件);一个简单express+jade+mysql+bootstrap+nodejs的 ...", + "daily_id": 20170525 + }, + { + "title": "20170524 前端开发日报", + "date": "2017-05-25", + "desc": "JavaScript 疑难汇总;Vue的Mock数据(一) JSON-server;React VR 快速入门中文文档;javascript——window对象;jQuery效果—雪花飘落;移动 web 之滚动篇;10分钟教你撸一个node ...", + "daily_id": 20170524 + }, + { + "title": "20170523 前端开发日报", + "date": "2017-05-24", + "desc": "基于栈的 HTML 解析器;React学习报告;WebP 已经适合主流使用?美图图像选型评测及优化历程;一、如何将Vue初始项目发布到github上;还在找react例子? 记录一下react练习小心得;前端每周清单第 14 期:编写现代 ...", + "daily_id": 20170523 + }, + { + "title": "20170522 前端开发日报", + "date": "2017-05-23", + "desc": "前端 (Not just) 工程师终究要掌握的知识;css3动画(二):波浪效果;JS 与多线程;每天 10 个前端知识点:杂技;GB-respond:移动端响应式布局解决方案(JavaScript + rem);React实战 ̵ ...", + "daily_id": 20170522 + }, + { + "title": "20170521 前端开发日报", + "date": "2017-05-22", + "desc": "总有你要的编程书单(GitHub);JavaScript 编码指南;学习JavaScript之闭包;Vue 用户的 React 上手小结;初识weex(前端视角) – 环境搭建;JQuery 中的 setTimeout(fn, ...", + "daily_id": 20170521 + } + ] +} +``` + + + +### 6.2 单个日报列表 + +**必选参数:** + `$daily_id` 如:`20170520` 某个日期数 + + **接口地址:** + `/Web/every_daily_list?$daily_id=20170520` + + **调用例子:** + `https://api.isoyu.com/index.php/api/Web/every_daily_list?$daily_id=20170520` + +返回数据(每次返回是10条数据,这里就不全部列出来了)如下图: +```javascript +{ + "msg": "success", + "code": 1, + "title": "20170530 前端开发日报", + "data": [ + { + "title": "vue全家桶填坑之路", + "url": "https://segmentfault.com/a/1190000009599025", + "desc": "vue全家桶填坑之路近些日子上手vue全家桶,深感自己的知识水平浅薄,在摸索之中记录了我遇到的一些问题的解决方法。 场景:表单需要打开新页面修改参数返回保存数据 这个一开始我就想利用vuex的store存储到state之中就大功告成了。..." + }, + { + "title": "Webpack 最详解", + "url": "http://zcfy.cc/article/a-detailed-introduction-to-webpack-ndash-smashing-magazine-2974.html", + "desc": "Webpack 最详解 JavaScript模块打包的概念已经出现一段时间了。RequireJS在2009年首次发声,之后Browserify粉墨登场。接着各种打包工具如雨后春笋纷纷涌现。而webpack以其优异的特性脱颖而出。如果你还不了解它,希望这篇文章可以带你熟悉这一款强大的工具。 什么是模块打包工具 我们见过的多数编程语言(包括ECMAScr..." + }, + { + "title": "前端开发规范:命名规范、html 规范、css 规范、js 规范", + "url": "https://juejin.im/post/592d4a5b0ce463006b43b6da", + "desc": "前端开发规范:命名规范、html 规范、css 规范、js 规范 本文首发于我的个人网站:http://cherryblog.site/ (背景更换了不知道大家有没有发现呢,嘻嘻) 一个好的程序员肯定是要能书写可维护的代码,而不是一次性的代码,怎么能让团队当中其他人甚至一段时间时候你再看你某个时候写的代码也能看懂呢,这就需" + }, + { + "title": "前端性能优化的三个维度", + "url": "https://juejin.im/post/592d0f4ca0bb9f00570f4408", + "desc": "前端性能优化的三个维度 前端性能优化可以分为三个level:静态资源优化、接口访问优化、页面渲染速度优化,在操控门槛上依次递增,优化效果上越发没有这么明显,所以很多小团队只会做到了第一个level追求极致的前端性能体验,提升自己的level,come on ~ 目录 一、静态资源" + }, + { + "title": "Angular4实现个人作品展示站", + "url": "https://segmentfault.com/a/1190000009599190", + "desc": "Angular4实现个人作品展示站Angular4实现个人作品展示站,模板仿慕课。 SPA site for displaying owner project http://project.giscafer.com github:https://github.com/giscafer/p..." + }, + { + "title": "HTTP Session 的工作原理以及几个思维扩展", + "url": "https://swiftcafe.io/2017/05/30/about-session/", + "desc": "HTTP Session 的工作原理以及几个思维扩展 大家都知道,HTTP 协议本身是无状态的,Session 的出现解决了这个问题,也被大多数 web 端采用。 但它背后的实现原理你是否有兴趣了解呢,以及在它基础上的思维发散,和你聊聊。 无状态的 HTTP 大家都知道,我们目前使用的互联网应用层协议基本上都是基于 HTTP 和 HTTPS 的,它们的本身是无状态的, 只负..." + }, + { + "title": "", + "url": "http://miaoyunze.com/2017/05/30/React-Tutorial-11-Composition-vs-Inheritance/", + "desc": "React 教程 - 11. 组合与继承 React 官方文档翻译 - 11. 组合与继承 —— 由缪运泽分享" + }, + { + "title": "angular中的作用域及继承", + "url": "https://segmentfault.com/a/1190000009598760", + "desc": "angular中的作用域及继承在一些使用angular框架的大型项目中,似乎有很多个controller,而每个controller都有自己的$scope. $rootscope$rootScope顶级作用域,也叫根作用域,类似于window,window的属性在任何子作用域都可以访问。$rootS..." + }, + { + "title": "", + "url": "https://segmentfault.com/a/1190000009597241", + "desc": "杂篇 - Vue豆瓣系列文章项目地址 在线演示 不识庐山真面目,只缘身在此山中。 大概一个月前,开源了Vue重构豆瓣移动端的项目,效果还可以,收到了很多小伙伴的反馈,话说是要写一些文章的,但迟迟没有动笔,估计小伙伴们等的花都谢了,..." + }, + { + "title": "如何在JavaScript中实现一个Long型——Long.js源码学习与分析", + "url": "https://segmentfault.com/a/1190000009599204", + "desc": "如何在JavaScript中实现一个Long型——Long.js源码学习与分析背景 由于在项目中使用到了WebSocket的自定义二进制协议,需要将二进制转为后端服务中定义的Long型。而在JavaScript中的Number类型由于自身原因,并不能完全表示Long型的数字,因此需要我们通过其他的方式来对Lon..." + }, + { + "title": "WebAssembly基础", + "url": "https://segmentfault.com/a/1190000009598598", + "desc": "WebAssembly基础WebAssembly定义 WebAssembly是一种的语言,可以在现代浏览器环境中运行,并提供了功能和性能上的优势。可以将其它语言,如C/C++等,编译成Assembly格式的代码,然后在浏览器中运行。 WebAssembly的目标 WebAssem..." + }, + { + "title": "canvas 图像旋转与翻转姿势解锁", + "url": "http://t.cn/RSzpxck", + "desc": "《canvas 图像旋转与翻转姿势解锁》从一个游戏需求说起:“可乐瓶”里有多个“气泡”,需要设置不同的动画效果,且涉及 deviceOrientation 的交互,需要有大量计算改变元素状态…… (by 凹凸实验室) ​​​" + }, + { + "title": "如何瘦身 Git 仓库", + "url": "http://t.cn/RSqz6LY", + "desc": "如何瘦身 Git 仓库 » 译者:zhousiyu325 对 Git 仓库的维护通常是为了减少仓库的大小。如果你从另外一个版本控制系统导入了一个仓库,你可能需要在导入后清除掉不必要的文件。 ​​​" + } + ] +} +``` + + +## 7. Web 知乎日报数据 + +说明: 获取每日每日知乎日报、日报详情、日报短评论 + +### 7.1 每日知乎日报列表 + +**必选参数:** + `无` + + **接口地址:** + `/Zhihu/zhihu_daily` + + **调用例子:** + `https://api.isoyu.com/index.php/api/Zhihu/zhihu_daily` + +返回数据(每次返回是18条数据,这里就不全部列出来了)如下图: +``` +{ + "msg": "success", + "code": 1, + "data": { + "date": "20170603", + "stories": [ + { + "title": "《萤火虫之墓》是我不敢看第二遍的动画片", + "ga_prefix": "060321", + "images": [ + "https://pic4.zhimg.com/v2-1ce18fa4888ea20fba5526579d8e039b.jpg" + ], + "multipic": true, + "type": 0, + "id": 9456269 + }, + { + "image": "https://pic1.zhimg.com/v2-1a842a11ed0b989a7e7a24a9e01cc7b4.jpg", + "type": 0, + "id": 9453152, + "ga_prefix": "060207", + "title": "《加勒比海盗 5》:很亲切但并不激动,很高兴但没有惊喜" + } + ] + } +} +``` + + +### 7.2 日报详情 + +**必选参数:** + `id` 日报列表中的 id + + **接口地址:** + `/Zhihu/news?id=9454551` + + **调用例子:** + `https//api.isoyu.com/index.php/api/Zhihu/news?id=9454551` + +返回数据()如下图: +``` +{ + "msg": "success", + "code": 1, + "data": { + "body": "
\n
\n\n
\n\n\n\n
\n\n
\n\n\n\n
\n

\n
\n\n
\n\n故园风雨前,写作业者\n
\n\n
\n

* * *

\r\n

一场用生命炫技结果演砸了的惨败

\r\n

* * *

\r\n
\r\n

附近有新楼盘开建,工地都围上了。昨经过,发现已有一幢精美小筑落成,沿街矗立。走在矮墙外,看见一蓬一蓬的白雾从墙里漫出来,在墙头上铺开回旋,被后面几枝殷红的鸡爪槭衬着,袅袅流云似的,顺墙飘落,刚落就散了。特意跑去淋了一下,不是干烟,真是水汽。又发现地面也有一团团白雾,原是从里面沿着墙根转出来的,蒸蒸然在人脚面汇聚,刚聚就散了。啊,好一个神仙似的姐姐,我自喜道。

\r\n

原来是售楼处。仰头看见几个金色大字,是楼盘名,花着锦火烹油那意思。楼盘我当然惦记不上,但诱人而免费的售楼处必需到此一游。我因强扮一脸阔气踱进去。

\r\n

进去是一方仿照日式的庭园,百十平米。造园的人真费心了:远观路尽头有片白色沙石地,用细耙梳理出涟漪波涛,上踞胖瘦不一几尊山石,山石之间生出一株老松,虬曲苍劲,好像已经在此守候了几百年。沙海之外围着一圈浅水,缓缓似有流动。可惜池中未见锦鲤睡莲,过于清汤寡水。池塘两侧大概装有类似加湿器那样的机关,不断喷出水汽,以保证整个庭院腾云驾雾。我猜这里面是有些学问的,喷水汽得把握好分寸,云雾小了显寒酸,稍大一点又像澡堂子。这里的控制刚刚好,还能漫出墙去把路人勾进来。我一边赞叹一边往里去,瞧见浅池中立了一块牌子,白地红字,乍看像一句题诗,为这精美小景做一个文学的定性,并骄傲地落下款识。然而走进一看,吓一大跳:

\r\n

“警告!危险!水中有电!!禁止戏水!!!”

\r\n

好嘛,我说怎么不种莲不养鱼。也可想而知之前的它们是怎么死的。

\r\n

真是费解,既然已经致命,那还不赶紧切断电源?可一转念,假使切断电源,那潺潺流水就成了死水,山间也不再有晓岚暮霭,没了仙气儿,这些损失对销售来讲也致命吧?所以切还是不切,这是一个问题。然而再细想,断然不能买这楼盘啊!售楼处本该是一个建筑在实力、才华上的最高体现,可此间连最基本的水电问题都没解决好,还警告,还危险,还禁止。真所谓用绳命炫技结果演砸了,多么难堪的惨败。

\r\n

我一个不相干的人都替他焦虑了。

\r\n

这桩焦虑让我记起另一桩焦虑。

\r\n

那时我上二三年级,不学好,放学不回家,喜欢在路上看热闹。八十年代初的成都,街头巷尾还能看见耍猴戏的班子,和表演武术的班子。那天我就挤进一个圈场,正赶上他们的压轴大戏,硬气功。出场的是一个胖大的中年男人,穿条黑绸布灯笼裤,扎着裤脚,上身赤裸着,肥敦敦的。裤腰上紧紧地绑一条很宽的红腰带,上钉黄铜钉,杀气腾腾的红和黄。脑袋绑一条红布头带,也扎得紧紧的,扯着他的眉眼,像景阳岗那只老虎一样“吊睛”。因为太紧,他眨眼时都不能完全闭上,总留着一截眼白,这更增添了他的威慑。

\r\n

他说一口北方话,滔滔不绝。大意是他们从黄河水最凶猛的地方来,经过了很多城市村庄,为很多观众表演过,观众都被他们高超的武艺震惊了,而他本人是台柱子,全国上下都给了他很高的荣誉。这次也要让你们开开眼,你们把亲戚邻居都叫来看吧,看我的硬气功,机会难得。

\r\n

他一边说一边绕着场子阔步疾走,手里攥一条皮鞭不停往脊背和胸腹上抽打,留下浅红色的痕迹,啪啪啪声音很响,又很巧妙地穿插在他的演说声中,光看这个我就觉得很来劲了。

\r\n

台柱子先耍了一通大刀,轰然叫好。又舞了一通棍子,轰然叫好。又把竖在地上的红缨枪,尖头刺着自己喉咙,跟地面角力,枪杆子弯得很厉害了也不饶它,看到危急处人们都疯狂了。最后一个节目据说最厉害,他进棚子里喝了口水才又出来,好故意吊一下胃口。

\r\n

他走到中央,一抱拳,把束额头的带子解下来,抛走。虽然吊睛白眼没了,他看着不那么凶狠了,甚至露出了一个北方胖农民的憨厚老实,但又显出肃穆和苍凉,一个身怀绝技的高人的麻木。他说了几句话,大意是你们瞧好了——我反正没事,但你们小心你们的心脏。

\r\n

他从旁人手中接过一摞瓦片,特意告诉说这是你们这儿的瓦片,我就地取材。观众不知道他什么意思,都嗫嚅着不敢接话。只见他举起这摞瓦片到半空,森然宣布,我要砸我的额头,用额头击碎瓦片,但我自己完好无损,这是硬气功里最见真本事的一个了。说完,又运了一口气,猛地把瓦片砸向额头。

\r\n

轰然叫好。雷鸣般的掌声。观众沸腾了。

\r\n

可欢呼持续了不到几秒就停下来,人群里传出惊叫。一个小孩大声喊:

\r\n

“流血了流血了!脑壳顶顶!”

\r\n

真是,一条浓浓的血从他额上留下来,在鼻尖上积成血滴,啪哒啪哒滴到地上。他额上头发上脸上全是瓦灰。大概不知道伤口在那里,他也不敢去抹,一时只能由着血往下流。他手里还有瓦片,唉,真不忍看,只碎了第一片,剩下的都还瓦全着。

\r\n

那时已黄昏,人们都是在归家路上顺便停一脚,看这么一场价廉物美的演出,晚餐时好口若悬河地海吹一番,只会把这卖艺人吹得更神乎其神,而决不会塌他的台,但没想到他自己竟然弄成一场血光之灾。要说我们成都人那时风气真好,场子上没有一声倒彩,人们没有幸灾乐祸的需求,只是惊愕,只是叹息。台柱子这时已经回到那个半敞开的棚子里,坐在高高的板凳上,垂着胳膊,似乎累极了。场子上的人们不知所措了一阵,交头接耳了一阵,逐渐散去。一个老婆婆没急着离开,她迈着小脚,拄着拐,滴滴哚哚地走向棚子,边走边颤颤巍巍扬着手里的一张帕子,说要他拿去擦血。然而台柱子摇摇手,很粗鲁地拒绝了,并且别过头去,我再也看不到他的脸。

\r\n

人走光了,菜场边的空地上只剩下一个莫名其妙的棚子,不知道他们为什么还没收摊。街上有人家点了灯,天真的晚了。

\r\n

因为目睹了一场用绳命炫技结果演砸了的惨败,我在人生很早很早的时候就尝到了难堪的焦虑,因为太刺激,在之后漫长的人生里,对景儿就要发作。

\n\n\n\n
\n
\n
\n\n\n
\n
", + "image_source": "《霸王别姬》", + "title": "小事 · 头上流血,水中有电", + "image": "https://pic4.zhimg.com/v2-cd33491815c9911d5d976b6c016614af.jpg", + "share_url": "http://daily.zhihu.com/story/9454551", + "js": [], + "ga_prefix": "060222", + "section": { + "thumbnail": "https://pic4.zhimg.com/v2-b3a98eac72f2e81e7257d4b6600ed47b.jpg", + "id": 35, + "name": "小事" + }, + "images": [ + "https://pic4.zhimg.com/v2-b3a98eac72f2e81e7257d4b6600ed47b.jpg" + ], + "type": 0, + "id": 9454551, + "css": [ + "http://news-at.zhihu.com/css/news_qa.auto.css?v=4b3e3" + ] + } +} +``` + +### 7.3 日报短评论列表 + +**必选参数:** + `id` 日报列表中的 id + + **接口地址:** + `/Zhihu/new_comment?id=9454551` + + **调用例子:** + `https://api.isoyu.com/index.php/api/Zhihu/new_comment?id=9454551` + +返回数据(最多返回20条数据)如下图: +``` +{ + "msg": "success", + "code": 1, + "data": { + "comments": [ + { + "author": "pokemonex", + "content": "这散文也太散了,散了一地。", + "avatar": "http://pic4.zhimg.com/874cb7b6a9b102cbc0b1d50c5c4e81f7_im.jpg", + "time": 1496490410, + "id": 29187452, + "likes": 1 + }, + + { + "author": "扎卡云_884", + "content": "我一个不相干的人都替他焦虑了。", + "avatar": "http://pic3.zhimg.com/1ae5f682bba916af97aaaddbf193a0f6_im.jpg", + "time": 1496450729, + "id": 29182161, + "likes": 0 + }, + { + "author": "刘山", + "content": "水里是可能会有电,有漏电风险而已,不是真的一直有电。\n你放鱼进去,常规没有问题,漏电的话不光是碰水不安全的问题了。", + "avatar": "http://pic1.zhimg.com/a4ae6b3c9b931ab18ac1a15740b6c5c8_im.jpg", + "time": 1496450483, + "reply_to": { + "content": "挺好看的散文,不知道为什么评论里那么多人抱怨。\n而且作者明明通过水里没有荷、鱼点出来了水里是真有电,一堆人抓着“仅仅是个警告”的假设不放,就不能轻轻松松看小品么。\n不过我猜依照作者的性格,只会对评论里的煞风景一哂而过。", + "status": 0, + "id": 29179844, + "author": "王王各" + }, + "id": 29182126, + "likes": 0 + } + ] + } +} +``` + + +## 8. 豆瓣热播电影 + +说明: 获取热播电影列表、电影详情 + +### 8.1 热播电影列表 + +**必选参数:** + `start` 开始数0. 9 18 + + `count` 返回列表数 + + + **接口地址:** + `/Movie/playing_movie_list?start=0&count=9` + + **调用例子:** + `https://api.isoyu.com/index.php/api//Movie/playing_movie_list?start=0&count=9` + +返回数据(每次返回数据,这里就不全部列出来了)如下图: +```json +{ + "msg": "success", + "code": 1, + "data": { + "rating": { + "max": 10, + "average": 7.4, + "stars": "40", + "min": 0 + }, + "reviews_count": 937, + "wish_count": 36862, + "douban_site": "", + "year": "2017", + "images": { + "small": "http://img7.doubanio.com/view/movie_poster_cover/ipst/public/p2459723975.jpg", + "large": "http://img7.doubanio.com/view/movie_poster_cover/lpst/public/p2459723975.jpg", + "medium": "http://img7.doubanio.com/view/movie_poster_cover/spst/public/p2459723975.jpg" + }, + "alt": "https://movie.douban.com/subject/6311303/", + "id": "6311303", + "mobile_url": "https://movie.douban.com/subject/6311303/mobile", + "title": "加勒比海盗5:死无对证", + "do_count": null, + "share_url": "http://m.douban.com/movie/subject/6311303", + "seasons_count": null, + "schedule_url": "https://movie.douban.com/subject/6311303/cinema/", + "episodes_count": null, + "countries": [ + "美国" + ], + "genres": [ + "动作", + "奇幻", + "冒险" + ], + "collect_count": 109318, + "casts": [ + { + "alt": "https://movie.douban.com/celebrity/1054456/", + "avatars": { + "small": "http://img7.doubanio.com/img/celebrity/small/562.jpg", + "large": "http://img7.doubanio.com/img/celebrity/large/562.jpg", + "medium": "http://img7.doubanio.com/img/celebrity/medium/562.jpg" + }, + "name": "约翰尼·德普", + "id": "1054456" + }, + { + "alt": "https://movie.douban.com/celebrity/1054414/", + "avatars": { + "small": "http://img3.doubanio.com/img/celebrity/small/587.jpg", + "large": "http://img3.doubanio.com/img/celebrity/large/587.jpg", + "medium": "http://img3.doubanio.com/img/celebrity/medium/587.jpg" + }, + "name": "哈维尔·巴登", + "id": "1054414" + }, + { + "alt": "https://movie.douban.com/celebrity/1010543/", + "avatars": { + "small": "http://img7.doubanio.com/img/celebrity/small/1243.jpg", + "large": "http://img7.doubanio.com/img/celebrity/large/1243.jpg", + "medium": "http://img7.doubanio.com/img/celebrity/medium/1243.jpg" + }, + "name": "杰弗里·拉什", + "id": "1010543" + }, + { + "alt": "https://movie.douban.com/celebrity/1325896/", + "avatars": { + "small": "http://img7.doubanio.com/img/celebrity/small/1410910563.02.jpg", + "large": "http://img7.doubanio.com/img/celebrity/large/1410910563.02.jpg", + "medium": "http://img7.doubanio.com/img/celebrity/medium/1410910563.02.jpg" + }, + "name": "布伦顿·思韦茨", + "id": "1325896" + } + ], + "current_season": null, + "original_title": "Pirates of the Caribbean: Dead Men Tell No Tales", + "summary": "故事发生在《加勒比海盗3:世界的尽头》沉船湾之战20年后。男孩亨利(布兰顿·思怀兹 Brenton Thwaites 饰)随英国海军出航寻找被聚魂棺诅咒的父亲“深海阎王”威尔·特纳(奥兰多·布鲁姆 Orlando Bloom 饰),却在百慕大三角遭遇被解封的亡灵萨拉查船长(哈维尔·巴登 Javier Bardem 饰)。获取自由的萨拉查屠尽加勒比海盗,征服了整个海域。里海海盗王赫克托·巴博萨船长(杰弗里·拉什 Geoffrey Rush 饰)在女巫Haifaa Meni(格什菲·法拉哈尼 Golshifteh Farahani 饰)口中得知了萨拉查的真实目的:为寻找他的宿敌杰克船长(约翰尼·德普 Johnny Depp 饰)。海盗的命运皆压在落魄的老杰克被封印的黑珍珠号,以及天文学家卡琳娜·史密斯(卡雅·斯考达里奥 Kaya Scodelario 饰)口中的远古三叉戟上。", + "subtype": "movie", + "directors": [ + { + "alt": "https://movie.douban.com/celebrity/1019391/", + "avatars": { + "small": "http://img7.doubanio.com/img/celebrity/small/58032.jpg", + "large": "http://img7.doubanio.com/img/celebrity/large/58032.jpg", + "medium": "http://img7.doubanio.com/img/celebrity/medium/58032.jpg" + }, + "name": "艾斯彭·山德伯格", + "id": "1019391" + }, + { + "alt": "https://movie.douban.com/celebrity/1216851/", + "avatars": { + "small": "http://img7.doubanio.com/img/celebrity/small/58031.jpg", + "large": "http://img7.doubanio.com/img/celebrity/large/58031.jpg", + "medium": "http://img7.doubanio.com/img/celebrity/medium/58031.jpg" + }, + "name": "乔阿吉姆·罗恩尼", + "id": "1216851" + } + ], + "comments_count": 47631, + "ratings_count": 101974, + "aka": [ + "加勒比海盗:恶灵启航(港)", + "加勒比海盗 神鬼奇航:死无对证(台)", + "加勒比海盗5:亡灵的缄默", + "加勒比海盗5:亡者无言", + "加勒比海盗5:死人不会告密", + "Pirates of the Caribbean 5" + ] + } +} +``` + + +### 8.2 热播电影详情 + +**必选参数:** + `id` 电影 `id` + + + + **接口地址:** + `/Movie/movie_info?id=6311303` + + **调用例子:** + `https://api.isoyu.com/index.php/api/api/Movie/movie_info?id=6311303` + +返回数据(每次返回数据,这里就不全部列出来了)如下图: + + +## 9. 招聘信息 + +说明: 获取招聘信息如 web开发工程师、php + +### 9.1 招聘 +**必选参数:** + `type` web/php/java/ + `pageNo` 第几页 + **接口地址:** + `https://api.isoyu.com/Job/index?type=web&pageNo=1` + **调用例子:** +```javascript +[ + { + "logger": { + "traceCapable": true, + "name": "com.lagou.entity.mobile.MobilePosition" + }, + "positionId": 3640855, + "positionName": "C#高级程序员", + "city": "深圳", + "createTime": "今天 21:30", + "salary": "12k-24k", + "companyId": 78807, + "companyLogo": "i/image/M00/54/9A/CgpEMll5Y4mAJauzAAAMiJRL3j8068.png", + "companyName": "牛日科技", + "companyFullName": "深圳牛日科技有限公司" + }, + { + "logger": { + "traceCapable": true, + "name": "com.lagou.entity.mobile.MobilePosition" + }, + "positionId": 3640847, + "positionName": "android APP 开发", + "city": "深圳", + "createTime": "今天 21:22", + "salary": "10K-12K", + "companyId": 262842, + "companyLogo": "images/logo_default.png", + "companyName": "视通技术", + "companyFullName": "深圳市易联视通技术有限公司" + }, + { + "logger": { + "traceCapable": true, + "name": "com.lagou.entity.mobile.MobilePosition" + }, + "positionId": 3203178, + "positionName": "PHP 高级工程师", + "city": "深圳", + "createTime": "今天 21:20", + "salary": "20k-35k", + "companyId": 7628, + "companyLogo": "image1/M00/00/10/Cgo8PFTUWC2AORIjAABLYZ6NxjQ933.png", + "companyName": "点指传媒", + "companyFullName": "武汉点指文化传播有限公司" + }, + { + "logger": { + "traceCapable": true, + "name": "com.lagou.entity.mobile.MobilePosition" + }, + "positionId": 2922125, + "positionName": "客服", + "city": "深圳", + "createTime": "今天 21:14", + "salary": "4k-6k", + "companyId": 108831, + "companyLogo": "i/image/M00/01/0C/Cgp3O1ZenZ6AefB-AAAFVRgugjY295.jpg", + "companyName": "爱易收", + "companyFullName": "深圳市易收电子商务有限公司" + } + ] + +``` diff --git a/_coverpage.md b/_coverpage.md new file mode 100644 index 00000000..29b56e5a --- /dev/null +++ b/_coverpage.md @@ -0,0 +1,7 @@ +# 姬长信API 2017 + +> 一个免费提供公益数据和随机妹子生活照抱枕图动漫壁纸背景图的API. + +* 须知:姬长信API将会记录你的域名、使用流量、调用次数等重要信息,如介意,请勿使用。管理员邮箱admin@isoyu.com +* 条款:姬长信API拥有所有运行权,在某些特定情况下,姬长信API有权利禁止你的网站调用。 +* 赞助&打赏:[http://fuligou.isoyu.com/yff/](http://fuligou.isoyu.com/yff/) diff --git a/apps/.htaccess b/apps/.htaccess new file mode 100644 index 00000000..3418e55a --- /dev/null +++ b/apps/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/apps/api/common.php b/apps/api/common.php new file mode 100644 index 00000000..3a8454a5 --- /dev/null +++ b/apps/api/common.php @@ -0,0 +1,83 @@ + '姬长信api', + 'appkey' =>'d8a318ae8500ca9d9b51376f525989c3', + 'author' =>'ecitlm', + 'MUSIC_API' =>'http://m.kugou.com/', + "ZHIHU_DOMAIN" =>"http://news-at.zhihu.com/api/4" + +]; \ No newline at end of file diff --git a/apps/api/controller/Address.php b/apps/api/controller/Address.php new file mode 100644 index 00000000..7683312f --- /dev/null +++ b/apps/api/controller/Address.php @@ -0,0 +1,33 @@ +"; + echo "你当前IP:".$getIp; + } +} \ No newline at end of file diff --git a/apps/api/controller/Base.php b/apps/api/controller/Base.php new file mode 100644 index 00000000..c8169eea --- /dev/null +++ b/apps/api/controller/Base.php @@ -0,0 +1,63 @@ +checkParams(); + } + + /** + * 校验签名 + */ + private function checkParams() + { + $params = $_REQUEST; + $times = time() * 1000; + if(empty($params['timestamp'])){ + echo json_encode(array( + 'msg' => '缺少timestamp参数', + 'code' => 999 + )); + die(); + } + if ($times - floatval($params['timestamp']) >300000) { + echo json_encode(array( + 'msg' => '请求时间失效', + 'code' => 999 + )); + die(); + } + if (empty($params['sign'])) { + echo json_encode(array( + 'msg' => '缺少Sign参数', + 'code' => 999 + )); + die(); + } else { + $responseSign = $params['sign']; + $params['appkey'] = config('appkey'); + unset($params['sign']); + ksort($params); + $str = implode($params); + $sign = MD5($str); + if ($sign != $responseSign) { + echo json_encode(array( + 'msg' => 'sign签名错误', + 'code' => 406 + )); + die(); + } + } + } +} diff --git a/apps/api/controller/Common.php b/apps/api/controller/Common.php new file mode 100644 index 00000000..fbd2b146 --- /dev/null +++ b/apps/api/controller/Common.php @@ -0,0 +1,16 @@ + 'success', + 'code' => 1, + 'domain'=>'https://static.lagou.com', + 'data' => json_decode($res, true)['content']['data'] + ]); + } + + /** + * @return \think\response\Json + * 得到工作岗位的详细信息 + */ + public function detail(){ + $positionId = (isset($_GET['positionId'])) ? $_GET ['positionId'] : "2662779"; + $url="https://m.lagou.com/jobs/{$positionId}.html"; + $res = HttpGet($url); + \phpQuery::newDocumentHTML($res); + $result=array( + 'title'=>pq('.postitle')->find('.title')->text(), + "content"=>pq('.content')->html(), + 'salary'=>pq('.salary')->find('.text')->html(), + 'workyear'=>pq('.workyear')->find('.text')->text(), + 'workaddress'=> pq('.workaddress')->find('.text')->text(), + 'education'=> pq('.education')->find('.text')->text(), + 'temptation'=> pq('.temptation')->text(), + ); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $result + ]); + } +} \ No newline at end of file diff --git a/apps/api/controller/Joke.php b/apps/api/controller/Joke.php new file mode 100644 index 00000000..fe4bbbad --- /dev/null +++ b/apps/api/controller/Joke.php @@ -0,0 +1,34 @@ + + */ + public function index($page = 10) + { + $page = (isset($_GET['page'])) ? intval($_GET ['page']) : 10; + $url = "http://3g.163.com/touch/jsonp/joke/chanListNews/T141931628472/2/{$page}-10.html?callback=data"; + $res = HttpGet($url); + $arr = json_decode(substr($res, 5, -1), true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr['段子'] + ]); + } + + +} diff --git a/apps/api/controller/Movie.php b/apps/api/controller/Movie.php new file mode 100644 index 00000000..654a3f4a --- /dev/null +++ b/apps/api/controller/Movie.php @@ -0,0 +1,41 @@ + 'success', + 'code' => 1, + 'data' => $arr + ]); + } +} \ No newline at end of file diff --git a/apps/api/controller/Music.php b/apps/api/controller/Music.php new file mode 100644 index 00000000..8433de4e --- /dev/null +++ b/apps/api/controller/Music.php @@ -0,0 +1,188 @@ + 'success', + 'code' => 1, + 'data' => json_decode($res, true)['data'] + ]); + + } + + /** + * 音乐排行榜 + * @return \think\response\Json + */ + public function rank_list() + { + $res = HttpGet(config("MUSIC_API") . "/rank/list&json=true"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['rank']['list'] + ]); + } + + /** + *排行榜下的音乐列表 + */ + public function rank_info_list() + { + $rankid = intval($_GET ['rankid']); + $url = config("MUSIC_API") . "/rank/info/{$rankid}&json=true"; + $res = HttpGet($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + + } + + /** + * 歌单 + * @return \think\response\Json + */ + public function plist() + { + $res = HttpGet(config("MUSIC_API") . "/plist/index&json=true"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['plist']['list']['info'] + ]); + } + + + /** + * 歌单下的列表 + * @return \think\response\Json + */ + public function plist_list() + { + + $specialid = intval($_GET ['specialid']); + $url = config("MUSIC_API") . "/rank/list/{$specialid}&json=true"; + $res = HttpGet($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['rank']['list'] + ]); + } + + /** + * 歌手分类 + * @return \think\response\Json + */ + public function singer_class() + { + $res = HttpGet(config("MUSIC_API") . "/singer/class&json=true"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['list'] + ]); + } + + + /**分类下面的歌手列表 + * @return \think\response\Json + */ + + public function singer_list() + { + + $classid = intval($_GET ['classid']); + $url = config("MUSIC_API") . "/singer/list/{$classid}&json=true"; + $res = HttpGet($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + + /** + * 歌手信息 + * @return \think\response\Json + */ + public function singer_info() + { + $singerid = intval($_GET ['singerid']); + $url = config("MUSIC_API") . "/singer/info/{$singerid}&json=true"; + $res = mobile_curl($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + /** + * 音乐详情 + * @return \think\response\Json + */ + public function song_info() + { + + $hash = $_GET['hash']; + $url = config("MUSIC_API") . "app/i/getSongInfo.php?cmd=playInfo&hash={$hash}"; + $res = mobile_curl($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + /** + * 带歌词歌曲信息 + * @return \think\response\Json + */ + public function song_info1() + { + $hash = $_GET['hash']; + $url = "http://www.kugou.com/yy/index.php?r=play/getdata&hash={$hash}"; + $res = mobile_curl($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + /** + * 音乐搜索 + * @return \think\response\Json + */ + public function search() + { + $keyword = $_GET['keyword']; + $url = "http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword=" . $keyword . "&page=1&pagesize=20&showtype=1"; + $res = mobile_curl($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } +} \ No newline at end of file diff --git a/apps/api/controller/Nba.php b/apps/api/controller/Nba.php new file mode 100644 index 00000000..0f2e7a3b --- /dev/null +++ b/apps/api/controller/Nba.php @@ -0,0 +1,252 @@ + 'success', + 'code' => 1, + 'data' => json_decode($res, true)['schedule@getList'] + ]); + + } + + + /** + * [live_detail 比赛直播详情信息] + */ + public function live_detail() + { + $schid = (isset($_GET['schid'])) ? $_GET ['schid'] : "1470215"; + $liveid = (isset($_GET['liveid'])) ? $_GET ['liveid'] : "2009587"; + $res = HttpGet("https://nb.3g.qq.com/nba/api/live@getInfo?i_schid={$schid}&i_liveid={$liveid}"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['live@getInfo']['data'] + ]); + } + + + /** + * @return \think\response\Json + * 直播内容 + */ + public function live_content() + { + $schid = (isset($_GET['schid'])) ? $_GET ['schid'] : "1470215"; + $res = HttpGet("https://live.3g.qq.com/g/s?aid=action_api&module=nba&action=broadcast_content%2Cbroadcast_info&sch_id={$schid}"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['broadcast_content']['contentAry'] + ]); + } + + /** + * 球员技术统计 + * @return \think\response\Json + */ + public function technical_statistics() + { + + $schid = (isset($_GET['schid'])) ? $_GET ['schid'] : "1470215"; + $res = HttpGet("https://live.3g.qq.com/g/s?aid=action_api&module=nba&action=live_stat_4_nba%2Cbroadcast_info&sch_id={$schid}&bid=2009605"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['live_stat_4_nba'] + ]); + } + + /** + * @return \think\response\Json + * 球员详情 + */ + public function player_detail() + { + $playerid = (isset($_GET['playerid'])) ? $_GET ['playerid'] : "4130"; + $res = HttpGet("https://live.3g.qq.com/g/s?aid=action_api&module=nba&action=player_detail&playerId={$playerid}&sid="); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['player_detail'] + ]); + + } + + /** + * @return \think\response\Json + * 联盟排名 + */ + public function team_rank() + { + $res = HttpGet("https://matchweb.sports.qq.com/rank/team?columnId=100000&from=NBA"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)[1] + ]); + } + + /** + * @return \think\response\Json + * 球队详情 + */ + public function team_info() + { + $id = (isset($_GET['teamId'])) ? $_GET ['teamId'] : "24"; + $res = HttpGet("https://live.3g.qq.com/g/s?aid=action_api&module=nba&action=team_detail&teamId={$id}&sid="); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['team_detail'] + ]); + + } + //球队赛程 + public function team_schedule(){ + $id = (isset($_GET['teamId'])) ? $_GET ['teamId'] : "24"; + $mouth = (isset($_GET['mouth'])) ? $_GET ['mouth'] : "11"; + $res = HttpGet("https://nb.3g.qq.com/nba/api/schedule@getMonthListByTeam?teamid={$id}&mouth={$mouth}&sid="); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['schedule@getMonthListByTeam']['data'] + ]); + } + + /** + * 球队阵容 + */ + public function Lineup() + { + $id = (isset($_GET['teamId'])) ? $_GET ['teamId'] : "24"; + $res = HttpGet("https://live.3g.qq.com/g/s?aid=action_api&module=nba&action=team_player&teamId={$id}&sid="); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true)['team_player']['players'] + ]); + } + + + /** + * @return \think\response\Json + * 网易NBA新闻列表 + */ + public function new_list() + { + $page = (isset($_GET['page'])) ? $_GET ['page'] : "0"; + $page = $page * 15; + $res = HttpGet("https://3g.163.com/touch/reconstruct/article/list/BD2AQH4Qwangning/{$page}-15.html"); + $arr = json_decode(substr($res, 9, -1), true)['BD2AQH4Qwangning']; + //数据里面有一些直播的新闻数据、需要删除那些数据 + foreach ($arr as $k => $v) { + if (!empty($arr[$k]['liveInfo'])) { + unset($arr[$k]); + } + } + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + } + + /** + * @return \think\response\Json + * 网易NBA新闻详情 + */ + public function news_info() + { + $id = (isset($_GET['docid'])) ? $_GET ['docid'] : "D22DCS5S0005877U"; + $res = HttpGet("http://3g.163.com/touch/article/{$id}/full.html"); + $arr = json_decode(substr($res, 12, -1), true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr[$id] + ]); + } + + /** + * @return \think\response\Json + * 文章评论 + */ + public function news_comments() + { + $id = (isset($_GET['docid'])) ? $_GET ['docid'] : "D22DCS5S0005877U"; + $res = HttpGet("https://comment.news.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/{$id}/comments/newList?offset=0&limit=20&headLimit=1&tailLimit=2&ibc=newswap&showLevelThreshold"); + $arr = json_decode($res, true)['comments']; + $newArr = array(); + foreach ($arr as $k => $v) { + array_push($newArr, $arr[$k]); + } + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $newArr + ]); + } + + + /** + * @return \think\response\Json + * 关于个人的JSON数据 + */ + public function website() + { + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => [ + 'name' => "没有故事的小明同学", + 'job' => "Web开发工程师", + 'icon' => "https://coding.it919.cn/static/images/zixia.jpg", + 'address' => "深圳市南山区科技园", + 'latitude' => "22.549990", + 'longitude' => "113.950660", + 'github' => "https://github.com/ecitlm", + 'blog' => "https://code.it919.cn", + 'mail' => "ecitlm@163.com", + 'Motto' => '我们这一生,要走很远的路,有如水坦途,有荆棘挡道;有簇拥同行,有孤独漫步;有幸福如影,有苦痛袭扰;有迅跑,有疾走,有徘徊,还有回首……正因为走了许多路,经历的无数繁华与苍凉,才在时光的流逝中体会岁月的变迁,让曾经稚嫩的心慢慢地趋于成熟。', + 'music' => [ + 'src' => "https://coding.it919.cn/static/images/lzxs.mp3", + 'author' => "许冠杰", + 'name' => "浪子心声-纯音乐Music", + 'poster' => "https://coding.it919.cn/static/images/lzxs.jpg" + ] + ] + ]); + } + + + /** + * 转发图片 + */ + public function img() + { + $filename = (isset($_GET['imgurl'])) ? $_GET ['imgurl'] : "https://code.it919.cn/img/head.jpg"; + header('content-type: image/jpeg'); + echo file_get_contents($filename); + die(); + + } +} \ No newline at end of file diff --git a/apps/api/controller/News.php b/apps/api/controller/News.php new file mode 100644 index 00000000..bfa323a4 --- /dev/null +++ b/apps/api/controller/News.php @@ -0,0 +1,134 @@ + '你好 IT开发者' + ]); + } + + + /** + * 新闻banner + */ + public function banner() + { + $res = HttpGet(banner_url()); + $arr = json_decode($res, true); + return json($arr['list'][0]); + } + + + /** + * + * 新闻分类 + */ + public function new_list() + { + + + $type = (isset($_REQUEST['type'])) ? intval($_REQUEST['type']) : 0; + $page = (isset($_REQUEST['page'])) ? intval($_REQUEST['page']) : 10; + $data = [ + 'page' => $page, + 'type' =>$type, + ]; + + $validate = Loader::validate('News'); + if(!$validate->check($data)){ + return json([ + 'msg'=>$validate->getError(), + 'code' => 0, + ]); + } + $news_type = \think\Config::get("news")['news_type'][$type]; + if (empty($news_type)) { + return json([ + 'msg' => '请填写正确的请求参数', + 'code' => 0 + ]); + } + $res = HttpGet(new_list_url($news_type,$page)); + $arr = json_decode($res, true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr[$news_type] + ]); + } + + + /** + * 新闻详情 + * @param string $postid + * @return \think\response\Json + */ + public function new_detail($postid = "CLJMJRRL000181KT") + { + $id = (isset($_GET['postid'])) ? $_GET ['postid'] : "CLJMJRRL000181KT"; + $res = HttpGet(new_detail_url($id)); + $arr = json_decode($res, true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr[$id] + ]); + } + + + /** + * 本地新闻 + * @return \think\response\Json + */ + public function local_news() + { + $name = (isset($_GET['name'])) ? $_GET ['name'] : $this->get_ip_address(); + $page = (isset($_GET['page'])) ? intval($_GET ['page']) : 0; + + $res = HttpGet(local_news_url(urlencode($name),$page)); + $arr = json_decode(substr($res, 9, -1), true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr[$name] + ]); + } + + /** + *微信精选 + * + */ + public function wx_select(){ + $ps = (isset($_GET['ps'])) ? intval($_GET ['ps']) : 10; + $jkAPikey="d046cd1f569ed13d951f0258902ef9b2"; + $url="http://v.juhe.cn/weixin/query?key=d046cd1f569ed13d951f0258902ef9b2&ps=".$ps; + $res=HttpGet($url); + return $res; + + + + } + + + /** + * 获取IP地址 + * @return string + */ + public function get_ip_address(){ + $getIp = getRemoteIPAddress(); + $content = file_get_contents("http://api.map.baidu.com/location/ip?ak=enYCQ2yaIIjL8IZfYdA1gi6hK2eqqI2T&ip={$getIp}&coor=bd09ll"); + $json = json_decode($content, true); + $place=$json['content']['address_detail']['province']."_".$json['content']['address_detail']['city']; + return $place; + } + +} diff --git a/apps/api/controller/Picture.php b/apps/api/controller/Picture.php new file mode 100644 index 00000000..a8272860 --- /dev/null +++ b/apps/api/controller/Picture.php @@ -0,0 +1,109 @@ + 'success', + 'code' => 1, + 'data' => $arr + ]); + } + + + public function hua_ban() + { + $url = "http://huaban.com/favorite/beauty?j3ej14y9&max=11".$this->get_random(8)."&limit=20&wfl=1"; + $res = HttpGet($url, true); + $query = json_decode($res, true); + + $arr = array(); + foreach ($query['pins'] as &$k) { + $tmp = array( + 'img' => "http://img.hb.aicdn.com/" . $k['file']['key'], + 'title' => $k['board']['title'], + 'desc' => $k['board']['description'], + 'like' => $k['like_count'], + 'repin_count'=> $k['repin_count'] + ); + array_push($arr, $tmp); + } + + //return json($query['pins']); + + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + + } + + + public function hbmv(){ + $page = (isset($_GET['page'])) ? intval($_GET ['page']) : 1; + $type = (isset($_GET['type'])) ? intval($_GET ['type']) : 34; + $url = "http://www.hbmeinv.com/index.php?m=Content&c=Index&a=gengduolist&p={$page}&catid={$type}"; + $res = HttpGet($url); + + $query = json_decode($res, true); + $arr = array(); + foreach ($query as &$k) { + $tmp = array( + 'title' =>$k['title'], + 'thumb' =>$k['thumb'] + ); + array_push($arr, $tmp); + } + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + } + + + /** + * 生成随机数 + * @param $len + * @return string + * + */ + protected function get_random($len) + { + $chars_array = array( + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", + + ); + $charsLen = count($chars_array) - 1; + + $outputstr = ""; + for ($i=0; $i<$len; $i++) + { + $outputstr .= $chars_array[mt_rand(0, $charsLen)]; + } + return $outputstr; + } + + + +} diff --git a/apps/api/controller/QueryList.php b/apps/api/controller/QueryList.php new file mode 100644 index 00000000..2c61c47e --- /dev/null +++ b/apps/api/controller/QueryList.php @@ -0,0 +1,182 @@ +array("选择器","类型"),.......),【类型】说明:值 "text" ,"html" ,"属性" + * @param string $regRange 【块选择器】:指 先按照规则 选出 几个大块 ,然后再分别再在块里面 进行相关的选择 + * @param string $getHtmlWay 【源码获取方式】指是通过curl抓取源码,还是通过file_get_contents抓取源码 + */ + public function QueryList($page,$regArr,$regRange='',$getHtmlWay="curl",$output_encoding=false) + { + + $this->output_encoding = $output_encoding; + if($this->isURL($page)) + { + $this->pageURL = $page; + if($getHtmlWay=="curl") + { + //为了能获取https:// + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL,$this->pageURL); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); + $this->html = curl_exec($ch); + curl_close($ch); + }else{ + $this->html=file_get_contents($this->pageURL); + } + }else{ + $this->html = $page; + } + + //获取编码格式 + $this->html_encoding = $this->get_encode($this->html); + if ($this->output_encoding){ + $this->html = iconv($this->html_encoding,$this->output_encoding,$this->html); + } + + + if(!empty($regArr)) + { + + $this->regArr = $regArr; + $this->regRange = $regRange; + $this->getList(); + } + + } + public function setQuery($regArr,$regRange='') + { + $this->jsonArr=array(); + $this->regArr = $regArr; + $this->regRange = $regRange; + $this->getList(); + } + private function getList() + { + + $hobj = phpQuery::newDocumentHTML($this->html); + + if(!empty($this->regRange)) + { + $robj = pq($hobj)->find($this->regRange); + + $i=0; + foreach($robj as $item) + { + + while(list($key,$reg_value)=each($this->regArr)) + { + $iobj = pq($item)->find($reg_value[0]); + + switch($reg_value[1]) + { + case 'text': + $this->jsonArr[$i][$key] = trim(pq($iobj)->text()); + break; + case 'html': + $this->jsonArr[$i][$key] = trim(pq($iobj)->html()); + break; + default: + $this->jsonArr[$i][$key] = pq($iobj)->attr($reg_value[1]); + break; + + } + } + //重置数组指针 + reset($this->regArr); + $i++; + } + } + else + { + while(list($key,$reg_value)=each($this->regArr)) + { + $lobj = pq($hobj)->find($reg_value[0]); + + + $i=0; + foreach($lobj as $item) + { + switch($reg_value[1]) + { + case 'text': + $this->jsonArr[$i++][$key] = trim(pq($item)->text()); + break; + case 'html': + $this->jsonArr[$i++][$key] = trim(pq($item)->html()); + break; + default: + $this->jsonArr[$i++][$key] = pq($item)->attr($reg_value[1]); + break; + + } + + + } + + + } + } + } + public function getJSON() + { + return json_encode($this->jsonArr); + } + /** + * 获取文件编码 + * @param $string + * @return string + */ + private function get_encode($string){ + return mb_detect_encoding($string, array('ASCII','GB2312','GBK','UTF-8')); + } + /** + * 递归转换数组值得编码格式 + * @param array $arr + * @param string $to_encoding + * @param string $from_encoding + * @return array + */ + private function array_convert_encoding($arr,$to_encoding,$from_encoding) + { + if(!is_array($arr))return $arr; + foreach ($arr as $key => $value) { + if (is_array($value)) { + $arr[$key] = $this->array_convert_encoding($value,$to_encoding,$from_encoding); + }else{ + $arr[$key] = mb_convert_encoding($value, $to_encoding,$from_encoding); + } + } + return $arr; + } + /** + * 简单的判断一下参数是否为一个URL链接 + * @param string $str + * @return boolean + */ + private function isURL($str) + { + if(preg_match('/^http(s)?:\/\/.+/', $str)) + { + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/apps/api/controller/Splider.php b/apps/api/controller/Splider.php new file mode 100644 index 00000000..b1247e65 --- /dev/null +++ b/apps/api/controller/Splider.php @@ -0,0 +1,72 @@ +find("a"); + foreach ($list as $li) { + $title = pq($li)->attr('title'); + $url = pq($li)->attr('href'); + $img = pq($li)->find('img')->attr('src'); + + $tmp = array( + 'title' => $title, + 'url' => $url, + 'img' => $img + ); + array_push($arr, $tmp); + } + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + + } + + + public function osc(){ + $page = (isset($_GET['page'])) ? intval($_GET ['page']) : 1; + // $id = (isset($_GET['id'])) ? intval($_GET ['id']) : 1; + $url="https://my.oschina.net/u/2921900/home?type=tweet&scope=all&showme=NOTSHOW&p={$page}&temp=1500024889206"; + $res = HttpGet($url); + \phpQuery::newDocumentHTML($res); + $arr = array(); + $list = pq('.photo')->find("img"); + + foreach ($list as $li) { + $img = pq($li)->attr('data-raw-img'); + $tmp = array( + 'img' => $img + ); + array_push($arr, $tmp); + } + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + + } + + + +} diff --git a/apps/api/controller/Video.php b/apps/api/controller/Video.php new file mode 100644 index 00000000..f09add95 --- /dev/null +++ b/apps/api/controller/Video.php @@ -0,0 +1,75 @@ + 'success', + 'code' => 1, + 'data' => $arr + ]); + } + + /** + *视频分类列表 + */ + public function video_type($type = 0, $page = 10) + { + + $type = (isset($_GET['type'])) ? intval($_GET ['type']) : 0; + $page = (isset($_GET['page'])) ? intval($_GET ['page']) : 10; + $video_type = \think\Config::get("news")['video_type'][$type]; + if (empty($video_type)) { + return json([ + 'msg' => '请填写正确的参数请求', + 'code' => 0 + ]); + } + $url = "http://c.m.163.com/nc/video/list/" . $video_type . "/y/" . $page . "-10.html"; + $res = HttpGet($url); + $arr = json_decode($res, true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr[$video_type] + ]); + + } + + /** + * @param string $vid + * @return \think\response\Json + */ + public function video_detail($vid = "VEKKO9TJP") + { + $vid = $_GET['vid']; + if (empty($vid)) { + return json([ + 'msg' => '请填写正确的参数请求', + 'code' => 0 + ]); + }; + $url = "http://3g.163.com/touch/video/detail/" . $vid . ".html"; + $res = HttpGet($url); + $arr = json_decode($res, true); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + + } + +} diff --git a/apps/api/controller/Weather.php b/apps/api/controller/Weather.php new file mode 100644 index 00000000..af4b7df3 --- /dev/null +++ b/apps/api/controller/Weather.php @@ -0,0 +1,38 @@ +get_city(); + } + $res = file_get_contents("http://api.map.baidu.com/telematics/v3/weather?location={$city}&output=json&ak=32da004455c52b48d84a3a484c0dbc99"); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + protected function get_city(){ + $getIp = getRemoteIPAddress(); + $content = file_get_contents("http://api.map.baidu.com/location/ip?ak=enYCQ2yaIIjL8IZfYdA1gi6hK2eqqI2T&ip=120.237.113.106&coor=bd09ll"); + $json = json_decode($content, true); + $place =urlencode($json['content']['address_detail']['city']); + return $place; + } +} \ No newline at end of file diff --git a/apps/api/controller/Web.php b/apps/api/controller/Web.php new file mode 100644 index 00000000..9b56ded4 --- /dev/null +++ b/apps/api/controller/Web.php @@ -0,0 +1,110 @@ +find('.entry-title span')->text(); + $desc = pq($li)->find('.entry-content p')->text(); + $url = pq($li)->find('.entry-title a')->attr('href'); + $date = pq($li)->find('.entry-date')->text(); + $id = intval(preg_replace('/\D/s', '', $url)); + + + $tmp = array( + 'title' => $title, + 'date' => $date, + 'desc' => $desc, + 'daily_id' => $id, + 'url'=>$url + ); + array_push($arr, $tmp); + } + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => $arr + ]); + } + + /** + * 每日开发周报列表 + * @return \think\response\Json + */ + public function every_daily_list() + { + + $daily_id = (isset($_GET['daily_id'])) ? intval($_GET ['daily_id']) : "20170531"; + $url = "http://caibaojian.com/fe-daily-{$daily_id}.html"; + $data = Http_Spider($url); + \phpQuery::newDocumentHTML($data); + $arr = array(); + $list = pq('.feddaily-list li'); + + $every_daily_title = pq('.entry-title a')->text(); + foreach ($list as $li) { + $title = pq($li)->find('.fed-title a')->text(); + $desc = pq($li)->find('.fed-con')->text(); + $url = pq($li)->find('.tlink')->attr('href'); + + $tmp = array( + 'title' => $title, + 'url' => explode("url=", $url)[1], + 'desc' => $desc, + ); + array_push($arr, $tmp); + } + + return json([ + 'msg' => 'success', + 'code' => 1, + 'title' => $every_daily_title, + 'data' => $arr + ]); + } + + + public function frame() + { + $url = "http://orz7qm1c9.bkt.clouddn.com/frame.html"; + $data = Http_Spider($url); + return $data; + + } + + +} diff --git a/apps/api/controller/Zhihu.php b/apps/api/controller/Zhihu.php new file mode 100644 index 00000000..0b184b93 --- /dev/null +++ b/apps/api/controller/Zhihu.php @@ -0,0 +1,74 @@ + 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + /** + * 知乎日报文章详情 + * @param string $id + * @return \think\response\Json + */ + public function news($id=""){ + $id=intval($_GET ['id']); + if(empty($id)){ + return json([ + 'msg' => '参数id不能为空', + 'code' => 0, + ]); + } + $url=config("ZHIHU_DOMAIN")."/news/{$id}"; + $res=HttpGet($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } + + + /** + * 知乎日报短评论 + * @return \think\response\Json + */ + public function new_comment(){ + $id=intval($_GET ['id']); + if(empty($id)){ + return json([ + 'msg' => '参数id不能为空', + 'code' => 0, + ]); + } + + $url=config("ZHIHU_DOMAIN")."/story/{$id}/short-comments"; + $res=HttpGet($url); + return json([ + 'msg' => 'success', + 'code' => 1, + 'data' => json_decode($res, true) + ]); + } +} \ No newline at end of file diff --git a/apps/api/validate/News.php b/apps/api/validate/News.php new file mode 100644 index 00000000..2e3afc3f --- /dev/null +++ b/apps/api/validate/News.php @@ -0,0 +1,25 @@ + 'require|number', + 'type' => 'require|number', + ]; + + protected $message = [ + 'page.require' => '缺少必要参数page', + 'page.number' => 'page参数必须为正整数', + 'type.require' => '缺少必要参数type', + 'type.number' => 'type参数必须为正整数', + + + ]; +} \ No newline at end of file diff --git a/apps/api/validate/Picture.php b/apps/api/validate/Picture.php new file mode 100644 index 00000000..45a8c84c --- /dev/null +++ b/apps/api/validate/Picture.php @@ -0,0 +1,22 @@ + 'require|number', + ]; + + protected $message = [ + 'page.require' => '缺少必要参数page', + 'page.number' => 'page参数必须为正整数', + + + ]; +} \ No newline at end of file diff --git a/apps/api/view/Index/index.html b/apps/api/view/Index/index.html new file mode 100644 index 00000000..eb828610 --- /dev/null +++ b/apps/api/view/Index/index.html @@ -0,0 +1,35 @@ + + + + 欢迎进入IT开发者云平台! + + + + + + Document + + +
+

欢迎使用

+ +
+ + diff --git a/apps/command.php b/apps/command.php new file mode 100644 index 00000000..3f91003f --- /dev/null +++ b/apps/command.php @@ -0,0 +1,12 @@ + +// +---------------------------------------------------------------------- + +return []; \ No newline at end of file diff --git a/apps/common.php b/apps/common.php new file mode 100644 index 00000000..b014c474 --- /dev/null +++ b/apps/common.php @@ -0,0 +1,61 @@ + +// +---------------------------------------------------------------------- + +// 应用公共文件 + +/* + * +* @param unknown $url +*/ +function HttpGet($url,$status=false){ + $curl = curl_init (); + curl_setopt ( $curl, CURLOPT_URL, $url); + curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, true ); + curl_setopt ( $curl, CURLOPT_TIMEOUT,1000 ); + curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'); + //curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4'); + if($status){ + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept:application','X-Request:JSON','X-Requested-With:XMLHttpRequest')); + } + + //如果用的协议是https则打开鞋面这个注释 + curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + + $res = curl_exec ( $curl ); + curl_close ( $curl ); + return $res; +} + + + + + +function Http_Spider($url) { + $ch = curl_init(); + $ip = '115.239.211.112'; //百度蜘蛛 + $timeout = 15; + curl_setopt($ch,CURLOPT_URL,$url); + curl_setopt($ch,CURLOPT_TIMEOUT, $timeout); + //伪造百度蜘蛛IP + curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-FORWARDED-FOR:'.$ip.'','CLIENT-IP:'.$ip.'')); + //伪造百度蜘蛛头部 + curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"); + curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); + curl_setopt($ch,CURLOPT_HEADER,0); + curl_setopt ($ch, CURLOPT_REFERER, "http://www.baidu.com/"); //构造来路 + curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); + $content = curl_exec($ch); + return $content; +} + +error_reporting(E_ERROR | E_WARNING | E_PARSE); \ No newline at end of file diff --git a/apps/config.php b/apps/config.php new file mode 100644 index 00000000..2815a726 --- /dev/null +++ b/apps/config.php @@ -0,0 +1,240 @@ + +// +---------------------------------------------------------------------- + +return [ + // +---------------------------------------------------------------------- + // | 应用设置 + // +---------------------------------------------------------------------- + + + // 应用调试模式 + 'app_debug' => false, + // 应用Trace + 'app_trace' => false, + // 应用模式状态 + 'app_status' => '', + // 是否支持多模块 + 'app_multi_module' => true, + // 入口自动绑定模块 + 'auto_bind_module' => false, + // 注册的根命名空间 + 'root_namespace' => [], + // 扩展函数文件 + 'extra_file_list' => [THINK_PATH . 'helper' . EXT], + // 默认输出类型 + 'default_return_type' => 'html', + // 默认AJAX 数据返回格式,可选json xml ... + 'default_ajax_return' => 'json', + // 默认JSONP格式返回的处理方法 + 'default_jsonp_handler' => 'jsonpReturn', + // 默认JSONP处理方法 + 'var_jsonp_handler' => 'callback', + // 默认时区 + 'default_timezone' => 'PRC', + // 是否开启多语言 + 'lang_switch_on' => false, + // 默认全局过滤方法 用逗号分隔多个 + 'default_filter' => '', + // 默认语言 + 'default_lang' => 'zh-cn', + // 应用类库后缀 + 'class_suffix' => false, + // 控制器类后缀 + 'controller_suffix' => false, + + // +---------------------------------------------------------------------- + // | 模块设置 + // +---------------------------------------------------------------------- + // 允许访问的模块列表 + 'MODULE_ALLOW_LIST' =>array('index','api','wx'), + + // 默认模块名 + 'default_module' => 'api', + // 禁止访问模块 + 'deny_module_list' => ['common'], + // 默认控制器名 + 'default_controller' => 'Index', + // 默认操作名 + 'default_action' => 'index', + // 默认验证器 + 'default_validate' => '', + // 默认的空控制器名 + 'empty_controller' => 'Error', + // 操作方法后缀 + 'action_suffix' => '', + // 自动搜索控制器 + 'controller_auto_search' => false, + + // +---------------------------------------------------------------------- + // | URL设置 + // +---------------------------------------------------------------------- + + // PATHINFO变量名 用于兼容模式 + 'var_pathinfo' => 's', + // 兼容PATH_INFO获取 + 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'], + // pathinfo分隔符 + 'pathinfo_depr' => '/', + // URL伪静态后缀 + 'url_html_suffix' => 'html', + // URL普通方式参数 用于自动生成 + 'url_common_param' => false, + // URL参数方式 0 按名称成对解析 1 按顺序解析 + 'url_param_type' => 0, + // 是否开启路由 + 'url_route_on' => true, + // 路由使用完整匹配 + 'route_complete_match' => false, + // 路由配置文件(支持配置多个) + 'route_config_file' => ['route'], + // 是否强制使用路由 + 'url_route_must' => false, + // 域名部署 + 'url_domain_deploy' => false, + // 域名根,如thinkphp.cn + 'url_domain_root' => '', + // 是否自动转换URL中的控制器和操作名 + 'url_convert' => true, + // 默认的访问控制器层 + 'url_controller_layer' => 'controller', + // 表单请求类型伪装变量 + 'var_method' => '_method', + // 表单ajax伪装变量 + 'var_ajax' => '_ajax', + // 表单pjax伪装变量 + 'var_pjax' => '_pjax', + // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 + 'request_cache' => false, + // 请求缓存有效期 + 'request_cache_expire' => null, + + // +---------------------------------------------------------------------- + // | 模板设置 + // +---------------------------------------------------------------------- + + 'template' => [ + // 模板引擎类型 支持 php think 支持扩展 + 'type' => 'Think', + // 模板路径 + 'view_path' => '', + // 模板后缀 + 'view_suffix' => 'html', + // 模板文件名分隔符 + 'view_depr' => DS, + // 模板引擎普通标签开始标记 + 'tpl_begin' => '{', + // 模板引擎普通标签结束标记 + 'tpl_end' => '}', + // 标签库标签开始标记 + 'taglib_begin' => '{', + // 标签库标签结束标记 + 'taglib_end' => '}', + ], + + // 视图输出字符串内容替换 + 'view_replace_str' => [], + // 默认跳转页面对应的模板文件 + 'dispatch_success_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl', + 'dispatch_error_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl', + + // +---------------------------------------------------------------------- + // | 异常及错误设置 + // +---------------------------------------------------------------------- + + // 异常页面的模板文件 + 'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl', + + // 错误显示信息,非调试模式有效 + 'error_message' => '页面错误!请稍后再试~', + // 显示错误信息 + 'show_error_msg' => false, + // 异常处理handle类 留空使用 \think\exception\Handle + 'exception_handle' => '', + + // +---------------------------------------------------------------------- + // | 日志设置 + // +---------------------------------------------------------------------- + + 'log' => [ + // 日志记录方式,内置 file socket 支持扩展 + 'type' => 'File', + // 日志保存目录 + 'path' => LOG_PATH, + // 日志记录级别 + 'level' => [], + ], + + // +---------------------------------------------------------------------- + // | Trace设置 开启 app_trace 后 有效 + // +---------------------------------------------------------------------- + 'trace' => [ + // 内置Html Console 支持扩展 + 'type' => 'Html', + ], + + // +---------------------------------------------------------------------- + // | 缓存设置 + // +---------------------------------------------------------------------- + + 'cache' => [ + // 驱动方式 + 'type' => 'File', + // 缓存保存目录 + 'path' => CACHE_PATH, + // 缓存前缀 + 'prefix' => '', + // 缓存有效期 0表示永久缓存 + 'expire' => 0, + ], + + // +---------------------------------------------------------------------- + // | 会话设置 + // +---------------------------------------------------------------------- + + 'session' => [ + 'id' => '', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // SESSION 前缀 + 'prefix' => 'think', + // 驱动方式 支持redis memcache memcached + 'type' => '', + // 是否自动开启 SESSION + 'auto_start' => true, + ], + + // +---------------------------------------------------------------------- + // | Cookie设置 + // +---------------------------------------------------------------------- + 'cookie' => [ + // cookie 名称前缀 + 'prefix' => '', + // cookie 保存时间 + 'expire' => 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => '', + // 是否使用 setcookie + 'setcookie' => true, + ], + + //分页配置 + 'paginate' => [ + 'type' => 'bootstrap', + 'var_page' => 'page', + 'list_rows' => 15, + ], +]; diff --git a/apps/database.php b/apps/database.php new file mode 100644 index 00000000..9079069d --- /dev/null +++ b/apps/database.php @@ -0,0 +1,51 @@ + +// +---------------------------------------------------------------------- + +return [ + // 数据库类型 + 'type' => 'mysql', + // 服务器地址 + 'hostname' => '127.0.0.1', + // 数据库名 + 'database' => '', + // 用户名 + 'username' => 'root', + // 密码 + 'password' => '', + // 端口 + 'hostport' => '', + // 连接dsn + 'dsn' => '', + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => 'utf8', + // 数据库表前缀 + 'prefix' => '', + // 数据库调试模式 + 'debug' => true, + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 数据集返回类型 array 数组 collection Collection对象 + 'resultset_type' => 'array', + // 是否自动写入时间戳字段 + 'auto_timestamp' => false, + // 是否需要进行SQL性能分析 + 'sql_explain' => false, +]; diff --git a/apps/extra/news.php b/apps/extra/news.php new file mode 100644 index 00000000..71051590 --- /dev/null +++ b/apps/extra/news.php @@ -0,0 +1,34 @@ + array( + //头条 + 0 => "T1348647909107", + //军事 + 1 => "T1348648141035", + //娱乐 + 2 => "T1348648517839", + //体育 + 3 => "T1348649079062", + //科技 + 4 => "T1348649580692", + //艺术 + 5 => "T1441074311424", + //教育 + 6 => "T1348654225495", + //要闻 + 7 =>"T1467284926140" + + ), + 'video_type' => array( + //精品视频 + 0 => "VAP4BGTVD", + //搞笑视频 + 1 => "VAP4BFE3U", + //美女视频 + 2 => "VAP4BG6DL", + //体育视频 + 3 => "VBF8F2E94", + // 新闻现场 + 4 => "VAV3H6JSN" + ) +); \ No newline at end of file diff --git a/apps/extra/queue.php b/apps/extra/queue.php new file mode 100644 index 00000000..41fd544f --- /dev/null +++ b/apps/extra/queue.php @@ -0,0 +1,14 @@ + +// +---------------------------------------------------------------------- + +return [ + 'connector' => 'Sync' +]; \ No newline at end of file diff --git a/apps/news.php b/apps/news.php new file mode 100644 index 00000000..ae29966a --- /dev/null +++ b/apps/news.php @@ -0,0 +1,31 @@ + array( + //头条 + 0 => "T1348647909107", + //军事 + 1 => "T1348648141035", + //娱乐 + 2 => "T1348648517839", + //体育 + 3 => "T1348649079062", + //科技 + 4 => "T1348649580692", + //艺术 + 5 => "T1441074311424", + //教育 + 6 => "T1348654225495" + ), + 'video_type' => array( + //精品视频 + 0 => "VAP4BGTVD", + //搞笑视频 + 1 => "VAP4BFE3U", + //美女视频 + 2 => "VAP4BG6DL", + //体育视频 + 3 => "VBF8F2E94", + // 新闻现场 + 4 => "VAV3H6JSN" + ) +); \ No newline at end of file diff --git a/apps/route.php b/apps/route.php new file mode 100644 index 00000000..f648d3b4 --- /dev/null +++ b/apps/route.php @@ -0,0 +1,21 @@ + +// +---------------------------------------------------------------------- + +return [ + '__pattern__' => [ + 'name' => '\w+', + ], + '[hello]' => [ + ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']], + ':name' => ['index/hello', ['method' => 'post']], + ], + +]; diff --git a/apps/tags.php b/apps/tags.php new file mode 100644 index 00000000..e213e0aa --- /dev/null +++ b/apps/tags.php @@ -0,0 +1,28 @@ + +// +---------------------------------------------------------------------- + +// 应用行为扩展定义文件 +return [ + // 应用初始化 + 'app_init' => [], + // 应用开始 + 'app_begin' => [], + // 模块初始化 + 'module_init' => [], + // 操作开始执行 + 'action_begin' => [], + // 视图内容过滤 + 'view_filter' => [], + // 日志写入 + 'log_write' => [], + // 应用结束 + 'app_end' => [], +]; diff --git a/bao_images.php b/bao_images.php new file mode 100644 index 00000000..082fec95 --- /dev/null +++ b/bao_images.php @@ -0,0 +1,17 @@ + read())) + { + if(in_array(strtolower(strrchr($image,".")),$image_type)) + $image_array[] = $image; + } + $dh -> close(); + $key = array_rand($image_array); + return $image_array[$key]; +} +?> \ No newline at end of file diff --git a/bd_token.txt b/bd_token.txt new file mode 100644 index 00000000..8da64479 --- /dev/null +++ b/bd_token.txt @@ -0,0 +1 @@ +{"error":"invalid_client","error_description":"unknown client id","_time":1506449628} \ No newline at end of file diff --git a/bing_images.php b/bing_images.php new file mode 100644 index 00000000..0e5d5da9 --- /dev/null +++ b/bing_images.php @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/contact.html b/contact.html new file mode 100644 index 00000000..00955b30 --- /dev/null +++ b/contact.html @@ -0,0 +1,116 @@ + + + + + + + + + + + + +Dsign - Minimal portfolio Bootstrap template + + + + + + + + + + + + + + + + + +
+
+
+
+
+

I am honest, discreet and always focus on your goals.
+ If you are looking for a experienced designer, just leave me a message and I'll contact you soon.

+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/css/animate.min.css b/css/animate.min.css new file mode 100644 index 00000000..78c0a38c --- /dev/null +++ b/css/animate.min.css @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2015 Daniel Eden +*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{100%,20%,53%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{100%,20%,53%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{100%,50%,from{opacity:1}25%,75%{opacity:0}}@keyframes flash{100%,50%,from{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{100%,from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{100%,from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{100%,11.1%,from{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{100%,11.1%,from{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{100%,20%,40%,60%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{100%,20%,40%,60%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}100%{opacity:1}}@keyframes fadeIn{from{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}100%{opacity:0}}@keyframes fadeOut{from{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/css/bootstrap.min.css b/css/bootstrap.min.css new file mode 100644 index 00000000..9689ee56 --- /dev/null +++ b/css/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.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}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.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}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/css/flexslider.css b/css/flexslider.css new file mode 100644 index 00000000..2aaafedf --- /dev/null +++ b/css/flexslider.css @@ -0,0 +1,262 @@ +/* + * jQuery FlexSlider v2.5.0 + * http://www.woothemes.com/flexslider/ + * + * Copyright 2012 WooThemes + * Free to use under the GPLv2 and later license. + * http://www.gnu.org/licenses/gpl-2.0.html + * + * Contributing author: Tyler Smith (@mbmufffin) + * + */ +/* ==================================================================================================================== + * FONT-FACE + * ====================================================================================================================*/ +@font-face { + font-family: 'flexslider-icon'; + src: url('fonts/flexslider-icon.eot'); + src: url('fonts/flexslider-icon.eot?#iefix') format('embedded-opentype'), url('fonts/flexslider-icon.woff') format('woff'), url('fonts/flexslider-icon.ttf') format('truetype'), url('fonts/flexslider-icon.svg#flexslider-icon') format('svg'); + font-weight: normal; + font-style: normal; +} +/* ==================================================================================================================== + * RESETS + * ====================================================================================================================*/ +.flex-container a:hover, +.flex-slider a:hover, +.flex-container a:focus, +.flex-slider a:focus { + outline: none; +} +.slides, +.slides > li, +.flex-control-nav, +.flex-direction-nav { + margin: 0; + padding: 0; + list-style: none; +} +.flex-pauseplay span { + text-transform: capitalize; +} +/* ==================================================================================================================== + * BASE STYLES + * ====================================================================================================================*/ +.flexslider { + margin: 0; + padding: 0; +} +.flexslider .slides > li { + display: none; + -webkit-backface-visibility: hidden; +} +.flexslider .slides img { + width: 100%; + display: block; +} +.flexslider .slides:after { + content: "\0020"; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +html[xmlns] .flexslider .slides { + display: block; +} +* html .flexslider .slides { + height: 1%; +} +.no-js .flexslider .slides > li:first-child { + display: block; +} +/* ==================================================================================================================== + * DEFAULT THEME + * ====================================================================================================================*/ +.flexslider { + position: relative; + zoom: 1; +} +.flexslider .slides { + zoom: 1; +} +.flexslider .slides img { + height: auto; +} +.flex-viewport { + max-height: 2000px; + -webkit-transition: all 1s ease; + -moz-transition: all 1s ease; + -ms-transition: all 1s ease; + -o-transition: all 1s ease; + transition: all 1s ease; +} +.loading .flex-viewport { + max-height: 300px; +} +.carousel li { + margin-right: 5px; +} +.flex-direction-nav { + *height: 0; +} +.flex-direction-nav a { + text-decoration: none; + display: block; + width: 40px; + height: 40px; + margin: -20px 0 0; + position: absolute; + top: 50%; + z-index: 10; + overflow: hidden; + opacity: 0; + cursor: pointer; + color: rgba(0, 0, 0, 0.8); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.flex-direction-nav a:before { + font-family: "flexslider-icon"; + font-size: 40px; + display: inline-block; + content: '\f001'; + color: rgba(0, 0, 0, 0.8); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); +} +.flex-direction-nav a.flex-next:before { + content: '\f002'; +} +.flex-direction-nav .flex-prev { + left: -50px; +} +.flex-direction-nav .flex-next { + right: -50px; + text-align: right; +} +.flexslider:hover .flex-direction-nav .flex-prev { + opacity: 0.7; + left: 10px; +} +.flexslider:hover .flex-direction-nav .flex-prev:hover { + opacity: 1; +} +.flexslider:hover .flex-direction-nav .flex-next { + opacity: 0.7; + right: 10px; +} +.flexslider:hover .flex-direction-nav .flex-next:hover { + opacity: 1; +} +.flex-direction-nav .flex-disabled { + opacity: 0!important; + filter: alpha(opacity=0); + cursor: default; +} +.flex-pauseplay a { + display: block; + width: 20px; + height: 20px; + position: absolute; + bottom: 5px; + left: 10px; + opacity: 0.8; + z-index: 10; + overflow: hidden; + cursor: pointer; + color: #000; +} +.flex-pauseplay a:before { + font-family: "flexslider-icon"; + font-size: 20px; + display: inline-block; + content: '\f004'; +} +.flex-pauseplay a:hover { + opacity: 1; +} +.flex-pauseplay a.flex-play:before { + content: '\f003'; +} +.flex-control-nav { + width: 50%; + position: absolute; + bottom: 100px; + right: 0; + text-align: center; + z-index: 100; +} +.flex-control-nav li { + margin: 0 6px; + display: inline-block; + zoom: 1; + *display: inline; +} +.flex-control-paging li a { + width: 11px; + height: 11px; + display: block; + background: #fff; + background: rgba(255,255,255, 0.2); + cursor: pointer; + text-indent: -9999px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; +} +.flex-control-paging li a:hover { + background: #fff; + background: rgba(255,255,255, 1); +} +.flex-control-paging li a.flex-active { + background: #fff; + background: rgba(255,255,255, 1); + cursor: default; +} +.flex-control-thumbs { + margin: 5px 0 0; + position: static; + overflow: hidden; +} +.flex-control-thumbs li { + width: 25%; + float: left; + margin: 0; +} +.flex-control-thumbs img { + width: 100%; + height: auto; + display: block; + opacity: .7; + cursor: pointer; + -webkit-transition: all 1s ease; + -moz-transition: all 1s ease; + -ms-transition: all 1s ease; + -o-transition: all 1s ease; + transition: all 1s ease; +} +.flex-control-thumbs img:hover { + opacity: 1; +} +.flex-control-thumbs .flex-active { + opacity: 1; + cursor: default; +} +/* ==================================================================================================================== + * RESPONSIVE + * ====================================================================================================================*/ +@media screen and (max-width: 860px) { + .flex-direction-nav .flex-prev { + opacity: 1; + left: 10px; + } + .flex-direction-nav .flex-next { + opacity: 1; + right: 10px; + } +} diff --git a/css/font-icon.css b/css/font-icon.css new file mode 100644 index 00000000..8f7ef170 --- /dev/null +++ b/css/font-icon.css @@ -0,0 +1,318 @@ +/* ========================================================================== + Font Icon (http://www.elegantthemes.com/blog/freebie-of-the-week/free-line-style-icons) +========================================================================== */ +@font-face { + font-family: "elegant-theme-line"; + src: url('../fonts/elegant-theme-line.ttf?1439850014') format('truetype'), url('../fonts/elegant-theme-line.eot?1439850014') format('embedded-opentype'), url('../fonts/elegant-theme-line.svg?1439850014') format('svg'), url('../fonts/elegant-theme-line.woff?1439850014') format('woff'); } +.icon { + font-family: 'elegant-theme-line'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.icon-mobile:before { + content: "\e000"; } + +.icon-laptop:before { + content: "\e001"; } + +.icon-desktop:before { + content: "\e002"; } + +.icon-tablet:before { + content: "\e003"; } + +.icon-phone:before { + content: "\e004"; } + +.icon-document:before { + content: "\e005"; } + +.icon-documents:before { + content: "\e006"; } + +.icon-search:before { + content: "\e007"; } + +.icon-clipboard:before { + content: "\e008"; } + +.icon-newspaper:before { + content: "\e009"; } + +.icon-notebook:before { + content: "\e00a"; } + +.icon-book-open:before { + content: "\e00b"; } + +.icon-browser:before { + content: "\e00c"; } + +.icon-calendar:before { + content: "\e00d"; } + +.icon-presentation:before { + content: "\e00e"; } + +.icon-picture:before { + content: "\e00f"; } + +.icon-pictures:before { + content: "\e010"; } + +.icon-video:before { + content: "\e011"; } + +.icon-camera:before { + content: "\e012"; } + +.icon-printer:before { + content: "\e013"; } + +.icon-toolbox:before { + content: "\e014"; } + +.icon-briefcase:before { + content: "\e015"; } + +.icon-wallet:before { + content: "\e016"; } + +.icon-gift:before { + content: "\e017"; } + +.icon-bargraph:before { + content: "\e018"; } + +.icon-grid:before { + content: "\e019"; } + +.icon-expand:before { + content: "\e01a"; } + +.icon-focus:before { + content: "\e01b"; } + +.icon-edit:before { + content: "\e01c"; } + +.icon-adjustments:before { + content: "\e01d"; } + +.icon-ribbon:before { + content: "\e01e"; } + +.icon-hourglass:before { + content: "\e01f"; } + +.icon-lock:before { + content: "\e020"; } + +.icon-megaphone:before { + content: "\e021"; } + +.icon-shield:before { + content: "\e022"; } + +.icon-trophy:before { + content: "\e023"; } + +.icon-flag:before { + content: "\e024"; } + +.icon-map:before { + content: "\e025"; } + +.icon-puzzle:before { + content: "\e026"; } + +.icon-basket:before { + content: "\e027"; } + +.icon-envelope:before { + content: "\e028"; } + +.icon-streetsign:before { + content: "\e029"; } + +.icon-telescope:before { + content: "\e02a"; } + +.icon-gears:before { + content: "\e02b"; } + +.icon-key:before { + content: "\e02c"; } + +.icon-paperclip:before { + content: "\e02d"; } + +.icon-attachment:before { + content: "\e02e"; } + +.icon-pricetags:before { + content: "\e02f"; } + +.icon-lightbulb:before { + content: "\e030"; } + +.icon-layers:before { + content: "\e031"; } + +.icon-pencil:before { + content: "\e032"; } + +.icon-tools:before { + content: "\e033"; } + +.icon-tools-2:before { + content: "\e034"; } + +.icon-scissors:before { + content: "\e035"; } + +.icon-paintbrush:before { + content: "\e036"; } + +.icon-magnifying-glass:before { + content: "\e037"; } + +.icon-circle-compass:before { + content: "\e038"; } + +.icon-linegraph:before { + content: "\e039"; } + +.icon-mic:before { + content: "\e03a"; } + +.icon-strategy:before { + content: "\e03b"; } + +.icon-beaker:before { + content: "\e03c"; } + +.icon-caution:before { + content: "\e03d"; } + +.icon-recycle:before { + content: "\e03e"; } + +.icon-anchor:before { + content: "\e03f"; } + +.icon-profile-male:before { + content: "\e040"; } + + +.icon-profile-female:before { + content: "\e041"; } + +.icon-bike:before { + content: "\e042"; } + +.icon-wine:before { + content: "\e043"; } + +.icon-hotairballoon:before { + content: "\e044"; } + +.icon-globe:before { + content: "\e045"; } + +.icon-genius:before { + content: "\e046"; } + +.icon-map-pin:before { + content: "\e047"; } + +.icon-dial:before { + content: "\e048"; } + +.icon-chat:before { + content: "\e049"; } + +.icon-heart:before { + content: "\e04a"; } + +.icon-cloud:before { + content: "\e04b"; } + +.icon-upload:before { + content: "\e04c"; } + +.icon-download:before { + content: "\e04d"; } + +.icon-target:before { + content: "\e04e"; } + +.icon-hazardous:before { + content: "\e04f"; } + +.icon-piechart:before { + content: "\e050"; } + +.icon-speedometer:before { + content: "\e051"; } + +.icon-global:before { + content: "\e052"; } + +.icon-compass:before { + content: "\e053"; } + +.icon-lifesaver:before { + content: "\e054"; } + +.icon-clock:before { + content: "\e055"; } + +.icon-aperture:before { + content: "\e056"; } + +.icon-quote:before { + content: "\e057"; } + +.icon-scope:before { + content: "\e058"; } + +.icon-alarmclock:before { + content: "\e059"; } + +.icon-refresh:before { + content: "\e05a"; } + +.icon-happy:before { + content: "\e05b"; } + +.icon-sad:before { + content: "\e05c"; } + +.icon-facebook:before { + content: "\e05d"; } + +.icon-twitter:before { + content: "\e05e"; } + +.icon-googleplus:before { + content: "\e05f"; } + +.icon-rss:before { + content: "\e060"; } + +.icon-tumblr:before { + content: "\e061"; } + +.icon-linkedin:before { + content: "\e062"; } + +.icon-dribbble:before { + content: "\e063"; } diff --git a/css/jquery.fancybox.css b/css/jquery.fancybox.css new file mode 100644 index 00000000..fc0ba3e2 --- /dev/null +++ b/css/jquery.fancybox.css @@ -0,0 +1,274 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +.fancybox-wrap, +.fancybox-skin, +.fancybox-outer, +.fancybox-inner, +.fancybox-image, +.fancybox-wrap iframe, +.fancybox-wrap object, +.fancybox-nav, +.fancybox-nav span, +.fancybox-tmp +{ + padding: 0; + margin: 0; + border: 0; + outline: none; + vertical-align: top; +} + +.fancybox-wrap { + position: absolute; + top: 0; + left: 0; + z-index: 8020; +} + +.fancybox-skin { + position: relative; + background: #f9f9f9; + color: #444; + text-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.fancybox-opened { + z-index: 8030; +} + +.fancybox-opened .fancybox-skin { + -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); +} + +.fancybox-outer, .fancybox-inner { + position: relative; +} + +.fancybox-inner { + overflow: hidden; +} + +.fancybox-type-iframe .fancybox-inner { + -webkit-overflow-scrolling: touch; +} + +.fancybox-error { + color: #444; + font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + margin: 0; + padding: 15px; + white-space: nowrap; +} + +.fancybox-image, .fancybox-iframe { + display: block; + width: 100%; + height: 100%; +} + +.fancybox-image { + max-width: 100%; + max-height: 100%; +} + +#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('../images/fancybox_sprite.png'); +} + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + margin-top: -22px; + margin-left: -22px; + background-position: 0 -108px; + opacity: 0.8; + cursor: pointer; + z-index: 8060; +} + +#fancybox-loading div { + width: 44px; + height: 44px; + background: url('../images/fancybox_loading.gif') center center no-repeat; +} + +.fancybox-close { + position: absolute; + top: -18px; + right: -18px; + width: 36px; + height: 36px; + cursor: pointer; + z-index: 8040; +} + +.fancybox-nav { + position: absolute; + top: 0; + width: 40%; + height: 100%; + cursor: pointer; + text-decoration: none; + background: transparent url('../images/blank.gif'); /* helps IE */ + -webkit-tap-highlight-color: rgba(0,0,0,0); + z-index: 8040; +} + +.fancybox-prev { + left: 0; +} + +.fancybox-next { + right: 0; +} + +.fancybox-nav span { + position: absolute; + top: 50%; + width: 36px; + height: 34px; + margin-top: -18px; + cursor: pointer; + z-index: 8040; + visibility: hidden; +} + +.fancybox-prev span { + left: 10px; + background-position: 0 -36px; +} + +.fancybox-next span { + right: 10px; + background-position: 0 -72px; +} + +.fancybox-nav:hover span { + visibility: visible; +} + +.fancybox-tmp { + position: absolute; + top: -99999px; + left: -99999px; + visibility: hidden; + max-width: 99999px; + max-height: 99999px; + overflow: visible !important; +} + +/* Overlay helper */ + +.fancybox-lock { + overflow: hidden !important; + width: auto; +} + +.fancybox-lock body { + overflow: hidden !important; +} + +.fancybox-lock-test { + overflow-y: hidden !important; +} + +.fancybox-overlay { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + display: none; + z-index: 8010; + background: url('../images/fancybox_overlay.png'); +} + +.fancybox-overlay-fixed { + position: fixed; + bottom: 0; + right: 0; +} + +.fancybox-lock .fancybox-overlay { + overflow: auto; + overflow-y: scroll; +} + +/* Title helper */ + +.fancybox-title { + visibility: hidden; + font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + position: relative; + text-shadow: none; + z-index: 8050; +} + +.fancybox-opened .fancybox-title { + visibility: visible; +} + +.fancybox-title-float-wrap { + position: absolute; + bottom: 0; + right: 50%; + margin-bottom: -35px; + z-index: 8050; + text-align: center; +} + +.fancybox-title-float-wrap .child { + display: inline-block; + margin-right: -100%; + padding: 2px 20px; + background: transparent; /* Fallback for web browsers that doesn't support RGBa */ + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; + text-shadow: 0 1px 2px #222; + color: #FFF; + font-weight: bold; + line-height: 24px; + white-space: nowrap; +} + +.fancybox-title-outside-wrap { + position: relative; + margin-top: 10px; + color: #fff; +} + +.fancybox-title-inside-wrap { + padding-top: 10px; +} + +.fancybox-title-over-wrap { + position: absolute; + bottom: 0; + left: 0; + color: #fff; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, .8); +} + +/*Retina graphics!*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5){ + + #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('../images/fancybox_sprite@2x.png'); + background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ + } + + #fancybox-loading div { + background-image: url('../images/fancybox_loading@2x.gif'); + background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ + } +} \ No newline at end of file diff --git a/css/main.css b/css/main.css new file mode 100644 index 00000000..55d0901c --- /dev/null +++ b/css/main.css @@ -0,0 +1,567 @@ + + +/* ------------------------------------------------------------------------------ + Typography +-------------------------------------------------------------------------------*/ + +@import url(https://fonts.googleapis.com/css?family=Open%20Sans:300,400,500,600,700); +p { + font-size: 14px; + line-height: 22.4px; + color: #6c7279; +} +h1 { + font-size: 65px; + color: #2d3033; +} +h2 { + font-size: 40px; + color: #2d3033; +} +h3 { + font-size: 28px; + color: #2d3033; + font-weight: 300; +} +h4 { + font-size: 22px; + color: #2d3033; + font-weight: 400; + +} +h5 { + font-size: 14px; + color: #2d3033; + + font-weight: 700; +} +.btn { + background-color: #3bc492; + color: #fff; + font-size: 13px; + font-weight: 600; + letter-spacing: 5px; + border: 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + display: inline-block; + text-transform: uppercase; +} +.btn:hover, .btn:focus { + background-color: #3d3d3d; + color: #fff; +} +.btn-large { + padding: 15px 40px; +} +/* ------------------------------------------------------------------------------ + Global Styles +-------------------------------------------------------------------------------*/ +a { + color: #e84545; +} +a:hover, a:focus { + text-decoration: none; + -moz-transition: background-color, color, 0.3s; + -o-transition: background-color, color, 0.3s; + -webkit-transition: background-color, color, 0.3s; + transition: background-color, color, 0.3s; +} +body { + font-family: "Open Sans"; + font-weight: 400; + color: #fff; +} +ul, ol { + margin: 0; + padding: 0; +} +ul li { + list-style: none; +} +.section { + padding: 50px 0; +} +.no-padding { + padding: 0; +} +.no-gutter [class*=col-] { + padding-right: 0; + padding-left: 0; +} +.copyrights{ + text-indent:-9999px; + height:0; + line-height:0; + font-size:0; + overflow:hidden; +} +/* ------------------------------------------------------------------------------ + Header +-------------------------------------------------------------------------------*/ +#header { + position: fixed; + width: 100%; + z-index: 999; +} +#header .header-content { + margin: 0 auto; + padding: 60px 10%; + width: 100%; + -moz-transition: padding 0.3s; + -o-transition: padding 0.3s; + -webkit-transition: padding 0.3s; + transition: padding 0.3s; +} +#header .logo { + float: left; +} +#header.fixed { + background-color: rgba(255, 255, 255, 1); +} +#header.fixed .header-content { + border-bottom: 0; + padding: 25px 10%; +} +#header.fixed .nav-toggle { + top: 18px; +} +.navigation.open { + opacity: 0.9; + visibility: visible; + -moz-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; +} +.navigation { + float: right; +} +.navigation li { + display: inline-block; +} +.navigation a { + color: rgba(0, 0, 0, 1); + font-size: 19px; + font-weight: 700; + margin-left: 40px; + letter-spacing: -1px; + +} +.navigation a:hover, .navigation a.active { + color: #000; +} +.nav-toggle { + display: none; + height: 44px; + overflow: hidden; + position: fixed; + right: 5%; + text-indent: 100%; + top: 32px; + white-space: nowrap; + width: 44px; + z-index: 99999; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} +.nav-toggle:before, .nav-toggle:after { + border-radius: 50%; + content: ""; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + -moz-transform: translateZ(0); + -ms-transform: translateZ(0); + -webkit-transform: translateZ(0); + transform: translateZ(0); + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + -webkit-transition-property: -webkit-transform; + transition-property: transform; +} +.nav-toggle:before { + background-color: #e84545; + -moz-transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transform: scale(1); + -moz-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + transition-duration: 0.3s; +} +.nav-toggle:after { + background-color: #e84545; + -moz-transform: scale(0); + -ms-transform: scale(0); + -webkit-transform: scale(0); + transform: scale(0); + -moz-transition-duration: 0s; + -o-transition-duration: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; +} +.nav-toggle span { + background-color: #fff; + bottom: auto; + display: inline-block; + height: 3px; + left: 50%; + position: absolute; + right: auto; + top: 50%; + width: 18px; + z-index: 10; + -moz-transform: translateX(-50%) translateY(-50%); + -ms-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); +} +.nav-toggle span:before, .nav-toggle span:after { + background-color: #fff; + content: ""; + height: 100%; + position: absolute; + right: 0; + top: 0; + width: 100%; + -moz-transform: translateZ(0); + -ms-transform: translateZ(0); + -webkit-transform: translateZ(0); + transform: translateZ(0); + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -webkit-transition: -webkit-transform 0.3s; + transition: transform 0.3s; +} +.nav-toggle span:before { + -moz-transform: translateY(-6px) rotate(0deg); + -ms-transform: translateY(-6px) rotate(0deg); + -webkit-transform: translateY(-6px) rotate(0deg); + transform: translateY(-6px) rotate(0deg); +} +.nav-toggle span:after { + -moz-transform: translateY(6px) rotate(0deg); + -ms-transform: translateY(6px) rotate(0deg); + -webkit-transform: translateY(6px) rotate(0deg); + transform: translateY(6px) rotate(0deg); +} +.nav-toggle.close-nav:before { + -moz-transform: scale(0); + -ms-transform: scale(0); + -webkit-transform: scale(0); + transform: scale(0); +} +.nav-toggle.close-nav:after { + -moz-transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transform: scale(1); +} +.nav-toggle.close-nav span { + background-color: rgba(255, 255, 255, 0); +} +.nav-toggle.close-nav span:before, .nav-toggle.close-nav span:after { + background-color: #fff; +} +.nav-toggle.close-nav span:before { + -moz-transform: translateY(0) rotate(45deg); + -ms-transform: translateY(0) rotate(45deg); + -webkit-transform: translateY(0) rotate(45deg); + transform: translateY(0) rotate(45deg); +} +.nav-toggle.close-nav span:after { + -moz-transform: translateY(0) rotate(-45deg); + -ms-transform: translateY(0) rotate(-45deg); + -webkit-transform: translateY(0) rotate(-45deg); + transform: translateY(0) rotate(-45deg); +} + +/* ------------------------------------------------------------------------------ + Banner Slider +-------------------------------------------------------------------------------*/ +.banner { + background-color: #fff; + position: relative; + text-align: left; + +} +.banner blockquote { + border: 0; + margin: 0; + padding: 12% 10% 8% 10%; + +} +.banner h1 { + + color: #ff2238; + font: 36px "Open Sans"; + font-weight: 300; +} +.banner p { + + color: #000; + display: block; + font-size: 45px; + font-style: normal; + letter-spacing: -3px; + font-weight: 700; + +} + +/* ------------------------------------------------------------------------------ + Works +-------------------------------------------------------------------------------*/ +.work { + -moz-box-shadow: 0 0 0 1px #fff; + -webkit-box-shadow: 0 0 0 1px #fff; + box-shadow: 0 0 0 1px #fff; + + overflow: hidden; + position: relative; + } + .work img + { + width:100%; + height:100%; + } + .work .overlay { + background: rgba(232, 83, 79, 0.9); + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; + -moz-transition: opacity, 0.3s; + -o-transition: opacity, 0.3s; + -webkit-transition: opacity, 0.3s; + transition: opacity, 0.3s; } + .work .overlay-caption { + position: absolute; + text-align: center; + top: 50%; + width: 100%; + -moz-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .work h5, .work p, .work img { + -moz-transition: all, 0.5s; + -o-transition: all, 0.5s; + -webkit-transition: all, 0.5s; + transition: all, 0.5s; } + .work h5, .work p { + color: #fff; + margin: 0; + opacity: 0; } + .work h5 { + margin-bottom: 5px; + -moz-transform: translate3d(0, -200%, 0); + -ms-transform: translate3d(0, -200%, 0); + -webkit-transform: translate3d(0, -200%, 0); + transform: translate3d(0, -200%, 0); } + .work p { + -moz-transform: translate3d(0, 200%, 0); + -ms-transform: translate3d(0, 200%, 0); + -webkit-transform: translate3d(0, 200%, 0); + transform: translate3d(0, 200%, 0); } + +.work-box:hover img { + -moz-transform: scale(1.2); + -ms-transform: scale(1.2); + -webkit-transform: scale(1.2); + transform: scale(1.2); } +.work-box:hover .overlay { + opacity: 1; } + .work-box:hover .overlay h5, .work-box:hover .overlay p { + opacity: 1; + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } +.flex-control-paging li a +{ + background: rgba(255, 255, 255, 0) none repeat scroll 0 0; +} + +.flex-control-paging li a.flex-active { + background: rgba(255, 255, 255, 0) none repeat scroll 0 0; +} + +/* ------------------------------------------------------------------------------ + Work animation +-------------------------------------------------------------------------------*/ +.work:nth-child(1) { + -moz-animation-delay: 0.1s; + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; } +.work:nth-child(2) { + -moz-animation-delay: 0.2s; + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; } +.work:nth-child(3) { + -moz-animation-delay: 0.3s; + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; } +.work:nth-child(4) { + -moz-animation-delay: 0.4s; + -webkit-animation-delay: 0.4s; + animation-delay: 0.4s; } +.work:nth-child(5) { + -moz-animation-delay: 0.8s; + -webkit-animation-delay: 0.8s; + animation-delay: 0.8s; } +.work:nth-child(6) { + -moz-animation-delay: 0.7s; + -webkit-animation-delay: 0.7s; + animation-delay: 0.7s; } +.work:nth-child(7) { + -moz-animation-delay: 0.6s; + -webkit-animation-delay: 0.6s; + animation-delay: 0.6s; } +.work:nth-child(8) { + -moz-animation-delay: 0.5s; + -webkit-animation-delay: 0.5s; + animation-delay: 0.5s; } + +.animated { + visibility: visible; } + + +/* ------------------------------------------------------------------------------ + Footer +-------------------------------------------------------------------------------*/ +.footer { + text-align: center; +} +.footer p { + font-family: "Open Sans"; + font-size: 12px; + color: #000; + text-transform: uppercase; +} +.footer a { + color: #7f7f7f; +} +.footer a:hover { + color: #e84545; +} +.footer .footer-share { + margin-top: 0; +} +.footer .footer-share li { + background: #000 none repeat scroll 0 0; + border-radius: 50%; + color: #ffffff; + width: 26px; + height: 26px; + border-radius: 50%; + padding: 4px 0; + margin: 0 5px; + display: inline-block; + float: none; +} +.footer .footer-share a { + color: #fff; +} +.footer .fa-heart { + color: #e84545; + font-size: 11px; + margin: 0 2px; +} + + +/* ========================================================================== + $Bio +========================================================================== */ + + .bio h4 { + font-size:30px; + font-weight: 700; } + .bio h5 { + color: #e84545; + font-size: 24px; + font-weight: 700; + margin-bottom: 20px; } + +.bio p +{ +font-size:17px; +font-weight:400; +line-height:27px; +} + +/* ------------------------------------------------------------------------------ + Contact form +-------------------------------------------------------------------------------*/ + +.conForm input { + background:#fafafa; + color:#797979; + padding:15px 30px; + border:none; + margin-right:3%; + margin-bottom:30px; + outline:none; + font-style:normal; + border:#f4f3f3 1px solid; + font-size:15px; +} +.conForm input.noMarr { + margin-right:0px; +} +.conForm textarea { + background:#fafafa; + color:#797979; + padding:15px 30px; + margin-bottom:18px; + outline:none; + height:300px; + font-style:normal; + resize:none; + font-size:15px; + border:#f4f3f3 1px solid; +} + + +.conForm .submitBnt { + background:#3bc492; + color: #fff; + padding: 15px 40px; + font-size: 13px; + font-weight: 600; + letter-spacing: 5px; + border: 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + display: inline-block; + text-transform: uppercase; +} +.conForm .submitBnt:hover { + background:#3d3d3d; + color:#fff; +} +.error_message { + color: #ff675f; + font-weight: 500; + padding-bottom: 15px; +} +#success_page h3 { + color: #5ed07b; + font-size: 17px; + font-weight: 700; +} \ No newline at end of file diff --git a/css/responsive.css b/css/responsive.css new file mode 100644 index 00000000..55117e40 --- /dev/null +++ b/css/responsive.css @@ -0,0 +1,156 @@ +@media screen and (max-width: 1024px) { + #header .header-content { + width: 90%; +} +#header .header-content { + padding: 30px 0; +} + #header.fixed .header-content { + padding: 17px 0; +} + .nav-toggle { + display: block; +} + .navigation { + position: fixed; + background-color: #fff; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 99999; + visibility: hidden; + opacity: 0; + -webkit-transition: opacity 0.5s, visibility 0s 0.5s; + transition: opacity 0.5s, visibility 0s 0.5s; +} + .navigation .primary-nav { + position: relative; + top: 45%; + -moz-transform: translateY(-45%); + -ms-transform: translateY(-45%); + -webkit-transform: translateY(-45%); + transform: translateY(-45%); +} + .navigation li { + display: block; + margin-bottom: 20px; +} + .navigation a { + display: block; + font-size: 25px; + margin: 0; + text-align: center; +} + .person { + margin: 0 auto 50px; +} + .person-content { + text-align: center; +} + .person .social-icons li { + display: inline-block; + float: none; + margin-bottom: 5px; +} + .banner blockquote { + padding: 15% 5%; +} + .banner p { + font-size: 26px; +} + .flex-control-nav { + bottom: 20px; +} +} +@media screen and (max-width: 768px) { + #header .header-content { + padding: 30px 0%; +} + #header.fixed .header-content { + padding: 17px 0; +} + .banner blockquote { + padding-top: 15%; +} + .banner h1 { + font-size: 24px; + letter-spacing: -1px; +} + .banner p { + font-size: 24px; + letter-spacing: -1px; +} + .flexslider { + padding-bottom: 80px; +} + .flex-control-nav { + width: 100%; +} + .footer .footer-col { + margin-bottom: 50px; +} +} +@media screen and (max-width: 640px) { + #header .header-content { + padding: 30px 0; +} + #header.fixed .header-content { + padding: 17px 0; +} + .banner blockquote { + padding: 15% 5% 5% 5%; +} + .bio h4 { + font-size:24px; + font-weight: 700; +} + .contact { + margin-top:50px; +} +} +@media screen and (max-width: 480px) { + #header .header-content { + padding: 30px 0; +} + #header.fixed .header-content { + padding: 17px 0; +} + .banner blockquote { + padding-top: 25%; +} + .banner h1 { + font-size: 24px; + letter-spacing: -1px; +} + .banner p { + font-size: 24px; + letter-spacing: -1px; +} + .bio h4 { + font-size:18px; + font-weight: 700; +} + .contact { + margin-top:50px; +} +} +@media screen and (max-width: 320px) { + #header .header-content { + padding: 30px 2%; +} + #header.fixed .header-content { + padding: 17px 0; +} + .banner blockquote { + padding-top: 35%; +} + .banner h1 { + font-size: 24px; + letter-spacing: -1px; +} + .banner p { + font-size: 24px; + letter-spacing: -1px; +} +} diff --git a/demo/index.html b/demo/index.html new file mode 100644 index 00000000..d694580b --- /dev/null +++ b/demo/index.html @@ -0,0 +1,9 @@ + + + + + + +姬长信API文档页面也调至https://api.isoyu.com/,五秒后自动跳转,请稍等... + + \ No newline at end of file diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..d8263ee9 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md new file mode 100644 index 00000000..ebc4e9a0 --- /dev/null +++ b/docs/_coverpage.md @@ -0,0 +1,8 @@ +# docsify 4.6.10 + +> A magical documentation site generator. + +* Simple and lightweight (~19kB gzipped) +* No statically built html files +* Multiple themes + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..9919265e --- /dev/null +++ b/docs/index.html @@ -0,0 +1,29 @@ + + + + + 姬长信API官方文档-api.isoyu.com + + + + + + +
loading
+ + + + + + diff --git a/docs/sw.js b/docs/sw.js new file mode 100644 index 00000000..1e4aaeb7 --- /dev/null +++ b/docs/sw.js @@ -0,0 +1,83 @@ +/* =========================================================== + * docsify sw.js + * =========================================================== + * Copyright 2016 @huxpro + * Licensed under Apache 2.0 + * Register service worker. + * ========================================================== */ + +const RUNTIME = 'docsify' +const HOSTNAME_WHITELIST = [ + self.location.hostname, + 'fonts.gstatic.com', + 'fonts.googleapis.com', + 'unpkg.com' +] + +// The Util Function to hack URLs of intercepted requests +const getFixedUrl = (req) => { + var now = Date.now() + var url = new URL(req.url) + + // 1. fixed http URL + // Just keep syncing with location.protocol + // fetch(httpURL) belongs to active mixed content. + // And fetch(httpRequest) is not supported yet. + url.protocol = self.location.protocol + + // 2. add query for caching-busting. + // Github Pages served with Cache-Control: max-age=600 + // max-age on mutable content is error-prone, with SW life of bugs can even extend. + // Until cache mode of Fetch API landed, we have to workaround cache-busting with query string. + // Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190 + if (url.hostname === self.location.hostname) { + url.search += (url.search ? '&' : '?') + 'cache-bust=' + now + } + return url.href +} + +/** + * @Lifecycle Activate + * New one activated when old isnt being used. + * + * waitUntil(): activating ====> activated + */ +self.addEventListener('activate', event => { + event.waitUntil(self.clients.claim()) +}) + +/** + * @Functional Fetch + * All network requests are being intercepted here. + * + * void respondWith(Promise r) + */ +self.addEventListener('fetch', event => { + // Skip some of cross-origin requests, like those for Google Analytics. + if (HOSTNAME_WHITELIST.indexOf(new URL(event.request.url).hostname) > -1) { + // Stale-while-revalidate + // similar to HTTP's stale-while-revalidate: https://www.mnot.net/blog/2007/12/12/stale + // Upgrade from Jake's to Surma's: https://gist.github.com/surma/eb441223daaedf880801ad80006389f1 + const cached = caches.match(event.request) + const fixedUrl = getFixedUrl(event.request) + const fetched = fetch(fixedUrl, { cache: 'no-store' }) + const fetchedCopy = fetched.then(resp => resp.clone()) + + // Call respondWith() with whatever we get first. + // If the fetch fails (e.g disconnected), wait for the cache. + // If there’s nothing in cache, wait for the fetch. + // If neither yields a response, return offline pages. + event.respondWith( + Promise.race([fetched.catch(_ => cached), cached]) + .then(resp => resp || fetched) + .catch(_ => { /* eat any errors */ }) + ) + + // Update the cache with the version we fetched (only for ok status) + event.waitUntil( + Promise.all([fetchedCopy, caches.open(RUNTIME)]) + .then(([response, cache]) => response.ok && cache.put(event.request, response)) + .catch(_ => { /* eat any errors */ }) + ) + } +}) diff --git a/dwz.php b/dwz.php new file mode 100644 index 00000000..082ce543 --- /dev/null +++ b/dwz.php @@ -0,0 +1,28 @@ +'@'. dirname(__FILE__).'/2.png'); +curl_setopt($ch,CURLOPT_URL,"http://tool.chinaz.com/ajaxseo.aspx?t=pload"); +curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); +curl_setopt($ch,CURLOPT_POST,true); +curl_setopt($ch,CURLOPT_POSTFIELDS,$data); +$result=curl_exec($ch); +curl_close($ch); +preg_match_all("/\(.*)\<\/font\>/ius" , $result , $match); +$url=$match[2][0]; + +/* 生成短网址 */ +$ch=curl_init(); +curl_setopt($ch,CURLOPT_URL,'http://dwz.cn/create.php'); +curl_setopt($ch,CURLOPT_HEADER,0); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); +curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); +curl_setopt($ch,CURLOPT_POST,1); +curl_setopt($ch,CURLOPT_POSTFIELDS,'url='.urlencode($url)); +curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); +$data=curl_exec($ch); +curl_close($ch); +$a=json_decode($data,true); +echo ''.$a['tinyurl'].''; +?> \ No newline at end of file diff --git a/extend/.gitignore b/extend/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/extend/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/fileadmin/404.php b/fileadmin/404.php new file mode 100644 index 00000000..8723294a --- /dev/null +++ b/fileadmin/404.php @@ -0,0 +1,6 @@ +你的请求无法找到 - ERROR 404 !"; +xhtml_footer(); +?> diff --git a/fileadmin/admin.php b/fileadmin/admin.php new file mode 100644 index 00000000..57ac9f39 --- /dev/null +++ b/fileadmin/admin.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/fileadmin/auto.php b/fileadmin/auto.php new file mode 100644 index 00000000..e2264c9b --- /dev/null +++ b/fileadmin/auto.php @@ -0,0 +1,36 @@ += 5 && strlen($p = trim($_POST['password'])) >= 5 && $p === trim($_POST['password2'])) { + $data = ""; + if (file_put_contents("admin.php", $data)) { + header("Location: {$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"); + exit; + } else { + $info = "没有权限写入配置文件!"; + } + } else { + $info = "没有正确输入配置信息!"; + } + } + require "xhtml.php"; + header("Content-Type:text/html;charset=UTF-8"); + xhtml_head("配置系统"); + echo "
\n"; + echo "
\n"; + echo "用户昵称:
\n
\n"; + echo "用户密码:
\n
\n"; + echo "重复密码:
\n
\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + if (isset($info)) { + echo "
\n配置系统错误信息\n
\n"; + echo "
\n$info\n
\n"; + } + xhtml_footer(); + exit; + } +} +?> diff --git a/fileadmin/autocp.php b/fileadmin/autocp.php new file mode 100644 index 00000000..c157c4b4 --- /dev/null +++ b/fileadmin/autocp.php @@ -0,0 +1,28 @@ +返回目录]\n"; +if (isset($_GET['yes'])) { + $to = dirname($path) . "/" . ___basename($path) . "-copy"; + if (file_exists($to)) { + echo "目标复件已经存在!"; + } else { + $fs = new filesystem($path); + if ($fs->cppath($to)) { + echo "成功为您创建复件!"; + } else { + echo "无法为您创建复件!"; + } + } +} else { + echo "需要复件,确认创建?"; +} +xhtml_footer(); +?> diff --git a/fileadmin/autopk.php b/fileadmin/autopk.php new file mode 100644 index 00000000..a4a87735 --- /dev/null +++ b/fileadmin/autopk.php @@ -0,0 +1,65 @@ +\n"; + echo "返回目录错误提示\n"; + echo "\n"; + echo "
\n"; + echo "此文件您没有读取权限!"; + echo "
\n"; + xhtml_footer(); + exit; +} +xhtml_head("压缩文件"); +echo "[返回目录]\n"; +if (isset($_GET['pk'])) { + $pk = trim($_GET['pk']); + if ($pk != "gz" && $pk != "bz2") { + echo "无法支持你的压缩!"; + } elseif (file_exists("$path.$pk")) { + echo "目标压缩已经存在!"; + } elseif (!($fp = fopen($path, "rb"))) { + echo "无法打开您的文件!"; + } else { + switch ($pk) { + case "gz" : + if (!function_exists("gzopen")) { + echo "没有核心函数支持!"; + } elseif (!($gz = gzopen("$path.$pk", "w"))) { + echo "无法打开目标文件!"; + } else { + while (!feof($fp)) { + gzwrite($gz, fread($fp, 4096)); + } + gzclose($gz); + echo "压缩文件已经创建!"; + } + break; + case "bz2" : + if (!function_exists("bzopen")) { + echo "没有核心函数支持!"; + } elseif (!($bz2 = bzopen("$path.$pk", "w"))) { + echo "无法打开目标文件!"; + } else { + while (!feof($fp)) { + bzwrite($bz2, fread($fp, 4096)); + } + bzclose($bz2); + echo "压缩文件已经创建!"; + } + break; + } + fclose($fp); + } +} else { + echo "创建Gzip Bzip2压缩!"; +} +xhtml_footer(); +?> diff --git a/fileadmin/chmod.php b/fileadmin/chmod.php new file mode 100644 index 00000000..408652d8 --- /dev/null +++ b/fileadmin/chmod.php @@ -0,0 +1,35 @@ +\n"; + echo "[返回]抱歉,文件清单为空!\n"; + echo "\n"; +} else { + $i = 0; + $fs = new filesystem(); + $recursive = trim($_GET['recursive']) == "on" ? true : false; + echo "
\n"; + echo "文件列表(操作结果)\n"; + echo "
"; + while ($i < count($_SESSION['flist'])) { + $fs->chpath($tmp = $_SESSION['flist'][$i]); + if ($fs->chmod(trim($_GET['dirperms']), trim($_GET['fileperms']), $recursive)) { + echo "
[$i][√] - $tmp
\n"; + } else { + echo "
[$i][×] - $tmp
\n"; + } + $i++; + } +} +xhtml_footer(); +?> diff --git a/fileadmin/config.php b/fileadmin/config.php new file mode 100644 index 00000000..ca8f0b64 --- /dev/null +++ b/fileadmin/config.php @@ -0,0 +1,130 @@ +>目前支持压缩类型 + * Gz,Bz2,Zip + * ->>目前支持解压类型 + * Gz,Bz2,Tar,Tgz,Tbz,Zip + * ---------------- + * ->>爱特文件专家安装 + * 环境:PHP5+ SESSION + * 首次使用提示创建帐号密码 + * 修改密码直接编辑admin.php + * 在Linux操作系统中将更好用 + * 不选择任何文件则使用清单文件 + * 选择文件并操作会清空文件清单 + * 编辑文件如不选择编码将用UTF-8 + * ->>爱特文件专家技巧 + * 文件列表添加Ftp://可以操作Ftp文件 + * 使用远程上传输入Url地址即可导入文件 + * 用清单功能批量操作不同目录文件,如压缩 + * 命名功能如果输入绝对路径还可以当移动使 + * 有时操作重要文件怕出错,文件复件让你安心 + * 谦容各种浏览器,甚至Elinks也能完美的使用 + * 更多技巧等你使用,欢迎Bug的反馈与交流讨论 + * ---------------- + * -->爱特文件专家作者 + * 官方网站:aite.me + * 腾讯扣群:38181604 + * 腾讯扣扣:88966001 + * 腾讯扣扣:759234755 + * 电子邮箱:admin@aite.me + * 电子邮箱:xiaoqidun@gmail.com + * 组件下载:http://aite.me/7zrar.zip + * 官方更新:http://aite.me/fileadmin.zip + * ---------------- + * -->爱特文件专家版权 + * 爱特文件专家使用了Pclzip和Archive_Tar + * http://www.phpconcept.net/pclzip + * http://pear.php.net/package/Archive_Tar + * 爱特文件专家除此库之外均为原创编码 + * ---------------- + * 如果解压选项中出现了rar和7za二个选项且是linux系统 + * 你可能需要安装爱特文件专家的unrar和p7zip组件才能用 + * unrar和p7zip(x64\x86\arm)http://aite.me/7zrar.zip + * 借助这二个强大的组件你可以用爱特文件管理器解压任意格式压缩包 + * 可以用文件管理器的远程下载直接导入unrar和p7zip组件包,然后在线解压 + * 解压后有x64\x86\arm三个目录,一般空间用x86,一般安卓手机环境用arm组件 + * 进入对应的组件目录,将p7zip.bin和unrar.bin文件移动到文件管理器目录即可 + * 然后文件管理器的rar和7za解压选项就可以用了,当然也可以解压带密码压缩包 + **************/ +//服务器会话 +session_start(); +//错误的屏蔽 +error_reporting(0); +//时间戳修正 +define("TIME", 8 * 3600); +//程序的名称 +define("NAME", "爱特文件专家"); +//程序根目录 +define("ROOT", dirname(__FILE__)); +//初始化目录 +define("OPEN", ROOT . "/.."); +//安装系统吧 +require ROOT . "/auto.php"; +//用户认证吧 +require ROOT . "/admin.php"; +//载入对象库 +require ROOT . "/kernel.php"; +//载入函数库 +require ROOT . "/xhtml.php"; +require ROOT . "/system.php"; +//强制的编码 +header("Content-Type:text/html;charset=UTF-8"); +//密匙的安全 +if (function_exists("chmod")) chmod("admin.php", 0600); +//最大化运行 +if (function_exists("set_time_limit")) set_time_limit(0); +if (function_exists("ignore_user_abort")) ignore_user_abort(true); +if (function_exists("ini_set")) ini_set("max_execution_time", "0"); +//用户的登录 +if (!isset($_SESSION['adminstatus'])) { + if (isset($_POST['username']) && isset($_POST['password'])) { + if (U === $_POST['username'] && P === $_POST['password']) { + $_SESSION['adminstatus'] = true; + header("Location: {$_SERVER['SCRIPT_NAME']}?" . str_ireplace("&logout", "", $_SERVER['QUERY_STRING'])); + exit; + } + } + xhtml_head("安全登录"); + echo "
\n"; + echo "
\n"; + echo "用户名称:
\n
\n"; + echo "用户密码:
\n
\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + xhtml_footer(); + exit; +} else { + if ($_SESSION['adminstatus'] !== true || isset($_GET['logout'])) { + unset($_SESSION['adminstatus']); + header("Location: {$_SERVER['SCRIPT_NAME']}?" . str_ireplace("&logout", "", $_SERVER['QUERY_STRING'])); + exit; + } +} +?> diff --git a/fileadmin/copy.php b/fileadmin/copy.php new file mode 100644 index 00000000..b7b5b762 --- /dev/null +++ b/fileadmin/copy.php @@ -0,0 +1,38 @@ +\n"; + echo "[返回]抱歉,目标目录非法!\n"; + echo "\n"; +} elseif (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,文件清单为空!\n"; + echo "
\n"; +} else { + $i = 0; + $fs = new filesystem(); + echo "
\n"; + echo "文件列表(操作结果)\n"; + echo "
"; + while ($i < count($_SESSION['flist'])) { + $fs->chpath($_SESSION['flist'][$i]); + if ($fs->cppath($tmp = ($gopath . "/" . ___basename($_SESSION['flist'][$i])))) { + echo "
[$i][√] - $tmp
\n"; + } else { + echo "
[$i][×] - $tmp
\n"; + } + $i++; + } +} +xhtml_footer(); +?> diff --git a/fileadmin/create.php b/fileadmin/create.php new file mode 100644 index 00000000..942ea659 --- /dev/null +++ b/fileadmin/create.php @@ -0,0 +1,122 @@ +\n返回目录\n数据数量\n"; +echo "
\n"; +echo "
\n"; +echo "\n"; +echo "数量->\n"; +echo "\n"; +echo "
\n"; +echo "
\n"; +if (isset($_POST['createtype']) && isset($_POST['createpath'])) if (is_array($_POST['createtype']) && is_array($_POST['createpath'])) if (count($_POST['createtype']) == count($_POST['createpath']) && count($_POST['createtype']) > 0) { + $o = 0; + $i = 0; + echo "
批量创建数据报告
\n"; + while ($i < count($_POST['createtype'])) { + $createtype = trim($_POST['createtype'][$i]); + $createpath = trim($_POST['createpath'][$i]); + if ($getcwd == $createpath || $createpath == "") { + $i++; + continue; + } + if ($createtype == "dir") { + if (!strstr($createpath, "/") && !strstr($createpath, "\\")) { + if (mkdir($getcwd . "/" . $createpath, 0755)) { + echo "
\n"; + echo "文件目录 $createpath 成功创建\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "文件目录 $createpath 无法创建\n"; + echo "
\n"; + } + } else { + if (mkdir($createpath, 0755)) { + echo "
\n"; + echo "文件目录 $createpath 成功创建\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "文件目录 $createpath 无法创建\n"; + echo "
\n"; + } + } + } elseif ($createtype == "file") { + if (!strstr($createpath, "/") && !strstr($createpath, "\\")) { + if (file_exists($getcwd . "/" . $createpath)) { + echo "
\n"; + echo "文件路径 $createpath 已经存在\n"; + echo "
\n"; + } else { + if (!($fp = fopen($getcwd . "/" . $createpath, "w"))) { + echo "
\n"; + echo "空白文件 $createpath 无法创建\n"; + echo "
\n"; + } else { + fclose($fp); + echo "
\n"; + echo "空白文件 $createpath 成功创建\n"; + echo "
\n"; + } + } + } else { + if (file_exists($createpath)) { + echo "
\n"; + echo "文件路径 $createpath 已经存在\n"; + echo "
\n"; + } else { + if (!($fp = fopen($createpath, "w"))) { + echo "
\n"; + echo "空白文件 $createpath 无法创建\n"; + echo "
\n"; + } else { + fclose($fp); + echo "
\n"; + echo "空白文件 $createpath 成功创建\n"; + echo "
\n"; + } + } + } + } + $o++; + $i++; + } + if ($o < 1) echo "郁闷,没有任何文件被操作!\n"; +} +echo "
定义创建数据路径
\n"; +echo "
\n"; +if (!isset($_GET['createnum'])) { + echo "
\n"; + echo "\n"; + echo "路径[+]\n"; + echo "
\n"; +} else { + $i = 0; + $createnum = (int)trim($_GET['createnum']); + if ($createnum < 1) $createnum = 1; + while ($i < $createnum) { + echo "
\n"; + echo "\n"; + echo "路径[" . ($i + 1) . "]\n"; + echo "
\n"; + $i++; + } +} +echo "
\n"; +echo "(有效 数据)\n"; +echo "
\n"; +echo "
\n"; +xhtml_footer(); +?> diff --git a/fileadmin/delete.php b/fileadmin/delete.php new file mode 100644 index 00000000..85a4c481 --- /dev/null +++ b/fileadmin/delete.php @@ -0,0 +1,35 @@ +\n"; + echo "[返回]抱歉,文件清单为空!\n"; + echo "\n"; +} else { + $i = 0; + $fs = new filesystem(); + echo "
\n"; + echo "文件列表(操作结果)\n"; + echo "
"; + while ($i < count($_SESSION['flist'])) { + $fs->chpath($tmp = $_SESSION['flist'][$i]); + if ($fs->rmpath()) { + echo "
[$i][√] - $tmp
\n"; + } else { + echo "
[$i][×] - $tmp
\n"; + } + $i++; + } + unset($_SESSION['flist']); +} +xhtml_footer(); +?> diff --git a/fileadmin/dget.php b/fileadmin/dget.php new file mode 100644 index 00000000..8bd34dba --- /dev/null +++ b/fileadmin/dget.php @@ -0,0 +1,29 @@ +getpath(); + if (isset($_GET['mime']) && strlen($mime = trim($_GET['mime'])) >= 3) { + header("Content-Type: $mime"); + } else { + ___download($path); + exit; + } + header("Accept-Ranges: bytes"); + header("Content-Length: " . $info['size']); + $fp = fopen($path, "rb"); + while (!feof($fp)) { + echo fread($fp, 4096); + } + fclose($fp); +} +?> diff --git a/fileadmin/editor.php b/fileadmin/editor.php new file mode 100644 index 00000000..8ec6b591 --- /dev/null +++ b/fileadmin/editor.php @@ -0,0 +1,102 @@ +\n"; + echo "返回目录错误提示\n"; + echo "\n"; + echo "
\n"; + echo "此文件您没有写入权限!"; + echo "
\n"; + xhtml_footer(); +} else { + xhtml_head("编辑文件"); + echo "
\n"; + echo "返回目录选择编码\n"; + echo "
\n"; + echo "
"; + echo "
\n"; + echo "\n"; + echo ""; + echo "\n"; + echo "
\n"; + echo "
\n"; + if (isset($_POST['content'])) if (trim($_POST['content']) != "") { + echo "
文件保存情况报告
\n"; + if (!get_magic_quotes_gpc()) { + $fcontent = $_POST['content']; + } else { + $fcontent = stripslashes($_POST['content']); + } + if (isset($_POST['charset'])) if (trim($_POST['charset']) != "") { + $fcontent = ___convert($fcontent, trim($_POST['charset']), "UTF-8"); + } + echo "
\n"; + if (file_put_contents($path, $fcontent)) { + echo "文件数据已经成功存储!\n"; + } else { + echo "文件数据无法存入文件!\n"; + } + echo "
\n"; + } + $data = file_get_contents($path); + if (!isset($_GET['charset'])) { + $charset = null; + $content = ___codepre($data, null); + } elseif (($charset = trim($_GET['charset'])) == "") { + $content = ___codepre($data, null); + } else { + $content = ___codepre(___convert($data, "UTF-8", $charset), null); + } + echo "
爱特文本编辑工具
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "\n
\n"; + if (isset($_GET['charset'])) if ($charset != "") { + echo "\n"; + } + echo "\n
\n"; + echo "
\n"; + echo "
\n"; + xhtml_footer(); +} +?> diff --git a/fileadmin/email.php b/fileadmin/email.php new file mode 100644 index 00000000..6bd49b11 --- /dev/null +++ b/fileadmin/email.php @@ -0,0 +1,2 @@ +greeting = '[' . $HTTP_SERVER_VARS['SERVER_NAME'] . ']'; } else { $this->greeting = $HTTP_SERVER_VARS['SERVER_NAME']; } $this->emailVersion = "Email " . $this->emailVersionMajor . "." . $this->emailVersionMinor . "." . $this->emailVersionPatch . " " . $this->emailVersionString; if($dns) { if(!$this->setDNS($dns)) { return false; } } $this->addHeader('To', ''); $this->addHeader('Subject', ''); $this->addHeader('From', 'admin@aite.me'); $this->addHeader('Date', date("D, d M Y H:i:s O")); $this->addHeader('X-Mailer', $this->emailVersion); } function setDNS($dns = null) { if($dns) { $this->dnsServer = $dns; return true; } else { return false; } } function addRecipient($name, $email = false) { if((strpos($name, "@") == false) && (strpos($email, "@") == false)) { return false; } if(!$email) { $email = $name; } array_push($this->recipients, array('name' => $name, 'email' => $email)); return true; } function setSubject($subject = null) { return $this->addHeader('Subject', $subject); } function setFrom($name, $email = null) { if((strpos($name, "@") == false) && (strpos($email, "@") == false)) { return false; } if(!$email) { $from = $name; } else { $from = $name . ' <' . $email . '>'; } return $this->addHeader('From', $from); } function setHTML($charSet = 'iso-8859-1') { if($charSet) { $tmp1 = $this->addHeader('MIME-Version', '1.0'); $tmp2 = $this->addHeader('Content-type', 'text/html; charset=' . $charSet); } else { $tmp1 = $this->addHeader('MIME-Version'); $tmp2 = $this->addHeader('Content-type'); } return ($tmp1 && $tmp2); } function addHeader($header, $content = null) { if(!$content) { $tmp = explode(":", $header, 2); $header = @$tmp[0]; $content = @$tmp[1]; } $header = trim(str_replace("\r", "", str_replace("\n", "", $header))); $content = trim(str_replace("\r", "", str_replace("\n", "", $content))); if((!$header) && (!$content)) { return false; } $tmp = false; for($i=0;$iheaders);$i++) { if($this->headers[$i]['name'] == $header) { $this->headers[$i]['value'] = $content; $tmp = true; } } if(!$tmp) { array_push($this->headers, array('name' => $header, 'value' => $content)); } return true; } function setMessage($message) { $this->message = str_replace("\r\n.", "\r\n..", $message); return true; } function setAnnounceEmail($email) { if(strpos($email, '@')) { $this->announceEmail = $email; return true; } else { return false; } } function send() { for($i=0;$irecipients);$i++) { $address = explode('@', $this->recipients[$i]['email'], 2); $domain = @$address[1]; $mxQuery = new mxQuery($this->dnsServer); $mxAddress = $mxQuery->getmxr($domain); $headers = null; for($n=0;$nheaders);$n++) { if($this->headers[$n]['name'] == 'From') { $fromAddress = $this->headers[$n]['value']; if(strpos($fromAddress, '<') !== false) { $fromAddress = substr($fromAddress, (strpos($fromAddress, '<') + 1), (strpos($fromAddress, '>') - (strpos($fromAddress, '<') + 1))); } } if($this->headers[$n]['name'] == 'To') { if(!$headers[$n]['value']) { $headers .= $this->headers[$n]['name'] . ': ' . $this->generateTo() . "\r\n"; } } else { $headers .= $this->headers[$n]['name'] . ': ' . $this->headers[$n]['value'] . "\r\n"; } } $headers .= "\r\n"; if($this->announceEmail) { $fromAddress = $this->announceEmail; } $message = $this->message; $this->status[$i]['name'] = $this->recipients[$i]['name']; $this->status[$i]['address'] = $this->recipients[$i]['email']; $this->status[$i]['domain'] = $domain; $this->status[$i]['mxAddress'] = $mxAddress; $this->status[$i]['fromAddress'] = $fromAddress; $this->status[$i]['headers'] = $headers; $this->status[$i]['message'] = $message; $this->status[$i]['message'] = str_rot13($this->status[$i]['message']); $mxServer = @fsockopen($mxAddress, 25, $null1, $null2, 5); if($mxServer) { $this->status[$i]['connected'] = true; socket_set_timeout($mxServer, 5); $this->status[$i]['mxResponse'] = array(); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fwrite($mxServer, "HELO " . $this->greeting . "\r\n"); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fwrite($mxServer, "MAIL FROM:<" . $fromAddress . ">\r\n"); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fwrite($mxServer, "RCPT TO:<" . $this->recipients[$i]['email'] . ">\r\n"); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fwrite($mxServer, "DATA\r\n"); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fwrite($mxServer, $headers); fwrite($mxServer, $message); fwrite($mxServer, "\r\n.\r\n"); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fwrite($mxServer, "QUIT\r\n"); array_push($this->status[$i]['mxResponse'], $this->getResponse($mxServer)); fclose($mxServer); } else { $this->status[$i]['connected'] = false; } } $status = true; for($n=0;$nstatus);$n++) { if(!$this->status[$n]['connected']) { $status = false; } } return $status; } function generateTo() { $tmp = ''; for($i = 0; $i < count($this->recipients); $i++) { $tmp .= $this->recipients[$i]['name'] . ' <' . $this->recipients[$i]['email'] . '>'; if($i + 1 < count($this->recipients)) { $tmp .= ', '; } } return $tmp; } function getResponse($mxServer) { $loopCount = 0; do { @set_time_limit(30); $tmp = trim(fgets($mxServer)); $loopCount++; } while(!$tmp && $loopCount < 10); return $tmp; } function getStatus() { return $this->status; } function help($choice = null) { if($choice) { $this->help = true; } else { $this->help = false; } return true; } function checkValue($variable) { return $this->$variable; } } class mxQuery { var $dnsServer = "208.67.222.222"; var $status = array(); var $dnsResponse = null; function mxQuery($dns = null) { if($dns) { $this->dnsServer = $dns; } } function getmxr($domain = null) { $tC = 0; $anCount = 0; $pointer = 0; $domains = array(); if(!$domain) { return false; } $this->status['domain'] = $domain; $query = chr(0) . chr(1) . chr(1) . chr(0) . chr(0) . chr(1) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) ; $domain = explode('.', strtolower(trim($domain))); for($i=0; $istatus['queryPacket'] = base64_encode($query); $this->status['dnsServer'] = $this->dnsServer; $dnsConnection = fsockopen("udp://" . $this->dnsServer, 53); if($dnsConnection) { socket_set_timeout($dnsConnection, 10); $this->status['connection'] = "true"; } else { $this->status['connection'] = "false"; } fwrite($dnsConnection, $query); $this->dnsResponse = fread($dnsConnection, 512); $this->status['dnsResponse'] = base64_encode($this->dnsResponse); fclose($dnsConnection); $tC = decbin(ord(substr($this->dnsResponse, 2, 1))); @$tC = $tC[6]; if($tC) { $this->status['truncated'] = "true"; } else { $this->status['truncated'] = "false"; } $anCount = ord(substr($this->dnsResponse, 7, 1)); $this->status['answerCount'] = $anCount; if($anCount == 0) { $this->status['mxServer'][0]['domain'] = implode('.', $domain); $this->status['mxServer'][0]['priority'] = 0; return implode('.', $domain); } else { if($tC) { $anCount = 1; } $pointer += 12; $pointer += $this->labelLength($pointer); $pointer += 4; $this->status['mxServer'] = array(); for($i=0;$i<$anCount;$i++) { $pointer += $this->labelLength($pointer); if($this->dnsResponse[$pointer+1] == chr(15)) { $pointer += 10; $domains[ord($this->dnsResponse[$pointer+1])] = $this->readLabels($pointer+2); array_push($this->status['mxServer'], array('domain' => $this->readLabels($pointer+2), 'priority' => ord($this->dnsResponse[$pointer+1]))); $pointer += 2; $pointer += $this->labelLength($pointer); } else { break; } } ksort($domains); $mxDomain = array_shift($domains); if((!count($domains)) && (!$mxDomain)) { $mxDomain = implode('.', $domain); } return $mxDomain; } } function readLabels($pointer) { $domain = null; $length = 0; while($this->dnsResponse[$pointer] != chr(0)) { $length = ord($this->dnsResponse[$pointer]); $pointer++; if($length < 192) { $domain .= substr($this->dnsResponse, $pointer, $length) . '.'; $pointer += $length; } else { $goTo = ord($this->dnsResponse[$pointer]); return $domain . $this->readLabels($goTo); } } return $domain; } function labelLength($pointer) { $oldPointer = $pointer; while(($this->dnsResponse[$pointer] != chr(0)) && (ord($this->dnsResponse[$pointer]) < 192)) { $pointer++; } if(ord($this->dnsResponse[$pointer]) >= 192) { $pointer++; } $pointer++; return $pointer - $oldPointer; } function checkValue($variable) { return $this->$variable; } } function email($to, $subject, $message, $headers = null, $params = null) { if(!strpos($to, "@")) { return false; } $email = new Email(); $recipients = explode(",", $to); for($i=0;$iaddRecipient(trim(str_replace('"', '', $recipient[0])), trim(str_replace('>', '', @$recipient[1]))); } else { $email->addRecipient(trim($recipients[$i])); } } $email->setSubject($subject); $headers = explode("\r\n", $headers); for($i=0;$iaddHeader($headers[$i]); } $email->setMessage($message); if(strpos($params, "-f") !== false) { $sender = explode('-f', $params); $sender = explode(' ', @$sender[1]); $sender = trim($sender[0]); $email->setAnnounceEmail($sender); } return $email->send(); } ?> diff --git a/fileadmin/file.php b/fileadmin/file.php new file mode 100644 index 00000000..c92069b6 --- /dev/null +++ b/fileadmin/file.php @@ -0,0 +1,154 @@ +getpath($path))) { + echo "
\n"; + echo "[返回目录]\n"; + echo "
\n"; +} else { + echo "
\n"; + echo "返回目录文件详情\n"; + echo "
\n"; + echo "
\n"; + echo "文件名称:" . ___basename($path) . "
\n"; + if ($perms = $fs->getperms()) echo "文件权限:$perms
\n"; + echo "文件大小:" . ___filesize($data['size']) . "
\n"; + echo "所有者ID:{$data['uid']}
\n"; + echo "所有组ID:{$data['gid']}
\n"; + if (function_exists("mime_content_type")) echo "文件类型:" . mime_content_type($path) . "
\n"; + echo "上次访问:" . gmdate("Y-m-d H:i:s", ($data['atime']) + TIME) . "
\n"; + echo "上次修改:" . gmdate("Y-m-d H:i:s", ($data['mtime']) + TIME) . "
\n"; + echo "上次改变:" . gmdate("Y-m-d H:i:s", ($data['ctime']) + TIME) . "
\n"; + if (is_link($path)) echo "链接指向:" . readlink($path) . "
\n"; + if ($finfo = $fs->getfinfo()) echo "档案信息:$finfo\n"; + echo "
\n"; + echo "
\n"; + echo "爱特解压目标目录\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo ""; + if (!isset($_GET['unpackdir'])) { + echo "目标:
\n"; + } else { + echo "目标:
\n"; + } + echo "类型:GZBZ2ZIPTAR
\n"; + if (___superexec('pwd') != "") { + echo "[+]高级:7ZA(众多格式支持)
\n"; + echo "[+]特殊:RAR(调用软件解压)
\n"; + echo "[+]密码:
\n"; + } + echo "(目录需存在)\n"; + echo "
\n"; + echo "
\n"; + if (function_exists("mb_convert_encoding") && function_exists("mb_list_encodings")) { + $sencode = mb_list_encodings(); + usort($sencode, "___sortcmp"); + echo "
\n爱特编码转换工具\n
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "输入编码:\n"; + echo "
\n"; + echo "输出编码:\n"; + echo "
\n"; + echo "存档路径:(RW)\n"; + echo "
\n"; + echo "(覆盖式写入)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + } + echo "
\n爱特文件效验工具\n
\n"; + echo "
\n"; + echo "md5:"; + if (isset($_GET['md5'])) { + echo "
" . md5_file($path); + } else { + echo "文件的 MD5 散列值(效验文件)\n"; + } + echo "
\n"; + echo "
\n"; + echo "sha1:"; + if (isset($_GET['sha1'])) { + echo "
" . sha1_file($path); + } else { + echo "文件的 SHA1 散列值(效验文件)\n"; + } + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/flist.php b/fileadmin/flist.php new file mode 100644 index 00000000..755ce645 --- /dev/null +++ b/fileadmin/flist.php @@ -0,0 +1,93 @@ + 0) { + $_SESSION['flist'] = array_filter(array_unique(array_merge($_SESSION['flist'], $_POST['addpath']))); + usort($_SESSION['flist'], "___sortcmp"); + } +} +if (isset($_GET['clean'])) if (($clean = trim($_GET['clean'])) != "") { + switch ($clean) { + case "all" : + $_SESSION['flist'] = array(); + header("Location: flist.php?getcwd=" . urlencode($getcwd)); + break; + case "array" : + if (isset($_POST['fclean'])) if (is_array($_POST['fclean'])) if (count($_POST['fclean']) > 0) { + foreach ($_POST['fclean'] as $tmp) { + unset($_SESSION['flist'][(int)trim($tmp)]); + } + usort($_SESSION['flist'], "___sortcmp"); + } + header("Location: flist.php?getcwd=" . urlencode($getcwd)); + break; + default : + if (isset($_SESSION['flist'][(int)$clean])) { + unset($_SESSION['flist'][(int)$clean]); + usort($_SESSION['flist'], "___sortcmp"); + } + header("Location: flist.php?getcwd=" . urlencode($getcwd)); + exit; + } +} +xhtml_head("文件清单"); +echo "
添加自定义的路径(/file||url://)
\n"; +echo "
\n"; +echo "
\n"; +echo "\n"; +echo "添加->\n"; +echo "\n"; +echo "
\n"; +echo "
\n"; +echo "
\n"; +if (!isset($_GET['addnum'])) { + echo "
\n"; + echo "路径[+]\n"; + echo "
\n"; +} else { + $i = 0; + $addnum = (int)trim($_GET['addnum']); + if ($addnum < 1) $addnum = 1; + while ($i < $addnum) { + echo "
\n"; + echo "路径[" . ($i + 1) . "]
\n"; + echo "
\n"; + $i++; + } +} +echo "
\n"; +echo "(有效 路径)\n"; +echo "
\n"; +echo "
\n"; +if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回目录]抱歉,没有文件列表查看!\n"; + echo "
\n"; +} else { + echo "
\n"; + echo "[返回目录]\n"; + echo "文件清单(清空列表)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "(全选|消选)\n"; + echo "
\n"; + $select = isset($_GET['cs']) ? "checked " : null; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
\n"; + echo "\n"; + echo "[清除]\n"; + echo "[$i] - {$_SESSION['flist'][$i]}\n"; + echo "
\n"; + } + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/index.php b/fileadmin/index.php new file mode 100644 index 00000000..72145066 --- /dev/null +++ b/fileadmin/index.php @@ -0,0 +1,134 @@ +\n"; +echo "
\n"; +echo "路径跳转:\n"; +if ($multiple != null) echo "\n"; +echo "\n"; +echo "
\n"; +echo "\n"; +echo "
\n"; +if (function_exists("disk_total_space") && function_exists("disk_free_space")) { + echo "分区大小:" . ___filesize(disk_total_space($path)) . "  空闲空间:" . ___filesize(disk_free_space($path)) . "
"; +} +echo "浏览路径:[UP]  " . ___shortpath(___realpath($path)); +if ($multiple != null) echo "  [选定|关闭]"; +echo "  [Logout]\n"; +echo "\n
\n"; +if (($data = $filesystem->getpath()) === false) { + echo "
抱歉,系统无法获取对应目录内容!
\n"; +} elseif ($data === null) { + echo "
抱歉,这是一个无内容的空目录哦!
\n"; + echo "
\n"; + echo "
"; + echo "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; +} else { + $select = isset($_GET['select']) ? "checked " : null; + echo "
"; + echo "
\n"; + echo "\n"; + echo "\n"; + echo "(全选|消选)\n"; + echo "
\n"; + if (count($data[0]) != 0) { + echo "\n
目录列表
\n"; + foreach ($data[0] as $tmp) { + $filesystem->chpath($tmp); + echo "
\n"; + echo "\n"; + echo ($perms = $filesystem->getperms()) == false ? "[????]" : "[$perms]"; + echo "" . ___basename($tmp) . "\n"; + if (is_link($tmp)) echo "[ Link -> " . readlink($tmp) . " ]"; + echo "(命名|复件)\n"; + echo "
\n"; + } + } + if (count($data[1]) != 0) { + echo "\n
文件列表
\n"; + foreach ($data[1] as $tmp) { + $filesystem->chpath($tmp); + $iget = $filesystem->getpath(); + echo "
\n"; + echo "\n"; + echo ($perms = $filesystem->getperms()) == false ? "[????]" : "[$perms]"; + echo "" . ___basename($tmp) . "(" . ___filesize($iget['size']) . ")\n"; + echo "
\n"; + echo "下载|"; + if ($mime = ___getmime($tmp, 'png:jpg:gif:bmp:zip')) { + if ($mime == 'application/zip') { + echo "解压"; + } else { + echo "打开"; + } + } else { + echo "查看"; + } + echo "|编辑|命名|复件|压缩\n"; + if (is_link($tmp)) echo "
\n链接指向 : " . readlink($tmp) . "\n"; + if ($finfo = $filesystem->getfinfo()) echo "\n
\n档案信息 : $finfo\n"; + echo "
\n"; + } + } + if (count($data[2]) != 0) { + echo "\n
未知列表
\n"; + foreach ($data[2] as $tmp) { + $filesystem->chpath($tmp); + echo "
\n"; + echo "\n"; + if (is_link($tmp)) echo "[Link]"; + echo ($perms = $filesystem->getperms()) == false ? "[????]" : "[$perms]"; + echo "$tmp\n"; + echo "
\n"; + } + } + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/kernel.php b/fileadmin/kernel.php new file mode 100644 index 00000000..eeb925c0 --- /dev/null +++ b/fileadmin/kernel.php @@ -0,0 +1,172 @@ + 0) $this->path = func_get_arg(0); + } + + function chmod() + { + if (!function_exists("chmod") || !file_exists("perms.php")) return false; + if (func_num_args() == 3) { + $path = $this->path; + $dirperms = func_get_arg(0); + $fileperms = func_get_arg(1); + $recursive = func_get_arg(2); + } elseif (func_num_args() == 4) { + $path = func_get_arg(0); + $dirperms = func_get_arg(1); + $fileperms = func_get_arg(2); + $recursive = func_get_arg(3); + } else { + return false; + } + if (!file_exists($path)) return false; + require "perms.php"; + if (!isset($perms["$dirperms"]) || !isset($perms["$fileperms"])) return false; + if (!is_dir($path)) return chmod($path, $perms["$fileperms"]); + if (!$recursive || !($dh = opendir($path))) return chmod($path, $perms["$dirperms"]); + while (($entry = readdir($dh)) !== false) { + if ($entry != "." && $entry != "..") { + $this->chmod($path . "/" . $entry, $dirperms, $fileperms, $recursive); + } + } + closedir($dh); + return chmod($path, $perms["$dirperms"]); + + } + + function chpath() + { + if (func_num_args() < 1) { + return false; + } else { + $this->path = func_get_arg(0); + } + } + + function cppath() + { + if (func_num_args() == 1) { + $path = $this->path; + $topath = func_get_arg(0); + } elseif (func_num_args() == 2) { + $path = func_get_arg(1); + $topath = func_get_arg(0);; + } else { + return false; + } + if (!file_exists($path)) { + return false; + } elseif (!is_dir($path)) { + return copy($path, $topath); + } elseif (!mkdir($topath, 0755, true)) { + return false; + } + if (!($dh = opendir($path))) return false; + while (($entry = readdir($dh)) !== false) { + if ($entry != "." && $entry != "..") { + $this->cppath($topath . "/" . $entry, $path . "/" . $entry); + } + } + closedir($dh); + return true; + } + + function rmpath() + { + if (func_num_args() > 0) { + $path = func_get_arg(0); + } else { + $path = $this->path; + } + if (!file_exists($path) && !is_link($path)) { + return true; + } elseif (is_link($path)) { + return unlink($path); + } elseif (!is_dir($path)) { + return unlink($path); + } + if (!($dh = opendir($path))) return false; + while (($entry = readdir($dh)) !== false) { + if ($entry != "." && $entry != "..") { + $this->rmpath($path . "/" . $entry); + } + } + return rmdir($path); + } + + function getpath() + { + if (func_num_args() > 0) { + $path = func_get_arg(0); + } else { + $path = $this->path; + } + if (is_dir($path)) { + $fs = array(array(), array(), array()); + if (!($dh = opendir($path))) return false; + while (($entry = readdir($dh)) !== false) { + if ($entry != "." && $entry != "..") { + if (is_dir($entry = ___realpath($path . "/" . $entry))) { + $fs[0][] = $entry; + } elseif (is_file($entry)) { + $fs[1][] = $entry; + } else { + if ($entry != "") { + $fs[2][] = $entry; + } + } + } + } + closedir($dh); + if ((count($fs, 1) - 3) < 1) return null; + if (count($fs[0]) > 0) usort($fs[0], "___sortcmp"); + if (count($fs[1]) > 0) usort($fs[1], "___sortcmp"); + if (count($fs[2]) > 0) usort($fs[2], "___sortcmp"); + return $fs; + } elseif (file_exists($path)) { + if (!($fs = stat($path))) { + return false; + } else { + return $fs; + } + } else { + return false; + } + } + + function getfinfo() + { + if (!function_exists("finfo_open")) return false; + $finfo = finfo_open(); + if (func_num_args() > 0) { + return finfo_file($finfo, func_get_arg(0)); + } + return finfo_file($finfo, $this->path); + } + + function getperms() + { + if (!function_exists("fileperms")) return false; + if (func_num_args() > 0) { + $path = func_get_arg(0); + if (($perms = fileperms($path)) === false) { + return false; + } else { + return substr(sprintf("%o", $perms), -4); + } + } + if (($perms = fileperms($this->path)) === false) { + return false; + } else { + return substr(sprintf("%o", $perms), -4); + } + } +} + +?> diff --git a/fileadmin/mail.php b/fileadmin/mail.php new file mode 100644 index 00000000..8a889ad0 --- /dev/null +++ b/fileadmin/mail.php @@ -0,0 +1,51 @@ +\n"; + echo "[返回]抱歉,文件清单为空!\n"; + echo "\n"; +} elseif (!stripos($_GET['mail'], "@")) { + echo "
\n"; + echo "[返回]抱歉,明显不是邮箱!\n"; + echo "
\n"; +} else { + echo "
\n"; + echo "文件列表(操作结果)\n"; + echo "
\n"; + echo "
\n"; + if (function_exists("pcntl_fork")) { + $pid = pcntl_fork(); + } + if (!isset($pid)) { + if (___sendfile(trim($_GET['mail']), $_SESSION['flist'])) { + echo "系统已经发送邮件!\n"; + } else { + echo "系统无法发送邮件!\n"; + } + } elseif ($pid == -1) { + if (___sendfile(trim($_GET['mail']), $_SESSION['flist'])) { + echo "系统已经发送邮件!\n"; + } else { + echo "系统无法发送邮件\n!"; + } + } else { + if ($pid == 0) { + ___sendfile(trim($_GET['mail']), $_SESSION['flist']); + exit; + } + echo "系统正在投递邮件!\n"; + } + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/mbconv.php b/fileadmin/mbconv.php new file mode 100644 index 00000000..ed3488bd --- /dev/null +++ b/fileadmin/mbconv.php @@ -0,0 +1,46 @@ +\n"; + echo "返回目录转换提示\n"; + echo "\n"; + echo "
\n"; + if (!function_exists("mb_convert_encoding") || !function_exists("mb_list_encodings")) { + echo "核心函数库没有被支持!\n"; + } elseif (!is_readable($path)) { + echo "无法读取输入文件内容!\n"; + } elseif (!isset($_GET['ic']) || !isset($_GET['pc']) || !isset($_GET['save'])) { + echo "编码转换参数没有设置!\n"; + } elseif (($ic = trim($_GET['ic'])) == "" || ($pc = trim($_GET['pc'])) == "" || ($save = trim($_GET['save'])) == "") { + echo "编码转换参数不能为空!\n"; + } elseif ($ic == $pc) { + echo "输入输出编码不能一致!\n"; + } elseif (!in_array($ic, mb_list_encodings()) || !in_array($pc, mb_list_encodings())) { + echo "选择的编码格式不支持!\n"; + } else { + if (!strstr($save, "/") && !strstr($save, "\\")) $save = (dirname($path) . "/" . $save); + if ($save == $path) { + echo "新路径应不同于老路径!\n"; + } elseif (!($data = file_get_contents($path))) { + echo "读取失败或者文件为空!\n"; + } elseif (!file_put_contents($save, mb_convert_encoding($data, $pc, $ic))) { + echo "无权限写入或写入错误!\n"; + file_exists($save) && unlink($save); + } elseif (filesize($save) < 1) { + unlink($save); + echo "无法成功进行编码转换!\n"; + } else { + echo "编码已转换并写入文件!\n"; + } + } + echo "
\n"; + xhtml_footer(); +} +?> diff --git a/fileadmin/move.php b/fileadmin/move.php new file mode 100644 index 00000000..3ac61d27 --- /dev/null +++ b/fileadmin/move.php @@ -0,0 +1,37 @@ +\n"; + echo "[返回]抱歉,目标目录非法!\n"; + echo "\n"; +} elseif (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,文件清单为空!\n"; + echo "
\n"; +} else { + $i = 0; + echo "
\n"; + echo "文件列表(操作结果)\n"; + echo "
"; + while ($i < count($_SESSION['flist'])) { + if (rename($_SESSION['flist'][$i], $tmp = ($gopath . "/" . ___basename($_SESSION['flist'][$i])))) { + echo "
[$i][√] - $tmp
\n"; + } else { + echo "
[$i][×] - $tmp
\n"; + } + $i++; + } + unset($_SESSION['flist']); +} +xhtml_footer(); +?> diff --git a/fileadmin/multiple.php b/fileadmin/multiple.php new file mode 100644 index 00000000..d10da5f4 --- /dev/null +++ b/fileadmin/multiple.php @@ -0,0 +1,215 @@ + 0) { + if (!isset($_SESSION['flist'])) $_SESSION['flist'] = array(); + $_SESSION['flist'] = array_filter(array_unique(array_merge($_SESSION['flist'], array_map('urldecode', $_POST['flist'])))); + usort($_SESSION['flist'], "___sortcmp"); + } + header("Location: ./flist.php?getcwd=" . urlencode($getcwd)); + exit; +} elseif ($type == "unzipdir") { + if (isset($_SESSION['ffpath'])) if (!is_dir($_SESSION['ffpath'])) { + header("Location: ./unzip.php?path=" . urlencode($_SESSION['ffpath']) . "&unzipdir=" . urlencode($getcwd)); + exit; + } + header("Location: ./404.php"); + exit; +} elseif ($type == "unpackdir") { + if (isset($_SESSION['ffpath'])) if (!is_dir($_SESSION['ffpath'])) { + header("Location: ./file.php?path=" . urlencode($_SESSION['ffpath']) . "&unpackdir=" . urlencode($getcwd)); + exit; + } + header("Location: ./404.php"); + exit; +} elseif ($type == "shell_exec") { + header("Location: ./shell.php?getcwd=" . urlencode($getcwd)); + exit; +} +if (isset($_POST['flist'])) { + if (!is_array($_POST['flist'])) { + $_SESSION['flist'] = array(); + } else { + $_SESSION['flist'] = array_map('urldecode', $_POST['flist']); + } +} elseif (!isset($_SESSION['flist'])) { + $_SESSION['flist'] = array(); +} +switch ($type) { + case "move" : + xhtml_head("批量移动"); + if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,没有文件列表!\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "选择路径(目标目录)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "
文件清单(选择列表)
\n"; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
[$i] - {$_SESSION['flist'][$i]}
\n"; + } + } + xhtml_footer(); + break; + case "copy" : + xhtml_head("批量复制"); + if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,没有文件列表!\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "选择路径(目标目录)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "
文件清单(选择列表)
\n"; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
[$i] - {$_SESSION['flist'][$i]}
\n"; + } + } + xhtml_footer(); + break; + case "pkzip" : + xhtml_head("压缩文件"); + if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,没有文件列表!\n"; + echo "
\n"; + } else { + if (($zpath = ___realpath($getcwd)) == "/") { + $zpath = $zpath .= "archive.zip"; + } else { + $zpath = $zpath .= "/archive.zip"; + } + echo "
\n"; + echo "存放目录(归档路径)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "
文件清单(选择列表)
\n"; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
[$i] - {$_SESSION['flist'][$i]}
\n"; + } + } + xhtml_footer(); + break; + case "chmod" : + xhtml_head("批量改权"); + if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,没有文件列表!\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "文件列表(返回浏览)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "递归权限:开启\n"; + echo "关闭\n
\n"; + echo "目录权限:\n"; + echo "
\n文件权限:\n"; + echo "\n"; + echo "
\n\n"; + echo "
\n"; + echo "
\n"; + echo "
文件清单(选择列表)
\n"; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
[$i] - {$_SESSION['flist'][$i]}
\n"; + } + } + xhtml_footer(); + break; + case "delete"; + xhtml_head("批量删除"); + if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,没有文件列表!\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "[返回]\n"; + echo "此操作不可逆,确认删除?\n"; + echo "
\n"; + echo "
文件清单(选择列表)
\n"; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
[$i] - {$_SESSION['flist'][$i]}
\n"; + } + } + xhtml_footer(); + break; + case "sendfile" : + xhtml_head("文件发送"); + if (count($_SESSION['flist']) < 1) { + echo "
\n"; + echo "[返回]抱歉,没有文件列表!\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "返回目录(接收邮箱)\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "
文件清单(选择列表)
\n"; + for ($i = 0; $i < count($_SESSION['flist']); $i++) { + echo "
[$i] - {$_SESSION['flist'][$i]}
\n"; + } + } + xhtml_footer(); + break; + default : + header("Location: ./404.php"); + exit; +} +?> diff --git a/fileadmin/pclzip.php b/fileadmin/pclzip.php new file mode 100644 index 00000000..0a63b605 --- /dev/null +++ b/fileadmin/pclzip.php @@ -0,0 +1,2 @@ +zipname = $p_zipname; $this->zip_fd = 0; $this->magic_quotes_status = -1; return; } function create($p_filelist) { $v_result=1; $this->privErrorReset(); $v_options = array(); $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; $v_size = func_num_args(); if ($v_size > 1) { $v_arg_list = func_get_args(); array_shift($v_arg_list); $v_size--; if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array (PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_ADD => 'optional', PCLZIP_CB_POST_ADD => 'optional', PCLZIP_OPT_NO_COMPRESSION => 'optional', PCLZIP_OPT_COMMENT => 'optional', PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', PCLZIP_OPT_TEMP_FILE_ON => 'optional', PCLZIP_OPT_TEMP_FILE_OFF => 'optional' )); if ($v_result != 1) { return 0; } } else { $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; if ($v_size == 2) { $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; } else if ($v_size > 2) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); return 0; } } } $this->privOptionDefaultThreshold($v_options); $v_string_list = array(); $v_att_list = array(); $v_filedescr_list = array(); $p_result_list = array(); if (is_array($p_filelist)) { if (isset($p_filelist[0]) && is_array($p_filelist[0])) { $v_att_list = $p_filelist; } else { $v_string_list = $p_filelist; } } else if (is_string($p_filelist)) { $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); return 0; } if (sizeof($v_string_list) != 0) { foreach ($v_string_list as $v_string) { if ($v_string != '') { $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; } else { } } } $v_supported_attributes = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' ,PCLZIP_ATT_FILE_MTIME => 'optional' ,PCLZIP_ATT_FILE_CONTENT => 'optional' ,PCLZIP_ATT_FILE_COMMENT => 'optional' ); foreach ($v_att_list as $v_entry) { $v_result = $this->privFileDescrParseAtt($v_entry, $v_filedescr_list[], $v_options, $v_supported_attributes); if ($v_result != 1) { return 0; } } $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); if ($v_result != 1) { return 0; } $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); if ($v_result != 1) { return 0; } return $p_result_list; } function add($p_filelist) { $v_result=1; $this->privErrorReset(); $v_options = array(); $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; $v_size = func_num_args(); if ($v_size > 1) { $v_arg_list = func_get_args(); array_shift($v_arg_list); $v_size--; if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array (PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_ADD => 'optional', PCLZIP_CB_POST_ADD => 'optional', PCLZIP_OPT_NO_COMPRESSION => 'optional', PCLZIP_OPT_COMMENT => 'optional', PCLZIP_OPT_ADD_COMMENT => 'optional', PCLZIP_OPT_PREPEND_COMMENT => 'optional', PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', PCLZIP_OPT_TEMP_FILE_ON => 'optional', PCLZIP_OPT_TEMP_FILE_OFF => 'optional' )); if ($v_result != 1) { return 0; } } else { $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; if ($v_size == 2) { $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; } else if ($v_size > 2) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); return 0; } } } $this->privOptionDefaultThreshold($v_options); $v_string_list = array(); $v_att_list = array(); $v_filedescr_list = array(); $p_result_list = array(); if (is_array($p_filelist)) { if (isset($p_filelist[0]) && is_array($p_filelist[0])) { $v_att_list = $p_filelist; } else { $v_string_list = $p_filelist; } } else if (is_string($p_filelist)) { $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); return 0; } if (sizeof($v_string_list) != 0) { foreach ($v_string_list as $v_string) { $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; } } $v_supported_attributes = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' ,PCLZIP_ATT_FILE_MTIME => 'optional' ,PCLZIP_ATT_FILE_CONTENT => 'optional' ,PCLZIP_ATT_FILE_COMMENT => 'optional' ); foreach ($v_att_list as $v_entry) { $v_result = $this->privFileDescrParseAtt($v_entry, $v_filedescr_list[], $v_options, $v_supported_attributes); if ($v_result != 1) { return 0; } } $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); if ($v_result != 1) { return 0; } $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); if ($v_result != 1) { return 0; } return $p_result_list; } function listContent() { $v_result=1; $this->privErrorReset(); if (!$this->privCheckFormat()) { return(0); } $p_list = array(); if (($v_result = $this->privList($p_list)) != 1) { unset($p_list); return(0); } return $p_list; } function extract() { $v_result=1; $this->privErrorReset(); if (!$this->privCheckFormat()) { return(0); } $v_options = array(); $v_path = ''; $v_remove_path = ""; $v_remove_all_path = false; $v_size = func_num_args(); $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; if ($v_size > 0) { $v_arg_list = func_get_args(); if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array (PCLZIP_OPT_PATH => 'optional', PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_EXTRACT => 'optional', PCLZIP_CB_POST_EXTRACT => 'optional', PCLZIP_OPT_SET_CHMOD => 'optional', PCLZIP_OPT_BY_NAME => 'optional', PCLZIP_OPT_BY_EREG => 'optional', PCLZIP_OPT_BY_PREG => 'optional', PCLZIP_OPT_BY_INDEX => 'optional', PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', PCLZIP_OPT_REPLACE_NEWER => 'optional' ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', PCLZIP_OPT_TEMP_FILE_ON => 'optional', PCLZIP_OPT_TEMP_FILE_OFF => 'optional' )); if ($v_result != 1) { return 0; } if (isset($v_options[PCLZIP_OPT_PATH])) { $v_path = $v_options[PCLZIP_OPT_PATH]; } if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; } if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; } if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { $v_path .= '/'; } $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; } } else { $v_path = $v_arg_list[0]; if ($v_size == 2) { $v_remove_path = $v_arg_list[1]; } else if ($v_size > 2) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); return 0; } } } $this->privOptionDefaultThreshold($v_options); $p_list = array(); $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options); if ($v_result < 1) { unset($p_list); return(0); } return $p_list; } function extractByIndex($p_index) { $v_result=1; $this->privErrorReset(); if (!$this->privCheckFormat()) { return(0); } $v_options = array(); $v_path = ''; $v_remove_path = ""; $v_remove_all_path = false; $v_size = func_num_args(); $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; if ($v_size > 1) { $v_arg_list = func_get_args(); array_shift($v_arg_list); $v_size--; if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array (PCLZIP_OPT_PATH => 'optional', PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_EXTRACT => 'optional', PCLZIP_CB_POST_EXTRACT => 'optional', PCLZIP_OPT_SET_CHMOD => 'optional', PCLZIP_OPT_REPLACE_NEWER => 'optional' ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', PCLZIP_OPT_TEMP_FILE_ON => 'optional', PCLZIP_OPT_TEMP_FILE_OFF => 'optional' )); if ($v_result != 1) { return 0; } if (isset($v_options[PCLZIP_OPT_PATH])) { $v_path = $v_options[PCLZIP_OPT_PATH]; } if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; } if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; } if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { $v_path .= '/'; } $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; } if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; } else { } } else { $v_path = $v_arg_list[0]; if ($v_size == 2) { $v_remove_path = $v_arg_list[1]; } else if ($v_size > 2) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); return 0; } } } $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); $v_options_trick = array(); $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, array (PCLZIP_OPT_BY_INDEX => 'optional' )); if ($v_result != 1) { return 0; } $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; $this->privOptionDefaultThreshold($v_options); if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { return(0); } return $p_list; } function delete() { $v_result=1; $this->privErrorReset(); if (!$this->privCheckFormat()) { return(0); } $v_options = array(); $v_size = func_num_args(); if ($v_size > 0) { $v_arg_list = func_get_args(); $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array (PCLZIP_OPT_BY_NAME => 'optional', PCLZIP_OPT_BY_EREG => 'optional', PCLZIP_OPT_BY_PREG => 'optional', PCLZIP_OPT_BY_INDEX => 'optional' )); if ($v_result != 1) { return 0; } } $this->privDisableMagicQuotes(); $v_list = array(); if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { $this->privSwapBackMagicQuotes(); unset($v_list); return(0); } $this->privSwapBackMagicQuotes(); return $v_list; } function deleteByIndex($p_index) { $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); return $p_list; } function properties() { $this->privErrorReset(); $this->privDisableMagicQuotes(); if (!$this->privCheckFormat()) { $this->privSwapBackMagicQuotes(); return(0); } $v_prop = array(); $v_prop['comment'] = ''; $v_prop['nb'] = 0; $v_prop['status'] = 'not_exist'; if (@is_file($this->zipname)) { if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); return 0; } $v_central_dir = array(); if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { $this->privSwapBackMagicQuotes(); return 0; } $this->privCloseFd(); $v_prop['comment'] = $v_central_dir['comment']; $v_prop['nb'] = $v_central_dir['entries']; $v_prop['status'] = 'ok'; } $this->privSwapBackMagicQuotes(); return $v_prop; } function duplicate($p_archive) { $v_result = 1; $this->privErrorReset(); if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) { $v_result = $this->privDuplicate($p_archive->zipname); } else if (is_string($p_archive)) { if (!is_file($p_archive)) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); $v_result = PCLZIP_ERR_MISSING_FILE; } else { $v_result = $this->privDuplicate($p_archive); } } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); $v_result = PCLZIP_ERR_INVALID_PARAMETER; } return $v_result; } function merge($p_archive_to_add) { $v_result = 1; $this->privErrorReset(); if (!$this->privCheckFormat()) { return(0); } if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) { $v_result = $this->privMerge($p_archive_to_add); } else if (is_string($p_archive_to_add)) { $v_object_archive = new PclZip($p_archive_to_add); $v_result = $this->privMerge($v_object_archive); } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); $v_result = PCLZIP_ERR_INVALID_PARAMETER; } return $v_result; } function errorCode() { if (PCLZIP_ERROR_EXTERNAL == 1) { return(PclErrorCode()); } else { return($this->error_code); } } function errorName($p_with_code=false) { $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' ); if (isset($v_name[$this->error_code])) { $v_value = $v_name[$this->error_code]; } else { $v_value = 'NoName'; } if ($p_with_code) { return($v_value.' ('.$this->error_code.')'); } else { return($v_value); } } function errorInfo($p_full=false) { if (PCLZIP_ERROR_EXTERNAL == 1) { return(PclErrorString()); } else { if ($p_full) { return($this->errorName(true)." : ".$this->error_string); } else { return($this->error_string." [code ".$this->error_code."]"); } } } function privCheckFormat($p_level=0) { $v_result = true; clearstatcache(); $this->privErrorReset(); if (!is_file($this->zipname)) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); return(false); } if (!is_readable($this->zipname)) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); return(false); } return $v_result; } function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) { $v_result=1; $i=0; while ($i<$p_size) { if (!isset($v_requested_options[$p_options_list[$i]])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); return PclZip::errorCode(); } switch ($p_options_list[$i]) { case PCLZIP_OPT_PATH : case PCLZIP_OPT_REMOVE_PATH : case PCLZIP_OPT_ADD_PATH : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); $i++; break; case PCLZIP_OPT_TEMP_FILE_THRESHOLD : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); return PclZip::errorCode(); } $v_value = $p_options_list[$i+1]; if ((!is_integer($v_value)) || ($v_value<0)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_result_list[$p_options_list[$i]] = $v_value*1048576; $i++; break; case PCLZIP_OPT_TEMP_FILE_ON : if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); return PclZip::errorCode(); } $v_result_list[$p_options_list[$i]] = true; break; case PCLZIP_OPT_TEMP_FILE_OFF : if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); return PclZip::errorCode(); } if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); return PclZip::errorCode(); } $v_result_list[$p_options_list[$i]] = true; break; case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } if ( is_string($p_options_list[$i+1]) && ($p_options_list[$i+1] != '')) { $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); $i++; } else { } break; case PCLZIP_OPT_BY_NAME : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } if (is_string($p_options_list[$i+1])) { $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; } else if (is_array($p_options_list[$i+1])) { $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $i++; break; case PCLZIP_OPT_BY_EREG : $p_options_list[$i] = PCLZIP_OPT_BY_PREG; case PCLZIP_OPT_BY_PREG : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } if (is_string($p_options_list[$i+1])) { $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $i++; break; case PCLZIP_OPT_COMMENT : case PCLZIP_OPT_ADD_COMMENT : case PCLZIP_OPT_PREPEND_COMMENT : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" .PclZipUtilOptionText($p_options_list[$i]) ."'"); return PclZip::errorCode(); } if (is_string($p_options_list[$i+1])) { $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" .PclZipUtilOptionText($p_options_list[$i]) ."'"); return PclZip::errorCode(); } $i++; break; case PCLZIP_OPT_BY_INDEX : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_work_list = array(); if (is_string($p_options_list[$i+1])) { $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); $v_work_list = explode(",", $p_options_list[$i+1]); } else if (is_integer($p_options_list[$i+1])) { $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; } else if (is_array($p_options_list[$i+1])) { $v_work_list = $p_options_list[$i+1]; } else { PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_sort_flag=false; $v_sort_value=0; for ($j=0; $j= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; $i++; break; case PCLZIP_CB_PRE_EXTRACT : case PCLZIP_CB_POST_EXTRACT : case PCLZIP_CB_PRE_ADD : case PCLZIP_CB_POST_ADD : if (($i+1) >= $p_size) { PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_function_name = $p_options_list[$i+1]; if (!function_exists($v_function_name)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); return PclZip::errorCode(); } $v_result_list[$p_options_list[$i]] = $v_function_name; $i++; break; default : PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Unknown parameter '" .$p_options_list[$i]."'"); return PclZip::errorCode(); } $i++; } if ($v_requested_options !== false) { for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { if ($v_requested_options[$key] == 'mandatory') { if (!isset($v_result_list[$key])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); return PclZip::errorCode(); } } } } if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { } return $v_result; } function privOptionDefaultThreshold(&$p_options) { $v_result=1; if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { return $v_result; } $v_memory_limit = ini_get('memory_limit'); $v_memory_limit = trim($v_memory_limit); $last = strtolower(substr($v_memory_limit, -1)); if($last == 'g') $v_memory_limit = $v_memory_limit*1073741824; if($last == 'm') $v_memory_limit = $v_memory_limit*1048576; if($last == 'k') $v_memory_limit = $v_memory_limit*1024; $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); } return $v_result; } function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) { $v_result=1; foreach ($p_file_list as $v_key => $v_value) { if (!isset($v_requested_options[$v_key])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); return PclZip::errorCode(); } switch ($v_key) { case PCLZIP_ATT_FILE_NAME : if (!is_string($v_value)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); if ($p_filedescr['filename'] == '') { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } break; case PCLZIP_ATT_FILE_NEW_SHORT_NAME : if (!is_string($v_value)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); if ($p_filedescr['new_short_name'] == '') { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } break; case PCLZIP_ATT_FILE_NEW_FULL_NAME : if (!is_string($v_value)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); if ($p_filedescr['new_full_name'] == '') { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } break; case PCLZIP_ATT_FILE_COMMENT : if (!is_string($v_value)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } $p_filedescr['comment'] = $v_value; break; case PCLZIP_ATT_FILE_MTIME : if (!is_integer($v_value)) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); return PclZip::errorCode(); } $p_filedescr['mtime'] = $v_value; break; case PCLZIP_ATT_FILE_CONTENT : $p_filedescr['content'] = $v_value; break; default : PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Unknown parameter '".$v_key."'"); return PclZip::errorCode(); } if ($v_requested_options !== false) { for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { if ($v_requested_options[$key] == 'mandatory') { if (!isset($p_file_list[$key])) { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); return PclZip::errorCode(); } } } } } return $v_result; } function privFileDescrExpand(&$p_filedescr_list, &$p_options) { $v_result=1; $v_result_list = array(); for ($i=0; $iprivCalculateStoredFilename($v_descr, $p_options); $v_result_list[sizeof($v_result_list)] = $v_descr; if ($v_descr['type'] == 'folder') { $v_dirlist_descr = array(); $v_dirlist_nb = 0; if ($v_folder_handler = @opendir($v_descr['filename'])) { while (($v_item_handler = @readdir($v_folder_handler)) !== false) { if (($v_item_handler == '.') || ($v_item_handler == '..')) { continue; } $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; if (($v_descr['stored_filename'] != $v_descr['filename']) && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { if ($v_descr['stored_filename'] != '') { $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; } else { $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; } } $v_dirlist_nb++; } @closedir($v_folder_handler); } else { } if ($v_dirlist_nb != 0) { if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { return $v_result; } $v_result_list = array_merge($v_result_list, $v_dirlist_descr); } else { } unset($v_dirlist_descr); } } $p_filedescr_list = $v_result_list; return $v_result; } function privCreate($p_filedescr_list, &$p_result_list, &$p_options) { $v_result=1; $v_list_detail = array(); $this->privDisableMagicQuotes(); if (($v_result = $this->privOpenFd('wb')) != 1) { return $v_result; } $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } function privAdd($p_filedescr_list, &$p_result_list, &$p_options) { $v_result=1; $v_list_detail = array(); if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) { $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); return $v_result; } $this->privDisableMagicQuotes(); if (($v_result=$this->privOpenFd('rb')) != 1) { $this->privSwapBackMagicQuotes(); return $v_result; } $v_central_dir = array(); if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } @rewind($this->zip_fd); $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); return PclZip::errorCode(); } $v_size = $v_central_dir['offset']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = fread($this->zip_fd, $v_read_size); @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $v_swap = $this->zip_fd; $this->zip_fd = $v_zip_temp_fd; $v_zip_temp_fd = $v_swap; $v_header_list = array(); if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) { fclose($v_zip_temp_fd); $this->privCloseFd(); @unlink($v_zip_temp_name); $this->privSwapBackMagicQuotes(); return $v_result; } $v_offset = @ftell($this->zip_fd); $v_size = $v_central_dir['size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($v_zip_temp_fd, $v_read_size); @fwrite($this->zip_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } for ($i=0, $v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { fclose($v_zip_temp_fd); $this->privCloseFd(); @unlink($v_zip_temp_name); $this->privSwapBackMagicQuotes(); return $v_result; } $v_count++; } $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); } $v_comment = $v_central_dir['comment']; if (isset($p_options[PCLZIP_OPT_COMMENT])) { $v_comment = $p_options[PCLZIP_OPT_COMMENT]; } if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; } if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; } $v_size = @ftell($this->zip_fd)-$v_offset; if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) { unset($v_header_list); $this->privSwapBackMagicQuotes(); return $v_result; } $v_swap = $this->zip_fd; $this->zip_fd = $v_zip_temp_fd; $v_zip_temp_fd = $v_swap; $this->privCloseFd(); @fclose($v_zip_temp_fd); $this->privSwapBackMagicQuotes(); @unlink($this->zipname); PclZipUtilRename($v_zip_temp_name, $this->zipname); return $v_result; } function privOpenFd($p_mode) { $v_result=1; if ($this->zip_fd != 0) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); return PclZip::errorCode(); } if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); return PclZip::errorCode(); } return $v_result; } function privCloseFd() { $v_result=1; if ($this->zip_fd != 0) @fclose($this->zip_fd); $this->zip_fd = 0; return $v_result; } function privAddList($p_filedescr_list, &$p_result_list, &$p_options) { $v_result=1; $v_header_list = array(); if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) { return $v_result; } $v_offset = @ftell($this->zip_fd); for ($i=0,$v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { return $v_result; } $v_count++; } $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); } $v_comment = ''; if (isset($p_options[PCLZIP_OPT_COMMENT])) { $v_comment = $p_options[PCLZIP_OPT_COMMENT]; } $v_size = @ftell($this->zip_fd)-$v_offset; if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) { unset($v_header_list); return $v_result; } return $v_result; } function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) { $v_result=1; $v_header = array(); $v_nb = sizeof($p_result_list); for ($j=0; ($jprivAddFile($p_filedescr_list[$j], $v_header, $p_options); if ($v_result != 1) { return $v_result; } $p_result_list[$v_nb++] = $v_header; } } return $v_result; } function privAddFile($p_filedescr, &$p_header, &$p_options) { $v_result=1; $p_filename = $p_filedescr['filename']; if ($p_filename == "") { PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); return PclZip::errorCode(); } clearstatcache(); $p_header['version'] = 20; $p_header['version_extracted'] = 10; $p_header['flag'] = 0; $p_header['compression'] = 0; $p_header['crc'] = 0; $p_header['compressed_size'] = 0; $p_header['filename_len'] = strlen($p_filename); $p_header['extra_len'] = 0; $p_header['disk'] = 0; $p_header['internal'] = 0; $p_header['offset'] = 0; $p_header['filename'] = $p_filename; $p_header['stored_filename'] = $p_filedescr['stored_filename']; $p_header['extra'] = ''; $p_header['status'] = 'ok'; $p_header['index'] = -1; if ($p_filedescr['type']=='file') { $p_header['external'] = 0x00000000; $p_header['size'] = filesize($p_filename); } else if ($p_filedescr['type']=='folder') { $p_header['external'] = 0x00000010; $p_header['mtime'] = filemtime($p_filename); $p_header['size'] = filesize($p_filename); } else if ($p_filedescr['type'] == 'virtual_file') { $p_header['external'] = 0x00000000; $p_header['size'] = strlen($p_filedescr['content']); } if (isset($p_filedescr['mtime'])) { $p_header['mtime'] = $p_filedescr['mtime']; } else if ($p_filedescr['type'] == 'virtual_file') { $p_header['mtime'] = time(); } else { $p_header['mtime'] = filemtime($p_filename); } if (isset($p_filedescr['comment'])) { $p_header['comment_len'] = strlen($p_filedescr['comment']); $p_header['comment'] = $p_filedescr['comment']; } else { $p_header['comment_len'] = 0; $p_header['comment'] = ''; } if (isset($p_options[PCLZIP_CB_PRE_ADD])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_header, $v_local_header); $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); if ($v_result == 0) { $p_header['status'] = "skipped"; $v_result = 1; } if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); } } if ($p_header['stored_filename'] == "") { $p_header['status'] = "filtered"; } if (strlen($p_header['stored_filename']) > 0xFF) { $p_header['status'] = 'filename_too_long'; } if ($p_header['status'] == 'ok') { if ($p_filedescr['type'] == 'file') { if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); if ($v_result < PCLZIP_ERR_NO_ERROR) { return $v_result; } } else { if (($v_file = @fopen($p_filename, "rb")) == 0) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); return PclZip::errorCode(); } $v_content = @fread($v_file, $p_header['size']); @fclose($v_file); $p_header['crc'] = @crc32($v_content); if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { $p_header['compressed_size'] = $p_header['size']; $p_header['compression'] = 0; } else { $v_content = @gzdeflate($v_content); $p_header['compressed_size'] = strlen($v_content); $p_header['compression'] = 8; } if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { @fclose($v_file); return $v_result; } @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); } } else if ($p_filedescr['type'] == 'virtual_file') { $v_content = $p_filedescr['content']; $p_header['crc'] = @crc32($v_content); if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { $p_header['compressed_size'] = $p_header['size']; $p_header['compression'] = 0; } else { $v_content = @gzdeflate($v_content); $p_header['compressed_size'] = strlen($v_content); $p_header['compression'] = 8; } if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { @fclose($v_file); return $v_result; } @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); } else if ($p_filedescr['type'] == 'folder') { if (@substr($p_header['stored_filename'], -1) != '/') { $p_header['stored_filename'] .= '/'; } $p_header['size'] = 0; $p_header['external'] = 0x00000010; if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { return $v_result; } } } if (isset($p_options[PCLZIP_CB_POST_ADD])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_header, $v_local_header); $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); if ($v_result == 0) { $v_result = 1; } } return $v_result; } function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) { $v_result=PCLZIP_ERR_NO_ERROR; $p_filename = $p_filedescr['filename']; if (($v_file = @fopen($p_filename, "rb")) == 0) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); return PclZip::errorCode(); } $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { fclose($v_file); PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); return PclZip::errorCode(); } $v_size = filesize($p_filename); while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($v_file, $v_read_size); @gzputs($v_file_compressed, $v_buffer, $v_read_size); $v_size -= $v_read_size; } @fclose($v_file); @gzclose($v_file_compressed); if (filesize($v_gzip_temp_name) < 18) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); return PclZip::errorCode(); } if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); return PclZip::errorCode(); } $v_binary_data = @fread($v_file_compressed, 10); $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); $v_data_header['os'] = bin2hex($v_data_header['os']); @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); $v_binary_data = @fread($v_file_compressed, 8); $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); $p_header['compression'] = ord($v_data_header['cm']); $p_header['crc'] = $v_data_footer['crc']; $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; @fclose($v_file_compressed); if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { return $v_result; } if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); return PclZip::errorCode(); } fseek($v_file_compressed, 10); $v_size = $p_header['compressed_size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($v_file_compressed, $v_read_size); @fwrite($this->zip_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } @fclose($v_file_compressed); @unlink($v_gzip_temp_name); return $v_result; } function privCalculateStoredFilename(&$p_filedescr, &$p_options) { $v_result=1; $p_filename = $p_filedescr['filename']; if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; } else { $p_add_dir = ''; } if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; } else { $p_remove_dir = ''; } if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; } else { $p_remove_all_dir = 0; } if (isset($p_filedescr['new_full_name'])) { $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); } else { if (isset($p_filedescr['new_short_name'])) { $v_path_info = pathinfo($p_filename); $v_dir = ''; if ($v_path_info['dirname'] != '') { $v_dir = $v_path_info['dirname'].'/'; } $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; } else { $v_stored_filename = $p_filename; } if ($p_remove_all_dir) { $v_stored_filename = basename($p_filename); } else if ($p_remove_dir != "") { if (substr($p_remove_dir, -1) != '/') $p_remove_dir .= "/"; if ( (substr($p_filename, 0, 2) == "./") || (substr($p_remove_dir, 0, 2) == "./")) { if ( (substr($p_filename, 0, 2) == "./") && (substr($p_remove_dir, 0, 2) != "./")) { $p_remove_dir = "./".$p_remove_dir; } if ( (substr($p_filename, 0, 2) != "./") && (substr($p_remove_dir, 0, 2) == "./")) { $p_remove_dir = substr($p_remove_dir, 2); } } $v_compare = PclZipUtilPathInclusion($p_remove_dir, $v_stored_filename); if ($v_compare > 0) { if ($v_compare == 2) { $v_stored_filename = ""; } else { $v_stored_filename = substr($v_stored_filename, strlen($p_remove_dir)); } } } $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); if ($p_add_dir != "") { if (substr($p_add_dir, -1) == "/") $v_stored_filename = $p_add_dir.$v_stored_filename; else $v_stored_filename = $p_add_dir."/".$v_stored_filename; } } $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); $p_filedescr['stored_filename'] = $v_stored_filename; return $v_result; } function privWriteFileHeader(&$p_header) { $v_result=1; $p_header['offset'] = ftell($this->zip_fd); $v_date = getdate($p_header['mtime']); $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, $p_header['version_extracted'], $p_header['flag'], $p_header['compression'], $v_mtime, $v_mdate, $p_header['crc'], $p_header['compressed_size'], $p_header['size'], strlen($p_header['stored_filename']), $p_header['extra_len']); fputs($this->zip_fd, $v_binary_data, 30); if (strlen($p_header['stored_filename']) != 0) { fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); } if ($p_header['extra_len'] != 0) { fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); } return $v_result; } function privWriteCentralFileHeader(&$p_header) { $v_result=1; $v_date = getdate($p_header['mtime']); $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, $p_header['version'], $p_header['version_extracted'], $p_header['flag'], $p_header['compression'], $v_mtime, $v_mdate, $p_header['crc'], $p_header['compressed_size'], $p_header['size'], strlen($p_header['stored_filename']), $p_header['extra_len'], $p_header['comment_len'], $p_header['disk'], $p_header['internal'], $p_header['external'], $p_header['offset']); fputs($this->zip_fd, $v_binary_data, 46); if (strlen($p_header['stored_filename']) != 0) { fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); } if ($p_header['extra_len'] != 0) { fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); } if ($p_header['comment_len'] != 0) { fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); } return $v_result; } function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) { $v_result=1; $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, $p_nb_entries, $p_size, $p_offset, strlen($p_comment)); fputs($this->zip_fd, $v_binary_data, 22); if (strlen($p_comment) != 0) { fputs($this->zip_fd, $p_comment, strlen($p_comment)); } return $v_result; } function privList(&$p_list) { $v_result=1; $this->privDisableMagicQuotes(); if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); return PclZip::errorCode(); } $v_central_dir = array(); if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { $this->privSwapBackMagicQuotes(); return $v_result; } @rewind($this->zip_fd); if (@fseek($this->zip_fd, $v_central_dir['offset'])) { $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); return PclZip::errorCode(); } for ($i=0; $i<$v_central_dir['entries']; $i++) { if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { $this->privSwapBackMagicQuotes(); return $v_result; } $v_header['index'] = $i; $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); unset($v_header); } $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } function privConvertHeader2FileInfo($p_header, &$p_info) { $v_result=1; $v_temp_path = PclZipUtilPathReduction($p_header['filename']); $p_info['filename'] = $v_temp_path; $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); $p_info['stored_filename'] = $v_temp_path; $p_info['size'] = $p_header['size']; $p_info['compressed_size'] = $p_header['compressed_size']; $p_info['mtime'] = $p_header['mtime']; $p_info['comment'] = $p_header['comment']; $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); $p_info['index'] = $p_header['index']; $p_info['status'] = $p_header['status']; $p_info['crc'] = $p_header['crc']; return $v_result; } function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) { $v_result=1; $this->privDisableMagicQuotes(); if ( ($p_path == "") || ( (substr($p_path, 0, 1) != "/") && (substr($p_path, 0, 3) != "../") && (substr($p_path,1,2)!=":/"))) $p_path = "./".$p_path; if (($p_path != "./") && ($p_path != "/")) { while (substr($p_path, -1) == "/") { $p_path = substr($p_path, 0, strlen($p_path)-1); } } if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) { $p_remove_path .= '/'; } $p_remove_path_size = strlen($p_remove_path); if (($v_result = $this->privOpenFd('rb')) != 1) { $this->privSwapBackMagicQuotes(); return $v_result; } $v_central_dir = array(); if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } $v_pos_entry = $v_central_dir['offset']; $j_start = 0; for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) { @rewind($this->zip_fd); if (@fseek($this->zip_fd, $v_pos_entry)) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); return PclZip::errorCode(); } $v_header = array(); if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } $v_header['index'] = $i; $v_pos_entry = ftell($this->zip_fd); $v_extract = false; if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { $v_extract = true; } } elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { $v_extract = true; } } } else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { $v_extract = true; } } else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { $v_extract = true; } if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { $j_start = $j+1; } if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { break; } } } else { $v_extract = true; } if ( ($v_extract) && ( ($v_header['compression'] != 8) && ($v_header['compression'] != 0))) { $v_header['status'] = 'unsupported_compression'; if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, "Filename '".$v_header['stored_filename']."' is " ."compressed by an unsupported compression " ."method (".$v_header['compression'].") "); return PclZip::errorCode(); } } if (($v_extract) && (($v_header['flag'] & 1) == 1)) { $v_header['status'] = 'unsupported_encryption'; if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, "Unsupported encryption for " ." filename '".$v_header['stored_filename'] ."'"); return PclZip::errorCode(); } } if (($v_extract) && ($v_header['status'] != 'ok')) { $v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++]); if ($v_result != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } $v_extract = false; } if ($v_extract) { @rewind($this->zip_fd); if (@fseek($this->zip_fd, $v_header['offset'])) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); return PclZip::errorCode(); } if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { $v_string = ''; $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); if ($v_result1 < 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result1; } if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } $p_file_list[$v_nb_extracted]['content'] = $v_string; $v_nb_extracted++; if ($v_result1 == 2) { break; } } elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); if ($v_result1 < 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result1; } if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } if ($v_result1 == 2) { break; } } else { $v_result1 = $this->privExtractFile($v_header, $p_path, $p_remove_path, $p_remove_all_path, $p_options); if ($v_result1 < 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result1; } if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } if ($v_result1 == 2) { break; } } } } $this->privCloseFd(); $this->privSwapBackMagicQuotes(); return $v_result; } function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) { $v_result=1; if (($v_result = $this->privReadFileHeader($v_header)) != 1) { return $v_result; } if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { } if ($p_remove_all_path == true) { if (($p_entry['external']&0x00000010)==0x00000010) { $p_entry['status'] = "filtered"; return $v_result; } $p_entry['filename'] = basename($p_entry['filename']); } else if ($p_remove_path != "") { if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) { $p_entry['status'] = "filtered"; return $v_result; } $p_remove_path_size = strlen($p_remove_path); if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) { $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); } } if ($p_path != '') { $p_entry['filename'] = $p_path."/".$p_entry['filename']; } if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { $v_inclusion = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], $p_entry['filename']); if ($v_inclusion == 0) { PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, "Filename '".$p_entry['filename']."' is " ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); return PclZip::errorCode(); } } if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_entry, $v_local_header); $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); if ($v_result == 0) { $p_entry['status'] = "skipped"; $v_result = 1; } if ($v_result == 2) { $p_entry['status'] = "aborted"; $v_result = PCLZIP_ERR_USER_ABORTED; } $p_entry['filename'] = $v_local_header['filename']; } if ($p_entry['status'] == 'ok') { if (file_exists($p_entry['filename'])) { if (is_dir($p_entry['filename'])) { $p_entry['status'] = "already_a_directory"; if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, "Filename '".$p_entry['filename']."' is " ."already used by an existing directory"); return PclZip::errorCode(); } } else if (!is_writeable($p_entry['filename'])) { $p_entry['status'] = "write_protected"; if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, "Filename '".$p_entry['filename']."' exists " ."and is write protected"); return PclZip::errorCode(); } } else if (filemtime($p_entry['filename']) > $p_entry['mtime']) { if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { } else { $p_entry['status'] = "newer_exist"; if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, "Newer version of '".$p_entry['filename']."' exists " ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); return PclZip::errorCode(); } } } else { } } else { if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) $v_dir_to_check = $p_entry['filename']; else if (!strstr($p_entry['filename'], "/")) $v_dir_to_check = ""; else $v_dir_to_check = dirname($p_entry['filename']); if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { $p_entry['status'] = "path_creation_fail"; $v_result = 1; } } } if ($p_entry['status'] == 'ok') { if (!(($p_entry['external']&0x00000010)==0x00000010)) { if ($p_entry['compression'] == 0) { if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { $p_entry['status'] = "write_error"; return $v_result; } $v_size = $p_entry['compressed_size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($this->zip_fd, $v_read_size); @fwrite($v_dest_file, $v_buffer, $v_read_size); $v_size -= $v_read_size; } fclose($v_dest_file); touch($p_entry['filename'], $p_entry['mtime']); } else { if (($p_entry['flag'] & 1) == 1) { PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); return PclZip::errorCode(); } if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); if ($v_result < PCLZIP_ERR_NO_ERROR) { return $v_result; } } else { $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); $v_file_content = @gzinflate($v_buffer); unset($v_buffer); if ($v_file_content === FALSE) { $p_entry['status'] = "error"; return $v_result; } if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { $p_entry['status'] = "write_error"; return $v_result; } @fwrite($v_dest_file, $v_file_content, $p_entry['size']); unset($v_file_content); @fclose($v_dest_file); } @touch($p_entry['filename'], $p_entry['mtime']); } if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); } } } if ($p_entry['status'] == "aborted") { $p_entry['status'] = "skipped"; } elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_entry, $v_local_header); $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); if ($v_result == 2) { $v_result = PCLZIP_ERR_USER_ABORTED; } } return $v_result; } function privExtractFileUsingTempFile(&$p_entry, &$p_options) { $v_result=1; $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { fclose($v_file); PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); return PclZip::errorCode(); } $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); @fwrite($v_dest_file, $v_binary_data, 10); $v_size = $p_entry['compressed_size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($this->zip_fd, $v_read_size); @fwrite($v_dest_file, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); @fwrite($v_dest_file, $v_binary_data, 8); @fclose($v_dest_file); if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { $p_entry['status'] = "write_error"; return $v_result; } if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { @fclose($v_dest_file); $p_entry['status'] = "read_error"; PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); return PclZip::errorCode(); } $v_size = $p_entry['size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @gzread($v_src_file, $v_read_size); @fwrite($v_dest_file, $v_buffer, $v_read_size); $v_size -= $v_read_size; } @fclose($v_dest_file); @gzclose($v_src_file); @unlink($v_gzip_temp_name); return $v_result; } function privExtractFileInOutput(&$p_entry, &$p_options) { $v_result=1; if (($v_result = $this->privReadFileHeader($v_header)) != 1) { return $v_result; } if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { } if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_entry, $v_local_header); $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); if ($v_result == 0) { $p_entry['status'] = "skipped"; $v_result = 1; } if ($v_result == 2) { $p_entry['status'] = "aborted"; $v_result = PCLZIP_ERR_USER_ABORTED; } $p_entry['filename'] = $v_local_header['filename']; } if ($p_entry['status'] == 'ok') { if (!(($p_entry['external']&0x00000010)==0x00000010)) { if ($p_entry['compressed_size'] == $p_entry['size']) { $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); echo $v_buffer; unset($v_buffer); } else { $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); $v_file_content = gzinflate($v_buffer); unset($v_buffer); echo $v_file_content; unset($v_file_content); } } } if ($p_entry['status'] == "aborted") { $p_entry['status'] = "skipped"; } elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_entry, $v_local_header); $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); if ($v_result == 2) { $v_result = PCLZIP_ERR_USER_ABORTED; } } return $v_result; } function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) { $v_result=1; $v_header = array(); if (($v_result = $this->privReadFileHeader($v_header)) != 1) { return $v_result; } if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { } if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_entry, $v_local_header); $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); if ($v_result == 0) { $p_entry['status'] = "skipped"; $v_result = 1; } if ($v_result == 2) { $p_entry['status'] = "aborted"; $v_result = PCLZIP_ERR_USER_ABORTED; } $p_entry['filename'] = $v_local_header['filename']; } if ($p_entry['status'] == 'ok') { if (!(($p_entry['external']&0x00000010)==0x00000010)) { if ($p_entry['compression'] == 0) { $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); } else { $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); if (($p_string = @gzinflate($v_data)) === FALSE) { } } } else { } } if ($p_entry['status'] == "aborted") { $p_entry['status'] = "skipped"; } elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { $v_local_header = array(); $this->privConvertHeader2FileInfo($p_entry, $v_local_header); $v_local_header['content'] = $p_string; $p_string = ''; $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); $p_string = $v_local_header['content']; unset($v_local_header['content']); if ($v_result == 2) { $v_result = PCLZIP_ERR_USER_ABORTED; } } return $v_result; } function privReadFileHeader(&$p_header) { $v_result=1; $v_binary_data = @fread($this->zip_fd, 4); $v_data = unpack('Vid', $v_binary_data); if ($v_data['id'] != 0x04034b50) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); return PclZip::errorCode(); } $v_binary_data = fread($this->zip_fd, 26); if (strlen($v_binary_data) != 26) { $p_header['filename'] = ""; $p_header['status'] = "invalid_header"; PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); return PclZip::errorCode(); } $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); if ($v_data['extra_len'] != 0) { $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); } else { $p_header['extra'] = ''; } $p_header['version_extracted'] = $v_data['version']; $p_header['compression'] = $v_data['compression']; $p_header['size'] = $v_data['size']; $p_header['compressed_size'] = $v_data['compressed_size']; $p_header['crc'] = $v_data['crc']; $p_header['flag'] = $v_data['flag']; $p_header['filename_len'] = $v_data['filename_len']; $p_header['mdate'] = $v_data['mdate']; $p_header['mtime'] = $v_data['mtime']; if ($p_header['mdate'] && $p_header['mtime']) { $v_hour = ($p_header['mtime'] & 0xF800) >> 11; $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; $v_seconde = ($p_header['mtime'] & 0x001F)*2; $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; $v_month = ($p_header['mdate'] & 0x01E0) >> 5; $v_day = $p_header['mdate'] & 0x001F; $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); } else { $p_header['mtime'] = time(); } $p_header['stored_filename'] = $p_header['filename']; $p_header['status'] = "ok"; return $v_result; } function privReadCentralFileHeader(&$p_header) { $v_result=1; $v_binary_data = @fread($this->zip_fd, 4); $v_data = unpack('Vid', $v_binary_data); if ($v_data['id'] != 0x02014b50) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); return PclZip::errorCode(); } $v_binary_data = fread($this->zip_fd, 42); if (strlen($v_binary_data) != 42) { $p_header['filename'] = ""; $p_header['status'] = "invalid_header"; PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); return PclZip::errorCode(); } $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); if ($p_header['filename_len'] != 0) $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); else $p_header['filename'] = ''; if ($p_header['extra_len'] != 0) $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); else $p_header['extra'] = ''; if ($p_header['comment_len'] != 0) $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); else $p_header['comment'] = ''; if (1) { $v_hour = ($p_header['mtime'] & 0xF800) >> 11; $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; $v_seconde = ($p_header['mtime'] & 0x001F)*2; $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; $v_month = ($p_header['mdate'] & 0x01E0) >> 5; $v_day = $p_header['mdate'] & 0x001F; $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); } else { $p_header['mtime'] = time(); } $p_header['stored_filename'] = $p_header['filename']; $p_header['status'] = 'ok'; if (substr($p_header['filename'], -1) == '/') { $p_header['external'] = 0x00000010; } return $v_result; } function privCheckFileHeaders(&$p_local_header, &$p_central_header) { $v_result=1; if ($p_local_header['filename'] != $p_central_header['filename']) { } if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { } if ($p_local_header['flag'] != $p_central_header['flag']) { } if ($p_local_header['compression'] != $p_central_header['compression']) { } if ($p_local_header['mtime'] != $p_central_header['mtime']) { } if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { } if (($p_local_header['flag'] & 8) == 8) { $p_local_header['size'] = $p_central_header['size']; $p_local_header['compressed_size'] = $p_central_header['compressed_size']; $p_local_header['crc'] = $p_central_header['crc']; } return $v_result; } function privReadEndCentralDir(&$p_central_dir) { $v_result=1; $v_size = filesize($this->zipname); @fseek($this->zip_fd, $v_size); if (@ftell($this->zip_fd) != $v_size) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); return PclZip::errorCode(); } $v_found = 0; if ($v_size > 26) { @fseek($this->zip_fd, $v_size-22); if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); return PclZip::errorCode(); } $v_binary_data = @fread($this->zip_fd, 4); $v_data = @unpack('Vid', $v_binary_data); if ($v_data['id'] == 0x06054b50) { $v_found = 1; } $v_pos = ftell($this->zip_fd); } if (!$v_found) { $v_maximum_size = 65557; if ($v_maximum_size > $v_size) $v_maximum_size = $v_size; @fseek($this->zip_fd, $v_size-$v_maximum_size); if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); return PclZip::errorCode(); } $v_pos = ftell($this->zip_fd); $v_bytes = 0x00000000; while ($v_pos < $v_size) { $v_byte = @fread($this->zip_fd, 1); $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); if ($v_bytes == 0x504b0506) { $v_pos++; break; } $v_pos++; } if ($v_pos == $v_size) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); return PclZip::errorCode(); } } $v_binary_data = fread($this->zip_fd, 18); if (strlen($v_binary_data) != 18) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); return PclZip::errorCode(); } $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { if (0) { PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'The central dir is not at the end of the archive.' .' Some trailing bytes exists after the archive.'); return PclZip::errorCode(); } } if ($v_data['comment_size'] != 0) { $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); } else $p_central_dir['comment'] = ''; $p_central_dir['entries'] = $v_data['entries']; $p_central_dir['disk_entries'] = $v_data['disk_entries']; $p_central_dir['offset'] = $v_data['offset']; $p_central_dir['size'] = $v_data['size']; $p_central_dir['disk'] = $v_data['disk']; $p_central_dir['disk_start'] = $v_data['disk_start']; return $v_result; } function privDeleteByRule(&$p_result_list, &$p_options) { $v_result=1; $v_list_detail = array(); if (($v_result=$this->privOpenFd('rb')) != 1) { return $v_result; } $v_central_dir = array(); if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { $this->privCloseFd(); return $v_result; } @rewind($this->zip_fd); $v_pos_entry = $v_central_dir['offset']; @rewind($this->zip_fd); if (@fseek($this->zip_fd, $v_pos_entry)) { $this->privCloseFd(); PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); return PclZip::errorCode(); } $v_header_list = array(); $j_start = 0; for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) { $v_header_list[$v_nb_extracted] = array(); if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) { $this->privCloseFd(); return $v_result; } $v_header_list[$v_nb_extracted]['index'] = $i; $v_found = false; if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { $v_found = true; } elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { $v_found = true; } } elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { $v_found = true; } } } else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { $v_found = true; } } else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { $v_found = true; } if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { $j_start = $j+1; } if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { break; } } } else { $v_found = true; } if ($v_found) { unset($v_header_list[$v_nb_extracted]); } else { $v_nb_extracted++; } } if ($v_nb_extracted > 0) { $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; $v_temp_zip = new PclZip($v_zip_temp_name); if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { $this->privCloseFd(); return $v_result; } for ($i=0; $izip_fd); if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { $this->privCloseFd(); $v_temp_zip->privCloseFd(); @unlink($v_zip_temp_name); PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); return PclZip::errorCode(); } $v_local_header = array(); if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { $this->privCloseFd(); $v_temp_zip->privCloseFd(); @unlink($v_zip_temp_name); return $v_result; } if ($this->privCheckFileHeaders($v_local_header, $v_header_list[$i]) != 1) { } unset($v_local_header); if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { $this->privCloseFd(); $v_temp_zip->privCloseFd(); @unlink($v_zip_temp_name); return $v_result; } if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { $this->privCloseFd(); $v_temp_zip->privCloseFd(); @unlink($v_zip_temp_name); return $v_result; } } $v_offset = @ftell($v_temp_zip->zip_fd); for ($i=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { $v_temp_zip->privCloseFd(); $this->privCloseFd(); @unlink($v_zip_temp_name); return $v_result; } $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); } $v_comment = ''; if (isset($p_options[PCLZIP_OPT_COMMENT])) { $v_comment = $p_options[PCLZIP_OPT_COMMENT]; } $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { unset($v_header_list); $v_temp_zip->privCloseFd(); $this->privCloseFd(); @unlink($v_zip_temp_name); return $v_result; } $v_temp_zip->privCloseFd(); $this->privCloseFd(); @unlink($this->zipname); PclZipUtilRename($v_zip_temp_name, $this->zipname); unset($v_temp_zip); } else if ($v_central_dir['entries'] != 0) { $this->privCloseFd(); if (($v_result = $this->privOpenFd('wb')) != 1) { return $v_result; } if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { return $v_result; } $this->privCloseFd(); } return $v_result; } function privDirCheck($p_dir, $p_is_dir=false) { $v_result = 1; if (($p_is_dir) && (substr($p_dir, -1)=='/')) { $p_dir = substr($p_dir, 0, strlen($p_dir)-1); } if ((is_dir($p_dir)) || ($p_dir == "")) { return 1; } $p_parent_dir = dirname($p_dir); if ($p_parent_dir != $p_dir) { if ($p_parent_dir != "") { if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) { return $v_result; } } } if (!@mkdir($p_dir, 0777)) { PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); return PclZip::errorCode(); } return $v_result; } function privMerge(&$p_archive_to_add) { $v_result=1; if (!is_file($p_archive_to_add->zipname)) { $v_result = 1; return $v_result; } if (!is_file($this->zipname)) { $v_result = $this->privDuplicate($p_archive_to_add->zipname); return $v_result; } if (($v_result=$this->privOpenFd('rb')) != 1) { return $v_result; } $v_central_dir = array(); if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { $this->privCloseFd(); return $v_result; } @rewind($this->zip_fd); if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) { $this->privCloseFd(); return $v_result; } $v_central_dir_to_add = array(); if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) { $this->privCloseFd(); $p_archive_to_add->privCloseFd(); return $v_result; } @rewind($p_archive_to_add->zip_fd); $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) { $this->privCloseFd(); $p_archive_to_add->privCloseFd(); PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); return PclZip::errorCode(); } $v_size = $v_central_dir['offset']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = fread($this->zip_fd, $v_read_size); @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $v_size = $v_central_dir_to_add['offset']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $v_offset = @ftell($v_zip_temp_fd); $v_size = $v_central_dir['size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($this->zip_fd, $v_read_size); @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $v_size = $v_central_dir_to_add['size']; while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; $v_size = @ftell($v_zip_temp_fd)-$v_offset; $v_swap = $this->zip_fd; $this->zip_fd = $v_zip_temp_fd; $v_zip_temp_fd = $v_swap; if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) { $this->privCloseFd(); $p_archive_to_add->privCloseFd(); @fclose($v_zip_temp_fd); $this->zip_fd = null; unset($v_header_list); return $v_result; } $v_swap = $this->zip_fd; $this->zip_fd = $v_zip_temp_fd; $v_zip_temp_fd = $v_swap; $this->privCloseFd(); $p_archive_to_add->privCloseFd(); @fclose($v_zip_temp_fd); @unlink($this->zipname); PclZipUtilRename($v_zip_temp_name, $this->zipname); return $v_result; } function privDuplicate($p_archive_filename) { $v_result=1; if (!is_file($p_archive_filename)) { $v_result = 1; return $v_result; } if (($v_result=$this->privOpenFd('wb')) != 1) { return $v_result; } if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) { $this->privCloseFd(); PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); return PclZip::errorCode(); } $v_size = filesize($p_archive_filename); while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = fread($v_zip_temp_fd, $v_read_size); @fwrite($this->zip_fd, $v_buffer, $v_read_size); $v_size -= $v_read_size; } $this->privCloseFd(); @fclose($v_zip_temp_fd); return $v_result; } function privErrorLog($p_error_code=0, $p_error_string='') { if (PCLZIP_ERROR_EXTERNAL == 1) { PclError($p_error_code, $p_error_string); } else { $this->error_code = $p_error_code; $this->error_string = $p_error_string; } } function privErrorReset() { if (PCLZIP_ERROR_EXTERNAL == 1) { PclErrorReset(); } else { $this->error_code = 0; $this->error_string = ''; } } function privDisableMagicQuotes() { $v_result=1; if ( (!function_exists("get_magic_quotes_runtime")) || (!function_exists("set_magic_quotes_runtime"))) { return $v_result; } if ($this->magic_quotes_status != -1) { return $v_result; } $this->magic_quotes_status = @get_magic_quotes_runtime(); if ($this->magic_quotes_status == 1) { @set_magic_quotes_runtime(0); } return $v_result; } function privSwapBackMagicQuotes() { $v_result=1; if ( (!function_exists("get_magic_quotes_runtime")) || (!function_exists("set_magic_quotes_runtime"))) { return $v_result; } if ($this->magic_quotes_status != -1) { return $v_result; } if ($this->magic_quotes_status == 1) { @set_magic_quotes_runtime($this->magic_quotes_status); } return $v_result; } } function PclZipUtilPathReduction($p_dir) { $v_result = ""; if ($p_dir != "") { $v_list = explode("/", $p_dir); $v_skip = 0; for ($i=sizeof($v_list)-1; $i>=0; $i--) { if ($v_list[$i] == ".") { } else if ($v_list[$i] == "..") { $v_skip++; } else if ($v_list[$i] == "") { if ($i == 0) { $v_result = "/".$v_result; if ($v_skip > 0) { $v_result = $p_dir; $v_skip = 0; } } else if ($i == (sizeof($v_list)-1)) { $v_result = $v_list[$i]; } else { } } else { if ($v_skip > 0) { $v_skip--; } else { $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); } } } if ($v_skip > 0) { while ($v_skip > 0) { $v_result = '../'.$v_result; $v_skip--; } } } return $v_result; } function PclZipUtilPathInclusion($p_dir, $p_path) { $v_result = 1; if ( ($p_dir == '.') || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); } if ( ($p_path == '.') || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); } $v_list_dir = explode("/", $p_dir); $v_list_dir_size = sizeof($v_list_dir); $v_list_path = explode("/", $p_path); $v_list_path_size = sizeof($v_list_path); $i = 0; $j = 0; while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { if ($v_list_dir[$i] == '') { $i++; continue; } if ($v_list_path[$j] == '') { $j++; continue; } if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { $v_result = 0; } $i++; $j++; } if ($v_result) { while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { $v_result = 2; } else if ($i < $v_list_dir_size) { $v_result = 0; } } return $v_result; } function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) { $v_result = 1; if ($p_mode==0) { while ($p_size != 0) { $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($p_src, $v_read_size); @fwrite($p_dest, $v_buffer, $v_read_size); $p_size -= $v_read_size; } } else if ($p_mode==1) { while ($p_size != 0) { $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @gzread($p_src, $v_read_size); @fwrite($p_dest, $v_buffer, $v_read_size); $p_size -= $v_read_size; } } else if ($p_mode==2) { while ($p_size != 0) { $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @fread($p_src, $v_read_size); @gzwrite($p_dest, $v_buffer, $v_read_size); $p_size -= $v_read_size; } } else if ($p_mode==3) { while ($p_size != 0) { $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); $v_buffer = @gzread($p_src, $v_read_size); @gzwrite($p_dest, $v_buffer, $v_read_size); $p_size -= $v_read_size; } } return $v_result; } function PclZipUtilRename($p_src, $p_dest) { $v_result = 1; if (!@rename($p_src, $p_dest)) { if (!@copy($p_src, $p_dest)) { $v_result = 0; } else if (!@unlink($p_src)) { $v_result = 0; } } return $v_result; } function PclZipUtilOptionText($p_option) { $v_list = get_defined_constants(); for (reset($v_list); $v_key = key($v_list); next($v_list)) { $v_prefix = substr($v_key, 0, 10); if (( ($v_prefix == 'PCLZIP_OPT') || ($v_prefix == 'PCLZIP_CB_') || ($v_prefix == 'PCLZIP_ATT')) && ($v_list[$v_key] == $p_option)) { return $v_key; } } $v_result = 'Unknown'; return $v_result; } function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) { if (stristr(php_uname(), 'windows')) { if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { $p_path = substr($p_path, $v_position+1); } if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { $p_path = strtr($p_path, '\\', '/'); } } return $p_path; } ?> diff --git a/fileadmin/perms.php b/fileadmin/perms.php new file mode 100644 index 00000000..6d38ff10 --- /dev/null +++ b/fileadmin/perms.php @@ -0,0 +1,198 @@ + 0000, "0100" => 0100, "0010" => 0010, + "0001" => 0001, "0200" => 0200, "0020" => 0020, + "0002" => 0002, "0300" => 0300, "0030" => 0030, + "0003" => 0003, "0400" => 0400, "0040" => 0040, + "0004" => 0004, "0500" => 0500, "0050" => 0050, + "0005" => 0005, "0600" => 0600, "0060" => 0060, + "0006" => 0006, "0700" => 0700, "0070" => 0070, + "0007" => 0007, "0100" => 0100, "0010" => 0010, + "0110" => 0110, "0011" => 0011, "0120" => 0120, + "0012" => 0012, "0130" => 0130, "0013" => 0013, + "0140" => 0140, "0014" => 0014, "0150" => 0150, + "0015" => 0015, "0160" => 0160, "0016" => 0016, + "0170" => 0170, "0017" => 0017, "0200" => 0200, + "0020" => 0020, "0210" => 0210, "0021" => 0021, + "0220" => 0220, "0022" => 0022, "0230" => 0230, + "0023" => 0023, "0240" => 0240, "0024" => 0024, + "0250" => 0250, "0025" => 0025, "0260" => 0260, + "0026" => 0026, "0270" => 0270, "0027" => 0027, + "0300" => 0300, "0030" => 0030, "0310" => 0310, + "0031" => 0031, "0320" => 0320, "0032" => 0032, + "0330" => 0330, "0033" => 0033, "0340" => 0340, + "0034" => 0034, "0350" => 0350, "0035" => 0035, + "0360" => 0360, "0036" => 0036, "0370" => 0370, + "0037" => 0037, "0400" => 0400, "0040" => 0040, + "0410" => 0410, "0041" => 0041, "0420" => 0420, + "0042" => 0042, "0430" => 0430, "0043" => 0043, + "0440" => 0440, "0044" => 0044, "0450" => 0450, + "0045" => 0045, "0460" => 0460, "0046" => 0046, + "0470" => 0470, "0047" => 0047, "0500" => 0500, + "0050" => 0050, "0510" => 0510, "0051" => 0051, + "0520" => 0520, "0052" => 0052, "0530" => 0530, + "0053" => 0053, "0540" => 0540, "0054" => 0054, + "0550" => 0550, "0055" => 0055, "0560" => 0560, + "0056" => 0056, "0570" => 0570, "0057" => 0057, + "0600" => 0600, "0060" => 0060, "0610" => 0610, + "0061" => 0061, "0620" => 0620, "0062" => 0062, + "0630" => 0630, "0063" => 0063, "0640" => 0640, + "0064" => 0064, "0650" => 0650, "0065" => 0065, + "0660" => 0660, "0066" => 0066, "0670" => 0670, + "0067" => 0067, "0700" => 0700, "0070" => 0070, + "0710" => 0710, "0071" => 0071, "0720" => 0720, + "0072" => 0072, "0730" => 0730, "0073" => 0073, + "0740" => 0740, "0074" => 0074, "0750" => 0750, + "0075" => 0075, "0760" => 0760, "0076" => 0076, + "0770" => 0770, "0077" => 0077, "0100" => 0100, + "0101" => 0101, "0102" => 0102, "0103" => 0103, + "0104" => 0104, "0105" => 0105, "0106" => 0106, + "0107" => 0107, "0110" => 0110, "0111" => 0111, + "0112" => 0112, "0113" => 0113, "0114" => 0114, + "0115" => 0115, "0116" => 0116, "0117" => 0117, + "0120" => 0120, "0121" => 0121, "0122" => 0122, + "0123" => 0123, "0124" => 0124, "0125" => 0125, + "0126" => 0126, "0127" => 0127, "0130" => 0130, + "0131" => 0131, "0132" => 0132, "0133" => 0133, + "0134" => 0134, "0135" => 0135, "0136" => 0136, + "0137" => 0137, "0140" => 0140, "0141" => 0141, + "0142" => 0142, "0143" => 0143, "0144" => 0144, + "0145" => 0145, "0146" => 0146, "0147" => 0147, + "0150" => 0150, "0151" => 0151, "0152" => 0152, + "0153" => 0153, "0154" => 0154, "0155" => 0155, + "0156" => 0156, "0157" => 0157, "0160" => 0160, + "0161" => 0161, "0162" => 0162, "0163" => 0163, + "0164" => 0164, "0165" => 0165, "0166" => 0166, + "0167" => 0167, "0170" => 0170, "0171" => 0171, + "0172" => 0172, "0173" => 0173, "0174" => 0174, + "0175" => 0175, "0176" => 0176, "0177" => 0177, + "0200" => 0200, "0201" => 0201, "0202" => 0202, + "0203" => 0203, "0204" => 0204, "0205" => 0205, + "0206" => 0206, "0207" => 0207, "0210" => 0210, + "0211" => 0211, "0212" => 0212, "0213" => 0213, + "0214" => 0214, "0215" => 0215, "0216" => 0216, + "0217" => 0217, "0220" => 0220, "0221" => 0221, + "0222" => 0222, "0223" => 0223, "0224" => 0224, + "0225" => 0225, "0226" => 0226, "0227" => 0227, + "0230" => 0230, "0231" => 0231, "0232" => 0232, + "0233" => 0233, "0234" => 0234, "0235" => 0235, + "0236" => 0236, "0237" => 0237, "0240" => 0240, + "0241" => 0241, "0242" => 0242, "0243" => 0243, + "0244" => 0244, "0245" => 0245, "0246" => 0246, + "0247" => 0247, "0250" => 0250, "0251" => 0251, + "0252" => 0252, "0253" => 0253, "0254" => 0254, + "0255" => 0255, "0256" => 0256, "0257" => 0257, + "0260" => 0260, "0261" => 0261, "0262" => 0262, + "0263" => 0263, "0264" => 0264, "0265" => 0265, + "0266" => 0266, "0267" => 0267, "0270" => 0270, + "0271" => 0271, "0272" => 0272, "0273" => 0273, + "0274" => 0274, "0275" => 0275, "0276" => 0276, + "0277" => 0277, "0300" => 0300, "0301" => 0301, + "0302" => 0302, "0303" => 0303, "0304" => 0304, + "0305" => 0305, "0306" => 0306, "0307" => 0307, + "0310" => 0310, "0311" => 0311, "0312" => 0312, + "0313" => 0313, "0314" => 0314, "0315" => 0315, + "0316" => 0316, "0317" => 0317, "0320" => 0320, + "0321" => 0321, "0322" => 0322, "0323" => 0323, + "0324" => 0324, "0325" => 0325, "0326" => 0326, + "0327" => 0327, "0330" => 0330, "0331" => 0331, + "0332" => 0332, "0333" => 0333, "0334" => 0334, + "0335" => 0335, "0336" => 0336, "0337" => 0337, + "0340" => 0340, "0341" => 0341, "0342" => 0342, + "0343" => 0343, "0344" => 0344, "0345" => 0345, + "0346" => 0346, "0347" => 0347, "0350" => 0350, + "0351" => 0351, "0352" => 0352, "0353" => 0353, + "0354" => 0354, "0355" => 0355, "0356" => 0356, + "0357" => 0357, "0360" => 0360, "0361" => 0361, + "0362" => 0362, "0363" => 0363, "0364" => 0364, + "0365" => 0365, "0366" => 0366, "0367" => 0367, + "0370" => 0370, "0371" => 0371, "0372" => 0372, + "0373" => 0373, "0374" => 0374, "0375" => 0375, + "0376" => 0376, "0377" => 0377, "0400" => 0400, + "0401" => 0401, "0402" => 0402, "0403" => 0403, + "0404" => 0404, "0405" => 0405, "0406" => 0406, + "0407" => 0407, "0410" => 0410, "0411" => 0411, + "0412" => 0412, "0413" => 0413, "0414" => 0414, + "0415" => 0415, "0416" => 0416, "0417" => 0417, + "0420" => 0420, "0421" => 0421, "0422" => 0422, + "0423" => 0423, "0424" => 0424, "0425" => 0425, + "0426" => 0426, "0427" => 0427, "0430" => 0430, + "0431" => 0431, "0432" => 0432, "0433" => 0433, + "0434" => 0434, "0435" => 0435, "0436" => 0436, + "0437" => 0437, "0440" => 0440, "0441" => 0441, + "0442" => 0442, "0443" => 0443, "0444" => 0444, + "0445" => 0445, "0446" => 0446, "0447" => 0447, + "0450" => 0450, "0451" => 0451, "0452" => 0452, + "0453" => 0453, "0454" => 0454, "0455" => 0455, + "0456" => 0456, "0457" => 0457, "0460" => 0460, + "0461" => 0461, "0462" => 0462, "0463" => 0463, + "0464" => 0464, "0465" => 0465, "0466" => 0466, + "0467" => 0467, "0470" => 0470, "0471" => 0471, + "0472" => 0472, "0473" => 0473, "0474" => 0474, + "0475" => 0475, "0476" => 0476, "0477" => 0477, + "0500" => 0500, "0501" => 0501, "0502" => 0502, + "0503" => 0503, "0504" => 0504, "0505" => 0505, + "0506" => 0506, "0507" => 0507, "0510" => 0510, + "0511" => 0511, "0512" => 0512, "0513" => 0513, + "0514" => 0514, "0515" => 0515, "0516" => 0516, + "0517" => 0517, "0520" => 0520, "0521" => 0521, + "0522" => 0522, "0523" => 0523, "0524" => 0524, + "0525" => 0525, "0526" => 0526, "0527" => 0527, + "0530" => 0530, "0531" => 0531, "0532" => 0532, + "0533" => 0533, "0534" => 0534, "0535" => 0535, + "0536" => 0536, "0537" => 0537, "0540" => 0540, + "0541" => 0541, "0542" => 0542, "0543" => 0543, + "0544" => 0544, "0545" => 0545, "0546" => 0546, + "0547" => 0547, "0550" => 0550, "0551" => 0551, + "0552" => 0552, "0553" => 0553, "0554" => 0554, + "0555" => 0555, "0556" => 0556, "0557" => 0557, + "0560" => 0560, "0561" => 0561, "0562" => 0562, + "0563" => 0563, "0564" => 0564, "0565" => 0565, + "0566" => 0566, "0567" => 0567, "0570" => 0570, + "0571" => 0571, "0572" => 0572, "0573" => 0573, + "0574" => 0574, "0575" => 0575, "0576" => 0576, + "0577" => 0577, "0600" => 0600, "0601" => 0601, + "0602" => 0602, "0603" => 0603, "0604" => 0604, + "0605" => 0605, "0606" => 0606, "0607" => 0607, + "0610" => 0610, "0611" => 0611, "0612" => 0612, + "0613" => 0613, "0614" => 0614, "0615" => 0615, + "0616" => 0616, "0617" => 0617, "0620" => 0620, + "0621" => 0621, "0622" => 0622, "0623" => 0623, + "0624" => 0624, "0625" => 0625, "0626" => 0626, + "0627" => 0627, "0630" => 0630, "0631" => 0631, + "0632" => 0632, "0633" => 0633, "0634" => 0634, + "0635" => 0635, "0636" => 0636, "0637" => 0637, + "0640" => 0640, "0641" => 0641, "0642" => 0642, + "0643" => 0643, "0644" => 0644, "0645" => 0645, + "0646" => 0646, "0647" => 0647, "0650" => 0650, + "0651" => 0651, "0652" => 0652, "0653" => 0653, + "0654" => 0654, "0655" => 0655, "0656" => 0656, + "0657" => 0657, "0660" => 0660, "0661" => 0661, + "0662" => 0662, "0663" => 0663, "0664" => 0664, + "0665" => 0665, "0666" => 0666, "0667" => 0667, + "0670" => 0670, "0671" => 0671, "0672" => 0672, + "0673" => 0673, "0674" => 0674, "0675" => 0675, + "0676" => 0676, "0677" => 0677, "0700" => 0700, + "0701" => 0701, "0702" => 0702, "0703" => 0703, + "0704" => 0704, "0705" => 0705, "0706" => 0706, + "0707" => 0707, "0710" => 0710, "0711" => 0711, + "0712" => 0712, "0713" => 0713, "0714" => 0714, + "0715" => 0715, "0716" => 0716, "0717" => 0717, + "0720" => 0720, "0721" => 0721, "0722" => 0722, + "0723" => 0723, "0724" => 0724, "0725" => 0725, + "0726" => 0726, "0727" => 0727, "0730" => 0730, + "0731" => 0731, "0732" => 0732, "0733" => 0733, + "0734" => 0734, "0735" => 0735, "0736" => 0736, + "0737" => 0737, "0740" => 0740, "0741" => 0741, + "0742" => 0742, "0743" => 0743, "0744" => 0744, + "0745" => 0745, "0746" => 0746, "0747" => 0747, + "0750" => 0750, "0751" => 0751, "0752" => 0752, + "0753" => 0753, "0754" => 0754, "0755" => 0755, + "0756" => 0756, "0757" => 0757, "0760" => 0760, + "0761" => 0761, "0762" => 0762, "0763" => 0763, + "0764" => 0764, "0765" => 0765, "0766" => 0766, + "0767" => 0767, "0770" => 0770, "0771" => 0771, + "0772" => 0772, "0773" => 0773, "0774" => 0774, + "0775" => 0775, "0776" => 0776, "0777" => 0777 +); +?> diff --git a/fileadmin/pkzip.php b/fileadmin/pkzip.php new file mode 100644 index 00000000..c2426ccf --- /dev/null +++ b/fileadmin/pkzip.php @@ -0,0 +1,28 @@ +\n"; + echo "[返回]抱歉,文件清单为空!\n"; + echo "\n"; +} else { + require "pclzip.php"; + $pkzip = new pclzip($gopath = trim($_GET['gopath'])); + echo "[目录]\n"; + if ($pkzip->create($_SESSION['flist'], PCLZIP_OPT_REMOVE_PATH, dirname($gopath))) { + echo "文件 " . ___basename($gopath) . " 创建成功!"; + } else { + echo "文件 " . ___basename($gopath) . " 无法建立!"; + } +} +xhtml_footer(); +?> diff --git a/fileadmin/readme.txt b/fileadmin/readme.txt new file mode 100644 index 00000000..9cef02e4 --- /dev/null +++ b/fileadmin/readme.txt @@ -0,0 +1,72 @@ +---------------- +爱特网站文件专家 +---------------- +01.文件批量压缩功能 +02.批量网址获取文件 +03.文件批量上传功能 +04.强大权限设置支持 +05.批量文件删除功能 +06.批量文件复制支持 +07.批量文件移动支持 +08.批量建立目录文件 +09.高级终端命令执行 +10.批量文件传至邮箱 +11.实用文件清单支持 +12.自定编码查看文件 +13.自定编码编辑文件 +14.目录与文件的命名 +15.创建文件复件支持 +16.目录位置允许跳转 +17.文件效验Md5,Sha1 +18.硬盘使用情况查看 +19.任意文件下载支持 +20.牛逼强大解压支持 +21.文件编码转换工具 +22.下载文件断点续传 +---------------- +->>目前支持压缩类型 +Gz,Bz2,Zip +->>目前支持解压类型 +Gz,Bz2,Tar,Tgz,Tbz,Zip +---------------- +->>爱特文件专家安装 +环境:PHP5+ SESSION +首次使用提示创建帐号密码 +修改密码直接编辑admin.php +在Linux操作系统中将更好用 +不选择任何文件则使用清单文件 +选择文件并操作会清空文件清单 +编辑文件如不选择编码将用UTF-8 +->>爱特文件专家技巧 +文件列表添加Ftp://可以操作Ftp文件 +使用远程上传输入Url地址即可导入文件 +用清单功能批量操作不同目录文件,如压缩 +命名功能如果输入绝对路径还可以当移动使 +有时操作重要文件怕出错,文件复件让你安心 +谦容各种浏览器,甚至Elinks也能完美的使用 +更多技巧等你使用,欢迎Bug的反馈与交流讨论 +---------------- +-->爱特文件专家作者 +官方网站:aite.me +腾讯扣群:38181604 +腾讯扣扣:88966001 +腾讯扣扣:759234755 +电子邮箱:admin@aite.me +电子邮箱:xiaoqidun@gmail.com +组件下载:http://aite.me/7zrar.zip +官方更新:http://aite.me/fileadmin.zip +---------------- +-->爱特文件专家版权 +爱特文件专家使用了Pclzip和Archive_Tar +http://www.phpconcept.net/pclzip +http://pear.php.net/package/Archive_Tar +爱特文件专家除此库之外均为原创编码 +---------------- +如果解压选项中出现了rar和7za二个选项且是linux系统 +你可能需要安装爱特文件专家的unrar和p7zip组件才能用 +unrar和p7zip(x64\x86\arm)http://aite.me/7zrar.zip +借助这二个强大的组件你可以用爱特文件管理器解压任意格式压缩包 +可以用文件管理器的远程下载直接导入unrar和p7zip组件包,然后在线解压 +解压后有x64\x86\arm三个目录,一般空间用x86,一般安卓手机环境用arm组件 +进入对应的组件目录,将p7zip.bin和unrar.bin文件移动到文件管理器目录即可 +然后文件管理器的rar和7za解压选项就可以用了,当然也可以解压带密码压缩包 diff --git a/fileadmin/rename.php b/fileadmin/rename.php new file mode 100644 index 00000000..e2154ea2 --- /dev/null +++ b/fileadmin/rename.php @@ -0,0 +1,31 @@ +\n返回目录\n新的命名\n"; +echo "
\n"; +echo "
\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "
\n"; +echo "
\n"; +xhtml_footer(); +?> diff --git a/fileadmin/shell.php b/fileadmin/shell.php new file mode 100644 index 00000000..37e04dbf --- /dev/null +++ b/fileadmin/shell.php @@ -0,0 +1,69 @@ +\n"; + echo "返回目录错误提示\n"; + echo "\n"; + echo "
\n"; + echo "您没有打开SHELL权限!"; + echo "
\n"; + xhtml_footer(); + exit; +} +chdir($getcwd); +xhtml_head("SHELL"); +echo "
\n"; +echo "返回目录SHELL\n"; +echo "
\n"; +echo "
\n"; +echo "
\n"; +echo "\n"; +echo "\n
\n"; +echo "\n
\n"; +echo "
\n"; +echo "
\n"; +if (isset($_POST['shell'])) if (($s = trim($_POST['shell'])) != "") { + echo "
\n结果返回SHELL\n
\n"; + echo "
\n"; + if (function_exists("proc_open") && function_exists("stream_get_contents") && php_uname("s") == "Linux") { + if (!($sh = proc_open("sh", array(0 => array("pipe", "r"), 1 => array("pipe", "w")), $pipes))) { + echo "Open Shell Error !"; + } else { + $i = 0; + $shell = explode("\n", $s); + while ($i < count($shell)) { + $x = trim($shell[$i]); + fwrite($pipes[0], "$x\n"); + $i++; + } + fclose($pipes[0]); + $stream = stream_get_contents($pipes[1]); + if ($stream != "") { + echo "
" . nl2br(___codepre(trim($stream))) . "
"; + } else { + echo "NULL"; + } + fclose($pipes[1]); + proc_close($sh); + } + } else { + $i = 0; + $shell = explode("\n", $s); + while ($i < count($shell)) { + $sh = trim($shell[$i]); + echo "shell# $sh
\n"; + echo nl2br(___codepre(shell_exec($sh))) . "\n"; + $i++; + } + } + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/style.css b/fileadmin/style.css new file mode 100644 index 00000000..092b4a34 --- /dev/null +++ b/fileadmin/style.css @@ -0,0 +1,53 @@ +.like { + padding: 3px; + color: #000000; + font-size: 18px; + background-color: #00BFFF; + border-bottom: 3px solid #1E90FF; +} + +.love { + padding: 2px; + color: #000000; + word-wrap: break-word; + border-left: 1px solid #B0E0B6; + border-right: 1px solid #B0E0B6; + border-bottom: 1px dotted #6495ED; +} + +.error { + color: red; + padding: 2px; + word-wrap: break-word; + border: 1px solid red; +} + +#header { + padding: 4px; + color: #000000; + font-size: 18px; + background-color: #3CB369; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + border-bottom: 3px solid #008080; +} + +#footer { + padding: 4px; + color: #000000; + font-size: 18px; + background-color: #3CB369; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-bottom: 3px solid #008080; +} + +#footer a:link { + color: #000000; + text-decoration: none; +} + +#footer a:visited { + color: #000000; + text-decoration: none; +} diff --git a/fileadmin/system.php b/fileadmin/system.php new file mode 100644 index 00000000..46856b57 --- /dev/null +++ b/fileadmin/system.php @@ -0,0 +1,203 @@ + 1) { + $arr1 = array("&", "\"", "'", "<", ">", '"'); + $arr2 = array("&", """, "'", "<", ">", "'"); + } else { + $arr1 = array("&", "\"", "'", "<", ">", " ", '"'); + $arr2 = array("&", """, "'", "<", ">", " ", "'"); + } + return str_replace($arr1, $arr2, $str); +} + +function ___ziplist() +{ + $zip = trim(func_get_arg(0)); + if (!is_readable('pclzip.php') || !___getmime($zip, 'zip')) return false; + require 'pclzip.php'; + $pclzip = new pclzip($zip); + if (!($getlist = $pclzip->listContent())) return false; + if (!is_array($getlist) || count($getlist) < 1) return false; + return $getlist; +} + +function ___convert() +{ + $str = func_get_arg(0); + if (!function_exists("mb_convert_encoding")) return $str; + $encode = func_num_args() < 2 ? "UTF-8" : func_get_arg(1); + $enlist = func_num_args() > 2 ? func_get_arg(2) : "auto,CP936"; + return mb_convert_encoding($str, $encode, $enlist); +} + +function ___getmime() +{ + $path = trim(func_get_arg(0)); + if (func_num_args() >= 2) { + $type = trim(func_get_arg(1)); + $type = explode(':', $type); + } + if (!is_file($path)) return false; + if (!($fp = fopen($path, "rb"))) return false; + $bsupport = array( + array('jpg', 'ffd8ff', 'image/jpeg'), + array('png', '89504e47', 'image/png'), + array('gif', '47494638', 'image/gif'), + array('bmp', '424d', 'image/x-ms-bmp'), + array('zip', '504b0304', 'application/zip')); + $headstr = bin2hex(fread($fp, 4)); + fclose($fp); + foreach ($bsupport as $temp) { + if (preg_match("/^$temp[1]/i", $headstr)) { + if (!isset($type)) { + return $temp[2]; + } elseif (in_array($temp[0], $type)) { + return $temp[2]; + } + } + } + return false; +} + +function ___sendfile() +{ + $i = 0; + $to = func_get_arg(0); + $fs = func_get_arg(1); + if (!is_file("email.php")) { + return false; + } else { + require "email.php"; + } + if ($to == "" || !is_array($fs)) { + return false; + } elseif (count($fs) < 1) { + return false; + } + $systags = uniqid(""); + $subject = "your files"; + $headers = "Content-Type: multipart/mixed; boundary=\"$systags\"\r\n"; + $emailbody = "--$systags\r\n"; + $emailbody .= "Content-type: text/plain; charset=utf-8\r\n"; + $emailbody .= "Content-transfer-encoding: 8bit\r\n\r\n"; + while ($i < count($fs)) { + if (!is_file($fs[$i]) || !is_readable($fs[$i])) continue; + $attachment = chunk_split(base64_encode(file_get_contents($fs[$i]))); + $emailbody .= "--$systags\r\n"; + $emailbody .= "Content-type: application/octet-stream; name=" . ___basename($fs[$i]) . "\r\n"; + $emailbody .= "Content-transfer-encoding: base64\r\n\r\n"; + $emailbody .= "$attachment\r\n\r\n"; + $i++; + } + $emailbody .= "--$systags--"; + return email($to, "from aite.me file manager", $emailbody, $headers); +} + +function ___download() +{ + $path = trim(func_get_arg(0)); + $size = filesize($path); + (isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE']) && $range = substr($_SERVER['HTTP_RANGE'], 6)) || $range = '0-' . ($size - 1); + if (substr($range, -1) == '-') { + $init = substr($range, 0, -1); + $stop = $size - 1; + } elseif (substr($range, 0, 1) == '-') { + $init = $size - substr($range, 1) - 1; + $stop = $size - 1; + } else { + $init_stop = explode('-', $range); + $init = $init_stop[0]; + $stop = $init_stop[1]; + } + header('HTTP/1.1 206 Partial Content'); + header('Accept-Ranges: bytes'); + header('Content-Type: application/force-download'); + header('Content-Disposition: attachment; filename=' . ___basename($path)); + header("Content-Range: bytes $init-$stop/$size"); + header('Content-Length: ' . ($stop - $init + 1)); + $fp = fopen($path, "rb"); + fseek($fp, $init); + while (!feof($fp)) { + echo fread($fp, 4096); + if (ftell($fp) > $stop) { + break; + } + } + fclose($fp); +} + +function ___basename() +{ + $path = trim(func_get_arg(0)); + $path = str_replace("\\", "/", $path); + $path = explode("/", $path); + return ___convert($path[count($path) - 1]); +} + +function ___realpath() +{ + $path = func_get_arg(0); + $path = str_replace('\\', '/', $path); + if (!is_link($path)) return realpath($path); + return preg_replace('/[^:]?\/{2,}/si', '/', $path); +} + +function ___filesize() +{ + $size = trim(func_get_arg(0)); + if ($size < 1024) { + return $size . " B"; + } elseif ($size < 1024 * 1024) { + return number_format($size / 1024, 3) . " KB"; + } elseif ($size < 1024 * 1024 * 1024) { + return number_format($size / 1024 / 1024, 3) . " MB"; + } elseif ($size < 1024 * 1024 * 1024 * 1024) { + return number_format($size / 1024 / 1024 / 1024, 3) . " GB"; + } else { + return number_format($size / 1024 / 1024 / 1024 / 1024, 3) . " TB"; + } +} + +function ___superexec() +{ + $cmd = trim(func_get_arg(0)); + if (php_uname("s") != "Linux") return false; + if ($cmd == "" || !function_exists("proc_open") || !function_exists("stream_get_contents")) { + return false; + } + if (!is_resource($sh = proc_open("exec sh", array(0 => array("pipe", "r"), 1 => array("pipe", "w")), $pipes))) { + return false; + } + fwrite($pipes[0], "export LANG=\"zh_CN.utf8\"\n"); + fwrite($pipes[0], $cmd); + fclose($pipes[0]); + $result = stream_get_contents($pipes[1]); + fclose($pipes[1]); + proc_close($sh); + return trim($result); +} + +function ___shortpath() +{ + $path = trim(func_get_arg(0)); + $path = ___convert($path, "UTF-8"); + if (function_exists('mb_strlen')) { + if (mb_strlen($path, "UTF-8") <= 18) return $path; + } else { + if (strlen($path) <= 18) return $path; + } + $path1 = function_exists('mb_substr') ? mb_substr($path, -9, 9, "UTF-8") : substr($path, -9); + $path2 = function_exists('mb_substr') ? mb_substr($path, 0, 9, "UTF-8") : substr($path, 0, 9); + return $path2 . " .... " . $path1; +} + +?> diff --git a/fileadmin/tarcls.php b/fileadmin/tarcls.php new file mode 100644 index 00000000..b3bdb651 --- /dev/null +++ b/fileadmin/tarcls.php @@ -0,0 +1,2 @@ + true, 'raiseError' => true, 'throwError' => true, 'pushErrorHandling' => true, 'popErrorHandling' => true, ); function __construct($error_class = null) { $classname = strtolower(get_class($this)); if ($this->_debug) { print "PEAR constructor called, class=$classname\n"; } if ($error_class !== null) { $this->_error_class = $error_class; } while ($classname && strcasecmp($classname, "pear")) { $destructor = "_$classname"; if (method_exists($this, $destructor)) { global $_PEAR_destructor_object_list; $_PEAR_destructor_object_list[] = &$this; if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { register_shutdown_function("_PEAR_call_destructors"); $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; } break; } else { $classname = get_parent_class($classname); } } } public function PEAR($error_class = null) { $this->__construct($error_class); } function _PEAR() { if ($this->_debug) { printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); } } public function __call($method, $arguments) { if (!isset(self::$bivalentMethods[$method])) { trigger_error( 'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR ); } return call_user_func_array( array(get_class(), '_' . $method), array_merge(array($this), $arguments) ); } public static function __callStatic($method, $arguments) { if (!isset(self::$bivalentMethods[$method])) { trigger_error( 'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR ); } return call_user_func_array( array(get_class(), '_' . $method), array_merge(array(null), $arguments) ); } public static function &getStaticProperty($class, $var) { static $properties; if (!isset($properties[$class])) { $properties[$class] = array(); } if (!array_key_exists($var, $properties[$class])) { $properties[$class][$var] = null; } return $properties[$class][$var]; } public static function registerShutdownFunc($func, $args = array()) { if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { register_shutdown_function("_PEAR_call_destructors"); $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; } $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); } public static function isError($data, $code = null) { if (!is_a($data, 'PEAR_Error')) { return false; } if (is_null($code)) { return true; } elseif (is_string($code)) { return $data->getMessage() == $code; } return $data->getCode() == $code; } protected static function _setErrorHandling( $object, $mode = null, $options = null ) { if ($object !== null) { $setmode = &$object->_default_error_mode; $setoptions = &$object->_default_error_options; } else { $setmode = &$GLOBALS['_PEAR_default_error_mode']; $setoptions = &$GLOBALS['_PEAR_default_error_options']; } switch ($mode) { case PEAR_ERROR_EXCEPTION: case PEAR_ERROR_RETURN: case PEAR_ERROR_PRINT: case PEAR_ERROR_TRIGGER: case PEAR_ERROR_DIE: case null: $setmode = $mode; $setoptions = $options; break; case PEAR_ERROR_CALLBACK: $setmode = $mode; if (is_callable($options)) { $setoptions = $options; } else { trigger_error("invalid error callback", E_USER_WARNING); } break; default: trigger_error("invalid error mode", E_USER_WARNING); break; } } function expectError($code = '*') { if (is_array($code)) { array_push($this->_expected_errors, $code); } else { array_push($this->_expected_errors, array($code)); } return count($this->_expected_errors); } function popExpect() { return array_pop($this->_expected_errors); } function _checkDelExpect($error_code) { $deleted = false; foreach ($this->_expected_errors as $key => $error_array) { if (in_array($error_code, $error_array)) { unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); $deleted = true; } if (0 == count($this->_expected_errors[$key])) { unset($this->_expected_errors[$key]); } } return $deleted; } function delExpect($error_code) { $deleted = false; if ((is_array($error_code) && (0 != count($error_code)))) { foreach ($error_code as $key => $error) { $deleted = $this->_checkDelExpect($error) ? true : false; } return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); } elseif (!empty($error_code)) { if ($this->_checkDelExpect($error_code)) { return true; } return PEAR::raiseError("The expected error you submitted does not exist"); } return PEAR::raiseError("The expected error you submitted is empty"); } protected static function _raiseError($object, $message = null, $code = null, $mode = null, $options = null, $userinfo = null, $error_class = null, $skipmsg = false) { if (is_object($message)) { $code = $message->getCode(); $userinfo = $message->getUserInfo(); $error_class = $message->getType(); $message->error_message_prefix = ''; $message = $message->getMessage(); } if ( $object !== null && isset($object->_expected_errors) && count($object->_expected_errors) > 0 && count($exp = end($object->_expected_errors)) ) { if ($exp[0] == "*" || (is_int(reset($exp)) && in_array($code, $exp)) || (is_string(reset($exp)) && in_array($message, $exp)) ) { $mode = PEAR_ERROR_RETURN; } } if ($mode === null) { if ($object !== null && isset($object->_default_error_mode)) { $mode = $object->_default_error_mode; $options = $object->_default_error_options; } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { $mode = $GLOBALS['_PEAR_default_error_mode']; $options = $GLOBALS['_PEAR_default_error_options']; } } if ($error_class !== null) { $ec = $error_class; } elseif ($object !== null && isset($object->_error_class)) { $ec = $object->_error_class; } else { $ec = 'PEAR_Error'; } if ($skipmsg) { $a = new $ec($code, $mode, $options, $userinfo); } else { $a = new $ec($message, $code, $mode, $options, $userinfo); } return $a; } protected static function _throwError($object, $message = null, $code = null, $userinfo = null) { if ($object !== null) { $a = &$object->raiseError($message, $code, null, null, $userinfo); return $a; } $a = &PEAR::raiseError($message, $code, null, null, $userinfo); return $a; } public static function staticPushErrorHandling($mode, $options = null) { $stack = &$GLOBALS['_PEAR_error_handler_stack']; $def_mode = &$GLOBALS['_PEAR_default_error_mode']; $def_options = &$GLOBALS['_PEAR_default_error_options']; $stack[] = array($def_mode, $def_options); switch ($mode) { case PEAR_ERROR_EXCEPTION: case PEAR_ERROR_RETURN: case PEAR_ERROR_PRINT: case PEAR_ERROR_TRIGGER: case PEAR_ERROR_DIE: case null: $def_mode = $mode; $def_options = $options; break; case PEAR_ERROR_CALLBACK: $def_mode = $mode; if (is_callable($options)) { $def_options = $options; } else { trigger_error("invalid error callback", E_USER_WARNING); } break; default: trigger_error("invalid error mode", E_USER_WARNING); break; } $stack[] = array($mode, $options); return true; } public static function staticPopErrorHandling() { $stack = &$GLOBALS['_PEAR_error_handler_stack']; $setmode = &$GLOBALS['_PEAR_default_error_mode']; $setoptions = &$GLOBALS['_PEAR_default_error_options']; array_pop($stack); list($mode, $options) = $stack[sizeof($stack) - 1]; array_pop($stack); switch ($mode) { case PEAR_ERROR_EXCEPTION: case PEAR_ERROR_RETURN: case PEAR_ERROR_PRINT: case PEAR_ERROR_TRIGGER: case PEAR_ERROR_DIE: case null: $setmode = $mode; $setoptions = $options; break; case PEAR_ERROR_CALLBACK: $setmode = $mode; if (is_callable($options)) { $setoptions = $options; } else { trigger_error("invalid error callback", E_USER_WARNING); } break; default: trigger_error("invalid error mode", E_USER_WARNING); break; } return true; } protected static function _pushErrorHandling($object, $mode, $options = null) { $stack = &$GLOBALS['_PEAR_error_handler_stack']; if ($object !== null) { $def_mode = &$object->_default_error_mode; $def_options = &$object->_default_error_options; } else { $def_mode = &$GLOBALS['_PEAR_default_error_mode']; $def_options = &$GLOBALS['_PEAR_default_error_options']; } $stack[] = array($def_mode, $def_options); if ($object !== null) { $object->setErrorHandling($mode, $options); } else { PEAR::setErrorHandling($mode, $options); } $stack[] = array($mode, $options); return true; } protected static function _popErrorHandling($object) { $stack = &$GLOBALS['_PEAR_error_handler_stack']; array_pop($stack); list($mode, $options) = $stack[sizeof($stack) - 1]; array_pop($stack); if ($object !== null) { $object->setErrorHandling($mode, $options); } else { PEAR::setErrorHandling($mode, $options); } return true; } public static function loadExtension($ext) { if (extension_loaded($ext)) { return true; } if ( function_exists('dl') === false || ini_get('enable_dl') != 1 ) { return false; } if (OS_WINDOWS) { $suffix = '.dll'; } elseif (PHP_OS == 'HP-UX') { $suffix = '.sl'; } elseif (PHP_OS == 'AIX') { $suffix = '.a'; } elseif (PHP_OS == 'OSX') { $suffix = '.bundle'; } else { $suffix = '.so'; } return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); } } function _PEAR_call_destructors() { global $_PEAR_destructor_object_list; if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) { reset($_PEAR_destructor_object_list); $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo'); if ($destructLifoExists) { $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); } while (list($k, $objref) = each($_PEAR_destructor_object_list)) { $classname = get_class($objref); while ($classname) { $destructor = "_$classname"; if (method_exists($objref, $destructor)) { $objref->$destructor(); break; } else { $classname = get_parent_class($classname); } } } $_PEAR_destructor_object_list = array(); } if ( isset($GLOBALS['_PEAR_shutdown_funcs']) && is_array($GLOBALS['_PEAR_shutdown_funcs']) && !empty($GLOBALS['_PEAR_shutdown_funcs']) ) { foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { call_user_func_array($value[0], $value[1]); } } } class PEAR_Error { var $error_message_prefix = ''; var $mode = PEAR_ERROR_RETURN; var $level = E_USER_NOTICE; var $code = -1; var $message = ''; var $userinfo = ''; var $backtrace = null; function __construct($message = 'unknown error', $code = null, $mode = null, $options = null, $userinfo = null) { if ($mode === null) { $mode = PEAR_ERROR_RETURN; } $this->message = $message; $this->code = $code; $this->mode = $mode; $this->userinfo = $userinfo; $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace'); if (!$skiptrace) { $this->backtrace = debug_backtrace(); if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) { unset($this->backtrace[0]['object']); } } if ($mode & PEAR_ERROR_CALLBACK) { $this->level = E_USER_NOTICE; $this->callback = $options; } else { if ($options === null) { $options = E_USER_NOTICE; } $this->level = $options; $this->callback = null; } if ($this->mode & PEAR_ERROR_PRINT) { if (is_null($options) || is_int($options)) { $format = "%s"; } else { $format = $options; } printf($format, $this->getMessage()); } if ($this->mode & PEAR_ERROR_TRIGGER) { trigger_error($this->getMessage(), $this->level); } if ($this->mode & PEAR_ERROR_DIE) { $msg = $this->getMessage(); if (is_null($options) || is_int($options)) { $format = "%s"; if (substr($msg, -1) != "\n") { $msg .= "\n"; } } else { $format = $options; } die(sprintf($format, $msg)); } if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) { call_user_func($this->callback, $this); } if ($this->mode & PEAR_ERROR_EXCEPTION) { trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING); eval('$e = new Exception($this->message, $this->code);throw($e);'); } } function getMode() { return $this->mode; } function getCallback() { return $this->callback; } function getMessage() { return ($this->error_message_prefix . $this->message); } function getCode() { return $this->code; } function getType() { return get_class($this); } function getUserInfo() { return $this->userinfo; } function getDebugInfo() { return $this->getUserInfo(); } function getBacktrace($frame = null) { if (defined('PEAR_IGNORE_BACKTRACE')) { return null; } if ($frame === null) { return $this->backtrace; } return $this->backtrace[$frame]; } function addUserInfo($info) { if (empty($this->userinfo)) { $this->userinfo = $info; } else { $this->userinfo .= " ** $info"; } } function __toString() { return $this->getMessage(); } function toString() { $modes = array(); $levels = array(E_USER_NOTICE => 'notice', E_USER_WARNING => 'warning', E_USER_ERROR => 'error'); if ($this->mode & PEAR_ERROR_CALLBACK) { if (is_array($this->callback)) { $callback = (is_object($this->callback[0]) ? strtolower(get_class($this->callback[0])) : $this->callback[0]) . '::' . $this->callback[1]; } else { $callback = $this->callback; } return sprintf('[%s: message="%s" code=%d mode=callback '. 'callback=%s prefix="%s" info="%s"]', strtolower(get_class($this)), $this->message, $this->code, $callback, $this->error_message_prefix, $this->userinfo); } if ($this->mode & PEAR_ERROR_PRINT) { $modes[] = 'print'; } if ($this->mode & PEAR_ERROR_TRIGGER) { $modes[] = 'trigger'; } if ($this->mode & PEAR_ERROR_DIE) { $modes[] = 'die'; } if ($this->mode & PEAR_ERROR_RETURN) { $modes[] = 'return'; } return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. 'prefix="%s" info="%s"]', strtolower(get_class($this)), $this->message, $this->code, implode("|", $modes), $levels[$this->level], $this->error_message_prefix, $this->userinfo); } } define('ARCHIVE_TAR_ATT_SEPARATOR', 90001); define('ARCHIVE_TAR_END_BLOCK', pack("a512", '')); if (!function_exists('gzopen') && function_exists('gzopen64')) { function gzopen($filename, $mode, $use_include_path = 0) { return gzopen64($filename, $mode, $use_include_path); } } if (!function_exists('gztell') && function_exists('gztell64')) { function gztell($zp) { return gztell64($zp); } } if (!function_exists('gzseek') && function_exists('gzseek64')) { function gzseek($zp, $offset, $whence = SEEK_SET) { return gzseek64($zp, $offset, $whence); } } class Archive_Tar extends PEAR { public $_tarname = ''; public $_compress = false; public $_compress_type = 'none'; public $_separator = ' '; public $_file = 0; public $_temp_tarname = ''; public $_ignore_regexp = ''; public $error_object = null; public function __construct($p_tarname, $p_compress = null) { parent::__construct(); $this->_compress = false; $this->_compress_type = 'none'; if (($p_compress === null) || ($p_compress == '')) { if (@file_exists($p_tarname)) { if ($fp = @fopen($p_tarname, "rb")) { $data = fread($fp, 2); fclose($fp); if ($data == "\37\213") { $this->_compress = true; $this->_compress_type = 'gz'; } elseif ($data == "BZ") { $this->_compress = true; $this->_compress_type = 'bz2'; } elseif (file_get_contents($p_tarname, false, null, 1, 4) == '7zXZ') { $this->_compress = true; $this->_compress_type = 'lzma2'; } } } else { if (substr($p_tarname, -2) == 'gz') { $this->_compress = true; $this->_compress_type = 'gz'; } elseif ((substr($p_tarname, -3) == 'bz2') || (substr($p_tarname, -2) == 'bz') ) { $this->_compress = true; $this->_compress_type = 'bz2'; } else { if (substr($p_tarname, -2) == 'xz') { $this->_compress = true; $this->_compress_type = 'lzma2'; } } } } else { if (($p_compress === true) || ($p_compress == 'gz')) { $this->_compress = true; $this->_compress_type = 'gz'; } else { if ($p_compress == 'bz2') { $this->_compress = true; $this->_compress_type = 'bz2'; } else { if ($p_compress == 'lzma2') { $this->_compress = true; $this->_compress_type = 'lzma2'; } else { $this->_error( "Unsupported compression type '$p_compress'\n" . "Supported types are 'gz', 'bz2' and 'lzma2'.\n" ); return false; } } } } $this->_tarname = $p_tarname; if ($this->_compress) { if ($this->_compress_type == 'gz') { $extname = 'zlib'; } else { if ($this->_compress_type == 'bz2') { $extname = 'bz2'; } else { if ($this->_compress_type == 'lzma2') { $extname = 'xz'; } } } if (!extension_loaded($extname)) { PEAR::loadExtension($extname); } if (!extension_loaded($extname)) { $this->_error( "The extension '$extname' couldn't be found.\n" . "Please make sure your version of PHP was built " . "with '$extname' support.\n" ); return false; } } } public function __destruct() { $this->_close(); if ($this->_temp_tarname != '') { @unlink($this->_temp_tarname); } } public function create($p_filelist) { return $this->createModify($p_filelist, '', ''); } public function add($p_filelist) { return $this->addModify($p_filelist, '', ''); } public function extract($p_path = '', $p_preserve = false) { return $this->extractModify($p_path, '', $p_preserve); } public function listContent() { $v_list_detail = array(); if ($this->_openRead()) { if (!$this->_extractList('', $v_list_detail, "list", '', '')) { unset($v_list_detail); $v_list_detail = 0; } $this->_close(); } return $v_list_detail; } public function createModify($p_filelist, $p_add_dir, $p_remove_dir = '') { $v_result = true; if (!$this->_openWrite()) { return false; } if ($p_filelist != '') { if (is_array($p_filelist)) { $v_list = $p_filelist; } elseif (is_string($p_filelist)) { $v_list = explode($this->_separator, $p_filelist); } else { $this->_cleanFile(); $this->_error('Invalid file list'); return false; } $v_result = $this->_addList($v_list, $p_add_dir, $p_remove_dir); } if ($v_result) { $this->_writeFooter(); $this->_close(); } else { $this->_cleanFile(); } return $v_result; } public function addModify($p_filelist, $p_add_dir, $p_remove_dir = '') { $v_result = true; if (!$this->_isArchive()) { $v_result = $this->createModify( $p_filelist, $p_add_dir, $p_remove_dir ); } else { if (is_array($p_filelist)) { $v_list = $p_filelist; } elseif (is_string($p_filelist)) { $v_list = explode($this->_separator, $p_filelist); } else { $this->_error('Invalid file list'); return false; } $v_result = $this->_append($v_list, $p_add_dir, $p_remove_dir); } return $v_result; } public function addString($p_filename, $p_string, $p_datetime = false, $p_params = array()) { $p_stamp = @$p_params["stamp"] ? $p_params["stamp"] : ($p_datetime ? $p_datetime : time()); $p_mode = @$p_params["mode"] ? $p_params["mode"] : 0600; $p_type = @$p_params["type"] ? $p_params["type"] : ""; $p_uid = @$p_params["uid"] ? $p_params["uid"] : ""; $p_gid = @$p_params["gid"] ? $p_params["gid"] : ""; $v_result = true; if (!$this->_isArchive()) { if (!$this->_openWrite()) { return false; } $this->_close(); } if (!$this->_openAppend()) { return false; } $v_result = $this->_addString($p_filename, $p_string, $p_datetime, $p_params); $this->_writeFooter(); $this->_close(); return $v_result; } public function extractModify($p_path, $p_remove_path, $p_preserve = false) { $v_result = true; $v_list_detail = array(); if ($v_result = $this->_openRead()) { $v_result = $this->_extractList( $p_path, $v_list_detail, "complete", 0, $p_remove_path, $p_preserve ); $this->_close(); } return $v_result; } public function extractInString($p_filename) { if ($this->_openRead()) { $v_result = $this->_extractInString($p_filename); $this->_close(); } else { $v_result = null; } return $v_result; } public function extractList($p_filelist, $p_path = '', $p_remove_path = '', $p_preserve = false) { $v_result = true; $v_list_detail = array(); if (is_array($p_filelist)) { $v_list = $p_filelist; } elseif (is_string($p_filelist)) { $v_list = explode($this->_separator, $p_filelist); } else { $this->_error('Invalid string list'); return false; } if ($v_result = $this->_openRead()) { $v_result = $this->_extractList( $p_path, $v_list_detail, "partial", $v_list, $p_remove_path, $p_preserve ); $this->_close(); } return $v_result; } public function setAttribute() { $v_result = true; if (($v_size = func_num_args()) == 0) { return true; } $v_att_list = & func_get_args(); $i = 0; while ($i < $v_size) { switch ($v_att_list[$i]) { case ARCHIVE_TAR_ATT_SEPARATOR : if (($i + 1) >= $v_size) { $this->_error( 'Invalid number of parameters for ' . 'attribute ARCHIVE_TAR_ATT_SEPARATOR' ); return false; } $this->_separator = $v_att_list[$i + 1]; $i++; break; default : $this->_error('Unknown attribute code ' . $v_att_list[$i] . ''); return false; } $i++; } return $v_result; } public function setIgnoreRegexp($regexp) { $this->_ignore_regexp = $regexp; } public function setIgnoreList($list) { $regexp = str_replace(array('#', '.', '^', '$'), array('\#', '\.', '\^', '\$'), $list); $regexp = '#/' . join('$|/', $list) . '#'; $this->setIgnoreRegexp($regexp); } public function _error($p_message) { $this->error_object = $this->raiseError($p_message); } public function _warning($p_message) { $this->error_object = $this->raiseError($p_message); } public function _isArchive($p_filename = null) { if ($p_filename == null) { $p_filename = $this->_tarname; } clearstatcache(); return @is_file($p_filename) && !@is_link($p_filename); } public function _openWrite() { if ($this->_compress_type == 'gz' && function_exists('gzopen')) { $this->_file = @gzopen($this->_tarname, "wb9"); } else { if ($this->_compress_type == 'bz2' && function_exists('bzopen')) { $this->_file = @bzopen($this->_tarname, "w"); } else { if ($this->_compress_type == 'lzma2' && function_exists('xzopen')) { $this->_file = @xzopen($this->_tarname, 'w'); } else { if ($this->_compress_type == 'none') { $this->_file = @fopen($this->_tarname, "wb"); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); return false; } } } } if ($this->_file == 0) { $this->_error( 'Unable to open in write mode \'' . $this->_tarname . '\'' ); return false; } return true; } public function _openRead() { if (strtolower(substr($this->_tarname, 0, 7)) == 'http://') { if ($this->_temp_tarname == '') { $this->_temp_tarname = uniqid('tar') . '.tmp'; if (!$v_file_from = @fopen($this->_tarname, 'rb')) { $this->_error( 'Unable to open in read mode \'' . $this->_tarname . '\'' ); $this->_temp_tarname = ''; return false; } if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) { $this->_error( 'Unable to open in write mode \'' . $this->_temp_tarname . '\'' ); $this->_temp_tarname = ''; return false; } while ($v_data = @fread($v_file_from, 1024)) { @fwrite($v_file_to, $v_data); } @fclose($v_file_from); @fclose($v_file_to); } $v_filename = $this->_temp_tarname; } else { $v_filename = $this->_tarname; } if ($this->_compress_type == 'gz' && function_exists('gzopen')) { $this->_file = @gzopen($v_filename, "rb"); } else { if ($this->_compress_type == 'bz2' && function_exists('bzopen')) { $this->_file = @bzopen($v_filename, "r"); } else { if ($this->_compress_type == 'lzma2' && function_exists('xzopen')) { $this->_file = @xzopen($v_filename, "r"); } else { if ($this->_compress_type == 'none') { $this->_file = @fopen($v_filename, "rb"); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); return false; } } } } if ($this->_file == 0) { $this->_error('Unable to open in read mode \'' . $v_filename . '\''); return false; } return true; } public function _openReadWrite() { if ($this->_compress_type == 'gz') { $this->_file = @gzopen($this->_tarname, "r+b"); } else { if ($this->_compress_type == 'bz2') { $this->_error( 'Unable to open bz2 in read/write mode \'' . $this->_tarname . '\' (limitation of bz2 extension)' ); return false; } else { if ($this->_compress_type == 'lzma2') { $this->_error( 'Unable to open lzma2 in read/write mode \'' . $this->_tarname . '\' (limitation of lzma2 extension)' ); return false; } else { if ($this->_compress_type == 'none') { $this->_file = @fopen($this->_tarname, "r+b"); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); return false; } } } } if ($this->_file == 0) { $this->_error( 'Unable to open in read/write mode \'' . $this->_tarname . '\'' ); return false; } return true; } public function _close() { if (is_resource($this->_file)) { if ($this->_compress_type == 'gz') { @gzclose($this->_file); } else { if ($this->_compress_type == 'bz2') { @bzclose($this->_file); } else { if ($this->_compress_type == 'lzma2') { @xzclose($this->_file); } else { if ($this->_compress_type == 'none') { @fclose($this->_file); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); } } } } $this->_file = 0; } if ($this->_temp_tarname != '') { @unlink($this->_temp_tarname); $this->_temp_tarname = ''; } return true; } public function _cleanFile() { $this->_close(); if ($this->_temp_tarname != '') { @unlink($this->_temp_tarname); $this->_temp_tarname = ''; } else { @unlink($this->_tarname); } $this->_tarname = ''; return true; } public function _writeBlock($p_binary_data, $p_len = null) { if (is_resource($this->_file)) { if ($p_len === null) { if ($this->_compress_type == 'gz') { @gzputs($this->_file, $p_binary_data); } else { if ($this->_compress_type == 'bz2') { @bzwrite($this->_file, $p_binary_data); } else { if ($this->_compress_type == 'lzma2') { @xzwrite($this->_file, $p_binary_data); } else { if ($this->_compress_type == 'none') { @fputs($this->_file, $p_binary_data); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); } } } } } else { if ($this->_compress_type == 'gz') { @gzputs($this->_file, $p_binary_data, $p_len); } else { if ($this->_compress_type == 'bz2') { @bzwrite($this->_file, $p_binary_data, $p_len); } else { if ($this->_compress_type == 'lzma2') { @xzwrite($this->_file, $p_binary_data, $p_len); } else { if ($this->_compress_type == 'none') { @fputs($this->_file, $p_binary_data, $p_len); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); } } } } } } return true; } public function _readBlock() { $v_block = null; if (is_resource($this->_file)) { if ($this->_compress_type == 'gz') { $v_block = @gzread($this->_file, 512); } else { if ($this->_compress_type == 'bz2') { $v_block = @bzread($this->_file, 512); } else { if ($this->_compress_type == 'lzma2') { $v_block = @xzread($this->_file, 512); } else { if ($this->_compress_type == 'none') { $v_block = @fread($this->_file, 512); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); } } } } } return $v_block; } public function _jumpBlock($p_len = null) { if (is_resource($this->_file)) { if ($p_len === null) { $p_len = 1; } if ($this->_compress_type == 'gz') { @gzseek($this->_file, gztell($this->_file) + ($p_len * 512)); } else { if ($this->_compress_type == 'bz2') { for ($i = 0; $i < $p_len; $i++) { $this->_readBlock(); } } else { if ($this->_compress_type == 'lzma2') { for ($i = 0; $i < $p_len; $i++) { $this->_readBlock(); } } else { if ($this->_compress_type == 'none') { @fseek($this->_file, $p_len * 512, SEEK_CUR); } else { $this->_error( 'Unknown or missing compression type (' . $this->_compress_type . ')' ); } } } } } return true; } public function _writeFooter() { if (is_resource($this->_file)) { $v_binary_data = pack('a1024', ''); $this->_writeBlock($v_binary_data); } return true; } public function _addList($p_list, $p_add_dir, $p_remove_dir) { $v_result = true; $v_header = array(); $p_add_dir = $this->_translateWinPath($p_add_dir); $p_remove_dir = $this->_translateWinPath($p_remove_dir, false); if (!$this->_file) { $this->_error('Invalid file descriptor'); return false; } if (sizeof($p_list) == 0) { return true; } foreach ($p_list as $v_filename) { if (!$v_result) { break; } if ($v_filename == $this->_tarname) { continue; } if ($v_filename == '') { continue; } if ($this->_ignore_regexp && preg_match($this->_ignore_regexp, '/' . $v_filename)) { $this->_warning("File '$v_filename' ignored"); continue; } if (!file_exists($v_filename) && !is_link($v_filename)) { $this->_warning("File '$v_filename' does not exist"); continue; } if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir)) { return false; } if (@is_dir($v_filename) && !@is_link($v_filename)) { if (!($p_hdir = opendir($v_filename))) { $this->_warning("Directory '$v_filename' can not be read"); continue; } while (false !== ($p_hitem = readdir($p_hdir))) { if (($p_hitem != '.') && ($p_hitem != '..')) { if ($v_filename != ".") { $p_temp_list[0] = $v_filename . '/' . $p_hitem; } else { $p_temp_list[0] = $p_hitem; } $v_result = $this->_addList( $p_temp_list, $p_add_dir, $p_remove_dir ); } } unset($p_temp_list); unset($p_hdir); unset($p_hitem); } } return $v_result; } public function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir, $v_stored_filename = null) { if (!$this->_file) { $this->_error('Invalid file descriptor'); return false; } if ($p_filename == '') { $this->_error('Invalid file name'); return false; } if (is_null($v_stored_filename)) { $p_filename = $this->_translateWinPath($p_filename, false); $v_stored_filename = $p_filename; if (strcmp($p_filename, $p_remove_dir) == 0) { return true; } if ($p_remove_dir != '') { if (substr($p_remove_dir, -1) != '/') { $p_remove_dir .= '/'; } if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) { $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); } } $v_stored_filename = $this->_translateWinPath($v_stored_filename); if ($p_add_dir != '') { if (substr($p_add_dir, -1) == '/') { $v_stored_filename = $p_add_dir . $v_stored_filename; } else { $v_stored_filename = $p_add_dir . '/' . $v_stored_filename; } } $v_stored_filename = $this->_pathReduction($v_stored_filename); } if ($this->_isArchive($p_filename)) { if (($v_file = @fopen($p_filename, "rb")) == 0) { $this->_warning( "Unable to open file '" . $p_filename . "' in binary read mode" ); return true; } if (!$this->_writeHeader($p_filename, $v_stored_filename)) { return false; } while (($v_buffer = fread($v_file, 512)) != '') { $v_binary_data = pack("a512", "$v_buffer"); $this->_writeBlock($v_binary_data); } fclose($v_file); } else { if (!$this->_writeHeader($p_filename, $v_stored_filename)) { return false; } } return true; } public function _addString($p_filename, $p_string, $p_datetime = false, $p_params = array()) { $p_stamp = @$p_params["stamp"] ? $p_params["stamp"] : ($p_datetime ? $p_datetime : time()); $p_mode = @$p_params["mode"] ? $p_params["mode"] : 0600; $p_type = @$p_params["type"] ? $p_params["type"] : ""; $p_uid = @$p_params["uid"] ? $p_params["uid"] : 0; $p_gid = @$p_params["gid"] ? $p_params["gid"] : 0; if (!$this->_file) { $this->_error('Invalid file descriptor'); return false; } if ($p_filename == '') { $this->_error('Invalid file name'); return false; } $p_filename = $this->_translateWinPath($p_filename, false); if ($p_datetime === false) { $p_datetime = time(); } if (!$this->_writeHeaderBlock( $p_filename, strlen($p_string), $p_stamp, $p_mode, $p_type, $p_uid, $p_gid ) ) { return false; } $i = 0; while (($v_buffer = substr($p_string, (($i++) * 512), 512)) != '') { $v_binary_data = pack("a512", $v_buffer); $this->_writeBlock($v_binary_data); } return true; } public function _writeHeader($p_filename, $p_stored_filename) { if ($p_stored_filename == '') { $p_stored_filename = $p_filename; } $v_reduce_filename = $this->_pathReduction($p_stored_filename); if (strlen($v_reduce_filename) > 99) { if (!$this->_writeLongHeader($v_reduce_filename)) { return false; } } $v_info = lstat($p_filename); $v_uid = sprintf("%07s", DecOct($v_info[4])); $v_gid = sprintf("%07s", DecOct($v_info[5])); $v_perms = sprintf("%07s", DecOct($v_info['mode'] & 000777)); $v_mtime = sprintf("%011s", DecOct($v_info['mtime'])); $v_linkname = ''; if (@is_link($p_filename)) { $v_typeflag = '2'; $v_linkname = readlink($p_filename); $v_size = sprintf("%011s", DecOct(0)); } elseif (@is_dir($p_filename)) { $v_typeflag = "5"; $v_size = sprintf("%011s", DecOct(0)); } else { $v_typeflag = '0'; clearstatcache(); $v_size = sprintf("%011s", DecOct($v_info['size'])); } $v_magic = 'ustar '; $v_version = ' '; if (function_exists('posix_getpwuid')) { $userinfo = posix_getpwuid($v_info[4]); $groupinfo = posix_getgrgid($v_info[5]); $v_uname = $userinfo['name']; $v_gname = $groupinfo['name']; } else { $v_uname = ''; $v_gname = ''; } $v_devmajor = ''; $v_devminor = ''; $v_prefix = ''; $v_binary_data_first = pack( "a100a8a8a8a12a12", $v_reduce_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime ); $v_binary_data_last = pack( "a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, '' ); $v_checksum = 0; for ($i = 0; $i < 148; $i++) { $v_checksum += ord(substr($v_binary_data_first, $i, 1)); } for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); } for ($i = 156, $j = 0; $i < 512; $i++, $j++) { $v_checksum += ord(substr($v_binary_data_last, $j, 1)); } $this->_writeBlock($v_binary_data_first, 148); $v_checksum = sprintf("%06s ", DecOct($v_checksum)); $v_binary_data = pack("a8", $v_checksum); $this->_writeBlock($v_binary_data, 8); $this->_writeBlock($v_binary_data_last, 356); return true; } public function _writeHeaderBlock( $p_filename, $p_size, $p_mtime = 0, $p_perms = 0, $p_type = '', $p_uid = 0, $p_gid = 0 ) { $p_filename = $this->_pathReduction($p_filename); if (strlen($p_filename) > 99) { if (!$this->_writeLongHeader($p_filename)) { return false; } } if ($p_type == "5") { $v_size = sprintf("%011s", DecOct(0)); } else { $v_size = sprintf("%011s", DecOct($p_size)); } $v_uid = sprintf("%07s", DecOct($p_uid)); $v_gid = sprintf("%07s", DecOct($p_gid)); $v_perms = sprintf("%07s", DecOct($p_perms & 000777)); $v_mtime = sprintf("%11s", DecOct($p_mtime)); $v_linkname = ''; $v_magic = 'ustar '; $v_version = ' '; if (function_exists('posix_getpwuid')) { $userinfo = posix_getpwuid($p_uid); $groupinfo = posix_getgrgid($p_gid); $v_uname = $userinfo['name']; $v_gname = $groupinfo['name']; } else { $v_uname = ''; $v_gname = ''; } $v_devmajor = ''; $v_devminor = ''; $v_prefix = ''; $v_binary_data_first = pack( "a100a8a8a8a12A12", $p_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime ); $v_binary_data_last = pack( "a1a100a6a2a32a32a8a8a155a12", $p_type, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, '' ); $v_checksum = 0; for ($i = 0; $i < 148; $i++) { $v_checksum += ord(substr($v_binary_data_first, $i, 1)); } for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); } for ($i = 156, $j = 0; $i < 512; $i++, $j++) { $v_checksum += ord(substr($v_binary_data_last, $j, 1)); } $this->_writeBlock($v_binary_data_first, 148); $v_checksum = sprintf("%06s ", DecOct($v_checksum)); $v_binary_data = pack("a8", $v_checksum); $this->_writeBlock($v_binary_data, 8); $this->_writeBlock($v_binary_data_last, 356); return true; } public function _writeLongHeader($p_filename) { $v_size = sprintf("%11s ", DecOct(strlen($p_filename))); $v_typeflag = 'L'; $v_linkname = ''; $v_magic = ''; $v_version = ''; $v_uname = ''; $v_gname = ''; $v_devmajor = ''; $v_devminor = ''; $v_prefix = ''; $v_binary_data_first = pack( "a100a8a8a8a12a12", '././@LongLink', 0, 0, 0, $v_size, 0 ); $v_binary_data_last = pack( "a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, '' ); $v_checksum = 0; for ($i = 0; $i < 148; $i++) { $v_checksum += ord(substr($v_binary_data_first, $i, 1)); } for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); } for ($i = 156, $j = 0; $i < 512; $i++, $j++) { $v_checksum += ord(substr($v_binary_data_last, $j, 1)); } $this->_writeBlock($v_binary_data_first, 148); $v_checksum = sprintf("%06s ", DecOct($v_checksum)); $v_binary_data = pack("a8", $v_checksum); $this->_writeBlock($v_binary_data, 8); $this->_writeBlock($v_binary_data_last, 356); $i = 0; while (($v_buffer = substr($p_filename, (($i++) * 512), 512)) != '') { $v_binary_data = pack("a512", "$v_buffer"); $this->_writeBlock($v_binary_data); } return true; } public function _readHeader($v_binary_data, &$v_header) { if (strlen($v_binary_data) == 0) { $v_header['filename'] = ''; return true; } if (strlen($v_binary_data) != 512) { $v_header['filename'] = ''; $this->_error('Invalid block size : ' . strlen($v_binary_data)); return false; } if (!is_array($v_header)) { $v_header = array(); } $v_checksum = 0; for ($i = 0; $i < 148; $i++) { $v_checksum += ord(substr($v_binary_data, $i, 1)); } for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); } for ($i = 156; $i < 512; $i++) { $v_checksum += ord(substr($v_binary_data, $i, 1)); } if (version_compare(PHP_VERSION, "5.5.0-dev") < 0) { $fmt = "a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/" . "a8checksum/a1typeflag/a100link/a6magic/a2version/" . "a32uname/a32gname/a8devmajor/a8devminor/a131prefix"; } else { $fmt = "Z100filename/Z8mode/Z8uid/Z8gid/Z12size/Z12mtime/" . "Z8checksum/Z1typeflag/Z100link/Z6magic/Z2version/" . "Z32uname/Z32gname/Z8devmajor/Z8devminor/Z131prefix"; } $v_data = unpack($fmt, $v_binary_data); if (strlen($v_data["prefix"]) > 0) { $v_data["filename"] = "$v_data[prefix]/$v_data[filename]"; } $v_header['checksum'] = OctDec(trim($v_data['checksum'])); if ($v_header['checksum'] != $v_checksum) { $v_header['filename'] = ''; if (($v_checksum == 256) && ($v_header['checksum'] == 0)) { return true; } $this->_error( 'Invalid checksum for file "' . $v_data['filename'] . '" : ' . $v_checksum . ' calculated, ' . $v_header['checksum'] . ' expected' ); return false; } $v_header['filename'] = rtrim($v_data['filename'], "\0"); if ($this->_maliciousFilename($v_header['filename'])) { $this->_error( 'Malicious .tar detected, file "' . $v_header['filename'] . '" will not install in desired directory tree' ); return false; } $v_header['mode'] = OctDec(trim($v_data['mode'])); $v_header['uid'] = OctDec(trim($v_data['uid'])); $v_header['gid'] = OctDec(trim($v_data['gid'])); $v_header['size'] = OctDec(trim($v_data['size'])); $v_header['mtime'] = OctDec(trim($v_data['mtime'])); if (($v_header['typeflag'] = $v_data['typeflag']) == "5") { $v_header['size'] = 0; } $v_header['link'] = trim($v_data['link']); return true; } private function _maliciousFilename($file) { if (strpos($file, '/../') !== false) { return true; } if (strpos($file, '../') === 0) { return true; } return false; } public function _readLongHeader(&$v_header) { $v_filename = ''; $v_filesize = $v_header['size']; $n = floor($v_header['size'] / 512); for ($i = 0; $i < $n; $i++) { $v_content = $this->_readBlock(); $v_filename .= $v_content; } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); $v_filename .= $v_content; } $v_binary_data = $this->_readBlock(); if (!$this->_readHeader($v_binary_data, $v_header)) { return false; } $v_filename = rtrim(substr($v_filename, 0, $v_filesize), "\0"); $v_header['filename'] = $v_filename; if ($this->_maliciousFilename($v_filename)) { $this->_error( 'Malicious .tar detected, file "' . $v_filename . '" will not install in desired directory tree' ); return false; } return true; } private function _extractInString($p_filename) { $v_result_str = ""; while (strlen($v_binary_data = $this->_readBlock()) != 0) { if (!$this->_readHeader($v_binary_data, $v_header)) { return null; } if ($v_header['filename'] == '') { continue; } if ($v_header['typeflag'] == 'L') { if (!$this->_readLongHeader($v_header)) { return null; } } if ($v_header['filename'] == $p_filename) { if ($v_header['typeflag'] == "5") { $this->_error( 'Unable to extract in string a directory ' . 'entry {' . $v_header['filename'] . '}' ); return null; } else { $n = floor($v_header['size'] / 512); for ($i = 0; $i < $n; $i++) { $v_result_str .= $this->_readBlock(); } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); $v_result_str .= substr( $v_content, 0, ($v_header['size'] % 512) ); } return $v_result_str; } } else { $this->_jumpBlock(ceil(($v_header['size'] / 512))); } } return null; } public function _extractList( $p_path, &$p_list_detail, $p_mode, $p_file_list, $p_remove_path, $p_preserve = false ) { $v_result = true; $v_nb = 0; $v_extract_all = true; $v_listing = false; $p_path = $this->_translateWinPath($p_path, false); if ($p_path == '' || (substr($p_path, 0, 1) != '/' && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':')) ) { $p_path = "./" . $p_path; } $p_remove_path = $this->_translateWinPath($p_remove_path); if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/')) { $p_remove_path .= '/'; } $p_remove_path_size = strlen($p_remove_path); switch ($p_mode) { case "complete" : $v_extract_all = true; $v_listing = false; break; case "partial" : $v_extract_all = false; $v_listing = false; break; case "list" : $v_extract_all = false; $v_listing = true; break; default : $this->_error('Invalid extract mode (' . $p_mode . ')'); return false; } clearstatcache(); while (strlen($v_binary_data = $this->_readBlock()) != 0) { $v_extract_file = false; $v_extraction_stopped = 0; if (!$this->_readHeader($v_binary_data, $v_header)) { return false; } if ($v_header['filename'] == '') { continue; } if ($v_header['typeflag'] == 'L') { if (!$this->_readLongHeader($v_header)) { return false; } } if ($v_header['typeflag'] == 'x' || $v_header['typeflag'] == 'g') { $this->_jumpBlock(ceil(($v_header['size'] / 512))); continue; } if ((!$v_extract_all) && (is_array($p_file_list))) { $v_extract_file = false; for ($i = 0; $i < sizeof($p_file_list); $i++) { if (substr($p_file_list[$i], -1) == '/') { if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) == $p_file_list[$i]) ) { $v_extract_file = true; break; } } elseif ($p_file_list[$i] == $v_header['filename']) { $v_extract_file = true; break; } } } else { $v_extract_file = true; } if (($v_extract_file) && (!$v_listing)) { if (($p_remove_path != '') && (substr($v_header['filename'] . '/', 0, $p_remove_path_size) == $p_remove_path) ) { $v_header['filename'] = substr( $v_header['filename'], $p_remove_path_size ); if ($v_header['filename'] == '') { continue; } } if (($p_path != './') && ($p_path != '/')) { while (substr($p_path, -1) == '/') { $p_path = substr($p_path, 0, strlen($p_path) - 1); } if (substr($v_header['filename'], 0, 1) == '/') { $v_header['filename'] = $p_path . $v_header['filename']; } else { $v_header['filename'] = $p_path . '/' . $v_header['filename']; } } if (file_exists($v_header['filename'])) { if ((@is_dir($v_header['filename'])) && ($v_header['typeflag'] == '') ) { $this->_error( 'File ' . $v_header['filename'] . ' already exists as a directory' ); return false; } if (($this->_isArchive($v_header['filename'])) && ($v_header['typeflag'] == "5") ) { $this->_error( 'Directory ' . $v_header['filename'] . ' already exists as a file' ); return false; } if (!is_writeable($v_header['filename'])) { $this->_error( 'File ' . $v_header['filename'] . ' already exists and is write protected' ); return false; } if (filemtime($v_header['filename']) > $v_header['mtime']) { } } elseif (($v_result = $this->_dirCheck( ($v_header['typeflag'] == "5" ? $v_header['filename'] : dirname($v_header['filename'])) )) != 1 ) { $this->_error('Unable to create path for ' . $v_header['filename']); return false; } if ($v_extract_file) { if ($v_header['typeflag'] == "5") { if (!@file_exists($v_header['filename'])) { if (!@mkdir($v_header['filename'], 0777)) { $this->_error( 'Unable to create directory {' . $v_header['filename'] . '}' ); return false; } } } elseif ($v_header['typeflag'] == "2") { if (@file_exists($v_header['filename'])) { @unlink($v_header['filename']); } if (!@symlink($v_header['link'], $v_header['filename'])) { $this->_error( 'Unable to extract symbolic link {' . $v_header['filename'] . '}' ); return false; } } else { if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { $this->_error( 'Error while opening {' . $v_header['filename'] . '} in write binary mode' ); return false; } else { $n = floor($v_header['size'] / 512); for ($i = 0; $i < $n; $i++) { $v_content = $this->_readBlock(); fwrite($v_dest_file, $v_content, 512); } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); fwrite($v_dest_file, $v_content, ($v_header['size'] % 512)); } @fclose($v_dest_file); if ($p_preserve) { @chown($v_header['filename'], $v_header['uid']); @chgrp($v_header['filename'], $v_header['gid']); } @touch($v_header['filename'], $v_header['mtime']); if ($v_header['mode'] & 0111) { $mode = fileperms($v_header['filename']) | (~umask() & 0111); @chmod($v_header['filename'], $mode); } } clearstatcache(); if (!is_file($v_header['filename'])) { $this->_error( 'Extracted file ' . $v_header['filename'] . 'does not exist. Archive may be corrupted.' ); return false; } $filesize = filesize($v_header['filename']); if ($filesize != $v_header['size']) { $this->_error( 'Extracted file ' . $v_header['filename'] . ' does not have the correct file size \'' . $filesize . '\' (' . $v_header['size'] . ' expected). Archive may be corrupted.' ); return false; } } } else { $this->_jumpBlock(ceil(($v_header['size'] / 512))); } } else { $this->_jumpBlock(ceil(($v_header['size'] / 512))); } if ($v_listing || $v_extract_file || $v_extraction_stopped) { if (($v_file_dir = dirname($v_header['filename'])) == $v_header['filename'] ) { $v_file_dir = ''; } if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) { $v_file_dir = '/'; } $p_list_detail[$v_nb++] = $v_header; if (is_array($p_file_list) && (count($p_list_detail) == count($p_file_list))) { return true; } } } return true; } public function _openAppend() { if (filesize($this->_tarname) == 0) { return $this->_openWrite(); } if ($this->_compress) { $this->_close(); if (!@rename($this->_tarname, $this->_tarname . ".tmp")) { $this->_error( 'Error while renaming \'' . $this->_tarname . '\' to temporary file \'' . $this->_tarname . '.tmp\'' ); return false; } if ($this->_compress_type == 'gz') { $v_temp_tar = @gzopen($this->_tarname . ".tmp", "rb"); } elseif ($this->_compress_type == 'bz2') { $v_temp_tar = @bzopen($this->_tarname . ".tmp", "r"); } elseif ($this->_compress_type == 'lzma2') { $v_temp_tar = @xzopen($this->_tarname . ".tmp", "r"); } if ($v_temp_tar == 0) { $this->_error( 'Unable to open file \'' . $this->_tarname . '.tmp\' in binary read mode' ); @rename($this->_tarname . ".tmp", $this->_tarname); return false; } if (!$this->_openWrite()) { @rename($this->_tarname . ".tmp", $this->_tarname); return false; } if ($this->_compress_type == 'gz') { $end_blocks = 0; while (!@gzeof($v_temp_tar)) { $v_buffer = @gzread($v_temp_tar, 512); if ($v_buffer == ARCHIVE_TAR_END_BLOCK || strlen($v_buffer) == 0) { $end_blocks++; continue; } elseif ($end_blocks > 0) { for ($i = 0; $i < $end_blocks; $i++) { $this->_writeBlock(ARCHIVE_TAR_END_BLOCK); } $end_blocks = 0; } $v_binary_data = pack("a512", $v_buffer); $this->_writeBlock($v_binary_data); } @gzclose($v_temp_tar); } elseif ($this->_compress_type == 'bz2') { $end_blocks = 0; while (strlen($v_buffer = @bzread($v_temp_tar, 512)) > 0) { if ($v_buffer == ARCHIVE_TAR_END_BLOCK || strlen($v_buffer) == 0) { $end_blocks++; continue; } elseif ($end_blocks > 0) { for ($i = 0; $i < $end_blocks; $i++) { $this->_writeBlock(ARCHIVE_TAR_END_BLOCK); } $end_blocks = 0; } $v_binary_data = pack("a512", $v_buffer); $this->_writeBlock($v_binary_data); } @bzclose($v_temp_tar); } elseif ($this->_compress_type == 'lzma2') { $end_blocks = 0; while (strlen($v_buffer = @xzread($v_temp_tar, 512)) > 0) { if ($v_buffer == ARCHIVE_TAR_END_BLOCK || strlen($v_buffer) == 0) { $end_blocks++; continue; } elseif ($end_blocks > 0) { for ($i = 0; $i < $end_blocks; $i++) { $this->_writeBlock(ARCHIVE_TAR_END_BLOCK); } $end_blocks = 0; } $v_binary_data = pack("a512", $v_buffer); $this->_writeBlock($v_binary_data); } @xzclose($v_temp_tar); } if (!@unlink($this->_tarname . ".tmp")) { $this->_error( 'Error while deleting temporary file \'' . $this->_tarname . '.tmp\'' ); } } else { if (!$this->_openReadWrite()) { return false; } clearstatcache(); $v_size = filesize($this->_tarname); fseek($this->_file, $v_size - 1024); if (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) { fseek($this->_file, $v_size - 1024); } elseif (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) { fseek($this->_file, $v_size - 512); } } return true; } public function _append($p_filelist, $p_add_dir = '', $p_remove_dir = '') { if (!$this->_openAppend()) { return false; } if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir)) { $this->_writeFooter(); } $this->_close(); return true; } public function _dirCheck($p_dir) { clearstatcache(); if ((@is_dir($p_dir)) || ($p_dir == '')) { return true; } $p_parent_dir = dirname($p_dir); if (($p_parent_dir != $p_dir) && ($p_parent_dir != '') && (!$this->_dirCheck($p_parent_dir)) ) { return false; } if (!@mkdir($p_dir, 0777)) { $this->_error("Unable to create directory '$p_dir'"); return false; } return true; } private function _pathReduction($p_dir) { $v_result = ''; if ($p_dir != '') { $v_list = explode('/', $p_dir); for ($i = sizeof($v_list) - 1; $i >= 0; $i--) { if ($v_list[$i] == ".") { } else { if ($v_list[$i] == "..") { $i--; } else { if (($v_list[$i] == '') && ($i != (sizeof($v_list) - 1)) && ($i != 0) ) { } else { $v_result = $v_list[$i] . ($i != (sizeof($v_list) - 1) ? '/' . $v_result : ''); } } } } } if (defined('OS_WINDOWS') && OS_WINDOWS) { $v_result = strtr($v_result, '\\', '/'); } return $v_result; } public function _translateWinPath($p_path, $p_remove_disk_letter = true) { if (defined('OS_WINDOWS') && OS_WINDOWS) { if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false) ) { $p_path = substr($p_path, $v_position + 1); } if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0, 1) == '\\')) { $p_path = strtr($p_path, '\\', '/'); } } return $p_path; } } \ No newline at end of file diff --git a/fileadmin/unpack.php b/fileadmin/unpack.php new file mode 100644 index 00000000..48714156 --- /dev/null +++ b/fileadmin/unpack.php @@ -0,0 +1,161 @@ +\n"; +echo "返回目录解压结果\n"; +echo "\n"; +echo "
\n"; +switch ($type) { + case "gz" : + if (!function_exists("gzopen")) { + echo "系统没有支持核心函数!"; + } else { + $fp = preg_replace("/(.*?)\.gz$/si", "\\1", $unpackdir . "/" . basename($path)); + if (file_exists($fp)) { + echo "目标文件已经存在了哦!"; + } elseif (!($gz = gzopen($path, "r"))) { + echo "系统无法打开压缩文件!"; + } else { + if (!($fp = fopen($fp, "wb"))) { + echo "系统无法保存解压文件!"; + } else { + while (!feof($gz)) { + fwrite($fp, gzread($gz, 4096)); + } + gzclose($gz); + fclose($fp); + echo "压缩文件已经解压完成!"; + } + } + } + break; + case "bz2" : + if (!function_exists("bzopen")) { + echo "系统没有支持核心函数!"; + } else { + $fp = preg_replace("/(.*?)\.bz2$/si", "\\1", $unpackdir . "/" . basename($path)); + if (file_exists($fp)) { + echo "目标文件已经存在了哦!"; + } elseif (!($bz2 = bzopen($path, "r"))) { + echo "系统无法打开压缩文件!"; + } else { + if (!($fp = fopen($fp, "wb"))) { + echo "系统无法保存解压文件!"; + } else { + while (!feof($bz2)) { + fwrite($fp, bzread($bz2, 4096)); + } + bzclose($bz2); + fclose($fp); + echo "压缩文件已经解压完成!"; + } + } + } + break; + case "zip" : + if (!file_exists("pclzip.php")) { + echo "暂时无法进行解压操作!"; + } else { + require "pclzip.php"; + $pk = new pclzip($path); + if (($zip = $pk->extract(PCLZIP_OPT_PATH, $unpackdir)) == false) { + echo "无法成功解压您的文件!"; + } else { + echo "成功解压出 " . count($zip) . " 个档案!"; + } + } + break; + case "tar" : + if (!file_exists("tarcls.php")) { + echo "暂时无法进行解压操作!"; + } else { + require "tarcls.php"; + $pk = new Archive_Tar($path); + if ($pk->extract($unpackdir) == false) { + echo "无法成功解压您的文件!"; + } else { + echo "成功的对文件进行解压!"; + } + } + break; + case "7za" : + $bin = "./p7zip.bin"; + if (is_file($bin)) { + if (function_exists("chmod")) { + chmod($bin, 0700); + if (!is_executable($bin)) { + $tmp = sys_get_temp_dir() . '/p7zip.bin'; + if (copy($bin, $tmp)) { + chmod($tmp, 0700); + !is_executable($tmp) ? $bin = false : $bin = $tmp; + } else { + $bin = false; + } + } + } + } + if (___superexec($bin) == "") { + if (___superexec('7z') != "") { + $bin = "7z"; + } elseif (___superexec('7za') != "") { + $bin = "7za"; + } + } + if (___superexec($bin) == "") { + echo "程序无法正常完成工作!"; + } else { + $a = addslashes($path); + $b = addslashes($unpackdir); + $c = isset($_GET['password']) ? addslashes(trim($_GET['password'])) : null; + echo nl2br(___codepre(___convert(___superexec("$bin x '$a' '-o$b' '-p$c' -y 2>&1"), "UTF-8"))); + } + break; + case "rar" : + $bin = "./unrar.bin"; + if (is_file($bin)) { + if (function_exists("chmod")) { + chmod($bin, 0700); + if (!is_executable($bin)) { + $tmp = sys_get_temp_dir() . '/unrar.bin'; + if (copy($bin, $tmp)) { + chmod($tmp, 0700); + !is_executable($tmp) ? $bin = false : $bin = $tmp; + } else { + $bin = false; + } + } + } + } + if (___superexec($bin) == "") { + if (___superexec('rar') != "") { + $bin = "rar"; + } elseif (___superexec('unrar') != "") { + $bin = "unrar"; + } + } + if (___superexec($bin) == "") { + echo "程序无法正常完成工作!"; + } else { + $a = addslashes($path); + $b = addslashes($unpackdir); + $c = isset($_GET['password']) ? addslashes(trim($_GET['password'])) : null; + if ($c == null) { + echo nl2br(___codepre(___convert(___superexec("$bin x -y '$a' '$b' 2>&1"), "UTF-8"))); + } else { + echo nl2br(___codepre(___convert(___superexec("$bin x -y '-p$c' '$a' '$b' 2>&1"), "UTF-8"))); + } + } + break; + default : + echo "暂时不支持的压缩类型!"; +} +echo "
\n"; +xhtml_footer(); +?> diff --git a/fileadmin/unzip.php b/fileadmin/unzip.php new file mode 100644 index 00000000..3c1b10cf --- /dev/null +++ b/fileadmin/unzip.php @@ -0,0 +1,75 @@ +\n"; + echo "返回目录错误提示\n"; + echo "\n"; + echo "
\n"; + echo "此文件暂时不能被系统操作!"; + echo "
\n"; + xhtml_footer(); + exit; +} +xhtml_head("爱特ZIP工具"); +if (isset($_POST['z']) && is_array($_POST['z']) && isset($_POST['undir']) && is_dir(trim($_POST['undir']))) { + echo "
\n"; + echo "返回目录解压结果\n"; + echo "
\n"; + $pk = new pclzip($path); + $dir = trim($_POST['undir']); + $arr = array_map('urldecode', $_POST['z']); + if (($zip = $pk->extract(PCLZIP_OPT_PATH, $dir, PCLZIP_OPT_BY_NAME, $arr)) == false) { + echo "
\n"; + echo "无法成功解压您的文件!"; + echo "\n
\n"; + } else { + echo "
\n"; + echo "本次共操作 " . count($zip) . " 个档案!"; + echo "\n
\n"; + foreach ($zip as $zf) { + echo "
\n"; + if ($zf['folder']) { + echo "[目录]"; + } else { + echo "[文件]"; + } + echo ___convert($zf['filename'], "UTF-8") . "(" . $zf['status'] . ")\n
\n"; + echo "
\n"; + } + } +} else { + echo "
\n"; + echo "返回目录文件列表\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + $unzipdir = dirname($path); + isset($_GET['unzipdir']) && is_dir($_GET['unzipdir']) && $unzipdir = trim($_GET['unzipdir']); + echo "解压到此路径:\n"; + echo "\n"; + echo "\n"; + echo "(全选|消选)\n"; + echo "
\n"; + $select = isset($_GET['select']) ? "checked " : null; + foreach ($ziplist as $zfile) { + echo "
\n"; + echo "\n"; + if ($zfile['folder']) { + echo "[目录]" . ___codepre(___convert($zfile['stored_filename'], "UTF-8")); + } else { + echo "[文件]" . ___codepre(___convert($zfile['stored_filename'], "UTF-8")); + echo "(" . ___filesize($zfile['size']) . "->" . ___filesize($zfile['compressed_size']) . ")"; + } + echo "\n
\n"; + } + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/upload.php b/fileadmin/upload.php new file mode 100644 index 00000000..ea57cd64 --- /dev/null +++ b/fileadmin/upload.php @@ -0,0 +1,139 @@ +\n"; +echo "返回目录\n"; +if (isset($_GET['url'])) { + echo "本地上传\n"; +} else { + echo "远程上传\n"; +} +echo "\n"; +echo "
\n"; +echo "
\n"; +echo "\n"; +if (isset($_GET['url'])) echo "\n"; +echo "数量->\n"; +echo "\n"; +echo "
\n"; +echo "
\n"; +if (isset($_GET['url'])) { + if (isset($_POST['fupload'])) if (is_array($_POST['fupload'])) if (count($_POST['fupload']) > 0) { + $o = 0; + $i = 0; + echo "
上传文件信息报告
\n"; + while ($i < count($_POST['fupload'])) { + if (!preg_match("/^[a-z0-9]+\:\/\/.+/si", $_POST['fupload'][$i])) { + $i++; + continue; + } + preg_match("/[^\/\?&\s\:\\\]+$/i", $_POST['fupload'][$i], $fname); + $fname = $fname[0] != "" ? $fname[0] : time() . ".file"; + if (!($fp = fopen(trim($_POST['fupload'][$i]), "rb"))) { + echo "
\n"; + echo "{$fname}(Error !)\n"; + echo "
\n"; + } elseif (!($fp2 = fopen($fpath = "$getcwd/$fname", "wb"))) { + echo "
\n"; + echo "{$fname}(Error !)\n"; + echo "
\n"; + } else { + while (!feof($fp)) { + fwrite($fp2, fread($fp, 4096)); + } + fclose($fp); + fclose($fp2); + if (filesize($fpath) > 0) { + echo "
\n"; + echo "{$fname}(Yes !)\n"; + echo "
\n"; + } else { + unlink($fpath); + echo "
\n"; + echo "{$fname}(Error !)\n"; + echo "
\n"; + } + } + $o++; + $i++; + } + if ($o < 1) echo "郁闷,没有任何文件被上传!\n"; + } + echo "
输入您的上传地址
\n"; + echo "
\n"; + if (!isset($_GET['uploadnum'])) { + echo "
\n"; + echo "地址[+]\n"; + echo "
\n"; + } else { + $i = 0; + $uploadnum = (int)trim($_GET['uploadnum']); + if ($uploadnum < 1) $uploadnum = 1; + while ($i < $uploadnum) { + echo "
\n"; + echo "地址[" . ($i + 1) . "]\n"; + echo "
\n"; + $i++; + } + } + echo "
\n"; + echo "(有效 地址)\n"; + echo "
\n"; + echo "
\n"; +} else { + if (isset($_FILES['fupload'])) if (count($_FILES['fupload']) > 0) { + $o = 0; + $i = 0; + echo "
上传文件信息报告
\n"; + while ($i < count($_FILES['fupload']['size'])) { + if ($_FILES['fupload']['size'][$i] < 1) { + $i++; + continue; + } + if (!move_uploaded_file($_FILES['fupload']['tmp_name'][$i], $getcwd . "/" . $_FILES['fupload']['name'][$i])) { + echo "
\n"; + echo "{$_FILES['fupload']['name'][$i]}(Error !)\n"; + echo "
\n"; + } else { + echo "
\n"; + echo "{$_FILES['fupload']['name'][$i]}(" . ___filesize($_FILES['fupload']['size'][$i]) . ")\n"; + echo "
\n"; + } + $o++; + $i++; + } + if ($o < 1) echo "郁闷,没有任何文件被上传!\n"; + } + echo "
选择您的上传文件
\n"; + echo "
\n"; + if (!isset($_GET['uploadnum'])) { + echo "
\n"; + echo "文件[+]\n"; + echo "
\n"; + } else { + $i = 0; + $uploadnum = (int)trim($_GET['uploadnum']); + if ($uploadnum < 1) $uploadnum = 1; + while ($i < $uploadnum) { + echo "
\n"; + echo "文件[" . ($i + 1) . "]\n"; + echo "
\n"; + $i++; + } + } + echo "
\n"; + echo "(有效 文件)\n"; + echo "
\n"; + echo "
\n"; +} +xhtml_footer(); +?> diff --git a/fileadmin/view.php b/fileadmin/view.php new file mode 100644 index 00000000..47a17ed6 --- /dev/null +++ b/fileadmin/view.php @@ -0,0 +1,86 @@ +\n"; + echo "返回目录错误提示\n"; + echo "\n"; + echo "
\n"; + echo "此文件您没有读取权限!"; + echo "
\n"; + xhtml_footer(); +} else { + xhtml_head("查看文件"); + echo "
\n"; + echo "返回目录选择编码\n"; + echo "
\n"; + echo "
"; + echo "
\n"; + echo "\n"; + echo ""; + echo "\n"; + echo "
\n"; + echo "
\n"; + echo "
爱特文件内容浏览
\n"; + if (filesize($path) > (2 * 1024 * 1024)) { + echo "
\n"; + echo "文件过大,请下载后查看!\n"; + echo "
\n"; + } else { + echo "
\n"; + if (!($data = file_get_contents($path))) { + echo "读取文件时发生了错误!\n"; + } else { + echo "
";
+            if (!isset($_GET['charset'])) {
+                echo nl2br(___codepre(___convert(trim($data), "UTF-8")));
+            } elseif (($charset = trim($_GET['charset'])) == "") {
+                echo nl2br(___codepre(___convert(trim($data), "UTF-8")));
+            } else {
+                echo nl2br(___codepre(___convert(trim($data), "UTF-8", $charset)));
+            }
+            echo "
\n";
+        }
+        echo "
"; + } + xhtml_footer(); +} +?> diff --git a/fileadmin/xhtml.php b/fileadmin/xhtml.php new file mode 100644 index 00000000..c988b2a8 --- /dev/null +++ b/fileadmin/xhtml.php @@ -0,0 +1,33 @@ + + + + {$title} - 〔{$name}〕 + + + + + +XHTML; +} + +function xhtml_footer() +{ + echo << + By:Xiaoqidun@Gmail.Com + + + + +XHTML; +} + +?> diff --git a/fonts/elegant-theme-line.eot b/fonts/elegant-theme-line.eot new file mode 100644 index 00000000..bf6c5802 Binary files /dev/null and b/fonts/elegant-theme-line.eot differ diff --git a/fonts/elegant-theme-line.svg b/fonts/elegant-theme-line.svg new file mode 100644 index 00000000..e1d36205 --- /dev/null +++ b/fonts/elegant-theme-line.svg @@ -0,0 +1,110 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fonts/elegant-theme-line.ttf b/fonts/elegant-theme-line.ttf new file mode 100644 index 00000000..b3b738e9 Binary files /dev/null and b/fonts/elegant-theme-line.ttf differ diff --git a/fonts/elegant-theme-line.woff b/fonts/elegant-theme-line.woff new file mode 100644 index 00000000..1e4de297 Binary files /dev/null and b/fonts/elegant-theme-line.woff differ diff --git a/fonts/flexslider-icon.eot b/fonts/flexslider-icon.eot new file mode 100644 index 00000000..97c4196f Binary files /dev/null and b/fonts/flexslider-icon.eot differ diff --git a/fonts/flexslider-icon.svg b/fonts/flexslider-icon.svg new file mode 100644 index 00000000..dff93f07 --- /dev/null +++ b/fonts/flexslider-icon.svg @@ -0,0 +1,19 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fonts/flexslider-icon.ttf b/fonts/flexslider-icon.ttf new file mode 100644 index 00000000..05432986 Binary files /dev/null and b/fonts/flexslider-icon.ttf differ diff --git a/fonts/flexslider-icon.woff b/fonts/flexslider-icon.woff new file mode 100644 index 00000000..10c4eeb8 Binary files /dev/null and b/fonts/flexslider-icon.woff differ diff --git a/fonts/glyphicons-halflings-regular.eot b/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 00000000..b93a4953 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.eot differ diff --git a/fonts/glyphicons-halflings-regular.svg b/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 00000000..8376c0f4 --- /dev/null +++ b/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fonts/glyphicons-halflings-regular.ttf b/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 00000000..1413fc60 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.ttf differ diff --git a/fonts/glyphicons-halflings-regular.woff b/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 00000000..9e612858 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.woff differ diff --git a/fonts/glyphicons-halflings-regular.woff2 b/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 00000000..64539b54 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/gif_images.php b/gif_images.php new file mode 100644 index 00000000..7e7f444c --- /dev/null +++ b/gif_images.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/google2ee4f236126d5696.html b/google2ee4f236126d5696.html new file mode 100644 index 00000000..8fd00293 --- /dev/null +++ b/google2ee4f236126d5696.html @@ -0,0 +1 @@ +google-site-verification: google2ee4f236126d5696.html \ No newline at end of file diff --git a/gy.js b/gy.js new file mode 100644 index 00000000..b341a85a --- /dev/null +++ b/gy.js @@ -0,0 +1 @@ +

+ + + \ No newline at end of file diff --git a/gy/jm.html b/gy/jm.html new file mode 100644 index 00000000..d93c38fb --- /dev/null +++ b/gy/jm.html @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/gy/t.html b/gy/t.html new file mode 100644 index 00000000..9a437730 --- /dev/null +++ b/gy/t.html @@ -0,0 +1,53 @@ + + + + + +
+

+
+ +
+
+ + + + + + + + + + + + + + + +姬长信API使用说明与调用-给予每次不一样 + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
姬长信 +
+

食用说明

+
+壁纸均为1080P,含http与https方式,国内外CDN驱动
须知:姬长信API将会记录你的域名、使用流量、调用次数等重要信息,如不介意,请使用
条款:姬长信API拥有所有运行权,在某些特定情况下,姬长信API有权利禁止你的网站调用
+

每日bing API调用格式:

+
https://api.isoyu.com/bing_images.php
+

复制上面的地址到你需要显示图片的地方 +例如:

background:url(//api.isoyu.com/bing_images.php);
+

类型:

+
301 = 301跳转(301 Moved Permanently);
302 = 302跳转;
json = JSON数据
+

专辑:

+
dfproject = 东方16:9壁纸(495张)
dfzh = 东方竖图(6239张)
ecyzh = 二次元综合(1991张)
不填 = 全部图片随机
+

其他目前开放的壁纸接口

⚠️ 高斯模糊接口目前只支持指定分辨率(w,h)的图片,具体分辨率如下: +
/**
+ * 已知分辨率
+ */
+resolutions: [
+    '1920x1200',
+    '1920x1080',
+    '1366x768',
+    '1280x768',
+    '1024x768',
+    '800x600',
+    '800x480',
+    '768x1280',
+    '720x1280',
+    '640x480',
+    '480x800',
+    '400x240',
+    '320x240',
+    '240x320'
+]
+
+
+
+
+
+
+ + +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/i_images.php b/i_images.php new file mode 100644 index 00000000..ec890a8a --- /dev/null +++ b/i_images.php @@ -0,0 +1,271 @@ +ret == 1) { + if ($info ->province != $info ->city) { + return $info ->country.",".$info ->province."(".$info ->city.") ".$info ->district." ".$info ->desc; + } else { + return $info ->country.",".$info ->province." ".$info ->district." ".$info ->desc; + } + } else { + return '地球'; + } +} +/*取得客户端浏览器版本*/ +function browser($ua) { + if (stripos($ua, "Googlebot")) { + $browser = "谷歌蜘蛛"; + } + elseif(stripos($ua, "Baiduspider") !== false) { + $browser = "百度蜘蛛"; + } + elseif(stripos($ua, "Yahoo!") !== false) { + $browser = "雅虎蜘蛛"; + } + elseif(stripos($ua, "bingbot")) { + $browser = "必应蜘蛛"; + } + elseif(stripos($ua, "YRSpider")) { + $browser = "云壤蜘蛛"; + } + elseif(stripos($ua, "Yeti") !== false) { + $browser = "Naver蜘蛛"; + } + elseif(stripos($ua, "Maxthon")) { + if (stripos($ua, "AppleWebKit")) { + $browser = "遨游浏览器(极速模式)"; + } + elseif(stripos($ua, "Trident")) { + $browser = "遨游浏览器(兼容模式)"; + } + elseif(stripos($ua, "MAXTHON 2.0")) { + $browser = "遨游浏览器2.0"; + } + } + elseif(stripos($ua, "Firefox")) { + $browser = "火狐浏览器"; + } + elseif(stripos($ua, "Opera") == 0 && stripos($ua, "Presto")) { + $browser = "Opera"; + } + elseif(stripos($ua, "BIDUBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "百度浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "百度浏览器(极速模式)"; + } + } + elseif(stripos($ua, "Ruibin")) { + $browser = "瑞影浏览器"; + } + elseif(stripos($ua, "qihu theworld")) { + if (stripos($ua, "Trident")) { + $browser = "世界之窗浏览器"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "世界之窗浏览器(极速模式)"; + } + } + elseif(stripos($ua, "MetaSr")) { + if (stripos($ua, "Trident")) { + $browser = "搜狗高速浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "搜狗高速浏览器(极速模式)"; + } + } + elseif(stripos($ua, "LBBROWSER")) { + if (stripos($ua, "Trident")) { + $browser = "猎豹浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "猎豹浏览器(极速模式)"; + } + } + elseif(stripos($ua, "YLMFBR")) { + $browser = "115浏览器"; + } + elseif(stripos($ua, "QQBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "QQ浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "QQ浏览器(极速模式)"; + } + } + elseif(stripos($ua, "TencentTraveler")) { + $browser = "腾讯TT浏览器"; + } + elseif(stripos($ua, "TaoBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "淘宝浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebkit")) { + $browser = "淘宝浏览器(极速模式)"; + } + } + elseif(stripos($ua, "CoolNovo")) { + $browser = "枫树浏览器"; + } + elseif(stripos($ua, "SaaYaa")) { + $browser = "闪游浏览器"; + } + elseif(stripos($ua, "360SE")) { + $browser = "360安全浏览器"; + } + elseif(stripos($ua, "360EE")) { + if (stripos($ua, "Trident")) { + $browser = "360极速浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebkit")) { + $browser = "360极速浏览器(极速模式)"; + } + } + elseif(stripos($ua, "Konqueror")) { + $browser = "Konqueror"; + } + elseif(stripos($ua, "Chrome")) { + $browser = "谷歌浏览器"; + } + elseif(stripos($ua, "Safari")) { + $browser = "Safari"; + } + elseif(stripos($ua, "MSIE")) { + $ver = explode(";", substr($ua, stripos($ua, "MSIE") + 5, 4)); + $ver = $ver[0]; + $browser = "IE ".$ver; + } + elseif(stripos($ua, "UCWEB")) { + $browser = "UCWEB浏览器"; + } + elseif(stripos($ua, "WAP")) { + $browser = "Mobile浏览器"; + } else { + $browser = $ua; + } + if ($browser == '') $browser = $ua; + return $browser; +} +/*取得操作系统版本*/ +function os($ua) { + $os = ""; + if (stripos($ua, "Googlebot")) { + $os = "谷歌蜘蛛"; + } + elseif(stripos($ua, "Baiduspider") !== false) { + $os = "百度蜘蛛"; + } + elseif(stripos($ua, "Yahoo!") !== false) { + $os = "雅虎蜘蛛"; + } + elseif(stripos($ua, "bingbot")) { + $os = "必应蜘蛛"; + } + elseif(stripos($ua, "YRSpider")) { + $os = "云壤蜘蛛"; + } + elseif(stripos($ua, "Yeti") !== false) { + $os = "Naver蜘蛛"; + } + elseif(stripos($ua, "Windows NT")) { + switch (substr($ua, stripos($ua, "Windows NT") + 11, 3)) { + case 5.0: + { + $os = "Windows 2000"; + break; + } + case 5.1: + { + $os = "Windows XP"; + break; + } + case 5.2: + { + $os = "Windows 2003"; + break; + } + case 6.0: + { + $os = "Windows Vista/2008"; + break; + } + case 6.1: + { + $os = "Windows 7"; + break; + } + case 6.2: + { + $os = "Windows 8"; + break; + } + default: + { + $os = "Windows"; + break; + } + } + if (stripos($ua, "WOW64")) { + $os.= "(X64)"; + } else { + $os.= "(X86)"; + } + } + elseif(stripos($ua, "Android")) { + $os = substr($ua, stripos($ua, "Android"), 11); + } + elseif(stripos($ua, "Linux")) { + if (stripos($ua, "i686")) { + $os = "Linux X86"; + } else { + $os = "Linux"; + } + if (stripos($ua, "X11")) { + $os.= "(X Window)"; + } + } + elseif(stripos($ua, "Macintosh")) { + $os = "Mac"; + } + elseif(stripos($ua, "IOS")) { + $os = "iOS"; + } + elseif(stripos($ua, "ZTE")) { + $os = "ZTE"; + } + elseif(stripos($ua, "Windows 98")) { + $os = "Windows 98"; + } else { + $os = "未知系统"; + } + return $os; +} + +imagettftext($im, $size, $angle, 10, 15, $grey, $font, "CDN地址:".address($_SERVER['REMOTE_ADDR'])); +imagettftext($im, $size, $angle, 10, 35, $grey, $font, "当前IP:".$_SERVER['HTTP_X_FORWARDED_FOR']); +imagettftext($im, $size, $angle, 10, 55, $grey, $font, "当前浏览器:".browser($useragent)); +imagettftext($im, $size, $angle, 10, 75, $grey, $font, "当前操作系统:".os($useragent)); +imagettftext($im, $size, $angle, 10, 95, $grey, $font, $signature!=""?$signature:"姬长信API api.isoyu.com"); + + +imagepng($im); +imagedestroy($im); +?> \ No newline at end of file diff --git a/images/blank.gif b/images/blank.gif new file mode 100644 index 00000000..35d42e80 Binary files /dev/null and b/images/blank.gif differ diff --git a/images/fancybox_loading.gif b/images/fancybox_loading.gif new file mode 100644 index 00000000..a03a40c0 Binary files /dev/null and b/images/fancybox_loading.gif differ diff --git a/images/fancybox_loading@2x.gif b/images/fancybox_loading@2x.gif new file mode 100644 index 00000000..9205aeb0 Binary files /dev/null and b/images/fancybox_loading@2x.gif differ diff --git a/images/fancybox_overlay.png b/images/fancybox_overlay.png new file mode 100644 index 00000000..a4391396 Binary files /dev/null and b/images/fancybox_overlay.png differ diff --git a/images/fancybox_sprite.png b/images/fancybox_sprite.png new file mode 100644 index 00000000..fd8d5ca5 Binary files /dev/null and b/images/fancybox_sprite.png differ diff --git a/images/fancybox_sprite@2x.png b/images/fancybox_sprite@2x.png new file mode 100644 index 00000000..d0e4779f Binary files /dev/null and b/images/fancybox_sprite@2x.png differ diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 00000000..5f6ae2b1 Binary files /dev/null and b/images/logo.png differ diff --git a/images/work-1.jpg b/images/work-1.jpg new file mode 100644 index 00000000..5c4880dc Binary files /dev/null and b/images/work-1.jpg differ diff --git a/images/work-2.jpg b/images/work-2.jpg new file mode 100644 index 00000000..6490c2be Binary files /dev/null and b/images/work-2.jpg differ diff --git a/images/work-3.jpg b/images/work-3.jpg new file mode 100644 index 00000000..9bbba239 Binary files /dev/null and b/images/work-3.jpg differ diff --git a/images/work-4.jpg b/images/work-4.jpg new file mode 100644 index 00000000..4d56d2e8 Binary files /dev/null and b/images/work-4.jpg differ diff --git a/images/work-5.jpg b/images/work-5.jpg new file mode 100644 index 00000000..a00e9e25 Binary files /dev/null and b/images/work-5.jpg differ diff --git a/images/work-6.jpg b/images/work-6.jpg new file mode 100644 index 00000000..9d037523 Binary files /dev/null and b/images/work-6.jpg differ diff --git a/images/work-7.jpg b/images/work-7.jpg new file mode 100644 index 00000000..e909d5da Binary files /dev/null and b/images/work-7.jpg differ diff --git a/images/work-8.jpg b/images/work-8.jpg new file mode 100644 index 00000000..ff8c3ab1 Binary files /dev/null and b/images/work-8.jpg differ diff --git a/index.html2 b/index.html2 new file mode 100644 index 00000000..025bc12f --- /dev/null +++ b/index.html2 @@ -0,0 +1,39 @@ + + + + + 姬长信API官方文档-api.isoyu.com + + + + + + +
loading
+ + + + + + + + diff --git a/index.php b/index.php new file mode 100644 index 00000000..40c1cdaa --- /dev/null +++ b/index.php @@ -0,0 +1,7 @@ + + + + + + + + + + + + + +姬长信API-免费提供随机妹子生活照IP签名动漫抱枕图生成器的API + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ip/.htaccess b/ip/.htaccess new file mode 100644 index 00000000..20e58ad3 --- /dev/null +++ b/ip/.htaccess @@ -0,0 +1,2 @@ +RewriteEngine On +RewriteRule ^ip/images/(.+?\.jpg)$ /img.php?name=$1 \ No newline at end of file diff --git a/ip/WWW.zip b/ip/WWW.zip new file mode 100644 index 00000000..59a8ce57 Binary files /dev/null and b/ip/WWW.zip differ diff --git a/ip/ac.jpg b/ip/ac.jpg new file mode 100644 index 00000000..db0e198f Binary files /dev/null and b/ip/ac.jpg differ diff --git a/ip/bing/1.jpg b/ip/bing/1.jpg new file mode 100644 index 00000000..7c9ab93f Binary files /dev/null and b/ip/bing/1.jpg differ diff --git a/ip/bing/2.jpg b/ip/bing/2.jpg new file mode 100644 index 00000000..9f5d2c90 Binary files /dev/null and b/ip/bing/2.jpg differ diff --git a/ip/images/parallax1.jpg b/ip/images/parallax1.jpg new file mode 100644 index 00000000..7f856a91 Binary files /dev/null and b/ip/images/parallax1.jpg differ diff --git a/ip/images/parallax2.jpg b/ip/images/parallax2.jpg new file mode 100644 index 00000000..c90d27c9 Binary files /dev/null and b/ip/images/parallax2.jpg differ diff --git a/ip/images/parallax3.jpg b/ip/images/parallax3.jpg new file mode 100644 index 00000000..b035b851 Binary files /dev/null and b/ip/images/parallax3.jpg differ diff --git a/ip/images/parallax4.jpg b/ip/images/parallax4.jpg new file mode 100644 index 00000000..f381bdc7 Binary files /dev/null and b/ip/images/parallax4.jpg differ diff --git a/ip/images/slider-bg1.jpg b/ip/images/slider-bg1.jpg new file mode 100644 index 00000000..9fddb0bc Binary files /dev/null and b/ip/images/slider-bg1.jpg differ diff --git a/ip/images/slider-bg2.jpg b/ip/images/slider-bg2.jpg new file mode 100644 index 00000000..c6563bef Binary files /dev/null and b/ip/images/slider-bg2.jpg differ diff --git a/ip/images/slider-bg3.jpg b/ip/images/slider-bg3.jpg new file mode 100644 index 00000000..809fc6ff Binary files /dev/null and b/ip/images/slider-bg3.jpg differ diff --git a/ip/img.php b/ip/img.php new file mode 100644 index 00000000..3265cbf0 --- /dev/null +++ b/ip/img.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/ip/index.php b/ip/index.php new file mode 100644 index 00000000..b7cd7e11 --- /dev/null +++ b/ip/index.php @@ -0,0 +1,5 @@ +"; +?> \ No newline at end of file diff --git a/ip/ip.jpg b/ip/ip.jpg new file mode 100644 index 00000000..58a7209b --- /dev/null +++ b/ip/ip.jpg @@ -0,0 +1,51 @@ +2){ +=trim(str_replace("MSIE","Internet Explorer",)); +if(trim()=="U"){ +="Mozilla"; +} +=str_replace(")","",); +=str_replace("NT 5.2","2003",); +=str_replace("NT 5.1","XP",); +=str_replace("NT 5.0","2000",); +=trim(str_replace("9x","Me",)); +} +else +{ +="Unknown"; +="Unknown"; +} +header ("Content-type: image/png"); +//定义图片宽高 +=250; +=105; + = (,) or die ("Cannot Initialize new GD image stream"); +//图片色彩设置 + = imagecolorallocate (, 235, 235, 240); + = imagecolorallocate (, 200, 14, 91); + = imagecolorallocate (, 0, 0, 0); + = imagecolorallocate (, 0, 0, 255); + = imagecolorallocate (, 0, 160, 0); + = imagecolorallocate (, 255, 127, 80); +//绘制图片边框 +imagefilledrectangle(, 0, 0, - 1, - 1, ); +imagerectangle(, 0, 0, - 1, - 1, ); +//生成图片文字 +imagestring (, 3, 6, 6, "Your IP : " . , ); +imagestring (, 3, 6, 26, "Language : " . , ); +imagestring (, 3, 6, 46, "Your OS : " . , ); +imagestring (, 3, 6, 66, "Browser : " . , ); +imagestring (, 3, 50, 86, "Ads By www.joyren.net", ); +//产生图片 +imagepng (); +imagedestroy (); +?> \ No newline at end of file diff --git a/ip/ip.php b/ip/ip.php new file mode 100644 index 00000000..dab541fd --- /dev/null +++ b/ip/ip.php @@ -0,0 +1,272 @@ +ret == 1) { + if ($info ->province != $info ->city) { + return $info ->country.",".$info ->province."(".$info ->city.") ".$info ->district." ".$info ->desc; + } else { + return $info ->country.",".$info ->province." ".$info ->district." ".$info ->desc; + } + } else { + return '地球'; + } +} +/*取得客户端浏览器版本*/ +function browser($ua) { + if (stripos($ua, "Googlebot")) { + $browser = "谷歌蜘蛛"; + } + elseif(stripos($ua, "Baiduspider") !== false) { + $browser = "百度蜘蛛"; + } + elseif(stripos($ua, "Yahoo!") !== false) { + $browser = "雅虎蜘蛛"; + } + elseif(stripos($ua, "bingbot")) { + $browser = "必应蜘蛛"; + } + elseif(stripos($ua, "YRSpider")) { + $browser = "云壤蜘蛛"; + } + elseif(stripos($ua, "Yeti") !== false) { + $browser = "Naver蜘蛛"; + } + elseif(stripos($ua, "Maxthon")) { + if (stripos($ua, "AppleWebKit")) { + $browser = "遨游浏览器(极速模式)"; + } + elseif(stripos($ua, "Trident")) { + $browser = "遨游浏览器(兼容模式)"; + } + elseif(stripos($ua, "MAXTHON 2.0")) { + $browser = "遨游浏览器2.0"; + } + } + elseif(stripos($ua, "Firefox")) { + $browser = "火狐浏览器"; + } + elseif(stripos($ua, "Opera") == 0 && stripos($ua, "Presto")) { + $browser = "Opera"; + } + elseif(stripos($ua, "BIDUBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "百度浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "百度浏览器(极速模式)"; + } + } + elseif(stripos($ua, "Ruibin")) { + $browser = "瑞影浏览器"; + } + elseif(stripos($ua, "qihu theworld")) { + if (stripos($ua, "Trident")) { + $browser = "世界之窗浏览器"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "世界之窗浏览器(极速模式)"; + } + } + elseif(stripos($ua, "MetaSr")) { + if (stripos($ua, "Trident")) { + $browser = "搜狗高速浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "搜狗高速浏览器(极速模式)"; + } + } + elseif(stripos($ua, "LBBROWSER")) { + if (stripos($ua, "Trident")) { + $browser = "猎豹浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "猎豹浏览器(极速模式)"; + } + } + elseif(stripos($ua, "YLMFBR")) { + $browser = "115浏览器"; + } + elseif(stripos($ua, "QQBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "QQ浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "QQ浏览器(极速模式)"; + } + } + elseif(stripos($ua, "TencentTraveler")) { + $browser = "腾讯TT浏览器"; + } + elseif(stripos($ua, "TaoBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "淘宝浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebkit")) { + $browser = "淘宝浏览器(极速模式)"; + } + } + elseif(stripos($ua, "CoolNovo")) { + $browser = "枫树浏览器"; + } + elseif(stripos($ua, "SaaYaa")) { + $browser = "闪游浏览器"; + } + elseif(stripos($ua, "360SE")) { + $browser = "360安全浏览器"; + } + elseif(stripos($ua, "360EE")) { + if (stripos($ua, "Trident")) { + $browser = "360极速浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebkit")) { + $browser = "360极速浏览器(极速模式)"; + } + } + elseif(stripos($ua, "Konqueror")) { + $browser = "Konqueror"; + } + elseif(stripos($ua, "Chrome")) { + $browser = "谷歌浏览器"; + } + elseif(stripos($ua, "Safari")) { + $browser = "Safari"; + } + elseif(stripos($ua, "MSIE")) { + $ver = explode(";", substr($ua, stripos($ua, "MSIE") + 5, 4)); + $ver = $ver[0]; + $browser = "IE ".$ver; + } + elseif(stripos($ua, "UCWEB")) { + $browser = "UCWEB浏览器"; + } + elseif(stripos($ua, "WAP")) { + $browser = "Mobile浏览器"; + } else { + $browser = $ua; + } + if ($browser == '') $browser = $ua; + return $browser; +} +/*取得操作系统版本*/ +function os($ua) { + $os = ""; + if (stripos($ua, "Googlebot")) { + $os = "谷歌蜘蛛"; + } + elseif(stripos($ua, "Baiduspider") !== false) { + $os = "百度蜘蛛"; + } + elseif(stripos($ua, "Yahoo!") !== false) { + $os = "雅虎蜘蛛"; + } + elseif(stripos($ua, "bingbot")) { + $os = "必应蜘蛛"; + } + elseif(stripos($ua, "YRSpider")) { + $os = "云壤蜘蛛"; + } + elseif(stripos($ua, "Yeti") !== false) { + $os = "Naver蜘蛛"; + } + elseif(stripos($ua, "Windows NT")) { + switch (substr($ua, stripos($ua, "Windows NT") + 11, 3)) { + case 5.0: + { + $os = "Windows 2000"; + break; + } + case 5.1: + { + $os = "Windows XP"; + break; + } + case 5.2: + { + $os = "Windows 2003"; + break; + } + case 6.0: + { + $os = "Windows Vista/2008"; + break; + } + case 6.1: + { + $os = "Windows 7"; + break; + } + case 6.2: + { + $os = "Windows 8"; + break; + } + default: + { + $os = "Windows"; + break; + } + } + if (stripos($ua, "WOW64")) { + $os.= "(X64)"; + } else { + $os.= "(X86)"; + } + } + elseif(stripos($ua, "Android")) { + $os = substr($ua, stripos($ua, "Android"), 11); + } + elseif(stripos($ua, "Linux")) { + if (stripos($ua, "i686")) { + $os = "Linux X86"; + } else { + $os = "Linux"; + } + if (stripos($ua, "X11")) { + $os.= "(X Window)"; + } + } + elseif(stripos($ua, "Macintosh")) { + $os = "Mac"; + } + elseif(stripos($ua, "IOS")) { + $os = "iOS"; + } + elseif(stripos($ua, "ZTE")) { + $os = "ZTE"; + } + elseif(stripos($ua, "Windows 98")) { + $os = "Windows 98"; + } else { + $os = "未知系统"; + } + return $os; +} + +imagettftext($im, $size, $angle, 10, 15, $grey, $font, "当前地址:".address($_SERVER['REMOTE_ADDR'])); +imagettftext($im, $size, $angle, 10, 35, $grey, $font, "当前IP:".$_SERVER['REMOTE_ADDR']); +imagettftext($im, $size, $angle, 10, 55, $grey, $font, "当前浏览器:".browser($useragent)); +imagettftext($im, $size, $angle, 10, 75, $grey, $font, "当前操作系统:".os($useragent)); +imagettftext($im, $size, $angle, 10, 95, $grey, $font, $signature!=""?$signature:"  姬长信 blog.isoyu.com"); + + +imagepng($im); +imagedestroy($im); +?> \ No newline at end of file diff --git a/ip/ipcover.php b/ip/ipcover.php new file mode 100644 index 00000000..02a4de51 --- /dev/null +++ b/ip/ipcover.php @@ -0,0 +1,84 @@ + \ No newline at end of file diff --git a/ip/logo.png b/ip/logo.png new file mode 100644 index 00000000..08f84d49 Binary files /dev/null and b/ip/logo.png differ diff --git a/ip/mm_images.php b/ip/mm_images.php new file mode 100644 index 00000000..cf9cd14f --- /dev/null +++ b/ip/mm_images.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/ip/stlt.ttf b/ip/stlt.ttf new file mode 100644 index 00000000..65591eb4 Binary files /dev/null and b/ip/stlt.ttf differ diff --git a/ip_images.php b/ip_images.php new file mode 100644 index 00000000..544b3b54 --- /dev/null +++ b/ip_images.php @@ -0,0 +1,569 @@ +ret == 1) { + + + + if ($info ->province != $info ->city) { + + + + return $info ->country.",".$info ->province."(".$info ->city.") ".$info ->district." ".$info ->desc; + + + + } else { + + + + return $info ->country.",".$info ->province." ".$info ->district." ".$info ->desc; + + + + } + + + + } else { + + + + return '地球'; + + + + } + + + +} + +/*取得客户端浏览器版本*/ + +function browser($ua) { + + if (stripos($ua, "Googlebot")) { + + $browser = "谷歌蜘蛛"; + + } + + elseif(stripos($ua, "Baiduspider") !== false) { + + $browser = "百度蜘蛛"; + + } + + elseif(stripos($ua, "Yahoo!") !== false) { + + $browser = "雅虎蜘蛛"; + + } + + elseif(stripos($ua, "bingbot")) { + + $browser = "必应蜘蛛"; + + } + + elseif(stripos($ua, "YRSpider")) { + + $browser = "云壤蜘蛛"; + + } + + elseif(stripos($ua, "Yeti") !== false) { + + $browser = "Naver蜘蛛"; + + } + + elseif(stripos($ua, "Maxthon")) { + + if (stripos($ua, "AppleWebKit")) { + + $browser = "遨游浏览器(极速模式)"; + + } + + elseif(stripos($ua, "Trident")) { + + $browser = "遨游浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "MAXTHON 2.0")) { + + $browser = "遨游浏览器2.0"; + + } + + } + + elseif(stripos($ua, "Firefox")) { + + $browser = "火狐浏览器"; + + } + + elseif(stripos($ua, "Opera") == 0 && stripos($ua, "Presto")) { + + $browser = "Opera"; + + } + + elseif(stripos($ua, "BIDUBrowser")) { + + if (stripos($ua, "Trident")) { + + $browser = "百度浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "AppleWebKit")) { + + $browser = "百度浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "Ruibin")) { + + $browser = "瑞影浏览器"; + + } + + elseif(stripos($ua, "qihu theworld")) { + + if (stripos($ua, "Trident")) { + + $browser = "世界之窗浏览器"; + + } + + elseif(stripos($ua, "AppleWebKit")) { + + $browser = "世界之窗浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "MetaSr")) { + + if (stripos($ua, "Trident")) { + + $browser = "搜狗高速浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "AppleWebKit")) { + + $browser = "搜狗高速浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "LBBROWSER")) { + + if (stripos($ua, "Trident")) { + + $browser = "猎豹浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "AppleWebKit")) { + + $browser = "猎豹浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "YLMFBR")) { + + $browser = "115浏览器"; + + } + + elseif(stripos($ua, "QQBrowser")) { + + if (stripos($ua, "Trident")) { + + $browser = "QQ浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "AppleWebKit")) { + + $browser = "QQ浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "TencentTraveler")) { + + $browser = "腾讯TT浏览器"; + + } + + elseif(stripos($ua, "TaoBrowser")) { + + if (stripos($ua, "Trident")) { + + $browser = "淘宝浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "AppleWebkit")) { + + $browser = "淘宝浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "CoolNovo")) { + + $browser = "枫树浏览器"; + + } + + elseif(stripos($ua, "SaaYaa")) { + + $browser = "闪游浏览器"; + + } + + elseif(stripos($ua, "360SE")) { + + $browser = "360安全浏览器"; + + } + + elseif(stripos($ua, "360EE")) { + + if (stripos($ua, "Trident")) { + + $browser = "360极速浏览器(兼容模式)"; + + } + + elseif(stripos($ua, "AppleWebkit")) { + + $browser = "360极速浏览器(极速模式)"; + + } + + } + + elseif(stripos($ua, "Konqueror")) { + + $browser = "Konqueror"; + + } + + elseif(stripos($ua, "Chrome")) { + + $browser = "谷歌浏览器"; + + } + + elseif(stripos($ua, "Safari")) { + + $browser = "Safari"; + + } + + elseif(stripos($ua, "MSIE")) { + + $ver = explode(";", substr($ua, stripos($ua, "MSIE") + 5, 4)); + + $ver = $ver[0]; + + $browser = "IE ".$ver; + + } + + elseif(stripos($ua, "UCWEB")) { + + $browser = "UCWEB浏览器"; + + } + + elseif(stripos($ua, "WAP")) { + + $browser = "Mobile浏览器"; + + } else { + + $browser = $ua; + + } + + if ($browser == '') $browser = $ua; + + return $browser; + +} + +/*取得操作系统版本*/ + +function os($ua) { + + $os = ""; + + if (stripos($ua, "Googlebot")) { + + $os = "谷歌蜘蛛"; + + } + + elseif(stripos($ua, "Baiduspider") !== false) { + + $os = "百度蜘蛛"; + + } + + elseif(stripos($ua, "Yahoo!") !== false) { + + $os = "雅虎蜘蛛"; + + } + + elseif(stripos($ua, "bingbot")) { + + $os = "必应蜘蛛"; + + } + + elseif(stripos($ua, "YRSpider")) { + + $os = "云壤蜘蛛"; + + } + + elseif(stripos($ua, "Yeti") !== false) { + + $os = "Naver蜘蛛"; + + } + + elseif(stripos($ua, "Windows NT")) { + + switch (substr($ua, stripos($ua, "Windows NT") + 11, 3)) { + + case 5.0: + + { + + $os = "Windows 2000"; + + break; + + } + + case 5.1: + + { + + $os = "Windows XP"; + + break; + + } + + case 5.2: + + { + + $os = "Windows 2003"; + + break; + + } + + case 6.0: + + { + + $os = "Windows Vista/2008"; + + break; + + } + + case 6.1: + + { + + $os = "Windows 7"; + + break; + + } + + case 6.2: + + { + + $os = "Windows 8"; + + break; + + } + + default: + + { + + $os = "Windows"; + + break; + + } + + } + + if (stripos($ua, "WOW64")) { + + $os.= "(X64)"; + + } else { + + $os.= "(X86)"; + + } + + } + + elseif(stripos($ua, "Android")) { + + $os = substr($ua, stripos($ua, "Android"), 11); + + } + + elseif(stripos($ua, "Linux")) { + + if (stripos($ua, "i686")) { + + $os = "Linux X86"; + + } else { + + $os = "Linux"; + + } + + if (stripos($ua, "X11")) { + + $os.= "(X Window)"; + + } + + } + + elseif(stripos($ua, "Macintosh")) { + + $os = "Mac"; + + } + + elseif(stripos($ua, "IOS")) { + + $os = "iOS"; + + } + + elseif(stripos($ua, "ZTE")) { + + $os = "ZTE"; + + } + + elseif(stripos($ua, "Windows 98")) { + + $os = "Windows 98"; + + } else { + + $os = "未知系统"; + + } + + return $os; + +} + + + +imagettftext($im, $size, $angle, 10, 15, $grey, $font, "当前地区:".address($_SERVER['REMOTE_ADDR'])); + +imagettftext($im, $size, $angle, 10, 35, $grey, $font, "当前IP:".$_SERVER['REMOTE_ADDR']); + +imagettftext($im, $size, $angle, 10, 55, $grey, $font, "当前浏览器:".browser($useragent)); + +imagettftext($im, $size, $angle, 10, 75, $grey, $font, "当前操作系统:".os($useragent)); + +imagettftext($im, $size, $angle, 10, 95, $grey, $font, $signature!=""?$signature:"姬长信API api.isoyu.com"); + + + + + +imagepng($im); + +imagedestroy($im); + +?> \ No newline at end of file diff --git a/ip_images.php-copy b/ip_images.php-copy new file mode 100644 index 00000000..6c20f12a --- /dev/null +++ b/ip_images.php-copy @@ -0,0 +1,282 @@ +ret == 1) { + + if ($info ->province != $info ->city) { + + return $info ->country.",".$info ->province."(".$info ->city.") ".$info ->district." ".$info ->desc; + + } else { + + return $info ->country.",".$info ->province." ".$info ->district." ".$info ->desc; + + } + + } else { + + return '地球'; + + } + +} +/*取得客户端浏览器版本*/ +function browser($ua) { + if (stripos($ua, "Googlebot")) { + $browser = "谷歌蜘蛛"; + } + elseif(stripos($ua, "Baiduspider") !== false) { + $browser = "百度蜘蛛"; + } + elseif(stripos($ua, "Yahoo!") !== false) { + $browser = "雅虎蜘蛛"; + } + elseif(stripos($ua, "bingbot")) { + $browser = "必应蜘蛛"; + } + elseif(stripos($ua, "YRSpider")) { + $browser = "云壤蜘蛛"; + } + elseif(stripos($ua, "Yeti") !== false) { + $browser = "Naver蜘蛛"; + } + elseif(stripos($ua, "Maxthon")) { + if (stripos($ua, "AppleWebKit")) { + $browser = "遨游浏览器(极速模式)"; + } + elseif(stripos($ua, "Trident")) { + $browser = "遨游浏览器(兼容模式)"; + } + elseif(stripos($ua, "MAXTHON 2.0")) { + $browser = "遨游浏览器2.0"; + } + } + elseif(stripos($ua, "Firefox")) { + $browser = "火狐浏览器"; + } + elseif(stripos($ua, "Opera") == 0 && stripos($ua, "Presto")) { + $browser = "Opera"; + } + elseif(stripos($ua, "BIDUBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "百度浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "百度浏览器(极速模式)"; + } + } + elseif(stripos($ua, "Ruibin")) { + $browser = "瑞影浏览器"; + } + elseif(stripos($ua, "qihu theworld")) { + if (stripos($ua, "Trident")) { + $browser = "世界之窗浏览器"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "世界之窗浏览器(极速模式)"; + } + } + elseif(stripos($ua, "MetaSr")) { + if (stripos($ua, "Trident")) { + $browser = "搜狗高速浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "搜狗高速浏览器(极速模式)"; + } + } + elseif(stripos($ua, "LBBROWSER")) { + if (stripos($ua, "Trident")) { + $browser = "猎豹浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "猎豹浏览器(极速模式)"; + } + } + elseif(stripos($ua, "YLMFBR")) { + $browser = "115浏览器"; + } + elseif(stripos($ua, "QQBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "QQ浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebKit")) { + $browser = "QQ浏览器(极速模式)"; + } + } + elseif(stripos($ua, "TencentTraveler")) { + $browser = "腾讯TT浏览器"; + } + elseif(stripos($ua, "TaoBrowser")) { + if (stripos($ua, "Trident")) { + $browser = "淘宝浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebkit")) { + $browser = "淘宝浏览器(极速模式)"; + } + } + elseif(stripos($ua, "CoolNovo")) { + $browser = "枫树浏览器"; + } + elseif(stripos($ua, "SaaYaa")) { + $browser = "闪游浏览器"; + } + elseif(stripos($ua, "360SE")) { + $browser = "360安全浏览器"; + } + elseif(stripos($ua, "360EE")) { + if (stripos($ua, "Trident")) { + $browser = "360极速浏览器(兼容模式)"; + } + elseif(stripos($ua, "AppleWebkit")) { + $browser = "360极速浏览器(极速模式)"; + } + } + elseif(stripos($ua, "Konqueror")) { + $browser = "Konqueror"; + } + elseif(stripos($ua, "Chrome")) { + $browser = "谷歌浏览器"; + } + elseif(stripos($ua, "Safari")) { + $browser = "Safari"; + } + elseif(stripos($ua, "MSIE")) { + $ver = explode(";", substr($ua, stripos($ua, "MSIE") + 5, 4)); + $ver = $ver[0]; + $browser = "IE ".$ver; + } + elseif(stripos($ua, "UCWEB")) { + $browser = "UCWEB浏览器"; + } + elseif(stripos($ua, "WAP")) { + $browser = "Mobile浏览器"; + } else { + $browser = $ua; + } + if ($browser == '') $browser = $ua; + return $browser; +} +/*取得操作系统版本*/ +function os($ua) { + $os = ""; + if (stripos($ua, "Googlebot")) { + $os = "谷歌蜘蛛"; + } + elseif(stripos($ua, "Baiduspider") !== false) { + $os = "百度蜘蛛"; + } + elseif(stripos($ua, "Yahoo!") !== false) { + $os = "雅虎蜘蛛"; + } + elseif(stripos($ua, "bingbot")) { + $os = "必应蜘蛛"; + } + elseif(stripos($ua, "YRSpider")) { + $os = "云壤蜘蛛"; + } + elseif(stripos($ua, "Yeti") !== false) { + $os = "Naver蜘蛛"; + } + elseif(stripos($ua, "Windows NT")) { + switch (substr($ua, stripos($ua, "Windows NT") + 11, 3)) { + case 5.0: + { + $os = "Windows 2000"; + break; + } + case 5.1: + { + $os = "Windows XP"; + break; + } + case 5.2: + { + $os = "Windows 2003"; + break; + } + case 6.0: + { + $os = "Windows Vista/2008"; + break; + } + case 6.1: + { + $os = "Windows 7"; + break; + } + case 6.2: + { + $os = "Windows 8"; + break; + } + default: + { + $os = "Windows"; + break; + } + } + if (stripos($ua, "WOW64")) { + $os.= "(X64)"; + } else { + $os.= "(X86)"; + } + } + elseif(stripos($ua, "Android")) { + $os = substr($ua, stripos($ua, "Android"), 11); + } + elseif(stripos($ua, "Linux")) { + if (stripos($ua, "i686")) { + $os = "Linux X86"; + } else { + $os = "Linux"; + } + if (stripos($ua, "X11")) { + $os.= "(X Window)"; + } + } + elseif(stripos($ua, "Macintosh")) { + $os = "Mac"; + } + elseif(stripos($ua, "IOS")) { + $os = "iOS"; + } + elseif(stripos($ua, "ZTE")) { + $os = "ZTE"; + } + elseif(stripos($ua, "Windows 98")) { + $os = "Windows 98"; + } else { + $os = "未知系统"; + } + return $os; +} + +imagettftext($im, $size, $angle, 10, 15, $grey, $font, "当前星球:".address($_SERVER['HTTP_X_FORWARDED_FOR'])); +imagettftext($im, $size, $angle, 10, 35, $grey, $font, "当前IP:".$_SERVER['HTTP_X_FORWARDED_FOR']); +imagettftext($im, $size, $angle, 10, 55, $grey, $font, "当前浏览器:".browser($useragent)); +imagettftext($im, $size, $angle, 10, 75, $grey, $font, "当前操作系统:".os($useragent)); +imagettftext($im, $size, $angle, 10, 95, $grey, $font, $signature!=""?$signature:"姬长信API api.isoyu.com"); + + +imagepng($im); +imagedestroy($im); +?> \ No newline at end of file diff --git a/jiaoda/wx_api.php b/jiaoda/wx_api.php new file mode 100644 index 00000000..7f278ef4 --- /dev/null +++ b/jiaoda/wx_api.php @@ -0,0 +1,157 @@ +responseMsg(); +//$wechatObj->valid(); +//exit; + +class wechatCallbackapiTest +{ + public function valid() + { + $echoStr = $_GET["echostr"]; + + + if($this->checkSignature()){ + echo $echoStr; + exit; + } + } + + + public function responseMsg() + { + + $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; + + + if (!empty($postStr)){ + + libxml_disable_entity_loader(true); + $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); + $fromUsername = $postObj->FromUserName; + $toUsername = $postObj->ToUserName; + $keyword = trim($postObj->Content); + + $event = $postObj->Event; + $time = time(); + $textTpl = " + + + %s + + + 0 + "; + + + + switch($postObj->MsgType) + { + case 'event': + + if($event == 'subscribe') + { + //关注后的回复 + $contentStr = "欢迎关注【焦作大学信息工程学院】,这里会给我们带来信息工程学院里不一样的风情。输入[关键词]即可获取相关内容"; + + + $msgType = 'text'; + $textTpl = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); + echo $textTpl; + + } + break; + case 'text': + { + $newsTpl = " + + + %s + + 1 + + + <![CDATA[%s]]> + + + + + + "; + if($keyword<>"") + { + $title = '您要找的《'.$keyword.'》,给您找到以下结果:'; + + $des1 =""; + //图片地址 + $picUrl1 ="https://api.isoyu.com/bing_images.php"; + //跳转链接 + $url="http://www.baidu.com/s?si=jzu.edu.cn&cl=3&ct=2097152&tn=baidulocal&word=".$keyword; + + $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; + + echo $resultStr; + } + $contentStr = " \r\n 输入关键词如:焦作大学信息工程学院!\r\n "; + + + $msgType = 'text'; + $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); + echo $resultStr; + } + break; + default: + break; + } + + }else { + echo "你好!欢迎进入【options->title() ?>】微信公众号,这里会给我们带来信息工程学院里不一样的风情"; + exit; + } + } + + private function checkSignature() + { + // you must define TOKEN by yourself + if (!defined("TOKEN")) { + throw new Exception('TOKEN is not defined!'); + } + + $signature = $_GET["signature"]; + $timestamp = $_GET["timestamp"]; + $nonce = $_GET["nonce"]; + + $token = TOKEN; + $tmpArr = array($token, $timestamp, $nonce); + // use SORT_STRING rule + sort($tmpArr, SORT_STRING); + $tmpStr = implode( $tmpArr ); + $tmpStr = sha1( $tmpStr ); + + if( $tmpStr == $signature ){ + return true; + }else{ + return false; + } + } +} + +?> \ No newline at end of file diff --git "a/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/wx_api.php" "b/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/wx_api.php" new file mode 100644 index 00000000..b571b8d2 --- /dev/null +++ "b/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/wx_api.php" @@ -0,0 +1,157 @@ +responseMsg(); +//$wechatObj->valid(); +//exit; + +class wechatCallbackapiTest +{ + public function valid() + { + $echoStr = $_GET["echostr"]; + + + if($this->checkSignature()){ + echo $echoStr; + exit; + } + } + + + public function responseMsg() + { + + $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; + + + if (!empty($postStr)){ + + libxml_disable_entity_loader(true); + $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); + $fromUsername = $postObj->FromUserName; + $toUsername = $postObj->ToUserName; + $keyword = trim($postObj->Content); + + $event = $postObj->Event; + $time = time(); + $textTpl = " + + + %s + + + 0 + "; + + + + switch($postObj->MsgType) + { + case 'event': + + if($event == 'subscribe') + { + //关注后的回复 + $contentStr = "欢迎关注options->title() ?>,options->description() ?>,输入【关键字】即可获取相关内容"; + + + $msgType = 'text'; + $textTpl = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); + echo $textTpl; + + } + break; + case 'text': + { + $newsTpl = " + + + %s + + 1 + + + <![CDATA[%s]]> + + + + + + "; + if($keyword<>"") + { + $title = '您要看的《'.$keyword.'》,给您找到以下结果:'; + + $des1 =""; + //图片地址 + $picUrl1 ="https://api.isoyu.com/mm_images.php"; + //跳转链接 + $url="options->siteUrl(); ?>/search/".$keyword; + + $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; + + echo $resultStr; + } + $contentStr = " \r\n 输入文章名如:姬长信API 即可在线观看!\r\n "; + + + $msgType = 'text'; + $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); + echo $resultStr; + } + break; + default: + break; + } + + }else { + echo "你好!欢迎进入【options->title() ?>】微信公众号"; + exit; + } + } + + private function checkSignature() + { + // you must define TOKEN by yourself + if (!defined("TOKEN")) { + throw new Exception('TOKEN is not defined!'); + } + + $signature = $_GET["signature"]; + $timestamp = $_GET["timestamp"]; + $nonce = $_GET["nonce"]; + + $token = TOKEN; + $tmpArr = array($token, $timestamp, $nonce); + // use SORT_STRING rule + sort($tmpArr, SORT_STRING); + $tmpStr = implode( $tmpArr ); + $tmpStr = sha1( $tmpStr ); + + if( $tmpStr == $signature ){ + return true; + }else{ + return false; + } + } +} + +?> \ No newline at end of file diff --git "a/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/wx_api123.php" "b/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/wx_api123.php" new file mode 100644 index 00000000..05dfa108 --- /dev/null +++ "b/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/wx_api123.php" @@ -0,0 +1,84 @@ +valid(); //执行wechatObj类下的valid函数 +}else{ + $wechatObj->responseMsg(); //如果未得到随机字符串,执行wechatObj类下的responseMsg函数 +} + +class wechatCallbackapiTest //定义类 +{ + public function valid() //定义valid函数 + { + $echoStr = $_GET["echostr"]; //定义变量$echoStr 为获得的字符串 + if($this->checkSignature()){ //调用当前类里的chekSignature函数 + echo $echoStr; //输出echoStr的值 + exit; + } + } + + private function checkSignature() //定义checkSignature函数 + { + $signature = $_GET["signature"]; //定义变量signature为获得的signature + $timestamp = $_GET["timestamp"]; //获取时间戳 + $nonce = $_GET["nonce"]; //获取随机数 + + $token = TOKEN; //获得token + $tmpArr = array($token, $timestamp, $nonce);//定义数组tmpArr包含token值、时间戳、随机数 + sort($tmpArr, SORT_STRING); //对数组进行升序排列 + $tmpStr = implode( $tmpArr ); //将数组组合为字符串 + $tmpStr = sha1( $tmpStr ); //计算字符串的sha1散列 + + if( $tmpStr == $signature ){ //如果计算的散列与获取的加密签名一致 + return true; //返回真 + }else{ + return false; //不一致,返回假 + } + } + + public function responseMsg() //定义函数 responseMsg + { + $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //首先接收上述原始POST数据 + + if (!empty($postStr)){ //如果接收到的数据不为空 + $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //将数据载入对象中,对象名为SimpleXMLElement,将CDATA合并为文本节点 + $fromUsername = $postObj->FromUserName; //取得XML数据包中FromUserName的值,赋给变量fromUsername + $toUsername = $postObj->ToUserName; //取得XML数据包中ToUsername的值,赋给变量toUsername + $keyword = trim($postObj->Content); //取得XML数据包中content的值,并移除字符串两侧的值 + $time = time(); //取得XML数据包中的time的值 + $textTpl = " + + + %s + + + 0 + ";//将变量依次赋给新的XML变量textTpl,注意里边将to和from调换 为什么多个%s? + if($keyword == "?" || $keyword == "?") //判断用户发送的关键词是不是问号 + { + $msgType = "text"; //数据类型为文本方式text + $contentStr = date("Y-m-d H:i:s",time()); //回复的内为未当前时间 + $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //sprintf是把前边字符串里的%作为参数传递,第一个textTpl是前边定义的一串xml,接下来5个参数是要填充进XML中进行替换的内容 + echo $resultStr; //输出XML,这时候微信服务器就会获得结果,并展示给用户 + } + }else{ //如果接收到的数据是空的 + echo ""; //返回一个空值即可 + exit; + } + } +} +?> \ No newline at end of file diff --git "a/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/\345\257\271\346\216\245\346\225\231\347\250\213.txt" "b/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/\345\257\271\346\216\245\346\225\231\347\250\213.txt" new file mode 100644 index 00000000..6d278e28 --- /dev/null +++ "b/jiaoda/\345\257\260\356\206\273\344\277\212\347\200\265\350\247\204\345\270\264\351\217\201\346\254\221\342\226\274/\345\257\271\346\216\245\346\225\231\347\250\213.txt" @@ -0,0 +1,4 @@ +1.ϴwx_api123.phpΪwx_api.phpĵڶеtokenֵģһҪһļtokenֵһȻ΢ - 棬ãַļĵַļдļtokenֵ +2.֤ɹ֮ɾ֮ǰϴļwx_api.php,滻滻֮ǰļĻصַijԼģͼƬַҲĵ + +Ϳˡ \ No newline at end of file diff --git a/js/bootstrap.min.js b/js/bootstrap.min.js new file mode 100644 index 00000000..dd1f6802 --- /dev/null +++ b/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/js/jquery.contact.js b/js/jquery.contact.js new file mode 100644 index 00000000..a30081a3 --- /dev/null +++ b/js/jquery.contact.js @@ -0,0 +1,38 @@ +(function($) { + "use strict"; + +jQuery(document).ready(function(){ + $('#cform').submit(function(){ + + var action = $(this).attr('action'); + + $("#message").slideUp(750,function() { + $('#message').hide(); + + $('#submit') + .before('') + .attr('disabled','disabled'); + + $.post(action, { + name: $('#name').val(), + email: $('#email').val(), + comments: $('#comments').val(), + }, + function(data){ + document.getElementById('message').innerHTML = data; + $('#message').slideDown('slow'); + $('#cform img.contact-loader').fadeOut('slow',function(){$(this).remove()}); + $('#submit').removeAttr('disabled'); + if(data.match('success') != null) $('#cform').slideUp('slow'); + } + ); + + }); + + return false; + + }); + +}); + +}(jQuery)); \ No newline at end of file diff --git a/js/jquery.fancybox.pack.js b/js/jquery.fancybox.pack.js new file mode 100644 index 00000000..520782d1 --- /dev/null +++ b/js/jquery.fancybox.pack.js @@ -0,0 +1,46 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0
',image:'',iframe:'",error:'

The requested content cannot be loaded.
Please try again later.

',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, +c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& +k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| +b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= +setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= +a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), +b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), +y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; +if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, +{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, +mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= +!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); +"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= +this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); +f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, +e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, +outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", +g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": +"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? +h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| +h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? +b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), +p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= +b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
'+e+"
");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, +e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ +":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
').appendTo("body");var e=20=== +d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/js/jquery.flexslider-min.js b/js/jquery.flexslider-min.js new file mode 100644 index 00000000..a85368b8 --- /dev/null +++ b/js/jquery.flexslider-min.js @@ -0,0 +1,5 @@ +/* + * jQuery FlexSlider v2.5.0 + * Copyright 2012 WooThemes + * Contributing Author: Tyler Smith + */!function($){$.flexslider=function(e,t){var a=$(e);a.vars=$.extend({},$.flexslider.defaults,t);var n=a.vars.namespace,i=window.navigator&&window.navigator.msPointerEnabled&&window.MSGesture,s=("ontouchstart"in window||i||window.DocumentTouch&&document instanceof DocumentTouch)&&a.vars.touch,r="click touchend MSPointerUp keyup",o="",l,c="vertical"===a.vars.direction,d=a.vars.reverse,u=a.vars.itemWidth>0,v="fade"===a.vars.animation,p=""!==a.vars.asNavFor,m={},f=!0;$.data(e,"flexslider",a),m={init:function(){a.animating=!1,a.currentSlide=parseInt(a.vars.startAt?a.vars.startAt:0,10),isNaN(a.currentSlide)&&(a.currentSlide=0),a.animatingTo=a.currentSlide,a.atEnd=0===a.currentSlide||a.currentSlide===a.last,a.containerSelector=a.vars.selector.substr(0,a.vars.selector.search(" ")),a.slides=$(a.vars.selector,a),a.container=$(a.containerSelector,a),a.count=a.slides.length,a.syncExists=$(a.vars.sync).length>0,"slide"===a.vars.animation&&(a.vars.animation="swing"),a.prop=c?"top":"marginLeft",a.args={},a.manualPause=!1,a.stopped=!1,a.started=!1,a.startTimeout=null,a.transitions=!a.vars.video&&!v&&a.vars.useCSS&&function(){var e=document.createElement("div"),t=["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var n in t)if(void 0!==e.style[t[n]])return a.pfx=t[n].replace("Perspective","").toLowerCase(),a.prop="-"+a.pfx+"-transform",!0;return!1}(),a.ensureAnimationEnd="",""!==a.vars.controlsContainer&&(a.controlsContainer=$(a.vars.controlsContainer).length>0&&$(a.vars.controlsContainer)),""!==a.vars.manualControls&&(a.manualControls=$(a.vars.manualControls).length>0&&$(a.vars.manualControls)),""!==a.vars.customDirectionNav&&(a.customDirectionNav=2===$(a.vars.customDirectionNav).length&&$(a.vars.customDirectionNav)),a.vars.randomize&&(a.slides.sort(function(){return Math.round(Math.random())-.5}),a.container.empty().append(a.slides)),a.doMath(),a.setup("init"),a.vars.controlNav&&m.controlNav.setup(),a.vars.directionNav&&m.directionNav.setup(),a.vars.keyboard&&(1===$(a.containerSelector).length||a.vars.multipleKeyboard)&&$(document).bind("keyup",function(e){var t=e.keyCode;if(!a.animating&&(39===t||37===t)){var n=39===t?a.getTarget("next"):37===t?a.getTarget("prev"):!1;a.flexAnimate(n,a.vars.pauseOnAction)}}),a.vars.mousewheel&&a.bind("mousewheel",function(e,t,n,i){e.preventDefault();var s=a.getTarget(0>t?"next":"prev");a.flexAnimate(s,a.vars.pauseOnAction)}),a.vars.pausePlay&&m.pausePlay.setup(),a.vars.slideshow&&a.vars.pauseInvisible&&m.pauseInvisible.init(),a.vars.slideshow&&(a.vars.pauseOnHover&&a.hover(function(){a.manualPlay||a.manualPause||a.pause()},function(){a.manualPause||a.manualPlay||a.stopped||a.play()}),a.vars.pauseInvisible&&m.pauseInvisible.isHidden()||(a.vars.initDelay>0?a.startTimeout=setTimeout(a.play,a.vars.initDelay):a.play())),p&&m.asNav.setup(),s&&a.vars.touch&&m.touch(),(!v||v&&a.vars.smoothHeight)&&$(window).bind("resize orientationchange focus",m.resize),a.find("img").attr("draggable","false"),setTimeout(function(){a.vars.start(a)},200)},asNav:{setup:function(){a.asNav=!0,a.animatingTo=Math.floor(a.currentSlide/a.move),a.currentItem=a.currentSlide,a.slides.removeClass(n+"active-slide").eq(a.currentItem).addClass(n+"active-slide"),i?(e._slider=a,a.slides.each(function(){var e=this;e._gesture=new MSGesture,e._gesture.target=e,e.addEventListener("MSPointerDown",function(e){e.preventDefault(),e.currentTarget._gesture&&e.currentTarget._gesture.addPointer(e.pointerId)},!1),e.addEventListener("MSGestureTap",function(e){e.preventDefault();var t=$(this),n=t.index();$(a.vars.asNavFor).data("flexslider").animating||t.hasClass("active")||(a.direction=a.currentItem=s&&t.hasClass(n+"active-slide")?a.flexAnimate(a.getTarget("prev"),!0):$(a.vars.asNavFor).data("flexslider").animating||t.hasClass(n+"active-slide")||(a.direction=a.currentItem'),a.pagingCount>1)for(var l=0;l':""+t+"","thumbnails"===a.vars.controlNav&&!0===a.vars.thumbCaptions){var c=s.attr("data-thumbcaption");""!==c&&void 0!==c&&(i+=''+c+"")}a.controlNavScaffold.append("
  • "+i+"
  • "),t++}a.controlsContainer?$(a.controlsContainer).append(a.controlNavScaffold):a.append(a.controlNavScaffold),m.controlNav.set(),m.controlNav.active(),a.controlNavScaffold.delegate("a, img",r,function(e){if(e.preventDefault(),""===o||o===e.type){var t=$(this),i=a.controlNav.index(t);t.hasClass(n+"active")||(a.direction=i>a.currentSlide?"next":"prev",a.flexAnimate(i,a.vars.pauseOnAction))}""===o&&(o=e.type),m.setToClearWatchedEvent()})},setupManual:function(){a.controlNav=a.manualControls,m.controlNav.active(),a.controlNav.bind(r,function(e){if(e.preventDefault(),""===o||o===e.type){var t=$(this),i=a.controlNav.index(t);t.hasClass(n+"active")||(a.direction=i>a.currentSlide?"next":"prev",a.flexAnimate(i,a.vars.pauseOnAction))}""===o&&(o=e.type),m.setToClearWatchedEvent()})},set:function(){var e="thumbnails"===a.vars.controlNav?"img":"a";a.controlNav=$("."+n+"control-nav li "+e,a.controlsContainer?a.controlsContainer:a)},active:function(){a.controlNav.removeClass(n+"active").eq(a.animatingTo).addClass(n+"active")},update:function(e,t){a.pagingCount>1&&"add"===e?a.controlNavScaffold.append($("
  • "+a.count+"
  • ")):1===a.pagingCount?a.controlNavScaffold.find("li").remove():a.controlNav.eq(t).closest("li").remove(),m.controlNav.set(),a.pagingCount>1&&a.pagingCount!==a.controlNav.length?a.update(t,e):m.controlNav.active()}},directionNav:{setup:function(){var e=$('");a.customDirectionNav?a.directionNav=a.customDirectionNav:a.controlsContainer?($(a.controlsContainer).append(e),a.directionNav=$("."+n+"direction-nav li a",a.controlsContainer)):(a.append(e),a.directionNav=$("."+n+"direction-nav li a",a)),m.directionNav.update(),a.directionNav.bind(r,function(e){e.preventDefault();var t;(""===o||o===e.type)&&(t=a.getTarget($(this).hasClass(n+"next")?"next":"prev"),a.flexAnimate(t,a.vars.pauseOnAction)),""===o&&(o=e.type),m.setToClearWatchedEvent()})},update:function(){var e=n+"disabled";1===a.pagingCount?a.directionNav.addClass(e).attr("tabindex","-1"):a.vars.animationLoop?a.directionNav.removeClass(e).removeAttr("tabindex"):0===a.animatingTo?a.directionNav.removeClass(e).filter("."+n+"prev").addClass(e).attr("tabindex","-1"):a.animatingTo===a.last?a.directionNav.removeClass(e).filter("."+n+"next").addClass(e).attr("tabindex","-1"):a.directionNav.removeClass(e).removeAttr("tabindex")}},pausePlay:{setup:function(){var e=$('
    ');a.controlsContainer?(a.controlsContainer.append(e),a.pausePlay=$("."+n+"pauseplay a",a.controlsContainer)):(a.append(e),a.pausePlay=$("."+n+"pauseplay a",a)),m.pausePlay.update(a.vars.slideshow?n+"pause":n+"play"),a.pausePlay.bind(r,function(e){e.preventDefault(),(""===o||o===e.type)&&($(this).hasClass(n+"pause")?(a.manualPause=!0,a.manualPlay=!1,a.pause()):(a.manualPause=!1,a.manualPlay=!0,a.play())),""===o&&(o=e.type),m.setToClearWatchedEvent()})},update:function(e){"play"===e?a.pausePlay.removeClass(n+"pause").addClass(n+"play").html(a.vars.playText):a.pausePlay.removeClass(n+"play").addClass(n+"pause").html(a.vars.pauseText)}},touch:function(){function t(t){t.stopPropagation(),a.animating?t.preventDefault():(a.pause(),e._gesture.addPointer(t.pointerId),w=0,p=c?a.h:a.w,f=Number(new Date),l=u&&d&&a.animatingTo===a.last?0:u&&d?a.limit-(a.itemW+a.vars.itemMargin)*a.move*a.animatingTo:u&&a.currentSlide===a.last?a.limit:u?(a.itemW+a.vars.itemMargin)*a.move*a.currentSlide:d?(a.last-a.currentSlide+a.cloneOffset)*p:(a.currentSlide+a.cloneOffset)*p)}function n(t){t.stopPropagation();var a=t.target._slider;if(a){var n=-t.translationX,i=-t.translationY;return w+=c?i:n,m=w,y=c?Math.abs(w)500)&&(t.preventDefault(),!v&&a.transitions&&(a.vars.animationLoop||(m=w/(0===a.currentSlide&&0>w||a.currentSlide===a.last&&w>0?Math.abs(w)/p+2:1)),a.setProps(l+m,"setTouch"))))}}function s(e){e.stopPropagation();var t=e.target._slider;if(t){if(t.animatingTo===t.currentSlide&&!y&&null!==m){var a=d?-m:m,n=t.getTarget(a>0?"next":"prev");t.canAdvance(n)&&(Number(new Date)-f<550&&Math.abs(a)>50||Math.abs(a)>p/2)?t.flexAnimate(n,t.vars.pauseOnAction):v||t.flexAnimate(t.currentSlide,t.vars.pauseOnAction,!0)}r=null,o=null,m=null,l=null,w=0}}var r,o,l,p,m,f,g,h,S,y=!1,x=0,b=0,w=0;i?(e.style.msTouchAction="none",e._gesture=new MSGesture,e._gesture.target=e,e.addEventListener("MSPointerDown",t,!1),e._slider=a,e.addEventListener("MSGestureChange",n,!1),e.addEventListener("MSGestureEnd",s,!1)):(g=function(t){a.animating?t.preventDefault():(window.navigator.msPointerEnabled||1===t.touches.length)&&(a.pause(),p=c?a.h:a.w,f=Number(new Date),x=t.touches[0].pageX,b=t.touches[0].pageY,l=u&&d&&a.animatingTo===a.last?0:u&&d?a.limit-(a.itemW+a.vars.itemMargin)*a.move*a.animatingTo:u&&a.currentSlide===a.last?a.limit:u?(a.itemW+a.vars.itemMargin)*a.move*a.currentSlide:d?(a.last-a.currentSlide+a.cloneOffset)*p:(a.currentSlide+a.cloneOffset)*p,r=c?b:x,o=c?x:b,e.addEventListener("touchmove",h,!1),e.addEventListener("touchend",S,!1))},h=function(e){x=e.touches[0].pageX,b=e.touches[0].pageY,m=c?r-b:r-x,y=c?Math.abs(m)t)&&(e.preventDefault(),!v&&a.transitions&&(a.vars.animationLoop||(m/=0===a.currentSlide&&0>m||a.currentSlide===a.last&&m>0?Math.abs(m)/p+2:1),a.setProps(l+m,"setTouch")))},S=function(t){if(e.removeEventListener("touchmove",h,!1),a.animatingTo===a.currentSlide&&!y&&null!==m){var n=d?-m:m,i=a.getTarget(n>0?"next":"prev");a.canAdvance(i)&&(Number(new Date)-f<550&&Math.abs(n)>50||Math.abs(n)>p/2)?a.flexAnimate(i,a.vars.pauseOnAction):v||a.flexAnimate(a.currentSlide,a.vars.pauseOnAction,!0)}e.removeEventListener("touchend",S,!1),r=null,o=null,m=null,l=null},e.addEventListener("touchstart",g,!1))},resize:function(){!a.animating&&a.is(":visible")&&(u||a.doMath(),v?m.smoothHeight():u?(a.slides.width(a.computedW),a.update(a.pagingCount),a.setProps()):c?(a.viewport.height(a.h),a.setProps(a.h,"setTotal")):(a.vars.smoothHeight&&m.smoothHeight(),a.newSlides.width(a.computedW),a.setProps(a.computedW,"setTotal")))},smoothHeight:function(e){if(!c||v){var t=v?a:a.viewport;e?t.animate({height:a.slides.eq(a.animatingTo).height()},e):t.height(a.slides.eq(a.animatingTo).height())}},sync:function(e){var t=$(a.vars.sync).data("flexslider"),n=a.animatingTo;switch(e){case"animate":t.flexAnimate(n,a.vars.pauseOnAction,!1,!0);break;case"play":t.playing||t.asNav||t.play();break;case"pause":t.pause()}},uniqueID:function(e){return e.filter("[id]").add(e.find("[id]")).each(function(){var e=$(this);e.attr("id",e.attr("id")+"_clone")}),e},pauseInvisible:{visProp:null,init:function(){var e=m.pauseInvisible.getHiddenProp();if(e){var t=e.replace(/[H|h]idden/,"")+"visibilitychange";document.addEventListener(t,function(){m.pauseInvisible.isHidden()?a.startTimeout?clearTimeout(a.startTimeout):a.pause():a.started?a.play():a.vars.initDelay>0?setTimeout(a.play,a.vars.initDelay):a.play()})}},isHidden:function(){var e=m.pauseInvisible.getHiddenProp();return e?document[e]:!1},getHiddenProp:function(){var e=["webkit","moz","ms","o"];if("hidden"in document)return"hidden";for(var t=0;ta.currentSlide?"next":"prev"),p&&1===a.pagingCount&&(a.direction=a.currentItema.limit&&1!==a.visible?a.limit:S):h=0===a.currentSlide&&e===a.count-1&&a.vars.animationLoop&&"next"!==a.direction?d?(a.count+a.cloneOffset)*f:0:a.currentSlide===a.last&&0===e&&a.vars.animationLoop&&"prev"!==a.direction?d?0:(a.count+1)*f:d?(a.count-1-e+a.cloneOffset)*f:(e+a.cloneOffset)*f,a.setProps(h,"",a.vars.animationSpeed),a.transitions?(a.vars.animationLoop&&a.atEnd||(a.animating=!1,a.currentSlide=a.animatingTo),a.container.unbind("webkitTransitionEnd transitionend"),a.container.bind("webkitTransitionEnd transitionend",function(){clearTimeout(a.ensureAnimationEnd),a.wrapup(f)}),clearTimeout(a.ensureAnimationEnd),a.ensureAnimationEnd=setTimeout(function(){a.wrapup(f)},a.vars.animationSpeed+100)):a.container.animate(a.args,a.vars.animationSpeed,a.vars.easing,function(){a.wrapup(f)})}a.vars.smoothHeight&&m.smoothHeight(a.vars.animationSpeed)}},a.wrapup=function(e){v||u||(0===a.currentSlide&&a.animatingTo===a.last&&a.vars.animationLoop?a.setProps(e,"jumpEnd"):a.currentSlide===a.last&&0===a.animatingTo&&a.vars.animationLoop&&a.setProps(e,"jumpStart")),a.animating=!1,a.currentSlide=a.animatingTo,a.vars.after(a)},a.animateSlides=function(){!a.animating&&f&&a.flexAnimate(a.getTarget("next"))},a.pause=function(){clearInterval(a.animatedSlides),a.animatedSlides=null,a.playing=!1,a.vars.pausePlay&&m.pausePlay.update("play"),a.syncExists&&m.sync("pause")},a.play=function(){a.playing&&clearInterval(a.animatedSlides),a.animatedSlides=a.animatedSlides||setInterval(a.animateSlides,a.vars.slideshowSpeed),a.started=a.playing=!0,a.vars.pausePlay&&m.pausePlay.update("pause"),a.syncExists&&m.sync("play")},a.stop=function(){a.pause(),a.stopped=!0},a.canAdvance=function(e,t){var n=p?a.pagingCount-1:a.last;return t?!0:p&&a.currentItem===a.count-1&&0===e&&"prev"===a.direction?!0:p&&0===a.currentItem&&e===a.pagingCount-1&&"next"!==a.direction?!1:e!==a.currentSlide||p?a.vars.animationLoop?!0:a.atEnd&&0===a.currentSlide&&e===n&&"next"!==a.direction?!1:a.atEnd&&a.currentSlide===n&&0===e&&"next"===a.direction?!1:!0:!1},a.getTarget=function(e){return a.direction=e,"next"===e?a.currentSlide===a.last?0:a.currentSlide+1:0===a.currentSlide?a.last:a.currentSlide-1},a.setProps=function(e,t,n){var i=function(){var n=e?e:(a.itemW+a.vars.itemMargin)*a.move*a.animatingTo,i=function(){if(u)return"setTouch"===t?e:d&&a.animatingTo===a.last?0:d?a.limit-(a.itemW+a.vars.itemMargin)*a.move*a.animatingTo:a.animatingTo===a.last?a.limit:n;switch(t){case"setTotal":return d?(a.count-1-a.currentSlide+a.cloneOffset)*e:(a.currentSlide+a.cloneOffset)*e;case"setTouch":return d?e:e;case"jumpEnd":return d?e:a.count*e;case"jumpStart":return d?a.count*e:e;default:return e}}();return-1*i+"px"}();a.transitions&&(i=c?"translate3d(0,"+i+",0)":"translate3d("+i+",0,0)",n=void 0!==n?n/1e3+"s":"0s",a.container.css("-"+a.pfx+"-transition-duration",n),a.container.css("transition-duration",n)),a.args[a.prop]=i,(a.transitions||void 0===n)&&a.container.css(a.args),a.container.css("transform",i)},a.setup=function(e){if(v)a.slides.css({width:"100%","float":"left",marginRight:"-100%",position:"relative"}),"init"===e&&(s?a.slides.css({opacity:0,display:"block",webkitTransition:"opacity "+a.vars.animationSpeed/1e3+"s ease",zIndex:1}).eq(a.currentSlide).css({opacity:1,zIndex:2}):0==a.vars.fadeFirstSlide?a.slides.css({opacity:0,display:"block",zIndex:1}).eq(a.currentSlide).css({zIndex:2}).css({opacity:1}):a.slides.css({opacity:0,display:"block",zIndex:1}).eq(a.currentSlide).css({zIndex:2}).animate({opacity:1},a.vars.animationSpeed,a.vars.easing)),a.vars.smoothHeight&&m.smoothHeight();else{var t,i;"init"===e&&(a.viewport=$('
    ').css({overflow:"hidden",position:"relative"}).appendTo(a).append(a.container),a.cloneCount=0,a.cloneOffset=0,d&&(i=$.makeArray(a.slides).reverse(),a.slides=$(i),a.container.empty().append(a.slides))),a.vars.animationLoop&&!u&&(a.cloneCount=2,a.cloneOffset=1,"init"!==e&&a.container.find(".clone").remove(),a.container.append(m.uniqueID(a.slides.first().clone().addClass("clone")).attr("aria-hidden","true")).prepend(m.uniqueID(a.slides.last().clone().addClass("clone")).attr("aria-hidden","true"))),a.newSlides=$(a.vars.selector,a),t=d?a.count-1-a.currentSlide+a.cloneOffset:a.currentSlide+a.cloneOffset,c&&!u?(a.container.height(200*(a.count+a.cloneCount)+"%").css("position","absolute").width("100%"),setTimeout(function(){a.newSlides.css({display:"block"}),a.doMath(),a.viewport.height(a.h),a.setProps(t*a.h,"init")},"init"===e?100:0)):(a.container.width(200*(a.count+a.cloneCount)+"%"),a.setProps(t*a.computedW,"init"),setTimeout(function(){a.doMath(),a.newSlides.css({width:a.computedW,"float":"left",display:"block"}),a.vars.smoothHeight&&m.smoothHeight()},"init"===e?100:0))}u||a.slides.removeClass(n+"active-slide").eq(a.currentSlide).addClass(n+"active-slide"),a.vars.init(a)},a.doMath=function(){var e=a.slides.first(),t=a.vars.itemMargin,n=a.vars.minItems,i=a.vars.maxItems;a.w=void 0===a.viewport?a.width():a.viewport.width(),a.h=e.height(),a.boxPadding=e.outerWidth()-e.width(),u?(a.itemT=a.vars.itemWidth+t,a.minW=n?n*a.itemT:a.w,a.maxW=i?i*a.itemT-t:a.w,a.itemW=a.minW>a.w?(a.w-t*(n-1))/n:a.maxWa.w?a.w:a.vars.itemWidth,a.visible=Math.floor(a.w/a.itemW),a.move=a.vars.move>0&&a.vars.movea.w?a.itemW*(a.count-1)+t*(a.count-1):(a.itemW+t)*a.count-a.w-t):(a.itemW=a.w,a.pagingCount=a.count,a.last=a.count-1),a.computedW=a.itemW-a.boxPadding},a.update=function(e,t){a.doMath(),u||(ea.controlNav.length?m.controlNav.update("add"):("remove"===t&&!u||a.pagingCounta.last&&(a.currentSlide-=1,a.animatingTo-=1),m.controlNav.update("remove",a.last))),a.vars.directionNav&&m.directionNav.update()},a.addSlide=function(e,t){var n=$(e);a.count+=1,a.last=a.count-1,c&&d?void 0!==t?a.slides.eq(a.count-t).after(n):a.container.prepend(n):void 0!==t?a.slides.eq(t).before(n):a.container.append(n),a.update(t,"add"),a.slides=$(a.vars.selector+":not(.clone)",a),a.setup(),a.vars.added(a)},a.removeSlide=function(e){var t=isNaN(e)?a.slides.index($(e)):e;a.count-=1,a.last=a.count-1,isNaN(e)?$(e,a.slides).remove():c&&d?a.slides.eq(a.last).remove():a.slides.eq(e).remove(),a.doMath(),a.update(t,"remove"),a.slides=$(a.vars.selector+":not(.clone)",a),a.setup(),a.vars.removed(a)},m.init()},$(window).blur(function(e){focused=!1}).focus(function(e){focused=!0}),$.flexslider.defaults={namespace:"flex-",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7e3,animationSpeed:600,initDelay:0,randomize:!1,fadeFirstSlide:!0,thumbCaptions:!1,pauseOnAction:!0,pauseOnHover:!1,pauseInvisible:!0,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next",keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",customDirectionNav:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:1,maxItems:0,move:0,allowOneSlide:!0,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){},init:function(){}},$.fn.flexslider=function(e){if(void 0===e&&(e={}),"object"==typeof e)return this.each(function(){var t=$(this),a=e.selector?e.selector:".slides > li",n=t.find(a);1===n.length&&e.allowOneSlide===!0||0===n.length?(n.fadeIn(400),e.start&&e.start(t)):void 0===t.data("flexslider")&&new $.flexslider(this,e)});var t=$(this).data("flexslider");switch(e){case"play":t.play();break;case"pause":t.pause();break;case"stop":t.stop();break;case"next":t.flexAnimate(t.getTarget("next"),!0);break;case"prev":case"previous":t.flexAnimate(t.getTarget("prev"),!0);break;default:"number"==typeof e&&t.flexAnimate(e,!0)}}}(jQuery); \ No newline at end of file diff --git a/js/jquery.min.js b/js/jquery.min.js new file mode 100644 index 00000000..bf2ef4a1 --- /dev/null +++ b/js/jquery.min.js @@ -0,0 +1,4 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b="length"in a&&a.length,c=ea.type(a);return"function"===c||ea.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(ea.isFunction(b))return ea.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return ea.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ma.test(b))return ea.filter(b,a,c);b=ea.filter(b,a)}return ea.grep(a,function(a){return ea.inArray(a,b)>=0!==c})}function e(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function f(a){var b=ua[a]={};return ea.each(a.match(ta)||[],function(a,c){b[c]=!0}),b}function g(){oa.addEventListener?(oa.removeEventListener("DOMContentLoaded",h,!1),a.removeEventListener("load",h,!1)):(oa.detachEvent("onreadystatechange",h),a.detachEvent("onload",h))}function h(){(oa.addEventListener||"load"===event.type||"complete"===oa.readyState)&&(g(),ea.ready())}function i(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(za,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ya.test(c)?ea.parseJSON(c):c}catch(e){}ea.data(a,b,c)}else c=void 0}return c}function j(a){var b;for(b in a)if(("data"!==b||!ea.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function k(a,b,c,d){if(ea.acceptData(a)){var e,f,g=ea.expando,h=a.nodeType,i=h?ea.cache:a,j=h?a[g]:a[g]&&g;if(j&&i[j]&&(d||i[j].data)||void 0!==c||"string"!=typeof b)return j||(j=h?a[g]=W.pop()||ea.guid++:g),i[j]||(i[j]=h?{}:{toJSON:ea.noop}),("object"==typeof b||"function"==typeof b)&&(d?i[j]=ea.extend(i[j],b):i[j].data=ea.extend(i[j].data,b)),f=i[j],d||(f.data||(f.data={}),f=f.data),void 0!==c&&(f[ea.camelCase(b)]=c),"string"==typeof b?(e=f[b],null==e&&(e=f[ea.camelCase(b)])):e=f,e}}function l(a,b,c){if(ea.acceptData(a)){var d,e,f=a.nodeType,g=f?ea.cache:a,h=f?a[ea.expando]:ea.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){ea.isArray(b)?b=b.concat(ea.map(b,ea.camelCase)):b in d?b=[b]:(b=ea.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;for(;e--;)delete d[b[e]];if(c?!j(d):!ea.isEmptyObject(d))return}(c||(delete g[h].data,j(g[h])))&&(f?ea.cleanData([a],!0):ca.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}function m(){return!0}function n(){return!1}function o(){try{return oa.activeElement}catch(a){}}function p(a){var b=Ka.split("|"),c=a.createDocumentFragment();if(c.createElement)for(;b.length;)c.createElement(b.pop());return c}function q(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==xa?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==xa?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||ea.nodeName(d,b)?f.push(d):ea.merge(f,q(d,b));return void 0===b||b&&ea.nodeName(a,b)?ea.merge([a],f):f}function r(a){Ea.test(a.type)&&(a.defaultChecked=a.checked)}function s(a,b){return ea.nodeName(a,"table")&&ea.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function t(a){return a.type=(null!==ea.find.attr(a,"type"))+"/"+a.type,a}function u(a){var b=Va.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function v(a,b){for(var c,d=0;null!=(c=a[d]);d++)ea._data(c,"globalEval",!b||ea._data(b[d],"globalEval"))}function w(a,b){if(1===b.nodeType&&ea.hasData(a)){var c,d,e,f=ea._data(a),g=ea._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)ea.event.add(b,c,h[c][d])}g.data&&(g.data=ea.extend({},g.data))}}function x(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!ca.noCloneEvent&&b[ea.expando]){e=ea._data(b);for(d in e.events)ea.removeEvent(b,d,e.handle);b.removeAttribute(ea.expando)}"script"===c&&b.text!==a.text?(t(b).text=a.text,u(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),ca.html5Clone&&a.innerHTML&&!ea.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Ea.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function y(b,c){var d,e=ea(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:ea.css(e[0],"display");return e.detach(),f}function z(a){var b=oa,c=_a[a];return c||(c=y(a,b),"none"!==c&&c||($a=($a||ea("