[
  {
    "path": ".gitattributes",
    "content": "*.js linguist-language=python"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Henryhaohao\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "Scrapy框架爬取中国裁判文书网案件数据 ![enter image description here](Pic/logo.png)\n===========================\n![](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) \n### 中国裁判文书网 - http://wenshu.court.gov.cn/\n|Author|:sunglasses:Henryhaohao:sunglasses:|\n|---|---\n|Email|:hearts:1073064953@qq.com:hearts:\n\n      \n****\n## :dolphin:声明\n### 软件均仅用于学习交流，请勿用于任何商业用途！感谢大家！ \n## :dolphin:介绍\n### 该项目为Scrapy框架爬取[中国裁判文书网](http://wenshu.court.gov.cn/)案件数据（2018-10-20最新版）\n- 项目文件: Wenshu_Project\n- 运行须知: \n> **数据库配置** : 运行前根据自己需要修改settings.py中的MongoDB数据库的配置<br>\n\n> **反爬问题** : 由于文书网的反爬监控很严格（一级验证码,二级验证码,JavaScript反爬,IP检测...）,所有采用[阿布云动态隧道代理](https://www.abuyun.com/)方案,每一次request请求都是不同的IP,这样就不会触发反爬检测了~:sunglasses:。还是挺好用的,基本上每个IP都可以用,主要也还方便,直接用它的代理服务器发出请求,不用像一般的代理IP那样还需要取出IP,再代入IP进行请求。代理相关配置在middlewares.py的类ProxyMiddleware中。<br>\n\n> **爬取策略问题** : 现在的文书网总量已经高达5千多万份了,但是每个筛选条件下只能查看20页,每页10条。本项目以爬取1996-2000年的所有文书为例,大家有好的爬取方案,可以自行修改Param参数即可。<br>\n \n> **速度问题** : 配置在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:\n## :dolphin:运行环境\n- **Version: Python3**<br>\n- **JS解析环境: Nodejs**<br>\n  有不少小伙伴向我反映运行后报错:execjs._exceptions.ProgramError: TypeError: 'key' 为 null 或不是对象<br>\n  解决方案如下:<br>\n        如果pyexecjs包没问题的话,那就是没有安装nodejs的问题; 因为你没有安装nodejs的话默认js解析环境是JScript, 但是项目中的js代码有的地方需要node环境才能运行, 所以需要装一下Nodejs再运行就好了;<br>\n        注意: nodejs安装完成后记得把IDE关闭重新打开，比如pycharm，不然IDE不会监测到jscript引擎的变化，导致依然报错\n        关于NodeJs安装可以参考这篇文章: https://www.cnblogs.com/liuqiyun/p/8133904.html\n## :dolphin:安装依赖库 \n```\npip3 install -r requirements.txt\n```\n## :dolphin:存储数据库\n> **Database: MongoDB**\n## :dolphin:**相关截图**\n> - **运行过程**<br><br>\n![enter image description here](Pic/run.gif)\n> - **数据截图**<br><br>\n![enter image description here](Pic/data.png)\n> - **阿布云**<br><br>\n![enter image description here](Pic/abuyun.png)\n![enter image description here](Pic/abuyun_1.png)\n## :dolphin:**总结**\n> **最后，如果你觉得这个项目不错或者对你有帮助，给个Star呗，也算是对我学习路上的一种鼓励！<br>\n 哈哈哈，感谢大家！笔芯哟~**:cupid::cupid:\n\n\n\n"
  },
  {
    "path": "Wenshu_Project/Wenshu/__init__.py",
    "content": ""
  },
  {
    "path": "Wenshu_Project/Wenshu/cmdline.py",
    "content": "# !/user/bin/env python\n# -*- coding:utf-8 -*- \n# time: 2018/10/18--17:11\n__author__ = 'Henry'\n\n\nfrom scrapy import cmdline\n\n\nif __name__ == '__main__':\n    #execute的参数类型为一个列表\n    # 写法一\n    cmdline.execute('scrapy crawl wenshu'.split())\n    # 写法二\n    # cmdline.execute(['scrapy', 'crawl', 'wenshu'])"
  },
  {
    "path": "Wenshu_Project/Wenshu/items.py",
    "content": "# -*- coding: utf-8 -*-\n\n# Define here the models for your scraped items\n#\n# See documentation in:\n# https://doc.scrapy.org/en/latest/topics/items.html\n\nimport scrapy\n\n\nclass WenshuCaseItem(scrapy.Item):\n    # define the fields for your item here like:\n    casecourt = scrapy.Field()\n    casecontent = scrapy.Field()\n    casetype = scrapy.Field()\n    # casereason = scrapy.Field()\n    casejudgedate = scrapy.Field()\n    # caseparty = scrapy.Field()\n    caseprocedure = scrapy.Field()\n    casenumber = scrapy.Field()\n    casenopublicreason = scrapy.Field()\n    casedocid = scrapy.Field()\n    casename = scrapy.Field()\n    casecontenttype = scrapy.Field()\n    caseuploaddate = scrapy.Field()\n    casedoctype = scrapy.Field()\n    caseclosemethod = scrapy.Field()\n    caseeffectivelevel = scrapy.Field()\n"
  },
  {
    "path": "Wenshu_Project/Wenshu/middlewares.py",
    "content": "# -*- coding: utf-8 -*-\n\n# Define here the models for your spider middleware\n#\n# See documentation in:\n# https://doc.scrapy.org/en/latest/topics/spider-middleware.html\n\nfrom scrapy import signals\nimport random, requests, logging, base64\n\n\nclass RandomUserAgentMiddleware(object):\n    def __init__(self, agents):\n        self.agents = agents\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        return cls(crawler.settings.getlist('USER_AGENTS'))\n\n    def process_request(self, request, spider):\n        # print(\"********Current UserAgent********\" + random.choice(self.agents))\n        request.headers.setdefault('User-Agent', random.choice(self.agents))\n\n\n# 法一:连接阿布云动态代理隧道(付费:IP质量好)\nclass ProxyMiddleware(object):\n    def __init__(self):\n        # 阿布云代理服务器\n        self.proxyServer = \"http://http-dyn.abuyun.com:9020\"\n        # 代理隧道验证信息\n        proxyUser = \"***在此填入阿布云通行证书***\"\n        proxyPass = \"***在此填入阿布云通行密钥***\"\n        self.proxyAuth = \"Basic \" + base64.urlsafe_b64encode(bytes((proxyUser + \":\" + proxyPass), \"ascii\")).decode(\"utf8\") # Python3\n        # self.proxyAuth = \"Basic \" + base64.b64encode(proxyUser + \":\" + proxyPass) # Python2\n\n    def process_request(self, request, spider):\n        '''处理请求request'''\n        request.headers['Proxy-Authorization'] = self.proxyAuth\n        request.meta['proxy'] = self.proxyServer\n\n    def process_response(self, request, response, spider):\n        '''处理返回的response'''\n        # print(response.url)\n        html = response.body.decode()\n        if response.status != 200 or 'remind key' in html or 'remind' in html or '请开启JavaScript' in html or '服务不可用' in html:\n            # print('正在重新请求************')\n            new_request = request.copy()\n            new_request.dont_filter = True\n            return new_request\n        else:\n            return response\n\n    def process_exception(self, request, exception, spider):\n        new_request = request.copy()\n        new_request.dont_filter = True\n        return new_request\n\n\n# 法二:连接本地自己维护的代理池(免费:但是IP质量不好,很容易被ban掉)\n# class ProxyMiddleware(object):\n#     def __init__(self, PROXY_POOL_URL, DELETE_PROXY_URL):\n#\n#     # self.PROXY_POOL_URL = PROXY_POOL_URL\n#     # self.DELETE_PROXY_URL = DELETE_PROXY_URL\n#\n#     @classmethod\n#     def from_crawler(cls, crawler):\n#         return cls(\n#             crawler.settings.get('PROXY_POOL_URL'),\n#             crawler.settings.get('DELETE_PROXY_URL')\n#         )\n#\n#     def process_request(self, request, spider):\n#         '''处理请求request'''\n#         # request.meta['proxy'] = 'http://' + self.get_randomproxy()\n#\n#     def process_response(self, request, response, spider):\n#         '''处理返回的response'''\n#         # if response.status != 200 or response.body in ['\"remind key\"', 'remind'] or '请开启JavaScript' in response.body:\n#         print(response.url)\n#         # print(response.body)\n#\n#         # if response.status != 200 or b'remind' in response.body or b\"[]\" in response.body or b\"window.location.href\" in response.body:\n#         # # if response.status != 200 or 'VisitRemind' in response.url: # 'VisitRemind' in response.url:出现一级验证码\n#         #     print('请求太快,该IP已被封禁...尝试切换新的IP...')\n#         #     if 'proxy' in request.meta :\n#         #         # print(request.meta['proxy'])\n#         #         self.delete_proxy(request.meta['proxy'].split('//')[1]) # 请求失败,删除此IP\n#         #     proxy = self.get_randomproxy()\n#         #     print(\"********Current Proxy********\" + str(proxy))\n#         #     request.meta['proxy'] = 'http://' + proxy # 切换新IP重新请求\n#         #     return request\n#         return response\n#\n#     def get_randomproxy(self):\n#         '''随机从IP池中获取代理'''\n#         try:\n#             response = requests.get(self.PROXY_POOL_URL)\n#             if response.status_code == 200:\n#                 return response.text\n#         except:\n#             # return None\n#             return self.get_randomproxy()\n#\n#     def delete_proxy(self, proxy):\n#         '''请求失败,从代理池中删除此IP'''\n#         try:\n#             response = requests.get(self.DELETE_PROXY_URL + proxy)\n#             if response.text == 1:\n#                 logging.info('删除IP成功')\n#                 print('删除IP成功')\n#         except:\n#             logging.info('删除IP失败')\n#             print('删除IP失败')\n\n\nclass WenshuSpiderMiddleware(object):\n    # Not all methods need to be defined. If a method is not defined,\n    # scrapy acts as if the spider middleware does not modify the\n    # passed objects.\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        # This method is used by Scrapy to create your spiders.\n        s = cls()\n        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)\n        return s\n\n    def process_spider_input(self, response, spider):\n        # Called for each response that goes through the spider\n        # middleware and into the spider.\n\n        # Should return None or raise an exception.\n        return None\n\n    def process_spider_output(self, response, result, spider):\n        # Called with the results returned from the Spider, after\n        # it has processed the response.\n\n        # Must return an iterable of Request, dict or Item objects.\n        for i in result:\n            yield i\n\n    def process_spider_exception(self, response, exception, spider):\n        # Called when a spider or process_spider_input() method\n        # (from other spider middleware) raises an exception.\n\n        # Should return either None or an iterable of Response, dict\n        # or Item objects.\n        pass\n\n    def process_start_requests(self, start_requests, spider):\n        # Called with the start requests of the spider, and works\n        # similarly to the process_spider_output() method, except\n        # that it doesn’t have a response associated.\n\n        # Must return only requests (not items).\n        for r in start_requests:\n            yield r\n\n    def spider_opened(self, spider):\n        spider.logger.info('Spider opened: %s' % spider.name)\n\n\nclass WenshuDownloaderMiddleware(object):\n    # Not all methods need to be defined. If a method is not defined,\n    # scrapy acts as if the downloader middleware does not modify the\n    # passed objects.\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        # This method is used by Scrapy to create your spiders.\n        s = cls()\n        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)\n        return s\n\n    def process_request(self, request, spider):\n        # Called for each request that goes through the downloader\n        # middleware.\n\n        # Must either:\n        # - return None: continue processing this request\n        # - or return a Response object\n        # - or return a Request object\n        # - or raise IgnoreRequest: process_exception() methods of\n        #   installed downloader middleware will be called\n        return None\n\n    def process_response(self, request, response, spider):\n        # Called with the response returned from the downloader.\n\n        # Must either;\n        # - return a Response object\n        # - return a Request object\n        # - or raise IgnoreRequest\n        return response\n\n    def process_exception(self, request, exception, spider):\n        # Called when a download handler or a process_request()\n        # (from other downloader middleware) raises an exception.\n\n        # Must either:\n        # - return None: continue processing this exception\n        # - return a Response object: stops process_exception() chain\n        # - return a Request object: stops process_exception() chain\n        pass\n\n    def spider_opened(self, spider):\n        spider.logger.info('Spider opened: %s' % spider.name)\n"
  },
  {
    "path": "Wenshu_Project/Wenshu/pipelines.py",
    "content": "# -*- coding: utf-8 -*-\n\n# Define your item pipelines here\n#\n# Don't forget to add your pipeline to the ITEM_PIPELINES setting\n# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html\n\nimport pymongo,time\nfrom pymongo.errors import DuplicateKeyError\nfrom scrapy.conf import settings\n\n\n# 1.简单同步存储item\nclass WenshuPipeline(object):\n    def __init__(self):\n        host = settings['MONGODB_HOST']\n        port = settings['MONGODB_PORT']\n        dbname = settings['MONGODB_DBNAME']\n        docname = settings['MONGODB_DOCNAME']\n        self.client = pymongo.MongoClient(host=host,port=port)\n        db = self.client[dbname]\n        db[docname].ensure_index('casedocid', unique=True)  # 设置文书ID为唯一索引,避免插入重复数据\n        self.post = db[docname]\n\n    def close_spider(self, spider):\n        self.client.close()\n\n    def process_item(self, item, spider):\n        '''插入数据'''\n        try:\n            data = dict(item)\n            self.post.insert_one(data)\n            return item\n        except DuplicateKeyError:\n            # 索引相同,即为重复数据,捕获错误\n            spider.logger.debug('Duplicate key error collection')\n            return item\n\n\n# 2.异步存储item - 不行!插入不了数据! (参考:https://zhuanlan.zhihu.com/p/44003499)\n# from twisted.internet import defer, reactor\n# class WenshuPipeline(object):\n#     def __init__(self, mongo_host, mongo_port, mongo_db, mongo_doc):\n#         self.mongo_host = mongo_host\n#         self.mongo_port = mongo_port\n#         self.mongo_db = mongo_db\n#         self.mongo_doc = mongo_doc\n#\n#     @classmethod\n#     def from_crawler(cls, crawler):\n#         return cls(\n#             mongo_host=crawler.settings.get('MONGODB_HOST'),\n#             mongo_port=crawler.settings.get('MONGODB_PORT'),\n#             mongo_db=crawler.settings.get('MONGODB_DBNAME'),\n#             mongo_doc=crawler.settings.get('MONGODB_DOCNAME'),\n#         )\n#\n#     def open_spider(self, spider):\n#         self.client = pymongo.MongoClient(host=self.mongo_host,port=self.mongo_port)\n#         self.mongodb = self.client[self.mongo_db]\n#         self.mongodb[self.mongo_doc].create_index('id', unique=True) # 创建索引,避免插入数据\n#\n#     def close_spider(self, spider):\n#         self.client.close()\n#\n#     # 下面的操作是重点\n#     @defer.inlineCallbacks\n#     def process_item(self, item, spider):\n#         out = defer.Deferred()\n#         reactor.callInThread(self._insert, item, out, spider)\n#         yield out\n#         defer.returnValue(item)\n#         return item\n#\n#     def _insert(self, item, out, spider):\n#         time.sleep(10)\n#         try:\n#             self.mongodb[self.mongo_doc].insert_one(dict(item))\n#             reactor.callFromThread(out.callback, item)\n#         except DuplicateKeyError:\n#             # 索引相同,即为重复数据,捕获错误\n#             spider.logger.debug('duplicate key error collection')\n#             reactor.callFromThread(out.callback, item)"
  },
  {
    "path": "Wenshu_Project/Wenshu/settings.py",
    "content": "# -*- coding: utf-8 -*-\n\n# Scrapy settings for Wenshu project\n#\n# For simplicity, this file contains only settings considered important or\n# commonly used. You can find more settings consulting the documentation:\n#\n#     https://doc.scrapy.org/en/latest/topics/settings.html\n#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html\n#     https://doc.scrapy.org/en/latest/topics/spider-middleware.html\nimport time\n\nBOT_NAME = 'Wenshu'\n\nSPIDER_MODULES = ['Wenshu.spiders']\nNEWSPIDER_MODULE = 'Wenshu.spiders'\n\n#连接MongoDB数据库\nMONGODB_HOST = '127.0.0.1'\nMONGODB_PORT = 27017\nMONGODB_DBNAME = 'Henry' #数据库名\nMONGODB_DOCNAME = 'wenshu' #表名\n\n# 设置本地的IP代理池地址\n# PROXY_POOL_URL = 'http://localhost:5555/random'\n# DELETE_PROXY_URL = 'http://localhost:5555/del/'\n\n# Crawl responsibly by identifying yourself (and your website) on the user-agent\n#USER_AGENT = 'Wenshu (+http://www.yourdomain.com)'\n\n# 请求失败重试\nRETRY_ENABLED = True #是否开启retry\nRETRY_TIMES = 3  #重试次数\n# RETRY_HTTP_CODECS  #遇到什么http code时需要重试，默认是500,502,503,504,408，其他的，网络连接超时等问题也会自动retry的\n\n# 中断后继续执行\nJOB_DIR = 'wenshujob'\n\n# Obey robots.txt rules\nROBOTSTXT_OBEY = False\n\n# 设置参数教程:https://blog.csdn.net/q_an1314/article/details/51245011\n# Configure maximum concurrent requests performed by Scrapy (default: 16)\n# CONCURRENT_REQUESTS = 300 # 由Scrapy下载程序执行的并发（即同时）请求的最大数量(选择一个能使CPU占用率在80%-90%的并发数)\nCONCURRENT_REQUESTS_PER_SPIDER = 5 # 线程数(因为阿布云设置的是每秒最多5个请求,有钱可以加到100的并发)\nCONCURRENT_REQUESTS_PER_DOMAIN = 1000000 # 任何单个域执行的并发（即同时）请求的最大数量\n# CONCURRENT_REQUESTS_PER_IP = 0 # 任何单个IP执行的并发（即同时）请求的最大数量 ; 默认值（0），这样就禁用了对每个IP的限制\n\n# 启用DNS内存缓存\nDNSCACHE_ENABLED = True\n\n# Configure a delay for requests for the same website (default: 0)\n# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay\n# See also autothrottle settings and docs\n\n# 下载延迟\nDOWNLOAD_DELAY = 0 # scrapy的并发请求，只有在delay=0时才能实现;心疼服务器的可以加点延迟~\n# 下载超时\nDOWNLOAD_TIMEOUT = 8 # 减小下载超时能让卡住的连接能被快速的放弃并解放处理其他站点的能力,默认15秒\n# 但是减小下载超时可能会引发错误:\n# TimeoutError: User timeout caused connection failure: Getting http://xxx.com. took longer than 15.0 seconds.\n\n# The download delay setting will honor only one of:\n#CONCURRENT_REQUESTS_PER_DOMAIN = 16\n#CONCURRENT_REQUESTS_PER_IP = 16\n\n# Disable cookies (enabled by default)\nCOOKIES_ENABLED = False\n\n# Disable Telnet Console (enabled by default)\n#TELNETCONSOLE_ENABLED = False\n\n# 禁止重定向\nREDIRECT_ENABLED = False\n\n# Override the default request headers:\nDEFAULT_REQUEST_HEADERS = {\n    'Host':'wenshu.court.gov.cn',\n    'Origin':'http://wenshu.court.gov.cn',\n}\n\n# Enable or disable spider middlewares\n# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html\n# SPIDER_MIDDLEWARES = {\n#    'Wenshu.middlewares.WenshuSpiderMiddleware': 543,\n# }\n\n# Enable or disable downloader middlewares\n# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html\nDOWNLOADER_MIDDLEWARES = {\n    # 'Wenshu.middlewares.WenshuDownloaderMiddleware': 543,\n    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 200,\n    'Wenshu.middlewares.ProxyMiddleware': 300,\n    'Wenshu.middlewares.RandomUserAgentMiddleware': 1,\n}\n\n# Enable or disable extensions\n# See https://doc.scrapy.org/en/latest/topics/extensions.html\n#EXTENSIONS = {\n#    'scrapy.extensions.telnet.TelnetConsole': None,\n#}\n\n# Configure item pipelines\n# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html\nITEM_PIPELINES = {\n   'Wenshu.pipelines.WenshuPipeline': 300,\n}\n\n# Enable and configure the AutoThrottle extension (disabled by default)\n# See https://doc.scrapy.org/en/latest/topics/autothrottle.html\n#AUTOTHROTTLE_ENABLED = True\n# The initial download delay\n#AUTOTHROTTLE_START_DELAY = 5\n# The maximum download delay to be set in case of high latencies\n#AUTOTHROTTLE_MAX_DELAY = 60\n# The average number of requests Scrapy should be sending in parallel to\n# each remote server\n#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0\n# Enable showing throttling stats for every response received:\n#AUTOTHROTTLE_DEBUG = False\n\n# Enable and configure HTTP caching (disabled by default)\n# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings\n#HTTPCACHE_ENABLED = True\n#HTTPCACHE_EXPIRATION_SECS = 0\n#HTTPCACHE_DIR = 'httpcache'\n#HTTPCACHE_IGNORE_HTTP_CODES = []\n#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'\n\nUSER_AGENTS = [\n    \"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\",\n    \"Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27\",\n    \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1\",\n    \"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2\",\n    \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7\",\n    \"Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre\",\n    \"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10\",\n    \"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)\",\n    \"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5\",\n    \"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)\",\n    \"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\",\n    \"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\",\n    \"Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0\",\n    \"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2\",\n    \"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1\",\n    \"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre\",\n    \"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )\",\n    \"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)\",\n    \"Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a\",\n    \"Mozilla/2.02E (Win95; U)\",\n    \"Mozilla/3.01Gold (Win95; I)\",\n    \"Mozilla/4.8 [en] (Windows NT 5.1; U)\",\n    \"Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522  (KHTML, like Gecko) Safari/419.3\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n    \"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\",\n]\n\n# 设置日志\n# 日志文件\n# LOG_FILE = 'wenshu.log' # 最好为爬虫名称\nLOG_FILE = BOT_NAME + '_' + time.strftime(\"%Y%m%d\", time.localtime()) + '.log'\n\n# 日志等级\nLOG_LEVEL = 'INFO'\n\n# 是否启用日志（创建日志后，不需开启，进行配置）\nLOG_ENABLED = True  # （默认为True，启用日志）\n\n# 日志编码\nLOG_ENCODING = 'utf-8'\n\n# 如果是True ，进程当中，所有标准输出（包括错误）将会被重定向到log中;例如：在爬虫代码中的 print（）\nLOG_STDOUT = False  # 默认为False\n"
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/__init__.py",
    "content": "# This package will contain the spiders of your Scrapy project\n#\n# Please refer to the documentation for information on how to create and manage\n# your spiders.\n"
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/get_docid.js",
    "content": "window = {};\n//AES\nvar CryptoJS = CryptoJS || function (u, p) {\n    var d = {}\n        , l = d.lib = {}\n        , s = function () {\n    }\n        , t = l.Base = {\n        extend: function (a) {\n            s.prototype = this;\n            var c = new s;\n            a && c.mixIn(a);\n            c.hasOwnProperty(\"init\") || (c.init = function () {\n                    c.$super.init.apply(this, arguments)\n                }\n            );\n            c.init.prototype = c;\n            c.$super = this;\n            return c\n        },\n        create: function () {\n            var a = this.extend();\n            a.init.apply(a, arguments);\n            return a\n        },\n        init: function () {\n        },\n        mixIn: function (a) {\n            for (var c in a)\n                a.hasOwnProperty(c) && (this[c] = a[c]);\n            a.hasOwnProperty(\"toString\") && (this.toString = a.toString)\n        },\n        clone: function () {\n            return this.init.prototype.extend(this)\n        }\n    }\n        , r = l.WordArray = t.extend({\n        init: function (a, c) {\n            a = this.words = a || [];\n            this.sigBytes = c != p ? c : 4 * a.length\n        },\n        toString: function (a) {\n            return (a || v).stringify(this)\n        },\n        concat: function (a) {\n            var c = this.words\n                , e = a.words\n                , j = this.sigBytes;\n            a = a.sigBytes;\n            this.clamp();\n            if (j % 4)\n                for (var k = 0; k < a; k++)\n                    c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);\n            else if (65535 < e.length)\n                for (k = 0; k < a; k += 4)\n                    c[j + k >>> 2] = e[k >>> 2];\n            else\n                c.push.apply(c, e);\n            this.sigBytes += a;\n            return this\n        },\n        clamp: function () {\n            var a = this.words\n                , c = this.sigBytes;\n            a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);\n            a.length = u.ceil(c / 4)\n        },\n        clone: function () {\n            var a = t.clone.call(this);\n            a.words = this.words.slice(0);\n            return a\n        },\n        random: function (a) {\n            for (var c = [], e = 0; e < a; e += 4)\n                c.push(4294967296 * u.random() | 0);\n            return new r.init(c, a)\n        }\n    })\n        , w = d.enc = {}\n        , v = w.Hex = {\n        stringify: function (a) {\n            var c = a.words;\n            a = a.sigBytes;\n            for (var e = [], j = 0; j < a; j++) {\n                var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;\n                e.push((k >>> 4).toString(16));\n                e.push((k & 15).toString(16))\n            }\n            return e.join(\"\")\n        },\n        parse: function (a) {\n            for (var c = a.length, e = [], j = 0; j < c; j += 2)\n                e[j >>> 3] |= parseInt(a.substr(j, 2), 16) << 24 - 4 * (j % 8);\n            return new r.init(e, c / 2)\n        }\n    }\n        , b = w.Latin1 = {\n        stringify: function (a) {\n            var c = a.words;\n            a = a.sigBytes;\n            for (var e = [], j = 0; j < a; j++)\n                e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));\n            return e.join(\"\")\n        },\n        parse: function (a) {\n            for (var c = a.length, e = [], j = 0; j < c; j++)\n                e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);\n            return new r.init(e, c)\n        }\n    }\n        , x = w.Utf8 = {\n        stringify: function (a) {\n            try {\n                return decodeURIComponent(escape(b.stringify(a)))\n            } catch (c) {\n                throw Error(\"Malformed UTF-8 data\");\n            }\n        },\n        parse: function (a) {\n            return b.parse(unescape(encodeURIComponent(a)))\n        }\n    }\n        , q = l.BufferedBlockAlgorithm = t.extend({\n        reset: function () {\n            this._data = new r.init;\n            this._nDataBytes = 0\n        },\n        _append: function (a) {\n            \"string\" == typeof a && (a = x.parse(a));\n            this._data.concat(a);\n            this._nDataBytes += a.sigBytes\n        },\n        _process: function (a) {\n            var c = this._data\n                , e = c.words\n                , j = c.sigBytes\n                , k = this.blockSize\n                , b = j / (4 * k)\n                , b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0);\n            a = b * k;\n            j = u.min(4 * a, j);\n            if (a) {\n                for (var q = 0; q < a; q += k)\n                    this._doProcessBlock(e, q);\n                q = e.splice(0, a);\n                c.sigBytes -= j\n            }\n            return new r.init(q, j)\n        },\n        clone: function () {\n            var a = t.clone.call(this);\n            a._data = this._data.clone();\n            return a\n        },\n        _minBufferSize: 0\n    });\n    l.Hasher = q.extend({\n        cfg: t.extend(),\n        init: function (a) {\n            this.cfg = this.cfg.extend(a);\n            this.reset()\n        },\n        reset: function () {\n            q.reset.call(this);\n            this._doReset()\n        },\n        update: function (a) {\n            this._append(a);\n            this._process();\n            return this\n        },\n        finalize: function (a) {\n            a && this._append(a);\n            return this._doFinalize()\n        },\n        blockSize: 16,\n        _createHelper: function (a) {\n            return function (b, e) {\n                return (new a.init(e)).finalize(b)\n            }\n        },\n        _createHmacHelper: function (a) {\n            return function (b, e) {\n                return (new n.HMAC.init(a, e)).finalize(b)\n            }\n        }\n    });\n    var n = d.algo = {};\n    return d\n}(Math);\n(function () {\n        var u = CryptoJS\n            , p = u.lib.WordArray;\n        u.enc.Base64 = {\n            stringify: function (d) {\n                var l = d.words\n                    , p = d.sigBytes\n                    , t = this._map;\n                d.clamp();\n                d = [];\n                for (var r = 0; r < p; r += 3)\n                    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++)\n                        d.push(t.charAt(w >>> 6 * (3 - v) & 63));\n                if (l = t.charAt(64))\n                    for (; d.length % 4;)\n                        d.push(l);\n                return d.join(\"\")\n            },\n            parse: function (d) {\n                var l = d.length\n                    , s = this._map\n                    , t = s.charAt(64);\n                t && (t = d.indexOf(t),\n                -1 != t && (l = t));\n                for (var t = [], r = 0, w = 0; w < l; w++)\n                    if (w % 4) {\n                        var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4)\n                            , b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);\n                        t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);\n                        r++\n                    }\n                return p.create(t, r)\n            },\n            _map: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n        }\n    }\n)();\n(function (u) {\n        function p(b, n, a, c, e, j, k) {\n            b = b + (n & a | ~n & c) + e + k;\n            return (b << j | b >>> 32 - j) + n\n        }\n\n        function d(b, n, a, c, e, j, k) {\n            b = b + (n & c | a & ~c) + e + k;\n            return (b << j | b >>> 32 - j) + n\n        }\n\n        function l(b, n, a, c, e, j, k) {\n            b = b + (n ^ a ^ c) + e + k;\n            return (b << j | b >>> 32 - j) + n\n        }\n\n        function s(b, n, a, c, e, j, k) {\n            b = b + (a ^ (n | ~c)) + e + k;\n            return (b << j | b >>> 32 - j) + n\n        }\n\n        for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)\n            b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;\n        r = r.MD5 = v.extend({\n            _doReset: function () {\n                this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878])\n            },\n            _doProcessBlock: function (q, n) {\n                for (var a = 0; 16 > a; a++) {\n                    var c = n + a\n                        , e = q[c];\n                    q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360\n                }\n                var a = this._hash.words\n                    , c = q[n + 0]\n                    , e = q[n + 1]\n                    , j = q[n + 2]\n                    , k = q[n + 3]\n                    , z = q[n + 4]\n                    , r = q[n + 5]\n                    , t = q[n + 6]\n                    , w = q[n + 7]\n                    , v = q[n + 8]\n                    , A = q[n + 9]\n                    , B = q[n + 10]\n                    , C = q[n + 11]\n                    , u = q[n + 12]\n                    , D = q[n + 13]\n                    , E = q[n + 14]\n                    , x = q[n + 15]\n                    , f = a[0]\n                    , m = a[1]\n                    , g = a[2]\n                    , h = a[3]\n                    , f = p(f, m, g, h, c, 7, b[0])\n                    , h = p(h, f, m, g, e, 12, b[1])\n                    , g = p(g, h, f, m, j, 17, b[2])\n                    , m = p(m, g, h, f, k, 22, b[3])\n                    , f = p(f, m, g, h, z, 7, b[4])\n                    , h = p(h, f, m, g, r, 12, b[5])\n                    , g = p(g, h, f, m, t, 17, b[6])\n                    , m = p(m, g, h, f, w, 22, b[7])\n                    , f = p(f, m, g, h, v, 7, b[8])\n                    , h = p(h, f, m, g, A, 12, b[9])\n                    , g = p(g, h, f, m, B, 17, b[10])\n                    , m = p(m, g, h, f, C, 22, b[11])\n                    , f = p(f, m, g, h, u, 7, b[12])\n                    , h = p(h, f, m, g, D, 12, b[13])\n                    , g = p(g, h, f, m, E, 17, b[14])\n                    , m = p(m, g, h, f, x, 22, b[15])\n                    , f = d(f, m, g, h, e, 5, b[16])\n                    , h = d(h, f, m, g, t, 9, b[17])\n                    , g = d(g, h, f, m, C, 14, b[18])\n                    , m = d(m, g, h, f, c, 20, b[19])\n                    , f = d(f, m, g, h, r, 5, b[20])\n                    , h = d(h, f, m, g, B, 9, b[21])\n                    , g = d(g, h, f, m, x, 14, b[22])\n                    , m = d(m, g, h, f, z, 20, b[23])\n                    , f = d(f, m, g, h, A, 5, b[24])\n                    , h = d(h, f, m, g, E, 9, b[25])\n                    , g = d(g, h, f, m, k, 14, b[26])\n                    , m = d(m, g, h, f, v, 20, b[27])\n                    , f = d(f, m, g, h, D, 5, b[28])\n                    , h = d(h, f, m, g, j, 9, b[29])\n                    , g = d(g, h, f, m, w, 14, b[30])\n                    , m = d(m, g, h, f, u, 20, b[31])\n                    , f = l(f, m, g, h, r, 4, b[32])\n                    , h = l(h, f, m, g, v, 11, b[33])\n                    , g = l(g, h, f, m, C, 16, b[34])\n                    , m = l(m, g, h, f, E, 23, b[35])\n                    , f = l(f, m, g, h, e, 4, b[36])\n                    , h = l(h, f, m, g, z, 11, b[37])\n                    , g = l(g, h, f, m, w, 16, b[38])\n                    , m = l(m, g, h, f, B, 23, b[39])\n                    , f = l(f, m, g, h, D, 4, b[40])\n                    , h = l(h, f, m, g, c, 11, b[41])\n                    , g = l(g, h, f, m, k, 16, b[42])\n                    , m = l(m, g, h, f, t, 23, b[43])\n                    , f = l(f, m, g, h, A, 4, b[44])\n                    , h = l(h, f, m, g, u, 11, b[45])\n                    , g = l(g, h, f, m, x, 16, b[46])\n                    , m = l(m, g, h, f, j, 23, b[47])\n                    , f = s(f, m, g, h, c, 6, b[48])\n                    , h = s(h, f, m, g, w, 10, b[49])\n                    , g = s(g, h, f, m, E, 15, b[50])\n                    , m = s(m, g, h, f, r, 21, b[51])\n                    , f = s(f, m, g, h, u, 6, b[52])\n                    , h = s(h, f, m, g, k, 10, b[53])\n                    , g = s(g, h, f, m, B, 15, b[54])\n                    , m = s(m, g, h, f, e, 21, b[55])\n                    , f = s(f, m, g, h, v, 6, b[56])\n                    , h = s(h, f, m, g, x, 10, b[57])\n                    , g = s(g, h, f, m, t, 15, b[58])\n                    , m = s(m, g, h, f, D, 21, b[59])\n                    , f = s(f, m, g, h, z, 6, b[60])\n                    , h = s(h, f, m, g, C, 10, b[61])\n                    , g = s(g, h, f, m, j, 15, b[62])\n                    , m = s(m, g, h, f, A, 21, b[63]);\n                a[0] = a[0] + f | 0;\n                a[1] = a[1] + m | 0;\n                a[2] = a[2] + g | 0;\n                a[3] = a[3] + h | 0\n            },\n            _doFinalize: function () {\n                var b = this._data\n                    , n = b.words\n                    , a = 8 * this._nDataBytes\n                    , c = 8 * b.sigBytes;\n                n[c >>> 5] |= 128 << 24 - c % 32;\n                var e = u.floor(a / 4294967296);\n                n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;\n                n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;\n                b.sigBytes = 4 * (n.length + 1);\n                this._process();\n                b = this._hash;\n                n = b.words;\n                for (a = 0; 4 > a; a++)\n                    c = n[a],\n                        n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;\n                return b\n            },\n            clone: function () {\n                var b = v.clone.call(this);\n                b._hash = this._hash.clone();\n                return b\n            }\n        });\n        t.MD5 = v._createHelper(r);\n        t.HmacMD5 = v._createHmacHelper(r)\n    }\n)(Math);\n(function () {\n        var u = CryptoJS\n            , p = u.lib\n            , d = p.Base\n            , l = p.WordArray\n            , p = u.algo\n            , s = p.EvpKDF = d.extend({\n            cfg: d.extend({\n                keySize: 4,\n                hasher: p.MD5,\n                iterations: 1\n            }),\n            init: function (d) {\n                this.cfg = this.cfg.extend(d)\n            },\n            compute: function (d, r) {\n                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                    n && s.update(n);\n                    var n = s.update(d).finalize(r);\n                    s.reset();\n                    for (var a = 1; a < p; a++)\n                        n = s.finalize(n),\n                            s.reset();\n                    b.concat(n)\n                }\n                b.sigBytes = 4 * q;\n                return b\n            }\n        });\n        u.EvpKDF = function (d, l, p) {\n            return s.create(p).compute(d, l)\n        }\n    }\n)();\nCryptoJS.lib.Cipher || function (u) {\n    var p = CryptoJS\n        , d = p.lib\n        , l = d.Base\n        , s = d.WordArray\n        , t = d.BufferedBlockAlgorithm\n        , r = p.enc.Base64\n        , w = p.algo.EvpKDF\n        , v = d.Cipher = t.extend({\n        cfg: l.extend(),\n        createEncryptor: function (e, a) {\n            return this.create(this._ENC_XFORM_MODE, e, a)\n        },\n        createDecryptor: function (e, a) {\n            return this.create(this._DEC_XFORM_MODE, e, a)\n        },\n        init: function (e, a, b) {\n            this.cfg = this.cfg.extend(b);\n            this._xformMode = e;\n            this._key = a;\n            this.reset()\n        },\n        reset: function () {\n            t.reset.call(this);\n            this._doReset()\n        },\n        process: function (e) {\n            this._append(e);\n            return this._process()\n        },\n        finalize: function (e) {\n            e && this._append(e);\n            return this._doFinalize()\n        },\n        keySize: 4,\n        ivSize: 4,\n        _ENC_XFORM_MODE: 1,\n        _DEC_XFORM_MODE: 2,\n        _createHelper: function (e) {\n            return {\n                encrypt: function (b, k, d) {\n                    return (\"string\" == typeof k ? c : a).encrypt(e, b, k, d)\n                },\n                decrypt: function (b, k, d) {\n                    return (\"string\" == typeof k ? c : a).decrypt(e, b, k, d)\n                }\n            }\n        }\n    });\n    d.StreamCipher = v.extend({\n        _doFinalize: function () {\n            return this._process(!0)\n        },\n        blockSize: 1\n    });\n    var b = p.mode = {}\n        , x = function (e, a, b) {\n        var c = this._iv;\n        c ? this._iv = u : c = this._prevBlock;\n        for (var d = 0; d < b; d++)\n            e[a + d] ^= c[d]\n    }\n        , q = (d.BlockCipherMode = l.extend({\n        createEncryptor: function (e, a) {\n            return this.Encryptor.create(e, a)\n        },\n        createDecryptor: function (e, a) {\n            return this.Decryptor.create(e, a)\n        },\n        init: function (e, a) {\n            this._cipher = e;\n            this._iv = a\n        }\n    })).extend();\n    q.Encryptor = q.extend({\n        processBlock: function (e, a) {\n            var b = this._cipher\n                , c = b.blockSize;\n            x.call(this, e, a, c);\n            b.encryptBlock(e, a);\n            this._prevBlock = e.slice(a, a + c)\n        }\n    });\n    q.Decryptor = q.extend({\n        processBlock: function (e, a) {\n            var b = this._cipher\n                , c = b.blockSize\n                , d = e.slice(a, a + c);\n            b.decryptBlock(e, a);\n            x.call(this, e, a, c);\n            this._prevBlock = d\n        }\n    });\n    b = b.CBC = q;\n    q = (p.pad = {}).Pkcs7 = {\n        pad: function (a, b) {\n            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)\n                l.push(d);\n            c = s.create(l, c);\n            a.concat(c)\n        },\n        unpad: function (a) {\n            a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255\n        }\n    };\n    d.BlockCipher = v.extend({\n        cfg: v.cfg.extend({\n            mode: b,\n            padding: q\n        }),\n        reset: function () {\n            v.reset.call(this);\n            var a = this.cfg\n                , b = a.iv\n                , a = a.mode;\n            if (this._xformMode == this._ENC_XFORM_MODE)\n                var c = a.createEncryptor;\n            else\n                c = a.createDecryptor,\n                    this._minBufferSize = 1;\n            this._mode = c.call(a, this, b && b.words)\n        },\n        _doProcessBlock: function (a, b) {\n            this._mode.processBlock(a, b)\n        },\n        _doFinalize: function () {\n            var a = this.cfg.padding;\n            if (this._xformMode == this._ENC_XFORM_MODE) {\n                a.pad(this._data, this.blockSize);\n                var b = this._process(!0)\n            } else\n                b = this._process(!0),\n                    a.unpad(b);\n            return b\n        },\n        blockSize: 4\n    });\n    var n = d.CipherParams = l.extend({\n        init: function (a) {\n            this.mixIn(a)\n        },\n        toString: function (a) {\n            return (a || this.formatter).stringify(this)\n        }\n    })\n        , b = (p.format = {}).OpenSSL = {\n        stringify: function (a) {\n            var b = a.ciphertext;\n            a = a.salt;\n            return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)\n        },\n        parse: function (a) {\n            a = r.parse(a);\n            var b = a.words;\n            if (1398893684 == b[0] && 1701076831 == b[1]) {\n                var c = s.create(b.slice(2, 4));\n                b.splice(0, 4);\n                a.sigBytes -= 16\n            }\n            return n.create({\n                ciphertext: a,\n                salt: c\n            })\n        }\n    }\n        , a = d.SerializableCipher = l.extend({\n        cfg: l.extend({\n            format: b\n        }),\n        encrypt: function (a, b, c, d) {\n            d = this.cfg.extend(d);\n            var l = a.createEncryptor(c, d);\n            b = l.finalize(b);\n            l = l.cfg;\n            return n.create({\n                ciphertext: b,\n                key: c,\n                iv: l.iv,\n                algorithm: a,\n                mode: l.mode,\n                padding: l.padding,\n                blockSize: a.blockSize,\n                formatter: d.format\n            })\n        },\n        decrypt: function (a, b, c, d) {\n            d = this.cfg.extend(d);\n            b = this._parse(b, d.format);\n            return a.createDecryptor(c, d).finalize(b.ciphertext)\n        },\n        _parse: function (a, b) {\n            return \"string\" == typeof a ? b.parse(a, this) : a\n        }\n    })\n        , p = (p.kdf = {}).OpenSSL = {\n        execute: function (a, b, c, d) {\n            d || (d = s.random(8));\n            a = w.create({\n                keySize: b + c\n            }).compute(a, d);\n            c = s.create(a.words.slice(b), 4 * c);\n            a.sigBytes = 4 * b;\n            return n.create({\n                key: a,\n                iv: c,\n                salt: d\n            })\n        }\n    }\n        , c = d.PasswordBasedCipher = a.extend({\n        cfg: a.cfg.extend({\n            kdf: p\n        }),\n        encrypt: function (b, c, d, l) {\n            l = this.cfg.extend(l);\n            d = l.kdf.execute(d, b.keySize, b.ivSize);\n            l.iv = d.iv;\n            b = a.encrypt.call(this, b, c, d.key, l);\n            b.mixIn(d);\n            return b\n        },\n        decrypt: function (b, c, d, l) {\n            l = this.cfg.extend(l);\n            c = this._parse(c, l.format);\n            d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);\n            l.iv = d.iv;\n            return a.decrypt.call(this, b, c, d.key, l)\n        }\n    })\n}();\n(function () {\n        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++)\n            a[c] = 128 > c ? c << 1 : c << 1 ^ 283;\n        for (var e = 0, j = 0, c = 0; 256 > c; c++) {\n            var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4\n                , k = k >>> 8 ^ k & 255 ^ 99;\n            l[e] = k;\n            s[k] = e;\n            var z = a[e]\n                , F = a[z]\n                , G = a[F]\n                , y = 257 * a[k] ^ 16843008 * k;\n            t[e] = y << 24 | y >>> 8;\n            r[e] = y << 16 | y >>> 16;\n            w[e] = y << 8 | y >>> 24;\n            v[e] = y;\n            y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;\n            b[k] = y << 24 | y >>> 8;\n            x[k] = y << 16 | y >>> 16;\n            q[k] = y << 8 | y >>> 24;\n            n[k] = y;\n            e ? (e = z ^ a[a[a[G ^ z]]],\n                j ^= a[a[j]]) : e = j = 1\n        }\n        var H = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]\n            , d = d.AES = p.extend({\n            _doReset: function () {\n                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++)\n                    if (j < d)\n                        e[j] = c[j];\n                    else {\n                        var k = e[j - 1];\n                        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,\n                            k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255],\n                            k ^= H[j / d | 0] << 24);\n                        e[j] = e[j - d] ^ k\n                    }\n                c = this._invKeySchedule = [];\n                for (d = 0; d < a; d++)\n                    j = a - d,\n                        k = d % 4 ? e[j] : e[j - 4],\n                        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]]\n            },\n            encryptBlock: function (a, b) {\n                this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l)\n            },\n            decryptBlock: function (a, c) {\n                var d = a[c + 1];\n                a[c + 1] = a[c + 3];\n                a[c + 3] = d;\n                this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s);\n                d = a[c + 1];\n                a[c + 1] = a[c + 3];\n                a[c + 3] = d\n            },\n            _doCryptBlock: function (a, b, c, d, e, j, l, f) {\n                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++)\n                     var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++]\n                         , s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++]\n                         , t = d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++]\n                         , n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++]\n                         , g = q\n                         , h = s\n                         , k = t;\n                q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];\n                s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];\n                t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];\n                n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];\n                a[b] = q;\n                a[b + 1] = s;\n                a[b + 2] = t;\n                a[b + 3] = n\n            },\n            keySize: 8\n        });\n        u.AES = p._createHelper(d)\n    }\n)();\n\n//RawDeflate.inflate\n(function (ctx) {\n    var zip_WSIZE = 32768;\t\t// Sliding Window size\n    var zip_STORED_BLOCK = 0;\n    var zip_STATIC_TREES = 1;\n    var zip_DYN_TREES = 2;\n    var zip_lbits = 9; \t\t// bits in base literal/length lookup table\n    var zip_dbits = 6; \t\t// bits in base distance lookup table\n    var zip_INBUFSIZ = 32768;\t// Input buffer size\n    var zip_INBUF_EXTRA = 64;\t// Extra buffer\n\n    var zip_slide;\n    var zip_wp;\t\t\t// current position in slide\n    var zip_fixed_tl = null;\t// inflate static\n    var zip_fixed_td;\t\t// inflate static\n    var zip_fixed_bl, zip_fixed_bd;\t// inflate static\n    var zip_bit_buf;\t\t// bit buffer\n    var zip_bit_len;\t\t// bits in bit buffer\n    var zip_method;\n    var zip_eof;\n    var zip_copy_leng;\n    var zip_copy_dist;\n    var zip_tl, zip_td;\t// literal/length and distance decoder tables\n    var zip_bl, zip_bd;\t// number of bits decoded by tl and td\n\n    var zip_inflate_data;\n    var zip_inflate_pos;\n    var zip_MASK_BITS = new Array(\n        0x0000,\n        0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,\n        0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff);\n// Tables for deflate from PKZIP's appnote.txt.\n    var zip_cplens = new Array( // Copy lengths for literal codes 257..285\n        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0);\n    var zip_cplext = new Array( // Extra bits for literal codes 257..285\n        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99); // 99==invalid\n    var zip_cpdist = new Array( // Copy offsets for distance codes 0..29\n        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n        8193, 12289, 16385, 24577);\n    var zip_cpdext = new Array( // Extra bits for distance codes\n        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n        12, 12, 13, 13);\n    var zip_border = new Array(  // Order of the bit length code lengths\n        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);\n\n    var zip_HuftList = function () {\n        this.next = null;\n        this.list = null;\n    }\n\n    var zip_HuftNode = function () {\n        this.e = 0; // number of extra bits or operation\n        this.b = 0; // number of bits in this code or subcode\n\n        // union\n        this.n = 0; // literal, length base, or distance base\n        this.t = null; // (zip_HuftNode) pointer to next level of table\n    }\n\n    var zip_HuftBuild = function (b,\t// code lengths in bits (all assumed <= BMAX)\n                                  n,\t// number of codes (assumed <= N_MAX)\n                                  s,\t// number of simple-valued codes (0..s-1)\n                                  d,\t// list of base values for non-simple codes\n                                  e,\t// list of extra bits for non-simple codes\n                                  mm\t// maximum lookup bits\n    ) {\n        this.BMAX = 16;   // maximum bit length of any code\n        this.N_MAX = 288; // maximum number of codes in any set\n        this.status = 0;\t// 0: success, 1: incomplete table, 2: bad input\n        this.root = null;\t// (zip_HuftList) starting table\n        this.m = 0;\t\t// maximum lookup bits, returns actual\n\n        {\n            var a;\t\t\t// counter for codes of length k\n            var c = new Array(this.BMAX + 1);\t// bit length count table\n            var el;\t\t\t// length of EOB code (value 256)\n            var f;\t\t\t// i repeats in table every f entries\n            var g;\t\t\t// maximum code length\n            var h;\t\t\t// table level\n            var i;\t\t\t// counter, current code\n            var j;\t\t\t// counter\n            var k;\t\t\t// number of bits in current code\n            var lx = new Array(this.BMAX + 1);\t// stack of bits per table\n            var p;\t\t\t// pointer into c[], b[], or v[]\n            var pidx;\t\t// index of p\n            var q;\t\t\t// (zip_HuftNode) points to current table\n            var r = new zip_HuftNode(); // table entry for structure assignment\n            var u = new Array(this.BMAX); // zip_HuftNode[BMAX][]  table stack\n            var v = new Array(this.N_MAX); // values in order of bit length\n            var w;\n            var x = new Array(this.BMAX + 1);// bit offsets, then code stack\n            var xp;\t\t\t// pointer into x or c\n            var y;\t\t\t// number of dummy codes added\n            var z;\t\t\t// number of entries in current table\n            var o;\n            var tail;\t\t// (zip_HuftList)\n\n            tail = this.root = null;\n            for (i = 0; i < c.length; i++)\n                c[i] = 0;\n            for (i = 0; i < lx.length; i++)\n                lx[i] = 0;\n            for (i = 0; i < u.length; i++)\n                u[i] = null;\n            for (i = 0; i < v.length; i++)\n                v[i] = 0;\n            for (i = 0; i < x.length; i++)\n                x[i] = 0;\n\n            // Generate counts for each bit length\n            el = n > 256 ? b[256] : this.BMAX; // set length of EOB code, if any\n            p = b;\n            pidx = 0;\n            i = n;\n            do {\n                c[p[pidx]]++;\t// assume all entries <= BMAX\n                pidx++;\n            } while (--i > 0);\n            if (c[0] == n) {\t// null input--all zero length codes\n                this.root = null;\n                this.m = 0;\n                this.status = 0;\n                return;\n            }\n\n            // Find minimum and maximum length, bound *m by those\n            for (j = 1; j <= this.BMAX; j++)\n                if (c[j] != 0)\n                    break;\n            k = j;\t\t\t// minimum code length\n            if (mm < j)\n                mm = j;\n            for (i = this.BMAX; i != 0; i--)\n                if (c[i] != 0)\n                    break;\n            g = i;\t\t\t// maximum code length\n            if (mm > i)\n                mm = i;\n\n            // Adjust last length count to fill out codes, if needed\n            for (y = 1 << j; j < i; j++, y <<= 1)\n                if ((y -= c[j]) < 0) {\n                    this.status = 2;\t// bad input: more codes than bits\n                    this.m = mm;\n                    return;\n                }\n            if ((y -= c[i]) < 0) {\n                this.status = 2;\n                this.m = mm;\n                return;\n            }\n            c[i] += y;\n\n            // Generate starting offsets into the value table for each length\n            x[1] = j = 0;\n            p = c;\n            pidx = 1;\n            xp = 2;\n            while (--i > 0)\t\t// note that i == g from above\n                x[xp++] = (j += p[pidx++]);\n\n            // Make a table of values in order of bit lengths\n            p = b;\n            pidx = 0;\n            i = 0;\n            do {\n                if ((j = p[pidx++]) != 0)\n                    v[x[j]++] = i;\n            } while (++i < n);\n            n = x[g];\t\t\t// set n to length of v\n\n            // Generate the Huffman codes and for each, make the table entries\n            x[0] = i = 0;\t\t// first Huffman code is zero\n            p = v;\n            pidx = 0;\t\t// grab values in bit order\n            h = -1;\t\t\t// no tables yet--level -1\n            w = lx[0] = 0;\t\t// no bits decoded yet\n            q = null;\t\t\t// ditto\n            z = 0;\t\t\t// ditto\n\n            // go through the bit lengths (k already is bits in shortest code)\n            for (; k <= g; k++) {\n                a = c[k];\n                while (a-- > 0) {\n                    // here i is the Huffman code of length k bits for value p[pidx]\n                    // make tables up to required level\n                    while (k > w + lx[1 + h]) {\n                        w += lx[1 + h]; // add bits already decoded\n                        h++;\n\n                        // compute minimum size table less than or equal to *m bits\n                        z = (z = g - w) > mm ? mm : z; // upper limit\n                        if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table\n                            // too few codes for k-w bit table\n                            f -= a + 1;\t// deduct codes from patterns left\n                            xp = k;\n                            while (++j < z) { // try smaller tables up to z bits\n                                if ((f <<= 1) <= c[++xp])\n                                    break;\t// enough codes to use up j bits\n                                f -= c[xp];\t// else deduct codes from patterns\n                            }\n                        }\n                        if (w + j > el && w < el)\n                            j = el - w;\t// make EOB code end at table\n                        z = 1 << j;\t// table entries for j-bit table\n                        lx[1 + h] = j; // set table size in stack\n\n                        // allocate and link in new table\n                        q = new Array(z);\n                        for (o = 0; o < z; o++) {\n                            q[o] = new zip_HuftNode();\n                        }\n\n                        if (tail == null)\n                            tail = this.root = new zip_HuftList();\n                        else\n                            tail = tail.next = new zip_HuftList();\n                        tail.next = null;\n                        tail.list = q;\n                        u[h] = q;\t// table starts after link\n\n                        /* connect to last table, if there is one */\n                        if (h > 0) {\n                            x[h] = i;\t\t// save pattern for backing up\n                            r.b = lx[h];\t// bits to dump before this table\n                            r.e = 16 + j;\t// bits in this table\n                            r.t = q;\t\t// pointer to this table\n                            j = (i & ((1 << w) - 1)) >> (w - lx[h]);\n                            u[h - 1][j].e = r.e;\n                            u[h - 1][j].b = r.b;\n                            u[h - 1][j].n = r.n;\n                            u[h - 1][j].t = r.t;\n                        }\n                    }\n\n                    // set up table entry in r\n                    r.b = k - w;\n                    if (pidx >= n)\n                        r.e = 99;\t\t// out of values--invalid code\n                    else if (p[pidx] < s) {\n                        r.e = (p[pidx] < 256 ? 16 : 15); // 256 is end-of-block code\n                        r.n = p[pidx++];\t// simple code is just the value\n                    } else {\n                        r.e = e[p[pidx] - s];\t// non-simple--look up in lists\n                        r.n = d[p[pidx++] - s];\n                    }\n\n                    // fill code-like entries with r //\n                    f = 1 << (k - w);\n                    for (j = i >> w; j < z; j += f) {\n                        q[j].e = r.e;\n                        q[j].b = r.b;\n                        q[j].n = r.n;\n                        q[j].t = r.t;\n                    }\n\n                    // backwards increment the k-bit code i\n                    for (j = 1 << (k - 1); (i & j) != 0; j >>= 1)\n                        i ^= j;\n                    i ^= j;\n\n                    // backup over finished tables\n                    while ((i & ((1 << w) - 1)) != x[h]) {\n                        w -= lx[h];\t\t// don't need to update q\n                        h--;\n                    }\n                }\n            }\n\n            /* return actual size of base table */\n            this.m = lx[1];\n\n            /* Return true (1) if we were given an incomplete table */\n            this.status = ((y != 0 && g != 1) ? 1 : 0);\n        }\n        /* end of constructor */\n    }\n\n\n    /* routines (inflate) */\n\n    var zip_GET_BYTE = function () {\n        if (zip_inflate_data.length == zip_inflate_pos)\n            return -1;\n        var charcode = zip_inflate_data.charCodeAt(zip_inflate_pos++);\n        return charcode & 0xff;\n    }\n\n    var zip_NEEDBITS = function (n) {\n        while (zip_bit_len < n) {\n            zip_bit_buf |= zip_GET_BYTE() << zip_bit_len;\n            zip_bit_len += 8;\n        }\n    }\n\n    var zip_GETBITS = function (n) {\n        return zip_bit_buf & zip_MASK_BITS[n];\n    }\n\n    var zip_DUMPBITS = function (n) {\n        zip_bit_buf >>= n;\n        zip_bit_len -= n;\n    }\n\n    var zip_inflate_codes = function (buff, off, size) {\n        /* inflate (decompress) the codes in a deflated (compressed) block.\n           Return an error code or zero if it all goes ok. */\n        var e;\t\t// table entry flag/number of extra bits\n        var t;\t\t// (zip_HuftNode) pointer to table entry\n        var n;\n\n        if (size == 0)\n            return 0;\n\n        // inflate the coded data\n        n = 0;\n        for (; ;) {\t\t\t// do until end of block\n            zip_NEEDBITS(zip_bl);\n            t = zip_tl.list[zip_GETBITS(zip_bl)];\n            e = t.e;\n            while (e > 16) {\n                if (e == 99)\n                    return -1;\n                zip_DUMPBITS(t.b);\n                e -= 16;\n                zip_NEEDBITS(e);\n                t = t.t[zip_GETBITS(e)];\n                e = t.e;\n            }\n            zip_DUMPBITS(t.b);\n\n            if (e == 16) {\t\t// then it's a literal\n                zip_wp &= zip_WSIZE - 1;\n                buff[off + n++] = zip_slide[zip_wp++] = t.n;\n                if (n == size)\n                    return size;\n                continue;\n            }\n\n            // exit if end of block\n            if (e == 15)\n                break;\n\n            // it's an EOB or a length\n\n            // get length of block to copy\n            zip_NEEDBITS(e);\n            zip_copy_leng = t.n + zip_GETBITS(e);\n            zip_DUMPBITS(e);\n\n            // decode distance of block to copy\n            zip_NEEDBITS(zip_bd);\n            t = zip_td.list[zip_GETBITS(zip_bd)];\n            e = t.e;\n\n            while (e > 16) {\n                if (e == 99)\n                    return -1;\n                zip_DUMPBITS(t.b);\n                e -= 16;\n                zip_NEEDBITS(e);\n                t = t.t[zip_GETBITS(e)];\n                e = t.e;\n            }\n            zip_DUMPBITS(t.b);\n            zip_NEEDBITS(e);\n            zip_copy_dist = zip_wp - t.n - zip_GETBITS(e);\n            zip_DUMPBITS(e);\n\n            // do the copy\n            while (zip_copy_leng > 0 && n < size) {\n                zip_copy_leng--;\n                zip_copy_dist &= zip_WSIZE - 1;\n                zip_wp &= zip_WSIZE - 1;\n                buff[off + n++] = zip_slide[zip_wp++]\n                    = zip_slide[zip_copy_dist++];\n            }\n\n            if (n == size)\n                return size;\n        }\n\n        zip_method = -1; // done\n        return n;\n    }\n\n    var zip_inflate_stored = function (buff, off, size) {\n        /* \"decompress\" an inflated type 0 (stored) block. */\n        var n;\n\n        // go to byte boundary\n        n = zip_bit_len & 7;\n        zip_DUMPBITS(n);\n\n        // get the length and its complement\n        zip_NEEDBITS(16);\n        n = zip_GETBITS(16);\n        zip_DUMPBITS(16);\n        zip_NEEDBITS(16);\n        if (n != ((~zip_bit_buf) & 0xffff))\n            return -1;\t\t\t// error in compressed data\n        zip_DUMPBITS(16);\n\n        // read and output the compressed data\n        zip_copy_leng = n;\n\n        n = 0;\n        while (zip_copy_leng > 0 && n < size) {\n            zip_copy_leng--;\n            zip_wp &= zip_WSIZE - 1;\n            zip_NEEDBITS(8);\n            buff[off + n++] = zip_slide[zip_wp++] =\n                zip_GETBITS(8);\n            zip_DUMPBITS(8);\n        }\n\n        if (zip_copy_leng == 0)\n            zip_method = -1; // done\n        return n;\n    }\n\n    var zip_inflate_fixed = function (buff, off, size) {\n        /* decompress an inflated type 1 (fixed Huffman codes) block.  We should\n           either replace this with a custom decoder, or at least precompute the\n           Huffman tables. */\n\n        // if first time, set up tables for fixed blocks\n        if (zip_fixed_tl == null) {\n            var i;\t\t\t// temporary variable\n            var l = new Array(288);\t// length list for huft_build\n            var h;\t// zip_HuftBuild\n\n            // literal table\n            for (i = 0; i < 144; i++)\n                l[i] = 8;\n            for (; i < 256; i++)\n                l[i] = 9;\n            for (; i < 280; i++)\n                l[i] = 7;\n            for (; i < 288; i++)\t// make a complete, but wrong code set\n                l[i] = 8;\n            zip_fixed_bl = 7;\n\n            h = new zip_HuftBuild(l, 288, 257, zip_cplens, zip_cplext,\n                zip_fixed_bl);\n            if (h.status != 0) {\n                alert(\"HufBuild error: \" + h.status);\n                return -1;\n            }\n            zip_fixed_tl = h.root;\n            zip_fixed_bl = h.m;\n\n            // distance table\n            for (i = 0; i < 30; i++)\t// make an incomplete code set\n                l[i] = 5;\n            zip_fixed_bd = 5;\n\n            h = new zip_HuftBuild(l, 30, 0, zip_cpdist, zip_cpdext, zip_fixed_bd);\n            if (h.status > 1) {\n                zip_fixed_tl = null;\n                alert(\"HufBuild error: \" + h.status);\n                return -1;\n            }\n            zip_fixed_td = h.root;\n            zip_fixed_bd = h.m;\n        }\n\n        zip_tl = zip_fixed_tl;\n        zip_td = zip_fixed_td;\n        zip_bl = zip_fixed_bl;\n        zip_bd = zip_fixed_bd;\n        return zip_inflate_codes(buff, off, size);\n    }\n\n    var zip_inflate_dynamic = function (buff, off, size) {\n        // decompress an inflated type 2 (dynamic Huffman codes) block.\n        var i;\t\t// temporary variables\n        var j;\n        var l;\t\t// last length\n        var n;\t\t// number of lengths to get\n        var t;\t\t// (zip_HuftNode) literal/length code table\n        var nb;\t\t// number of bit length codes\n        var nl;\t\t// number of literal/length codes\n        var nd;\t\t// number of distance codes\n        var ll = new Array(286 + 30); // literal/length and distance code lengths\n        var h;\t\t// (zip_HuftBuild)\n\n        for (i = 0; i < ll.length; i++)\n            ll[i] = 0;\n\n        // read in table lengths\n        zip_NEEDBITS(5);\n        nl = 257 + zip_GETBITS(5);\t// number of literal/length codes\n        zip_DUMPBITS(5);\n        zip_NEEDBITS(5);\n        nd = 1 + zip_GETBITS(5);\t// number of distance codes\n        zip_DUMPBITS(5);\n        zip_NEEDBITS(4);\n        nb = 4 + zip_GETBITS(4);\t// number of bit length codes\n        zip_DUMPBITS(4);\n        if (nl > 286 || nd > 30)\n            return -1;\t\t// bad lengths\n\n        // read in bit-length-code lengths\n        for (j = 0; j < nb; j++) {\n            zip_NEEDBITS(3);\n            ll[zip_border[j]] = zip_GETBITS(3);\n            zip_DUMPBITS(3);\n        }\n        for (; j < 19; j++)\n            ll[zip_border[j]] = 0;\n\n        // build decoding table for trees--single level, 7 bit lookup\n        zip_bl = 7;\n        h = new zip_HuftBuild(ll, 19, 19, null, null, zip_bl);\n        if (h.status != 0)\n            return -1;\t// incomplete code set\n\n        zip_tl = h.root;\n        zip_bl = h.m;\n\n        // read in literal and distance code lengths\n        n = nl + nd;\n        i = l = 0;\n        while (i < n) {\n            zip_NEEDBITS(zip_bl);\n            t = zip_tl.list[zip_GETBITS(zip_bl)];\n            j = t.b;\n            zip_DUMPBITS(j);\n            j = t.n;\n            if (j < 16)\t\t// length of code in bits (0..15)\n                ll[i++] = l = j;\t// save last length in l\n            else if (j == 16) {\t// repeat last length 3 to 6 times\n                zip_NEEDBITS(2);\n                j = 3 + zip_GETBITS(2);\n                zip_DUMPBITS(2);\n                if (i + j > n)\n                    return -1;\n                while (j-- > 0)\n                    ll[i++] = l;\n            } else if (j == 17) {\t// 3 to 10 zero length codes\n                zip_NEEDBITS(3);\n                j = 3 + zip_GETBITS(3);\n                zip_DUMPBITS(3);\n                if (i + j > n)\n                    return -1;\n                while (j-- > 0)\n                    ll[i++] = 0;\n                l = 0;\n            } else {\t\t// j == 18: 11 to 138 zero length codes\n                zip_NEEDBITS(7);\n                j = 11 + zip_GETBITS(7);\n                zip_DUMPBITS(7);\n                if (i + j > n)\n                    return -1;\n                while (j-- > 0)\n                    ll[i++] = 0;\n                l = 0;\n            }\n        }\n\n        // build the decoding tables for literal/length and distance codes\n        zip_bl = zip_lbits;\n        h = new zip_HuftBuild(ll, nl, 257, zip_cplens, zip_cplext, zip_bl);\n        if (zip_bl == 0)\t// no literals or lengths\n            h.status = 1;\n        if (h.status != 0) {\n            if (h.status == 1)\n                ;// **incomplete literal tree**\n            return -1;\t\t// incomplete code set\n        }\n        zip_tl = h.root;\n        zip_bl = h.m;\n\n        for (i = 0; i < nd; i++)\n            ll[i] = ll[i + nl];\n        zip_bd = zip_dbits;\n        h = new zip_HuftBuild(ll, nd, 0, zip_cpdist, zip_cpdext, zip_bd);\n        zip_td = h.root;\n        zip_bd = h.m;\n\n        if (zip_bd == 0 && nl > 257) {   // lengths but no distances\n            // **incomplete distance tree**\n            return -1;\n        }\n\n        if (h.status == 1) {\n            ;// **incomplete distance tree**\n        }\n        if (h.status != 0)\n            return -1;\n\n        // decompress until an end-of-block code\n        return zip_inflate_codes(buff, off, size);\n    }\n\n    var zip_inflate_start = function () {\n        var i;\n\n        if (zip_slide == null)\n            zip_slide = new Array(2 * zip_WSIZE);\n        zip_wp = 0;\n        zip_bit_buf = 0;\n        zip_bit_len = 0;\n        zip_method = -1;\n        zip_eof = false;\n        zip_copy_leng = zip_copy_dist = 0;\n        zip_tl = null;\n    }\n\n    var zip_inflate_internal = function (buff, off, size) {\n        // decompress an inflated entry\n        var n, i;\n\n        n = 0;\n        while (n < size) {\n            if (zip_eof && zip_method == -1)\n                return n;\n\n            if (zip_copy_leng > 0) {\n                if (zip_method != zip_STORED_BLOCK) {\n                    // STATIC_TREES or DYN_TREES\n                    while (zip_copy_leng > 0 && n < size) {\n                        zip_copy_leng--;\n                        zip_copy_dist &= zip_WSIZE - 1;\n                        zip_wp &= zip_WSIZE - 1;\n                        buff[off + n++] = zip_slide[zip_wp++] =\n                            zip_slide[zip_copy_dist++];\n                    }\n                } else {\n                    while (zip_copy_leng > 0 && n < size) {\n                        zip_copy_leng--;\n                        zip_wp &= zip_WSIZE - 1;\n                        zip_NEEDBITS(8);\n                        buff[off + n++] = zip_slide[zip_wp++] = zip_GETBITS(8);\n                        zip_DUMPBITS(8);\n                    }\n                    if (zip_copy_leng == 0)\n                        zip_method = -1; // done\n                }\n                if (n == size)\n                    return n;\n            }\n\n            if (zip_method == -1) {\n                if (zip_eof)\n                    break;\n\n                // read in last block bit\n                zip_NEEDBITS(1);\n                if (zip_GETBITS(1) != 0)\n                    zip_eof = true;\n                zip_DUMPBITS(1);\n\n                // read in block type\n                zip_NEEDBITS(2);\n                zip_method = zip_GETBITS(2);\n                zip_DUMPBITS(2);\n                zip_tl = null;\n                zip_copy_leng = 0;\n            }\n\n            switch (zip_method) {\n                case 0: // zip_STORED_BLOCK\n                    i = zip_inflate_stored(buff, off + n, size - n);\n                    break;\n\n                case 1: // zip_STATIC_TREES\n                    if (zip_tl != null)\n                        i = zip_inflate_codes(buff, off + n, size - n);\n                    else\n                        i = zip_inflate_fixed(buff, off + n, size - n);\n                    break;\n\n                case 2: // zip_DYN_TREES\n                    if (zip_tl != null)\n                        i = zip_inflate_codes(buff, off + n, size - n);\n                    else\n                        i = zip_inflate_dynamic(buff, off + n, size - n);\n                    break;\n\n                default: // error\n                    i = -1;\n                    break;\n            }\n\n            if (i == -1) {\n                if (zip_eof)\n                    return 0;\n                return -1;\n            }\n            n += i;\n        }\n        return n;\n    }\n\n    var zip_inflate = function (str) {\n        var i, j;\n\n        zip_inflate_start();\n        zip_inflate_data = str;\n        zip_inflate_pos = 0;\n\n        var buff = new Array(1024);\n        var aout = [];\n        while ((i = zip_inflate_internal(buff, 0, buff.length)) > 0) {\n            var cbuf = new Array(i);\n            for (j = 0; j < i; j++) {\n                cbuf[j] = String.fromCharCode(buff[j]);\n            }\n            aout[aout.length] = cbuf.join(\"\");\n        }\n        zip_inflate_data = null; // G.C.\n        return aout.join(\"\");\n    }\n\n    if (!ctx.RawDeflate) ctx.RawDeflate = {};\n    ctx.RawDeflate.inflate = zip_inflate;\n\n})(this);\n\n//base64\n(function (global) {\n    'use strict';\n    if (global.Base64_Zip) {\n        //alert(\"1\");\n        //return;\n\n    }\n    var version = \"2.1.1\";\n    // if node.js, we use Buffer\n    var buffer;\n    if (typeof module !== 'undefined' && module.exports) {\n        buffer = require('buffer').Buffer;\n    }\n    // constants\n    var b64chars\n        = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    var b64tab = function (bin) {\n        var t = {};\n        for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;\n        return t;\n    }(b64chars);\n    var fromCharCode = String.fromCharCode;\n    // encoder stuff\n    var cb_utob = function (c) {\n        if (c.length < 2) {\n            var cc = c.charCodeAt(0);\n            return cc < 0x80 ? c\n                : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))\n                    + fromCharCode(0x80 | (cc & 0x3f)))\n                    : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))\n                        + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))\n                        + fromCharCode(0x80 | (cc & 0x3f)));\n        } else {\n            var cc = 0x10000\n                + (c.charCodeAt(0) - 0xD800) * 0x400\n                + (c.charCodeAt(1) - 0xDC00);\n            return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))\n                + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))\n                + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))\n                + fromCharCode(0x80 | (cc & 0x3f)));\n        }\n    };\n    var re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n    var utob = function (u) {\n        return u.replace(re_utob, cb_utob);\n    };\n    var cb_encode = function (ccc) {\n        var padlen = [0, 2, 1][ccc.length % 3],\n            ord = ccc.charCodeAt(0) << 16\n                | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)\n                | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),\n            chars = [\n                b64chars.charAt(ord >>> 18),\n                b64chars.charAt((ord >>> 12) & 63),\n                padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n                padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n            ];\n        return chars.join('');\n    };\n    var Base64_btoa = function (b) {\n        return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n    };\n    var _encode = buffer\n        ? function (u) {\n            return (new buffer(u)).toString('base64')\n        }\n        : function (u) {\n            return Base64_btoa(utob(u))\n        }\n    ;\n    var encode = function (u, urisafe) {\n        return !urisafe\n            ? _encode(u)\n            : _encode(u).replace(/[+\\/]/g, function (m0) {\n                return m0 == '+' ? '-' : '_';\n            }).replace(/=/g, '');\n    };\n    var encodeURI = function (u) {\n        return encode(u, true)\n    };\n    // decoder stuff\n    var re_btou = new RegExp([\n        '[\\xC0-\\xDF][\\x80-\\xBF]',\n        '[\\xE0-\\xEF][\\x80-\\xBF]{2}',\n        '[\\xF0-\\xF7][\\x80-\\xBF]{3}'\n    ].join('|'), 'g');\n    var cb_btou = function (cccc) {\n        switch (cccc.length) {\n            case 4:\n                var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                    | ((0x3f & cccc.charCodeAt(1)) << 12)\n                    | ((0x3f & cccc.charCodeAt(2)) << 6)\n                    | (0x3f & cccc.charCodeAt(3)),\n                    offset = cp - 0x10000;\n                return (fromCharCode((offset >>> 10) + 0xD800)\n                    + fromCharCode((offset & 0x3FF) + 0xDC00));\n            case 3:\n                return fromCharCode(\n                    ((0x0f & cccc.charCodeAt(0)) << 12)\n                    | ((0x3f & cccc.charCodeAt(1)) << 6)\n                    | (0x3f & cccc.charCodeAt(2))\n                );\n            default:\n                return fromCharCode(\n                    ((0x1f & cccc.charCodeAt(0)) << 6)\n                    | (0x3f & cccc.charCodeAt(1))\n                );\n        }\n    };\n    var btou = function (b) {\n        return b.replace(re_btou, cb_btou);\n    };\n    var cb_decode = function (cccc) {\n        var len = cccc.length,\n            padlen = len % 4,\n            n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)\n                | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)\n                | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)\n                | (len > 3 ? b64tab[cccc.charAt(3)] : 0),\n            chars = [\n                fromCharCode(n >>> 16),\n                fromCharCode((n >>> 8) & 0xff),\n                fromCharCode(n & 0xff)\n            ];\n        chars.length -= [0, 0, 2, 1][padlen];\n        return chars.join('');\n    };\n    var Base64_atob = function (a) {\n        return a.replace(/[\\s\\S]{1,4}/g, cb_decode);\n    };\n    var _decode = buffer\n        ? function (a) {\n            return (new buffer(a, 'base64')).toString()\n        }\n        : function (a) {\n            return btou(Base64_atob(a))\n        };\n    var decode = function (a) {\n        return _decode(\n            a.replace(/[-_]/g, function (m0) {\n                return m0 == '-' ? '+' : '/'\n            })\n                .replace(/[^A-Za-z0-9\\+\\/]/g, '')\n        );\n    };\n    // export Base64\n    global.Base64_Zip = {\n        VERSION: version,\n        atob: Base64_atob,\n        btoa: Base64_btoa,\n        fromBase64: decode,\n        toBase64: encode,\n        utob: utob,\n        encode: encode,\n        encodeURI: encodeURI,\n        btou: btou,\n        decode: decode\n    };\n    // if ES5 is available, make Base64.extendString() available\n    if (typeof Object.defineProperty === 'function') {\n        var noEnum = function (v) {\n            return {value: v, enumerable: false, writable: true, configurable: true};\n        };\n        global.Base64_Zip.extendString = function () {\n            Object.defineProperty(\n                String.prototype, 'fromBase64', noEnum(function () {\n                    return decode(this)\n                }));\n            Object.defineProperty(\n                String.prototype, 'toBase64', noEnum(function (urisafe) {\n                    return encode(this, urisafe)\n                }));\n            Object.defineProperty(\n                String.prototype, 'toBase64URI', noEnum(function () {\n                    return encode(this, true)\n                }));\n        };\n    }\n    // that's it!\n})(this);\n\n\n//unzip\nfunction unzip(b64Data) {\n    var strData;\n    if (!window.atob) {\n        //\tstrData\t= $.base64.atob(b64Data)\n    } else {\n        //\tstrData = atob(b64Data)\n    }\n    var charData;\n    if (!Array.prototype.map) {\n        //  charData =iemap( strData.split(''),function (x) { return x.charCodeAt(0); },null);\n    } else {\n        //\tcharData = strData.split('').map(function (x) { return x.charCodeAt(0); });\n    }\n\n    strData = Base64_Zip.btou(RawDeflate.inflate(Base64_Zip.fromBase64(b64Data)));\n    // var binData = new Uint8Array(charData);\n    //  var data = pako.inflate(binData);\n    //  strData = String.fromCharCode.apply(null, new Uint16Array(data));\n    return strData;\n}\n\n\nvar com = {};\ncom.str = {\n    _KEY: \"12345678900000001234567890000000\",//32位\n    _IV: \"abcd134556abcedf\",//16位\n    Encrypt: function (str) {\n        var key = CryptoJS.enc.Utf8.parse(this._KEY);\n        var iv = CryptoJS.enc.Utf8.parse(this._IV);\n\n        var encrypted = '';\n\n        var srcs = CryptoJS.enc.Utf8.parse(str);\n        encrypted = CryptoJS.AES.encrypt(srcs, key, {\n            iv: iv,\n            mode: CryptoJS.mode.CBC,\n            padding: CryptoJS.pad.Pkcs7\n        });\n\n        return encrypted.ciphertext.toString();\n    },\n    Decrypt: function (str) {\n        var result = com.str.DecryptInner(str);\n        try {\n            var newstr = com.str.DecryptInner(result);\n            if (newstr != \"\") {\n                result = newstr;\n            }\n        } catch (ex) {\n            var msg = ex;\n        }\n        return result;\n    },\n    DecryptInner: function (str) {\n        var key = CryptoJS.enc.Utf8.parse(this._KEY);\n        var iv = CryptoJS.enc.Utf8.parse(this._IV);\n        var encryptedHexStr = CryptoJS.enc.Hex.parse(str);\n        var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);\n        var decrypt = CryptoJS.AES.decrypt(srcs, key, {\n            iv: iv,\n            mode: CryptoJS.mode.CBC,\n            padding: CryptoJS.pad.Pkcs7\n        });\n        var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);\n        var result = decryptedStr.toString();\n        try {\n            result = Decrypt(result);\n        } catch (ex) {\n            var msg = ex;\n        }\n        return result;\n    }\n}\n\n\nfunction iemap(myarray, callback, thisArg) {\n\n    var T, A, k;\n\n    if (myarray == null) {\n        throw new TypeError(\" this is null or not defined\");\n    }\n    var O = Object(myarray);\n\n    var len = O.length >>> 0;\n    if (typeof callback !== \"function\") {\n        throw new TypeError(callback + \" is not a function\");\n    }\n\n    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.\n    if (thisArg) {\n        T = thisArg;\n    }\n\n    A = new Array(len);\n    k = 0;\n    while (k < len) {\n        var kValue, mappedValue;\n        if (k in O) {\n            kValue = O[k];\n            mappedValue = callback.call(T, kValue, k, O);\n\n            A[k] = mappedValue;\n        }\n        k++;\n    }\n    return A;\n};\n\n\n//************************用Runeval解密出AES中的_KEY(采用的是jsfuck加密)***************************\n// function run(runevalcode){\n//     runcode = unzip(runevalcode);\n//      runcode= runcode.substr(0, runcode.length - 1); //要去掉最后的分号;\n//    data = (/\\n(.+)/.exec(eval(runcode.replace(/\\s+/, \"\").slice(0, -2)))[1]);\n// key = data.split(\";\")[0].split(\"=\")[1];\n// //去掉首尾的双引号\n// key = key.substr(1); //删除第一个字符\n// key = key.substr(0, key.length-1);\n//     return key;\n// }\n\n//************************传入runeval加密代码和加密的文书ID************************\nfunction getdocid(runevalcode, id) {\n    runcode = unzip(runevalcode);\n    runcode = runcode.substr(0, runcode.length - 1); //要去掉最后的分号;\n    data = (/\\n(.+)/.exec(eval(runcode.replace(/\\s+/, \"\").slice(0, -2)))[1]); //data = setTimeout('com.str._KEY=\"9f559564142845a4a26adc084f66abda\";',8000*Math.random());\n    key = data.split(\";\")[0].split(\"=\")[1];\n    //去掉首尾的双引号\n    key = key.substr(1); //删除第一个字符\n    key = key.substr(0, key.length - 1); //Key = \"9f559564142845a4a26adc084f66abda\"\n    if (key) {\n        com.str._KEY = key; //赋予新的key用于AES解密\n    }\n    var unzipid = unzip(id);\n    var realid = com.str.Decrypt(unzipid);\n    return realid;\n}\n\n\n//调用实例:\n//Navi(\"w61ZS27CgzAQPQtRFsK2wqh6AcKUVcKOw5DDpcOIQhVJExYJwpVDV1HDrl7CoCkBw6MAKcK2w6XClCfCoUHDmMOzecOzZsKMwrFYw67Dk8ONw7bClMOIw7QzX8K9w6UyPcOuXj9kdljDr8Ofw6U6w5tsWRjChCQgwrwWLyABYh4dw7IfEsKZw4lyw4VbCcK1woUAw69gFgLDlQNjKC44ATHCoAPCqcKDHcKQACbCkD8SBk9IDinCoQIQaATDjwXCj8KieMK1SMKyw6MpwpdfScKew4lFFFMsworCi8Kxw7B8KcOVw6rDq3zDocO0Y0nChRAiZEE1w4HCqcOtwrPCnBjCnsKpHsKXwrfDv8O0w4TDisOhQsKDwoJywoYEFTclYFs9wrgaw5wPwqbDoMOWw6rDtmJqesOTwo/Dl8KhKsOUXcKKOhDCtDnDtMO4wq5Bwo5jwrTDsTgIe8Kkw4Yjag/Dq8O+w41gwoLDlVRTwrUeRsO8wrUbw7bCt8O3wo3DgTXCl3gPD8OKworCsxXDkh7Dv3bCqXILw55BGsKaw4ZVw6rDrsKiwp1VKsK1w73DuBQLwqpvJ8KzXsOCwrpiw7ptw4zDuwZ1R8KRwps4NsKCGW1VMsO/wqJ3w4rDrXBEw7dwwoxXw6l5e3XCrsOBPMKKfQXDkMOdYEfCnMKWfGNJcy7DqsOkRcKtTwXDvWjDkyFNOMOZw7nDgRvCoAjDjnjDtA0=\",\"DcKPwrkRADEIA1syB8OmCUFAw78lwp0zKcOQw6wKFQNlV8KHf8KlwpXDnHLDilzCmkvCvQHDl28awpFhOzTCpxPDkkPDuMKifMOaM2s5JcOOdFJgHcOkwpPDolBrw7TCkcK9wpsudRLDicKmZnnDqsOGwrcjw54rVyZewprCoMO+woDCtMOHPMOewrbDhWVvwpXDt8OcT8OHw7xITsORExxOwrchfU4tw5ULwqM7wqY+c0M9W8KFLsOARcOvAsKIw68rPw==\")"
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/get_vl5x.js",
    "content": "//hex_sha1\nvar hexcase = 0;\n/*   hex   output   format.   0   -   lowercase;   1   -   uppercase                 */\nvar b64pad = \"\";\n/*   base-64   pad   character.   \"=\"   for   strict   RFC   compliance       */\nvar chrsz = 8;\n/*   bits   per   input   character.   8   -   ASCII;   16   -   Unicode             */\n\n/*\n *   These   are   the   functions   you'll   usually   want   to   call\n *   They   take   string   arguments   and   return   either   hex   or   base-64   encoded   strings\n */\nfunction hex_sha1(s) {\nreturn binb2hex(core_sha1(str2binb(s), s.length * chrsz));\n}\n\nfunction b64_sha1(s) {\nreturn binb2b64(core_sha1(str2binb(s), s.length * chrsz));\n}\n\nfunction str_sha1(s) {\nreturn binb2str(core_sha1(str2binb(s), s.length * chrsz));\n}\n\nfunction hex_hmac_sha1(key, data) {\nreturn binb2hex(core_hmac_sha1(key, data));\n}\n\nfunction b64_hmac_sha1(key, data) {\nreturn binb2b64(core_hmac_sha1(key, data));\n}\n\nfunction str_hmac_sha1(key, data) {\nreturn binb2str(core_hmac_sha1(key, data));\n}\n\n/*\n *   Perform   a   simple   self-test   to   see   if   the   VM   is   working\n */\nfunction sha1_vm_test() {\nreturn hex_sha1(\"abc\") == \"a9993e364706816aba3e25717850c26c9cd0d89d\";\n}\n\n/*\n *   Calculate   the   SHA-1   of   an   array   of   big-endian   words,   and   a   bit   length\n */\nfunction core_sha1(x, len) {\n/*   append   padding   */\nx[len >> 5] |= 0x80 << (24 - len % 32);\nx[((len + 64 >> 9) << 4) + 15] = len;\n\nvar w = Array(80);\nvar a = 1732584193;\nvar b = -271733879;\nvar c = -1732584194;\nvar d = 271733878;\nvar e = -1009589776;\n\nfor (var i = 0; i < x.length; i += 16) {\n    var olda = a;\n    var oldb = b;\n    var oldc = c;\n    var oldd = d;\n    var olde = e;\n\n    for (var j = 0; j < 80; j++) {\n        if (j < 16) w[j] = x[i + j];\n        else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);\n        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)));\n        e = d;\n        d = c;\n        c = rol(b, 30);\n        b = a;\n        a = t;\n    }\n\n    a = safe_add(a, olda);\n    b = safe_add(b, oldb);\n    c = safe_add(c, oldc);\n    d = safe_add(d, oldd);\n    e = safe_add(e, olde);\n}\nreturn Array(a, b, c, d, e);\n\n}\n\n/*\n *   Perform   the   appropriate   triplet   combination   function   for   the   current\n *   iteration\n */\nfunction sha1_ft(t, b, c, d) {\nif (t < 20) return (b & c) | ((~b) & d);\nif (t < 40) return b ^ c ^ d;\nif (t < 60) return (b & c) | (b & d) | (c & d);\nreturn b ^ c ^ d;\n}\n\n/*\n *   Determine   the   appropriate   additive   constant   for   the   current   iteration\n */\nfunction sha1_kt(t) {\nreturn (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;\n}\n\n/*\n *   Calculate   the   HMAC-SHA1   of   a   key   and   some   data\n */\nfunction core_hmac_sha1(key, data) {\nvar bkey = str2binb(key);\nif (bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);\n\nvar ipad = Array(16),\nopad = Array(16);\nfor (var i = 0; i < 16; i++) {\n    ipad[i] = bkey[i] ^ 0x36363636;\n    opad[i] = bkey[i] ^ 0x5C5C5C5C;\n}\n\nvar hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);\nreturn core_sha1(opad.concat(hash), 512 + 160);\n}\n\n/*\n *   Add   integers,   wrapping   at   2^32.   This   uses   16-bit   operations   internally\n *   to   work   around   bugs   in   some   JS   interpreters.\n */\nfunction safe_add(x, y) {\nvar lsw = (x & 0xFFFF) + (y & 0xFFFF);\nvar msw = (x >> 16) + (y >> 16) + (lsw >> 16);\nreturn (msw << 16) | (lsw & 0xFFFF);\n}\n\n/*\n *   Bitwise   rotate   a   32-bit   number   to   the   left.\n */\nfunction rol(num, cnt) {\nreturn (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n *   Convert   an   8-bit   or   16-bit   string   to   an   array   of   big-endian   words\n *   In   8-bit   function,   characters   >255   have   their   hi-byte   silently   ignored.\n */\nfunction str2binb(str) {\nvar bin = Array();\nvar mask = (1 << chrsz) - 1;\nfor (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i % 32);\nreturn bin;\n}\n\n/*\n *   Convert   an   array   of   big-endian   words   to   a   string\n */\nfunction binb2str(bin) {\nvar str = \"\";\nvar mask = (1 << chrsz) - 1;\nfor (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (24 - i % 32)) & mask);\nreturn str;\n}\n\n/*\n *   Convert   an   array   of   big-endian   words   to   a   hex   string.\n */\nfunction binb2hex(binarray) {\nvar hex_tab = hexcase ? \"0123456789ABCDEF\": \"0123456789abcdef\";\nvar str = \"\";\nfor (var i = 0; i < binarray.length * 4; i++) {\n    str += hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);\n}\nreturn str;\n}\n\n/*\n *   Convert   an   array   of   big-endian   words   to   a   base-64   string\n */\nfunction binb2b64(binarray) {\nvar tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar str = \"\";\nfor (var i = 0; i < binarray.length * 4; i += 3) {\n    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);\n    for (var j = 0; j < 4; j++) {\n        if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;\n        else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);\n    }\n}\nreturn str;\n}\n//hex_md5\nvar hexcase = 0;\n/* hex output format. 0 - lowercase; 1 - uppercase        */\nvar b64pad = \"\";\n/* base-64 pad character. \"=\" for strict RFC compliance   */\nvar chrsz = 8;\n/* bits per input character. 8 - ASCII; 16 - Unicode      */\n\n/*\n * These are the functions you'll usually want to call\n * They take string arguments and return either hex or base-64 encoded strings\n */\nfunction hex_md5(s) {\nreturn binl2hex(core_md5(str2binl(s), s.length * chrsz));\n}\nfunction b64_md5(s) {\nreturn binl2b64(core_md5(str2binl(s), s.length * chrsz));\n}\nfunction str_md5(s) {\nreturn binl2str(core_md5(str2binl(s), s.length * chrsz));\n}\nfunction hex_hmac_md5(key, data) {\nreturn binl2hex(core_hmac_md5(key, data));\n}\nfunction b64_hmac_md5(key, data) {\nreturn binl2b64(core_hmac_md5(key, data));\n}\nfunction str_hmac_md5(key, data) {\nreturn binl2str(core_hmac_md5(key, data));\n}\n\n/*\n * Perform a simple self-test to see if the VM is working\n */\nfunction md5_vm_test() {\nreturn hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\";\n}\n\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length\n */\nfunction core_md5(x, len) {\n/* append padding */\nx[len >> 5] |= 0x80 << ((len) % 32);\nx[(((len + 64) >>> 9) << 4) + 14] = len;\n\nvar a = 1732584193;\nvar b = -271733879;\nvar c = -1732584194;\nvar d = 271733878;\n\nfor (var i = 0; i < x.length; i += 16) {\n    var olda = a;\n    var oldb = b;\n    var oldc = c;\n    var oldd = d;\n\n    a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);\n    d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);\n    c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);\n    b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);\n    a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);\n    d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);\n    c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);\n    b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);\n    a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);\n    d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);\n    c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);\n    b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);\n    a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);\n    d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);\n    c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);\n    b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n    a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);\n    d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);\n    c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);\n    b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);\n    a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);\n    d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);\n    c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);\n    b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);\n    a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);\n    d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);\n    c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);\n    b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);\n    a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);\n    d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);\n    c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);\n    b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n    a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);\n    d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);\n    c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);\n    b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);\n    a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);\n    d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);\n    c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);\n    b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);\n    a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);\n    d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);\n    c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);\n    b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);\n    a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);\n    d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);\n    c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);\n    b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n    a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);\n    d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);\n    c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);\n    b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);\n    a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);\n    d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);\n    c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);\n    b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);\n    a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);\n    d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);\n    c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);\n    b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);\n    a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);\n    d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);\n    c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);\n    b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n    a = safe_add(a, olda);\n    b = safe_add(b, oldb);\n    c = safe_add(c, oldc);\n    d = safe_add(d, oldd);\n}\nreturn Array(a, b, c, d);\n\n}\n\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\nfunction md5_cmn(q, a, b, x, s, t) {\nreturn safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);\n}\nfunction md5_ff(a, b, c, d, x, s, t) {\nreturn md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\n}\nfunction md5_gg(a, b, c, d, x, s, t) {\nreturn md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\n}\nfunction md5_hh(a, b, c, d, x, s, t) {\nreturn md5_cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5_ii(a, b, c, d, x, s, t) {\nreturn md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\n}\n\n/*\n * Calculate the HMAC-MD5, of a key and some data\n */\nfunction core_hmac_md5(key, data) {\nvar bkey = str2binl(key);\nif (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);\n\nvar ipad = Array(16),\nopad = Array(16);\nfor (var i = 0; i < 16; i++) {\n    ipad[i] = bkey[i] ^ 0x36363636;\n    opad[i] = bkey[i] ^ 0x5C5C5C5C;\n}\n\nvar hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);\nreturn core_md5(opad.concat(hash), 512 + 128);\n}\n\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\nfunction safe_add(x, y) {\nvar lsw = (x & 0xFFFF) + (y & 0xFFFF);\nvar msw = (x >> 16) + (y >> 16) + (lsw >> 16);\nreturn (msw << 16) | (lsw & 0xFFFF);\n}\n\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\nfunction bit_rol(num, cnt) {\nreturn (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n * Convert a string to an array of little-endian words\n * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.\n */\nfunction str2binl(str) {\nvar bin = Array();\nvar mask = (1 << chrsz) - 1;\nfor (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);\nreturn bin;\n}\n\n/*\n * Convert an array of little-endian words to a string\n */\nfunction binl2str(bin) {\nvar str = \"\";\nvar mask = (1 << chrsz) - 1;\nfor (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);\nreturn str;\n}\n\n/*\n * Convert an array of little-endian words to a hex string.\n */\nfunction binl2hex(binarray) {\nvar hex_tab = hexcase ? \"0123456789ABCDEF\": \"0123456789abcdef\";\nvar str = \"\";\nfor (var i = 0; i < binarray.length * 4; i++) {\n    str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);\n}\nreturn str;\n}\n\n/*\n * Convert an array of little-endian words to a base-64 string\n */\nfunction binl2b64(binarray) {\nvar tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar str = \"\";\nfor (var i = 0; i < binarray.length * 4; i += 3) {\n    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);\n    for (var j = 0; j < 4; j++) {\n        if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;\n        else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);\n    }\n}\nreturn str;\n}\n\n//Base64\nfunction Base64() {\n\n// private property\n_keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n// public method for encoding\nthis.encode = function(input) {\n    var output = \"\";\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0;\n    input = _utf8_encode(input);\n    while (i < input.length) {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n            enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n            enc4 = 64;\n        }\n        output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);\n    }\n    return output;\n}\n\n// public method for decoding\nthis.decode = function(input) {\n    var output = \"\";\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0;\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n    while (i < input.length) {\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n        output = output + String.fromCharCode(chr1);\n        if (enc3 != 64) {\n            output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n            output = output + String.fromCharCode(chr3);\n        }\n    }\n    output = _utf8_decode(output);\n    return output;\n}\n\n// private method for UTF-8 encoding\n_utf8_encode = function(string) {\n    string = string.replace(/\\r\\n/g, \"\\n\");\n    var utftext = \"\";\n    for (var n = 0; n < string.length; n++) {\n        var c = string.charCodeAt(n);\n        if (c < 128) {\n            utftext += String.fromCharCode(c);\n        } else if ((c > 127) && (c < 2048)) {\n            utftext += String.fromCharCode((c >> 6) | 192);\n            utftext += String.fromCharCode((c & 63) | 128);\n        } else {\n            utftext += String.fromCharCode((c >> 12) | 224);\n            utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n            utftext += String.fromCharCode((c & 63) | 128);\n        }\n\n    }\n    return utftext;\n}\n\n// private method for UTF-8 decoding\n_utf8_decode = function(utftext) {\n    var string = \"\";\n    var i = 0;\n    var c = c1 = c2 = 0;\n    while (i < utftext.length) {\n        c = utftext.charCodeAt(i);\n        if (c < 128) {\n            string += String.fromCharCode(c);\n            i++;\n        } else if ((c > 191) && (c < 224)) {\n            c2 = utftext.charCodeAt(i + 1);\n            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n            i += 2;\n        } else {\n            c2 = utftext.charCodeAt(i + 1);\n            c3 = utftext.charCodeAt(i + 2);\n            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n            i += 3;\n        }\n    }\n    return string;\n}\n}\n\n//eval_1\nfunction strToLong(str) {\nvar long = 0;\nfor (var i = 0; i < str.length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nreturn long\n}\nfunction strToLongEn(str) {\nvar long = 0;\nfor (var i = 0; i < str.length; i++) {\n    long += (str.charCodeAt(i) << (i % 16)) + i\n}\nreturn long\n}\nfunction strToLongEn2(str, step) {\nvar long = 0;\nfor (var i = 0; i < str.length; i++) {\n    long += (str.charCodeAt(i) << (i % 16)) + (i * step)\n}\nreturn long\n}\nfunction strToLongEn3(str, step) {\nvar long = 0;\nfor (var i = 0; i < str.length; i++) {\n    long += (str.charCodeAt(i) << (i % 16)) + (i + step - str.charCodeAt(i))\n}\nreturn long\n}\nfunction makeKey_0(str) {\nvar str = str.substr(5, 5 * 5) + str.substr((5 + 1) * (5 + 1), 3);\nvar a = str.substr(5) + str.substr( - 4);\nvar b = str.substr(4) + a.substr( - 6);\nreturn hex_md5(str).substr(4, 24)\n}\nfunction makeKey_1(str) {\nvar str = str.substr(5, 5 * 5) + \"5\" + str.substr(1, 2) + \"1\" + str.substr((5 + 1) * (5 + 1), 3);\nvar a = str.substr(5) + str.substr(4);\nvar b = str.substr(12) + a.substr( - 6);\nvar c = str.substr(4) + a.substr(6);\nreturn hex_md5(c).substr(4, 24)\n}\nfunction makeKey_2(str) {\nvar str = str.substr(5, 5 * 5) + \"15\" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);\nvar a = strToLong(str.substr(5)) + str.substr(4);\nvar b = strToLong(str.substr(5)) + str.substr(4);\nvar c = str.substr(4) + b.substr(5);\nreturn hex_md5(c).substr(1, 24)\n}\nfunction makeKey_3(str) {\nvar str = str.substr(5, 5 * 5) + \"15\" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);\nvar a = strToLongEn(str.substr(5)) + str.substr(4);\nvar b = str.substr(4) + a.substr(5);\nvar c = strToLong(str.substr(5)) + str.substr(4);\nreturn hex_md5(b).substr(3, 24)\n}\nfunction makeKey_4(str) {\nvar str = str.substr(5, 5 * 5) + \"2\" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16)) + i\n}\na = long + \"\" + str.substr(4);\nvar b = hex_md5(str.substr(1)) + strToLong(a.substr(5));\nreturn hex_md5(b).substr(3, 24)\n}\nfunction makeKey_5(str) {\nvar base = new Base64();\nvar str = base.encode(str.substr(5, 5 * 5) + str.substr(1, 2) + \"1\") + str.substr((5 + 1) * (5 + 1), 3);\nvar a = strToLongEn(str.substr(4, 10)) + str.substr( - 4);\nvar b = hex_md5(str.substr(4)) + a.substr(2);\nvar a = str.substr(3);\nvar c = strToLong(str.substr(5)) + str.substr(4);\nvar aa = long + str.substr(4);\nvar long = 0;\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 12)) + i\n}\na = long + \"\" + str.substr(4);\nreturn hex_md5(str).substr(4, 24)\n}\n//2\nfunction makeKey_6(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5) + str.substr((5 + 1) * (5 + 1), 3);\nvar a = base.encode(str.substr(4, 10)) + str.substr(2);\nvar b = str.substr(6) + a.substr(2);\nvar c = strToLong(str.substr(5)) + str.substr(4);\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16)) + i\n}\na = long + \"\" + str.substr(4);\nreturn hex_md5(b).substr(2, 24)\n}\nfunction makeKey_7(str) {\nvar base = new Base64();\nvar str = base.encode(str.substr(5, 5 * 4) + \"55\" + str.substr(1, 2)) + str.substr((5 + 1) * (5 + 1), 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16 + 5)) + 3 + 5\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(4);\nvar b = hex_md5(str.substr(1)) + strToLong(a.substr(5));\nreturn hex_md5(b).substr(3, 24)\n}\nfunction makeKey_8(str) {\nvar base = new Base64();\nvar str = base.encode(str.substr(5, 5 * 5 - 1) + \"5\" + \"-\" + \"5\") + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(4);\nvar b = hex_md5(str.substr(1)) + strToLongEn(a.substr(5));\nreturn hex_md5(b).substr(4, 24)\n}\nfunction makeKey_9(str) {\nvar str = str.substr(5, 5 * 5) + \"5\" + str.substr(1, 2) + \"1\" + str.substr((5 + 1) * (5 + 1), 3);\nvar a = str.substr(5) + str.substr(4);\nvar b = str.substr(12) + a.substr( - 6);\nvar c = hex_sha1(str.substr(4)) + a.substr(6);\nreturn hex_md5(c).substr(4, 24)\n}\nfunction makeKey_10(str) {\nvar base = new Base64();\nvar str = base.encode(str.substr(5, 5 * 5 - 1) + \"5\") + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(4);\nvar b = hex_md5(str.substr(1)) + hex_sha1(a.substr(5));\nreturn hex_md5(b).substr(4, 24)\n}\nfunction makeKey_11(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"2\" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(2);\nvar b = str.substr(1) + hex_sha1(a.substr(5));\nreturn hex_md5(b).substr(2, 24)\n}\nfunction makeKey_12(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + str.substr((5 + 1) * (5 + 1), 3) + \"2\" + str.substr(1, 2);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(2);\nvar b = str.substr(1) + hex_sha1(str.substr(5));\nreturn hex_md5(b).substr(1, 24)\n}\nfunction makeKey_13(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"2\" + str.substr(1, 2);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(2);\nvar b = base.encode(str.substr(1) + hex_sha1(str.substr(5)));\nreturn hex_md5(b).substr(1, 24)\n}\nfunction makeKey_14(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"2\" + str.substr(1, 2);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(2);\nvar b = base.encode(str.substr(1) + str.substr(5) + str.substr(1, 3));\nreturn hex_sha1(b).substr(1, 24)\n}\nfunction makeKey_15(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"2\" + str.substr(1, 2);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 16))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16))\n}\na = long + \"\" + str.substr(2);\nvar b = base.encode(a.substr(1) + str.substr(5) + str.substr(2, 3));\nreturn hex_sha1(b).substr(1, 24)\n}\nfunction makeKey_16(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"2\" + str.substr(1, 2) + \"-\" + \"5\";\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 11))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16)) + i\n}\na = long + \"\" + str.substr(2);\nvar b = base.encode(a.substr(1)) + strToLongEn2(str.substr(5), 5) + str.substr(2, 3);\nreturn hex_md5(b).substr(2, 24)\n}\nfunction makeKey_17(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"7\" + str.substr(1, 2) + \"-\" + \"5\";\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 11))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16)) + i\n}\na = long + \"\" + str.substr(2);\nvar b = base.encode(a.substr(1)) + strToLongEn2(str.substr(5), 5 + 1) + str.substr(2 + 5, 3);\nreturn hex_md5(b).substr(0, 24)\n}\nfunction makeKey_18(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"7\" + str.substr(1, 2) + \"5\" + str.substr(2 + 5, 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 11))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16)) + i\n}\na = long + \"\" + str.substr(2);\nvar b = a.substr(1) + strToLongEn2(str.substr(5), 5 + 1) + str.substr(2 + 5, 3);\nreturn hex_md5(b).substr(0, 24)\n}\nfunction makeKey_19(str) {\nvar base = new Base64();\nvar str = str.substr(5, 5 * 5 - 1) + \"7\" + str.substr(5, 2) + \"5\" + str.substr(2 + 5, 3);\nvar long = 0;\nfor (var i = 0; i < str.substr(1).length; i++) {\n    long += (str.charCodeAt(i) << (i % 11))\n}\nvar aa = long + str.substr(4);\nvar long = 0;\nvar a = str.substr(5);\nfor (var i = 0; i < a.length; i++) {\n    long += (a.charCodeAt(i) << (i % 16)) + i\n}\na = long + \"\" + str.substr(2);\nvar b = a.substr(1) + strToLongEn3(str.substr(5), 5 - 1) + str.substr(2 + 5, 3);\nreturn hex_md5(b).substr(0, 24)\n}\nfunction makeKey_20(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)\n}\n//3\nfunction makeKey_21(str) {\nreturn hex_md5(makeKey_11(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_22(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_23(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_24(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_25(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_26(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_27(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_28(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_7(str)).substr(1, 24)\n}\nfunction makeKey_29(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_30(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_31(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_8(str)).substr(4, 24)\n}\nfunction makeKey_32(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_14(str)).substr(3, 24)\n}\nfunction makeKey_33(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_15(str)).substr(4, 24)\n}\nfunction makeKey_34(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_16(str)).substr(1, 24)\n}\nfunction makeKey_35(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_9(str)).substr(2, 24)\n}\nfunction makeKey_36(str) {\nreturn hex_md5(makeKey_8(str) + makeKey_10(str)).substr(3, 24)\n}\nfunction makeKey_37(str) {\nreturn hex_md5(makeKey_6(str) + makeKey_17(str)).substr(1, 24)\n}\nfunction makeKey_38(str) {\nreturn hex_md5(makeKey_12(str) + makeKey_18(str)).substr(2, 24)\n}\nfunction makeKey_39(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_40(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_41(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_42(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_43(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_44(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_45(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_46(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_47(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_48(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_49(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_50(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_51(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_52(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_14(str)).substr(2, 24)\n}\nfunction makeKey_53(str) {\nreturn hex_md5(makeKey_12(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_54(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_16(str)).substr(4, 24)\n}\nfunction makeKey_55(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_56(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_57(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_17(str)).substr(1, 24)\n}\nfunction makeKey_58(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_18(str)).substr(2, 24)\n}\nfunction makeKey_59(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_60(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_61(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_62(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_63(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_64(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_65(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_66(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_67(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_68(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_69(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_7(str)).substr(1, 24)\n}\nfunction makeKey_70(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_71(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_72(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_73(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_17(str)).substr(1, 24)\n}\nfunction makeKey_74(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_18(str)).substr(2, 24)\n}\nfunction makeKey_75(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_76(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_77(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_78(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_79(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_9(str)).substr(1, 24)\n}\nfunction makeKey_80(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_10(str)).substr(2, 24)\n}\nfunction makeKey_81(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_82(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_83(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_84(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_85(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_86(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_87(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_14(str)).substr(4, 24)\n}\nfunction makeKey_88(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_15(str)).substr(1, 24)\n}\nfunction makeKey_89(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_16(str)).substr(2, 24)\n}\nfunction makeKey_90(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_91(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_92(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_93(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_94(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_95(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_96(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_97(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_98(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_99(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_100(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_3(str)).substr(1, 24)\n}\nfunction makeKey_101(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_7(str)).substr(2, 24)\n}\nfunction makeKey_102(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_103(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_104(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_105(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_106(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_107(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_14(str)).substr(2, 24)\n}\nfunction makeKey_108(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_109(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_16(str)).substr(4, 24)\n}\nfunction makeKey_110(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_9(str)).substr(1, 24)\n}\nfunction makeKey_111(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_10(str)).substr(2, 24)\n}\nfunction makeKey_112(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_113(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_114(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_115(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_116(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_117(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_118(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_119(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_16(str)).substr(1, 24)\n}\nfunction makeKey_120(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_9(str)).substr(1, 24)\n}\nfunction makeKey_121(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_10(str)).substr(2, 24)\n}\nfunction makeKey_122(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_123(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_124(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_125(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_126(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_127(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_128(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_129(str) {\nreturn hex_md5(makeKey_8(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_130(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_131(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_132(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_133(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_134(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_135(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_136(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_137(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_14(str)).substr(2, 24)\n}\nfunction makeKey_138(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_139(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_16(str)).substr(4, 24)\n}\nfunction makeKey_140(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_9(str)).substr(1, 24)\n}\nfunction makeKey_141(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_10(str)).substr(2, 24)\n}\nfunction makeKey_142(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_143(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_144(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_145(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_146(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_147(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_148(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_149(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_150(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_151(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_152(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_153(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_154(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_155(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_156(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_157(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_158(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_7(str)).substr(1, 24)\n}\nfunction makeKey_159(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_8(str)).substr(2, 24)\n}\nfunction makeKey_160(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_14(str)).substr(3, 24)\n}\nfunction makeKey_161(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_15(str)).substr(4, 24)\n}\nfunction makeKey_162(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_16(str)).substr(1, 24)\n}\nfunction makeKey_163(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_9(str)).substr(2, 24)\n}\nfunction makeKey_164(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_10(str)).substr(3, 24)\n}\nfunction makeKey_165(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_166(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_167(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_168(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_169(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_170(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_171(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_172(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_173(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_174(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_175(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_176(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_177(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_178(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_179(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_180(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_14(str)).substr(3, 24)\n}\nfunction makeKey_181(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_15(str)).substr(1, 24)\n}\nfunction makeKey_182(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_16(str)).substr(2, 24)\n}\nfunction makeKey_183(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_184(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_185(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_186(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_187(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_188(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_189(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_190(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_191(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_192(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_193(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_194(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_195(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_14(str)).substr(4, 24)\n}\nfunction makeKey_196(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_197(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_16(str)).substr(4, 24)\n}\nfunction makeKey_198(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_9(str)).substr(1, 24)\n}\nfunction makeKey_199(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_200(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_201(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_202(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_203(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_204(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_205(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_206(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_7(str)).substr(1, 24)\n}\nfunction makeKey_207(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_17(str)).substr(2, 24)\n}\nfunction makeKey_208(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_209(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_210(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_211(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_212(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_213(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_14(str)).substr(2, 24)\n}\nfunction makeKey_214(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_215(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_16(str)).substr(4, 24)\n}\nfunction makeKey_216(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_217(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_218(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_219(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_220(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_221(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_222(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_223(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_224(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_5(str)).substr(2, 24)\n}\n//4\nfunction makeKey_225(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_3(str)).substr(3, 24)\n}\nfunction makeKey_226(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_7(str)).substr(4, 24)\n}\nfunction makeKey_227(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(2, 24)\n}\nfunction makeKey_228(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_229(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_230(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_231(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_232(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_233(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_14(str)).substr(1, 24)\n}\nfunction makeKey_234(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_15(str)).substr(2, 24)\n}\nfunction makeKey_235(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_16(str)).substr(3, 24)\n}\nfunction makeKey_236(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_9(str)).substr(4, 24)\n}\nfunction makeKey_237(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_10(str)).substr(1, 24)\n}\nfunction makeKey_238(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_239(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_240(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_241(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_242(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_243(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_244(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_245(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_7(str)).substr(4, 24)\n}\nfunction makeKey_246(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(2, 24)\n}\nfunction makeKey_247(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_248(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_249(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_250(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_251(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_252(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_14(str)).substr(1, 24)\n}\nfunction makeKey_253(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_15(str)).substr(2, 24)\n}\n//5\nfunction makeKey_254(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_255(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_14(str)).substr(4, 24)\n}\nfunction makeKey_256(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_15(str)).substr(1, 24)\n}\nfunction makeKey_257(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_16(str)).substr(3, 24)\n}\nfunction makeKey_258(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_9(str)).substr(1, 24)\n}\nfunction makeKey_259(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_10(str)).substr(2, 24)\n}\nfunction makeKey_260(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_261(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_262(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_263(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_264(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_265(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_266(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_267(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_268(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_269(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_270(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_14(str)).substr(2, 24)\n}\nfunction makeKey_271(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_272(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_16(str)).substr(4, 24)\n}\nfunction makeKey_273(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_274(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_275(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_276(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_277(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_278(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_279(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_280(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_281(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_282(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_283(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_284(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_285(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_286(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_287(str) {\nreturn hex_md5(makeKey_14(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_288(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_14(str)).substr(3, 24)\n}\nfunction makeKey_289(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_15(str)).substr(1, 24)\n}\nfunction makeKey_290(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_16(str)).substr(2, 24)\n}\nfunction makeKey_291(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_292(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_293(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_294(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)\n}\n//6\nfunction makeKey_295(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_296(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_297(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_298(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_299(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_5(str)).substr(4, 24)\n}\nfunction makeKey_300(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_3(str)).substr(1, 24)\n}\nfunction makeKey_301(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_7(str)).substr(2, 24)\n}\nfunction makeKey_302(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_303(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_304(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_305(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_306(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_307(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_308(str) {\nreturn hex_md5(k(0) + makeKey_14(str)).substr(2, 24)\n}\nfunction makeKey_309(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_15(str)).substr(3, 24)\n}\nfunction makeKey_310(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_16(str)).substr(1, 24)\n}\nfunction makeKey_311(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_9(str)).substr(2, 24)\n}\nfunction makeKey_312(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_10(str)).substr(3, 24)\n}\nfunction makeKey_313(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_314(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_315(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(2, 24)\n}\nfunction makeKey_316(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(3, 24)\n}\nfunction makeKey_317(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_318(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_319(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_3(str)).substr(3, 24)\n}\nfunction makeKey_320(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_7(str)).substr(1, 24)\n}\nfunction makeKey_321(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_17(str)).substr(2, 24)\n}\nfunction makeKey_322(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_323(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_324(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_325(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_326(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)\n}\nfunction makeKey_327(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_14(str)).substr(1, 24)\n}\nfunction makeKey_328(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_15(str)).substr(2, 24)\n}\nfunction makeKey_329(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_16(str)).substr(3, 24)\n}\nfunction makeKey_330(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_9(str)).substr(4, 24)\n}\nfunction makeKey_331(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_10(str)).substr(1, 24)\n}\nfunction makeKey_332(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_17(str)).substr(2, 24)\n}\nfunction makeKey_333(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_334(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_335(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_336(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_337(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_338(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_339(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_5(str)).substr(1, 24)\n}\nfunction makeKey_340(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_3(str)).substr(2, 24)\n}\nfunction makeKey_341(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_7(str)).substr(3, 24)\n}\nfunction makeKey_342(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_343(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_344(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_345(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_346(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_347(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_348(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_14(str)).substr(3, 24)\n}\nfunction makeKey_349(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_15(str)).substr(1, 24)\n}\nfunction makeKey_350(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_16(str)).substr(2, 24)\n}\nfunction makeKey_351(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_9(str)).substr(3, 24)\n}\nfunction makeKey_352(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_10(str)).substr(4, 24)\n}\nfunction makeKey_353(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_354(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_355(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_356(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_357(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_358(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_5(str)).substr(3, 24)\n}\nfunction makeKey_359(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_3(str)).substr(4, 24)\n}\nfunction makeKey_360(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_7(str)).substr(2, 24)\n}\nfunction makeKey_361(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_362(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_363(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_364(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_365(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_366(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_367(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_7(str)).substr(2, 24)\n}\nfunction makeKey_368(str) {\nreturn hex_md5(k(0) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_369(str) {\nreturn hex_md5(makeKey_15(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_370(str) {\nreturn hex_md5(makeKey_16(str) + makeKey_19(str)).substr(1, 24)\n}\nfunction makeKey_371(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_372(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_1(str)).substr(1, 24)\n}\nfunction makeKey_373(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_4(str)).substr(2, 24)\n}\nfunction makeKey_374(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_17(str)).substr(3, 24)\n}\nfunction makeKey_375(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_18(str)).substr(4, 24)\n}\nfunction makeKey_376(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_377(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_0(str)).substr(4, 24)\n}\nfunction makeKey_378(str) {\nreturn hex_md5(makeKey_5(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_379(str) {\nreturn hex_md5(makeKey_3(str) + makeKey_4(str)).substr(1, 24)\n}\nfunction makeKey_380(str) {\nreturn hex_md5(makeKey_7(str) + makeKey_9(str)).substr(2, 24)\n}\nfunction makeKey_381(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_10(str)).substr(3, 24)\n}\nfunction makeKey_382(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_383(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_384(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)\n}\nfunction makeKey_385(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)\n}\nfunction makeKey_386(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)\n}\nfunction makeKey_387(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_388(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_389(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_7(str)).substr(1, 24)\n}\nfunction makeKey_390(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_17(str)).substr(2, 24)\n}\nfunction makeKey_391(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_18(str)).substr(3, 24)\n}\nfunction makeKey_392(str) {\nreturn hex_md5(makeKey_4(str) + makeKey_19(str)).substr(4, 24)\n}\nfunction makeKey_393(str) {\nreturn hex_md5(makeKey_9(str) + makeKey_0(str)).substr(1, 24)\n}\nfunction makeKey_394(str) {\nreturn hex_md5(makeKey_10(str) + makeKey_1(str)).substr(2, 24)\n}\nfunction makeKey_395(str) {\nreturn hex_md5(makeKey_17(str) + makeKey_4(str)).substr(3, 24)\n}\nfunction makeKey_396(str) {\nreturn hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)\n}\nfunction makeKey_397(str) {\nreturn hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)\n}\nfunction makeKey_398(str) {\nreturn hex_md5(makeKey_0(str) + makeKey_19(str)).substr(3, 24)\n}\nfunction makeKey_399(str) {\nreturn hex_md5(makeKey_1(str) + makeKey_0(str)).substr(1, 24)\n}\n//7\n//var cookie = getCookie('vjkl5');\nvar 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];\n//var funIndex = strToLong(cookie) % arrFun.length;\n//var fun = arrFun[funIndex];\n//var result = fun(cookie);\n\n//注意:修改的地方:\n// 1. 添加前面的加密方法(base64,hex_sha1,hex_md5)\n// 2. 注释掉var cookie = getCookie('vjkl5'); 直接传入cookie中'vjl5'字段的值\n// 3.有的hex_md5(makeKey_4(str) + makeKey_19(str)).substr(3, 24)变成了hex_md5(c0 +...., 就会报错c未定义 ; 解决办法就是直接去网页调试getkey() ,进入虚拟的函数中,查看对应的值,发现c(0)应该换成makeKey_4(str)\n\n//**************************传入cookie中的'vjl5'字段的值*********************\nfunction getvl5x(cookie) {\n// var vl = getCookie(cookie) //cookie中的'vjl5'字段的值\nvar funIndex = strToLong(cookie) % arrFun.length;\nvar fun = arrFun[funIndex];\nvar result = fun(cookie);\nreturn result;\n}"
  },
  {
    "path": "Wenshu_Project/Wenshu/spiders/wenshu.py",
    "content": "# -*- coding: utf-8 -*-\nimport scrapy, time, json, re, math, execjs\nfrom Wenshu.items import WenshuCaseItem\n\n\nclass WenshuSpider(scrapy.Spider):\n    name = 'wenshu'\n    # allowed_domains = ['wenshu.court.gov.cn']\n    start_urls = ['http://wenshu.court.gov.cn/list/list/?sorttype=1']\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.year_list = ['1996', '1997', '1998', '1999', '2000']\n        self.guid = 'aaaabbbb-aaaa-aaaabbbb-aaaabbbbcccc'\n        with open('Wenshu\\spiders\\get_vl5x.js', encoding='utf-8') as f:\n            jsdata_1 = f.read()\n        with open('Wenshu\\spiders\\get_docid.js', encoding='utf-8') as f:\n            jsdata_2 = f.read()\n        self.js_1 = execjs.compile(jsdata_1)\n        self.js_2 = execjs.compile(jsdata_2)\n\n    def parse(self, response):\n        '''获取cookie'''\n        try:\n            vjkl5 = response.headers['Set-Cookie'].decode('utf-8')\n            vjkl5 = vjkl5.split(';')[0].split('=')[1]\n            url_num = 'http://wenshu.court.gov.cn/ValiCode/GetCode'\n            data = {\n                'guid': self.guid\n            }\n            yield scrapy.FormRequest(url_num, formdata=data, meta={'vjkl5': vjkl5}, callback=self.get_count,\n                                     dont_filter=True)\n        except:\n            yield scrapy.Request(WenshuSpider.start_urls, callback=self.parse, dont_filter=True)\n\n    def get_count(self, response):\n        '''获取案件数目,设置请求页数'''\n        number = response.text\n        vjkl5 = response.meta['vjkl5']\n        vl5x = self.js_1.call('getvl5x', vjkl5)\n        url = 'http://wenshu.court.gov.cn/List/ListContent'\n        for year in self.year_list:\n            data = {\n                'Param': '裁判年份:{}'.format(year),  # 检索筛选条件 (多条件筛选: 裁判年份:2018,中级法院:北京市第一中级人民法院,审判程序:一审,关键词:返还)\n                'Index': '1',  # 页数\n                'Page': '0',  # 只为了获取案件数目,所有请求0条就行了\n                'Order': '裁判日期',  # 排序类型(1.法院层级/2.裁判日期/3.审判程序)\n                'Direction': 'asc',  # 排序方式(1.asc:从小到大/2.desc:从大到小)\n                'vl5x': vl5x,\n                'number': number,\n                'guid': self.guid\n            }\n            headers = {\n                'Cookie': 'vjkl5=' + response.meta['vjkl5'],  # 在这单独添加cookie,settings中就可以禁用cookie,防止跟踪被ban\n                'Host': 'wenshu.court.gov.cn',\n                'Origin': 'http://wenshu.court.gov.cn',\n            }\n            # print(response.request.headers.getlist('Cookie'))\n            yield scrapy.FormRequest(url, formdata=data,\n                                     meta={'vl5x': vl5x, 'vjkl5': vjkl5, 'number': number, 'year': year},\n                                     callback=self.get_content, headers=headers, dont_filter=True)\n\n    def get_content(self, response):\n        '''获取每页的案件'''\n        html = response.text\n        result = eval(json.loads(html))\n        count = result[0]['Count']\n        print('******* {}年:该筛选条件下共有多少条数据:{} ********'.format(response.meta['year'], count))\n        page = math.ceil(int(count) / 10)  # 向上取整,每页10条\n        for i in range(1, int(page) + 1):\n            if i <= 20:  # max:10*20=200 ; 20181005 -只能爬取20页,每页10条!!!\n                url = 'http://wenshu.court.gov.cn/List/ListContent'\n                data = {\n                    'Param': '裁判年份:{}'.format(response.meta['year']),\n                    # 检索筛选条件 (多条件筛选: 裁判年份:2018,中级法院:北京市第一中级人民法院,审判程序:一审,关键词:返还)\n                    'Index': str(i),  # 页数\n                    'Page': '10',  # 每页显示的条目数\n                    'Order': '裁判日期',  # 排序类型(1.法院层级/2.裁判日期/3.审判程序)\n                    'Direction': 'asc',  # 排序方式(1.asc:从小到大/2.desc:从大到小)\n                    'vl5x': response.meta['vl5x'],  # 保存1个小时\n                    'number': response.meta['number'],  # 每次都要请求一次GetCode,获取number带入\n                    'guid': self.guid\n                }\n                headers = {\n                    'Cookie': 'vjkl5=' + response.meta['vjkl5'],\n                    'Host': 'wenshu.court.gov.cn',\n                    'Origin': 'http://wenshu.court.gov.cn',\n                }\n                yield scrapy.FormRequest(url, formdata=data, callback=self.get_docid, headers=headers, dont_filter=True)\n\n    def get_docid(self, response):\n        '''计算出docid'''\n        html = response.text\n        result = eval(json.loads(html))\n        runeval = result[0]['RunEval']\n        content = result[1:]\n        for i in content:\n            casewenshuid = i.get('文书ID', '')\n            casejudgedate = i.get('裁判日期', '')\n            docid = self.js_2.call('getdocid', runeval, casewenshuid)\n            print('*************文书ID:' + docid)\n            url = 'http://wenshu.court.gov.cn/CreateContentJS/CreateContentJS.aspx?DocID={}'.format(docid)\n            yield scrapy.Request(url, callback=self.get_detail, meta={'casejudgedate':casejudgedate}, dont_filter=True)\n\n    def get_detail(self, response):\n        '''获取每条案件详情'''\n        html = response.text\n        content_1 = json.loads(re.search(r'JSON\\.stringify\\((.*?)\\);\\$\\(document', html).group(1))  # 内容详情字典1\n        content_3 = re.search(r'\"Html\\\\\":\\\\\"(.*?)\\\\\"}\"', html).group(1)  # 内容详情字典3(doc文档正文)\n        reg = re.compile(r'<[^>]+>', re.S)\n        # 存储到item\n        item = WenshuCaseItem()\n        item['casecourt'] = {\n            'casecourtid': content_1.get('法院ID', ''),\n            'casecourtname': content_1.get('法院名称', ''),\n            'casecourtprovince': content_1.get('法院省份', ''),\n            'casecourtcity': content_1.get('法院地市', ''),\n            'casecourtdistrict': content_1.get('法院区县', ''),\n            'casecourtarea': content_1.get('法院区域', ''),\n        }\n        item['casecontent'] = {\n            'casebasecontent': content_1.get('案件基本情况段原文', ''),\n            'caseaddcontent': content_1.get('附加原文', ''),\n            'caseheadcontent': content_1.get('文本首部段落原文', ''),\n            'casemaincontent': content_1.get('裁判要旨段原文', ''),\n            'casecorrectionscontent': content_1.get('补正文书', ''),\n            'casedoccontent': content_1.get('DocContent', ''),\n            'caselitigationcontent': content_1.get('诉讼记录段原文', ''),\n            'casepartycontent': content_1.get('诉讼参与人信息部分原文', ''),\n            'casetailcontent': content_1.get('文本尾部原文', ''),\n            'caseresultcontent': content_1.get('判决结果段原文', ''),\n            'casestrcontent': reg.sub('', content_3),  # 去除html标签后的文书内容\n        }\n        item['casetype'] = content_1.get('案件类型', '')  # 案件类型\n        item['casejudgedate'] = response.meta['casejudgedate']  # 裁判日期\n        item['caseprocedure'] = content_1.get('审判程序', '')\n        item['casenumber'] = content_1.get('案号', '')\n        item['casenopublicreason'] = content_1.get('不公开理由', '')\n        item['casedocid'] = content_1.get('文书ID', '')\n        item['casename'] = content_1.get('案件名称', '')\n        item['casecontenttype'] = content_1.get('文书全文类型', '')\n        item['caseuploaddate'] = time.strftime(\"%Y-%m-%d\",\n                                               time.localtime(int(content_1['上传日期'][6:-5]))) if 'Date' in content_1[\n            '上传日期'] else ''\n        item['casedoctype'] = content_1.get('案件名称').split('书')[0][-2:] if '书' in content_1.get(\n            '案件名称') else '令'  # 案件文书类型:判决或者裁定...还有令\n        item['caseclosemethod'] = content_1.get('结案方式', '')\n        item['caseeffectivelevel'] = content_1.get('效力层级', '')\n\n        yield item\n"
  },
  {
    "path": "Wenshu_Project/__init__.py",
    "content": "# !/user/bin/env python\n# -*- coding:utf-8 -*- \n# time: 2018/10/19--22:09\n__author__ = 'Henry'"
  },
  {
    "path": "Wenshu_Project/requirements.txt",
    "content": "pymongo==3.6.1\nScrapy==1.5.0\nrequests==2.20.0\nPyExecJS==1.5.1\n"
  },
  {
    "path": "Wenshu_Project/scrapy.cfg",
    "content": "# Automatically created by: scrapy startproject\n#\n# For more information about the [deploy] section see:\n# https://scrapyd.readthedocs.io/en/latest/deploy.html\n\n[settings]\ndefault = Wenshu.settings\n\n[deploy]\n#url = http://localhost:6800/\nproject = Wenshu\n"
  }
]