Full Code of Henryhaohao/Wenshu_Spider for AI

master 5b5ec14febb7 cached
16 files
161.7 KB
55.6k tokens
484 symbols
1 requests
Download .txt
Repository: Henryhaohao/Wenshu_Spider
Branch: master
Commit: 5b5ec14febb7
Files: 16
Total size: 161.7 KB

Directory structure:
gitextract_f9jb1u45/

├── .gitattributes
├── LICENSE
├── README.md
└── Wenshu_Project/
    ├── Wenshu/
    │   ├── __init__.py
    │   ├── cmdline.py
    │   ├── items.py
    │   ├── middlewares.py
    │   ├── pipelines.py
    │   ├── settings.py
    │   └── spiders/
    │       ├── __init__.py
    │       ├── get_docid.js
    │       ├── get_vl5x.js
    │       └── wenshu.py
    ├── __init__.py
    ├── requirements.txt
    └── scrapy.cfg

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.js linguist-language=python

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2018 Henryhaohao

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
Scrapy框架爬取中国裁判文书网案件数据 ![enter image description here](Pic/logo.png)
===========================
![](https://img.shields.io/badge/Python-3.6.3-green.svg) ![](https://img.shields.io/badge/Scrapy-1.5.0-green.svg) ![](https://img.shields.io/badge/requests-2.18.4-green.svg) ![](https://img.shields.io/badge/PyExecJS-1.5.1-green.svg) ![](https://img.shields.io/badge/pymongo-3.6.1-green.svg) 
### 中国裁判文书网 - http://wenshu.court.gov.cn/
|Author|:sunglasses:Henryhaohao:sunglasses:|
|---|---
|Email|:hearts:1073064953@qq.com:hearts:

      
****
## :dolphin:声明
### 软件均仅用于学习交流,请勿用于任何商业用途!感谢大家! 
## :dolphin:介绍
### 该项目为Scrapy框架爬取[中国裁判文书网](http://wenshu.court.gov.cn/)案件数据(2018-10-20最新版)
- 项目文件: Wenshu_Project
- 运行须知: 
> **数据库配置** : 运行前根据自己需要修改settings.py中的MongoDB数据库的配置<br>

> **反爬问题** : 由于文书网的反爬监控很严格(一级验证码,二级验证码,JavaScript反爬,IP检测...),所有采用[阿布云动态隧道代理](https://www.abuyun.com/)方案,每一次request请求都是不同的IP,这样就不会触发反爬检测了~:sunglasses:。还是挺好用的,基本上每个IP都可以用,主要也还方便,直接用它的代理服务器发出请求,不用像一般的代理IP那样还需要取出IP,再代入IP进行请求。代理相关配置在middlewares.py的类ProxyMiddleware中。<br>

> **爬取策略问题** : 现在的文书网总量已经高达5千多万份了,但是每个筛选条件下只能查看20页,每页10条。本项目以爬取1996-2000年的所有文书为例,大家有好的爬取方案,可以自行修改Param参数即可。<br>
 
> **速度问题** : 配置在setting.py中:DOWNLOAD_DELAY = 0(无delay实现请求0延时);CONCURRENT_REQUESTS_PER_SPIDER = 5 (开启线程数为5);因为我用的代理配置是默认的每秒5个请求数,所以在此设置线程数为5;如果想爬取更快,可以加大代理请求数(当然是要money滴~),最高可以加到100的请求数,我滴天呀,那得多快啊!我现在的速度大概每秒爬取4个案件,加到100的话,估计每秒80个,一分钟4800个,一小时288000,一天就是6912000,目前总量5千4百万,大概8~9天就能爬完,如果在加上redis分布式的话,哇,不敢想象!:yum:
## :dolphin:运行环境
- **Version: Python3**<br>
- **JS解析环境: Nodejs**<br>
  有不少小伙伴向我反映运行后报错:execjs._exceptions.ProgramError: TypeError: 'key' 为 null 或不是对象<br>
  解决方案如下:<br>
        如果pyexecjs包没问题的话,那就是没有安装nodejs的问题; 因为你没有安装nodejs的话默认js解析环境是JScript, 但是项目中的js代码有的地方需要node环境才能运行, 所以需要装一下Nodejs再运行就好了;<br>
        注意: nodejs安装完成后记得把IDE关闭重新打开,比如pycharm,不然IDE不会监测到jscript引擎的变化,导致依然报错
        关于NodeJs安装可以参考这篇文章: https://www.cnblogs.com/liuqiyun/p/8133904.html
## :dolphin:安装依赖库 
```
pip3 install -r requirements.txt
```
## :dolphin:存储数据库
> **Database: MongoDB**
## :dolphin:**相关截图**
> - **运行过程**<br><br>
![enter image description here](Pic/run.gif)
> - **数据截图**<br><br>
![enter image description here](Pic/data.png)
> - **阿布云**<br><br>
![enter image description here](Pic/abuyun.png)
![enter image description here](Pic/abuyun_1.png)
## :dolphin:**总结**
> **最后,如果你觉得这个项目不错或者对你有帮助,给个Star呗,也算是对我学习路上的一种鼓励!<br>
 哈哈哈,感谢大家!笔芯哟~**:cupid::cupid:





================================================
FILE: Wenshu_Project/Wenshu/__init__.py
================================================


================================================
FILE: Wenshu_Project/Wenshu/cmdline.py
================================================
# !/user/bin/env python
# -*- coding:utf-8 -*- 
# time: 2018/10/18--17:11
__author__ = 'Henry'


from scrapy import cmdline


if __name__ == '__main__':
    #execute的参数类型为一个列表
    # 写法一
    cmdline.execute('scrapy crawl wenshu'.split())
    # 写法二
    # cmdline.execute(['scrapy', 'crawl', 'wenshu'])

================================================
FILE: Wenshu_Project/Wenshu/items.py
================================================
# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class WenshuCaseItem(scrapy.Item):
    # define the fields for your item here like:
    casecourt = scrapy.Field()
    casecontent = scrapy.Field()
    casetype = scrapy.Field()
    # casereason = scrapy.Field()
    casejudgedate = scrapy.Field()
    # caseparty = scrapy.Field()
    caseprocedure = scrapy.Field()
    casenumber = scrapy.Field()
    casenopublicreason = scrapy.Field()
    casedocid = scrapy.Field()
    casename = scrapy.Field()
    casecontenttype = scrapy.Field()
    caseuploaddate = scrapy.Field()
    casedoctype = scrapy.Field()
    caseclosemethod = scrapy.Field()
    caseeffectivelevel = scrapy.Field()


================================================
FILE: Wenshu_Project/Wenshu/middlewares.py
================================================
# -*- coding: utf-8 -*-

# Define here the models for your spider middleware
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html

from scrapy import signals
import random, requests, logging, base64


class RandomUserAgentMiddleware(object):
    def __init__(self, agents):
        self.agents = agents

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings.getlist('USER_AGENTS'))

    def process_request(self, request, spider):
        # print("********Current UserAgent********" + random.choice(self.agents))
        request.headers.setdefault('User-Agent', random.choice(self.agents))


# 法一:连接阿布云动态代理隧道(付费:IP质量好)
class ProxyMiddleware(object):
    def __init__(self):
        # 阿布云代理服务器
        self.proxyServer = "http://http-dyn.abuyun.com:9020"
        # 代理隧道验证信息
        proxyUser = "***在此填入阿布云通行证书***"
        proxyPass = "***在此填入阿布云通行密钥***"
        self.proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8") # Python3
        # self.proxyAuth = "Basic " + base64.b64encode(proxyUser + ":" + proxyPass) # Python2

    def process_request(self, request, spider):
        '''处理请求request'''
        request.headers['Proxy-Authorization'] = self.proxyAuth
        request.meta['proxy'] = self.proxyServer

    def process_response(self, request, response, spider):
        '''处理返回的response'''
        # print(response.url)
        html = response.body.decode()
        if response.status != 200 or 'remind key' in html or 'remind' in html or '请开启JavaScript' in html or '服务不可用' in html:
            # print('正在重新请求************')
            new_request = request.copy()
            new_request.dont_filter = True
            return new_request
        else:
            return response

    def process_exception(self, request, exception, spider):
        new_request = request.copy()
        new_request.dont_filter = True
        return new_request


# 法二:连接本地自己维护的代理池(免费:但是IP质量不好,很容易被ban掉)
# class ProxyMiddleware(object):
#     def __init__(self, PROXY_POOL_URL, DELETE_PROXY_URL):
#
#     # self.PROXY_POOL_URL = PROXY_POOL_URL
#     # self.DELETE_PROXY_URL = DELETE_PROXY_URL
#
#     @classmethod
#     def from_crawler(cls, crawler):
#         return cls(
#             crawler.settings.get('PROXY_POOL_URL'),
#             crawler.settings.get('DELETE_PROXY_URL')
#         )
#
#     def process_request(self, request, spider):
#         '''处理请求request'''
#         # request.meta['proxy'] = 'http://' + self.get_randomproxy()
#
#     def process_response(self, request, response, spider):
#         '''处理返回的response'''
#         # if response.status != 200 or response.body in ['"remind key"', 'remind'] or '请开启JavaScript' in response.body:
#         print(response.url)
#         # print(response.body)
#
#         # if response.status != 200 or b'remind' in response.body or b"[]" in response.body or b"window.location.href" in response.body:
#         # # if response.status != 200 or 'VisitRemind' in response.url: # 'VisitRemind' in response.url:出现一级验证码
#         #     print('请求太快,该IP已被封禁...尝试切换新的IP...')
#         #     if 'proxy' in request.meta :
#         #         # print(request.meta['proxy'])
#         #         self.delete_proxy(request.meta['proxy'].split('//')[1]) # 请求失败,删除此IP
#         #     proxy = self.get_randomproxy()
#         #     print("********Current Proxy********" + str(proxy))
#         #     request.meta['proxy'] = 'http://' + proxy # 切换新IP重新请求
#         #     return request
#         return response
#
#     def get_randomproxy(self):
#         '''随机从IP池中获取代理'''
#         try:
#             response = requests.get(self.PROXY_POOL_URL)
#             if response.status_code == 200:
#                 return response.text
#         except:
#             # return None
#             return self.get_randomproxy()
#
#     def delete_proxy(self, proxy):
#         '''请求失败,从代理池中删除此IP'''
#         try:
#             response = requests.get(self.DELETE_PROXY_URL + proxy)
#             if response.text == 1:
#                 logging.info('删除IP成功')
#                 print('删除IP成功')
#         except:
#             logging.info('删除IP失败')
#             print('删除IP失败')


class WenshuSpiderMiddleware(object):
    # Not all methods need to be defined. If a method is not defined,
    # scrapy acts as if the spider middleware does not modify the
    # passed objects.

    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create your spiders.
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        return s

    def process_spider_input(self, response, spider):
        # Called for each response that goes through the spider
        # middleware and into the spider.

        # Should return None or raise an exception.
        return None

    def process_spider_output(self, response, result, spider):
        # Called with the results returned from the Spider, after
        # it has processed the response.

        # Must return an iterable of Request, dict or Item objects.
        for i in result:
            yield i

    def process_spider_exception(self, response, exception, spider):
        # Called when a spider or process_spider_input() method
        # (from other spider middleware) raises an exception.

        # Should return either None or an iterable of Response, dict
        # or Item objects.
        pass

    def process_start_requests(self, start_requests, spider):
        # Called with the start requests of the spider, and works
        # similarly to the process_spider_output() method, except
        # that it doesn’t have a response associated.

        # Must return only requests (not items).
        for r in start_requests:
            yield r

    def spider_opened(self, spider):
        spider.logger.info('Spider opened: %s' % spider.name)


class WenshuDownloaderMiddleware(object):
    # Not all methods need to be defined. If a method is not defined,
    # scrapy acts as if the downloader middleware does not modify the
    # passed objects.

    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create your spiders.
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        return s

    def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called
        return None

    def process_response(self, request, response, spider):
        # Called with the response returned from the downloader.

        # Must either;
        # - return a Response object
        # - return a Request object
        # - or raise IgnoreRequest
        return response

    def process_exception(self, request, exception, spider):
        # Called when a download handler or a process_request()
        # (from other downloader middleware) raises an exception.

        # Must either:
        # - return None: continue processing this exception
        # - return a Response object: stops process_exception() chain
        # - return a Request object: stops process_exception() chain
        pass

    def spider_opened(self, spider):
        spider.logger.info('Spider opened: %s' % spider.name)


================================================
FILE: Wenshu_Project/Wenshu/pipelines.py
================================================
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import pymongo,time
from pymongo.errors import DuplicateKeyError
from scrapy.conf import settings


# 1.简单同步存储item
class WenshuPipeline(object):
    def __init__(self):
        host = settings['MONGODB_HOST']
        port = settings['MONGODB_PORT']
        dbname = settings['MONGODB_DBNAME']
        docname = settings['MONGODB_DOCNAME']
        self.client = pymongo.MongoClient(host=host,port=port)
        db = self.client[dbname]
        db[docname].ensure_index('casedocid', unique=True)  # 设置文书ID为唯一索引,避免插入重复数据
        self.post = db[docname]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        '''插入数据'''
        try:
            data = dict(item)
            self.post.insert_one(data)
            return item
        except DuplicateKeyError:
            # 索引相同,即为重复数据,捕获错误
            spider.logger.debug('Duplicate key error collection')
            return item


# 2.异步存储item - 不行!插入不了数据! (参考:https://zhuanlan.zhihu.com/p/44003499)
# from twisted.internet import defer, reactor
# class WenshuPipeline(object):
#     def __init__(self, mongo_host, mongo_port, mongo_db, mongo_doc):
#         self.mongo_host = mongo_host
#         self.mongo_port = mongo_port
#         self.mongo_db = mongo_db
#         self.mongo_doc = mongo_doc
#
#     @classmethod
#     def from_crawler(cls, crawler):
#         return cls(
#             mongo_host=crawler.settings.get('MONGODB_HOST'),
#             mongo_port=crawler.settings.get('MONGODB_PORT'),
#             mongo_db=crawler.settings.get('MONGODB_DBNAME'),
#             mongo_doc=crawler.settings.get('MONGODB_DOCNAME'),
#         )
#
#     def open_spider(self, spider):
#         self.client = pymongo.MongoClient(host=self.mongo_host,port=self.mongo_port)
#         self.mongodb = self.client[self.mongo_db]
#         self.mongodb[self.mongo_doc].create_index('id', unique=True) # 创建索引,避免插入数据
#
#     def close_spider(self, spider):
#         self.client.close()
#
#     # 下面的操作是重点
#     @defer.inlineCallbacks
#     def process_item(self, item, spider):
#         out = defer.Deferred()
#         reactor.callInThread(self._insert, item, out, spider)
#         yield out
#         defer.returnValue(item)
#         return item
#
#     def _insert(self, item, out, spider):
#         time.sleep(10)
#         try:
#             self.mongodb[self.mongo_doc].insert_one(dict(item))
#             reactor.callFromThread(out.callback, item)
#         except DuplicateKeyError:
#             # 索引相同,即为重复数据,捕获错误
#             spider.logger.debug('duplicate key error collection')
#             reactor.callFromThread(out.callback, item)

================================================
FILE: Wenshu_Project/Wenshu/settings.py
================================================
# -*- coding: utf-8 -*-

# Scrapy settings for Wenshu project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://doc.scrapy.org/en/latest/topics/settings.html
#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://doc.scrapy.org/en/latest/topics/spider-middleware.html
import time

BOT_NAME = 'Wenshu'

SPIDER_MODULES = ['Wenshu.spiders']
NEWSPIDER_MODULE = 'Wenshu.spiders'

#连接MongoDB数据库
MONGODB_HOST = '127.0.0.1'
MONGODB_PORT = 27017
MONGODB_DBNAME = 'Henry' #数据库名
MONGODB_DOCNAME = 'wenshu' #表名

# 设置本地的IP代理池地址
# PROXY_POOL_URL = 'http://localhost:5555/random'
# DELETE_PROXY_URL = 'http://localhost:5555/del/'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'Wenshu (+http://www.yourdomain.com)'

# 请求失败重试
RETRY_ENABLED = True #是否开启retry
RETRY_TIMES = 3  #重试次数
# RETRY_HTTP_CODECS  #遇到什么http code时需要重试,默认是500,502,503,504,408,其他的,网络连接超时等问题也会自动retry的

# 中断后继续执行
JOB_DIR = 'wenshujob'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# 设置参数教程:https://blog.csdn.net/q_an1314/article/details/51245011
# Configure maximum concurrent requests performed by Scrapy (default: 16)
# CONCURRENT_REQUESTS = 300 # 由Scrapy下载程序执行的并发(即同时)请求的最大数量(选择一个能使CPU占用率在80%-90%的并发数)
CONCURRENT_REQUESTS_PER_SPIDER = 5 # 线程数(因为阿布云设置的是每秒最多5个请求,有钱可以加到100的并发)
CONCURRENT_REQUESTS_PER_DOMAIN = 1000000 # 任何单个域执行的并发(即同时)请求的最大数量
# CONCURRENT_REQUESTS_PER_IP = 0 # 任何单个IP执行的并发(即同时)请求的最大数量 ; 默认值(0),这样就禁用了对每个IP的限制

# 启用DNS内存缓存
DNSCACHE_ENABLED = True

# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs

# 下载延迟
DOWNLOAD_DELAY = 0 # scrapy的并发请求,只有在delay=0时才能实现;心疼服务器的可以加点延迟~
# 下载超时
DOWNLOAD_TIMEOUT = 8 # 减小下载超时能让卡住的连接能被快速的放弃并解放处理其他站点的能力,默认15秒
# 但是减小下载超时可能会引发错误:
# TimeoutError: User timeout caused connection failure: Getting http://xxx.com. took longer than 15.0 seconds.

# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# 禁止重定向
REDIRECT_ENABLED = False

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
    'Host':'wenshu.court.gov.cn',
    'Origin':'http://wenshu.court.gov.cn',
}

# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
#    'Wenshu.middlewares.WenshuSpiderMiddleware': 543,
# }

# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
    # 'Wenshu.middlewares.WenshuDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 200,
    'Wenshu.middlewares.ProxyMiddleware': 300,
    'Wenshu.middlewares.RandomUserAgentMiddleware': 1,
}

# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'Wenshu.pipelines.WenshuPipeline': 300,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

USER_AGENTS = [
    "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
    "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1",
    "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
    "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10",
    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)",
    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre",
    "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )",
    "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)",
    "Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a",
    "Mozilla/2.02E (Win95; U)",
    "Mozilla/3.01Gold (Win95; I)",
    "Mozilla/4.8 [en] (Windows NT 5.1; U)",
    "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)",
    "HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3",
    "Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
    "Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1",
    "Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
    "Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522  (KHTML, like Gecko) Safari/419.3",
    "Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
    "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
    "Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
    "Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
]

# 设置日志
# 日志文件
# LOG_FILE = 'wenshu.log' # 最好为爬虫名称
LOG_FILE = BOT_NAME + '_' + time.strftime("%Y%m%d", time.localtime()) + '.log'

# 日志等级
LOG_LEVEL = 'INFO'

# 是否启用日志(创建日志后,不需开启,进行配置)
LOG_ENABLED = True  # (默认为True,启用日志)

# 日志编码
LOG_ENCODING = 'utf-8'

# 如果是True ,进程当中,所有标准输出(包括错误)将会被重定向到log中;例如:在爬虫代码中的 print()
LOG_STDOUT = False  # 默认为False


================================================
FILE: Wenshu_Project/Wenshu/spiders/__init__.py
================================================
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.


================================================
FILE: Wenshu_Project/Wenshu/spiders/get_docid.js
================================================
window = {};
//AES
var CryptoJS = CryptoJS || function (u, p) {
    var d = {}
        , l = d.lib = {}
        , s = function () {
    }
        , t = l.Base = {
        extend: function (a) {
            s.prototype = this;
            var c = new s;
            a && c.mixIn(a);
            c.hasOwnProperty("init") || (c.init = function () {
                    c.$super.init.apply(this, arguments)
                }
            );
            c.init.prototype = c;
            c.$super = this;
            return c
        },
        create: function () {
            var a = this.extend();
            a.init.apply(a, arguments);
            return a
        },
        init: function () {
        },
        mixIn: function (a) {
            for (var c in a)
                a.hasOwnProperty(c) && (this[c] = a[c]);
            a.hasOwnProperty("toString") && (this.toString = a.toString)
        },
        clone: function () {
            return this.init.prototype.extend(this)
        }
    }
        , r = l.WordArray = t.extend({
        init: function (a, c) {
            a = this.words = a || [];
            this.sigBytes = c != p ? c : 4 * a.length
        },
        toString: function (a) {
            return (a || v).stringify(this)
        },
        concat: function (a) {
            var c = this.words
                , e = a.words
                , j = this.sigBytes;
            a = a.sigBytes;
            this.clamp();
            if (j % 4)
                for (var k = 0; k < a; k++)
                    c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
            else if (65535 < e.length)
                for (k = 0; k < a; k += 4)
                    c[j + k >>> 2] = e[k >>> 2];
            else
                c.push.apply(c, e);
            this.sigBytes += a;
            return this
        },
        clamp: function () {
            var a = this.words
                , c = this.sigBytes;
            a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);
            a.length = u.ceil(c / 4)
        },
        clone: function () {
            var a = t.clone.call(this);
            a.words = this.words.slice(0);
            return a
        },
        random: function (a) {
            for (var c = [], e = 0; e < a; e += 4)
                c.push(4294967296 * u.random() | 0);
            return new r.init(c, a)
        }
    })
        , w = d.enc = {}
        , v = w.Hex = {
        stringify: function (a) {
            var c = a.words;
            a = a.sigBytes;
            for (var e = [], j = 0; j < a; j++) {
                var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
                e.push((k >>> 4).toString(16));
                e.push((k & 15).toString(16))
            }
            return e.join("")
        },
        parse: function (a) {
            for (var c = a.length, e = [], j = 0; j < c; j += 2)
                e[j >>> 3] |= parseInt(a.substr(j, 2), 16) << 24 - 4 * (j % 8);
            return new r.init(e, c / 2)
        }
    }
        , b = w.Latin1 = {
        stringify: function (a) {
            var c = a.words;
            a = a.sigBytes;
            for (var e = [], j = 0; j < a; j++)
                e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
            return e.join("")
        },
        parse: function (a) {
            for (var c = a.length, e = [], j = 0; j < c; j++)
                e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
            return new r.init(e, c)
        }
    }
        , x = w.Utf8 = {
        stringify: function (a) {
            try {
                return decodeURIComponent(escape(b.stringify(a)))
            } catch (c) {
                throw Error("Malformed UTF-8 data");
            }
        },
        parse: function (a) {
            return b.parse(unescape(encodeURIComponent(a)))
        }
    }
        , q = l.BufferedBlockAlgorithm = t.extend({
        reset: function () {
            this._data = new r.init;
            this._nDataBytes = 0
        },
        _append: function (a) {
            "string" == typeof a && (a = x.parse(a));
            this._data.concat(a);
            this._nDataBytes += a.sigBytes
        },
        _process: function (a) {
            var c = this._data
                , e = c.words
                , j = c.sigBytes
                , k = this.blockSize
                , b = j / (4 * k)
                , b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0);
            a = b * k;
            j = u.min(4 * a, j);
            if (a) {
                for (var q = 0; q < a; q += k)
                    this._doProcessBlock(e, q);
                q = e.splice(0, a);
                c.sigBytes -= j
            }
            return new r.init(q, j)
        },
        clone: function () {
            var a = t.clone.call(this);
            a._data = this._data.clone();
            return a
        },
        _minBufferSize: 0
    });
    l.Hasher = q.extend({
        cfg: t.extend(),
        init: function (a) {
            this.cfg = this.cfg.extend(a);
            this.reset()
        },
        reset: function () {
            q.reset.call(this);
            this._doReset()
        },
        update: function (a) {
            this._append(a);
            this._process();
            return this
        },
        finalize: function (a) {
            a && this._append(a);
            return this._doFinalize()
        },
        blockSize: 16,
        _createHelper: function (a) {
            return function (b, e) {
                return (new a.init(e)).finalize(b)
            }
        },
        _createHmacHelper: function (a) {
            return function (b, e) {
                return (new n.HMAC.init(a, e)).finalize(b)
            }
        }
    });
    var n = d.algo = {};
    return d
}(Math);
(function () {
        var u = CryptoJS
            , p = u.lib.WordArray;
        u.enc.Base64 = {
            stringify: function (d) {
                var l = d.words
                    , p = d.sigBytes
                    , t = this._map;
                d.clamp();
                d = [];
                for (var r = 0; r < p; r += 3)
                    for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++)
                        d.push(t.charAt(w >>> 6 * (3 - v) & 63));
                if (l = t.charAt(64))
                    for (; d.length % 4;)
                        d.push(l);
                return d.join("")
            },
            parse: function (d) {
                var l = d.length
                    , s = this._map
                    , t = s.charAt(64);
                t && (t = d.indexOf(t),
                -1 != t && (l = t));
                for (var t = [], r = 0, w = 0; w < l; w++)
                    if (w % 4) {
                        var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4)
                            , b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
                        t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
                        r++
                    }
                return p.create(t, r)
            },
            _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
        }
    }
)();
(function (u) {
        function p(b, n, a, c, e, j, k) {
            b = b + (n & a | ~n & c) + e + k;
            return (b << j | b >>> 32 - j) + n
        }

        function d(b, n, a, c, e, j, k) {
            b = b + (n & c | a & ~c) + e + k;
            return (b << j | b >>> 32 - j) + n
        }

        function l(b, n, a, c, e, j, k) {
            b = b + (n ^ a ^ c) + e + k;
            return (b << j | b >>> 32 - j) + n
        }

        function s(b, n, a, c, e, j, k) {
            b = b + (a ^ (n | ~c)) + e + k;
            return (b << j | b >>> 32 - j) + n
        }

        for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)
            b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
        r = r.MD5 = v.extend({
            _doReset: function () {
                this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878])
            },
            _doProcessBlock: function (q, n) {
                for (var a = 0; 16 > a; a++) {
                    var c = n + a
                        , e = q[c];
                    q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
                }
                var a = this._hash.words
                    , c = q[n + 0]
                    , e = q[n + 1]
                    , j = q[n + 2]
                    , k = q[n + 3]
                    , z = q[n + 4]
                    , r = q[n + 5]
                    , t = q[n + 6]
                    , w = q[n + 7]
                    , v = q[n + 8]
                    , A = q[n + 9]
                    , B = q[n + 10]
                    , C = q[n + 11]
                    , u = q[n + 12]
                    , D = q[n + 13]
                    , E = q[n + 14]
                    , x = q[n + 15]
                    , f = a[0]
                    , m = a[1]
                    , g = a[2]
                    , h = a[3]
                    , f = p(f, m, g, h, c, 7, b[0])
                    , h = p(h, f, m, g, e, 12, b[1])
                    , g = p(g, h, f, m, j, 17, b[2])
                    , m = p(m, g, h, f, k, 22, b[3])
                    , f = p(f, m, g, h, z, 7, b[4])
                    , h = p(h, f, m, g, r, 12, b[5])
                    , g = p(g, h, f, m, t, 17, b[6])
                    , m = p(m, g, h, f, w, 22, b[7])
                    , f = p(f, m, g, h, v, 7, b[8])
                    , h = p(h, f, m, g, A, 12, b[9])
                    , g = p(g, h, f, m, B, 17, b[10])
                    , m = p(m, g, h, f, C, 22, b[11])
                    , f = p(f, m, g, h, u, 7, b[12])
                    , h = p(h, f, m, g, D, 12, b[13])
                    , g = p(g, h, f, m, E, 17, b[14])
                    , m = p(m, g, h, f, x, 22, b[15])
                    , f = d(f, m, g, h, e, 5, b[16])
                    , h = d(h, f, m, g, t, 9, b[17])
                    , g = d(g, h, f, m, C, 14, b[18])
                    , m = d(m, g, h, f, c, 20, b[19])
                    , f = d(f, m, g, h, r, 5, b[20])
                    , h = d(h, f, m, g, B, 9, b[21])
                    , g = d(g, h, f, m, x, 14, b[22])
                    , m = d(m, g, h, f, z, 20, b[23])
                    , f = d(f, m, g, h, A, 5, b[24])
                    , h = d(h, f, m, g, E, 9, b[25])
                    , g = d(g, h, f, m, k, 14, b[26])
                    , m = d(m, g, h, f, v, 20, b[27])
                    , f = d(f, m, g, h, D, 5, b[28])
                    , h = d(h, f, m, g, j, 9, b[29])
                    , g = d(g, h, f, m, w, 14, b[30])
                    , m = d(m, g, h, f, u, 20, b[31])
                    , f = l(f, m, g, h, r, 4, b[32])
                    , h = l(h, f, m, g, v, 11, b[33])
                    , g = l(g, h, f, m, C, 16, b[34])
                    , m = l(m, g, h, f, E, 23, b[35])
                    , f = l(f, m, g, h, e, 4, b[36])
                    , h = l(h, f, m, g, z, 11, b[37])
                    , g = l(g, h, f, m, w, 16, b[38])
                    , m = l(m, g, h, f, B, 23, b[39])
                    , f = l(f, m, g, h, D, 4, b[40])
                    , h = l(h, f, m, g, c, 11, b[41])
                    , g = l(g, h, f, m, k, 16, b[42])
                    , m = l(m, g, h, f, t, 23, b[43])
                    , f = l(f, m, g, h, A, 4, b[44])
                    , h = l(h, f, m, g, u, 11, b[45])
                    , g = l(g, h, f, m, x, 16, b[46])
                    , m = l(m, g, h, f, j, 23, b[47])
                    , f = s(f, m, g, h, c, 6, b[48])
                    , h = s(h, f, m, g, w, 10, b[49])
                    , g = s(g, h, f, m, E, 15, b[50])
                    , m = s(m, g, h, f, r, 21, b[51])
                    , f = s(f, m, g, h, u, 6, b[52])
                    , h = s(h, f, m, g, k, 10, b[53])
                    , g = s(g, h, f, m, B, 15, b[54])
                    , m = s(m, g, h, f, e, 21, b[55])
                    , f = s(f, m, g, h, v, 6, b[56])
                    , h = s(h, f, m, g, x, 10, b[57])
                    , g = s(g, h, f, m, t, 15, b[58])
                    , m = s(m, g, h, f, D, 21, b[59])
                    , f = s(f, m, g, h, z, 6, b[60])
                    , h = s(h, f, m, g, C, 10, b[61])
                    , g = s(g, h, f, m, j, 15, b[62])
                    , m = s(m, g, h, f, A, 21, b[63]);
                a[0] = a[0] + f | 0;
                a[1] = a[1] + m | 0;
                a[2] = a[2] + g | 0;
                a[3] = a[3] + h | 0
            },
            _doFinalize: function () {
                var b = this._data
                    , n = b.words
                    , a = 8 * this._nDataBytes
                    , c = 8 * b.sigBytes;
                n[c >>> 5] |= 128 << 24 - c % 32;
                var e = u.floor(a / 4294967296);
                n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
                n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
                b.sigBytes = 4 * (n.length + 1);
                this._process();
                b = this._hash;
                n = b.words;
                for (a = 0; 4 > a; a++)
                    c = n[a],
                        n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
                return b
            },
            clone: function () {
                var b = v.clone.call(this);
                b._hash = this._hash.clone();
                return b
            }
        });
        t.MD5 = v._createHelper(r);
        t.HmacMD5 = v._createHmacHelper(r)
    }
)(Math);
(function () {
        var u = CryptoJS
            , p = u.lib
            , d = p.Base
            , l = p.WordArray
            , p = u.algo
            , s = p.EvpKDF = d.extend({
            cfg: d.extend({
                keySize: 4,
                hasher: p.MD5,
                iterations: 1
            }),
            init: function (d) {
                this.cfg = this.cfg.extend(d)
            },
            compute: function (d, r) {
                for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) {
                    n && s.update(n);
                    var n = s.update(d).finalize(r);
                    s.reset();
                    for (var a = 1; a < p; a++)
                        n = s.finalize(n),
                            s.reset();
                    b.concat(n)
                }
                b.sigBytes = 4 * q;
                return b
            }
        });
        u.EvpKDF = function (d, l, p) {
            return s.create(p).compute(d, l)
        }
    }
)();
CryptoJS.lib.Cipher || function (u) {
    var p = CryptoJS
        , d = p.lib
        , l = d.Base
        , s = d.WordArray
        , t = d.BufferedBlockAlgorithm
        , r = p.enc.Base64
        , w = p.algo.EvpKDF
        , v = d.Cipher = t.extend({
        cfg: l.extend(),
        createEncryptor: function (e, a) {
            return this.create(this._ENC_XFORM_MODE, e, a)
        },
        createDecryptor: function (e, a) {
            return this.create(this._DEC_XFORM_MODE, e, a)
        },
        init: function (e, a, b) {
            this.cfg = this.cfg.extend(b);
            this._xformMode = e;
            this._key = a;
            this.reset()
        },
        reset: function () {
            t.reset.call(this);
            this._doReset()
        },
        process: function (e) {
            this._append(e);
            return this._process()
        },
        finalize: function (e) {
            e && this._append(e);
            return this._doFinalize()
        },
        keySize: 4,
        ivSize: 4,
        _ENC_XFORM_MODE: 1,
        _DEC_XFORM_MODE: 2,
        _createHelper: function (e) {
            return {
                encrypt: function (b, k, d) {
                    return ("string" == typeof k ? c : a).encrypt(e, b, k, d)
                },
                decrypt: function (b, k, d) {
                    return ("string" == typeof k ? c : a).decrypt(e, b, k, d)
                }
            }
        }
    });
    d.StreamCipher = v.extend({
        _doFinalize: function () {
            return this._process(!0)
        },
        blockSize: 1
    });
    var b = p.mode = {}
        , x = function (e, a, b) {
        var c = this._iv;
        c ? this._iv = u : c = this._prevBlock;
        for (var d = 0; d < b; d++)
            e[a + d] ^= c[d]
    }
        , q = (d.BlockCipherMode = l.extend({
        createEncryptor: function (e, a) {
            return this.Encryptor.create(e, a)
        },
        createDecryptor: function (e, a) {
            return this.Decryptor.create(e, a)
        },
        init: function (e, a) {
            this._cipher = e;
            this._iv = a
        }
    })).extend();
    q.Encryptor = q.extend({
        processBlock: function (e, a) {
            var b = this._cipher
                , c = b.blockSize;
            x.call(this, e, a, c);
            b.encryptBlock(e, a);
            this._prevBlock = e.slice(a, a + c)
        }
    });
    q.Decryptor = q.extend({
        processBlock: function (e, a) {
            var b = this._cipher
                , c = b.blockSize
                , d = e.slice(a, a + c);
            b.decryptBlock(e, a);
            x.call(this, e, a, c);
            this._prevBlock = d
        }
    });
    b = b.CBC = q;
    q = (p.pad = {}).Pkcs7 = {
        pad: function (a, b) {
            for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)
                l.push(d);
            c = s.create(l, c);
            a.concat(c)
        },
        unpad: function (a) {
            a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
        }
    };
    d.BlockCipher = v.extend({
        cfg: v.cfg.extend({
            mode: b,
            padding: q
        }),
        reset: function () {
            v.reset.call(this);
            var a = this.cfg
                , b = a.iv
                , a = a.mode;
            if (this._xformMode == this._ENC_XFORM_MODE)
                var c = a.createEncryptor;
            else
                c = a.createDecryptor,
                    this._minBufferSize = 1;
            this._mode = c.call(a, this, b && b.words)
        },
        _doProcessBlock: function (a, b) {
            this._mode.processBlock(a, b)
        },
        _doFinalize: function () {
            var a = this.cfg.padding;
            if (this._xformMode == this._ENC_XFORM_MODE) {
                a.pad(this._data, this.blockSize);
                var b = this._process(!0)
            } else
                b = this._process(!0),
                    a.unpad(b);
            return b
        },
        blockSize: 4
    });
    var n = d.CipherParams = l.extend({
        init: function (a) {
            this.mixIn(a)
        },
        toString: function (a) {
            return (a || this.formatter).stringify(this)
        }
    })
        , b = (p.format = {}).OpenSSL = {
        stringify: function (a) {
            var b = a.ciphertext;
            a = a.salt;
            return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)
        },
        parse: function (a) {
            a = r.parse(a);
            var b = a.words;
            if (1398893684 == b[0] && 1701076831 == b[1]) {
                var c = s.create(b.slice(2, 4));
                b.splice(0, 4);
                a.sigBytes -= 16
            }
            return n.create({
                ciphertext: a,
                salt: c
            })
        }
    }
        , a = d.SerializableCipher = l.extend({
        cfg: l.extend({
            format: b
        }),
        encrypt: function (a, b, c, d) {
            d = this.cfg.extend(d);
            var l = a.createEncryptor(c, d);
            b = l.finalize(b);
            l = l.cfg;
            return n.create({
                ciphertext: b,
                key: c,
                iv: l.iv,
                algorithm: a,
                mode: l.mode,
                padding: l.padding,
                blockSize: a.blockSize,
                formatter: d.format
            })
        },
        decrypt: function (a, b, c, d) {
            d = this.cfg.extend(d);
            b = this._parse(b, d.format);
            return a.createDecryptor(c, d).finalize(b.ciphertext)
        },
        _parse: function (a, b) {
            return "string" == typeof a ? b.parse(a, this) : a
        }
    })
        , p = (p.kdf = {}).OpenSSL = {
        execute: function (a, b, c, d) {
            d || (d = s.random(8));
            a = w.create({
                keySize: b + c
            }).compute(a, d);
            c = s.create(a.words.slice(b), 4 * c);
            a.sigBytes = 4 * b;
            return n.create({
                key: a,
                iv: c,
                salt: d
            })
        }
    }
        , c = d.PasswordBasedCipher = a.extend({
        cfg: a.cfg.extend({
            kdf: p
        }),
        encrypt: function (b, c, d, l) {
            l = this.cfg.extend(l);
            d = l.kdf.execute(d, b.keySize, b.ivSize);
            l.iv = d.iv;
            b = a.encrypt.call(this, b, c, d.key, l);
            b.mixIn(d);
            return b
        },
        decrypt: function (b, c, d, l) {
            l = this.cfg.extend(l);
            c = this._parse(c, l.format);
            d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);
            l.iv = d.iv;
            return a.decrypt.call(this, b, c, d.key, l)
        }
    })
}();
(function () {
        for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)
            a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
        for (var e = 0, j = 0, c = 0; 256 > c; c++) {
            var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4
                , k = k >>> 8 ^ k & 255 ^ 99;
            l[e] = k;
            s[k] = e;
            var z = a[e]
                , F = a[z]
                , G = a[F]
                , y = 257 * a[k] ^ 16843008 * k;
            t[e] = y << 24 | y >>> 8;
            r[e] = y << 16 | y >>> 16;
            w[e] = y << 8 | y >>> 24;
            v[e] = y;
            y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
            b[k] = y << 24 | y >>> 8;
            x[k] = y << 16 | y >>> 16;
            q[k] = y << 8 | y >>> 24;
            n[k] = y;
            e ? (e = z ^ a[a[a[G ^ z]]],
                j ^= a[a[j]]) : e = j = 1
        }
        var H = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
            , d = d.AES = p.extend({
            _doReset: function () {
                for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)
                    if (j < d)
                        e[j] = c[j];
                    else {
                        var k = e[j - 1];
                        j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24,
                            k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255],
                            k ^= H[j / d | 0] << 24);
                        e[j] = e[j - d] ^ k
                    }
                c = this._invKeySchedule = [];
                for (d = 0; d < a; d++)
                    j = a - d,
                        k = d % 4 ? e[j] : e[j - 4],
                        c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>> 8 & 255]] ^ n[l[k & 255]]
            },
            encryptBlock: function (a, b) {
                this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l)
            },
            decryptBlock: function (a, c) {
                var d = a[c + 1];
                a[c + 1] = a[c + 3];
                a[c + 3] = d;
                this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s);
                d = a[c + 1];
                a[c + 1] = a[c + 3];
                a[c + 3] = d
            },
            _doCryptBlock: function (a, b, c, d, e, j, l, f) {
                for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)
                     var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++]
                         , s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++]
                         , t = d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++]
                         , n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++]
                         , g = q
                         , h = s
                         , k = t;
                q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];
                s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];
                t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];
                n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];
                a[b] = q;
                a[b + 1] = s;
                a[b + 2] = t;
                a[b + 3] = n
            },
            keySize: 8
        });
        u.AES = p._createHelper(d)
    }
)();

//RawDeflate.inflate
(function (ctx) {
    var zip_WSIZE = 32768;		// Sliding Window size
    var zip_STORED_BLOCK = 0;
    var zip_STATIC_TREES = 1;
    var zip_DYN_TREES = 2;
    var zip_lbits = 9; 		// bits in base literal/length lookup table
    var zip_dbits = 6; 		// bits in base distance lookup table
    var zip_INBUFSIZ = 32768;	// Input buffer size
    var zip_INBUF_EXTRA = 64;	// Extra buffer

    var zip_slide;
    var zip_wp;			// current position in slide
    var zip_fixed_tl = null;	// inflate static
    var zip_fixed_td;		// inflate static
    var zip_fixed_bl, zip_fixed_bd;	// inflate static
    var zip_bit_buf;		// bit buffer
    var zip_bit_len;		// bits in bit buffer
    var zip_method;
    var zip_eof;
    var zip_copy_leng;
    var zip_copy_dist;
    var zip_tl, zip_td;	// literal/length and distance decoder tables
    var zip_bl, zip_bd;	// number of bits decoded by tl and td

    var zip_inflate_data;
    var zip_inflate_pos;
    var zip_MASK_BITS = new Array(
        0x0000,
        0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
        0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff);
// Tables for deflate from PKZIP's appnote.txt.
    var zip_cplens = new Array( // Copy lengths for literal codes 257..285
        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0);
    var zip_cplext = new Array( // Extra bits for literal codes 257..285
        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99); // 99==invalid
    var zip_cpdist = new Array( // Copy offsets for distance codes 0..29
        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
        8193, 12289, 16385, 24577);
    var zip_cpdext = new Array( // Extra bits for distance codes
        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
        12, 12, 13, 13);
    var zip_border = new Array(  // Order of the bit length code lengths
        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);

    var zip_HuftList = function () {
        this.next = null;
        this.list = null;
    }

    var zip_HuftNode = function () {
        this.e = 0; // number of extra bits or operation
        this.b = 0; // number of bits in this code or subcode

        // union
        this.n = 0; // literal, length base, or distance base
        this.t = null; // (zip_HuftNode) pointer to next level of table
    }

    var zip_HuftBuild = function (b,	// code lengths in bits (all assumed <= BMAX)
                                  n,	// number of codes (assumed <= N_MAX)
                                  s,	// number of simple-valued codes (0..s-1)
                                  d,	// list of base values for non-simple codes
                                  e,	// list of extra bits for non-simple codes
                                  mm	// maximum lookup bits
    ) {
        this.BMAX = 16;   // maximum bit length of any code
        this.N_MAX = 288; // maximum number of codes in any set
        this.status = 0;	// 0: success, 1: incomplete table, 2: bad input
        this.root = null;	// (zip_HuftList) starting table
        this.m = 0;		// maximum lookup bits, returns actual

        {
            var a;			// counter for codes of length k
            var c = new Array(this.BMAX + 1);	// bit length count table
            var el;			// length of EOB code (value 256)
            var f;			// i repeats in table every f entries
            var g;			// maximum code length
            var h;			// table level
            var i;			// counter, current code
            var j;			// counter
            var k;			// number of bits in current code
            var lx = new Array(this.BMAX + 1);	// stack of bits per table
            var p;			// pointer into c[], b[], or v[]
            var pidx;		// index of p
            var q;			// (zip_HuftNode) points to current table
            var r = new zip_HuftNode(); // table entry for structure assignment
            var u = new Array(this.BMAX); // zip_HuftNode[BMAX][]  table stack
            var v = new Array(this.N_MAX); // values in order of bit length
            var w;
            var x = new Array(this.BMAX + 1);// bit offsets, then code stack
            var xp;			// pointer into x or c
            var y;			// number of dummy codes added
            var z;			// number of entries in current table
            var o;
            var tail;		// (zip_HuftList)

            tail = this.root = null;
            for (i = 0; i < c.length; i++)
                c[i] = 0;
            for (i = 0; i < lx.length; i++)
                lx[i] = 0;
            for (i = 0; i < u.length; i++)
                u[i] = null;
            for (i = 0; i < v.length; i++)
                v[i] = 0;
            for (i = 0; i < x.length; i++)
                x[i] = 0;

            // Generate counts for each bit length
            el = n > 256 ? b[256] : this.BMAX; // set length of EOB code, if any
            p = b;
            pidx = 0;
            i = n;
            do {
                c[p[pidx]]++;	// assume all entries <= BMAX
                pidx++;
            } while (--i > 0);
            if (c[0] == n) {	// null input--all zero length codes
                this.root = null;
                this.m = 0;
                this.status = 0;
                return;
            }

            // Find minimum and maximum length, bound *m by those
            for (j = 1; j <= this.BMAX; j++)
                if (c[j] != 0)
                    break;
            k = j;			// minimum code length
            if (mm < j)
                mm = j;
            for (i = this.BMAX; i != 0; i--)
                if (c[i] != 0)
                    break;
            g = i;			// maximum code length
            if (mm > i)
                mm = i;

            // Adjust last length count to fill out codes, if needed
            for (y = 1 << j; j < i; j++, y <<= 1)
                if ((y -= c[j]) < 0) {
                    this.status = 2;	// bad input: more codes than bits
                    this.m = mm;
                    return;
                }
            if ((y -= c[i]) < 0) {
                this.status = 2;
                this.m = mm;
                return;
            }
            c[i] += y;

            // Generate starting offsets into the value table for each length
            x[1] = j = 0;
            p = c;
            pidx = 1;
            xp = 2;
            while (--i > 0)		// note that i == g from above
                x[xp++] = (j += p[pidx++]);

            // Make a table of values in order of bit lengths
            p = b;
            pidx = 0;
            i = 0;
            do {
                if ((j = p[pidx++]) != 0)
                    v[x[j]++] = i;
            } while (++i < n);
            n = x[g];			// set n to length of v

            // Generate the Huffman codes and for each, make the table entries
            x[0] = i = 0;		// first Huffman code is zero
            p = v;
            pidx = 0;		// grab values in bit order
            h = -1;			// no tables yet--level -1
            w = lx[0] = 0;		// no bits decoded yet
            q = null;			// ditto
            z = 0;			// ditto

            // go through the bit lengths (k already is bits in shortest code)
            for (; k <= g; k++) {
                a = c[k];
                while (a-- > 0) {
                    // here i is the Huffman code of length k bits for value p[pidx]
                    // make tables up to required level
                    while (k > w + lx[1 + h]) {
                        w += lx[1 + h]; // add bits already decoded
                        h++;

                        // compute minimum size table less than or equal to *m bits
                        z = (z = g - w) > mm ? mm : z; // upper limit
                        if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table
                            // too few codes for k-w bit table
                            f -= a + 1;	// deduct codes from patterns left
                            xp = k;
                            while (++j < z) { // try smaller tables up to z bits
                                if ((f <<= 1) <= c[++xp])
                                    break;	// enough codes to use up j bits
                                f -= c[xp];	// else deduct codes from patterns
                            }
                        }
                        if (w + j > el && w < el)
                            j = el - w;	// make EOB code end at table
                        z = 1 << j;	// table entries for j-bit table
                        lx[1 + h] = j; // set table size in stack

                        // allocate and link in new table
                        q = new Array(z);
                        for (o = 0; o < z; o++) {
                            q[o] = new zip_HuftNode();
                        }

                        if (tail == null)
                            tail = this.root = new zip_HuftList();
                        else
                            tail = tail.next = new zip_HuftList();
                        tail.next = null;
                        tail.list = q;
                        u[h] = q;	// table starts after link

                        /* connect to last table, if there is one */
                        if (h > 0) {
                            x[h] = i;		// save pattern for backing up
                            r.b = lx[h];	// bits to dump before this table
                            r.e = 16 + j;	// bits in this table
                            r.t = q;		// pointer to this table
                            j = (i & ((1 << w) - 1)) >> (w - lx[h]);
                            u[h - 1][j].e = r.e;
                            u[h - 1][j].b = r.b;
                            u[h - 1][j].n = r.n;
                            u[h - 1][j].t = r.t;
                        }
                    }

                    // set up table entry in r
                    r.b = k - w;
                    if (pidx >= n)
                        r.e = 99;		// out of values--invalid code
                    else if (p[pidx] < s) {
                        r.e = (p[pidx] < 256 ? 16 : 15); // 256 is end-of-block code
                        r.n = p[pidx++];	// simple code is just the value
                    } else {
                        r.e = e[p[pidx] - s];	// non-simple--look up in lists
                        r.n = d[p[pidx++] - s];
                    }

                    // fill code-like entries with r //
                    f = 1 << (k - w);
                    for (j = i >> w; j < z; j += f) {
                        q[j].e = r.e;
                        q[j].b = r.b;
                        q[j].n = r.n;
                        q[j].t = r.t;
                    }

                    // backwards increment the k-bit code i
                    for (j = 1 << (k - 1); (i & j) != 0; j >>= 1)
                        i ^= j;
                    i ^= j;

                    // backup over finished tables
                    while ((i & ((1 << w) - 1)) != x[h]) {
                        w -= lx[h];		// don't need to update q
                        h--;
                    }
                }
            }

            /* return actual size of base table */
            this.m = lx[1];

            /* Return true (1) if we were given an incomplete table */
            this.status = ((y != 0 && g != 1) ? 1 : 0);
        }
        /* end of constructor */
    }


    /* routines (inflate) */

    var zip_GET_BYTE = function () {
        if (zip_inflate_data.length == zip_inflate_pos)
            return -1;
        var charcode = zip_inflate_data.charCodeAt(zip_inflate_pos++);
        return charcode & 0xff;
    }

    var zip_NEEDBITS = function (n) {
        while (zip_bit_len < n) {
            zip_bit_buf |= zip_GET_BYTE() << zip_bit_len;
            zip_bit_len += 8;
        }
    }

    var zip_GETBITS = function (n) {
        return zip_bit_buf & zip_MASK_BITS[n];
    }

    var zip_DUMPBITS = function (n) {
        zip_bit_buf >>= n;
        zip_bit_len -= n;
    }

    var zip_inflate_codes = function (buff, off, size) {
        /* inflate (decompress) the codes in a deflated (compressed) block.
           Return an error code or zero if it all goes ok. */
        var e;		// table entry flag/number of extra bits
        var t;		// (zip_HuftNode) pointer to table entry
        var n;

        if (size == 0)
            return 0;

        // inflate the coded data
        n = 0;
        for (; ;) {			// do until end of block
            zip_NEEDBITS(zip_bl);
            t = zip_tl.list[zip_GETBITS(zip_bl)];
            e = t.e;
            while (e > 16) {
                if (e == 99)
                    return -1;
                zip_DUMPBITS(t.b);
                e -= 16;
                zip_NEEDBITS(e);
                t = t.t[zip_GETBITS(e)];
                e = t.e;
            }
            zip_DUMPBITS(t.b);

            if (e == 16) {		// then it's a literal
                zip_wp &= zip_WSIZE - 1;
                buff[off + n++] = zip_slide[zip_wp++] = t.n;
                if (n == size)
                    return size;
                continue;
            }

            // exit if end of block
            if (e == 15)
                break;

            // it's an EOB or a length

            // get length of block to copy
            zip_NEEDBITS(e);
            zip_copy_leng = t.n + zip_GETBITS(e);
            zip_DUMPBITS(e);

            // decode distance of block to copy
            zip_NEEDBITS(zip_bd);
            t = zip_td.list[zip_GETBITS(zip_bd)];
            e = t.e;

            while (e > 16) {
                if (e == 99)
                    return -1;
                zip_DUMPBITS(t.b);
                e -= 16;
                zip_NEEDBITS(e);
                t = t.t[zip_GETBITS(e)];
                e = t.e;
            }
            zip_DUMPBITS(t.b);
            zip_NEEDBITS(e);
            zip_copy_dist = zip_wp - t.n - zip_GETBITS(e);
            zip_DUMPBITS(e);

            // do the copy
            while (zip_copy_leng > 0 && n < size) {
                zip_copy_leng--;
                zip_copy_dist &= zip_WSIZE - 1;
                zip_wp &= zip_WSIZE - 1;
                buff[off + n++] = zip_slide[zip_wp++]
                    = zip_slide[zip_copy_dist++];
            }

            if (n == size)
                return size;
        }

        zip_method = -1; // done
        return n;
    }

    var zip_inflate_stored = function (buff, off, size) {
        /* "decompress" an inflated type 0 (stored) block. */
        var n;

        // go to byte boundary
        n = zip_bit_len & 7;
        zip_DUMPBITS(n);

        // get the length and its complement
        zip_NEEDBITS(16);
        n = zip_GETBITS(16);
        zip_DUMPBITS(16);
        zip_NEEDBITS(16);
        if (n != ((~zip_bit_buf) & 0xffff))
            return -1;			// error in compressed data
        zip_DUMPBITS(16);

        // read and output the compressed data
        zip_copy_leng = n;

        n = 0;
        while (zip_copy_leng > 0 && n < size) {
            zip_copy_leng--;
            zip_wp &= zip_WSIZE - 1;
            zip_NEEDBITS(8);
            buff[off + n++] = zip_slide[zip_wp++] =
                zip_GETBITS(8);
            zip_DUMPBITS(8);
        }

        if (zip_copy_leng == 0)
            zip_method = -1; // done
        return n;
    }

    var zip_inflate_fixed = function (buff, off, size) {
        /* decompress an inflated type 1 (fixed Huffman codes) block.  We should
           either replace this with a custom decoder, or at least precompute the
           Huffman tables. */

        // if first time, set up tables for fixed blocks
        if (zip_fixed_tl == null) {
            var i;			// temporary variable
            var l = new Array(288);	// length list for huft_build
            var h;	// zip_HuftBuild

            // literal table
            for (i = 0; i < 144; i++)
                l[i] = 8;
            for (; i < 256; i++)
                l[i] = 9;
            for (; i < 280; i++)
                l[i] = 7;
            for (; i < 288; i++)	// make a complete, but wrong code set
                l[i] = 8;
            zip_fixed_bl = 7;

            h = new zip_HuftBuild(l, 288, 257, zip_cplens, zip_cplext,
                zip_fixed_bl);
            if (h.status != 0) {
                alert("HufBuild error: " + h.status);
                return -1;
            }
            zip_fixed_tl = h.root;
            zip_fixed_bl = h.m;

            // distance table
            for (i = 0; i < 30; i++)	// make an incomplete code set
                l[i] = 5;
            zip_fixed_bd = 5;

            h = new zip_HuftBuild(l, 30, 0, zip_cpdist, zip_cpdext, zip_fixed_bd);
            if (h.status > 1) {
                zip_fixed_tl = null;
                alert("HufBuild error: " + h.status);
                return -1;
            }
            zip_fixed_td = h.root;
            zip_fixed_bd = h.m;
        }

        zip_tl = zip_fixed_tl;
        zip_td = zip_fixed_td;
        zip_bl = zip_fixed_bl;
        zip_bd = zip_fixed_bd;
        return zip_inflate_codes(buff, off, size);
    }

    var zip_inflate_dynamic = function (buff, off, size) {
        // decompress an inflated type 2 (dynamic Huffman codes) block.
        var i;		// temporary variables
        var j;
        var l;		// last length
        var n;		// number of lengths to get
        var t;		// (zip_HuftNode) literal/length code table
        var nb;		// number of bit length codes
        var nl;		// number of literal/length codes
        var nd;		// number of distance codes
        var ll = new Array(286 + 30); // literal/length and distance code lengths
        var h;		// (zip_HuftBuild)

        for (i = 0; i < ll.length; i++)
            ll[i] = 0;

        // read in table lengths
        zip_NEEDBITS(5);
        nl = 257 + zip_GETBITS(5);	// number of literal/length codes
        zip_DUMPBITS(5);
        zip_NEEDBITS(5);
        nd = 1 + zip_GETBITS(5);	// number of distance codes
        zip_DUMPBITS(5);
        zip_NEEDBITS(4);
        nb = 4 + zip_GETBITS(4);	// number of bit length codes
        zip_DUMPBITS(4);
        if (nl > 286 || nd > 30)
            return -1;		// bad lengths

        // read in bit-length-code lengths
        for (j = 0; j < nb; j++) {
            zip_NEEDBITS(3);
            ll[zip_border[j]] = zip_GETBITS(3);
            zip_DUMPBITS(3);
        }
        for (; j < 19; j++)
            ll[zip_border[j]] = 0;

        // build decoding table for trees--single level, 7 bit lookup
        zip_bl = 7;
        h = new zip_HuftBuild(ll, 19, 19, null, null, zip_bl);
        if (h.status != 0)
            return -1;	// incomplete code set

        zip_tl = h.root;
        zip_bl = h.m;

        // read in literal and distance code lengths
        n = nl + nd;
        i = l = 0;
        while (i < n) {
            zip_NEEDBITS(zip_bl);
            t = zip_tl.list[zip_GETBITS(zip_bl)];
            j = t.b;
            zip_DUMPBITS(j);
            j = t.n;
            if (j < 16)		// length of code in bits (0..15)
                ll[i++] = l = j;	// save last length in l
            else if (j == 16) {	// repeat last length 3 to 6 times
                zip_NEEDBITS(2);
                j = 3 + zip_GETBITS(2);
                zip_DUMPBITS(2);
                if (i + j > n)
                    return -1;
                while (j-- > 0)
                    ll[i++] = l;
            } else if (j == 17) {	// 3 to 10 zero length codes
                zip_NEEDBITS(3);
                j = 3 + zip_GETBITS(3);
                zip_DUMPBITS(3);
                if (i + j > n)
                    return -1;
                while (j-- > 0)
                    ll[i++] = 0;
                l = 0;
            } else {		// j == 18: 11 to 138 zero length codes
                zip_NEEDBITS(7);
                j = 11 + zip_GETBITS(7);
                zip_DUMPBITS(7);
                if (i + j > n)
                    return -1;
                while (j-- > 0)
                    ll[i++] = 0;
                l = 0;
            }
        }

        // build the decoding tables for literal/length and distance codes
        zip_bl = zip_lbits;
        h = new zip_HuftBuild(ll, nl, 257, zip_cplens, zip_cplext, zip_bl);
        if (zip_bl == 0)	// no literals or lengths
            h.status = 1;
        if (h.status != 0) {
            if (h.status == 1)
                ;// **incomplete literal tree**
            return -1;		// incomplete code set
        }
        zip_tl = h.root;
        zip_bl = h.m;

        for (i = 0; i < nd; i++)
            ll[i] = ll[i + nl];
        zip_bd = zip_dbits;
        h = new zip_HuftBuild(ll, nd, 0, zip_cpdist, zip_cpdext, zip_bd);
        zip_td = h.root;
        zip_bd = h.m;

        if (zip_bd == 0 && nl > 257) {   // lengths but no distances
            // **incomplete distance tree**
            return -1;
        }

        if (h.status == 1) {
            ;// **incomplete distance tree**
        }
        if (h.status != 0)
            return -1;

        // decompress until an end-of-block code
        return zip_inflate_codes(buff, off, size);
    }

    var zip_inflate_start = function () {
        var i;

        if (zip_slide == null)
            zip_slide = new Array(2 * zip_WSIZE);
        zip_wp = 0;
        zip_bit_buf = 0;
        zip_bit_len = 0;
        zip_method = -1;
        zip_eof = false;
        zip_copy_leng = zip_copy_dist = 0;
        zip_tl = null;
    }

    var zip_inflate_internal = function (buff, off, size) {
        // decompress an inflated entry
        var n, i;

        n = 0;
        while (n < size) {
            if (zip_eof && zip_method == -1)
                return n;

            if (zip_copy_leng > 0) {
                if (zip_method != zip_STORED_BLOCK) {
                    // STATIC_TREES or DYN_TREES
                    while (zip_copy_leng > 0 && n < size) {
                        zip_copy_leng--;
                        zip_copy_dist &= zip_WSIZE - 1;
                        zip_wp &= zip_WSIZE - 1;
                        buff[off + n++] = zip_slide[zip_wp++] =
                            zip_slide[zip_copy_dist++];
                    }
                } else {
                    while (zip_copy_leng > 0 && n < size) {
                        zip_copy_leng--;
                        zip_wp &= zip_WSIZE - 1;
                        zip_NEEDBITS(8);
                        buff[off + n++] = zip_slide[zip_wp++] = zip_GETBITS(8);
                        zip_DUMPBITS(8);
                    }
                    if (zip_copy_leng == 0)
                        zip_method = -1; // done
                }
                if (n == size)
                    return n;
            }

            if (zip_method == -1) {
                if (zip_eof)
                    break;

                // read in last block bit
                zip_NEEDBITS(1);
                if (zip_GETBITS(1) != 0)
                    zip_eof = true;
                zip_DUMPBITS(1);

                // read in block type
                zip_NEEDBITS(2);
                zip_method = zip_GETBITS(2);
                zip_DUMPBITS(2);
                zip_tl = null;
                zip_copy_leng = 0;
            }

            switch (zip_method) {
                case 0: // zip_STORED_BLOCK
                    i = zip_inflate_stored(buff, off + n, size - n);
                    break;

                case 1: // zip_STATIC_TREES
                    if (zip_tl != null)
                        i = zip_inflate_codes(buff, off + n, size - n);
                    else
                        i = zip_inflate_fixed(buff, off + n, size - n);
                    break;

                case 2: // zip_DYN_TREES
                    if (zip_tl != null)
                        i = zip_inflate_codes(buff, off + n, size - n);
                    else
                        i = zip_inflate_dynamic(buff, off + n, size - n);
                    break;

                default: // error
                    i = -1;
                    break;
            }

            if (i == -1) {
                if (zip_eof)
                    return 0;
                return -1;
            }
            n += i;
        }
        return n;
    }

    var zip_inflate = function (str) {
        var i, j;

        zip_inflate_start();
        zip_inflate_data = str;
        zip_inflate_pos = 0;

        var buff = new Array(1024);
        var aout = [];
        while ((i = zip_inflate_internal(buff, 0, buff.length)) > 0) {
            var cbuf = new Array(i);
            for (j = 0; j < i; j++) {
                cbuf[j] = String.fromCharCode(buff[j]);
            }
            aout[aout.length] = cbuf.join("");
        }
        zip_inflate_data = null; // G.C.
        return aout.join("");
    }

    if (!ctx.RawDeflate) ctx.RawDeflate = {};
    ctx.RawDeflate.inflate = zip_inflate;

})(this);

//base64
(function (global) {
    'use strict';
    if (global.Base64_Zip) {
        //alert("1");
        //return;

    }
    var version = "2.1.1";
    // if node.js, we use Buffer
    var buffer;
    if (typeof module !== 'undefined' && module.exports) {
        buffer = require('buffer').Buffer;
    }
    // constants
    var b64chars
        = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    var b64tab = function (bin) {
        var t = {};
        for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
        return t;
    }(b64chars);
    var fromCharCode = String.fromCharCode;
    // encoder stuff
    var cb_utob = function (c) {
        if (c.length < 2) {
            var cc = c.charCodeAt(0);
            return cc < 0x80 ? c
                : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
                    + fromCharCode(0x80 | (cc & 0x3f)))
                    : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
                        + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
                        + fromCharCode(0x80 | (cc & 0x3f)));
        } else {
            var cc = 0x10000
                + (c.charCodeAt(0) - 0xD800) * 0x400
                + (c.charCodeAt(1) - 0xDC00);
            return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
                + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
                + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
                + fromCharCode(0x80 | (cc & 0x3f)));
        }
    };
    var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
    var utob = function (u) {
        return u.replace(re_utob, cb_utob);
    };
    var cb_encode = function (ccc) {
        var padlen = [0, 2, 1][ccc.length % 3],
            ord = ccc.charCodeAt(0) << 16
                | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
                | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
            chars = [
                b64chars.charAt(ord >>> 18),
                b64chars.charAt((ord >>> 12) & 63),
                padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
                padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
            ];
        return chars.join('');
    };
    var Base64_btoa = function (b) {
        return b.replace(/[\s\S]{1,3}/g, cb_encode);
    };
    var _encode = buffer
        ? function (u) {
            return (new buffer(u)).toString('base64')
        }
        : function (u) {
            return Base64_btoa(utob(u))
        }
    ;
    var encode = function (u, urisafe) {
        return !urisafe
            ? _encode(u)
            : _encode(u).replace(/[+\/]/g, function (m0) {
                return m0 == '+' ? '-' : '_';
            }).replace(/=/g, '');
    };
    var encodeURI = function (u) {
        return encode(u, true)
    };
    // decoder stuff
    var re_btou = new RegExp([
        '[\xC0-\xDF][\x80-\xBF]',
        '[\xE0-\xEF][\x80-\xBF]{2}',
        '[\xF0-\xF7][\x80-\xBF]{3}'
    ].join('|'), 'g');
    var cb_btou = function (cccc) {
        switch (cccc.length) {
            case 4:
                var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
                    | ((0x3f & cccc.charCodeAt(1)) << 12)
                    | ((0x3f & cccc.charCodeAt(2)) << 6)
                    | (0x3f & cccc.charCodeAt(3)),
                    offset = cp - 0x10000;
                return (fromCharCode((offset >>> 10) + 0xD800)
                    + fromCharCode((offset & 0x3FF) + 0xDC00));
            case 3:
                return fromCharCode(
                    ((0x0f & cccc.charCodeAt(0)) << 12)
                    | ((0x3f & cccc.charCodeAt(1)) << 6)
                    | (0x3f & cccc.charCodeAt(2))
                );
            default:
                return fromCharCode(
                    ((0x1f & cccc.charCodeAt(0)) << 6)
                    | (0x3f & cccc.charCodeAt(1))
                );
        }
    };
    var btou = function (b) {
        return b.replace(re_btou, cb_btou);
    };
    var cb_decode = function (cccc) {
        var len = cccc.length,
            padlen = len % 4,
            n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
                | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
                | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
                | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
            chars = [
                fromCharCode(n >>> 16),
                fromCharCode((n >>> 8) & 0xff),
                fromCharCode(n & 0xff)
            ];
        chars.length -= [0, 0, 2, 1][padlen];
        return chars.join('');
    };
    var Base64_atob = function (a) {
        return a.replace(/[\s\S]{1,4}/g, cb_decode);
    };
    var _decode = buffer
        ? function (a) {
            return (new buffer(a, 'base64')).toString()
        }
        : function (a) {
            return btou(Base64_atob(a))
        };
    var decode = function (a) {
        return _decode(
            a.replace(/[-_]/g, function (m0) {
                return m0 == '-' ? '+' : '/'
            })
                .replace(/[^A-Za-z0-9\+\/]/g, '')
        );
    };
    // export Base64
    global.Base64_Zip = {
        VERSION: version,
        atob: Base64_atob,
        btoa: Base64_btoa,
        fromBase64: decode,
        toBase64: encode,
        utob: utob,
        encode: encode,
        encodeURI: encodeURI,
        btou: btou,
        decode: decode
    };
    // if ES5 is available, make Base64.extendString() available
    if (typeof Object.defineProperty === 'function') {
        var noEnum = function (v) {
            return {value: v, enumerable: false, writable: true, configurable: true};
        };
        global.Base64_Zip.extendString = function () {
            Object.defineProperty(
                String.prototype, 'fromBase64', noEnum(function () {
                    return decode(this)
                }));
            Object.defineProperty(
                String.prototype, 'toBase64', noEnum(function (urisafe) {
                    return encode(this, urisafe)
                }));
            Object.defineProperty(
                String.prototype, 'toBase64URI', noEnum(function () {
                    return encode(this, true)
                }));
        };
    }
    // that's it!
})(this);


//unzip
function unzip(b64Data) {
    var strData;
    if (!window.atob) {
        //	strData	= $.base64.atob(b64Data)
    } else {
        //	strData = atob(b64Data)
    }
    var charData;
    if (!Array.prototype.map) {
        //  charData =iemap( strData.split(''),function (x) { return x.charCodeAt(0); },null);
    } else {
        //	charData = strData.split('').map(function (x) { return x.charCodeAt(0); });
    }

    strData = Base64_Zip.btou(RawDeflate.inflate(Base64_Zip.fromBase64(b64Data)));
    // var binData = new Uint8Array(charData);
    //  var data = pako.inflate(binData);
    //  strData = String.fromCharCode.apply(null, new Uint16Array(data));
    return strData;
}


var com = {};
com.str = {
    _KEY: "12345678900000001234567890000000",//32位
    _IV: "abcd134556abcedf",//16位
    Encrypt: function (str) {
        var key = CryptoJS.enc.Utf8.parse(this._KEY);
        var iv = CryptoJS.enc.Utf8.parse(this._IV);

        var encrypted = '';

        var srcs = CryptoJS.enc.Utf8.parse(str);
        encrypted = CryptoJS.AES.encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });

        return encrypted.ciphertext.toString();
    },
    Decrypt: function (str) {
        var result = com.str.DecryptInner(str);
        try {
            var newstr = com.str.DecryptInner(result);
            if (newstr != "") {
                result = newstr;
            }
        } catch (ex) {
            var msg = ex;
        }
        return result;
    },
    DecryptInner: function (str) {
        var key = CryptoJS.enc.Utf8.parse(this._KEY);
        var iv = CryptoJS.enc.Utf8.parse(this._IV);
        var encryptedHexStr = CryptoJS.enc.Hex.parse(str);
        var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        var decrypt = CryptoJS.AES.decrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        var result = decryptedStr.toString();
        try {
            result = Decrypt(result);
        } catch (ex) {
            var msg = ex;
        }
        return result;
    }
}


function iemap(myarray, callback, thisArg) {

    var T, A, k;

    if (myarray == null) {
        throw new TypeError(" this is null or not defined");
    }
    var O = Object(myarray);

    var len = O.length >>> 0;
    if (typeof callback !== "function") {
        throw new TypeError(callback + " is not a function");
    }

    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
    if (thisArg) {
        T = thisArg;
    }

    A = new Array(len);
    k = 0;
    while (k < len) {
        var kValue, mappedValue;
        if (k in O) {
            kValue = O[k];
            mappedValue = callback.call(T, kValue, k, O);

            A[k] = mappedValue;
        }
        k++;
    }
    return A;
};


//************************用Runeval解密出AES中的_KEY(采用的是jsfuck加密)***************************
// function run(runevalcode){
//     runcode = unzip(runevalcode);
//      runcode= runcode.substr(0, runcode.length - 1); //要去掉最后的分号;
//    data = (/\n(.+)/.exec(eval(runcode.replace(/\s+/, "").slice(0, -2)))[1]);
// key = data.split(";")[0].split("=")[1];
// //去掉首尾的双引号
// key = key.substr(1); //删除第一个字符
// key = key.substr(0, key.length-1);
//     return key;
// }

//************************传入runeval加密代码和加密的文书ID************************
function getdocid(runevalcode, id) {
    runcode = unzip(runevalcode);
    runcode = runcode.substr(0, runcode.length - 1); //要去掉最后的分号;
    data = (/\n(.+)/.exec(eval(runcode.replace(/\s+/, "").slice(0, -2)))[1]); //data = setTimeout('com.str._KEY="9f559564142845a4a26adc084f66abda";',8000*Math.random());
    key = data.split(";")[0].split("=")[1];
    //去掉首尾的双引号
    key = key.substr(1); //删除第一个字符
    key = key.substr(0, key.length - 1); //Key = "9f559564142845a4a26adc084f66abda"
    if (key) {
        com.str._KEY = key; //赋予新的key用于AES解密
    }
    var unzipid = unzip(id);
    var realid = com.str.Decrypt(unzipid);
    return realid;
}


//调用实例:
//Navi("w61ZS27CgzAQPQtRFsK2wqh6AcKUVcKOw5DDpcOIQhVJExYJwpVDV1HDrl7CoCkBw6MAKcK2w6XClCfCoUHDmMOzecOzZsKMwrFYw67Dk8ONw7bClMOIw7QzX8K9w6UyPcOuXj9kdljDr8Ofw6U6w5tsWRjChCQgwrwWLyABYh4dw7IfEsKZw4lyw4VbCcK1woUAw69gFgLDlQNjKC44ATHCoAPCqcKDHcKQACbCkD8SBk9IDinCoQIQaATDjwXCj8KieMK1SMKyw6MpwpdfScKew4lFFFMsworCi8Kxw7B8KcOVw6rDq3zDocO0Y0nChRAiZEE1w4HCqcOtwrPCnBjCnsKpHsKXwrfDv8O0w4TDisOhQsKDwoJywoYEFTclYFs9wrgaw5wPwqbDoMOWw6rDtmJqesOTwo/Dl8KhKsOUXcKKOhDCtDnDtMO4wq5Bwo5jwrTDsTgIe8Kkw4Yjag/Dq8O+w41gwoLDlVRTwrUeRsO8wrUbw7bCt8O3wo3DgTXCl3gPD8OKworCsxXDkh7Dv3bCqXILw55BGsKaw4ZVw6rDrsKiwp1VKsK1w73DuBQLwqpvJ8KzXsOCwrpiw7ptw4zDuwZ1R8KRwps4NsKCGW1VMsO/wqJ3w4rDrXBEw7dwwoxXw6l5e3XCrsOBPMKKfQXDkMOdYEfCnMKWfGNJcy7DqsOkRcKtTwXDvWjDkyFNOMOZw7nDgRvCoAjDjnjDtA0=","DcKPwrkRADEIA1syB8OmCUFAw78lwp0zKcOQw6wKFQNlV8KHf8KlwpXDnHLDilzCmkvCvQHDl28awpFhOzTCpxPDkkPDuMKifMOaM2s5JcOOdFJgHcOkwpPDolBrw7TCkcK9wpsudRLDicKmZnnDqsOGwrcjw54rVyZewprCoMO+woDCtMOHPMOewrbDhWVvwpXDt8OcT8OHw7xITsORExxOwrchfU4tw5ULwqM7wqY+c0M9W8KFLsOARcOvAsKIw68rPw==")

================================================
FILE: Wenshu_Project/Wenshu/spiders/get_vl5x.js
================================================
//hex_sha1
var hexcase = 0;
/*   hex   output   format.   0   -   lowercase;   1   -   uppercase                 */
var b64pad = "";
/*   base-64   pad   character.   "="   for   strict   RFC   compliance       */
var chrsz = 8;
/*   bits   per   input   character.   8   -   ASCII;   16   -   Unicode             */

/*
 *   These   are   the   functions   you'll   usually   want   to   call
 *   They   take   string   arguments   and   return   either   hex   or   base-64   encoded   strings
 */
function hex_sha1(s) {
return binb2hex(core_sha1(str2binb(s), s.length * chrsz));
}

function b64_sha1(s) {
return binb2b64(core_sha1(str2binb(s), s.length * chrsz));
}

function str_sha1(s) {
return binb2str(core_sha1(str2binb(s), s.length * chrsz));
}

function hex_hmac_sha1(key, data) {
return binb2hex(core_hmac_sha1(key, data));
}

function b64_hmac_sha1(key, data) {
return binb2b64(core_hmac_sha1(key, data));
}

function str_hmac_sha1(key, data) {
return binb2str(core_hmac_sha1(key, data));
}

/*
 *   Perform   a   simple   self-test   to   see   if   the   VM   is   working
 */
function sha1_vm_test() {
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
 *   Calculate   the   SHA-1   of   an   array   of   big-endian   words,   and   a   bit   length
 */
function core_sha1(x, len) {
/*   append   padding   */
x[len >> 5] |= 0x80 << (24 - len % 32);
x[((len + 64 >> 9) << 4) + 15] = len;

var w = Array(80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;

for (var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for (var j = 0; j < 80; j++) {
        if (j < 16) w[j] = x[i + j];
        else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
        var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
        e = d;
        d = c;
        c = rol(b, 30);
        b = a;
        a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
}
return Array(a, b, c, d, e);

}

/*
 *   Perform   the   appropriate   triplet   combination   function   for   the   current
 *   iteration
 */
function sha1_ft(t, b, c, d) {
if (t < 20) return (b & c) | ((~b) & d);
if (t < 40) return b ^ c ^ d;
if (t < 60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
}

/*
 *   Determine   the   appropriate   additive   constant   for   the   current   iteration
 */
function sha1_kt(t) {
return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;
}

/*
 *   Calculate   the   HMAC-SHA1   of   a   key   and   some   data
 */
function core_hmac_sha1(key, data) {
var bkey = str2binb(key);
if (bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

var ipad = Array(16),
opad = Array(16);
for (var i = 0; i < 16; i++) {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
}

var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
return core_sha1(opad.concat(hash), 512 + 160);
}

/*
 *   Add   integers,   wrapping   at   2^32.   This   uses   16-bit   operations   internally
 *   to   work   around   bugs   in   some   JS   interpreters.
 */
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

/*
 *   Bitwise   rotate   a   32-bit   number   to   the   left.
 */
function rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}

/*
 *   Convert   an   8-bit   or   16-bit   string   to   an   array   of   big-endian   words
 *   In   8-bit   function,   characters   >255   have   their   hi-byte   silently   ignored.
 */
function str2binb(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i % 32);
return bin;
}

/*
 *   Convert   an   array   of   big-endian   words   to   a   string
 */
function binb2str(bin) {
var str = "";
var mask = (1 << chrsz) - 1;
for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (24 - i % 32)) & mask);
return str;
}

/*
 *   Convert   an   array   of   big-endian   words   to   a   hex   string.
 */
function binb2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF": "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
    str += hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);
}
return str;
}

/*
 *   Convert   an   array   of   big-endian   words   to   a   base-64   string
 */
function binb2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
    var triplet = (((binarray[i >> 2] >> 8 * (3 - i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * (3 - (i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * (3 - (i + 2) % 4)) & 0xFF);
    for (var j = 0; j < 4; j++) {
        if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
        else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);
    }
}
return str;
}
//hex_md5
var hexcase = 0;
/* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad = "";
/* base-64 pad character. "=" for strict RFC compliance   */
var chrsz = 8;
/* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s) {
return binl2hex(core_md5(str2binl(s), s.length * chrsz));
}
function b64_md5(s) {
return binl2b64(core_md5(str2binl(s), s.length * chrsz));
}
function str_md5(s) {
return binl2str(core_md5(str2binl(s), s.length * chrsz));
}
function hex_hmac_md5(key, data) {
return binl2hex(core_hmac_md5(key, data));
}
function b64_hmac_md5(key, data) {
return binl2b64(core_hmac_md5(key, data));
}
function str_hmac_md5(key, data) {
return binl2str(core_hmac_md5(key, data));
}

/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test() {
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;

var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;

for (var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
    d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
    b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
    d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
    c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
    d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
    d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);

    a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
    d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
    c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
    b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
    d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
    c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
    d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
    c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
    a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
    d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
    c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
    b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
    d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
    b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
    d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
    c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
    d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
    a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
    d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
    b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
    d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
    c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
    d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
    d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
    a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
    d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
    b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
}
return Array(a, b, c, d);

}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t) {
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data) {
var bkey = str2binl(key);
if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

var ipad = Array(16),
opad = Array(16);
for (var i = 0; i < 16; i++) {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
}

var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin) {
var str = "";
var mask = (1 << chrsz) - 1;
for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);
return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF": "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
    str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
}
return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
    var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
    for (var j = 0; j < 4; j++) {
        if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
        else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);
    }
}
return str;
}

//Base64
function Base64() {

// private property
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

// public method for encoding
this.encode = function(input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    input = _utf8_encode(input);
    while (i < input.length) {
        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);
        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;
        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }
        output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
    }
    return output;
}

// public method for decoding
this.decode = function(input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    while (i < input.length) {
        enc1 = _keyStr.indexOf(input.charAt(i++));
        enc2 = _keyStr.indexOf(input.charAt(i++));
        enc3 = _keyStr.indexOf(input.charAt(i++));
        enc4 = _keyStr.indexOf(input.charAt(i++));
        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;
        output = output + String.fromCharCode(chr1);
        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }
    }
    output = _utf8_decode(output);
    return output;
}

// private method for UTF-8 encoding
_utf8_encode = function(string) {
    string = string.replace(/\r\n/g, "\n");
    var utftext = "";
    for (var n = 0; n < string.length; n++) {
        var c = string.charCodeAt(n);
        if (c < 128) {
            utftext += String.fromCharCode(c);
        } else if ((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        } else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }

    }
    return utftext;
}

// private method for UTF-8 decoding
_utf8_decode = function(utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;
    while (i < utftext.length) {
        c = utftext.charCodeAt(i);
        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        } else if ((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i + 1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = utftext.charCodeAt(i + 1);
            c3 = utftext.charCodeAt(i + 2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    return string;
}
}

//eval_1
function strToLong(str) {
var long = 0;
for (var i = 0; i < str.length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
return long
}
function strToLongEn(str) {
var long = 0;
for (var i = 0; i < str.length; i++) {
    long += (str.charCodeAt(i) << (i % 16)) + i
}
return long
}
function strToLongEn2(str, step) {
var long = 0;
for (var i = 0; i < str.length; i++) {
    long += (str.charCodeAt(i) << (i % 16)) + (i * step)
}
return long
}
function strToLongEn3(str, step) {
var long = 0;
for (var i = 0; i < str.length; i++) {
    long += (str.charCodeAt(i) << (i % 16)) + (i + step - str.charCodeAt(i))
}
return long
}
function makeKey_0(str) {
var str = str.substr(5, 5 * 5) + str.substr((5 + 1) * (5 + 1), 3);
var a = str.substr(5) + str.substr( - 4);
var b = str.substr(4) + a.substr( - 6);
return hex_md5(str).substr(4, 24)
}
function makeKey_1(str) {
var str = str.substr(5, 5 * 5) + "5" + str.substr(1, 2) + "1" + str.substr((5 + 1) * (5 + 1), 3);
var a = str.substr(5) + str.substr(4);
var b = str.substr(12) + a.substr( - 6);
var c = str.substr(4) + a.substr(6);
return hex_md5(c).substr(4, 24)
}
function makeKey_2(str) {
var str = str.substr(5, 5 * 5) + "15" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var a = strToLong(str.substr(5)) + str.substr(4);
var b = strToLong(str.substr(5)) + str.substr(4);
var c = str.substr(4) + b.substr(5);
return hex_md5(c).substr(1, 24)
}
function makeKey_3(str) {
var str = str.substr(5, 5 * 5) + "15" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var a = strToLongEn(str.substr(5)) + str.substr(4);
var b = str.substr(4) + a.substr(5);
var c = strToLong(str.substr(5)) + str.substr(4);
return hex_md5(b).substr(3, 24)
}
function makeKey_4(str) {
var str = str.substr(5, 5 * 5) + "2" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + strToLong(a.substr(5));
return hex_md5(b).substr(3, 24)
}
function makeKey_5(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 5) + str.substr(1, 2) + "1") + str.substr((5 + 1) * (5 + 1), 3);
var a = strToLongEn(str.substr(4, 10)) + str.substr( - 4);
var b = hex_md5(str.substr(4)) + a.substr(2);
var a = str.substr(3);
var c = strToLong(str.substr(5)) + str.substr(4);
var aa = long + str.substr(4);
var long = 0;
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 12)) + i
}
a = long + "" + str.substr(4);
return hex_md5(str).substr(4, 24)
}
//2
function makeKey_6(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5) + str.substr((5 + 1) * (5 + 1), 3);
var a = base.encode(str.substr(4, 10)) + str.substr(2);
var b = str.substr(6) + a.substr(2);
var c = strToLong(str.substr(5)) + str.substr(4);
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(4);
return hex_md5(b).substr(2, 24)
}
function makeKey_7(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 4) + "55" + str.substr(1, 2)) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16 + 5)) + 3 + 5
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + strToLong(a.substr(5));
return hex_md5(b).substr(3, 24)
}
function makeKey_8(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 5 - 1) + "5" + "-" + "5") + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + strToLongEn(a.substr(5));
return hex_md5(b).substr(4, 24)
}
function makeKey_9(str) {
var str = str.substr(5, 5 * 5) + "5" + str.substr(1, 2) + "1" + str.substr((5 + 1) * (5 + 1), 3);
var a = str.substr(5) + str.substr(4);
var b = str.substr(12) + a.substr( - 6);
var c = hex_sha1(str.substr(4)) + a.substr(6);
return hex_md5(c).substr(4, 24)
}
function makeKey_10(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 5 - 1) + "5") + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + hex_sha1(a.substr(5));
return hex_md5(b).substr(4, 24)
}
function makeKey_11(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = str.substr(1) + hex_sha1(a.substr(5));
return hex_md5(b).substr(2, 24)
}
function makeKey_12(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + str.substr((5 + 1) * (5 + 1), 3) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = str.substr(1) + hex_sha1(str.substr(5));
return hex_md5(b).substr(1, 24)
}
function makeKey_13(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = base.encode(str.substr(1) + hex_sha1(str.substr(5)));
return hex_md5(b).substr(1, 24)
}
function makeKey_14(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = base.encode(str.substr(1) + str.substr(5) + str.substr(1, 3));
return hex_sha1(b).substr(1, 24)
}
function makeKey_15(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = base.encode(a.substr(1) + str.substr(5) + str.substr(2, 3));
return hex_sha1(b).substr(1, 24)
}
function makeKey_16(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2) + "-" + "5";
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = base.encode(a.substr(1)) + strToLongEn2(str.substr(5), 5) + str.substr(2, 3);
return hex_md5(b).substr(2, 24)
}
function makeKey_17(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "7" + str.substr(1, 2) + "-" + "5";
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = base.encode(a.substr(1)) + strToLongEn2(str.substr(5), 5 + 1) + str.substr(2 + 5, 3);
return hex_md5(b).substr(0, 24)
}
function makeKey_18(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "7" + str.substr(1, 2) + "5" + str.substr(2 + 5, 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = a.substr(1) + strToLongEn2(str.substr(5), 5 + 1) + str.substr(2 + 5, 3);
return hex_md5(b).substr(0, 24)
}
function makeKey_19(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "7" + str.substr(5, 2) + "5" + str.substr(2 + 5, 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
    long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
    long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = a.substr(1) + strToLongEn3(str.substr(5), 5 - 1) + str.substr(2 + 5, 3);
return hex_md5(b).substr(0, 24)
}
function makeKey_20(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)
}
//3
function makeKey_21(str) {
return hex_md5(makeKey_11(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_22(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_23(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_24(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_25(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_26(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_27(str) {
return hex_md5(makeKey_17(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_28(str) {
return hex_md5(makeKey_18(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_29(str) {
return hex_md5(makeKey_19(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_30(str) {
return hex_md5(makeKey_0(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_31(str) {
return hex_md5(makeKey_1(str) + makeKey_8(str)).substr(4, 24)
}
function makeKey_32(str) {
return hex_md5(makeKey_4(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_33(str) {
return hex_md5(makeKey_5(str) + makeKey_15(str)).substr(4, 24)
}
function makeKey_34(str) {
return hex_md5(makeKey_3(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_35(str) {
return hex_md5(makeKey_7(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_36(str) {
return hex_md5(makeKey_8(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_37(str) {
return hex_md5(makeKey_6(str) + makeKey_17(str)).substr(1, 24)
}
function makeKey_38(str) {
return hex_md5(makeKey_12(str) + makeKey_18(str)).substr(2, 24)
}
function makeKey_39(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_40(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_41(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_42(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_43(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_44(str) {
return hex_md5(makeKey_17(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_45(str) {
return hex_md5(makeKey_18(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_46(str) {
return hex_md5(makeKey_19(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_47(str) {
return hex_md5(makeKey_0(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_48(str) {
return hex_md5(makeKey_1(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_49(str) {
return hex_md5(makeKey_4(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_50(str) {
return hex_md5(makeKey_5(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_51(str) {
return hex_md5(makeKey_3(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_52(str) {
return hex_md5(makeKey_7(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_53(str) {
return hex_md5(makeKey_12(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_54(str) {
return hex_md5(makeKey_14(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_55(str) {
return hex_md5(makeKey_15(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_56(str) {
return hex_md5(makeKey_16(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_57(str) {
return hex_md5(makeKey_9(str) + makeKey_17(str)).substr(1, 24)
}
function makeKey_58(str) {
return hex_md5(makeKey_10(str) + makeKey_18(str)).substr(2, 24)
}
function makeKey_59(str) {
return hex_md5(makeKey_17(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_60(str) {
return hex_md5(makeKey_18(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_61(str) {
return hex_md5(makeKey_19(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_62(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_63(str) {
return hex_md5(makeKey_1(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_64(str) {
return hex_md5(makeKey_4(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_65(str) {
return hex_md5(makeKey_14(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_66(str) {
return hex_md5(makeKey_15(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_67(str) {
return hex_md5(makeKey_16(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_68(str) {
return hex_md5(makeKey_9(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_69(str) {
return hex_md5(makeKey_10(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_70(str) {
return hex_md5(makeKey_17(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_71(str) {
return hex_md5(makeKey_18(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_72(str) {
return hex_md5(makeKey_19(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_73(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(1, 24)
}
function makeKey_74(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(2, 24)
}
function makeKey_75(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_76(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_77(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_78(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_79(str) {
return hex_md5(makeKey_10(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_80(str) {
return hex_md5(makeKey_17(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_81(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_82(str) {
return hex_md5(makeKey_14(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_83(str) {
return hex_md5(makeKey_15(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_84(str) {
return hex_md5(makeKey_16(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_85(str) {
return hex_md5(makeKey_9(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_86(str) {
return hex_md5(makeKey_10(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_87(str) {
return hex_md5(makeKey_14(str) + makeKey_14(str)).substr(4, 24)
}
function makeKey_88(str) {
return hex_md5(makeKey_15(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_89(str) {
return hex_md5(makeKey_16(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_90(str) {
return hex_md5(makeKey_9(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_91(str) {
return hex_md5(makeKey_10(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_92(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_93(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_94(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_95(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_96(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_97(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_98(str) {
return hex_md5(makeKey_5(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_99(str) {
return hex_md5(makeKey_3(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_100(str) {
return hex_md5(makeKey_7(str) + makeKey_3(str)).substr(1, 24)
}
function makeKey_101(str) {
return hex_md5(makeKey_10(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_102(str) {
return hex_md5(makeKey_17(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_103(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_104(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_105(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_106(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_107(str) {
return hex_md5(makeKey_14(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_108(str) {
return hex_md5(makeKey_15(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_109(str) {
return hex_md5(makeKey_16(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_110(str) {
return hex_md5(makeKey_9(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_111(str) {
return hex_md5(makeKey_10(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_112(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_113(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_114(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_115(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_116(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_117(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_118(str) {
return hex_md5(makeKey_5(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_119(str) {
return hex_md5(makeKey_3(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_120(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_121(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_122(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_123(str) {
return hex_md5(makeKey_4(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_124(str) {
return hex_md5(makeKey_5(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_125(str) {
return hex_md5(makeKey_3(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_126(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_127(str) {
return hex_md5(makeKey_3(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_128(str) {
return hex_md5(makeKey_7(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_129(str) {
return hex_md5(makeKey_8(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_130(str) {
return hex_md5(makeKey_14(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_131(str) {
return hex_md5(makeKey_15(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_132(str) {
return hex_md5(makeKey_16(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_133(str) {
return hex_md5(makeKey_9(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_134(str) {
return hex_md5(makeKey_10(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_135(str) {
return hex_md5(makeKey_17(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_136(str) {
return hex_md5(makeKey_18(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_137(str) {
return hex_md5(makeKey_19(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_138(str) {
return hex_md5(makeKey_0(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_139(str) {
return hex_md5(makeKey_1(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_140(str) {
return hex_md5(makeKey_4(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_141(str) {
return hex_md5(makeKey_5(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_142(str) {
return hex_md5(makeKey_3(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_143(str) {
return hex_md5(makeKey_7(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_144(str) {
return hex_md5(makeKey_17(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_145(str) {
return hex_md5(makeKey_18(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_146(str) {
return hex_md5(makeKey_19(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_147(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_148(str) {
return hex_md5(makeKey_1(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_149(str) {
return hex_md5(makeKey_4(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_150(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_151(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_152(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_153(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_154(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_155(str) {
return hex_md5(makeKey_17(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_156(str) {
return hex_md5(makeKey_18(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_157(str) {
return hex_md5(makeKey_19(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_158(str) {
return hex_md5(makeKey_0(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_159(str) {
return hex_md5(makeKey_1(str) + makeKey_8(str)).substr(2, 24)
}
function makeKey_160(str) {
return hex_md5(makeKey_4(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_161(str) {
return hex_md5(makeKey_19(str) + makeKey_15(str)).substr(4, 24)
}
function makeKey_162(str) {
return hex_md5(makeKey_0(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_163(str) {
return hex_md5(makeKey_1(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_164(str) {
return hex_md5(makeKey_4(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_165(str) {
return hex_md5(makeKey_5(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_166(str) {
return hex_md5(makeKey_3(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_167(str) {
return hex_md5(makeKey_7(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_168(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_169(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_170(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_171(str) {
return hex_md5(makeKey_17(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_172(str) {
return hex_md5(makeKey_18(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_173(str) {
return hex_md5(makeKey_19(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_174(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_175(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_176(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_177(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_178(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_179(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_180(str) {
return hex_md5(makeKey_18(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_181(str) {
return hex_md5(makeKey_19(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_182(str) {
return hex_md5(makeKey_0(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_183(str) {
return hex_md5(makeKey_1(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_184(str) {
return hex_md5(makeKey_4(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_185(str) {
return hex_md5(makeKey_14(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_186(str) {
return hex_md5(makeKey_15(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_187(str) {
return hex_md5(makeKey_16(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_188(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_189(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_190(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_191(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_192(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_193(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_194(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_195(str) {
return hex_md5(makeKey_4(str) + makeKey_14(str)).substr(4, 24)
}
function makeKey_196(str) {
return hex_md5(makeKey_5(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_197(str) {
return hex_md5(makeKey_3(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_198(str) {
return hex_md5(makeKey_3(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_199(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_200(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_201(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_202(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_203(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_204(str) {
return hex_md5(makeKey_4(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_205(str) {
return hex_md5(makeKey_14(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_206(str) {
return hex_md5(makeKey_15(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_207(str) {
return hex_md5(makeKey_16(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_208(str) {
return hex_md5(makeKey_9(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_209(str) {
return hex_md5(makeKey_10(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_210(str) {
return hex_md5(makeKey_17(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_211(str) {
return hex_md5(makeKey_18(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_212(str) {
return hex_md5(makeKey_19(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_213(str) {
return hex_md5(makeKey_0(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_214(str) {
return hex_md5(makeKey_1(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_215(str) {
return hex_md5(makeKey_4(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_216(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_217(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_218(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_219(str) {
return hex_md5(makeKey_4(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_220(str) {
return hex_md5(makeKey_5(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_221(str) {
return hex_md5(makeKey_3(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_222(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_223(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_224(str) {
return hex_md5(makeKey_1(str) + makeKey_5(str)).substr(2, 24)
}
//4
function makeKey_225(str) {
return hex_md5(makeKey_4(str) + makeKey_3(str)).substr(3, 24)
}
function makeKey_226(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(4, 24)
}
function makeKey_227(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_228(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_229(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_230(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_231(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_232(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_233(str) {
return hex_md5(makeKey_10(str) + makeKey_14(str)).substr(1, 24)
}
function makeKey_234(str) {
return hex_md5(makeKey_17(str) + makeKey_15(str)).substr(2, 24)
}
function makeKey_235(str) {
return hex_md5(makeKey_18(str) + makeKey_16(str)).substr(3, 24)
}
function makeKey_236(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(4, 24)
}
function makeKey_237(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(1, 24)
}
function makeKey_238(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_239(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_240(str) {
return hex_md5(makeKey_14(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_241(str) {
return hex_md5(makeKey_15(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_242(str) {
return hex_md5(makeKey_16(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_243(str) {
return hex_md5(makeKey_9(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_244(str) {
return hex_md5(makeKey_10(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_245(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(4, 24)
}
function makeKey_246(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_247(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_248(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_249(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_250(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_251(str) {
return hex_md5(makeKey_19(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_252(str) {
return hex_md5(makeKey_0(str) + makeKey_14(str)).substr(1, 24)
}
function makeKey_253(str) {
return hex_md5(makeKey_1(str) + makeKey_15(str)).substr(2, 24)
}
//5
function makeKey_254(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_255(str) {
return hex_md5(makeKey_5(str) + makeKey_14(str)).substr(4, 24)
}
function makeKey_256(str) {
return hex_md5(makeKey_3(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_257(str) {
return hex_md5(makeKey_7(str) + makeKey_16(str)).substr(3, 24)
}
function makeKey_258(str) {
return hex_md5(makeKey_0(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_259(str) {
return hex_md5(makeKey_1(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_260(str) {
return hex_md5(makeKey_4(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_261(str) {
return hex_md5(makeKey_17(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_262(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_263(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_264(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_265(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_266(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_267(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_268(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_269(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_270(str) {
return hex_md5(makeKey_18(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_271(str) {
return hex_md5(makeKey_19(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_272(str) {
return hex_md5(makeKey_0(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_273(str) {
return hex_md5(makeKey_1(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_274(str) {
return hex_md5(makeKey_19(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_275(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_276(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_277(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_278(str) {
return hex_md5(makeKey_5(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_279(str) {
return hex_md5(makeKey_3(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_280(str) {
return hex_md5(makeKey_7(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_281(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_282(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_283(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_284(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_285(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_286(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_287(str) {
return hex_md5(makeKey_14(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_288(str) {
return hex_md5(makeKey_15(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_289(str) {
return hex_md5(makeKey_16(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_290(str) {
return hex_md5(makeKey_9(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_291(str) {
return hex_md5(makeKey_10(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_292(str) {
return hex_md5(makeKey_17(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_293(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_294(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
//6
function makeKey_295(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_296(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_297(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_298(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_299(str) {
return hex_md5(makeKey_5(str) + makeKey_5(str)).substr(4, 24)
}
function makeKey_300(str) {
return hex_md5(makeKey_3(str) + makeKey_3(str)).substr(1, 24)
}
function makeKey_301(str) {
return hex_md5(makeKey_7(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_302(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_303(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_304(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_305(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_306(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_307(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_308(str) {
return hex_md5(k(0) + makeKey_14(str)).substr(2, 24)
}
function makeKey_309(str) {
return hex_md5(makeKey_15(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_310(str) {
return hex_md5(makeKey_16(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_311(str) {
return hex_md5(makeKey_9(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_312(str) {
return hex_md5(makeKey_10(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_313(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_314(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_315(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_316(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_317(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_318(str) {
return hex_md5(makeKey_5(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_319(str) {
return hex_md5(makeKey_3(str) + makeKey_3(str)).substr(3, 24)
}
function makeKey_320(str) {
return hex_md5(makeKey_7(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_321(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_322(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_323(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_324(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_325(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_326(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_327(str) {
return hex_md5(makeKey_19(str) + makeKey_14(str)).substr(1, 24)
}
function makeKey_328(str) {
return hex_md5(makeKey_0(str) + makeKey_15(str)).substr(2, 24)
}
function makeKey_329(str) {
return hex_md5(makeKey_1(str) + makeKey_16(str)).substr(3, 24)
}
function makeKey_330(str) {
return hex_md5(makeKey_4(str) + makeKey_9(str)).substr(4, 24)
}
function makeKey_331(str) {
return hex_md5(makeKey_19(str) + makeKey_10(str)).substr(1, 24)
}
function makeKey_332(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_333(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_334(str) {
return hex_md5(makeKey_4(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_335(str) {
return hex_md5(makeKey_5(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_336(str) {
return hex_md5(makeKey_3(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_337(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_338(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_339(str) {
return hex_md5(makeKey_1(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_340(str) {
return hex_md5(makeKey_4(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_341(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_342(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_343(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_344(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_345(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_346(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_347(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_348(str) {
return hex_md5(makeKey_10(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_349(str) {
return hex_md5(makeKey_17(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_350(str) {
return hex_md5(makeKey_18(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_351(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_352(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_353(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_354(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_355(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_356(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_357(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_358(str) {
return hex_md5(makeKey_4(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_359(str) {
return hex_md5(makeKey_5(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_360(str) {
return hex_md5(makeKey_3(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_361(str) {
return hex_md5(makeKey_7(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_362(str) {
return hex_md5(makeKey_17(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_363(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_364(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_365(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_366(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_367(str) {
return hex_md5(makeKey_4(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_368(str) {
return hex_md5(k(0) + makeKey_17(str)).substr(3, 24)
}
function makeKey_369(str) {
return hex_md5(makeKey_15(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_370(str) {
return hex_md5(makeKey_16(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_371(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_372(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_373(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_374(str) {
return hex_md5(makeKey_19(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_375(str) {
return hex_md5(makeKey_0(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_376(str) {
return hex_md5(makeKey_1(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_377(str) {
return hex_md5(makeKey_4(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_378(str) {
return hex_md5(makeKey_5(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_379(str) {
return hex_md5(makeKey_3(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_380(str) {
return hex_md5(makeKey_7(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_381(str) {
return hex_md5(makeKey_17(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_382(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_383(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_384(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_385(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_386(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_387(str) {
return hex_md5(makeKey_17(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_388(str) {
return hex_md5(makeKey_18(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_389(str) {
return hex_md5(makeKey_19(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_390(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_391(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_392(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_393(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_394(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_395(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_396(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_397(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_398(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_399(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(1, 24)
}
//7
//var cookie = getCookie('vjkl5');
var arrFun = [makeKey_0, makeKey_1, makeKey_2, makeKey_3, makeKey_4, makeKey_5, makeKey_6, makeKey_7, makeKey_8, makeKey_9, makeKey_10, makeKey_11, makeKey_12, makeKey_13, makeKey_14, makeKey_15, makeKey_16, makeKey_17, makeKey_18, makeKey_19, makeKey_20, makeKey_21, makeKey_22, makeKey_23, makeKey_24, makeKey_25, makeKey_26, makeKey_27, makeKey_28, makeKey_29, makeKey_30, makeKey_31, makeKey_32, makeKey_33, makeKey_34, makeKey_35, makeKey_36, makeKey_37, makeKey_38, makeKey_39, makeKey_40, makeKey_41, makeKey_42, makeKey_43, makeKey_44, makeKey_45, makeKey_46, makeKey_47, makeKey_48, makeKey_49, makeKey_50, makeKey_51, makeKey_52, makeKey_53, makeKey_54, makeKey_55, makeKey_56, makeKey_57, makeKey_58, makeKey_59, makeKey_60, makeKey_61, makeKey_62, makeKey_63, makeKey_64, makeKey_65, makeKey_66, makeKey_67, makeKey_68, makeKey_69, makeKey_70, makeKey_71, makeKey_72, makeKey_73, makeKey_74, makeKey_75, makeKey_76, makeKey_77, makeKey_78, makeKey_79, makeKey_80, makeKey_81, makeKey_82, makeKey_83, makeKey_84, makeKey_85, makeKey_86, makeKey_87, makeKey_88, makeKey_89, makeKey_90, makeKey_91, makeKey_92, makeKey_93, makeKey_94, makeKey_95, makeKey_96, makeKey_97, makeKey_98, makeKey_99, makeKey_100, makeKey_101, makeKey_102, makeKey_103, makeKey_104, makeKey_105, makeKey_106, makeKey_107, makeKey_108, makeKey_109, makeKey_110, makeKey_111, makeKey_112, makeKey_113, makeKey_114, makeKey_115, makeKey_116, makeKey_117, makeKey_118, makeKey_119, makeKey_120, makeKey_121, makeKey_122, makeKey_123, makeKey_124, makeKey_125, makeKey_126, makeKey_127, makeKey_128, makeKey_129, makeKey_130, makeKey_131, makeKey_132, makeKey_133, makeKey_134, makeKey_135, makeKey_136, makeKey_137, makeKey_138, makeKey_139, makeKey_140, makeKey_141, makeKey_142, makeKey_143, makeKey_144, makeKey_145, makeKey_146, makeKey_147, makeKey_148, makeKey_149, makeKey_150, makeKey_151, makeKey_152, makeKey_153, makeKey_154, makeKey_155, makeKey_156, makeKey_157, makeKey_158, makeKey_159, makeKey_160, makeKey_161, makeKey_162, makeKey_163, makeKey_164, makeKey_165, makeKey_166, makeKey_167, makeKey_168, makeKey_169, makeKey_170, makeKey_171, makeKey_172, makeKey_173, makeKey_174, makeKey_175, makeKey_176, makeKey_177, makeKey_178, makeKey_179, makeKey_180, makeKey_181, makeKey_182, makeKey_183, makeKey_184, makeKey_185, makeKey_186, makeKey_187, makeKey_188, makeKey_189, makeKey_190, makeKey_191, makeKey_192, makeKey_193, makeKey_194, makeKey_195, makeKey_196, makeKey_197, makeKey_198, makeKey_199, makeKey_200, makeKey_201, makeKey_202, makeKey_203, makeKey_204, makeKey_205, makeKey_206, makeKey_207, makeKey_208, makeKey_209, makeKey_210, makeKey_211, makeKey_212, makeKey_213, makeKey_214, makeKey_215, makeKey_216, makeKey_217, makeKey_218, makeKey_219, makeKey_220, makeKey_221, makeKey_222, makeKey_223, makeKey_224, makeKey_225, makeKey_226, makeKey_227, makeKey_228, makeKey_229, makeKey_230, makeKey_231, makeKey_232, makeKey_233, makeKey_234, makeKey_235, makeKey_236, makeKey_237, makeKey_238, makeKey_239, makeKey_240, makeKey_241, makeKey_242, makeKey_243, makeKey_244, makeKey_245, makeKey_246, makeKey_247, makeKey_248, makeKey_249, makeKey_250, makeKey_251, makeKey_252, makeKey_253, makeKey_254, makeKey_255, makeKey_256, makeKey_257, makeKey_258, makeKey_259, makeKey_260, makeKey_261, makeKey_262, makeKey_263, makeKey_264, makeKey_265, makeKey_266, makeKey_267, makeKey_268, makeKey_269, makeKey_270, makeKey_271, makeKey_272, makeKey_273, makeKey_274, makeKey_275, makeKey_276, makeKey_277, makeKey_278, makeKey_279, makeKey_280, makeKey_281, makeKey_282, makeKey_283, makeKey_284, makeKey_285, makeKey_286, makeKey_287, makeKey_288, makeKey_289, makeKey_290, makeKey_291, makeKey_292, makeKey_293, makeKey_294, makeKey_295, makeKey_296, makeKey_297, makeKey_298, makeKey_299, makeKey_300, makeKey_301, makeKey_302, makeKey_303, makeKey_304, makeKey_305, makeKey_306, makeKey_307, makeKey_308, makeKey_309, makeKey_310, makeKey_311, makeKey_312, makeKey_313, makeKey_314, makeKey_315, makeKey_316, makeKey_317, makeKey_318, makeKey_319, makeKey_320, makeKey_321, makeKey_322, makeKey_323, makeKey_324, makeKey_325, makeKey_326, makeKey_327, makeKey_328, makeKey_329, makeKey_330, makeKey_331, makeKey_332, makeKey_333, makeKey_334, makeKey_335, makeKey_336, makeKey_337, makeKey_338, makeKey_339, makeKey_340, makeKey_341, makeKey_342, makeKey_343, makeKey_344, makeKey_345, makeKey_346, makeKey_347, makeKey_348, makeKey_349, makeKey_350, makeKey_351, makeKey_352, makeKey_353, makeKey_354, makeKey_355, makeKey_356, makeKey_357, makeKey_358, makeKey_359, makeKey_360, makeKey_361, makeKey_362, makeKey_363, makeKey_364, makeKey_365, makeKey_366, makeKey_367, makeKey_368, makeKey_369, makeKey_370, makeKey_371, makeKey_372, makeKey_373, makeKey_374, makeKey_375, makeKey_376, makeKey_377, makeKey_378, makeKey_379, makeKey_380, makeKey_381, makeKey_382, makeKey_383, makeKey_384, makeKey_385, makeKey_386, makeKey_387, makeKey_388, makeKey_389, makeKey_390, makeKey_391, makeKey_392, makeKey_393, makeKey_394, makeKey_395, makeKey_396, makeKey_397, makeKey_398, makeKey_399];
//var funIndex = strToLong(cookie) % arrFun.length;
//var fun = arrFun[funIndex];
//var result = fun(cookie);

//注意:修改的地方:
// 1. 添加前面的加密方法(base64,hex_sha1,hex_md5)
// 2. 注释掉var cookie = getCookie('vjkl5'); 直接传入cookie中'vjl5'字段的值
// 3.有的hex_md5(makeKey_4(str) + makeKey_19(str)).substr(3, 24)变成了hex_md5(c0 +...., 就会报错c未定义 ; 解决办法就是直接去网页调试getkey() ,进入虚拟的函数中,查看对应的值,发现c(0)应该换成makeKey_4(str)

//**************************传入cookie中的'vjl5'字段的值*********************
function getvl5x(cookie) {
// var vl = getCookie(cookie) //cookie中的'vjl5'字段的值
var funIndex = strToLong(cookie) % arrFun.length;
var fun = arrFun[funIndex];
var result = fun(cookie);
return result;
}

================================================
FILE: Wenshu_Project/Wenshu/spiders/wenshu.py
================================================
# -*- coding: utf-8 -*-
import scrapy, time, json, re, math, execjs
from Wenshu.items import WenshuCaseItem


class WenshuSpider(scrapy.Spider):
    name = 'wenshu'
    # allowed_domains = ['wenshu.court.gov.cn']
    start_urls = ['http://wenshu.court.gov.cn/list/list/?sorttype=1']

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.year_list = ['1996', '1997', '1998', '1999', '2000']
        self.guid = 'aaaabbbb-aaaa-aaaabbbb-aaaabbbbcccc'
        with open('Wenshu\spiders\get_vl5x.js', encoding='utf-8') as f:
            jsdata_1 = f.read()
        with open('Wenshu\spiders\get_docid.js', encoding='utf-8') as f:
            jsdata_2 = f.read()
        self.js_1 = execjs.compile(jsdata_1)
        self.js_2 = execjs.compile(jsdata_2)

    def parse(self, response):
        '''获取cookie'''
        try:
            vjkl5 = response.headers['Set-Cookie'].decode('utf-8')
            vjkl5 = vjkl5.split(';')[0].split('=')[1]
            url_num = 'http://wenshu.court.gov.cn/ValiCode/GetCode'
            data = {
                'guid': self.guid
            }
            yield scrapy.FormRequest(url_num, formdata=data, meta={'vjkl5': vjkl5}, callback=self.get_count,
                                     dont_filter=True)
        except:
            yield scrapy.Request(WenshuSpider.start_urls, callback=self.parse, dont_filter=True)

    def get_count(self, response):
        '''获取案件数目,设置请求页数'''
        number = response.text
        vjkl5 = response.meta['vjkl5']
        vl5x = self.js_1.call('getvl5x', vjkl5)
        url = 'http://wenshu.court.gov.cn/List/ListContent'
        for year in self.year_list:
            data = {
                'Param': '裁判年份:{}'.format(year),  # 检索筛选条件 (多条件筛选: 裁判年份:2018,中级法院:北京市第一中级人民法院,审判程序:一审,关键词:返还)
                'Index': '1',  # 页数
                'Page': '0',  # 只为了获取案件数目,所有请求0条就行了
                'Order': '裁判日期',  # 排序类型(1.法院层级/2.裁判日期/3.审判程序)
                'Direction': 'asc',  # 排序方式(1.asc:从小到大/2.desc:从大到小)
                'vl5x': vl5x,
                'number': number,
                'guid': self.guid
            }
            headers = {
                'Cookie': 'vjkl5=' + response.meta['vjkl5'],  # 在这单独添加cookie,settings中就可以禁用cookie,防止跟踪被ban
                'Host': 'wenshu.court.gov.cn',
                'Origin': 'http://wenshu.court.gov.cn',
            }
            # print(response.request.headers.getlist('Cookie'))
            yield scrapy.FormRequest(url, formdata=data,
                                     meta={'vl5x': vl5x, 'vjkl5': vjkl5, 'number': number, 'year': year},
                                     callback=self.get_content, headers=headers, dont_filter=True)

    def get_content(self, response):
        '''获取每页的案件'''
        html = response.text
        result = eval(json.loads(html))
        count = result[0]['Count']
        print('******* {}年:该筛选条件下共有多少条数据:{} ********'.format(response.meta['year'], count))
        page = math.ceil(int(count) / 10)  # 向上取整,每页10条
        for i in range(1, int(page) + 1):
            if i <= 20:  # max:10*20=200 ; 20181005 -只能爬取20页,每页10条!!!
                url = 'http://wenshu.court.gov.cn/List/ListContent'
                data = {
                    'Param': '裁判年份:{}'.format(response.meta['year']),
                    # 检索筛选条件 (多条件筛选: 裁判年份:2018,中级法院:北京市第一中级人民法院,审判程序:一审,关键词:返还)
                    'Index': str(i),  # 页数
                    'Page': '10',  # 每页显示的条目数
                    'Order': '裁判日期',  # 排序类型(1.法院层级/2.裁判日期/3.审判程序)
                    'Direction': 'asc',  # 排序方式(1.asc:从小到大/2.desc:从大到小)
                    'vl5x': response.meta['vl5x'],  # 保存1个小时
                    'number': response.meta['number'],  # 每次都要请求一次GetCode,获取number带入
                    'guid': self.guid
                }
                headers = {
                    'Cookie': 'vjkl5=' + response.meta['vjkl5'],
                    'Host': 'wenshu.court.gov.cn',
                    'Origin': 'http://wenshu.court.gov.cn',
                }
                yield scrapy.FormRequest(url, formdata=data, callback=self.get_docid, headers=headers, dont_filter=True)

    def get_docid(self, response):
        '''计算出docid'''
        html = response.text
        result = eval(json.loads(html))
        runeval = result[0]['RunEval']
        content = result[1:]
        for i in content:
            casewenshuid = i.get('文书ID', '')
            casejudgedate = i.get('裁判日期', '')
            docid = self.js_2.call('getdocid', runeval, casewenshuid)
            print('*************文书ID:' + docid)
            url = 'http://wenshu.court.gov.cn/CreateContentJS/CreateContentJS.aspx?DocID={}'.format(docid)
            yield scrapy.Request(url, callback=self.get_detail, meta={'casejudgedate':casejudgedate}, dont_filter=True)

    def get_detail(self, response):
        '''获取每条案件详情'''
        html = response.text
        content_1 = json.loads(re.search(r'JSON\.stringify\((.*?)\);\$\(document', html).group(1))  # 内容详情字典1
        content_3 = re.search(r'"Html\\":\\"(.*?)\\"}"', html).group(1)  # 内容详情字典3(doc文档正文)
        reg = re.compile(r'<[^>]+>', re.S)
        # 存储到item
        item = WenshuCaseItem()
        item['casecourt'] = {
            'casecourtid': content_1.get('法院ID', ''),
            'casecourtname': content_1.get('法院名称', ''),
            'casecourtprovince': content_1.get('法院省份', ''),
            'casecourtcity': content_1.get('法院地市', ''),
            'casecourtdistrict': content_1.get('法院区县', ''),
            'casecourtarea': content_1.get('法院区域', ''),
        }
        item['casecontent'] = {
            'casebasecontent': content_1.get('案件基本情况段原文', ''),
            'caseaddcontent': content_1.get('附加原文', ''),
            'caseheadcontent': content_1.get('文本首部段落原文', ''),
            'casemaincontent': content_1.get('裁判要旨段原文', ''),
            'casecorrectionscontent': content_1.get('补正文书', ''),
            'casedoccontent': content_1.get('DocContent', ''),
            'caselitigationcontent': content_1.get('诉讼记录段原文', ''),
            'casepartycontent': content_1.get('诉讼参与人信息部分原文', ''),
            'casetailcontent': content_1.get('文本尾部原文', ''),
            'caseresultcontent': content_1.get('判决结果段原文', ''),
            'casestrcontent': reg.sub('', content_3),  # 去除html标签后的文书内容
        }
        item['casetype'] = content_1.get('案件类型', '')  # 案件类型
        item['casejudgedate'] = response.meta['casejudgedate']  # 裁判日期
        item['caseprocedure'] = content_1.get('审判程序', '')
        item['casenumber'] = content_1.get('案号', '')
        item['casenopublicreason'] = content_1.get('不公开理由', '')
        item['casedocid'] = content_1.get('文书ID', '')
        item['casename'] = content_1.get('案件名称', '')
        item['casecontenttype'] = content_1.get('文书全文类型', '')
        item['caseuploaddate'] = time.strftime("%Y-%m-%d",
                                               time.localtime(int(content_1['上传日期'][6:-5]))) if 'Date' in content_1[
            '上传日期'] else ''
        item['casedoctype'] = content_1.get('案件名称').split('书')[0][-2:] if '书' in content_1.get(
            '案件名称') else '令'  # 案件文书类型:判决或者裁定...还有令
        item['caseclosemethod'] = content_1.get('结案方式', '')
        item['caseeffectivelevel'] = content_1.get('效力层级', '')

        yield item


================================================
FILE: Wenshu_Project/__init__.py
================================================
# !/user/bin/env python
# -*- coding:utf-8 -*- 
# time: 2018/10/19--22:09
__author__ = 'Henry'

================================================
FILE: Wenshu_Project/requirements.txt
================================================
pymongo==3.6.1
Scrapy==1.5.0
requests==2.20.0
PyExecJS==1.5.1


================================================
FILE: Wenshu_Project/scrapy.cfg
================================================
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html

[settings]
default = Wenshu.settings

[deploy]
#url = http://localhost:6800/
project = Wenshu
Download .txt
gitextract_f9jb1u45/

├── .gitattributes
├── LICENSE
├── README.md
└── Wenshu_Project/
    ├── Wenshu/
    │   ├── __init__.py
    │   ├── cmdline.py
    │   ├── items.py
    │   ├── middlewares.py
    │   ├── pipelines.py
    │   ├── settings.py
    │   └── spiders/
    │       ├── __init__.py
    │       ├── get_docid.js
    │       ├── get_vl5x.js
    │       └── wenshu.py
    ├── __init__.py
    ├── requirements.txt
    └── scrapy.cfg
Download .txt
SYMBOL INDEX (484 symbols across 6 files)

FILE: Wenshu_Project/Wenshu/items.py
  class WenshuCaseItem (line 11) | class WenshuCaseItem(scrapy.Item):

FILE: Wenshu_Project/Wenshu/middlewares.py
  class RandomUserAgentMiddleware (line 12) | class RandomUserAgentMiddleware(object):
    method __init__ (line 13) | def __init__(self, agents):
    method from_crawler (line 17) | def from_crawler(cls, crawler):
    method process_request (line 20) | def process_request(self, request, spider):
  class ProxyMiddleware (line 26) | class ProxyMiddleware(object):
    method __init__ (line 27) | def __init__(self):
    method process_request (line 36) | def process_request(self, request, spider):
    method process_response (line 41) | def process_response(self, request, response, spider):
    method process_exception (line 53) | def process_exception(self, request, exception, spider):
  class WenshuSpiderMiddleware (line 117) | class WenshuSpiderMiddleware(object):
    method from_crawler (line 123) | def from_crawler(cls, crawler):
    method process_spider_input (line 129) | def process_spider_input(self, response, spider):
    method process_spider_output (line 136) | def process_spider_output(self, response, result, spider):
    method process_spider_exception (line 144) | def process_spider_exception(self, response, exception, spider):
    method process_start_requests (line 152) | def process_start_requests(self, start_requests, spider):
    method spider_opened (line 161) | def spider_opened(self, spider):
  class WenshuDownloaderMiddleware (line 165) | class WenshuDownloaderMiddleware(object):
    method from_crawler (line 171) | def from_crawler(cls, crawler):
    method process_request (line 177) | def process_request(self, request, spider):
    method process_response (line 189) | def process_response(self, request, response, spider):
    method process_exception (line 198) | def process_exception(self, request, exception, spider):
    method spider_opened (line 208) | def spider_opened(self, spider):

FILE: Wenshu_Project/Wenshu/pipelines.py
  class WenshuPipeline (line 14) | class WenshuPipeline(object):
    method __init__ (line 15) | def __init__(self):
    method close_spider (line 25) | def close_spider(self, spider):
    method process_item (line 28) | def process_item(self, item, spider):

FILE: Wenshu_Project/Wenshu/spiders/get_docid.js
  function p (line 229) | function p(b, n, a, c, e, j, k) {
  function d (line 234) | function d(b, n, a, c, e, j, k) {
  function l (line 239) | function l(b, n, a, c, e, j, k) {
  function s (line 244) | function s(b, n, a, c, e, j, k) {
  function unzip (line 1631) | function unzip(b64Data) {
  function iemap (line 1706) | function iemap(myarray, callback, thisArg) {
  function getdocid (line 1754) | function getdocid(runevalcode, id) {

FILE: Wenshu_Project/Wenshu/spiders/get_vl5x.js
  function hex_sha1 (line 13) | function hex_sha1(s) {
  function b64_sha1 (line 17) | function b64_sha1(s) {
  function str_sha1 (line 21) | function str_sha1(s) {
  function hex_hmac_sha1 (line 25) | function hex_hmac_sha1(key, data) {
  function b64_hmac_sha1 (line 29) | function b64_hmac_sha1(key, data) {
  function str_hmac_sha1 (line 33) | function str_hmac_sha1(key, data) {
  function sha1_vm_test (line 40) | function sha1_vm_test() {
  function core_sha1 (line 47) | function core_sha1(x, len) {
  function sha1_ft (line 91) | function sha1_ft(t, b, c, d) {
  function sha1_kt (line 101) | function sha1_kt(t) {
  function core_hmac_sha1 (line 108) | function core_hmac_sha1(key, data) {
  function safe_add (line 127) | function safe_add(x, y) {
  function rol (line 136) | function rol(num, cnt) {
  function str2binb (line 144) | function str2binb(str) {
  function binb2str (line 154) | function binb2str(bin) {
  function binb2hex (line 164) | function binb2hex(binarray) {
  function binb2b64 (line 176) | function binb2b64(binarray) {
  function hex_md5 (line 200) | function hex_md5(s) {
  function b64_md5 (line 203) | function b64_md5(s) {
  function str_md5 (line 206) | function str_md5(s) {
  function hex_hmac_md5 (line 209) | function hex_hmac_md5(key, data) {
  function b64_hmac_md5 (line 212) | function b64_hmac_md5(key, data) {
  function str_hmac_md5 (line 215) | function str_hmac_md5(key, data) {
  function md5_vm_test (line 222) | function md5_vm_test() {
  function core_md5 (line 229) | function core_md5(x, len) {
  function md5_cmn (line 325) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 328) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 331) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 334) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 337) | function md5_ii(a, b, c, d, x, s, t) {
  function core_hmac_md5 (line 344) | function core_hmac_md5(key, data) {
  function safe_add (line 363) | function safe_add(x, y) {
  function bit_rol (line 372) | function bit_rol(num, cnt) {
  function str2binl (line 380) | function str2binl(str) {
  function binl2str (line 390) | function binl2str(bin) {
  function binl2hex (line 400) | function binl2hex(binarray) {
  function binl2b64 (line 412) | function binl2b64(binarray) {
  function Base64 (line 426) | function Base64() {
  function strToLong (line 529) | function strToLong(str) {
  function strToLongEn (line 536) | function strToLongEn(str) {
  function strToLongEn2 (line 543) | function strToLongEn2(str, step) {
  function strToLongEn3 (line 550) | function strToLongEn3(str, step) {
  function makeKey_0 (line 557) | function makeKey_0(str) {
  function makeKey_1 (line 563) | function makeKey_1(str) {
  function makeKey_2 (line 570) | function makeKey_2(str) {
  function makeKey_3 (line 577) | function makeKey_3(str) {
  function makeKey_4 (line 584) | function makeKey_4(str) {
  function makeKey_5 (line 600) | function makeKey_5(str) {
  function makeKey_6 (line 616) | function makeKey_6(str) {
  function makeKey_7 (line 631) | function makeKey_7(str) {
  function makeKey_8 (line 648) | function makeKey_8(str) {
  function makeKey_9 (line 665) | function makeKey_9(str) {
  function makeKey_10 (line 672) | function makeKey_10(str) {
  function makeKey_11 (line 689) | function makeKey_11(str) {
  function makeKey_12 (line 706) | function makeKey_12(str) {
  function makeKey_13 (line 723) | function makeKey_13(str) {
  function makeKey_14 (line 740) | function makeKey_14(str) {
  function makeKey_15 (line 757) | function makeKey_15(str) {
  function makeKey_16 (line 774) | function makeKey_16(str) {
  function makeKey_17 (line 791) | function makeKey_17(str) {
  function makeKey_18 (line 808) | function makeKey_18(str) {
  function makeKey_19 (line 825) | function makeKey_19(str) {
  function makeKey_20 (line 842) | function makeKey_20(str) {
  function makeKey_21 (line 846) | function makeKey_21(str) {
  function makeKey_22 (line 849) | function makeKey_22(str) {
  function makeKey_23 (line 852) | function makeKey_23(str) {
  function makeKey_24 (line 855) | function makeKey_24(str) {
  function makeKey_25 (line 858) | function makeKey_25(str) {
  function makeKey_26 (line 861) | function makeKey_26(str) {
  function makeKey_27 (line 864) | function makeKey_27(str) {
  function makeKey_28 (line 867) | function makeKey_28(str) {
  function makeKey_29 (line 870) | function makeKey_29(str) {
  function makeKey_30 (line 873) | function makeKey_30(str) {
  function makeKey_31 (line 876) | function makeKey_31(str) {
  function makeKey_32 (line 879) | function makeKey_32(str) {
  function makeKey_33 (line 882) | function makeKey_33(str) {
  function makeKey_34 (line 885) | function makeKey_34(str) {
  function makeKey_35 (line 888) | function makeKey_35(str) {
  function makeKey_36 (line 891) | function makeKey_36(str) {
  function makeKey_37 (line 894) | function makeKey_37(str) {
  function makeKey_38 (line 897) | function makeKey_38(str) {
  function makeKey_39 (line 900) | function makeKey_39(str) {
  function makeKey_40 (line 903) | function makeKey_40(str) {
  function makeKey_41 (line 906) | function makeKey_41(str) {
  function makeKey_42 (line 909) | function makeKey_42(str) {
  function makeKey_43 (line 912) | function makeKey_43(str) {
  function makeKey_44 (line 915) | function makeKey_44(str) {
  function makeKey_45 (line 918) | function makeKey_45(str) {
  function makeKey_46 (line 921) | function makeKey_46(str) {
  function makeKey_47 (line 924) | function makeKey_47(str) {
  function makeKey_48 (line 927) | function makeKey_48(str) {
  function makeKey_49 (line 930) | function makeKey_49(str) {
  function makeKey_50 (line 933) | function makeKey_50(str) {
  function makeKey_51 (line 936) | function makeKey_51(str) {
  function makeKey_52 (line 939) | function makeKey_52(str) {
  function makeKey_53 (line 942) | function makeKey_53(str) {
  function makeKey_54 (line 945) | function makeKey_54(str) {
  function makeKey_55 (line 948) | function makeKey_55(str) {
  function makeKey_56 (line 951) | function makeKey_56(str) {
  function makeKey_57 (line 954) | function makeKey_57(str) {
  function makeKey_58 (line 957) | function makeKey_58(str) {
  function makeKey_59 (line 960) | function makeKey_59(str) {
  function makeKey_60 (line 963) | function makeKey_60(str) {
  function makeKey_61 (line 966) | function makeKey_61(str) {
  function makeKey_62 (line 969) | function makeKey_62(str) {
  function makeKey_63 (line 972) | function makeKey_63(str) {
  function makeKey_64 (line 975) | function makeKey_64(str) {
  function makeKey_65 (line 978) | function makeKey_65(str) {
  function makeKey_66 (line 981) | function makeKey_66(str) {
  function makeKey_67 (line 984) | function makeKey_67(str) {
  function makeKey_68 (line 987) | function makeKey_68(str) {
  function makeKey_69 (line 990) | function makeKey_69(str) {
  function makeKey_70 (line 993) | function makeKey_70(str) {
  function makeKey_71 (line 996) | function makeKey_71(str) {
  function makeKey_72 (line 999) | function makeKey_72(str) {
  function makeKey_73 (line 1002) | function makeKey_73(str) {
  function makeKey_74 (line 1005) | function makeKey_74(str) {
  function makeKey_75 (line 1008) | function makeKey_75(str) {
  function makeKey_76 (line 1011) | function makeKey_76(str) {
  function makeKey_77 (line 1014) | function makeKey_77(str) {
  function makeKey_78 (line 1017) | function makeKey_78(str) {
  function makeKey_79 (line 1020) | function makeKey_79(str) {
  function makeKey_80 (line 1023) | function makeKey_80(str) {
  function makeKey_81 (line 1026) | function makeKey_81(str) {
  function makeKey_82 (line 1029) | function makeKey_82(str) {
  function makeKey_83 (line 1032) | function makeKey_83(str) {
  function makeKey_84 (line 1035) | function makeKey_84(str) {
  function makeKey_85 (line 1038) | function makeKey_85(str) {
  function makeKey_86 (line 1041) | function makeKey_86(str) {
  function makeKey_87 (line 1044) | function makeKey_87(str) {
  function makeKey_88 (line 1047) | function makeKey_88(str) {
  function makeKey_89 (line 1050) | function makeKey_89(str) {
  function makeKey_90 (line 1053) | function makeKey_90(str) {
  function makeKey_91 (line 1056) | function makeKey_91(str) {
  function makeKey_92 (line 1059) | function makeKey_92(str) {
  function makeKey_93 (line 1062) | function makeKey_93(str) {
  function makeKey_94 (line 1065) | function makeKey_94(str) {
  function makeKey_95 (line 1068) | function makeKey_95(str) {
  function makeKey_96 (line 1071) | function makeKey_96(str) {
  function makeKey_97 (line 1074) | function makeKey_97(str) {
  function makeKey_98 (line 1077) | function makeKey_98(str) {
  function makeKey_99 (line 1080) | function makeKey_99(str) {
  function makeKey_100 (line 1083) | function makeKey_100(str) {
  function makeKey_101 (line 1086) | function makeKey_101(str) {
  function makeKey_102 (line 1089) | function makeKey_102(str) {
  function makeKey_103 (line 1092) | function makeKey_103(str) {
  function makeKey_104 (line 1095) | function makeKey_104(str) {
  function makeKey_105 (line 1098) | function makeKey_105(str) {
  function makeKey_106 (line 1101) | function makeKey_106(str) {
  function makeKey_107 (line 1104) | function makeKey_107(str) {
  function makeKey_108 (line 1107) | function makeKey_108(str) {
  function makeKey_109 (line 1110) | function makeKey_109(str) {
  function makeKey_110 (line 1113) | function makeKey_110(str) {
  function makeKey_111 (line 1116) | function makeKey_111(str) {
  function makeKey_112 (line 1119) | function makeKey_112(str) {
  function makeKey_113 (line 1122) | function makeKey_113(str) {
  function makeKey_114 (line 1125) | function makeKey_114(str) {
  function makeKey_115 (line 1128) | function makeKey_115(str) {
  function makeKey_116 (line 1131) | function makeKey_116(str) {
  function makeKey_117 (line 1134) | function makeKey_117(str) {
  function makeKey_118 (line 1137) | function makeKey_118(str) {
  function makeKey_119 (line 1140) | function makeKey_119(str) {
  function makeKey_120 (line 1143) | function makeKey_120(str) {
  function makeKey_121 (line 1146) | function makeKey_121(str) {
  function makeKey_122 (line 1149) | function makeKey_122(str) {
  function makeKey_123 (line 1152) | function makeKey_123(str) {
  function makeKey_124 (line 1155) | function makeKey_124(str) {
  function makeKey_125 (line 1158) | function makeKey_125(str) {
  function makeKey_126 (line 1161) | function makeKey_126(str) {
  function makeKey_127 (line 1164) | function makeKey_127(str) {
  function makeKey_128 (line 1167) | function makeKey_128(str) {
  function makeKey_129 (line 1170) | function makeKey_129(str) {
  function makeKey_130 (line 1173) | function makeKey_130(str) {
  function makeKey_131 (line 1176) | function makeKey_131(str) {
  function makeKey_132 (line 1179) | function makeKey_132(str) {
  function makeKey_133 (line 1182) | function makeKey_133(str) {
  function makeKey_134 (line 1185) | function makeKey_134(str) {
  function makeKey_135 (line 1188) | function makeKey_135(str) {
  function makeKey_136 (line 1191) | function makeKey_136(str) {
  function makeKey_137 (line 1194) | function makeKey_137(str) {
  function makeKey_138 (line 1197) | function makeKey_138(str) {
  function makeKey_139 (line 1200) | function makeKey_139(str) {
  function makeKey_140 (line 1203) | function makeKey_140(str) {
  function makeKey_141 (line 1206) | function makeKey_141(str) {
  function makeKey_142 (line 1209) | function makeKey_142(str) {
  function makeKey_143 (line 1212) | function makeKey_143(str) {
  function makeKey_144 (line 1215) | function makeKey_144(str) {
  function makeKey_145 (line 1218) | function makeKey_145(str) {
  function makeKey_146 (line 1221) | function makeKey_146(str) {
  function makeKey_147 (line 1224) | function makeKey_147(str) {
  function makeKey_148 (line 1227) | function makeKey_148(str) {
  function makeKey_149 (line 1230) | function makeKey_149(str) {
  function makeKey_150 (line 1233) | function makeKey_150(str) {
  function makeKey_151 (line 1236) | function makeKey_151(str) {
  function makeKey_152 (line 1239) | function makeKey_152(str) {
  function makeKey_153 (line 1242) | function makeKey_153(str) {
  function makeKey_154 (line 1245) | function makeKey_154(str) {
  function makeKey_155 (line 1248) | function makeKey_155(str) {
  function makeKey_156 (line 1251) | function makeKey_156(str) {
  function makeKey_157 (line 1254) | function makeKey_157(str) {
  function makeKey_158 (line 1257) | function makeKey_158(str) {
  function makeKey_159 (line 1260) | function makeKey_159(str) {
  function makeKey_160 (line 1263) | function makeKey_160(str) {
  function makeKey_161 (line 1266) | function makeKey_161(str) {
  function makeKey_162 (line 1269) | function makeKey_162(str) {
  function makeKey_163 (line 1272) | function makeKey_163(str) {
  function makeKey_164 (line 1275) | function makeKey_164(str) {
  function makeKey_165 (line 1278) | function makeKey_165(str) {
  function makeKey_166 (line 1281) | function makeKey_166(str) {
  function makeKey_167 (line 1284) | function makeKey_167(str) {
  function makeKey_168 (line 1287) | function makeKey_168(str) {
  function makeKey_169 (line 1290) | function makeKey_169(str) {
  function makeKey_170 (line 1293) | function makeKey_170(str) {
  function makeKey_171 (line 1296) | function makeKey_171(str) {
  function makeKey_172 (line 1299) | function makeKey_172(str) {
  function makeKey_173 (line 1302) | function makeKey_173(str) {
  function makeKey_174 (line 1305) | function makeKey_174(str) {
  function makeKey_175 (line 1308) | function makeKey_175(str) {
  function makeKey_176 (line 1311) | function makeKey_176(str) {
  function makeKey_177 (line 1314) | function makeKey_177(str) {
  function makeKey_178 (line 1317) | function makeKey_178(str) {
  function makeKey_179 (line 1320) | function makeKey_179(str) {
  function makeKey_180 (line 1323) | function makeKey_180(str) {
  function makeKey_181 (line 1326) | function makeKey_181(str) {
  function makeKey_182 (line 1329) | function makeKey_182(str) {
  function makeKey_183 (line 1332) | function makeKey_183(str) {
  function makeKey_184 (line 1335) | function makeKey_184(str) {
  function makeKey_185 (line 1338) | function makeKey_185(str) {
  function makeKey_186 (line 1341) | function makeKey_186(str) {
  function makeKey_187 (line 1344) | function makeKey_187(str) {
  function makeKey_188 (line 1347) | function makeKey_188(str) {
  function makeKey_189 (line 1350) | function makeKey_189(str) {
  function makeKey_190 (line 1353) | function makeKey_190(str) {
  function makeKey_191 (line 1356) | function makeKey_191(str) {
  function makeKey_192 (line 1359) | function makeKey_192(str) {
  function makeKey_193 (line 1362) | function makeKey_193(str) {
  function makeKey_194 (line 1365) | function makeKey_194(str) {
  function makeKey_195 (line 1368) | function makeKey_195(str) {
  function makeKey_196 (line 1371) | function makeKey_196(str) {
  function makeKey_197 (line 1374) | function makeKey_197(str) {
  function makeKey_198 (line 1377) | function makeKey_198(str) {
  function makeKey_199 (line 1380) | function makeKey_199(str) {
  function makeKey_200 (line 1383) | function makeKey_200(str) {
  function makeKey_201 (line 1386) | function makeKey_201(str) {
  function makeKey_202 (line 1389) | function makeKey_202(str) {
  function makeKey_203 (line 1392) | function makeKey_203(str) {
  function makeKey_204 (line 1395) | function makeKey_204(str) {
  function makeKey_205 (line 1398) | function makeKey_205(str) {
  function makeKey_206 (line 1401) | function makeKey_206(str) {
  function makeKey_207 (line 1404) | function makeKey_207(str) {
  function makeKey_208 (line 1407) | function makeKey_208(str) {
  function makeKey_209 (line 1410) | function makeKey_209(str) {
  function makeKey_210 (line 1413) | function makeKey_210(str) {
  function makeKey_211 (line 1416) | function makeKey_211(str) {
  function makeKey_212 (line 1419) | function makeKey_212(str) {
  function makeKey_213 (line 1422) | function makeKey_213(str) {
  function makeKey_214 (line 1425) | function makeKey_214(str) {
  function makeKey_215 (line 1428) | function makeKey_215(str) {
  function makeKey_216 (line 1431) | function makeKey_216(str) {
  function makeKey_217 (line 1434) | function makeKey_217(str) {
  function makeKey_218 (line 1437) | function makeKey_218(str) {
  function makeKey_219 (line 1440) | function makeKey_219(str) {
  function makeKey_220 (line 1443) | function makeKey_220(str) {
  function makeKey_221 (line 1446) | function makeKey_221(str) {
  function makeKey_222 (line 1449) | function makeKey_222(str) {
  function makeKey_223 (line 1452) | function makeKey_223(str) {
  function makeKey_224 (line 1455) | function makeKey_224(str) {
  function makeKey_225 (line 1459) | function makeKey_225(str) {
  function makeKey_226 (line 1462) | function makeKey_226(str) {
  function makeKey_227 (line 1465) | function makeKey_227(str) {
  function makeKey_228 (line 1468) | function makeKey_228(str) {
  function makeKey_229 (line 1471) | function makeKey_229(str) {
  function makeKey_230 (line 1474) | function makeKey_230(str) {
  function makeKey_231 (line 1477) | function makeKey_231(str) {
  function makeKey_232 (line 1480) | function makeKey_232(str) {
  function makeKey_233 (line 1483) | function makeKey_233(str) {
  function makeKey_234 (line 1486) | function makeKey_234(str) {
  function makeKey_235 (line 1489) | function makeKey_235(str) {
  function makeKey_236 (line 1492) | function makeKey_236(str) {
  function makeKey_237 (line 1495) | function makeKey_237(str) {
  function makeKey_238 (line 1498) | function makeKey_238(str) {
  function makeKey_239 (line 1501) | function makeKey_239(str) {
  function makeKey_240 (line 1504) | function makeKey_240(str) {
  function makeKey_241 (line 1507) | function makeKey_241(str) {
  function makeKey_242 (line 1510) | function makeKey_242(str) {
  function makeKey_243 (line 1513) | function makeKey_243(str) {
  function makeKey_244 (line 1516) | function makeKey_244(str) {
  function makeKey_245 (line 1519) | function makeKey_245(str) {
  function makeKey_246 (line 1522) | function makeKey_246(str) {
  function makeKey_247 (line 1525) | function makeKey_247(str) {
  function makeKey_248 (line 1528) | function makeKey_248(str) {
  function makeKey_249 (line 1531) | function makeKey_249(str) {
  function makeKey_250 (line 1534) | function makeKey_250(str) {
  function makeKey_251 (line 1537) | function makeKey_251(str) {
  function makeKey_252 (line 1540) | function makeKey_252(str) {
  function makeKey_253 (line 1543) | function makeKey_253(str) {
  function makeKey_254 (line 1547) | function makeKey_254(str) {
  function makeKey_255 (line 1550) | function makeKey_255(str) {
  function makeKey_256 (line 1553) | function makeKey_256(str) {
  function makeKey_257 (line 1556) | function makeKey_257(str) {
  function makeKey_258 (line 1559) | function makeKey_258(str) {
  function makeKey_259 (line 1562) | function makeKey_259(str) {
  function makeKey_260 (line 1565) | function makeKey_260(str) {
  function makeKey_261 (line 1568) | function makeKey_261(str) {
  function makeKey_262 (line 1571) | function makeKey_262(str) {
  function makeKey_263 (line 1574) | function makeKey_263(str) {
  function makeKey_264 (line 1577) | function makeKey_264(str) {
  function makeKey_265 (line 1580) | function makeKey_265(str) {
  function makeKey_266 (line 1583) | function makeKey_266(str) {
  function makeKey_267 (line 1586) | function makeKey_267(str) {
  function makeKey_268 (line 1589) | function makeKey_268(str) {
  function makeKey_269 (line 1592) | function makeKey_269(str) {
  function makeKey_270 (line 1595) | function makeKey_270(str) {
  function makeKey_271 (line 1598) | function makeKey_271(str) {
  function makeKey_272 (line 1601) | function makeKey_272(str) {
  function makeKey_273 (line 1604) | function makeKey_273(str) {
  function makeKey_274 (line 1607) | function makeKey_274(str) {
  function makeKey_275 (line 1610) | function makeKey_275(str) {
  function makeKey_276 (line 1613) | function makeKey_276(str) {
  function makeKey_277 (line 1616) | function makeKey_277(str) {
  function makeKey_278 (line 1619) | function makeKey_278(str) {
  function makeKey_279 (line 1622) | function makeKey_279(str) {
  function makeKey_280 (line 1625) | function makeKey_280(str) {
  function makeKey_281 (line 1628) | function makeKey_281(str) {
  function makeKey_282 (line 1631) | function makeKey_282(str) {
  function makeKey_283 (line 1634) | function makeKey_283(str) {
  function makeKey_284 (line 1637) | function makeKey_284(str) {
  function makeKey_285 (line 1640) | function makeKey_285(str) {
  function makeKey_286 (line 1643) | function makeKey_286(str) {
  function makeKey_287 (line 1646) | function makeKey_287(str) {
  function makeKey_288 (line 1649) | function makeKey_288(str) {
  function makeKey_289 (line 1652) | function makeKey_289(str) {
  function makeKey_290 (line 1655) | function makeKey_290(str) {
  function makeKey_291 (line 1658) | function makeKey_291(str) {
  function makeKey_292 (line 1661) | function makeKey_292(str) {
  function makeKey_293 (line 1664) | function makeKey_293(str) {
  function makeKey_294 (line 1667) | function makeKey_294(str) {
  function makeKey_295 (line 1671) | function makeKey_295(str) {
  function makeKey_296 (line 1674) | function makeKey_296(str) {
  function makeKey_297 (line 1677) | function makeKey_297(str) {
  function makeKey_298 (line 1680) | function makeKey_298(str) {
  function makeKey_299 (line 1683) | function makeKey_299(str) {
  function makeKey_300 (line 1686) | function makeKey_300(str) {
  function makeKey_301 (line 1689) | function makeKey_301(str) {
  function makeKey_302 (line 1692) | function makeKey_302(str) {
  function makeKey_303 (line 1695) | function makeKey_303(str) {
  function makeKey_304 (line 1698) | function makeKey_304(str) {
  function makeKey_305 (line 1701) | function makeKey_305(str) {
  function makeKey_306 (line 1704) | function makeKey_306(str) {
  function makeKey_307 (line 1707) | function makeKey_307(str) {
  function makeKey_308 (line 1710) | function makeKey_308(str) {
  function makeKey_309 (line 1713) | function makeKey_309(str) {
  function makeKey_310 (line 1716) | function makeKey_310(str) {
  function makeKey_311 (line 1719) | function makeKey_311(str) {
  function makeKey_312 (line 1722) | function makeKey_312(str) {
  function makeKey_313 (line 1725) | function makeKey_313(str) {
  function makeKey_314 (line 1728) | function makeKey_314(str) {
  function makeKey_315 (line 1731) | function makeKey_315(str) {
  function makeKey_316 (line 1734) | function makeKey_316(str) {
  function makeKey_317 (line 1737) | function makeKey_317(str) {
  function makeKey_318 (line 1740) | function makeKey_318(str) {
  function makeKey_319 (line 1743) | function makeKey_319(str) {
  function makeKey_320 (line 1746) | function makeKey_320(str) {
  function makeKey_321 (line 1749) | function makeKey_321(str) {
  function makeKey_322 (line 1752) | function makeKey_322(str) {
  function makeKey_323 (line 1755) | function makeKey_323(str) {
  function makeKey_324 (line 1758) | function makeKey_324(str) {
  function makeKey_325 (line 1761) | function makeKey_325(str) {
  function makeKey_326 (line 1764) | function makeKey_326(str) {
  function makeKey_327 (line 1767) | function makeKey_327(str) {
  function makeKey_328 (line 1770) | function makeKey_328(str) {
  function makeKey_329 (line 1773) | function makeKey_329(str) {
  function makeKey_330 (line 1776) | function makeKey_330(str) {
  function makeKey_331 (line 1779) | function makeKey_331(str) {
  function makeKey_332 (line 1782) | function makeKey_332(str) {
  function makeKey_333 (line 1785) | function makeKey_333(str) {
  function makeKey_334 (line 1788) | function makeKey_334(str) {
  function makeKey_335 (line 1791) | function makeKey_335(str) {
  function makeKey_336 (line 1794) | function makeKey_336(str) {
  function makeKey_337 (line 1797) | function makeKey_337(str) {
  function makeKey_338 (line 1800) | function makeKey_338(str) {
  function makeKey_339 (line 1803) | function makeKey_339(str) {
  function makeKey_340 (line 1806) | function makeKey_340(str) {
  function makeKey_341 (line 1809) | function makeKey_341(str) {
  function makeKey_342 (line 1812) | function makeKey_342(str) {
  function makeKey_343 (line 1815) | function makeKey_343(str) {
  function makeKey_344 (line 1818) | function makeKey_344(str) {
  function makeKey_345 (line 1821) | function makeKey_345(str) {
  function makeKey_346 (line 1824) | function makeKey_346(str) {
  function makeKey_347 (line 1827) | function makeKey_347(str) {
  function makeKey_348 (line 1830) | function makeKey_348(str) {
  function makeKey_349 (line 1833) | function makeKey_349(str) {
  function makeKey_350 (line 1836) | function makeKey_350(str) {
  function makeKey_351 (line 1839) | function makeKey_351(str) {
  function makeKey_352 (line 1842) | function makeKey_352(str) {
  function makeKey_353 (line 1845) | function makeKey_353(str) {
  function makeKey_354 (line 1848) | function makeKey_354(str) {
  function makeKey_355 (line 1851) | function makeKey_355(str) {
  function makeKey_356 (line 1854) | function makeKey_356(str) {
  function makeKey_357 (line 1857) | function makeKey_357(str) {
  function makeKey_358 (line 1860) | function makeKey_358(str) {
  function makeKey_359 (line 1863) | function makeKey_359(str) {
  function makeKey_360 (line 1866) | function makeKey_360(str) {
  function makeKey_361 (line 1869) | function makeKey_361(str) {
  function makeKey_362 (line 1872) | function makeKey_362(str) {
  function makeKey_363 (line 1875) | function makeKey_363(str) {
  function makeKey_364 (line 1878) | function makeKey_364(str) {
  function makeKey_365 (line 1881) | function makeKey_365(str) {
  function makeKey_366 (line 1884) | function makeKey_366(str) {
  function makeKey_367 (line 1887) | function makeKey_367(str) {
  function makeKey_368 (line 1890) | function makeKey_368(str) {
  function makeKey_369 (line 1893) | function makeKey_369(str) {
  function makeKey_370 (line 1896) | function makeKey_370(str) {
  function makeKey_371 (line 1899) | function makeKey_371(str) {
  function makeKey_372 (line 1902) | function makeKey_372(str) {
  function makeKey_373 (line 1905) | function makeKey_373(str) {
  function makeKey_374 (line 1908) | function makeKey_374(str) {
  function makeKey_375 (line 1911) | function makeKey_375(str) {
  function makeKey_376 (line 1914) | function makeKey_376(str) {
  function makeKey_377 (line 1917) | function makeKey_377(str) {
  function makeKey_378 (line 1920) | function makeKey_378(str) {
  function makeKey_379 (line 1923) | function makeKey_379(str) {
  function makeKey_380 (line 1926) | function makeKey_380(str) {
  function makeKey_381 (line 1929) | function makeKey_381(str) {
  function makeKey_382 (line 1932) | function makeKey_382(str) {
  function makeKey_383 (line 1935) | function makeKey_383(str) {
  function makeKey_384 (line 1938) | function makeKey_384(str) {
  function makeKey_385 (line 1941) | function makeKey_385(str) {
  function makeKey_386 (line 1944) | function makeKey_386(str) {
  function makeKey_387 (line 1947) | function makeKey_387(str) {
  function makeKey_388 (line 1950) | function makeKey_388(str) {
  function makeKey_389 (line 1953) | function makeKey_389(str) {
  function makeKey_390 (line 1956) | function makeKey_390(str) {
  function makeKey_391 (line 1959) | function makeKey_391(str) {
  function makeKey_392 (line 1962) | function makeKey_392(str) {
  function makeKey_393 (line 1965) | function makeKey_393(str) {
  function makeKey_394 (line 1968) | function makeKey_394(str) {
  function makeKey_395 (line 1971) | function makeKey_395(str) {
  function makeKey_396 (line 1974) | function makeKey_396(str) {
  function makeKey_397 (line 1977) | function makeKey_397(str) {
  function makeKey_398 (line 1980) | function makeKey_398(str) {
  function makeKey_399 (line 1983) | function makeKey_399(str) {
  function getvl5x (line 1999) | function getvl5x(cookie) {

FILE: Wenshu_Project/Wenshu/spiders/wenshu.py
  class WenshuSpider (line 6) | class WenshuSpider(scrapy.Spider):
    method __init__ (line 11) | def __init__(self, **kwargs):
    method parse (line 22) | def parse(self, response):
    method get_count (line 36) | def get_count(self, response):
    method get_content (line 63) | def get_content(self, response):
    method get_docid (line 91) | def get_docid(self, response):
    method get_detail (line 105) | def get_detail(self, response):
Condensed preview — 16 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (176K chars).
[
  {
    "path": ".gitattributes",
    "chars": 29,
    "preview": "*.js linguist-language=python"
  },
  {
    "path": "LICENSE",
    "chars": 1068,
    "preview": "MIT License\n\nCopyright (c) 2018 Henryhaohao\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
  },
  {
    "path": "README.md",
    "chars": 2387,
    "preview": "Scrapy框架爬取中国裁判文书网案件数据 ![enter image description here](Pic/logo.png)\n===========================\n![](https://img.shields."
  },
  {
    "path": "Wenshu_Project/Wenshu/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "Wenshu_Project/Wenshu/cmdline.py",
    "chars": 299,
    "preview": "# !/user/bin/env python\n# -*- coding:utf-8 -*- \n# time: 2018/10/18--17:11\n__author__ = 'Henry'\n\n\nfrom scrapy import cmdl"
  },
  {
    "path": "Wenshu_Project/Wenshu/items.py",
    "chars": 800,
    "preview": "# -*- coding: utf-8 -*-\n\n# Define here the models for your scraped items\n#\n# See documentation in:\n# https://doc.scrapy."
  },
  {
    "path": "Wenshu_Project/Wenshu/middlewares.py",
    "chars": 7645,
    "preview": "# -*- coding: utf-8 -*-\n\n# Define here the models for your spider middleware\n#\n# See documentation in:\n# https://doc.scr"
  },
  {
    "path": "Wenshu_Project/Wenshu/pipelines.py",
    "chars": 2849,
    "preview": "# -*- coding: utf-8 -*-\n\n# Define your item pipelines here\n#\n# Don't forget to add your pipeline to the ITEM_PIPELINES s"
  },
  {
    "path": "Wenshu_Project/Wenshu/settings.py",
    "chars": 12182,
    "preview": "# -*- coding: utf-8 -*-\n\n# Scrapy settings for Wenshu project\n#\n# For simplicity, this file contains only settings consi"
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/__init__.py",
    "chars": 161,
    "preview": "# This package will contain the spiders of your Scrapy project\n#\n# Please refer to the documentation for information on "
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/get_docid.js",
    "chars": 62963,
    "preview": "window = {};\n//AES\nvar CryptoJS = CryptoJS || function (u, p) {\n    var d = {}\n        , l = d.lib = {}\n        , s = fu"
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/get_vl5x.js",
    "chars": 67487,
    "preview": "//hex_sha1\nvar hexcase = 0;\n/*   hex   output   format.   0   -   lowercase;   1   -   uppercase                 */\nvar "
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/wenshu.py",
    "chars": 7269,
    "preview": "# -*- coding: utf-8 -*-\nimport scrapy, time, json, re, math, execjs\nfrom Wenshu.items import WenshuCaseItem\n\n\nclass Wens"
  },
  {
    "path": "Wenshu_Project/__init__.py",
    "chars": 94,
    "preview": "# !/user/bin/env python\n# -*- coding:utf-8 -*- \n# time: 2018/10/19--22:09\n__author__ = 'Henry'"
  },
  {
    "path": "Wenshu_Project/requirements.txt",
    "chars": 62,
    "preview": "pymongo==3.6.1\nScrapy==1.5.0\nrequests==2.20.0\nPyExecJS==1.5.1\n"
  },
  {
    "path": "Wenshu_Project/scrapy.cfg",
    "chars": 255,
    "preview": "# Automatically created by: scrapy startproject\n#\n# For more information about the [deploy] section see:\n# https://scrap"
  }
]

About this extraction

This page contains the full source code of the Henryhaohao/Wenshu_Spider GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 16 files (161.7 KB), approximately 55.6k tokens, and a symbol index with 484 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!