diff --git "a/04-345円256円211円345円276円275円347円234円201円351円233円250円346円260円264円346円203円205円JS351円200円206円345円220円221円/ysq.js" "b/04-345円256円211円345円276円275円347円234円201円351円233円250円346円260円264円346円203円205円JS351円200円206円345円220円221円/ysq.js" index 298aab7..d8b289f 100644 --- "a/04-345円256円211円345円276円275円347円234円201円351円233円250円346円260円264円346円203円205円JS351円200円206円345円220円221円/ysq.js" +++ "b/04-345円256円211円345円276円275円347円234円201円351円233円250円346円260円264円346円203円205円JS351円200円206円345円220円221円/ysq.js" @@ -63,7 +63,7 @@ WaterSecurity.prototype = { var result = ""; for (var i = 0; i < tags.length; i++) result += content[tags[i]]; -// result = this.utf8to16(this.base64decode(result)); + result = this.utf8to16(this.base64decode(result)); return result }, getTagsPosition: function(data, tags) { diff --git "a/18-344円273円212円346円227円245円345円244円264円346円235円241円/README.md" "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/README.md" new file mode 100644 index 0000000..8d5fb3a --- /dev/null +++ "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/README.md" @@ -0,0 +1,17 @@ +# 使用说明 + +1.npm需安装express和body-parser,具体自行了解 + +2.将3个文件放于同一文件夹,cd到该目录,命令行运行 +```javascript +node index.js +``` + +3.运行toutiao.py开始食用 + + +### 由于pyexecjs运行会报以下错误,因此这里使用接口调用。如有解决办法,请联系告知,谢谢! +```python +TypeError: Cannot read property 'init' of undefined +``` +### 实际为无法读取window.byted_acrawler对象,但node运行正常 diff --git "a/18-344円273円212円346円227円245円345円244円264円346円235円241円/index.js" "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/index.js" new file mode 100644 index 0000000..1f0e0ce --- /dev/null +++ "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/index.js" @@ -0,0 +1,39 @@ +var express = require('express') +var app = express() +var sign = require('./toutiao') // 导入toutiao模块,并命名为sign +var bodyParser = require('body-parser'); // 导入请求体解析器 +app.use(bodyParser()); + +// 开启get_cookie路由 +app.post('/get_param', function(req, res) { + // 获取请求的真实IP + var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, ''); + // 获取请求时间 + var time = new Date().toString().replace(/\+0800.*/, ''); + // 打印请求时间、IP、方法、路由 + console.log('INFO:', time, ip, req.method, req.originalUrl, '200 OK!'); + // 获取POST请求的formdata + let result = req.body; + // 取出formdata中的category + let category = result.category; + // 取出formdata中的userAgent + let userAgent = result.userAgent; + // 取出formdata中的userAgent + let max_behot = result.max_behot; + // 调用toutiao模块中的get_param方法,该方法需要提前module.exports导出 + var param = sign.get_param(category, userAgent, max_behot); + // 设置响应头,如果不设置,通过asyncio_requests请求的res.json()会报错,因为它是根据响应头解析json数据 + // 而requests可以直接使用res.json()解析,因为它是根据响应信息解析 + res.set('Content-Type', 'application/json') + // 将JSON后的数据返回客户端 + res.send(JSON.stringify(param)); +}); + + + +// 监听8919端口,所有人均可访问 +app.listen(8919, () => { + console.log("开启服务,端口8919", new Date().toString().replace(/\+0800.*/, '')) +}) + + diff --git "a/18-344円273円212円346円227円245円345円244円264円346円235円241円/toutiao.js" "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/toutiao.js" new file mode 100644 index 0000000..98970b6 --- /dev/null +++ "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/toutiao.js" @@ -0,0 +1,778 @@ +window = global; +window.global = undefined; +Object.prototype.toString.call = function(){return "[object Window]"}; +document = { + addEventListener: function(){}, + removeEventListener: function(){}, + getElementsByTagName: function(){ + var head = { + appendChild: function(){}, + } + return [head]; + }, + createElement: function(name){ + if (name === "canvas") { + return canvas + } + var script = {} + return script; + }, + toString: function(){return "[object HTMLDocument]"}, + cookie:"tt_webid=6825408079360001549; s_v_web_id=verify_ka1vbe1k_GubxxV1k_sbBs_4GJN_97J3_d9DEaAlScSnw; csrftoken=d491c7930e77ad510b88f9e0b4769ca4" +}; +canvas = { + getContext: function getContext() { + return CanvasRenderingContext2D + }, + toDataURL: function toDataURL() { + // 实际为canvas画布填充了"˜ 1⁄2"字样后,转成的图片链接 + return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAAA8UlEQVRIS9XWMWoCQRSA4c9GMGDtAbyAdxDSpkxhYRByDj2AkFrIJVKFeIuAjR4glV7AxjAwC8OSRd3d7LKv2oVh3v/PvHkzPR2PXsI/wCM+EL4fcLrid0E6R/7/35cnTf6EETb4xjP2dwg0Dh/YUoEyq5VCd1qgFfg6d6CzAlnZZQKNi1Q9A0EgD9+oRFWBFZZJM2gUvq4z8Ir3WEudFJjEeyPAZ1F1Z29u6VUSzTCPt/fNCeseWFZgiAMW+Kwb6p75yggE+C9sEQ5xq/GXQB/nAqpQNuv4XmodvqgLhUfdC474iX1+jCl2eGu7bNLF/QWCjSoR0K0uZAAAAABJRU5ErkJggg==" + }, +}; +canvas.toDataURL.toString = function(){return "function toDataURL() { [native code] }"}; +CanvasRenderingContext2D = { + arc: function arc() {}, + stroke: function stroke() {}, + fillText: function fillText() {}, +}; +PluginArray = function(){}; +navigator = { + toString: function(){return "[object Navigator]"}, + plugins: new PluginArray() +}; +navigator.plugins.toString = function(){return "[object PluginArray]"}; +navigator.toString.toString = function(){return "function toString() { [native code] }"}; +history = { + toString: function(){return "[object History]"} +}; +Audio = {}; +CanvasRenderingContext2D = {}; +Image = function(){}; +location = { + href: "https://www.toutiao.com/ch/news_hot/", + protocol: "https:", + +}; +sessionStorage = { + getItem: function (key) { + return this[key] ? this[key]: null; + }, + setItem: function (key, value) { + this[key] = "" + value; + }, +}; +localStorage = { + removeItem: function (key) { + delete this[key] + }, + getItem: function (key) { + return this[key] ? this[key]: null; + }, + setItem: function (key, value) { + this[key] = "" + value; + }, +}; +HTMLElement = function(){}; +setTimeout = function(){}; + + +var _typeof = function(f){return typeof f}; +TAC = function() { + function f(f, a, b, d, c, r) { + null == r && (r = this); + var n, i, o = {}, l = o.d = c ? c.d + 1 : 0; + for (o["$" + l] = o, + i = 0; i < l; i++) + o[n = "$" + i] = c[n]; + for (i = 0, + l = o.length = d.length; i < l; i++) + o[i] = d[i]; + return e(f, a, b, o, r)[1] + } + function e(r, o, l, t, v, y) { + function h(f) { + S[++A] = f + } + function k() { + return S[A--] + } + function m(f, e) { + for (var a = b, d = "", c = 0; c < f.length; c++) { + var r = f.charCodeAt(c); + d += String.fromCharCode(a ^ r), + a = (a << 1) + c + e + 1 + (a>> 1) & 255 + } + return d + } + null == v && (v = this); + var g, C, x, I, S = [], A = 0; + y && (g = y); + for (var w = o + 2 * l; o < w; ) { + var z = 13 * i(r, o) % 241; + if (o += 2, + 0 == (3 & z)) + if (0 == (3 & (z>>= 2))) { + if (0 == (z>>= 2)) + return [1, S[A--]]; + if (2 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + S[++A] = +I; + else if (4 == z) + g = S[A--], + S[A] = S[A] * g; + else if (6 == z) + g = S[A--], + S[A] = S[A] != g; + else if (13 == z) + C = S[A--], + x = S[A--], + (I = S[A--]).x === e ? S[++A] = f(r, I.pc, I.len, C, I.z, x) : S[++A] = I.apply(x, C); + else { + if (15 != z) + break; + oprand = n(r, o), + I = oprand[1], + S[A] = function(a, b) { + var d = function e() { + var a = arguments; + return f(r, e.pc, e.len, a, e.z, this) + }; + return d.pc = a, + d.len = b, + d.x = e, + d.z = t, + d + }(o + 6, I - 4), + o += 2 * I - 2 + } + } else if (1 == (3 & z)) + if (3 == (z>>= 2)) + g = S[--A], + S[A] = g(S[A + 1]); + else if (5 == z) + S[A -= 1] = S[A][S[A + 1]]; + else if (7 == z) + S[A] = --S[A]; + else { + if (9 != z) + break; + g = S[A--], + S[A] = typeof g + } + else if (2 == (3 & z)) + if (6 == (z>>= 2)) + S[A] = u(S[A]); + else if (8 == z) + g = S[A--], + oprand = n(r, o), + o += 2 * oprand[0], + S[A--][m(a[oprand[1]], oprand[1])] = g; + else { + if (10 != z) { + if (12 == z) + throw S[A--]; + break + } + S[A] = ~S[A] + } + else if (0 == (z>>= 2)) + S[++A] = null; + else if (2 == z) + g = S[A--], + S[A] = S[A]>= g; + else if (9 == z) + g = k(), + C = k(), + t[0] = 65599 * t[0] + t[g].charCodeAt(C)>>> 0; + else if (11 == z) + S[++A] = void 0; + else { + if (13 != z) + break; + g = S[A--], + S[A] = S[A] && g + } + else if (1 == (3 & z)) + if (0 == (3 & (z>>= 2))) { + if (4 == (z>>= 2)) { + oprand = n(r, o), + I = oprand[1]; + try { + if (d[c][2] = 1, + 1 == (g = e(r, o + 6, I - 4, t, v))[0]) + return g + } catch (y) { + if (d[c] && d[c][1] && 1 == (g = e(r, d[c][1][0], d[c][1][1], t, v, y))[0]) + return g + } finally { + if (d[c] && d[c][0] && 1 == (g = e(r, d[c][0][0], d[c][0][1], t, v))[0]) + return g; + d[c] = 0, + c-- + } + o += 2 * I - 2 + } else if (6 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + S[A -= I] = p("x,y", "return new x[y](" + Array(I + 1).join(",x[++y]").substr(1) + ")")(S, A); + else if (8 == z) + g = S[A--], + S[A] = S[A] & g; + else if (10 != z) + break + } else if (1 == (3 & z)) + if (0 == (z>>= 2)) + S[A] = !S[A]; + else if (7 == z) + C = S[A--], + g = delete S[A--][C]; + else if (9 == z) + oprand = n(r, o), + o += 2 * oprand[0], + S[A] = S[A][m(a[oprand[1]], oprand[1])]; + else { + if (11 != z) + break; + g = S[A--], + S[A] = S[A] << g + } + else if (2 == (3 & z)) + if (1 == (z>>= 2)) + S[++A] = g; + else if (3 == z) + g = S[A--], + S[A] = S[A] <= g; + else if (10 == z) + g = S[A -= 2][S[A + 1]] = S[A + 2], + A--; + else if (12 == z) + g = S[A], + S[++A] = g; + else { + if (14 != z) + break; + g = S[A--], + S[A] = S[A] || g + } + else if (0 == (z>>= 2)) + S[A] = !S[A]; + else if (2 == z) + oprand = n(r, o), + o += 2 * (I = oprand[1]) - 2; + else if (4 == z) + g = S[A--], + S[A] = S[A] / g; + else if (6 == z) + g = S[A--], + S[A] = S[A] !== g; + else { + if (13 != z) + break; + S[++A] = v + } + else if (2 == (3 & z)) + if (0 == (3 & (z>>= 2))) + if (1 == (z>>= 2)) + g = S[A--], + S[A] = S[A]> g; + else if (8 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + C = A + 1, + S[A -= I - 1] = I ? S.slice(A, C) : []; + else if (10 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + g = S[A--], + t[I] = g; + else { + if (12 != z) + break; + g = S[A--], + S[A] = S[A]>> g + } + else if (1 == (3 & z)) + if (0 == (z>>= 2)) + S[++A] = s; + else if (2 == z) + g = S[A--], + S[A] = S[A] + g; + else if (4 == z) + g = S[A--], + S[A] = S[A] == g; + else if (11 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + S[--A] = p("x,y", "return x " + m(a[I], I) + " y")(S[A], S[A + 1]); + else { + if (13 != z) + break; + g = S[A - 1], + C = S[A], + S[++A] = g, + S[++A] = C + } + else if (2 == (3 & z)) + if (1 == (z>>= 2)) + oprand = n(r, o), + o += 2 * oprand[0], + S[++A] = m(a[oprand[1]], oprand[1]); + else if (3 == z) + S[A--] ? o += 6 : (oprand = n(r, o), + o += 2 * (I = oprand[1]) - 2); + else if (5 == z) + g = S[A--], + S[A] = S[A] % g; + else if (7 == z) + g = S[A--], + S[A] = S[A]instanceof g; + else { + if (14 != z) + break; + S[++A] = !1 + } + else if (4 == (z>>= 2)) + oprand = n(r, o), + I = oprand[1], + d[c][0] && !d[c][2] ? d[c][1] = [o + 6, I - 4] : d[c++] = [0, [o + 6, I - 4], 0], + o += 2 * I - 2; + else if (6 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + S[++A] = t["$" + I]; + else { + if (8 != z) + break; + g = S[A--], + S[A] = S[A] | g + } + else if (0 == (3 & (z>>= 2))) + if (1 == (z>>= 2)) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + S[++A] = +m(a[I], I); + else if (3 == z) + g = S[A--], + S[A] = S[A] - g; + else if (5 == z) + g = S[A--], + S[A] = S[A] === g; + else if (12 == z) + C = S[A--], + x = S[A--], + (I = S[A--]).x === e ? S[++A] = f(r, I.pc, I.len, C, I.z, x) : S[++A] = I.apply(x, C); + else { + if (14 != z) + break; + g = S[A], + S[A] = S[A - 1], + S[A - 1] = g + } + else if (1 == (3 & z)) + if (2 == (z>>= 2)) + h(function(f) { + var e = 0 + , a = f.length; + return function() { + var b = e < a; + b && h(f[e++]), + h(b) + } + }(S[A])); + else if (4 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + g = t[I], + S[++A] = g; + else if (6 == z) + S[A] = ++S[A]; + else { + if (8 != z) + break; + g = S[A--], + S[A] = S[A]in g + } + else if (2 == (3 & z)) + if (5 == (z>>= 2)) + ; + else if (7 == z) + g = S[A--]; + else if (9 == z) + g = S[A--], + S[A] = S[A] ^ g; + else { + if (11 != z) + break; + oprand = n(r, o), + I = oprand[1], + d[++c] = [[o + 6, I - 4], 0, 0], + o += 2 * I - 2 + } + else if (1 == (z>>= 2)) + g = S[A--], + S[A] = S[A] < g; + else if (8 == z) + oprand = n(r, o), + o += 2 * oprand[0], + I = oprand[1], + S[A] = S[A][I]; + else if (10 == z) + S[++A] = !0; + else { + if (12 != z) + break; + g = S[A--], + S[A] = S[A]>>> g + } + } + return [0, null] + } + var a = [] + , b = 0 + , d = [] + , c = 0 + , r = function(f, e) { + var a = "" + f[e++] + f[e]; + return parseInt(a, 16) + } + , n = function(f, e) { + var a = f[e++] + , b = f[e] + , d = parseInt("" + a + b, 16); + if (d>> 7 == 0) + return d>> 6 != 0 && (d = -64 | 63 & d), + [1, d]; + if (d>> 6 == 2) { + var c = parseInt("" + f[++e] + f[++e], 16); + return 0 != (32 & d) ? d = -32 | 31 & d : d &= 31, + d <<= 8, + c = d + c, + [2, c] + } + if (d>> 6 == 3) { + var r = parseInt("" + f[++e] + f[++e], 16) + , n = parseInt("" + f[++e] + f[++e], 16); + return 0 != (32 & d) ? d = -32 | 31 & d : d &= 31, + d <<= 16, + r <<= 8, + n = d + r + n, + [3, n] + } + } + , i = function(f, e) { + var a = f[e++] + , b = f[e]; + return parseInt("" + a + b, 16) + } + , o = function(f, e) { + var a = "" + f[e++] + f[e]; + return a = parseInt(a, 16), + String.fromCharCode(a) + } + , l = function(f, e, a) { + for (var b = "", d = 0; d < a; d++) + b += o(f, e), + e += 2; + return b + } + , t = function(f, e, b) { + for (var d = 0; d < b; d++) { + var c = n(f, e); + e += 2 * c[0]; + var r = l(f, e, c[1]); + a.push(r), + e += 2 * c[1] + } + } + , s = this + , p = s.Function + , u = Object.keys || function(f) { + var e = {} + , a = 0; + for (var b in f) + e[a++] = b; + return e.length = a, + e + } + ; + return function(e) { + e.length; + for (var d = 0, c = "", i = d; i < d + 16; ) + c += o(e, i), + i += 2; + if ("HNOJ@?RC" != c) + throw new Error("error magic number " + c); + n(e, d += 16); + d += 8, + b = 0; + for (var l = 0; l < 4; l++) { + var s = r(e, d + 2 * l); + b += (3 & s) << 2 * l + } + d += 16; + var p = n(e, d += 16) + , u = p[1] + , v = d += 2 * p[0]; + d += p[1]; + var y = n(e, d); + y[1]; + d += 2 * y[0], + a = [], + t(e, d, y[1]), + f(e, v, u, []) + } +}(); +TAC("484e4f4a403f524300101e172f68af3071ba554d0000000000000000c08c8c020025806d4421131e014302023e22170d44441c21131e0343020440170f44441801131e01041c1680474421131e054302063e22170a44441c131e051e0717164444131e052602010a0118010a02101c161e444418002201170644441c131f0018011800131e081a001d0927041c002611020025c045ce020a250c4444131e0b1e0c0101001f06020d250d444421131e0e43020440001f07020f25805144131e10021102121a02221e1324131e140a010f2201173744441c0200251144441800221e15240a000f02163e00131e17012201171844441c21131e174302044022170a44441c131e171e1804001f08021925114444131e1a1a00221e1b240a000f001f09021c253a44442118004302043e2201170944441c1800263e1707444402000021180043021d3e171344441800170a4444021e16064444021f001800001f0a022025804b441801011708444402211f0102001f0618001f071807150039172c444418061801131e22221e2324131e22221e24240a000f18011e252a0a010f19281f0618072e1f0716511806001f0b02262580ce4402041f0621134318063e2201171044441c13221e15240a000f0227402201171744441c131e081e281e15221e2924130a010f0227402201170d44441c21131e0b4318063e2201171b44441c131e0b221e15240a000f221e2a24022b0a010f15003a2201170d44441c21131e2c4318063e2201171244441c131e2c221e15240a000f022d402201170d44441c21131e2e4318063e1706444420001b010b06260a0010011726444421131e2f4318063e2201171244441c131e2f221e15240a000f02304017064444200012001f0c023125809744131e321a001f06131e08221e332418060234131e081a00220200250c44441b020b00201d35001d360a030f1c131e37221e3824023918060a020f1c1322170844441c131e3722170a44441c131e371e3a170944441800201d351b010b07260a0010173144441322172244441c131e3b131e3c29158064392201171044441c131e3d131e3e2915806439170944441800201d35001f0d023f252d444421131e80404302044022171e44441c131e081e281e15221e2924131e80401e80410a010f0280423e001f0e028043258065441b010b06260a00100117805644028044131e2c42012201171144441c131e2c1e8044131e804541012201170a44441c02804613422201170a44441c02804713422201170a44441c02804813422201171044441c028049134202804a13423a0012001f0f02804b25810444131e2c1e804c1706444420004604444406094444271f062000052f44440233131e084217244444131e08221e3324131e2c02804c131e081a0022211d804d22121d804e0a030f1c0702804f0280500280510280520280530280540280550280560280570280580280590a0b1f0602805a02805b02805c0a031f07180708031f0818082104171944441f0918071809191f0a13180a191706444420001665180608031f0818082104171b44441f0918061809191f0a131e0b180a191706444420001663131e0b08031f0818082104173144441f091809221e805d24131e1002805e02001a020a010f22170e44441c131e0b1809191e805f170644442000164d12001f100280602580c9441b010b07260a001017284444131e8061221e80622402130a010f1f0618060200250d44441b020b00201d8063001d80641b010b08260a001017805c4446044444062d4444271f0618061e8065131e80661e80673e22170e44441c131e80681e2515003e170a44441800201d806305274444131e8068221e80692402806a02000a020f1c131e8068221e806b2402806a0a010f1c071b010b06260a001017284444131e80610122171444441c131e806c2201170944441c131e806d170a44441800201d8063001f1102806e25809f441b010b06260a00100117809044131e0b221e806f240280700a010f1f0618061e8071221e15240a000f221e807224131e100280730280741a0202000a020f221e2a240280750a010f15003a2201173344441c131e2c1e15221e15240a000f221e807224131e100280730280741a0202000a020f221e2a240280750a010f15003a2201171644441c131e2c1e8044221e15240a000f028076400012001f1202807725807144131e1002807802001a021f061322170844441c131e2e22170b44441c131e2e1e807917804944131e2e1e80791f071807221e2a2402807a0a010f15003e2201171444441c1807221e2a2402807b0a010f15003e2201171044441c1806221e132418070a010f17064444200012001f1302807c2580d144261f0646044444060f4444271f07131e0b1e807d1f0605174444131e0b221e807e2402807f0a010f0b001f06071806263e1705444400131e0b221e806f240280800a010f1f07028081131e80822615c02710131e22221e24240a000f2a150a0a02102802808128131e1a1a00221e1b240a000f281f081800028083180828281f00180718001d80841318080200253144441b020b011800041c4604444406044444051c44441b020b06221e8085241b020b070a010f1c131b020b080907000d1806221e80862418070a010f1c001f140280872580bf4418001e251f0618061502331f0718011733444418001806150129191f0818071504291f07180818071503293a2201170a44441c180818073917064444260018081f0715001f08180818063a17804a4418001808131e8088221e80892418001808191580ff2f18001808191508351580ff2f18001808191510351580ff2f18001808191518351580ff2f0a040f0d18082d1f0816bfb41800221e808a2402000a010f1f081801171344441808221e808b24150018070a020f001808001f1502808c2580814418001e251f0618061502341f07180615032f1500401709444418072d1f071801171c4444131e808d18071501281a011f081808180718060d160e4444131e808d18071a011f0815001f09180918063a172b44441808180915023423191800221e808e2418090a010f180915032f15033333300d18092d1f0916521808001f1602808f250b444418001480902f001f1702809125314444180215053518011502333118011503351802150433312818001801311805180315032f180431191802312831001f180280922518444418001e2515043a170a4444180015041d251800001f190280932580d24418001e251f0618061501291f0718001807191f0915001f0a131e22221e23241506153418062b280a010f1500301f0d180d150039178097441b010b17180a1b010b805f28041f0a180a15023515032f1f0b15001f0c180c18073a173c44441800180c150128191f081800180c1b010b171800180c191b010b1826180a18081809180c180b18010a061028040d271f09180c2d1f0c164118000b001f08180018071b010b1718001807191b010b1826180a180818091807180b18010a061028040d271f09180d2e1f0d16bf671800001f1a0280942580d34418001e251f0618061501291f0718000b001f08131e22221e23241506153418062b280a010f1f0d1b010b17180d1b010b805f2a041f0a180a15004017809144180a15023515032f1f0b18071f0c180c150039173c44441800180c150129191f091800180c1b010b171800180c191b010b1826180a18081809180c180b18010a061029040d271f08180c2e1f0c164118001807191f0918001b010b1718000b001b010b1826180a180818091500180b18010a061029041d1f271f081b010b17180a1b010b805f29041f0a16bf6d1800001f1b0280952581a744131e1002809602001a02221e132418000a010f170744441800000a001f0618001e251f0715001f0815001f09180818073a178165441800221e808e2418080a010f1f0a180a1580803a17194444180618091800221e80972418080a010f0d16812b44180a1588003a172b444418061809131e8088221e8089241580c0180a15063430158080180a153f2f300a020f0d1680fa44180a15c0d8003a2201170c44441c180a15c0dfff391737444418061809131e8088221e8089241580e0180a150c3430158080180a150634153f2f30158080180a153f2f300a030f0d1680ae44180815012818073a178098441800221e808e2418081501280a010f1f0b180a15c0dc003a22170c44441c15c0dc00180b3c22170c44441c180b15c0dfff3c17806244180a1583ff2f150a33180b1583ff2f3015c10000281f0c18061809131e8088221e8089241580f0180c151234153f2f30158080180c150c34153f2f30158080180c150634153f2f30158080180c153f2f300a040f0d18082d1f08160e4444131e80980280991a014718082d1f0818092d1f0916be991806221e808a2402000a010f001f1c02809a25825c44131e808d18011a011f0615001f0715001f0818001e251f09180718013a22170a44441c180818093a178212441800221e808e241808222d1f080a010f1f0a180a1504341f0b180b15004017806f44180b15014017806644180b15024017805d44180b15034017805444180b15044017804b44180b15054017804244180b15064017394444180b15074017304444180b150c4017324444180b150d4017294444180b150e4017805c44180b150f401780a94416816b4416817d4418061807180a0d16817244180818093a1729444418061807180a151f2f1506331800221e808e241808222d1f080a010f153f2f300d160e4444131e809802809b1a014716813644180815012818093a1780404418061807180a150f2f150c331800221e808e241808222d1f080a010f153f2f150633301800221e808e241808222d1f080a010f153f2f300d160e4444131e809802809b1a01471680e044180815022818093a1780b044180a15072f1512331800221e808e241808222d1f080a010f153f2f150c33301800221e808e241808222d1f080a010f153f2f150633301800221e808e241808222d1f080a010f153f2f3015c10000291f0c1500180c3c22170c44441c180c15cfffff3c172f444418061807222d1f07180c150a341583ff2f15c0d800300d18061807180c1583ff2f15c0dc00300d161a4444131e809802809c180c221e152415100a010f281a0147160e4444131e809802809b1a0147161a4444131e809802809d180a221e152415100a010f281a014718072d1f0716bde1180718013a170a4444180618071d25131e80881e8089131e8088180610001f1d02809e2582ad440a001f06131e808d15c080001a011f0715001f0815001f0918001e251f0a180818013a22170a44441c1809180a3a17824a441800221e808e241809222d1f090a010f1f0b180b1504341f0c180c15004017806f44180c15014017806644180c15024017805d44180c15034017805444180c15044017804b44180c15054017804244180c15064017394444180c15074017304444180c150c4017324444180c150d4017294444180c150e4017805c44180c150f401780a94416816b4416817d4418071808180b0d168172441809180a3a1729444418071808180b151f2f1506331800221e808e241809222d1f090a010f153f2f300d160e4444131e809802809b1a0147168136441809150128180a3a1780404418071808180b150f2f150c331800221e808e241809222d1f090a010f153f2f150633301800221e808e241809222d1f090a010f153f2f300d160e4444131e809802809b1a01471680e0441809150228180a3a1780b044180b15072f1512331800221e808e241809222d1f090a010f153f2f150c33301800221e808e241809222d1f090a010f153f2f150633301800221e808e241809222d1f090a010f153f2f3015c10000291f0d1500180d3c22170c44441c180d15cfffff3c172f444418071808222d1f08180d150a341583ff2f15c0d800300d18071808180d1583ff2f15c0dc00300d161a4444131e809802809c180d221e152415100a010f281a0147160e4444131e809802809b1a0147161a4444131e809802809d180b221e152415100a010f281a0147180815c07ffe3b1731444418081501281f0d1807180d1d25180618061e25131e80881e8089131e80881807100d1801180d291f01157f1f0818082d1f0816bda91808150039171f4444180718081d25180618061e25131e80881e8089131e80881807100d1806221e808a2402000a010f001f1e02809f2580ac441801213e2201170944441c1801263e2201170a44441c180115003a170a444418001e251f01180115003e17074444020000131e1002809602001a02221e132418000a010f2201171944441c131e100280a002001a02221e132418000a010f0117214444180118001e253e170744441800001800221e80a124150018010a020f00180115c0ffff3a171444441b010b1d26180018010a0210161044441b010b1e26180018010a0210001f1f0280a2258067441800213e2201170944441c1800263e2201170c44441c18001e2515003e170744441800001b010b1c1800041f001b010b1c1801041f011b010b15261b010b1a261b010b16261800200a02101b010b191b010b16261801120a0210040a0210120a0210001f200280a3258063441800213e2201170944441c1800263e2201170c44441c18001e2515003e170744441800001b010b1c1801041f011b010b1f1b010b15261b010b1b261b010b16261800120a02101b010b191b010b16261801120a0210040a0210200a021004001f210280a4258181440280a51f0618011708444418011f0602001f0715001f0918001e2518091503283b1780aa441800221e808e241809222d1f090a010f1580ff2f1510331800221e808e241809222d1f090a010f1580ff2f150833301800221e808e241809222d1f090a010f1580ff2f301f0818071806221e80972418081480a62f1512340a010f281f0718071806221e809724180815c3f0002f150c340a010f281f0718071806221e8097241808158fc02f1506340a010f281f0718071806221e8097241808153f2f0a010f281f0716bf4f18001e251809291500391780a5441800221e808e241809222d1f090a010f1580ff2f15103318001e25180939171b44441800221e808e2418090a010f1580ff2f150833160644441500301f0818071806221e80972418081480a62f1512340a010f281f0718071806221e809724180815c3f0002f150c340a010f281f07180718001e25180939171b44441806221e8097241808158fc02f1506340a010f160744440280a7281f0718070280a7281f071807001f220280a8251144440280a9221e2a2418000a010f001f230280aa2581094402001f0615001f07180718001e251503293a1780f0441b010b231800221e80972418071500280a010f041f081b010b231800221e80972418071501280a010f041f091b010b231800221e80972418071502280a010f041f0a1b010b231800221e80972418071503280a010f041f0b1806131e8088221e80892418081502331809150435300a010f281f061800221e80972418071502280a010f0280a73f172744441806131e8088221e80892418091504331580f02f180a150235150f2f300a010f281f061800221e80972418071503280a010f0280a73f172144441806131e8088221e808924180a1506331580c02f180b300a010f281f0618071504281f0716bf091806001f240280ab25804c441800153f2f1f00131e8088221e80892418001800151a3a170b444415804116254444180015343a170b4444158047161544441800153e3a170a4444157c16064444156f280a010f001f250280ac253444441b010b251f06180618001518340418061800151234042818061800150c340428180618001506340428180618000428001f260280ad258097441b010b805e1e80ae0280af281f061b010b1426180602002580774418001e2515083a1705444400460444440604444405805e441b010b21261b010b241800221e80b02415080a010f041800221e80b024150015080a020f0a02101f0618060280b13e171444441b010b28262018000a02101c161a444418060280b23e171044441b010b28261218000a02101c07000a02101c001f270280b3258050441b010b805e18001d80b4460444440604444405394444131e806817164444131e8068221e8069240280b518010a020f1c131e80b617164444131e80b6221e8069240280b518010a020f1c07001f280280b72580ab4402001f06460444440604444405804144131e806817154444131e8068221e80b8240280b50a010f1f061806012201170944441c131e80b617154444131e80b6221e80b8240280b50a010f1f0607180617805644460444440604444405804a441b010b21261b010b241806221e80b02415080a010f041806221e80b024150015080a020f0a02101f0718070280b13e170a444420001610444418070280b23e1706444412000712001f290280b92580e844121f061b010b805e1e80b4203e170b4444201f06162344441b010b805e1e80b4123e170b4444121f06160e44441b010b29260a00101f06131e081a0022121d2e2218061d80ba22121d80bb22121d3522121d80bc22121d80bd22121d804c22121d806322121d80be220280bf2506444420001f0818081d131f0718071b010b0c260a00101d80bb18071e80bb01178054441b010b0d1807041c1b010b111807041c18071b010b0e260a00101d80bc18071b010b0f260a00101d80bd18071b010b10260a00101d804c18071b010b12260a00101d80be18071b010b13260a00101d2e1807001f2a0280c025805b44131e08221e80c12418000a010f1f0615001f0718061e251501291f08180815003b173344441800180618081919170a444415011606444415001f09180918061e25180829150129331807301f0718082e1f08164a1807001f2b0280c22536444415001f06180618011e253a17244444180015c1003f2a1801221e808e2418060a010f281500351f0018062d1f0616571800001f2c0280c32536444415001f06180618011e253a1724444418001801221e808e2418060a010f3115c1003f2a1500351f0018062d1f0616571800001f2d0280c42580704418002201170744441c02001f061806221e807224131e100280c502001a0202000a020f1f061806221e2a240280af0a010f157f40172044441806221e80a12415001806221e2a240280af0a010f0a020f1606444418061f061806170a44441806160744440280c61f061806001f2e0280c72580aa4418002201170744441c02001f061806221e805d24131e100280c802001a020a010f1f0718071716444418070b00221e80a12415010a010f1606444402001f061806171544441806221e80c9240280ca0a010f16054444261f08131e081a001f0918081780414415001f0a180a18081e253a1732444418091808180a19221e80c9240280a70a010f0b001808180a19221e80c9240280a70a010f0b010d180a2d1f0a16491809001f2f0280cb25808e441800012201171744441c131e80cc221e80cd2418000a010f0280ce3e170a4444131e081a0000131e08221e80c12418000a010f221e80cf240a000f1f06131e081a001f0715001f08180818061e253a173844441801171b44441807180618081918001806180819190200280d161444441807180618081918001806180819190d18082d1f0816431807001f300280d0258078441800012201171744441c131e80cc221e80cd2418000a010f0280ce3e17074444020000131e08221e80c12418000a010f221e80cf240a000f1f0602001f0715001f08180818061e253a17284444180718061808190a010280a7281800180618081919280280ca28281f0718082d1f0816531807001f310280d12580c244131e0b221e806f240280700a010f1f07180715301d80d2180715101d80d31807221e80d4240280d50a010f1f0818080280d61d80d71808221e80d8240280d91502150c0a030f1c180815021d80da180815011d80db18080280dc1d80dd1808221e80de24150815081508150015020a050f1c1808221e80df240a000f1c1807221e8071240a000f1f0615001f09180915203a17294444180015c1003f2a1806221e808e24180018061e252c0a010f281500351f0018092d1f0916541800001f320280e02521444446044444060a4444271f06157f00050e44441b010b321480e1040007001f330280e225124444110280e21d80e31118001d80e4001f340280e5251e44444604444406094444271f062000050c4444131e806801010007001f350280e6251e44444604444406094444271f062000050c4444131e80b601010007001f360280e7251e44444604444406094444271f062000050c4444131e806101010007001f370280e8252e44441b010b0a1b010b37260a0010041b010b0a1b010b36260a001004281b010b0a1b010b35260a00100428001f380280e925244444131e80ea1f0618061e80d20280812818061e80d3280280812818061e80eb28001f390280ec251a4444131e80ea1f0618061e80ed0280812818061e80ee28001f3a0280ef25806b44131e80f0020025805e440280f1131e2c4217804c44131e2c221e80f1240a000f221e80f2240200252e44441b030b0018001e80f30280812818001e80f4280280812818001e80f5280280812818001e80f628041c000a010f1c160a444418000200041c001a01001f3b0280f725807c440280f81f0615001f0721131e2c1806194302044017104444131e2c1806191f07161b444421131e2c18061943020440170c4444131e2c1806191f0746044444060a4444271f09121f0805174444131e0b221e80f9240280fa0a010f1c201f08070280fb13421f0918070280812818082802808128180928001f3c0280fc25806044131e1a1a001f061806221e80fd2415010a010f1c1806221e80fe2415050a010f1c15001806221e80ff240a000f291f071806221e80fe24150b0a010f1c15001806221e80ff240a000f291f08131e22221e810024180718080a020f001f3d0281012580724446044444060a4444271f0602000005805f44131e0b221e806f240280700a010f1f061806221e80d4240281020a010f1f071807221e8103240281040a010f1f081807221e81052418081e81060a010f1f091807221e81052418081e81070a010f1f0a18090280c628180a280007001f3e0281082582a44402810902810a02810b0a031f06131e081a001f07131e081a001f081806031f091809210417806c441f0a131e0b221e806f2402810c0a010f1f0b180b02810d1d810e180b1e810f0281101d8111180b1e810f180a1d8112131e0b1e807d221e808624180b0a010f1c1807180a180b1e81130d1808180a180b1e81140d131e0b1e807d221e808524180b0a010f1c16bf9302811502811602811702811802811902811a02811b02811c02811d02811e02811f02812002812102812202812302812402812502812602812702812802812902812a02812b02812c02812d02812e02812f02813002813102813202813302813402813502813602813702813802813902813a02813b02813c02813d02813e02813f02814002814102814202814302814402814502814602814702814802814902814a02814b02814c02814d02814e02814f02815002815102815202815302815402815502815602815702815802815902815a02815b0a80471f0915001f0b271f0a271f0c15001f0d180d18091e253a1780f2441806031f0e180e21041780dd441f0f131e0b221e806f2402810c0a010f1f10181002810d1d810e18101e810f0281101d811118101e810f1809180d1902815c28180f281d8112131e0b1e807d221e80862418100a010f1c18101e81131807180f19402201171044441c18101e81141808180f19401f11131e0b1e807d221e80852418100a010f1c181117805a44180d151e3a171244441501180d33180a301f0a163f4444180d151e3b22170a44441c180d153c3a171544441501180d151e2933180b301f0b161a4444180d153c3b171144441501180d153c2933180c301f0c1607444416bf22180d2d1f0d16bf0a180a221e152415100a010f180b221e152415100a010f180c221e152415100a010f0a03221e808a2402815c0a010f001f3f02815d2580f44415051f060a001f07131e2c1e80441f0818082201170744441c0a001f0915001f0a180a18063a1780af44460444440604444405809b441809180a191f0b0a001f0c15001f0d180d180b1e253a17354444180b221e815e24180d0a010f171e4444180c221e815f24180b221e815e24180d0a010f1e81600a010f1c180d2d1f0d1646180b1e80e30200281f0d180b1e816117114444180d180b1e8161020028281f0d180d180b1e8162020028281f0d180d180c221e808a2402000a010f281f0d1807221e815f24180d0a010f1c07180a2d1f0a16bf4f1807221e808a240281630a010f221e80b02415001584000a020f001f804002816425809b442118014302816540170544440018000280a7281f061801221e80c924131e1002816602001a020a010f1f0715001f09180918071e253a1780604418071809191f081808221e80972415000a010f0281673e171844441808221e808b24150118081e250a020f1f08165a1808221e2a2418060a010f15003e171744441808221e808b2418061e2518081e250a020f0018092d1f0916bf9c001f80410281682580744446044444060a4444271f060200000580614402001f06131e8068171d4444131e8068221e80b82418000a010f1f06180617074444180600131e80b6171d4444131e80b6221e80b82418000a010f1f061806170744441806001b010b8041261800131e0b1e81690a02101f0618060007001f804202816a25808944460444440604444405807c44131e806817154444131e8068221e806924180018010a020f1c131e80b617154444131e80b6221e806924180018010a020f1c14816b1f06131e0b180002816c281d8169131e0b18000280a72818012802816d28131e1a131e1a1a00221e1b240a000f1806281a01221e816e240a000f2802816f281d816907001f80430281702525444446044444060d4444271f0618061e80e400050f4444131e81710281721a011c07001f804402817325124444131e8174221e15240a000f1e25001f80450281752581bb441b010b06260a00102201170d44441c1b010b08260a001017074444020000131e81762201170944441c131e81772201170944441c131e81781f06131e80f002002581744446044444060d4444271f0618000200041c05815e441b020b0617814f441b020b06131e081a0022131e081a00220281791d817a0a011d817b1a011f06020025054444001f07131e1002817c02001a021f08131e1002817d0280741a021f091806221e817e2402000a010f1c131e817f260200250d44441b030b000200041c001581f40a02101c1806221e8180240a000f1f0a180a131e80f04117374444180a221e80f2240200251344441b030b06221e81812418000a010f000a010f221e80f224020025054444000a010f1c162f44441806221e8180240200251c44441b030b06221e81812418001b030b071b030b070a030f1c0018070a020f1c1806020025806244180022170a44441c18001e818222170d44441c18001e81821e8182178042441b030b08221e81832418001e81821e81820a010f1f0618061726444418060b00221e805d241b030b090a010f1f071807170e44441b030b0018060b00041c001d8184160a444418000200041c07001a01001f804602818525805944028186221e807224131e100281870280741a020200253c4444131e22221e24240a000f15102a1500301f0618000281883d170a44441806160c4444180615032f1508301f071807221e152415100a010f000a020f001f80470281892580504418001e2515223e178043441b010b2c2615001800221e808b24150015200a020f0a02101f061806221e15240a000f221e808b24150015020a020f1800221e808b24152015220a020f3e0012001f804802818a258060441b010b804202818b041f06180622170d44441c1b010b8048180604170744441806001b010b8047260a00101f0618061b010b2c26150018060a021028221e808b24150015220a020f1f061b010b80432602818b18060a02101c1806001f804902818c25324444180001170744440200001b010b0b1504041f0618061b010b22261b010b2026180018060a021002818d0a021028001f804a02818e258155441801173b444415001f0615001f07180718001e253a1728444418001807191e818f17154444180018071918011806222d1f06191d819018072d1f07165302001f061800221e8191240200251c44441b02220b061b010b0a18001e81900402819228281d8193000a010f1c18061b010b09260a0010281f061b010b8047260a00101f07131e22221e23241807221e808e2415030a010f15082b0a010f1807221e808e2415030a010f15082c281f081807221e808b24150415041808280a020f1f091b010b221b010b2026180618090a0210180728041f061b010b805e221e8194028195131e8196180604280280ca28281d8194271f0a1b010b1426180a020025804e4418001e819715003d22170a44441c18001e8198173644441b010b805e1b010b804a18001e8198041d81991b010b805e18001e81981d819a1b010b80432602819b18001e81980a02101c000a02101c001f804b02819c25848744131e2c22170644441c1322170844441c131e0b011705444400131e081a002202819d1d819e2215041d819f221b010b805e1e819d1d8190131e081a00220281a01d819e2215031d819f221b010b091d81a1131e081a00220281a21d819e2215031d819f221b010b381d81a1131e081a00220280701d819e2215031d819f221b010b331d81a1131e081a00220281a31d819e2215031d819f221b010b091d81a1131e081a00220281a41d819e2215001d819f131e081a00220281a51d819e2215001d819f131e081a00220281a61d819e2215001d819f131e081a00220281a71d819e2215001d819f131e081a00220281a81d819e2215001d819f131e081a00220281a91d819e2215031d819f221b010b391d81a1131e081a00220281aa1d819e2215031d819f221b010b3a1d81a1131e081a00220281ab1d819e2215011d819f131e081a00220281ac1d819e2215011d819f131e081a00220281ad1d819e2215011d819f131e081a00220281ae1d819e2215001d819f131e081a00220281af1d819e2215031d819f221b010b3b1d81a12215011d818f131e081a00220281b01d819e2215031d819f221b010b3c1d81a1131e081a00220281b11d819e2215031d819f221b010b3d1d81a1131e081a00220281b21d819e2215031d819f221b010b091d81a1131e081a00220281b31d819e2215031d819f221b010b3e1d81a1131e081a00220281b41d819e2215031d819f221b010b3f1d81a1131e081a00220281b51d819e2215031d819f221b010b80401d81a1131e081a00220281b61d819e2215031d819f221b010b091d81a1131e081a00220281b71d819e2215001d819f131e081a00220281b81d819e2215031d819f221b010b80421d81a12202819b1d81b9131e081a00220281ba1d819e2215031d819f221b010b80441d81a1131e081a00220281bb1d819e2215031d819f221b010b80451d81a1131e081a00220281bc1d819e2215031d819f221b010b80461d81a12215011d818f131e081a0022022e1d819e2215011d819f131e081a00220281bd1d819e2215041d819f221b010b805d1e81be1d8190131e081a00220281bf1d819e2215031d819f221b010b80491d81a1131e081a00220281c01d819e2215031d819f221b010b091d81a1131e081a00220281c11d819e2215041d819f0a221f060a001f07180608031f08180821041780e0441f0918061809191e819f1f0a180a15004017234444180a15014017374444180a15024017804444180a150340178053441680a94418061809191b010b0a131e2c18061809191e819e19041d819016808c4418061809191318061809191e819e191d8190168076441806180919131e0b18061809191e819e191d819016805e4418061809191e818f17324444131e80f0172644441807221e815f2418061809191e81a1221e292418061809191e81b90a010f0a010f1c16244444180618091918061809191e81a1221e29242618061809191e81b90a020f1d819016bf1f131e80f017364444131e80f0221e81c22418070a010f221e80f2240200251544441b010b804b261b020b0618000a02101c000a010f1c160d44441b010b804b1806041c001f804c0281c325834d441b010b805e1e819d15003e17134444131e37221e81c4240281c50a010f1c2118004302024022170a44441c18001e81c6170e44441b010b340281c71a014715001f0615001f0715c0fff11f08131e1a1a00221e1b240a000f1583e82b1500351f091b010b805d1e81c80122173844441c1b010b2d261b010b2d26150018090200280a0210131e2e1e8079221e808b24131e2e1e81c91e251502280a010f0a021018082c1f071809180718082a31150035221e152415020a010f1f0a180a1f0b180a1e25152039171b4444180a221e808b24180a1e251520290a010f1f0b163a4444180a1e2515203a172f444402001f0c15001f0d180d1520180a1e25293a17124444180c021f281f0c180d2d1f0d1666180c180b281f0b0281ca1f0c0281cb1f0d0281cb1f0e0281cc1f0f180f180e28180d28180c28180b281f06131e808226180615020a02101f061b010b2d26150018060200280a02101f101b010b2a260a00101f111b010b8065221e81cd240281ce18000a020f1c02001f1218001e807d22171a44441c131e80cc221e80cd2418001e807d0a010f0280ce40173644440281cf1b010b2c261500131e80cc221e80cd241b010b302618001e807d18001e81d00a02100a010f0a0210280280ca281f121b010b2f18001e81c6041f1318001e81d1171a4444131e08221e81d224181318001e81d10a020f1606444418131f1318121b010b31181304281f1218120281d3281b010b2e18001e81c604280280ca281f1218120281d4280281d5281f121b010b8065221e81cd240281d618120a020f1c1b010b2b1811041f141b010b805d1e81c80122170d44441c1b010b33260a00101f151b010b805e1e819c22170e44441c1b010b805d1e81c80122172344441c1b010b805e1e81992201171444441c1b010b804a1b010b804202819b04041f161b010b80611806041b010b806118061481d72b15003504281b010b8061181518063104281b010b80611b010b2d2618101b010b805d1e81c80122170b44441c131e2c1e81b7221e15240a000f0a021018082c1510331b010b2d26181018120200280a021018082c3004281b010b806118141508331b010b805d1e81d81504333018063104281b010b26180704281f171b010b80611500041c1816170b444418171816281f171817001f804d0281d9253c444415001f0618061b010b805e1e81da1e253a172544441b010b805e1e81da180619221e132418000a010f17064444200018062d1f06165012001f804e0281db25845a44131e81dc1e281f0618061e80621f0718061e81dd1f0818061e81de1f0918061e81df1f0a1806020025804944111e81e0221e815f24131e081a00220281dd1d81e1221b031d81e20a010f1c131e100281e302121a02221e132418000a010f170a44441118011d81e41b020b08111b0310001d81dd1806020025134444111b031d81e51b020b0a111b0310001d81df18060200253e4444110a001d81e0111e81e0221e815f24131e081a00220280621d81e1221b031d81e20a010f1c1118001d81e61118011d81e71b020b07111b0310001d80620281e80280640281e90281ea0281eb0281ec0281ed0a071f0b18060200258362441b010b804e111e81e70417834b44111e81e7221e2a240281ee0a010f157f39170d44441b020b09111b0310001118001d81ef111e81f01f06111e81e81f07111e80641f08111e81e91f09111e81ea1f0a111e81eb1f0b111e81ec1f0c111e81ed1f0d111e81f11f0e111e81f21f0f131e081a001f1015001f1118111b020b0b1e253a1721444418101b020b0b181119111e81f31b020b0b181119190d18112d1f111658131e081a001f11111e81e60281f43d1780d644131e100281f502121a02221e1324111e81e40a010f178082441811201d81d0111e81ef17174444111e81ef221e80c9240280ca0a010f16054444261f12131e081a001f1318121780464415001f14181418121e253a1737444418131812181419221e80c9240280a70a010f0b00131e81f61812181419221e80c9240280a70a010f0b01040d18142d1f141644181118131d807d163f4444131e100281f702121a02221e1324111e81e40a010f171d44441811131e80cc221e81f824111e81ef0a010f1d807d160d44441b020b09111b031000111e81e71f121b010b805e1e81f91e251500391780754415001f1318131b010b805e1e81f91e253a17804d441b010b805e1e81f91813190b001f141814221e1324111e81e70a010f17254444111e81e7221e80722418141b010b805e1e81f91813190b010a020f1f12160c444418132d1f1316bfa91b010b8065221e81cd240281fa18120a020f1c181118121d81c6131e81f618111e81c60418111e81c63d171344441811131e81fb18111e81c6041d81c61b010b804d1811041f13111e81e7111e81e7221e2a240280af0a010f157f40170e44440281fc181328160a44440281fd181328281f14111e81e022171244441c111e81e00b001e81e10280623f170644442600111e81e01f1515001f16181618151e253a17354444181615003e1710444418151816191e81e218141d1e1118151816191e81e1191118151816191e81e2101c18162d1f161646111e81e5170f4444111e81df11111e81e5101c110281e0091118061d81f01118071d81e81118081d80641118091d81e911180a1d81ea11180b1d81eb11180c1d81ec11180d1d81ed11180e1d81f111180f1d81f215001f1618161b020b0b1e253a17214444111e81f31b020b0b18161918101b020b0b181619190d18162d1f1616581b020b09111b0310001d81de001f804f0281fe25804844131e81dc1a001f061806221e8062240281f41801200a030f1c1806221e81dd240281ff0282000a020f1c1806221e81de24131e80cc221e80cd2418000a010f0a010f1c001f805002820125807244131e0b22170b44441c131e0b1e82020117054444001b01131e1a221e8203240a000f1d82041b010b807008031f0618062104171e44441f07131e0b221e82022418071b010b80701807190a020f1c1660131e817f260200250d44441b010b805620041c001b010b806b0a02101c001f80510282052580644415001f0618001e82062201170a44441c18001e82072201170a44441c18001e82082201170a44441c18001e82091708444415011f061b010b8054131e081a002218001e81601d81a12218061d818822131e1a221e8203240a000f1d820a041c001f805202820b2580a74418001f0618001e81601f0718001e820c17804e44180702820d3e2201170b44441c180702820e3e1718444418001e820f0b001f0618061e82101f081623444418070282113e1718444418001e820c0b001f0618061e82101f081605444400131e081a002218071d81a12218061e82121d81882218061e82131d821422131e1a221e8203240a000f1d820a1f091808170b4444180918081d819f1b010b80541809041c001f8053028215258078441b010b8056260a0010170544440018001f0618061e820a1f071b010b806c15003f17144444180618061e820a1b010b806c291d820a18061b010b805518061e81a1041d81a11b0118071d821618001e8217123e171044441b01220b806f1501281d82181b010b806d221e815f2418060a010f1c001f805402821925804144131e081a002215001d821a2215011d821b2215021d821c2215031d821d2215041d821e2215051d820d2215061d82112215071d820e1f061806180019001f805502821f258070441b010b806d1e251b010b80693b171044441b010b8058260a00101c200018002201171c44441c131e1a221e8203240a000f1b010b806e291b010b806b3b172d44441b010b806d1e251b010b806a3b171044441b010b8058260a00101c20001b010b8059260a00101c200012001f80560282202580bd441b010b806d1e2515003d1705444400131e081a00221b010b805e1e819a1d820a22131e2c1e81b71d822122131e2e1e80791d819022131e081a00221b010b806d1d8222221b010b806f1d121d81a11f061b010b0b1508041f07131e081a002218061d82231f08131e081a002218071b010b22261b010b20261b010b8068221e822424131e80cc221e80cd2418060a010f0a010f18070a02100280a90a0210281d82231f081b010b80502618081b010b805e1e82250a02101c001f8057028226252044441b010b8059260a00101c1b010b8057260a00101c1b010a001d8227001f8058028228253044441b010b807008031f0618062104171e44441f07131e0b221e82292418071b010b80701807190a020f1c1660001f805902822a2580424415001f0618061b010b805e1e822b1e253a172c44441b010b805e1e81da221e815f24131e101b010b805e1e822b1806191a010a010f1c18062d1f061649001f805a02822c2580404415001f0618061b010b805e1e81f91e253a172a44441b010b805e1e81f9180619131e101b010b805e1e81f91806190b001a011d1f18062d1f06164b001f805b02822d258100441b010b805d1e81c8170644442600131e08221e81d2241b010b805e18000a020f1c1b010b805e1e819d15003e2201172044441c131e22221e23241b010b805e1e819d0a010f1b010b805e1e819d3f170e44441b010b3402822e1a01471b010b805e1e819c170e44441b010b8051260a00101c1b010b805e1e819c170d44441b010b27260a00101c1b010b805e1e81db178050441b010b805e1e822b1e2515003e2201171144441c1b010b805e1e822b1e815f01170e44441b010b3402822f1a01471b010b805a260a00101c1b010b805b260a00101c1b010b804f260a00101c1b010b805e1e819c17144444131e817f261b010b804c15000a02101c001f805c21131e081e81d2430206401780c044131e08221e3324131e080281d2131e081a00220281d225808f441800263e2201170944441c1800213e170e4444131e82300282311a0147131e081800041f0615011f0718071b021e253a178058441b021807191f081808264022170944441c1808214017374444180808031f0918092104172944441f0a131e081e281e8232221e29241808180a0a020f170e44441806180a1808180a190d165518072d1f0716bfa41806001f805d18805d1d804d22201d804e22201d82330a030f1c131e081e80c10117810644131e0802002580f644131e081e281e82321f06131e081a0022261d15221e82342402150a010f011f07021502823502823602823202823702823402110a071f0818081e251f0902002580b2442118004302064022171744441c211800430202402201170944441c1800263e170e4444131e82300282381a01470a001f06180008031f0918092104172844441f071b020b06221e2924180018070a020f171144441806221e815f2418070a010f1c16561b020b071780444415001f0818081b020b093a173544441b020b06221e292418001b020b081808190a020f171644441806221e815f241b020b081808190a010f1c18082d1f08164618060000260a00101d80c1131e081a00220282391d81be2215011d81d822121d81c81f805d131e081a0022121d823a2215001d819d22121d819c22121d81db220a001d822b220a001d81da220a001d81f92202823b1d81942202823c1d80ae2202823d1d82251f805e14823e1f805f15001f80600200252044441b011b010b80631d823f1b0118001d82401b010b26180015023404001f8062271f80610200252d44441b011b010b80641d823f1b010b8060151c331800150435301f061b0118001d82401b010b26180604001f80630200252a44441b011b010b80621d823f1b010b261b010b8060151a33180015063530041b010b2518000428001f8064131e081a00220200252d44441b010b805e1e823a22171e44441c131e37221e38240282411800280282422802824318010a030f1c001d81cd1f8065131e80881e80891f80660282441f8067131e081a00220200258086441800263d170744440200001b010b8068221e824524180015060200251444441b010b8067221e80972418000a010f000a030f1f0618061e2515042c1f07162c44441807150040172344441807150140171d44441807150240171b4444180715034017194444161c4444180600180602824628001806028247280018060280a72800001d8224220200252544441b010b8068221e824524180015100200250d44441b010b8066180004000a030f001d82482202002585f1441800263d17074444020000131e081a001f08131e081a001f0902001f0a02001f0b02001f0c15021f0d15031f0e15021f0f0a001f1015001f1115001f1215001f13181318001e253a1782c1441800221e80972418130a010f1f0a131e081e281e8232221e29241808180a0a020f01171544441808180a180e222d1f0e0d1809180a200d180c180a281f0b131e081e281e8232221e29241808180b0a020f170c4444180b1f0c16825a44131e081e281e8232221e29241809180c0a020f1781ae44180c221e808e2415000a010f1581003a1780b54415001f061806180f3a1780404418111501331f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218062d1f0616bfbe180c221e808e2415000a010f1f0715001f06180615083a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb11680bc4415011f0715001f061806180f3a1780474418111501331807301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1215001f0718062d1f0616bfb7180c221e808e2415000a010f1f0715001f06180615103a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e8249241502180f0a020f1f0d180f2d1f0f1809180c09168061441808180c191f0715001f061806180f3a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e8249241502180f0a020f1f0d180f2d1f0f1808180b180e222d1f0e0d131e8088180a041f0c18131501281f1316bd3b180c02004017824644131e081e281e8232221e29241809180c0a020f1781ae44180c221e808e2415000a010f1581003a1780b54415001f061806180f3a1780404418111501331f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218062d1f0616bfbe180c221e808e2415000a010f1f0715001f06180615083a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb11680bc4415011f0715001f061806180f3a1780474418111501331807301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1215001f0718062d1f0616bfb7180c221e808e2415000a010f1f0715001f06180615103a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e8249241502180f0a020f1f0d180f2d1f0f1809180c09168061441808180c191f0715001f061806180f3a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e8249241502180f0a020f1f0d180f2d1f0f15021f0715001f061806180f3a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e815f2418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb118111501331f11181218011501293d171c44441810221e815f2418021811040a010f1c160f44441609444418122d1f1216501810221e808a2402000a010f001d82451f806815812c1f806915141f806a15c927c01f806b15001f806c0a001f806d15001f806e15001f806f131e081a00221880531d821a221880531d821b221880531d821c221880521d821d221880521d821e221880531d820d221880531d8211221880531d820e1f807018805d1222170b44441c180c260a00101d81c818804d1f8071180018805c1d822d18001880711d824a131e08221e3324180002824b131e081a0022201d804d0a030f1c000a02101c00824c000756f935dfcfaa41065ce023deba51065eec28b19d070946ea34aa6b401e46070657e035be4c3a0855f339814bc1dfab0352ea3e067cea349310580e51f0159bec3d657920be37d8b25d045af92c4c0857e40b6751c3debe0c57e30f6835880c7c651620a4095afe294c1f470e77290e7ae00044eb004e3e6d0d7521ac63085afc2558c7c7c6b10661f51d01c6800b50fe133fa7570654d6c0a2015a0447f6f7140b7bc0c527661c57f5fdf7e80847fad8074acfd48a2168f9ed14308c0517f4a16640062c8248fbf1c78d2051b3771f347b0c36b13f93f30640f6f4e61e431043ede5fac71c49de8f0e401b2190fbf70c54fcedcef7c4a07f4bde6d540477fbe9c00754fed4fabb40f40854f9d0ef8f1831a80751f2c8ad6648e7010201030c41c1dc843b9adcf8f41138653e039087db5d19a3ab97e6396a22b452df98c781120a44f6d5632866071244c27f2063ffe9f54a186ff14a2e1a53c5ff5e33c3fc43d5f2b4cd82252dd5e46c047ec3cd9b0555cfd393ef0641c5ae6356da065fc0ad683a850957c9aa5e0e42d68f080f68c8a849e71233ff0b7f0652d5721c0943daa15af0ce86dcbb0450c8bd5a075ac4b124a878df0877c4bb3f85113d75095dcdaa3c635ab170f31268c2bd377c133fcfc4eeead7730d3d9de8e2085fc1800942d36a2f075bc695052286ee1068df88160f5da5619233680a1814448a0e57d48ff11814337d1a40e3d06234057adf90e8fe0e57d692f1dd92f2bd2fac0647b75e025ad00857d099de831338560354d38b0750d86c4cb7347c035fd7610216da0755d37f3844ebac0a5cce64034c8c0d58ad0a0a5ad27a142875fed86eee0b5cc8631c1d1f79e3f9b9250b5ad075e1fee9b3354bdd780a5dd07ae8e7be1c2f633c0654ac4dfaa1490743b34ac3b0295b1068ad4bc194c2ae4a2368e2ce9bb93a5a0d43ab4dda7d3159882c763778e60743a845d84ccb950b63a946a053b52f2d48be05086cb65fb33950c9810b50a656b73e375bb108e9cd0b6c97508fecc086c19fbe350572bc2587cf1870ab2b8fdd56fe9aa13c55bf3f40ac1743a7264fbf241a810f44ae2a66264bd094df403a379bb01c0944a92e6902002e4abb0545ac2360e00844bc3a54c38af4b4146c90214cdb46d896a20f101045da6a15f8a13561136c8f2951ba090a3857c3521ef9a32f730e02ec1b6c8e2a5989c59bf792f1bf03306619021c0424f1abffb206efd657176c8d1622650c2e5681a134530ff6a61af1d15f0317322d156c8c13357dc187d74086e68f14022158adf89c2b49136c8b0e235f9ec189bc09ceac205982c34aa40b126c8a0f113954d566d0b62878f4d06ddc76f1156c89180b0f0f15373f70e68c0413eb99d051ca5f9f116c881605edd099a62e1fe4ae041d081810146c8705e7cd8add77de61dfd695aff0cd66d09fb8146c861ff2d257d24585e08f191df2c146ba130705096ca918f9b7020701e90c50baecf2b9cc6b16ecc07eec166c8fe1c5631e13e1bb23d5a9fd6abcdb2471cb596df7055ebcf3d2730a6ffad0dd1595e45786fc0650beedad2a760f5a8ef1bf0b1decc7488e0616043c2f095a8ff1bdf9cd6fc7f2045c92fc8d095a8dff83d242bef7dd075c8ac585a31cfb04508ac79a0c77a9ea4ffbd14ca309ce7ef51262b2e547dbb2f81e5dfe0158fc0645f2124a0e408ddd6dde599b800bc157ae1ec607408cc56fb80910104085d854a3d656aed45f81ed5296c84d0a418ed5557615c0bc02180c6383d52b68d24943f5d922410e7ebeef225882b5333e718f83d6320a5b81ac330a538f8dd93c0d509da3001115c8baebb6f96e0f065091a41ae3c909479e8915e38e9924ec074197a113d2559a036f80fe01540a5d94aff28a95b0e4bcff146899bdcc7cda3e1655e7aec375a73bc43f26404a0e5f9881ce449db0c56e8cb316c16d804a6d9092ce3d4e298c1b1da32fac94bbcf843c07f0429363f2ed6516634eb5a98237840d4b0a8f33e2514aad8c501c39e09be31726f1e40427a37cd7423ef5eb99d97f51c76629c5ad3c4a045b8b8ca404559381a8105b8f84a6acd8c5a711dc0317d23614ff05598f9b8fc2045192939014549b8fb188d8310eff8591fc1cd3bcd21c3d1bdd045b9a9f99064063f0a108c5016c084363fba8cc649681095062e088a30bf19cc9034076f30b4160fe9884828fe28fa1eb0b5276e767e194a7af16a0ea0e4768d862c84a8a8353e48b69fd6406607cec7fad130c557bce739bc2596e94c45a4a045965cc4709407eca4178dc2d524e0d4763f9544681c5c844d35a9a7205727fdd24440a5066d222191bd2393db9055a61c26a430a07228350b7ce35ae27d1025e6904557bb91c12567da7f2aec1273cc84064f5bc42da343308125771abf98a8872ff2c2720428833cdf285a60a4661adab4dc02d30ee920e6d4d93e615c728f53c7e3025e48206507fb3d57d4605766aa4dd2b107e78b5dc01c3341bb8e8e4699f9f60ac15466ebbfdce9d6fd01b8587df00ce0ab79097819f6f1f667586a7cc5c56967b8bda42b49ee8ae026ecc17c33b56aab4cfe57b6cdef429707485abdf1facdaf3c7889d98847abea88d28fb5d4279db72788464a6cb0af0b6c631cb0beef4e5a015717c83c186e51ba13b8d32ef889a6bb8d910f8fcd714466a8dd4b49e74b1b5d42ef15b48728b59739f6c0a466b88cd43d00ac331190e6d7bae78940f6e1213d20ae450fa064054977bcd06054b5a8d76b40757469f6e9488610e514573c27f6bc45067d2e0986c988040774e67df39fd2ba350825884987277dd7b8845060b0ac121b7c805131ad749b4a491040936995116978596be51562c309606fb3eee2b93cd7f03ea573b92615c080210328b4eeee0f4010e1051497dab9956fc2537ff4f0201aeca148040726b529281de6c53bd5eaebc409881ebdd4aa4714caa621c3297a2c913ba9743424e435f3af426e543300281472cc6e125df05683ac67aa76784ab5bcb7cb87814514b6684d6eb8eadb1d5e367b7c70b1b96706db609514a6b8fce28a8789e06511a28aa27d30854486bad486a8e6408434f5169abf73b07010c05405c437f9f025c5f035c5457094056406b3436d23af10e6c4459313ecb0aee533ae2698dc80f6c57423f11b8be9e71949f560be7420c5f595c37fd766c965e4c575c125452360cdf09d90dba8bb3cb30ef12866baa07545d3223b1cc090f575c3d17b9abad608b91583efb563506404d2409954e0357543d045d5330f407435536f74b30dd045b5134cf0b475a2dd935869d4828c2e40e523311ddfd4f5a2bd941575044450458241cb30b40260ba69eda1abd924f460440270eb9075421048f945952221b2d07937ad95efe8bc86c90491eac897cd90c7361e13ffcb003649f2aa205ed97f5011c0854220eaa4b02bca80e6877232e87870d136d52d871be64054039ed67840115075c29e2714b584e04791fc363094039fd5c3bc11b9756024833044020e43d075c32f066f5008a125030f32adada227668b266bb7a824e1f668205443bc513bf065b36cd1787590a5431dc38649a48148e300201310a0262dff61d009e22cf18045538dce3085531dace25923fe404ab4899170a4032dcd1cd03408a54470b4033afc9f5d7fd16ba6557045f35a9ac094035a8a6a8423fdcd603522ca806402bbc8a7454095405a6b35d156f44370a0056e6cd6882a74038330f700db7658450347b9220e81d9d3ed4045d02b169075e019364405c18115b04904c5302769136a2be34fe2eb875470f5b0794663cd9dca98964775f038f5d0c5b06997a049134c0dea79c4c0c540d9a7fe557e52ce81e7e450d540c8514f9077e76471b6167670640098734ddd50a50049435a2bc38aa604e12540988249a5ee63482981d657d5625ac872f0a521b9e046da33cac9d540b5218629132967a2bfc125d0e540a7243942ca5658518a22bc1f207630265617b512e0a541479564623a4658b1104471a747108501b755a3cb272270c501c7941104b21a7884a38b60f571c6858e439a57258164c3f654d36055f136923c50c5412561bafa9403d9a61400e0e5e195e0eb25039886016591543fd0b500b4c03863ea743e020b20a6715580e666723b0784e0c5c154419533c8626a37c3fb20b541940d52bcbc4ef175fe507401843cd36af4308401b4fd91b4b149d11541a4ac9e232971991ed359d7e2eb29513035ee92c0654e431f7cdab0544e72bdcb50c54e6388189169beb248c26aa1964c112884176144601717f14b9695eef0a581a26b50b6126d30c54e02787432d99155ce8f0f61566c81aa36ce3f581a5d6159774c43d752811a825431766c917aa05a801fc8461d53400fba22b78de0cb8d1cc340854ed2ab01c420836095ee60f91fb126579370a40eb0b7a091a733aaf640540ee1a7b5a0440fc0d730d5ee00248004f05753c8d2ba566095ae01d55f8247627530540fb0f55c40404a20a3c0855fe1338804c09520a55fdef23a90d4b112ab30b5cf5e213625d283e900a300c5cf2ee1846047afdf1fef4d10c67e7ee114dc5d288190edfde0667f7e711388e0d7ef8f6e21e44a62340bbb5a4aa1371f7f2fde71a1d80db4770173495f8fac7b86d1274fcf6c9f2c8a72c088f330427217a530a8a147ef3fed7d583172b96785344ec1f16e3871275150d70f4cdc7b10dc2edef1504cd340964f5cade8a1d2aaa570d7ece87926247fa5a0598eddc8b137febc8a54412639f45ef1912f2a243f5caaf4e0760e6c2b356c8bb0f7ec9d1923b84e0eaf2580f6379c2a60860c4d2870c0cc0d50f7ecdd794ea1f2ebb25c62959d374590a70ccd28fe9d18f2878370c60c1a7685c97a0e9f7102c61097ef6e34821991336790b60cfaa491e589ea904116e127ecea444ce181280145d3b75e92804a02745087efcee6be7ce8dcd0574dcbd5fd90577c5a134bd0a7fcebd268903326550dd1463c0bd3b705aa27aef122b04d1cebc2b75151c080567d8b13a78067ecb8a1a4fd50874da8a1820b7ffca0665c283120e5f0970de9fe01612035f1d0b72dc96fcfad4686fb1dd7f0972c395ead29dcbbb21077ac691d09a6e96097eda94c7a61b2f45f90a7fd389d36f54b96f4e12087dd67054b12b70110863d96a2b81c8be280b71d87a396f256e151b072b1171d562364bffa51c9733559f70eaaa34431572c9790752fb3653ac0c5eb20418980a16913358b51075ce71142956eed07fa6c6d869e5d89b127fc874100b363cc9ffbd3d7b1103043869290a70d177ebe2cfb77c61e10c70d071fdc6a948086c299ea90863ac43e1a24cceb00f78b44bd3a1364dded7e0691720742d0879ad42ce83ccbb040e7aad4adb7b3355a069503d76f3d30963a542dc4dc883e4d11071b752a356be177f72be12e280abdceb0a7e95179d2250ca83f3be1270a254af1b2d43ff2fe5c88de7c49bab2e910967bf1ea5eec6d2e1aa0c74a02d82808d1befe0e1788c067c9a11b0f1640675be3c7726430e7ba9207b151d314ca86b5fe4efbf1870a23f65e0ecae13f3b75bd3ff49ce45a43d6a55f688d0441363ab2150c79cedb04013601b03191a18bbafc10672991367f0701071b13453ba0d440243c06a1ae2e20e481160b833548acd88beb7f5a33b22684b2622147bbb132660013250d7892f621ffdbb53d1d76f2b0c72a10d317385bddb5491f1a70a60b51e34428988b39c2f0970b41817354edc75fd0e71ba0e0d060a033a2c67b49a253e1367a05234e1c8dc99255ad1a0060c0c0206e9a31270b706f2c49dc372ca78e583bcb7f6c47fc30a7e802bc3f7619b63b2dd12729e32d7974c2935d6ec59d891d0fada911d1274aeeaff98c8731aa2fa6aefce6fe1e81217011f0a54b8f3e177d09888f9ac045aaaeed10443aafdad044799e2b5074584e7abe8c76508558bf586f38ed0240210c00a5481d4b1a31ce4923a42064091d19688ce0468dd8157011309548dda5dd8599eba1a065086de4da50909408fc17287dc448fd40b00da8d093640b9f85745a9310ed79c2064c75274e6cf71789381e3a08e636d6c78b9589d0922856b730038a0c4d5d3f65f9bc1449e1160de01d54f97530a08cdda354185b3333f090b478184151a658f9ad3264b0908cfb6001118b0f9b50e5495be3ffbd43349a4da75feb5ec096494af27f88ca713d4107080b41ec753dfa184cf7f84aa1ec16f0f5496a0c6aa07f18087fd5269f79cad045682b9ff085490afc988939afb1161a29cf67cdc38756ae5b5c17fbd13d923145e9898fd64b78fce4f9b841ccc77a60ee368e48b17449d84d1244944e204629a65f68ce48cd3041fb507cf701c408d9cac5800ea7ef226fbd39a916dea85b5bd986fe3c8dcd8f74dfe04468881be0a5a989585f3859cae0ccc3e1ba7c4cc8b6366fa53f116baa9c3819c172784d6711d3fcc672341c92621aabb75fcb11ca16ceaeaa769f0f9d46fe0cd67abc47a6aeaf9f3d878fbc05c22356dd5c6d0f52f8c28f555cb2ff7d4f1449954f2459d64319df6b7b4f2c346f3b4b0c2c5c1a226e6a66f5fcc7f64d66725d8c351e79d11508c9e9590d8180ae590a1d604e9b3d03e0a409a8aa9929a8bb6d0500b5072e7a90cd40f418faafd134064f19ce285a71bf6224f4190aa06c3331cdc095063e7bfc04999818b04567be9870e5c6af98cb8d2255b74dc363d02dd044670fa93204b7eef7af7889cbf07b4f68cc08d8079e16bbff28b8275c50ebef77ec925f47b04687fe356014b0d5061c47db3e95475b2c54a666e0b546fd16a98988fb4c71b0505477fcb5b680d5662cf4f518582a960c26c926f8040724fec01786cbb42e703061438f03993d5bab083ef2595d1a24384868085b8b2d8e363a3cc3fef974c7da6a3b0d5380a84657eabfb8ca97442d82136f3fc9abb0e527dc0353716da392cacea74a3ed0143014107557ecf29c24e6f026d4c01050c556498f99c9e6fc6201c261d030c64f6125678acf1419250fb0d0a3915bec92d290ad5084172a6f85f5d7eba0255680e6c7ba0ce0bd5060db9abc87984920c6c68bcb2d58b69dc2084bdd307476fbfbdc15c4103577a9403527483015d01550940549372d06b2a230e0147095240907fbccf12b9a30a474a91799e8c74b3a6f208434861d32f30e549135b4471cb29f46d9c589e67a5d5302af5739d4b0c574371d318bb9aa3f0584b46085f4664a4e7788c9c095f4960a9da03c4232c0a414c62b9a8ed5f729b7a0f525c74888c8db8aabfd7f272accc210940486a8f9d72a374860a404f6e90718da59c447e10574869944a7dbf60b3d41d80a7dd08c10a435c4c6cb3c13d38b4fb07514e5265b8aea209475f5f7f926f7b8d6c084758404175b4b4bc0a475b5c4a58566cb4a8e507544341712d39c90b59477e2c31d22ad5533df50b43594e2c1db292a279958a0a475f5233e25179945c1e094644272de907c800a60a564e231886c60bd2e741015e0b40432309975e5a7c9790330c5d5a24ef7886b44b582cf46e05414837d87a09554d01fc4d2cd913950b6c612dc12eda03a1a7e2ff08505337c81d97b5580a47290fdde3595723fb100b563911a5cb06faf731f03503522e050c54261887b08166bf82463ee904442502b11743291686798622b2b68b7cd85404b58e66e34a5d3de9420346341b2c5d2814985b47a3a4aa9a044e24569d22b523f539cfe65d64fe5f1c8e02585370812bba1b843ccca1ab7a6d050b57271348b484704f2f119a08433bee7a9f45412f04037ab52908037bb812141a0a5202027c055728ed4032055d21fd23170a5120f230d6425f02990f0b513ffe2df01594710c6263054224f82ec2065221d20eb09e094332d018814c24f57e094720f70c6e965515cb061520deea4417085d39c1ed58208f220a07658ba36d98a774b77509553de0c703842eff260d5a2afcc4e74f23c0194a454ae8146c3fd3d4c01867b6404100a54526c8eda2bb7762095a35b4dbc8d2fe15ab0e6b118881a28c3ef4e65d21dcc5c4104038b3838e5c26d6d7f46f2cfe13716c04403ba5b8105c29ab976d583bb6bb26c3f827727867156c02ab84591f464c2ae73cbb814733e2389e26cbb4045514bb9b095210be7680521f77820e6d00b362719125d1aa49fc4ae5140e6c069963445f22402cfa14ba734d116c0a957a44036c9c3c81842df408a062470d6c049e5e36dee2a8bf647042060a6c0593470f910ecdc9af075c068f5ce84cfd065c079d29fd10095c04993ed9dfa6b66a0b5c059435b19c2eae7554200a5c028c178358fd3da38e095c038b046c913abd9d0b6c1d6a9f30bf6b37e91f140b6c0d7f75903c8e62980592125c1e7869734632c1c1dca66d734d3b8e571c0c41147e644839a365ad118f1c07471b7c7a2cebf706460378473abf04633b4b672152056b57e53bb6615817453723587ea4634fbe115df531df1f6524a195e63065721257137c29cdc4db32a711a26c74624a3a9d121152075223a9bf4221ba60483dda027a73230543195429b80f460b4530972c905cf12b94860865740b411f5a047c4721b04348f90956155319423abb079e0c152347e825c8c0e10d43e57a0c0c2244e030b54717890e589d08431148e03e762fbb0c701050e9ee31864eaafa20b71052f032c4c1cacdc1a5687561a56154cc0e40f524c2c9925bf621bb58f60e371052e62dfeaf400a775d5ce30157e20b56035dec3b0302b560135be43db34e3ab31d40fefae52991324bc8a8720652ea23a95ad10750f328871d863d075eed2a973849050840e10898fc2961630157135bea067650c3e0a57f5be6ea316d651c4118300e50e40d733f88065c470c27a99ff90a47e21a4605400d7f388e0947e10653e2014d1c7a0747e0035ac9c3c70555ff0827db0847fe082fbb401d530750fee83281187e0750ffed05695d26014a0952f1ef2757ead39e190302a6b7095ae4c6f51959f2084b0302a9a70c54fceddfe8ccab786bc67041095ef5e8d6df94173a8c075ef4d5ddb758e1095ef3d1ca8b192bbb410758f8dea56c5ee70558fbd2b9500e45fec2bc53cca15fed96cfe403340840c5dc841096fbed0146015f01521050cbad774bd280f9d1161e74174eab8f0546c7967d220c40c3a97e2a58d7af10004ded030297f31241cda341e9dfbec0b210711c3d8eef1c144b1341ccbc59c295c2f7163f89e08a1e338c1112161054cfbb11b143d1b3c69b0c334dfcde740e56c5b9288411036041d04d51b06b1254c9b2007657977af6053650f7f4bc3e7f06045ac3b6291e5cde970159d42520b1372f039deed872172e0f80bb232c0d58ba11083e0d275cdf9218229ab7ca82e7eae2fb974fc591e29dd7a9441267091a05a9abce9d818fe7f3ad2c6e4f0967c99a192f4ca32ea82a70d083ea1007766c314be1d07334ff183f680450a52a94c6fe1a1d41519ef6bd7b41b84d0a304ed775e50e5bd382c0ecd4593d90c86d237c2a0c50dc9afeda90d7bd21be0f501443c697d3aa4ca136484c9e0c40a84bc46a025aab0e47dab7c487153141c4c37a3d7d160745d793c36472b20d5ac4524db72c76080c145e9a31207cda6c2f96d5fe2c94e2b60fda721907367ca6f5a36d601d034c2b9fa63646c7050197397c3e0351d568295bcf64164de14b13a11a58b04e4bbb2d45b7371ab2355fe02f55af254aa07b5af87d4da22461ab2849235bc860012918b89362fef7dc35ffc69cd2bb10acf6aa53c1d093df5ca9321791accaea235bc963091c6d33a5e6a9337558020b3b72347ca7c49cdf3e08f6a4346e1855fb8c19920a01882eb0b892e36b1a8c020a88020af60316a205021efc0d50ac40db7b6417ae7833677fa08041728673fb60e3a1c2eca3df8d7f801a77e44bc79d1b4af7b3fea4b81ffbb9efda5d9ea40d020312c67fe593d679febe18f0be1c09a7c3e5a7dae5b0f9bbf15d8510096ca65caa4aa90b2c49030efb0a020efa0850a75396f9cd81df0343a6360440a322970a6c942d71194dc284c161", []); +; +window.byted_acrawler.init({ + aid: 24, + dfp: true +}); +!function() { + function t(e, t) { + var n = (65535 & e) + (65535 & t) + , r = (e>> 16) + (t>> 16) + (n>> 16); + return r << 16 | 65535 & n + } + function n(e, t) { + return e << t | e>>> 32 - t + } + function r(e, r, o, i, u, a) { + return t(n(t(t(r, e), t(i, a)), u), o) + } + function o(e, t, n, o, i, u, a) { + return r(t & n | ~t & o, e, t, i, u, a) + } + function i(e, t, n, o, i, u, a) { + return r(t & o | n & ~o, e, t, i, u, a) + } + function u(e, t, n, o, i, u, a) { + return r(t ^ n ^ o, e, t, i, u, a) + } + function a(e, t, n, o, i, u, a) { + return r(n ^ (t | ~o), e, t, i, u, a) + } + function s(e, n) { + e[n>> 5] |= 128 << n % 32, + e[(n + 64>>> 9 << 4) + 14] = n; + var r, s, c, l, f, p = 1732584193, d = -271733879, h = -1732584194, m = 271733878; + for (r = 0; r < e.length; r += 16) + s = p, + c = d, + l = h, + f = m, + p = o(p, d, h, m, e[r], 7, -680876936), + m = o(m, p, d, h, e[r + 1], 12, -389564586), + h = o(h, m, p, d, e[r + 2], 17, 606105819), + d = o(d, h, m, p, e[r + 3], 22, -1044525330), + p = o(p, d, h, m, e[r + 4], 7, -176418897), + m = o(m, p, d, h, e[r + 5], 12, 1200080426), + h = o(h, m, p, d, e[r + 6], 17, -1473231341), + d = o(d, h, m, p, e[r + 7], 22, -45705983), + p = o(p, d, h, m, e[r + 8], 7, 1770035416), + m = o(m, p, d, h, e[r + 9], 12, -1958414417), + h = o(h, m, p, d, e[r + 10], 17, -42063), + d = o(d, h, m, p, e[r + 11], 22, -1990404162), + p = o(p, d, h, m, e[r + 12], 7, 1804603682), + m = o(m, p, d, h, e[r + 13], 12, -40341101), + h = o(h, m, p, d, e[r + 14], 17, -1502002290), + d = o(d, h, m, p, e[r + 15], 22, 1236535329), + p = i(p, d, h, m, e[r + 1], 5, -165796510), + m = i(m, p, d, h, e[r + 6], 9, -1069501632), + h = i(h, m, p, d, e[r + 11], 14, 643717713), + d = i(d, h, m, p, e[r], 20, -373897302), + p = i(p, d, h, m, e[r + 5], 5, -701558691), + m = i(m, p, d, h, e[r + 10], 9, 38016083), + h = i(h, m, p, d, e[r + 15], 14, -660478335), + d = i(d, h, m, p, e[r + 4], 20, -405537848), + p = i(p, d, h, m, e[r + 9], 5, 568446438), + m = i(m, p, d, h, e[r + 14], 9, -1019803690), + h = i(h, m, p, d, e[r + 3], 14, -187363961), + d = i(d, h, m, p, e[r + 8], 20, 1163531501), + p = i(p, d, h, m, e[r + 13], 5, -1444681467), + m = i(m, p, d, h, e[r + 2], 9, -51403784), + h = i(h, m, p, d, e[r + 7], 14, 1735328473), + d = i(d, h, m, p, e[r + 12], 20, -1926607734), + p = u(p, d, h, m, e[r + 5], 4, -378558), + m = u(m, p, d, h, e[r + 8], 11, -2022574463), + h = u(h, m, p, d, e[r + 11], 16, 1839030562), + d = u(d, h, m, p, e[r + 14], 23, -35309556), + p = u(p, d, h, m, e[r + 1], 4, -1530992060), + m = u(m, p, d, h, e[r + 4], 11, 1272893353), + h = u(h, m, p, d, e[r + 7], 16, -155497632), + d = u(d, h, m, p, e[r + 10], 23, -1094730640), + p = u(p, d, h, m, e[r + 13], 4, 681279174), + m = u(m, p, d, h, e[r], 11, -358537222), + h = u(h, m, p, d, e[r + 3], 16, -722521979), + d = u(d, h, m, p, e[r + 6], 23, 76029189), + p = u(p, d, h, m, e[r + 9], 4, -640364487), + m = u(m, p, d, h, e[r + 12], 11, -421815835), + h = u(h, m, p, d, e[r + 15], 16, 530742520), + d = u(d, h, m, p, e[r + 2], 23, -995338651), + p = a(p, d, h, m, e[r], 6, -198630844), + m = a(m, p, d, h, e[r + 7], 10, 1126891415), + h = a(h, m, p, d, e[r + 14], 15, -1416354905), + d = a(d, h, m, p, e[r + 5], 21, -57434055), + p = a(p, d, h, m, e[r + 12], 6, 1700485571), + m = a(m, p, d, h, e[r + 3], 10, -1894986606), + h = a(h, m, p, d, e[r + 10], 15, -1051523), + d = a(d, h, m, p, e[r + 1], 21, -2054922799), + p = a(p, d, h, m, e[r + 8], 6, 1873313359), + m = a(m, p, d, h, e[r + 15], 10, -30611744), + h = a(h, m, p, d, e[r + 6], 15, -1560198380), + d = a(d, h, m, p, e[r + 13], 21, 1309151649), + p = a(p, d, h, m, e[r + 4], 6, -145523070), + m = a(m, p, d, h, e[r + 11], 10, -1120210379), + h = a(h, m, p, d, e[r + 2], 15, 718787259), + d = a(d, h, m, p, e[r + 9], 21, -343485551), + p = t(p, s), + d = t(d, c), + h = t(h, l), + m = t(m, f); + return [p, d, h, m] + } + function c(e) { + var t, n = ""; + for (t = 0; t < 32 * e.length; t += 8) + n += String.fromCharCode(e[t>> 5]>>> t % 32 & 255); + return n + } + function l(e) { + var t, n = []; + for (n[(e.length>> 2) - 1] = void 0, + t = 0; t < n.length; t += 1) + n[t] = 0; + for (t = 0; t < 8 * e.length; t += 8) + n[t>> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32; + return n + } + function f(e) { + return c(s(l(e), 8 * e.length)) + } + function p(e, t) { + var n, r, o = l(e), i = [], u = []; + for (i[15] = u[15] = void 0, + o.length> 16 && (o = s(o, 8 * e.length)), + n = 0; 16> n; n += 1) + i[n] = 909522486 ^ o[n], + u[n] = 1549556828 ^ o[n]; + return r = s(i.concat(l(t)), 512 + 8 * t.length), + c(s(u.concat(r), 640)) + } + function d(e) { + var t, n, r = "0123456789abcdef", o = ""; + for (n = 0; n < e.length; n += 1) + t = e.charCodeAt(n), + o += r.charAt(t>>> 4 & 15) + r.charAt(15 & t); + return o + } + function h(e) { + return unescape(encodeURIComponent(e)) + } + function m(e) { + return f(h(e)) + } + function g(e) { + return d(m(e)) + } + function v(e, t) { + return p(h(e), h(t)) + } + function y(e, t) { + return d(v(e, t)) + } + function b(e, t, n) { + return t ? n ? v(t, e) : y(t, e) : n ? m(e) : g(e) + } + md5 = b +}(); +function isObject(e) { + var t = typeof e; + return "function" === t || "object" === t && !!e +} +function allKeys(e) { + if (!isObject(e)) + return []; + var t = []; + for (var n in e) + t.push(n); + return t +} +function extend(n) { + var r = arguments.length; + if (undefined && (n = Object(n)), + 2> r || null == n) + return n; + for (var o = 1; r> o; o++) + for (var i = arguments[o], u = allKeys(i), a = u.length, s = 0; a> s; s++) { + var c = u[s]; + undefined && void 0 !== n[c] || (n[c] = i[c]) + } + return n +} +function get_sign(t) { + var e = "/toutiao/api/pc/feed/"; + var n = ""; + e = "https://www.toutiao.com" + e; + for (var r in t) + n += "&" + r + "=" + encodeURIComponent(t[r]); + e += e.indexOf("?")> -1 ? e.indexOf("&")> -1 ? n : n.slice(1) : "?" + n.slice(1); + var o = { + url: e + } + , i = window.byted_acrawler.sign ? window.byted_acrawler.sign(o) : ""; + return i +} +function get_as_cp() { + var t = Math.floor((new Date).getTime() / 1e3) + , e = t.toString(16).toUpperCase() + , i = md5(t).toString().toUpperCase(); + if (8 != e.length) + return { + as: "479BB4B7254C150", + cp: "7E0AC8874BB0985" + }; + for (var n = i.slice(0, 5), a = i.slice(-5), s = "", o = 0; 5> o; o++) + s += n[o] + e[o]; + for (var r = "", c = 0; 5> c; c++) + r += e[c + 3] + a[c]; + return { + as: "A1" + s + e.slice(-3), + cp: e.slice(0, 3) + r + "E1" + } +} +function get_param(category, userAgent, max_behot) { + max_behot = max_behot || 0 + navigator.userAgent = userAgent; + var as_cp = get_as_cp(); + var param = { + // 热点,其它需要作相应修改 + category: category, + max_behot_time: max_behot, + max_behot_time_tmp: max_behot, + tadrequire: true, + utm_source: "toutiao", + widen: 1, + }; + param = extend({}, param, as_cp); + var _signature = get_sign(userAgent, param); + param._signature = _signature; + console.log(param) + return param; +} +module.exports = { + get_param +} +// ua = "Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4142.0 Safari/537.36" +// category = "news_hot" +// get_param(category, ua) + diff --git "a/18-344円273円212円346円227円245円345円244円264円346円235円241円/toutiao.py" "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/toutiao.py" new file mode 100644 index 0000000..5369d22 --- /dev/null +++ "b/18-344円273円212円346円227円245円345円244円264円346円235円241円/toutiao.py" @@ -0,0 +1,35 @@ +# https://www.toutiao.com/ch/news_hot/ +import requests + + +session = requests.Session() +ua = 'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4142.0 Safari/537.36' +headers = { + 'referer': 'https://www.toutiao.com', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'user-agent': ua, + 'x-requested-with': 'XMLHttpRequest', + 'accept': 'text/javascript, text/html, application/xml, text/xml, */*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'content-type': 'application/x-www-form-urlencoded', +} +data = { + # 热点,其它需要作相应修改。JS文件同样需要修改 + "category": "news_hot", + "userAgent": ua, + "max_behot": 0 +} +for i in range(5): + # 这里仅获取前5页 + param = requests.post("http://127.0.0.1:8919/get_param", data=data).json() + url = "https://www.toutiao.com/api/pc/feed/" + res = session.get(url, params=param, headers=headers) + result = res.json() + print(result) + print("已获取第" + str(i+1) + "页") + if not result['has_more']: + data["max_behot"] = result['next']['max_behot_time'] + else: + break diff --git "a/19-BOSS347円233円264円350円201円230円/README.md" "b/19-BOSS347円233円264円350円201円230円/README.md" new file mode 100644 index 0000000..44eaaba --- /dev/null +++ "b/19-BOSS347円233円264円350円201円230円/README.md" @@ -0,0 +1,19 @@ +# 使用说明 + +### 注意:我这里只补了两套代码的环境,BOSS实际有几套不知道,补不动了,一天一变... + +1.npm需安装express和body-parser,具体自行了解 + +2.将3个文件放于同一文件夹,cd到该目录,命令行运行 +```javascript +node index.js +``` + +3.运行boss.py开始食用 + + +### 由于pyexecjs运行会报以下错误,因此这里使用接口调用。 +```python +execjs._exceptions.ProcessExitedWithNonZeroStatus: (1, "{\n cookie: '0df7%2B9kAOY%2BdFeUde5p9NCZKtB2NXE6tIvdOfT25tAHJMiCiwrE0IJoOog04oQNba8nW0DAyd%2BjPCVgIUn3%2FXaXxYW5iqK9j1Mr%2FLAxG3sSH%2BhiM4UpIzn5XpYncEehEHLf1'\n}\n",..... +``` +### 实际为process赋值为undefined的原因,导致execjs库无法读取process diff --git "a/19-BOSS347円233円264円350円201円230円/boss.js" "b/19-BOSS347円233円264円350円201円230円/boss.js" new file mode 100644 index 0000000..954dbd8 --- /dev/null +++ "b/19-BOSS347円233円264円350円201円230円/boss.js" @@ -0,0 +1,134 @@ +window = { + document: { + cookie: "", + createElement: function(tag) { + if (tag == "canvas") { + return canvas + } else if (tag == "caption") { + return { + tagName: "CAPTION" + } + } + + }, + getElementById: function() { + return false + }, + title: "" + }, + moveBy: function () {}, + moveTo: function () {}, + open: function(){}, + dispatchEvent: function(){return true}, + screen: { + availHeight: 824, + availWidth: 1536 + }, + navigator: { + cookieEnabled: true, + language: "zh-CN", + userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36", + appVersion: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" + }, + decodeURI: global.decodeURI, + location: { + hostname: "www.zhipin.com", + href: "https://www.zhipin.com/" + }, + OfflineAudioContext: function () { + this.createOscillator = function() { + return { + frequency: { + setValueAtTime: function() {} + }, + connect: function (){}, + start: function (){}, + } + }, + this.createDynamicsCompressor = function() { + return { + threshold: { + setValueAtTime: function () {}, + }, + setValueAtTime: function () {}, + knee: { + setValueAtTime: function () {}, + }, + ratio: { + setValueAtTime: function () {}, + }, + reduction: { + setValueAtTime: function () {}, + }, + attack: { + setValueAtTime: function () {}, + }, + release: { + setValueAtTime: function () {}, + }, + connect: function (){}, + } + }, + this.startRendering = function (){} + }, + eval: global.eval, + history: {length: 1}, + outerHeight: 824, + innerHeight: 150, + outerWidth: 1536, + innerWidth: 0, + Math: global.Math, + Date: global.Date, +} +window.open.toString = function (){return "function open() { [native code] }"} +document = window.document +navigator = window.navigator +screen = window.screen +canvas = { + getContext: function getContext() { + return CanvasRenderingContext2D + }, + toDataURL: function toDataURL() { + // 实际为canvas画布填充了""k54kk5cA4*""字样后,转成的图片链接 + return "data:image/png;base64,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" + }, +} +CanvasRenderingContext2D = { + fillRect: function () {}, + fillText: function () {} +} +localStorage = { + removeItem: function (key) { + delete this[key] + }, + getItem: function (key) { + return this[key] ? this[key]: null; + }, + setItem: function (key, value) { + this[key] = "" + value; + }, +}; +sessionStorage = {} +setInterval = window.setInterval = function (){} +setInterval.toString = function(){return "function setInterval() { [native code] }"} +setTimeout = function (){} +top = window.top = window +global = undefined; +child_process = undefined; +closed = { + __proto__: ( 1>>3>4 )["__proto__"] +} +function get_cookie(seed, ts, code) { + var Buffer; + process = undefined; + function CustomEvent() {} + eval(code); + cookie = encodeURIComponent(new ABC().z(seed, parseInt(ts)+(480+new Date().getTimezoneOffset())*60*1000)) + console.log({cookie, cookie}) + return {cookie, cookie}; +} + +module.exports = { + get_cookie +} + diff --git "a/19-BOSS347円233円264円350円201円230円/boss.py" "b/19-BOSS347円233円264円350円201円230円/boss.py" new file mode 100644 index 0000000..2b6965b --- /dev/null +++ "b/19-BOSS347円233円264円350円201円230円/boss.py" @@ -0,0 +1,100 @@ +import requests, re +from urllib.parse import unquote +# import execjs + + +def get_index(url): + # 请求列表页,获取seed、js-filename、ts + headers = { + 'authority': 'www.zhipin.com', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9', + } + res = requests.get(url, headers=headers, allow_redirects=False) + location = res.headers['location'] + seed = unquote(re.findall(r'seed=(.*?)&', location)[0]) + name = re.findall(r'name=(.*?)&', location)[0] + ts = re.findall(r'ts=(.*?)&', location)[0] + print(res.headers) + print("seed:", seed) + print("js-filename:", name) + print("ts:", ts) + return seed, name, ts + + +def get_code(name): + # 请求js-filename,获取动态代码 + headers = { + 'authority': 'www.zhipin.com', + 'cache-control': 'max-age=0', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9', + # 'if-modified-since': 'Tue, 26 May 2020 11:27:36 GMT', + } + url = 'https://www.zhipin.com/web/common/security-js/%s.js' % name + response = requests.get(url, headers=headers) + print("code.length:", len(response.text)) + return response.text + + +def get_cookie(seed, ts, code): + # 传入seed、ts、code代码,获取zp_stoken + data = { + "seed": seed, + "ts": ts, + "code": code + } + res = requests.post('http://127.0.0.1:8919/get_cookie', data=data).json() + zp_stoken = res["cookie"] + + # zp_stoken = ctx.call("get_cookie", seed, ts, code)["cookie"] + + print("zp_stoken:", zp_stoken) + return zp_stoken + + +def main(url): + # 主要运行逻辑 + # 1、请求列表页,获取参数 + # 2、获取js代码 + # 3、获取cookie + # 4、携带cookie重新请求列表页,获取数据 + seed, name, ts = get_index(url) + code = get_code(name) + zp_stoken = get_cookie(seed, ts, code) + headers = { + 'authority': 'www.zhipin.com', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9', + "cookie": '__zp_stoken__=' + zp_stoken + } + res = requests.get(url, headers=headers) + print(res.text) + + + +if __name__ == "__main__": + # with open("boss.js", "r", encoding="utf-8") as f: + # ctx = execjs.compile(f.read()) + + # 列表页url + url = 'https://www.zhipin.com/job_detail/?query=java&city=101280600&industry=&position=' + main(url) + diff --git "a/19-BOSS347円233円264円350円201円230円/index.js" "b/19-BOSS347円233円264円350円201円230円/index.js" new file mode 100644 index 0000000..3d1b19c --- /dev/null +++ "b/19-BOSS347円233円264円350円201円230円/index.js" @@ -0,0 +1,33 @@ +var express = require('express') +var app = express() +var cook = require('./boss.js') // 导入boss.js模块,并命名为cook +var bodyParser = require('body-parser'); // 导入请求体解析器 +// 调整参数大小限制,否则会提示参数过大。 +app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); + +// 开启get_cookie路由 +app.post('/get_cookie', function(req, res) { + // 获取请求的真实IP + var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, ''); + // 获取请求时间 + var time = new Date().toString().replace(/\+0800.*/, ''); + // 打印请求时间、IP、方法、路由 + console.log('INFO:', time, ip, req.method, req.originalUrl, '200 OK!'); + // 获取POST请求的formdata + let result = req.body; + let code = result.code; + let seed = result.seed; + let ts = result.ts; + + // 调用cook模块中的get_cookie方法,该方法需要提前module.exports导出 + var cooki = cook.get_cookie(seed, ts, code); + // 设置响应头,如果不设置,通过asyncio_requests请求的res.json()会报错,因为它是根据响应头解析json数据 + // 而requests可以直接使用res.json()解析,因为它是根据响应信息解析 + res.set('Content-Type', 'application/json') + // 将JSON后的数据返回客户端 + res.send(JSON.stringify(cooki)); +}); + +app.listen(8919, () => { + console.log("开启服务,端口8919", new Date().toString().replace(/\+0800.*/, '')) +}) diff --git "a/20-346円212円226円351円237円263円web/douyin.js" "b/20-346円212円226円351円237円263円web/douyin.js" new file mode 100644 index 0000000..58ad4ff --- /dev/null +++ "b/20-346円212円226円351円237円263円web/douyin.js" @@ -0,0 +1,267 @@ +Audio = {} +document = { + createElement: function() { + return canvas + } +}; +canvas = { + getContext: function getContext() { + return CanvasRenderingContext2D + }, + toDataURL: function toDataURL() { + // 实际为canvas画布填充了"龘ฑภ경"字样后,转成的图片链接 + return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAACyUlEQVRIS8XWTYhVZRgH8N8dkPFqJqgI4sKmTUSgaBCKihCI5dZFUEaLwHAThjujEnXjpkAUHSRc+AEtFJIWKWRBSR9QENgiggplNqkTlXBnhjveeM6cF955PXccFJ2zuPec99zz3v/X87+3ZfrRK67jslWvxb103vCxx770DN5sApSAloBLco+SzFKcxbZClmG8gw7uIdCkfnq+BDsXbmzEizhYg2p0oEn1PEK5II/SgTKPbXyE89iBt+oPDDcpWz7cbwZysq/h9Vqd9/E2fkWsn0GsJeVi/1DvE6xJQLJoNA1T7PN0wx73zMBMDsTGTXMQ1n6TAfkJ63ACr+IcDmekUr6D0FUkdb+uc18SCPCba4ILitlodGA2ik8R7Rmw2E4ThnR9oVsRjJyuxL/4FLdwJCOQE07O5CBjQONIRINk7l4iOOMQB4mkdn6eajWgM2mhYU855KhRXRMO6DqKD/Ay3sWygkCKUE6qJPAegmis3+5T0I0EEtj8PUVn+r2e+Zb52HqjPqti8ptFnnPHPhzH6lq5+KIcbOwX4AJkAtjkQK50Pi9pfWfEKR/ifjVaOjC1wcLq9ZoPXbTLZfyi7Vljlep/4nSd8ZzA9bpNokUuzYJASTSBT3Mzcr8qbO77CNBSk0ZNGrPHoO+r1plnta4YxhxcTiAAbMcPs3QgXLpSC1EmKfbd38+B/jMQ4NvuWoTlPnfNKfyIES3P142U12Y/B6oI1Kj6RSgcOIZX6lqe0YHyL0Su/tT5gJ5JbSt03PSfrl34vco//2i522fgHma5/M1Ie20KZ0oHEsj5Fhireqijra2j4wlL3HHMGrv9bC2+tKUGf1vLxMOgfNBnp89AT8sGq3xrHE/WVRo0ojQHvWSHK/Y6ab83qhz/gZsYr34V5uAoCQwYstV1F6zzlXlaxg0aMeQvq7zgqu+qno+WuYG/5xJ86PU//5znHgwZKlQAAAAASUVORK5CYII=" + }, +} + +CanvasRenderingContext2D = { + arc: function arc() {}, + stroke: function stroke() {}, + fillText: function fillText() {}, +} +window = { + document: { + location:{}, + _zid:2 + }, +} +function get_sign(uid, aaaa, ua) { + // _signature共26位 + // uid 决定倒数第8至倒数第5位的字符(共4位) + // ua 决定倒数第10至倒数第8位的字符 + // data:image决定正数第11至第16位 + aaaa = aaaa.replace(/\\u02a1/g, "\u02a1").replace(/\\x7f/g, "\x7f").replace(/\\x80/g, "\x80").replace(/\\x1c/g, "\x1c").replace(/\\x06/g, "\x06").replace(/\\x02/g, "\x02").replace(/\\\'/g, "\'").replace(/\\ufffb/g, "\ufffb").replace(/\\\\/g, "\\").replace(/\\uffce/g, "\uffce") + navigator = { + userAgent: ua, + } + tac = aaaa; + var e = {}; + (function anonymous() { + function e(e, a, r) { + return (b[e] || (b[e] = t("x,y", "return x " + e + " y")))(r, a) + } + function a(e, a, r) { + return (k[r] || (k[r] = t("x,y", "return new x[y](" + Array(r + 1).join(",x[++y]").substr(1) + ")")))(e, a) + } + function r(e, a, r) { + var n, t, s = {}, b = s.d = r ? r.d + 1 : 0; + for (s["$" + b] = s, + t = 0; t < b; t++) + s[n = "$" + t] = r[n]; + for (t = 0, + b = s.length = a.length; t < b; t++) + s[t] = a[t]; + return c(e, 0, s) + } + function c(t, b, k) { + function u(e) { + if (typeof e === "string" && e === 'canvas') { + debugger; + } + v[x++] = e + } + function f() { + return g = t.charCodeAt(b++) - 32, + t.substring(b, b += g) + } + function l() { + try { + y = c(t, b, k) + } catch (e) { + h = e, + y = l + } + } + for (var h, y, d, g, v = [], x = 0; ; ) + switch (g = t.charCodeAt(b++) - 32) { + case 1: + u(!v[--x]); + break; + case 4: + v[x++] = f(); + break; + case 5: + u(function(e) { + var a = 0 + , r = e.length; + return function() { + var c = a < r; + return c && u(e[a++]), + c + } + }(v[--x])); + break; + case 6: + y = v[--x], + u(v[--x](y)); + break; + case 8: + if (g = t.charCodeAt(b++) - 32, + l(), + b += g, + g = t.charCodeAt(b++) - 32, + y === c) + b += g; + else if (y !== l) + return y; + break; + case 9: + v[x++] = c; + break; + case 10: + u(s(v[--x])); + break; + case 11: + y = v[--x], + u(v[--x] + y); + break; + case 12: + for (y = f(), + d = [], + g = 0; g < y.length; g++) + d[g] = y.charCodeAt(g) ^ g + y.length; + u(String.fromCharCode.apply(null, d)); + break; + case 13: + y = v[--x], + h = delete v[--x][y]; + break; + case 14: + v[x++] = t.charCodeAt(b++) - 32; + break; + case 59: + u((g = t.charCodeAt(b++) - 32) ? (y = x, + v.slice(x -= g, y)) : []); + break; + case 61: + u(v[--x][t.charCodeAt(b++) - 32]); + break; + case 62: + g = v[--x], + k[0] = 65599 * k[0] + k[1].charCodeAt(g)>>> 0; + break; + case 65: + h = v[--x], + y = v[--x], + v[--x][y] = h; + break; + case 66: + u(e(t[b++], v[--x], v[--x])); + break; + case 67: + y = v[--x], + d = v[--x] + u((g = v[--x]).x === c ? r(g.y, y, k) : g.apply(d, y)); + break; + case 68: + u(e((g = t[b++]) < "<" ? (b--, + f()) : g + g, v[--x], v[--x])); + break; + case 70: + u(!1); + break; + case 71: + v[x++] = n; + break; + case 72: + v[x++] = +f(); + break; + case 73: + u(parseInt(f(), 36)); + break; + case 75: + if (v[--x]) { + b++; + break + } + case 74: + g = t.charCodeAt(b++) - 32 << 16>> 16, + b += g; + break; + case 76: + u(k[t.charCodeAt(b++) - 32]); + break; + case 77: + y = v[--x], + u(v[--x][y]); + break; + case 78: + g = t.charCodeAt(b++) - 32, + u(a(v, x -= g + 1, g)); + break; + case 79: + g = t.charCodeAt(b++) - 32, + u(k["$" + g]); + break; + case 81: + h = v[--x] + v[--x][f()] = h; + break; + case 82: + u(v[--x][f()]); + break; + case 83: + h = v[--x] + k[t.charCodeAt(b++) - 32] = h; + break; + case 84: + v[x++] = !0; + break; + case 85: + v[x++] = void 0; + break; + case 86: + u(v[x - 1]); + break; + case 88: + h = v[--x], + y = v[--x], + v[x++] = h, + v[x++] = y; + break; + case 89: + u(function() { + function e() { + return r(e.y, arguments, k) + } + return e.y = f(), + e.x = c, + e + }()); + break; + case 90: + v[x++] = null; + break; + case 91: + v[x++] = h; + break; + case 93: + h = v[--x]; + break; + case 0: + return v[--x]; + default: + u((g << 16>> 16) - 16) + } + } + var n = this + , t = n.Function + , s = Object.keys || function(e) { + var a = {} + , r = 0; + for (var c in e) + a[r++] = c; + return a.length = r, + a + } + , b = {} + , k = {}; + return r + } + ) + ()('gr$Daten Иb/s!l y͒yĹg,(lfi~ah`{mv,-n|jqewVxp{rvmmx,&effkx[!cs"l".Pq%widthl"@q&heightl"vr*getContextx$"2d[!cs#l#,*;?|u.|uc{uq$fontl#vr(fillTextx$$龘ฑภ경2<[#c}l#2q*shadowblurl#1q-shadowoffsetxl#$$limeq+shadowcolorl#vr#arcx88802[%c}l#vr&strokex[ c}l"v,)}eOmyoZB]mx[ cs!0s$l$Pb>>s!0s%yA0s"l"l!r&lengthb&l!l Bd>&+l!l &+l!l 6d>&+l!l &+ s,y=o!o!]/q"13o!l q"10o!],l 2d>& s.{s-yMo!o!]0q"13o!]*Ld>>b|s!o!l q"10o!],l!& s/yIo!o!].q"13o!],o!]*Jd>>b|&o!]+l &+ s0l-l!&l-l!i\'1z141z4b/@d

AltStyle によって変換されたページ (->オリジナル) /