JS逆向之企名科技

文章目录

  • 1. 初步分析
  • 2. 尝试定位加密js
  • 3. 编写python程序尝试获取数据
  • 这一路走来 孤独而坚定,自信而坦荡,少年,加油啊!

1. 初步分析

目标网址:企名科技
抓包分析,发现是post请求
JS逆向之企名科技_第1张图片
post携带的参数并没有进行js加密,可以写代码测试一下;

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests

headers = {
    'Connection': 'keep-alive',
    'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
    'Accept': 'application/json, text/plain, */*',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4469.4 Safari/537.36',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://www.qimingpian.cn',
    'Sec-Fetch-Site': 'cross-site',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

data = {
  'time_interval': '',
  'tag': '',
  'tag_type': '',
  'province': '',
  'lunci': '',
  'page': '1',
  'num': '20',
  'unionid': ''
}

response = requests.post('https://vipapi.qimingpian.com/DataList/productListVip', headers=headers, data=data)
print(response.text)

响应内容是这样的:

{"status":0,"message":"success","encrypt_data":"bOnqtWHqs4vudLnK0KY4XWjQaSAJkOJqNC2Ywba1ufdGC6IIPbafTnkbD9WTC+pCm19sLWGDcfK\/XYbTgfjR9rYKzTDj0IRoNOk7P8m5J7QkaaVbfDi7F7KqJ7QiiRneES+AxTiuE0k8aYJGm2cfmKtfP9Uvovk8umEupFpmWOBIxvJs8LAzB4cHVBya73tidnWL28n2fPM52JNQPRQOAuQceWcwLaRh9FbaFlxT+TxYEj+LOTmiFGeoqY50Sc0aVxswlMnZcw0h+\/8k\/IJGZx+zdQ03KiOpabtruXuOHByk0Um6ZC0\/F71pS1pLbgFic\/982pV8bsX8fMeAryuPogqClox2zONIMq79AIxT6hwBQqDQj2nm8dbPseizENwWITAvoFcBDZxYR7XQQ87aDfb80K32OBk2\/JDlam6O+nJtjS5CW6HOmtn+uV\/RgSaaLQJBuz30tNA3FJ\/jsxgWIT6aSQDhnOq4zo675OsbD\/3rM+1WN9P54qyep69yskDdmyB4wA8pYA1rUQgpvoBsiiEiGp5pNv3h8P\/M99rdIO5WsT0EUjQHgSXCBFsewkySgpOoOdYVdwXrt3alkJeVAPdQ5VjbIubEKzRupNb\/ivZcj+rvuFcUXwMwtZISGYtnyYaIYcMlxph3FmPycN2xoQ0PC7vkHZVI5KIYvgSLUV6ARbscqS0pWoLULnxf8ybaZNURl9h85f6AwxDrnjDbaWdZXjqecilne39csu0QNyjP83nXGoNoiQKm1fIzi\/fRtW+EDF6dBI2jxtzUGW\/hD0SyTZKPEdmDun+BptJCfYl6orwvxvkdt\/aulyWLg4H8ZH8hTEatrHbP7R7X4S+7h7R5NJCJ2Fpl49ICESTnllwb2Y1+sWeUf2MerXN\/yKG+MMLJy8UP\/9x8A\/VZsup0A1NPaSyKkMKgbhwC6KfDpiCAeD5WIR4wCPBYx4jXSRuPAC2UILU2AqBjifhpIobQMXMDgH\/4I\/guOvlKBlelStCC1C58X\/Mm2kuzegsupW9K5ykhnwr46C8KjAazcHQmmTF8q3mHwgM8i++bJNVFnRqeEg\/qvtnJxjdB92AUzWottKkfamfSK0OKhUI\/1B0POb36ZGsFDqF0zQb+bPV7kEHLaaqfsZk\/IM1mtv23vPVsvAAJBFAzFfbUJe45kmLfwNIumgGRG38lUcFyVWbi8v5DAZvdE9m3hxw1mM3twfvrNE2\/A6vJEbBDpSOGYRxHCMCLgaHEHi82ZZSVOXExe9EvC0XsgmNJh7Asur\/n0sfQ56MbMx0WyQ2N\/4yV7NMeRGaxM2LiCi+UqhaeV9knqPQMjnHnEZc0zItcN812nOCXuMjgLfEZG40MGNIzzXVLdqe5xaraahQOXUk4\/bShEoCQHRJf4WBJSedvCip01IF5i3yL6Dk\/nh9MVlJIV0aL7DH9JIDfDu5xFphRzVYut3MMBiP5C\/1RDYM4BZrRBWENlzzF2zt+g1tC\/4cOt6cvEkXm6QTo5gVoANN2pD0HZHQEAuFmouSPL\/1oqU8yASabnEAHWSid0E22KKQ2rQMQJ9GHarIunxwX2hu9UgtKGupV1JnAd2PRb5XQqLp7tbsAatUrFwAq7F0\/Et47M6GHYcwZ5LuTreK1AR9zxB+RsHJUjn9P1ZCqedpLx5GfeVB6eAubXYKcgu7rM+1WN9P54qyep69yskDdmyB4wA8pYA1rUQgpvoBsiiEiGp5pNv3h8P\/M99rdIO5WsT0EUjQHgSXCBFsewkySgpOoOdYVdwXrt3alkJeVAG9Hek05HRFjyrEG3SAcc+VJpYlGtgbZpUhwlJQzu\/WjM+nX7+DAlEhCQwPpzUdsJG3pixT1OOrXSshgRIUrpHW+jG53FYKoA4LULnxf8ybaZNURl9h85f6AwxDrnjDbaWdZXjqecilnR9cljJoPRGcDHMHOB3uMlCrkaYldPckMIHswlIIAjTM\/Dk2Cop1CwTaPUaBWaWYv3nZ7x3JkDF2bVJVWkwKGoXCn9mCv47vJXRTzPMKmjKz7IvEqsrFYDyL+77M0sImENyitGwEqnbH3m9epeoXz\/UJbgEKEZp3ucn62YeW8EXRHYYuJsQkbwUVCG40+6aD7aSYyQih6MubfDOcd1zRNTrkVtABgemNhRkiTAvRe9TVQQzaXlUxKyehOa1m5lOTroX2DAcL1PsexzZJcgOFl7xwJYFVNL+BJ76hLYembFc3cD3rFKnZia6\/gsiPHZ3dub+nPj4vAM+pr\/NIPGa\/ikTS\/NLFKdBQM8PbJ1wQRjJj10ZGJ8y3icmL5WBPAXb2CpKRIgc+8HbYKBhw\/cKV8cZP5kar\/OCesxjJ3XCZRmiqNIuIHctLWTNlP8\/jEeZha3kT9knJoIE1ZLLNzV94SIfAoYg+SK17671Gq3bn3TZwSZLBza9oHcUg+qxPhe8vFe\/q6VFI+CteMVZ+j1MY\/mtbArn9+Yvz5u6qVpEiSgPcALZQgtTYCoD6wAsW1etMfQiJd9PGgzQ1nWV46nnIpZ\/bZS0PH7iOWroPcdC4ZfeJ4z7upKus1OCB7MJSCAI0zPw5NgqKdQsE2j1GgVmlmL952e8dyZAxdm1SVVpMChqFwp\/Zgr+O7yV0U8zzCpoys+yLxKrKxWA8i\/u+zNLCJhOi62aIugwywLxVRMDMc3L6TR6Nhp+JJvR\/On4Y26tkb8U3UBoywPGVL81IySeT\/MP6+TOowjUPFRSgzZ99A\/cRGxctzwGKLiUZIkwL0XvU1UEM2l5VMSskjlT+nq6cwb6F9gwHC9T7Hsc2SXIDhZe+sQx+pzn2oO++oS2HpmxXNVHxqfUtmi30ATm6wz\/65\/oyW0bvM7YcDa+a+sLQpxYxFg+kjojL4YfBs87QbOX4xaK5NZqmdRv2yqie0IokZ3rUcKF8aF7dp1xzTg\/gwMcT49vs7vTYvzeeJSmDK5uMYSB4xJ8GLIbXWeZ9QG+UtwWq1xaS7M9CWgcVkeiL7qcTAv4Md5JMkwxrZTuZHn22jtiEUTfxfuZq2PKKwLhkBub4gAMucLBr98W2qhOQcw5PZAqhqjZNBfpjoPfKDzpkt1fWXEbWgDTLLXufbSASOC3v6ulRSPgrXTUn7Cpfv5Zpy4Hb9H+IgACL0lD+US+l5OG79RZ7vOdxnGxHGlUHcixJP2syYEPDaqHxJRqNl2mOJJmgMywEDTDxotGPDQmTCtYGGfqouCz8dg5JQpoeqyFbRrASYhEdUj1vtL0L7ZkTSggdilv2bvgzusACFuQusqQ2gWa9qXC05UDUgGg0dYGFsIfbLiHlyJYn\/BaZe7ltMr5baQoneXo3H+\/wzmd6Xx1mluGaj2XZ9Uvv\/T5QTqLDFaqHO2f34QOETIRdfU4gNpjPGgEq1+y2ChiBXqW4HVu+M4zJRHeM\/AG55qt2McGB0m1rvU1MmXx5Rq0J3JO9mpqlk6U+FvYRCcqFcuFXV6ZI6gttd3vRBky2kWOjY0PaI66m4vhRcSRJC3vQ5E5CLfIvoOT+eH3N5lOVhRY\/yTlUZPLu3ar8AyzG4OYKaZ57jIXIuKCfRgzgFmtEFYQ3JiQdoBOfhE64lfz0sP9+hH5OPTO02dLzjANhQ7DcOrsfKQ6I+JoxWGAA6vMx3uSsrRZSXfc9JEXwZ9VSJiza4DtNp04XPdajGOBGNy2wjHDPLsqFstGcPH4X82nm7nipJWxr5NoWME6t4Hh6ksLhNAjdXbU5NJY9cNryFwDaqU9hlg7pIZX+s0S8z\/4MsA8B1XoZOGuAne6PG3NQZb+EPRLJNko8R2YO6f4Gm0kJ9iXqivC\/G+R239q6XJYuDgfzk8yB0TZL\/1M\/tHtfhL7uHtHk0kInYWmV7ddGMyH\/WFVtF9igOfZfYTDMKxhwahQZSnrpvK9imqb4\/NcRF8kRYer6QcsAJvPUQokPsHhhyMqeHgJkbVrAVPC8ZM2AQK01i4\/yNp+cw5hoJU9LHJxATO4+eUmBVvzjBrSu5KUNxnS5bZLNytIpGzUfqF1BIsPv1dDqvBQ3xT9\/OjXdA3zcTrBaKSJYm1GP9CDB0itcKL\/Bf9orPlaCdooCKhP6XlcOP+HLVIAkTmhsYc5FH0hUQ4bfsskZlouE61AFxtNvhB8I\/Y1FrZVLetsRVL8CA59+0HVEFUo+\/H5QApvsTmc3M2x2tEpg2\/zlxMxtp166ecVkfuAhukc0WtQ8skgrCwbIGKjzXO1tUBFlXqAtGDnCgmRdIu5yxSIwjAbtVAmYzG2niZA9tNGuDjxkFFXLND4x7BG3jp\/6328CtFCoiXyUXKAXSBmhi0nnyeXjQUXGF5RlQiU2gYCk3vxluivwPBYTxGWbzRlvFsfEpT7PEa9hIWCTOC5uKfoFqTAaesUupNoW3jH6NQPUOlq+dKc2NWOx6648e4mGTYwm1dIPUERqHmCIsfCV7HEV\/zqJOyddlpWWCv5yGhP20+vqlFb56DcU1W\/L6XMvDGRVQPbguHu+omkwGO+GEtQ4OED8d8S5MSsUBE39e+AdalmcRP21cH3pvDTDN\/4qJ2KW2n4GEk9K\/+omhDQpzcvlclRFXUCACfMJ4xQ5sxD6h2k577kWcuE8BQqDQj2nm8dbPseizENwWITAvoFcBDZw+sicthgrwWYK37P4sdK12Fwi2dbDcin4CiOsEpKVjYvf92mVYtdKK4H6syYlptg0gezCUggCNMz8OTYKinULBNo9RoFZpZi\/ednvHcmQMXZtUlVaTAoahcKf2YK\/ju8l6ZCH1ZWldPvsi8SqysVgPyhqSq9x\/WyjtX\/QDioLEXymYOzFP9Y+4Mu2kwDn9JSXKKgUVEUR3cXn3J37Zi+gTpWUMuf\/o9qCbS4K9iRpXzNEQ1N8vuxhejlC1yNI+H\/3eNQqzc8Wt++5U7yMHRD6ldYrs8Vbz2DeschaFx4fIYA3j5ky9DtSW1lBWTbx4V+563ZJMPYt+NHy\/\/coPVsKBINW3t9mgnjn9MzCayhvtqff4pp9k0+Yh+X\/2Jm8MIdokKvj2abL9OBXsPbGiQo46K7PmMNhzl1L5UtKiFTS6ytKCAijZh6I5mIEjl9CQMvkdjT9aS9Dn0ucH57r99+yUElg4kbHYoAErM4QBapG7CCR5wehB8Kdwrv\/03RXCwaexzZJcgOFl77VMrs9mcl9xhMGMpqdkfmvMt1e2wOsAfm84H3ljlnBUCB8\/e1TqyQ4HrdGJx1CtWp+1tzgFqdqC5OVtXO+C2DNzgWEV4Xgg0pd16P4WBiRMhZ1RsGRL8nRuocRYIIr0ph+qVHrcdjGPtUAIjd0y\/hASoot9\/wbPL1vxq9kpELwfeqK8L8b5HbfutDeCFlOZUsKeih8p\/hsKGKdzFd4xmBn12fhK7wsQ1FUnjioyB6A0+ShPDvIKldXIlG01yYJuMAONKjFiOWlQcHhESLLL8BASHkfbRWOrZziCHs9LQh1eZFq42NHBKEBAM\/hpMsyUYAJ0xJmVhQB606b34cID0zqbDEy\/Oqdofk1Hm+V1WG7DZAqGe0RLccEuI7Q\/xnZ596sRj\/IY8T7xc1mg40N0s3fTYvH7It1tt0PtZLXoikZkL0FOtRLdYKQa1wKfJ0IRXVHcY3\/ysnzttcLGwoFVTSwNGAD40Jb48YNJvxGC5O+Rmp6l+NoLgloPQJpR\/4TqgVBaD7bsSNN193w2YuLXXq5jhfZt6ENal3y\/\/coPVsKBINW3t9mgnjn9MzCayhvtqff4pp9k0+Yh+X\/2Jm8MIdo1m5259s\/IfRXsPbGiQo46K7PmMNhzl1LCZ638MHcU+lQ7i3F0r\/ZMqIiWyMqF8aCxA9ITGzgKHomIFcD0OI30novKBq3xeA+oPfOM+aBWVW555EOxHO3AUjH8ga2WFYt1iuzxVvPYN1GDBeMNjedrcuB2\/R\/iIAB4iHjXaNKEJCvxAzeMc2up1lU4+JRQvfUbuysK8lsHfziejgVNXUwzvO8u+dxMb508qjpvSXZ9x+916b9WmZfXelDCjtgkTiPLcTvV5M0hrvD\/zPfa3SDu2CnEyCliKTSpDaBZr2pcLdQ1cCIgMBGv\/cx3EkZy8UZTx6KiE5utiTLhTzUsWH53rTkXAA7clOeQQIJX00hq2x1KrdzT9Pb+Me7RuXoroIezvCWCeYrSZipq8nW48H7\/5svfAPPNzUcHuiPMVZGjHwUJvOi0IWq5kECCV9NIatv1hnuHulOV41h\/7cEYRJV9+LxYUX6kY83dXjxxiJexrwodfjfsLFllMflscsZ598+3zysofMtIs44WGkyjlVezrfDIDIkFdfj6+XwRSflDb9hlg7pIZX+sEmznvq3e95NV1C5tUgIJeBvBXTqfg1iUhpz+DtqP8qmVeXHv2IThCMVqAc5zxgmVQpU9ViipXj+jxtzUGW\/hD0SyTZKPEdmDun+BptJCfYl6orwvxvkdt\/aulyWLg4H85PMgdE2S\/9TP7R7X4S+7h7R5NJCJ2FplQwzN5cSfhmeZfdPLp3hWcuBP\/tH55p2tX8JURz+8MulitNkD5M9tIhVKY+vJtMx1IPgRkx+VMA+4PArFM1y7i36B1LDAcWP6YuP8jafnMOYaCVPSxycQE168A3fFsvrjsumYAnaqNX52BHOODpozamcLjXq\/FDacgRvmfBz0OmEfxX+83tKTAMMrbjhTuTWgQVu0p8aK+\/WEWzEaIaTOrF8cGjnodS7H\/r2ePOlALf+5Q+fpw5gmnZgtZoonG9RNXq9GtlFkB59+zl4HT2xGYHe1HoPu68ItsdECd3ppGsSeRiTJFZg1cqwO3+IK4selw3fEZpfAhGtATHKiEWhPgrbsCvjCB3x4\/sGMMdZG+MJQlkbAQoVSobjE76CA8SlpP1PwBMdgxN+oHYABLvAfLkZIkwL0XvU1iRf2DRsjED+gLE8hIPMSBGuU\/MDv1pxbfLpdNMqVKMoYf65lZtMVHLHgYKgM5NgSIqVIVakI3judOaNWsKQTGhzXjZ84jHpevDeXfKUT3C3\/vErYFdFjuNlsAnmoMtvzr+ujiPRC2vStEV2T2Yfyh1\/+lUwQGo1YmyB4wA8pYA3l8TvuPjlCF1CWRsBChVKhuMTvoIDxKWk\/U\/AEx2DE36gdgAEu8B8uRkiTAvRe9TX8nWO4WEerVjZwdcdfr9wPC\/KHVYLNE6FlXdP9mv5Q45UzGcpegi5hjgD5yBYwatrXDcxOvPZlm5nUwCJKTr89W0kruYDjz4uf+cfH704D0kUQcrQxPpU0hFsxGiGkzqyniBAv3HPGusI\/Y1FrZVLesPbj60yCCjDH8BiP5NSUM2tC2XP93BI9x5ZAK3DyE7ZYJM4Lm4p+gUjH\/G5mlfYRLCYOxC23hVtJEetfFfvD03rrjx7iYZNjZR\/Gk9b8EDkV8nxQqCB4cQDEGbkQ39H8lup+6mX4p4RoJt+vZBLhTvf3NNaAcOE+yOZr1OKJVb+aTAY74YS1DgnF+V8F6afTl8bLVpfrNCF5dwmRrlf1Jm8NMM3\/ionYBMsGAtvLW+eH8hnHan\/1LLXFPlHizB3Ii45ixyiywFBQWg+27EjTdTal8gCdjTfcIWd4FqaXRMOdb\/EB0xZs4XgkuU0cgyrjeGvmLK1kKGH3\/dplWLXSihGSwmzE5vrrIHswlIIAjTM\/Dk2Cop1CwTaPUaBWaWYv3nZ7x3JkDF2bVJVWkwKGoXCn9mCv47vJemQh9WVpXT77IvEqsrFYDx0hF0sjW5Ngnf779nhzJvxRSPTkVRaLkOsxe1CxwraYdtlymaBd\/QWte1rDS1GwmUDyP3\/fS06ikP7rwTKPKZtHXt5y7Uia58rFiIcU8YDu3jUKs3PFrfvuVO8jB0Q+pXWK7PFW89g368o+a4eyimI4AdghTQ5KnAKm1fIzi\/fRtW+EDF6dBI2jxtzUGW\/hD0SyTZKPEdmDun+BptJCfYl6orwvxvkdt\/aulyWLg4H8ZH8hTEatrHbP7R7X4S+7h7R5NJCJ2FplXZKHDIjeUi8UxlCXkMXpWzoUeJE\/ypqQVDqddg3WcXMpyJ7HooxSQSe669fDPQF3l8eoLHFMNdwHov6JPPQjUncxQc+lpRA9AC2UILU2AqBjifhpIobQMXMDgH\/4I\/guOvlKBlelStCC1C58X\/Mm2kuzegsupW9K5ykhnwr46C8KjAazcHQmmRpGTYHh0n4cc4FhFeF4INLH\/PcUDkET6HTKXUYY15g8tgrNMOPQhGg06Ts\/ybkntCfjpZV7GW7R6osnr5+3zZuoz7njzDR\/9WxYw9IYj8Dt\/CSZkrOW2saVoIWc14khIo1ytKaI8d0xSVckObLUGXgNbLATBwwvXeewwYkCmCLRUf4+P8VqXVtB+CPHCFDhjehvj57659KU\/JsuSBUqyPYAXLckJ6o6tVwrhOwXCFOY9o0B30qwfUv0SWlwjTOhKjfcCgQ5nWwfiQsxdVjs8nCgOiM3MASudSDkZZ6KMBfTOqbFpwIsrmI1PfJxivR3vKy27Rqcka6gC89lGKsQJIpzzGE6ftgoXOd1dF+8xl8o6pVmqV8MnhpSg9IixedvKia4K42qux3fNKO70HKxQhbYmGvIzbdqAJV6bXsuWwy6n1w21fHwPkR+DZGFB5KboBVQPbguHu+omkwGO+GEtQ4JxflfBemn08\/5bbCnFqTNeXcJka5X9SZvDTDN\/4qJ2IjhobDkRMp8h\/IZx2p\/9SxqR2JXLCKLNYuOYscossBQUFoPtuxI03V5w0Qzgv4GKpl4Rb3xr3zw0vktJry8usPn0NUmy5jVf2cvlOlJ7mkXRYPpI6Iy+GHwbPO0Gzl+MWiuTWapnUb9sqontCKJGd61HChfGhe3adcc04P4MDHEQfNSbK1lY4XniUpgyubjGPzelQ+yjwfwefcnrlS0h2aJlM1ait\/AVktvBRiIDZvgnOgcQfP9N7acl4ekIGUHQ0U9NT1Favj4HbJy463C5dPPOY7mZ\/7EqzHtCH1UfaYz85j1wb3RzynWMylO9ZgIF0gjhsP8PEeKWGeBDreAKKjW5MGLOQrMbf00KNtLQzORcsOS2VMpVn58v\/3KD1bCgSDVt7fZoJ45\/TMwmsob7an3+KafZNPmIfl\/9iZvDCHaJCr49mmy\/TgV7D2xokKOOiuz5jDYc5dSbZHKYfrLwkGH0OcjmXyH9A4k9YanJvdfT21s53AaJnXvJiD2WV6BDsW7SMBTKuUFpLZ5XEz6c0rrT4+Np7vUrAHfuHmkV+7usc2SXIDhZe+1TK7PZnJfcZ+4T1xxMi+2DI3w5wtwlohvOB95Y5ZwVAgfP3tU6skORHrTXPRKcxgtEDAU\/x4EyAzUk\/1nkjsiDFD4VPcwA4saoZGlZ0WkQUmgYCUVgXb8a\/zSDxmv4pE0vzSxSnQUDPD2ydcEEYyY9dGRifMt4nJi+VgTwF29gqSkSIHPvB22CgYcP3ClfHGT+ZGq\/zgnrMQcSYNFColEafxXFfPvpiZ3CBlF6Umxm56yGM5g1Wvt6v1rPZbL+c4dNIKu5Ge0bevVjjt9IM3TzfPGICp3sQovi+\/y5UQzoHv6ulRSPgrXjFWfo9TGP5rWwK5\/fmL8+buqlaRIkoD3AC2UILU2AqA+sALFtXrTH0IiXfTxoM0NZ1leOp5yKWd\/xfQWWB9mMWvmvrC0KcWMRYPpI6Iy+GHwbPO0Gzl+MWiuTWapnUb9sqontCKJGd61HChfGhe3adcc04P4MDHE+Pb7O702L83niUpgyubjGL2VBy0+i0qCtcIX1p82a6K3+0N7EbBzoxfsFgJO7SvU1xEUEry+DoCYSWiGgOBbKvpKFato5\/CvUML8Fe9pbjrW\/S2pTdHrJw8MrEtQ\/Y6g2QKoao2TQX6Y6D3yg86ZLdX1lxG1oA0yy17n20gEjgt7+rpUUj4K101J+wqX7+WacuB2\/R\/iIAB4iHjXaNKEJCvxAzeMc2up08n4lF8Ui+X3LNfforwLwe916b9WmZfXelDCjtgkTiNEbNuzvHBn8E9uPeYMqwV8Xr5AX+SBp7qmqHVkcO9bMHefItUAQW74IbzAgGTn59+otoIMW50TrT51JuSi8LZtSYVmk2yvichzBy3PeJhkM0rfHgzu5uO6TI0dhvp0KbHj5vxQJuWqu9g2RMmNTVzfmgpkWBxtu3HMzwtz49+Vdg\/L5X+NW2BzQI\/GjqRDbVJsab7ihZxS8pVR4mfccmXU0AwT6O2gPAZvw1qeu\/kQBZlE8wYQK\/4TJhfSpnZAzhtaYhUOlXBO3W7ifTsAwXk4tGXJSIs8vx4J24kPt4oSAcrBXTcDbMKfw3C8nAOKEr8evXtsRWcVGciaHiuWlAf2y\/G6t+9G+RhXmQV0wr1W0QS3wSeP\/ukvdASQHrRCWgh8TtJYHWguKmzkuspAt2105Gx79X28l0QrwL2S8WFB\/LyKmuXUk7DF0CuouOYYqngYL68M9NNQ8VxSV5bETTfITyMyfMnrjTGK0XLbMOB\/3kBpfYP+90OFnuOZ7ErB13VYR7XQQ87aDYgxlRygETINi45ixyiywFBQWg+27EjTdU0mrZ0Kw8YkF65lfkTGLL+87NTxMlJr7EVMUMyosh9nQPaG7hYs78cfxX+83tKTAMMrbjhTuTWgQVu0p8aK+\/WEWzEaIaTOrF8cGjnodS7H\/r2ePOlALf+rhJ5kBBZgsJgtZoonG9RNZ4cljcxRmAdCTcQPGGI+UEmMzXqS7c9v1B67JhVes9QMnD28MabRie0W4RUE2yjnrlBvEaJAHU+ydKHBQXTEhFlgcpKSC7fB58lgcbcMmOkt80VfC4wW\/h9JW7Lv+YDYLRAwFP8eBMgt4W1XFch5cdZQVk28eFfuet2STD2LfjR8v\/3KD1bCgSDVt7fZoJ45\/TMwmsob7an3+KafZNPmIfl\/9iZvDCHaJCr49mmy\/TgV7D2xokKOOiuz5jDYc5dSuveUmRpGLQGBsZd6QY0rhkoj3ZA1Tusno7f3VWZjUL+EtbMKA3v\/O7gL5DI+zmLhNZHo3MjVjxD92ozTiYlnFHxJhUbJFIqssc2SXIDhZe+1TK7PZnJfcZ+4T1xxMi+2DI3w5wtwlohvOB95Y5ZwVAgfP3tU6skORHrTXPRKcxgtEDAU\/x4EyKz1fJ0hEXc4UwrwMfuCLel1JV2nTVJnut8aVRHjGUoRa\/zSDxmv4pE0vzSxSnQUDPD2ydcEEYyY9dGRifMt4nJi+VgTwF29gqSkSIHPvB22CgYcP3ClfHGT+ZGq\/zgnrK8N4D1Rou9pGrmWWXqn9OpjazHamCvHnpJhiNggrOvVDljxqMVb1Ad0jUCMe+r6WSpUFNdGeaqJ\/GXiToqvuWTUHrAvQ8epAHv6ulRSPgrXjFWfo9TGP5rWwK5\/fmL8+buqlaRIkoD3AC2UILU2AqA+sALFtXrTH0IiXfTxoM0NZ1leOp5yKWfAIbKeXz1iZmQjb3Xf4ZtlchODuswMo94gezCUggCNMz8OTYKinULBNo9RoFZpZi\/ednvHcmQMXZtUlVaTAoahcKf2YK\/ju8ldFPM8wqaMrPsi8SqysVgPHSEXSyNbk2B4m\/H0DV8I+f4cd4qNOUnX\/GW7fCUxENp7uPC3KWsq1V8ENbA+epsv6CkCDsEBQhpP+\/dlcztYxAXrB9wjrl5VZNFC9HN168JGSJMC9F71NVBDNpeVTErJI5U\/p6unMG+hfYMBwvU+x7HNklyA4WXvrEMfqc59qDvvqEth6ZsVzVLZHJnDvWJjLLxI85tkk3ycFaZJzXdAwB\/Ff7ze0pMAwytuOFO5NaBBW7Snxor79YRbMRohpM6sXxwaOeh1Lsf+vZ486UAt\/7lD5+nDmCadmC1miicb1E2i0qXErjgiPiuZI5DGg6PvlKqFg5Rjk+giX5WGFwX6SbKOCR+84ZsR6Le+cuG3ZtTMekZgFAiLdbLr9y5FY4+6mDZ6pL1T4+IYULxy51eG5lCWRsBChVKhuMTvoIDxKWn0Z4iDVn7YUqgdgAEu8B8uRkiTAvRe9TUgV8ae8iU7T6AsTyEg8xIEXpioZyqVdgJ90IsDzI+NsDlQ+9vX4Xnf\/un1UEJ0WDabIHjADylgDWtRCCm+gGyKISIanmk2\/eHw\/8z32t0g7laxPQRSNAeBYPATjBoBGhpMZzpQry+L8eu3dqWQl5UA93a4yMrF2HUXqDdC3q88TC+Cp3Vo0DpfXdoJvRzJ1RszfjlVw2vWi9tZO1Q9o8JgsQAtc+G52JLK7w9dSJlAuNWJB3wtFQ3MgtQufF\/zJtoaMloj18U6uSDGEz6hUblRhIOzijIhDBQPRmJ2CcEQNdkCqGqNk0F+h+KXjzMRAFdi4\/yNp+cw5lvwmAq5WI5glM3\/6m4RAEnNvJWRWjYfq7+C8IfcKkqnN0dGhC0buW\/SBuqR3Nk3UBKwK0SOQ85AvBdDHoCer2LH4BYCFvtD+oxfBfP0as\/SYHiMfj05+Pyp4FXNbWM9eUxu+cNR7mtfRtcrj+cIj2VkcaJnF1q91Bfxqm\/bG0nWixFcOg+f58Bf7VzTlsBRm1axEY1MNbzrg2O7JOlCPMxsFDPMRG4A3G84H3ljlnBUJrzjx7k\/1NEikuVYst41P1sfS4Z5SR538\/ODSd3SE8Vb3UgDpjsZ4AyB5ZYlFDnDdYrs8Vbz2DfOmCz5KiMgnNQ\/ILADapiuHwFXOXL9HThmNzRLfCdg3qPG3NQZb+EPRLJNko8R2YO6f4Gm0kJ9iXqivC\/G+R239q6XJYuDgfxkfyFMRq2sds\/tHtfhL7uHtHk0kInYWmWmL0ijGVAb24rTh+44LO\/6sMHZZSCiKrTWnv\/tGShc1+QF0z87DH\/j1uv\/iMz9lrjCTvPzQGFbtRT2C5WFsYcMwV317cGwIvMALZQgtTYCoGOJ+GkihtAxtkH3ycudf1A0PQKR36ETMoLULnxf8ybaS7N6Cy6lb0rHzlXfvhsS8wqMBrNwdCaZsPMFysjSE5BzgWEV4Xgg0i1fMYrOTwbaldgQanjq2YUsGvj2JRDG4LvQbxDuwxVftUAIjd0y\/hCVIVO9opjXDjoHExGqcLsXNa9MCLkHNaLfwYMDyZvfOd9SoMk\/D34Bo7VA6JDJLfBRrXWQS7JcQTfadVd094TL9eEUfR0d6rbavocrMR4w\/pdIz74xcXkTCogDK1xJTpV4YalGpnALS29KFeZWg6F+dmYCure6XPlp0xPGI71klQI4vWNxFIsrZd3Rg3tGbTtmG1B+PvreCOapqqipHP6s4taXvR51jRyi9ZIkX+yFe+UpBSnxayrXaFCFKrju0VCzigAZ67eVcXTyesyjfLi6p9palDWWAVrxKU+zxGvYSFgkzgubin6Bz96iVWQkofsjIvBru10qQEgyjpZIjDFseuuPHuJhk2MoTZ3ax1108TDVl+y34Ks6cJMwKJxr2fTn9DD9NeAMBgGZ3LACxBkU2PRJ\/0N8Dx9PiYYOiQRr2srZfpQRaUR+38Em0YIqa2MYL68M9NNQ8cYjRnwUK3l2PQ1dT7txaiKitxS23ss2gVIIe6LdXvgUi45ixyiywFCwJBa1maGcePC2UB7ve5DlKTsDvD1DC53084ZMDdtJ6dgQfGvMmvZzacFs3k4NPbzIdJF20Q5qmOsz7VY30\/niRMT2oB8ZplCbIHjADylgDWtRCCm+gGyKISIanmk2\/eHw\/8z32t0g7laxPQRSNAeBJcIEWx7CTJKCk6g51hV3Beu3dqWQl5UAyrk\/zOsFuldWIVNeHC6qyT\/4meKeKqJDW9TjbWyCNa\/s\/lcVeSfkthjSkdwaxue9wUJ1GMSmzXzurqC34pZO\/xxHO87TxEDDgtQufF\/zJtpk1RGX2Hzl\/oDDEOueMNtpZ1leOp5yKWeEyWe546wvcmvmvrC0KcWMRYPpI6Iy+GHwbPO0Gzl+MWiuTWapnUb9sqontCKJGd61HChfGhe3adcc04P4MDHE+Pb7O702L83niUpgyubjGAwRfhEziRfNs31VA0yil1pwUdxAe2QP0vMQoXtqcPcFDqzCBNxrMlE\/\/zeadIuu2aAN7BtFyPnKEJoaaZ1gAsP+dmGrTHN5Fgrsk7YVL\/F92QKoao2TQX6Y6D3yg86ZLR3SFTv+rRJ3y17n20gEjgt7+rpUUj4K1wky1ATJjLClKX+oa5Sq2KWy6ZgCdqo1fgoRfHF143xiKVI7HBY9I\/lpgT2PvVS1lCd4sYSPIUMfQLD37GfBOhp8v\/3KD1bCgSDVt7fZoJ45\/TMwmsob7an3+KafZNPmIfl\/9iZvDCHaJCr49mmy\/TgV7D2xokKOOiuz5jDYc5dSd\/bZvUVFO0upeKw5dFCSY5eVrqFH2bgswM6uPlyy6CgfUNKOAGFun0rvBaNE6y6LD7OiReK8TA7tyU\/H\/Hr\/g507z5wsdsNSsc2SXIDhZe+1TK7PZnJfcaMC3Z7Um1ADSV5rWislrFZvOB95Y5ZwVAgfP3tU6skOahhx\/uW4rjQtEDAU\/x4EyJMIahm0URoNNervTdppvxcaoZGlZ0WkQUmgYCUVgXb8a\/zSDxmv4pE0vzSxSnQUDPD2ydcEEYyY9dGRifMt4nJi+VgTwF29gqSkSIHPvB22CgYcP3ClfHGT+ZGq\/zgnrPrjnXhyUCCx\/IdTd0q9qVtLYhY5MgyHI4vXt8SfB4Cl5r+jZB2siUOptqyqgQfUW\/xAqb6X4hj58EbvZDNo+l\/Oq2LItGhPaHv6ulRSPgrXjFWfo9TGP5r6G\/z7gJ29xbuqlaRIkoD3AC2UILU2AqCAj9oALlaR10IiXfTxoM0NZ1leOp5yKWcYGtn3UD6JP8dxilNoy0gZN0dGhC0buW+C1C58X\/Mm2hoyWiPXxTq5IMYTPqFRuVGJPg13\/+2RbQ9GYnYJwRA12QKoao2TQX6wmJyU+A0YjmLj\/I2n5zDmm6nTgs7I8vZiFv9GEg9T9c+d3fAoWQ3Gj8+TCTCzjNc3R0aELRu5b9IG6pHc2TdQErArRI5DzkC8F0MegJ6vYsfgFgIW+0P6jF8F8\/Rqz9JgeIx+PTn4\/KngVc1tYz15akpLI6Qpld8hOoYiyTrIFsT+5JkfMx\/saI\/hPQOjnZw7YOi5uFKvwPnff9cD0i6mgzcIbuPZPUOeybgr2DY+0YzN5+nxyK7CbzgfeWOWcFQmvOPHuT\/U0YTr0OqBdcAG7mHaXGSn9W\/z84NJ3dITxVvdSAOmOxngVLD7IpmKjCp1iuzxVvPYNwG3hvWMwG8RA\/90CvZugywfxX+83tKTAMMrbjhTuTWgQVu0p8aK+\/WEWzEaIaTOrF8cGjnodS7H\/r2ePOlALf+5Q+fpw5gmnZgtZoonG9RNYkOdLcDfSf\/14awHtnA5a6ueU9QUMU5P+mLGEcvOY3VKBFTdN9aCdRwiocA4Y16KF4t8UUlmLc6Mfe9pKN3+9WYmyvmT7ThMPE0hsgAMitBQlkbAQoVSobjE76CA8SlplBGML34dkQeoHYABLvAfLkZIkwL0XvU1wrT1\/wRN8j6gLE8hIPMSBDjVethPqmtzz53d8ChZDcaPz5MJMLOM1zdHRoQtG7lv0gbqkdzZN1ASsCtEjkPOQLwXQx6Anq9ix+AWAhb7Q\/qMXwXz9GrP0mB4jH49Ofj8qeBVzW1jPXnEcONQys84s\/f8U3z8qcCmrDlci9eYtelIorcHVOTpjPA0s+DKY+NWOA9L9oKRDxDl08p1ZZooiBDT+FKpyNM2NAX5rbOyp1pvOB95Y5ZwVCa848e5P9TRhOvQ6oF1wAbuYdpcZKf1b\/Pzg0nd0hPFW91IA6Y7GeBUsPsimYqMKnWK7PFW89g3ey7y7Z+Qc0zT7JxlPnQSev9aEpvJHAIE\/t2xFPo\/S+mjxtzUGW\/hD0SyTZKPEdmDun+BptJCfYl6orwvxvkdt\/aulyWLg4H8ZH8hTEatrHbP7R7X4S+7h7R5NJCJ2FplOJg44jcypjBP2q6KPKLr+eNF9PMxl7RcGJMSC\/Tx2IlcCyGxUNHv6XOn2ipuhF0cjeDRH5tlErzQUq+O3WkX\/ZrsXdiBhNMYAC2UILU2AqBjifhpIobQMVtjyCRaNLRzBTri5ZThURWC1C58X\/Mm2kuzegsupW9KxxytueBP7thII4bD\/DxHirHwcrtvN5WE0FfO1MoLOMLdWUL+Oap3zQMVU1A5LKmPfL\/9yg9WwoEg1be32aCeOf0zMJrKG+2p9\/imn2TT5iH5f\/Ymbwwh2iQq+PZpsv04Few9saJCjjors+Yw2HOXUsA5NWNHeYAe27il+ytzS\/f0SKqSxY8JGnCeD1ReAuP9XtJimWFJC4IRDKsXGCIb3O5KKBBJbDHc8EOaC+NF3eKPcNtr6W+DZrHNklyA4WXvtUyuz2ZyX3GjAt2e1JtQA0lea1orJaxWbzgfeWOWcFQIHz97VOrJDmoYcf7luK40LRAwFP8eBMgXxO6Xy2buDDvAt08uGl1jOsxeItxTRYt8v\/3KD1bCgSDVt7fZoJ45\/TMwmsob7an3+KafZNPmIfl\/9iZvDCHaJCr49mmy\/TgV7D2xokKOOiuz5jDYc5dSED9gdOBh+ziFOPHdqAJynTLHmLFurIbt+0BjJDuDrZgKja15wkx7\/k7bp6yY+jbTFdcLWAOwcK6kmBlVCzy37kTjEVEdTakpsc2SXIDhZe+1TK7PZnJfcaMC3Z7Um1ADSV5rWislrFZvOB95Y5ZwVAgfP3tU6skOahhx\/uW4rjQtEDAU\/x4EyNnNU66pWkUOAzILY8YxPleYSoECHaBlNzhArJYk5Pc4pAUOHjJWj42O16QfNWCLW7yp8bHnRQ3voUYk1nbI1+mcC1pGnMUg0v9xr1Uwy9Cta\/zSDxmv4pE0vzSxSnQUDPD2ydcEEYyY9dGRifMt4nJi+VgTwF29gqSkSIHPvB22CgYcP3ClfHGT+ZGq\/zgnrC0h1vDKQ4DaT\/7BjAJWSEWMMte7QKs14E4Z6v3DXeGBYM2rGTcwFAb0IhGkmbyzct2I9yJq2kuhsQheikAmcew6j8oVQpRrLnv6ulRSPgrXjFWfo9TGP5r6G\/z7gJ29xbuqlaRIkoD3AC2UILU2AqCAj9oALlaR10IiXfTxoM0NZ1leOp5yKWeDYOqApDt0dHC+SEKQpEJQ8WEmgxSH+2XKV7Okz2VN6kG5QkzOm192N0dGhC0buW\/SBuqR3Nk3UBKwK0SOQ85AvBdDHoCer2LH4BYCFvtD+oxfBfP0as\/SYHiMfj05+Pyp4FXNbWM9eVJO0bchHtLLvXJ6N27I8jOB7X1cpFt4BmaAt1vgU1l5DMpJui2dLshrTwtFcp30rf6NAHbnuaICDYd1bCER9xYwicv9OtyMrW84H3ljlnBUJrzjx7k\/1NGE69DqgXXABu5h2lxkp\/Vv8\/ODSd3SE8Vb3UgDpjsZ4NVEf\/KkXUFDp9rtQaHwBc7emRVeoIVMwYvvmyTVRZ0aMP62lJf0UOrYR3VfQbFEurcrhoLgMxMm9QwyvAMIoNC9+mRrBQ6hdM0G\/mz1e5BBy2mqn7GZPyDNZrb9t7z1bLwACQRQMxX21CXuOZJi38DSLpoBkRt\/JdNH4aDsfjyDakkytSAJu+fcVVvrFlEqkHJAwZnG+jmlcLE5ZiUiuR\/eNj5XiC0Ra2WUlTlxMXvRLwtF7IJjSYewLLq\/59LH0OejGzMdFskNjf+MlezTHkRmsTNi4govlKoWnlfZJ6j0DI5x5xGXNMyLXDfNdpzgl7jI4C3xGRuNhh\/NEngeDah9xp80YjiYnYwRelhkkPflwwDRR\/LJPPIIO4XyD5lgiDuL7m2+8OudI07Ta28ZCRjUWHh1g5oLcTBiFamhM7q8+PW5ajpZbFc8jJElRwsntnvm+BW2VyXm\/Ieq18vSRcIHC74LvO8Mfq8JlIzzzFwz4nfwghKSpGyL6A+hyHg44cUJE0NdN9Rf1e\/9dt+EiK7GOBGNy2wjHOu\/ffntDrpUzZY6FfWKo\/5JWxr5NoWME6t4Hh6ksLhNu7NYmhFe9UVV1JnAd2PRb5XQqLp7tbsAu7NYmhFe9UU5\/UzYRsRiIi0CQbs99LTQj2PthtOj7kDZRU9QtZjI0uhEFXZFaLRmWYkj5U1Dm29laWM66C5Wk9qHnPndCb7ralFjKaBulK1Fg+kjojL4YfBs87QbOX4xaK5NZqmdRv2yqie0IokZ3rUcKF8aF7dp1xzTg\/gwMcRB81JsrWVjheeJSmDK5uMYbfXr2VMgz9ns58ewHGK61TWgMx4q2svhQVfNvjxmLhBal+uy3y4YK60a4RubEx\/WIuqEvZbhvNkWA\/s5wxNoa1wbS1P\/lOeJAgur4hsXIdzzmPXBvdHPKdYzKU71mAgXSCOGw\/w8R4oU\/5N0194PU3QbXSFlRuVHHWUylwF9wSZY\/d3J6TiyZUmQqaeeQwYC43zX48KcLQsquPRoYgk2HyB7MJSCAI0zPw5NgqKdQsE2j1GgVmlmL952e8dyZAxdm1SVVpMChqFwp\/Zgr+O7yV0U8zzCpoys+yLxKrKxWA9UBjWjbvNriSkZWz\/PZ99g1VHvSd1E7NfGbZ7Ztvng7joIK2tSn1UHeLRjDH6RG\/GDD700RsL2kxdDArMMmlDvC+LSLNlhgjtO\/ed776aGKkZIkwL0XvU1UEM2l5VMSsnsrHcSYpx5jKF9gwHC9T7Hsc2SXIDhZe8\/UpAyhOFdC9r4gTVh+piGgq79P19eCxQjVIzmmTtaTWcbEcaVQdyLpAT6mUQwMkD8RkLfq1\/74aqiJ8\/PD3LuPGi0Y8NCZMK1gYZ+qi4LPx2DklCmh6rIVtGsBJiER1SPW+0vQvtmRNKCB2KW\/Zu+DO6wAIW5C6ypDaBZr2pcLfI1dE1c07wVYWwh9suIeXLViEKWLEM52mqX3aO0wjQ9Q+vh9x6Q1UzHWaW4ZqPZdn1S+\/9PlBOosMVqoc7Z\/fhA4RMhF19TiA2mM8aASrX7LYKGIFepbgdW74zjMlEd4z8Abnmq3YxwYHSbWu9TUyZfHlGrQnck72amqWTpT4W913uH0D8SjGIa9I\/JvrN\/encCxxZQKMa60857R5cK90smXhcgYyC43a05FwAO3JTnLdLLYF9GkwvouAg135mAGydF4CsHjCNps7wlgnmK0mY+kLPkEc\/THiUwjEQH5+nufi7iTwOxhQNEtQ4x9RAusjaYqehLGOmeAROCmvqkQfiwpWMPBtwYSLVSq6iZCL2ShO3RgA+WNRr9aKlPMgEmm5TCIt\/UiYwCbFvSMzSJI\/UYqdxk8M\/otNobvVILShrqVdSZwHdj0W+V0Ki6e7W7AGrVKxcAKuxdPxLeOzOhh2G3wVEsvUn1i4IIjQSmU+j5\/KnMCg2S+CgbwV06n4NYlIac\/g7aj\/KplXlx79iE4QhgWnw6kzHQlvESHFRnNHaVo8bc1Blv4Q9Esk2SjxHZg7p\/gabSQn2JeqK8L8b5Hbf2rpcli4OB\/OTzIHRNkv\/Uz+0e1+Evu4e0eTSQidhaZSE6gHD2eLSbBt7QaEAe0ndYZDlDFoLDi4WX7FeyoS71mv3BdHzuUxwZUQ6xLIcZ4WeCAy8TO5ipyaWEFaJFGM\/NSpBqnhxrymLj\/I2n5zDmGglT0scnEBNevAN3xbL647LpmAJ2qjV+Bu0xDSLa3+twR3rZArNX4GTDxuLlGlcYH8V\/vN7SkwDDK244U7k1oEFbtKfGivv1hFsxGiGkzqxfHBo56HUux\/69njzpQC3\/uUPn6cOYJp2YLWaKJxvUTU5qvbKbgYbBdKqjeJsOrJ2+nmC985Pf+jzkrzGtPU4pBQYP55IHydhHFPQneRWEGBCaSMQG1caEq1uYpZNiyZbWtJwNoi+6tPRlpk094h5yUJZGwEKFUqG4xO+ggPEpafeocLNa5AkNqB2AAS7wHy5GSJMC9F71NZNcIwQFYVp5oCxPISDzEgRrlPzA79acW7dsYmEDsdF4fq2e5VpPSUcmDOgEXFZLuJsgeMAPKWANa1EIKb6AbIohIhqeaTb94fD\/zPfa3SDuVrE9BFI0B4Fg8BOMGgEaGkxnOlCvL4vx67d2pZCXlQAyoWB7c+WDpGN+PQZ4+4AJUos5hIPsSxbMebexVnaTIxYsVGp\/ReAwuxKm\/B7CqzkDrj2FW+bg\/lXtb1aRNCXWxYYiIg91lnCC1C58X\/Mm2hoyWiPXxTq5IMYTPqFRuVGEg7OKMiEMFA9GYnYJwRA12QKoao2TQX6H4pePMxEAV2Lj\/I2n5zDmm6nTgs7I8vbSYfZcX7OxVEmQqaeeQwYCfhdrMrZ+ExzpnGa\/7igJgyB7MJSCAI0zPw5NgqKdQsE2j1GgVmlmL952e8dyZAxdm1SVVpMChqFwp\/Zgr+O7yV0U8zzCpoys+yLxKrKxWA8dIRdLI1uTYGY5Fc5I4bXKylmU3xMFLIMvSRN5EDHv70vlzyS1mN7wlCjzXd\/uvcqV30vby1dJZUaVpVonQ6IAZZngCwMBFEg2U09Hd8OUnkZIkwL0XvU1UEM2l5VMSskjlT+nq6cwb6F9gwHC9T7Hsc2SXIDhZe+sQx+pzn2oO9r4gTVh+piGgq79P19eCxQjVIzmmTtaTWcbEcaVQdyLCkhrRtDuU6VLUcnEOdd5l0WBXOBeKJ+NxQiPSQG8K1bA4sZRvr0d9fe2zwF\/MJGXLf+3Sh95YdRUVkmrNGnmX4ifw3iH0JPcPGmCRptnH5iElAQ7b+cWdoUgRDTgkNVcNMLATu\/TrHizMiC974qZO1K8TyiyTzp2nwM5028\/TsPantsbcxYhSrcqAtVGBUkdwlC9qyQLN9GQLtnD47J0d7157BSlkLEw5Nc+AbbgDuUFjydrdmrV0XKwzJaLwOnvCCZE7v7BOugtesRgw9Dd\/WpBcWCWyuLSEdtsIyFw0xZXj+Y1ikrpszp6iTt5ueS\/fwPGDGumdImLfIvoOT+eH3Klc9\/aVKXRZ80walII0iz47WHiQNr4pAwGI\/kL\/VENgzgFmtEFYQ2VWKeXMt5HViM\/5cKLtEyZex868\/JHLgN3+eFr6vuLjqD+DMw3VC4SoQ3bl6TTZeb4fMOS+F0q7jmCJri0EIFj+O1h4kDa+KTAN+n6P0aW\/Dn7HW9aoO2RWH\/twRhElX34vFhRfqRjzawyCoqfnrXQczGgvBL6yrEx+Wxyxnn3zxuoZGJuhJXVQB02S7XZvJuRf9aCM\/1Rk4Km7EnzYF8W2GWDukhlf6ykyyrMr3Ze6a2744moDq23xOZWPj+V7Nc0TZIPvYWT60VMUMyosh9nXHjzfKb2K7IfxX+83tKTAMMrbjhTuTWgQVu0p8aK+\/WEWzEaIaTOrF8cGjnodS7H\/r2ePOlALf+rhJ5kBBZgsJgtZoonG9RN\/H76iaL2n4n9o2L6JUhUS0U30t3gvEWlmbKI4nAoNIGncQaVBlyYkUNqa8Tr2w8OaCfwi3nA5LXDkEO5af9ciFCF9M0LdhtVn7YsAgEbzvgt80VfC4wW\/h9JW7Lv+YDYLRAwFP8eBMgyOVm2o0IKo0W9PvNxRVter+ujiPRC2vTE9g+4tvhJ9Wv80g8Zr+KRNL80sUp0FAzw9snXBBGMmPXRkYnzLeJyYvlYE8BdvYKkpEiBz7wdtgoGHD9wpXxxk\/mRqv84J6xvvdAHDCPxAqYc1KuklFkH0a2+HN653JWwjyUgOrafHG1YMZpUGdHxvWGWhNoxvhwI8FCQuGi3vqd25\/Cz42XfIFM1RGSBHGx7+rpUUj4K14xVn6PUxj+a+hv8+4CdvcW7qpWkSJKA9wAtlCC1NgKggI\/aAC5WkddCIl308aDNDWdZXjqecilnuBbjxFMI4c60D63M0\/1R0JeN8iUispvGIHswlIIAjTM\/Dk2Cop1CwTaPUaBWaWYv3nZ7x3JkDF2bVJVWkwKGoXCn9mCv47vJemQh9WVpXT77IvEqsrFYDx0hF0sjW5NgR6d9ErGSPQtGzLBfVx\/Cka1FJfIVeTikMkU4J2zX2Ww4cgM5Krn5fqYMt8NiPwnD79\/lBqFcYmpvp6QWm7O2v\/DLvmJA7ucrRkiTAvRe9TVQQzaXlUxKyacJUB4PoCS4oX2DAcL1PsexzZJcgOFl7xJVcoPltvFD76hLYembFc1UfGp9S2aLfXBEJalPP9gThycBzrz\/jGJSlSmeJkqxT0WD6SOiMvhh8GzztBs5fjFork1mqZ1G\/bKqJ7QiiRnetRwoXxoXt2nXHNOD+DAxxPj2+zu9Ni\/N54lKYMrm4xgnqAHhrGQsaQTO9uOvke95Slp+PSwlQVRKzptUlBaU7Ywj+aaolMSAs9GPWwAsykJjPlqgLfgMkKd41o1t20CXhIqhTDv7YLmsS\/esYC8g89kCqGqNk0F+mOg98oPOmS0d0hU7\/q0Sd8te59tIBI4Le\/q6VFI+CtcJMtQEyYywpXLgdv0f4iAASq3oAnRaQ64r8QM3jHNrqXxAJGx3II1HdGd2egFIWbHW+lT0rWukQlOa3WPeiS+M9U6wawOjurTFCI9JAbwrVsDixlG+vR3197bPAX8wkZct\/7dKH3lh1FRWSas0aeZfiJ\/DeIfQk9w8aYJGm2cfmISUBDtv5xZ2hSBENOCQ1VyWfbBGZVvyx2EUc7CWZ7qqXH8qJvsHqnufAznTbz9Ow9qe2xtzFiFKtyoC1UYFSR3CUL2rJAs30ZAu2cPjsnR3vXnsFKWQsTDk1z4BtuAO5QWPJ2t2atXRcrDMlovA6e8IJkTu\/sE66C16xGDD0N39+6jtRt23+eYf3B5BPMqPKKBEhceW3oWyKSsXRR9npjrbVxrjP6CupTuL7m2+8OudQGxxIY4Op15fOFCpBkD6hQSry1bVPOHekXOoQTSRwJPlJgtEWD5jlF3dJrfE4GuuAROeFPz0NcMs2v+L\/yq83n\/tL6z0hQhEgVjOzaN\/5RMe2UfR1Tp+fb1pS1pLbgFic\/982pV8bsX8fMeAryuPogqClox2zONIHDqjREqcps77ei4uueVO+5qepfjaC4JaeoHAL6NfgNz6+XwRSflDb9hlg7pIZX+sEmznvq3e95PGmcbPyuuBYDUeQ8eRC6iXu5qylyeNB8SVeXHv2IThCKbnTYtV7oew7t1H81WyFayjxtzUGW\/hD0SyTZKPEdmDun+BptJCfYl6orwvxvkdt\/aulyWLg4H85PMgdE2S\/9TP7R7X4S+7h7R5NJCJ2FplNIZ5PI+l78y0tvTW7rcafBVXp1hfsApnF2vkh4tz1ReWg4n+tYhjpmmczKNK8UlhhUgIEI9yui6fSy5Wx1fOXMvD\/YVdCbphYuP8jafnMOYaCVPSxycQE168A3fFsvrjsumYAnaqNX4ZxVzjRX0nQQve7EaR8Tz8nBWmSc13QMAfxX+83tKTAMMrbjhTuTWgQVu0p8aK+\/WEWzEaIaTOrF8cGjnodS7H\/r2ePOlALf+5Q+fpw5gmnZgtZoonG9RNj69DDIvUdZYx+EqYi\/qmTdUUBPN32+1wOD+drMtM9GJn9gEDKV6T0WmKQVlw2MXLR8oaW+QDB5GV5OZjMTT03mpYzJPfA5XoeGgV9aj7IPJQlkbAQoVSobjE76CA8SlpP1PwBMdgxN+oHYABLvAfLkZIkwL0XvU1\/J1juFhHq1Y2cHXHX6\/cD73URe5\/7ptFZV3T\/Zr+UOOVMxnKXoIuYfli4eFweBUcGQ68GCxbxWcnReArB4wjaVtJK7mA48+Ln\/nHx+9OA9LfrFNXxTCYxsEpEt16CDn66gowyYoNR7Sryev\/MQ0kIBl7QNy7Zs9Mwp6KHyn+Gwq1LlS\/BBHHO8x2BfY\/d10ptp7ZUW8WsiKZWCX8lpeGdQuZeTCBXoPJAqnO9b9Vfv8PNcedQrUxUFiI\/tkGezibalQlE\/S2W\/7O5gf+Ekkb0K1\/EmyG7DyFCWfQ0hUgu8ysR+uDB1rhcNCqEtC9\/kpjiJL03oSWeHi9acJ07simn0qP35aewhgKz3rzmNUfTd6UVzQu\/HoV\/iea\/u50FnqNjsSA8In1olJ2dYvbyfZ880S1DjH1EC6yLWz03\/kaVIXx9ishAkQrK1gSP4s5OaIU6aTiW41wtgdV3NsSZCVJuOeYQQlfSV\/ysrhFqjshTtaOQqtCiF7snHbhBf+u4IjBxQkTQ1031F\/V7\/1234SIrsY4EY3LbCMc6799+e0OulTNljoV9Yqj\/klbGvk2hYwTq3geHqSwuE1ZDR3Jn4OGGJqepfjaC4Ja20f\/ehrTXSc5\/UzYRsRiIuUZwVaLhW\/4RQ5eR+gcTDgSfJE6Ec+dURHQh7nFlHeF93w2YuLXXq44TmekxDw3hJR4b+wTjhFvN0dGhC0buW\/SBuqR3Nk3UBKwK0SOQ85AvBdDHoCer2LH4BYCFvtD+lIZwflLVQYXWjoFP4xmzzup4FXNbWM9ecMZx21GTVpvKrSajiTddliBRnW7UdoFL+GdezCFrL1Oz13S6jha34PyBdglIdw4kGe+NvDelhXTniP+FNVndsfC4WPHoXvNa284H3ljlnBUiMpNEs2YS6lz1uWnQLcM+1R8an1LZot9GnlLEPg2UFbbfNfuEmRg3jt+oZLn47I9RYPpI6Iy+GHwbPO0Gzl+MWiuTWapnUb9sqontCKJGd61HChfGhe3adcc04P4MDHE+Pb7O702L83niUpgyubjGNnj6x\/sH8X6ylB3PXi0JMwJWD\/5zvXeR0QGT0cPRXb21S\/rbuUNwPqeNF61ejYpAzZoHWOsHHX0Hbo9TVdItRHA7TBiJrFwdX5XwgD0ia9A2QKoao2TQX6Y6D3yg86ZLWmu2QqRlpeUy17n20gEjgt7+rpUUj4K1\/xLmKAJNdz+KX+oa5Sq2KWy6ZgCdqo1fgS0Q8KY8LE1sYvcUDj0iU4y\/\/o2RQmNLB\/Ff7ze0pMAwytuOFO5NaBBW7Snxor79YRbMRohpM6sXxwaOeh1Lsf+vZ486UAt\/7lD5+nDmCadmC1miicb1E0wfUOuRI\/F+UkLAJJE4gWwjjpdYonoScvpcr4HkBOIBOuBg5WuSEQ\/tRnSqXIs9FkzmCCwpBBxi68B2rclC7w\/8AuO7pvR+WI8TSGyAAyK0FCWRsBChVKhuMTvoIDxKWn0Z4iDVn7YUqgdgAEu8B8uRkiTAvRe9TUgV8ae8iU7T6AsTyEg8xIEC7Bau7N\/ToMrsmPdg3ZQp6JNTsWxP7amScFeieKGoc6v+b\/uBf4xnvUpkjIzdV013xpVEeMZShFr\/NIPGa\/ikTS\/NLFKdBQM8PbJ1wQRjJj10ZGJ8y3icmL5WBPAXb2CpKRIgc+8HbYKBhw\/cKV8cZP5kar\/OCesTqRTsUcVX8htisOuFnw9T7ONEWKqclL7vlmW7vL4HZIM0nV5FsYG22D+K\/+EgJjW4e0puPzE1YSF4xffXJMPHbTmq1E1tR3Oe\/q6VFI+CteMVZ+j1MY\/mtbArn9+Yvz5u6qVpEiSgPcALZQgtTYCoD6wAsW1etMfQiJd9PGgzQ1nWV46nnIpZ6YDkLQSX1rzbcMyZQUNos14z7upKus1OFcbMJTJ2XMNe4YYGS1CpaM3R0aELRu5b9IG6pHc2TdQErArRI5DzkC8F0MegJ6vYsfgFgIW+0P6jF8F8\/Rqz9JgeIx+PTn4\/KngVc1tYz15lTAebSrZ1+eDGqTn4Twe10wI7Q1TAcb0arnD2mUvHxY9nyhRiCKqqLJJ1thrvQzBfPwdhsRlpcRNkw+1UXWRvyYQnEGuQ5VmbzgfeWOWcFQmvOPHuT\/U0SKS5Viy3jU\/Wx9LhnlJHnfz84NJ3dITxVvdSAOmOxngDIHlliUUOcN1iuzxVvPYNy2iFBeO6kCiZKTIrT\/ZltQCptXyM4v30bVvhAxenQSNo8bc1Blv4Q9Esk2SjxHZg7p\/gabSQn2JeqK8L8b5Hbf2rpcli4OB\/GR\/IUxGrax2z+0e1+Evu4e0eTSQidhaZWNS44143ENTODFvnIoS5WRoscUDVeG2SkvvwSHzVdMOpU72lgyKgLB0Cj+u7D+wipdUVRHcjGlAbgomIfHmW1sMFeCfvMnuzgAtlCC1NgKgY4n4aSKG0DG2QffJy51\/UDQ9ApHfoRMygtQufF\/zJtpLs3oLLqVvSsfOVd++GxLzCowGs3B0JpmcPMMYEf+jaXOBYRXheCDSY04nmFqfg8XXMkLV\/UDKULYKzTDj0IRoNOk7P8m5J7Qn46WVexlu0eqLJ6+ft82bqM+548w0f\/VsWMPSGI\/A7fwkmZKzltrGlaCFnNeJISKNcrSmiPHdMUlXJDmy1Bl48efF9Lypz2eEIfyn8yCaud1iyxjYqa21QfgjxwhQ4Y3ob4+e+ufSlPybLkgVKsj2AFy3JCeqOrVcK4TsFwhTmPaNAd9KsH1L9ElpcI0zoSo33AoEOZ1sH4kLMXVY7PJwoDojNzAErnUg5GWeijAX02qfIVJg5ce\/Mu8tt4XMiGTuTVxE5NhMZnCnKPJRPSW+k9PDWPn4wDDndXRfvMZfKOqVZqlfDJ4aUoPSIsXnbyomuCuNqrsd3zSju9BysUIWlboj5L7UMjOXf+zqI0uXL0leYyiRJzEd4koAR6FATce2+c06Mvb8J\/VYHho1CzgbvIqa5dSTsMXQK6i45hiqeBgvrwz001DxY73Lv8\/\/VWjdRe5D6j5A64rRctsw4H\/eXEFk0WPwcsBMTKQbiogwTqks5tDMOHZ\/mp6l+NoLglqQU7WYPo+yKfVLe5S0eJxnghbZ+qIAGO0+sicthgrwWXC6nj+VLKFACkhrRtDuU6Wm3lI+3E19hyXypt6oa5Xj93w2YuLXXq7Drq0nNARuRaiES1UqKmLyN0dGhC0buW\/SBuqR3Nk3UBKwK0SOQ85AvBdDHoCer2LH4BYCFvtD+lIZwflLVQYXWjoFP4xmzzup4FXNbWM9eVfnQH3\/QAyqJowFcxbPcX0Gv3IsKWz313elxz0vtkChzh4jl00yXNiU2T5C5o7hL7FF7OW2ZpCPxd3eRjL7RZ8iOSSK+5U3eG84H3ljlnBUiMpNEs2YS6lz1uWnQLcM+1R8an1LZot9Yb3Nhp2RVPTSdO6sjdN2VEWD6SOiMvhh8GzztBs5fjFork1mqZ1G\/bKqJ7QiiRnetRwoXxoXt2nXHNOD+DAxxPj2+zu9Ni\/N54lKYMrm4xgK99uJazR0ojqxGwUjd8LFiGPArQWXrwhS2KpZfm+atJI6dFUZZGhcIUbPjDJXCO+bnDYgHUNyn+TK2FgUNJ8IWV9b0GklrgUXEA3knqm+gNkCqGqNk0F+mOg98oPOmS06Gd7CHfkcQcte59tIBI4Le\/q6VFI+Ctd2sAtOoK4Zs3Lgdv0f4iAA+WdE2AGOIXEr8QM3jHNrqdZVOPiUUL31t5TRNgFL8JAgXmLbaXruXp+en90o+PzttgrNMOPQhGg06Ts\/ybkntCfjpZV7GW7R6osnr5+3zZuoz7njzDR\/9WxYw9IYj8Dt\/CSZkrOW2saVoIWc14khIi4cy5a\/uMouSVckObLUGXji472iHYmVWUZbEezSjE8OwRKeNdvY09ZB+CPHCFDhjehvj57659KU\/JsuSBUqyPYAXLckJ6o6tVwrhOwXCFOY9o0B30qwfUv0SWlwjTOhKjfcCgQ5nWwfiQsxdVjs8nCgOiM3MASudSDkZZ6KMBfT6vrAHv5DOUkFs1HZgA5+JVuk\/d2G4lzVlIr6SF7qpbf5KE8O8gqV1SnvDt85K9id+nI65rIGm\/\/7w9anp1wB18uMDnAeG2eaOIIez0tCHV7+bAv5ge7kibTC3H5wn1JKKXF8Vw2zNaimyDxwsHGYOpiiF+aKirHRFVA9uC4e76iaTAY74YS1DpVea3Kv3vTTxwb0uUO3Bvf3vlzj4R85BW8NMM3\/ionYBMsGAtvLW+eH8hnHan\/1LLXFPlHizB3Ii45ixyiywFBQWg+27EjTdQ\/UVYvwNyvdnW\/xAdMWbOF4JLlNHIMq43hr5iytZChh9\/3aZVi10oorruhiebaXlyB7MJSCAI0zPw5NgqKdQsE2j1GgVmlmL952e8dyZAxdm1SVVpMChqFwp\/Zgr+O7yXpkIfVlaV0++yLxKrKxWA\/Zaxcdxz8QfGc\/LDwtz1s7BbEPW3mcOl6XwSbmirlBPQuqNawlI+9yXtAVfhd+6QB6luPC0C51O4yCq1m\/+zC\/z7\/aDzLotD4uic7UeLQFJd41CrNzxa377lTvIwdEPqV1iuzxVvPYN8kY5vXv\/bDox4bxPeUKqw6mYIRacjT2PuTU+XxZYPXko8bc1Blv4Q9Esk2SjxHZg7p\/gabSQn2JeqK8L8b5Hbf2rpcli4OB\/GR\/IUxGrax2z+0e1+Evu4e0eTSQidhaZUgcFu\/4P0UVZXx+A2g9sVn8vq6osYg0xQQ1MJdP7cVLdzOulxjFBuFTEIYecbvPNMhjpxnrBsVLO9Qq1T926SfDvFeCw3AhCgAtlCC1NgKgY4n4aSKG0DFDXKvDO\/v20RLa57L92Pm9gtQufF\/zJtpLs3oLLqVvSkzFF09vkgQhSCOGw\/w8R4phAMOEIsSB0GC3e2HlIMzjMK9jqGd0bdkBi6AmR8va7ny\/\/coPVsKBINW3t9mgnjn9MzCayhvtqff4pp9k0+Yh+X\/2Jm8MIdo1m5259s\/IfRXsPbGiQo46K7PmMNhzl1Ig6hVmDuG1LuG5ATxK2z4jYaTONxApdyDI4qqTx6sUFwwb58RpJUuh+33Xtix5fVLdTIPkcc6waI5mtBAMl3Byh0s6SsJ2BjCxzZJcgOFl77VMrs9mcl9xvFmuUupYNKVGSJMC9F71NS1gjm8duZNMNnB1x1+v3A+qK1KpwPCXTmVd0\/2a\/lDjlTMZyl6CLmEf9UgflpR8h\/3TIx4u993ExQiPSQG8K1YKY5KkgRYyh+gVbRTm8qYgzr77+h9bVTp3nyLVAEFu+CG8wIBk5+ffkZQhRpsXCYlRGj8dZwtYsFZr9Mp1oYrXtGXJSIs8vx4cFQPCrsfsSawB9FjxC94Gw3C8nAOKEr8evXtsRWcVGbeD5BjwUkNFEg4\/x\/RQgh63fKmKhu2GvXWHZI9yFJoA3+bFLOjVX2QjqjSnKyAQcOx\/CL7TfAX85jyMaHMCVFyUAp8mR9WFHvCcW3OUIUOV\/s94hXOMp\/kD\/2u3Wb9BT+fkvAZnzd+t+csc5l52zR6YSk5Txp9Eh0gGLbUbRcn7CIficSCQWCo+sicthgrwWXP\/fNqVfG7FRQ5eR+gcTDgSfJE6Ec+dURHQh7nFlHeF93w2YuLXXq407oX5QT\/Zu84P2GnJCAcsN0dGhC0buW\/SBuqR3Nk3UBKwK0SOQ85AvBdDHoCer2LH4BYCFvtD+lIZwflLVQYXWjoFP4xmzzup4FXNbWM9eb5swkXrZF2Ips2pHess57mZlkAUzK6pZCptjmOpJfGNo\/WyZvTHbrne6Ce9QbiKQ6qaAF9pV36zT3W3XLN1Fy+jL5+hVpP0ZG84H3ljlnBUiMpNEs2YS6lz1uWnQLcM+1R8an1LZot9GnlLEPg2UFZX\/iuH4syyJmvmvrC0KcWMRYPpI6Iy+GHwbPO0Gzl+MWiuTWapnUb9sqontCKJGd61HChfGhe3adcc04P4MDHE+Pb7O702L83niUpgyubjGPzelQ+yjwfw0+jgq2GpEqTbSEtt\/73L5KZeAmjEnREJI4Dsg3jMl9RvruL6LhBM8sPLOrLomhBKJHx\/NTqz0iW\/6j0iF3HcUFMh5R78pMY42QKoao2TQX6Y6D3yg86ZLR3SFTv+rRJ3y17n20gEjgt7+rpUUj4K1wky1ATJjLClKX+oa5Sq2KWy6ZgCdqo1fjn\/5jjG4U+DoZO55uyNomjPwInIx3XhRlAKZV4Poz6HwJBdsCXii5R8v\/3KD1bCgSDVt7fZoJ45\/TMwmsob7an3+KafZNPmIfl\/9iZvDCHaJCr49mmy\/TgV7D2xokKOOiuz5jDYc5dSejxfGeKuVTTulO32WxVqFcF\/qvT0GdilFmh3gVipz3cxQ0LbSJDzc1xNGIC57ld8gtrCB6vs3aJjDhmZi5NDRmS\/uidBZn2asc2SXIDhZe+1TK7PZnJfcaMC3Z7Um1ADSV5rWislrFZvOB95Y5ZwVAgfP3tU6skOahhx\/uW4rjQtEDAU\/x4EyF\/xK7bjEW+TcGQjWzC3gH2VXldi5nNMYpwVpknNd0DAH8V\/vN7SkwDDK244U7k1oEFbtKfGivv1hFsxGiGkzqxfHBo56HUux\/69njzpQC3\/uUPn6cOYJp2YLWaKJxvUTSX5f+dfbat\/znnL3vAqP7y4Fh17vD3t5OlkM1U6g5QWo278g\/PLZgUApjISn4ebXfTF7DcnCQvmFypS1IKPbXzDKiZ2Wl5fDPRlpk094h5yUJZGwEKFUqG4xO+ggPEpaZQRjC9+HZEHqB2AAS7wHy5GSJMC9F71NcK09f8ETfI+oCxPISDzEgQ4wrymfhCcWxWosTUYv\/fefpPlVMsAOuD+6fVQQnRYNpsgeMAPKWANa1EIKb6AbIohIhqeaTb94fD\/zPfa3SDuVrE9BFI0B4Fg8BOMGgEaGkxnOlCvL4vx67d2pZCXlQAjWM6flqpIRGzt1k+II855BEDpdKj+SS6mdFzDWRU6qK91rQj0u6ajWT9TVwXjKNodsvmK9Y3iWfYy\/0R8M1uDgCx7h3tKkJ2C1C58X\/Mm2hoyWiPXxTq5IMYTPqFRuVGJPg13\/+2RbQ9GYnYJwRA12QKoao2TQX6wmJyU+A0YjmLj\/I2n5zDmpBzukcjSBVE5DsGkr4mW9M+d3fAoWQ3Gj8+TCTCzjNc3R0aELRu5b9IG6pHc2TdQErArRI5DzkC8F0MegJ6vYsfgFgIW+0P6jF8F8\/Rqz9JgeIx+PTn4\/KngVc1tYz15CKcN+9qbBuuwQ7\/2T\/vEdMDinEBEKGDhVBJVORVz0Ad7s69MUE1jT1op0crR+eFPtFjLtrSts59hga00DfWWgdZxeIJ62IhTbzgfeWOWcFQmvOPHuT\/U0YTr0OqBdcAG7mHaXGSn9W\/z84NJ3dITxVvdSAOmOxngVLD7IpmKjCp1iuzxVvPYNxzqAd7KuKLoyFdHkNIlULH\/WhKbyRwCBP7dsRT6P0vpo8bc1Blv4Q9Esk2SjxHZg7p\/gabSQn2JeqK8L8b5Hbf2rpcli4OB\/GR\/IUxGrax2z+0e1+Evu4e0eTSQidhaZbqTpMDQqIiQ2my7zLT6S\/UTp+nYe4ol3col3KVWICbWiTg6WlR3sJs8JYkYOgqsFqNG0uN7LNEyO0ZY14E9AwTO\/GEUUs\/auQAtlCC1NgKgY4n4aSKG0DFbY8gkWjS0cwU64uWU4VEVgtQufF\/zJtpLs3oLLqVvSu2yW0r2E3MOCowGs3B0JplpfUoPuSoLInOBYRXheCDS2eotnpfLnPP90rEZXzlte0jH\/G5mlfYR2gNAIeYGk3e1QAiN3TL+EBKii33\/Bs8vW\/Gr2SkQvB96orwvxvkdt+60N4IWU5lSwp6KHyn+GwopuzbFv6\/xFMXh129dYEZttqLn9koLyWCLfIvoOT+eH7vxRbx5RRyJgSFVO5TTKQRrd2CP8fp\/x1qvf9\/Ht7sFgzgFmtEFYQ15drCC\/WVHoXX3DWM\/\/YrgRLUOMfUQLrKFdd9VwEu6lXafrOzfvCEKqqUoCO44gARYf+3BGESVffi8WFF+pGPNrDIKip+etdBzMaC8EvrKsTH5bHLGeffPCMtJnW+utwFV1JnAd2PRb5XQqLp7tbsA3uc5we7m+ZLaEZzrXOTTQDM4SMxgJHahRvUsbX4ki9I8oiVk89pr\/ZV5ce\/YhOEIpudNi1Xuh7AVmroAK6N90aPG3NQZb+EPRLJNko8R2YO6f4Gm0kJ9iXqivC\/G+R239q6XJYuDgfzk8yB0TZL\/1M\/tHtfhL7uHtHk0kInYWmWdhKeg\/7eYCxcxh0DQqL9AmMujtsj0PamZkuE+71bVJcFJo4Y0RrbJtbQSDb\/\/ukGSTN7tIm3dfF7x\/49aPA0pFNm5iMExpNNi4\/yNp+cw5hoJU9LHJxATXrwDd8Wy+uOwlZjLkAgwclI\/KGJkshlNwDhGQH0VcFybIHjADylgDWtRCCm+gGyKISIanmk2\/eHw\/8z32t0g7laxPQRSNAeBYPATjBoBGhpMZzpQry+L8eu3dqWQl5UAqwXjhdNaGLv0ov0S\/jjTnAkD45yRBwS+IlNCovPSRMltJ2LvWMB9gexRMuZdlOaMDJTIGNK7kASNXtseN5Snr\/VJLRqTDSSngtQufF\/zJtoaMloj18U6uSDGEz6hUblRMs\/kWsGPS4MPRmJ2CcEQNdkCqGqNk0F+7FVWSoj9LO1i4\/yNp+cw5jFASyAcKUr+IFRsMGH7QsXcU\/jzGmG1rHK4xfulQLVNMRGqIHkM2i1EtQ4x9RAuspM\/iVIADAcfchODuswMo97KV7Okz2VN6kG5QkzOm192N0dGhC0buW\/SBuqR3Nk3UBKwK0SOQ85AvBdDHoCer2LH4BYCFvtD+oxfBfP0as\/SYHiMfj05+Pyp4FXNbWM9eaeqitBXDLcOefedcFW6f2pv7wDhCizcsD\/QZEcILe32JdFrD9P+pOrsOhZfdiLZfaZ+d+BEpfRLKEQlS5+LhKuYp5M3bsiQ1G84H3ljlnBUJrzjx7k\/1NEikuVYst41P1sfS4Z5SR538\/ODSd3SE8Vb3UgDpjsZ4AyB5ZYlFDnDdYrs8Vbz2DfJGOb17\/2w6AUj489ftLF\/ccIwR2BX2zZsTlmgxJCVK6PG3NQZb+EPRLJNko8R2YO6f4Gm0kJ9iXqivC\/G+R239q6XJYuDgfxkfyFMRq2sds\/tHtfhL7uHtHk0kInYWmWHwgs7As\/xtYHcW4yqpSBucRnzlog8O+sjD53sbyqFjQce6mtKYyYhcI1G4uxKCzumqp6acpZSZhTu4r4c5m6S9\/hbmbQKp88ALZQgtTYCoGOJ+GkihtAxtkH3ycudf1A0PQKR36ETMoLULnxf8ybaS7N6Cy6lb0rhIWgolwGjEkgjhsP8PEeKdijHXe4lvwYcW\/OKhXl4qN1ZQv45qnfNAxVTUDksqY98v\/3KD1bCgSDVt7fZoJ45\/TMwmsob7an3+KafZNPmIfl\/9iZvDCHaJCr49mmy\/TgV7D2xokKOOiuz5jDYc5dSyFVhavJDIYYDKy2BgeEbcxDeYjHrCXVBkYiJQQk699h0zvUE6OLncpGBLBVF\/GAEupUo8YKRnaan2BI9Uxx2+4CPTVbohrBbsc2SXIDhZe+1TK7PZnJfcd2XyajBJwiq8HGntDEqTFlvOB95Y5ZwVAgfP3tU6skOAZSaZPl6MY8tEDAU\/x4EyGJrWpzftwoEUmsRQHDmza8aoZGlZ0WkQUmgYCUVgXb8a\/zSDxmv4pE0vzSxSnQUDPD2ydcEEYyY9dGRifMt4nJi+VgTwF29gqSkSIHPvB22CgYcP3ClfHGT+ZGq\/zgnrOccrZ1w9zgsC2LN9O9flz24HttHOMnqf8BRoy571NRqogKRbeV9J4OW11dTCIgWJp6Avo6D3qKutyRMebANL0Ppc7+wID0Jenv6ulRSPgrXjFWfo9TGP5rWwK5\/fmL8+buqlaRIkoD3AC2UILU2AqA+sALFtXrTH80UGtXI38Ikm\/8z01Cz3sp+NRVjQyd1Ts1H6hdQSLD7dcaCSPIORN+J3hfrhOVb3nfgCabRrf5AtSrWZVAksKXwX\/aKz5WgnR3Y1pxdOfzx2FyPLNcqC5tw1IusDCEXftIumgGRG38l00fhoOx+PIO8e1fwolLNHgoR74ysQmfOB3lB2uKCiD87i+5tvvDrnWCSaq1J6opI2ogD5pOJdckrRZSXfc9JEZGmssBvOGLMEemO7eIJN0Oead8Hl81ku\/5ZMVJ9RaCMjYW3MnJUCvX7bSC86aIDPp3QSEhj\/Ba3\/WipTzIBJpucQAdZKJ3QTbYopDatAxAn0Ydqsi6fHBfaG71SC0oa6lXUmcB3Y9FvldCounu1uwBq1SsXACrsXT8S3jszoYdh0\/yAcYWa8mLratC7cA+QYRvEsH1GRl5TacFs3k4NPbzIdJF20Q5qmOsz7VY30\/niLib5K\/lDXn2bIHjADylgDWtRCCm+gGyKISIanmk2\/eHw\/8z32t0g7laxPQRSNAeBJcIEWx7CTJKCk6g51hV3Beu3dqWQl5UAsEUNTbNWI8LuhmS+E+SHg8EYatIj\/zUqCH9bHDZw8gFvUpXsIuoTm32AEA9iXO0gWW4E50Yz4lRJ4Tu4G2amQFVAFLmNngf3gtQufF\/zJtpk1RGX2Hzl\/oDDEOueMNtpZ1leOp5yKWfwe9npzBcGv5CKD\/h5EpT1chODuswMo94gezCUggCNMz8OTYKinULBNo9RoFZpZi\/ednvHcmQMXZtUlVaTAoahcKf2YK\/ju8ldFPM8wqaMrPsi8SqysVgPHSEXSyNbk2C9\/VdFfKK0CJx2FHvD5MyBy\/yynionYpMYNZWzQbaIUq+aTAA4BpcsxhimMLheiytULWooBm7tcwOFSMo00VVoTl0wuG74rIxGSJMC9F71NVBDNpeVTErJ6E5rWbmU5OuhfYMBwvU+x7HNklyA4WXvHAlgVU0v4EnvqEth6ZsVzVR8an1LZot9xLgxHDT1nM7cQhARHbvSDmvmvrC0KcWMRYPpI6Iy+GHwbPO0Gzl+MWiuTWapnUb9sqontCKJGd61HChfGhe3adcc04P4MDHE+Pb7O702L83niUpgyubjGDMlzlu0+BfSs8jxryPi6JHgStrJlpbg66dWrxddZBP7UPEkbvy\/njQUvcjlf1yYRx4RT3bnE4nzGEujimbv0j\/tbYVK5kg1ql5DjB2GwplA2QKoao2TQX6Y6D3yg86ZLWmu2QqRlpeUy17n20gEjgt7+rpUUj4K1\/xLmKAJNdz+cuB2\/R\/iIAAQFwuJieoorChQPxR0isOB5Oo5Ed09xlQ\/TFg15wh8fPxLmKAJNdz+XNJY6KZeuo4="}

发现网页数据encrypt_data被加密了,接下来开始尝试解密

2. 尝试定位加密js

全局搜索encrypt_data,可以定位到如下所示:
JS逆向之企名科技_第2张图片
打上断点开始调试,像这种加密的一般都会有一个json.parse的函数
JS逆向之企名科技_第3张图片
二话不说先搞下来放入一个新建的js文件中:

function o(t) {
            return JSON.parse(s("5e5062e82f15fe4ca9d24bc5", a.a.decode(t), 0, 0, "012345677890123", 1))
        }

a.a.decode直接改成decode:

function o(t) {
            return JSON.parse(s("5e5062e82f15fe4ca9d24bc5", decode(t), 0, 0, "012345677890123", 1))
        }

再接着分析,parse函数里只有两个参数需要我们补充,即一个s和一个decode函数,接下来定位到s函数,拿下来:

 function s(t, e, i, n, a, s) {
            var o, r, c, l, u, d, h, p, f, v, m, g, b, y, _ = new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756), C = new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344), w = new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584), x = new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928), k = new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080), T = new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312), A = new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154), L = new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696), S = function(t) {
                for (var e, i, n, a = new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964), s = new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697), o = new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272), r = new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144), c = new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256), l = new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488), u = new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746), d = new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568), h = new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578), p = new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488), f = new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800), v = new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744), m = new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128), g = new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261), b = t.length > 8 ? 3 : 1, y = new Array(32 * b), _ = new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0), C = 0, w = 0, x = 0; x < b; x++) {
                    var k = t.charCodeAt(C++) << 24 | t.charCodeAt(C++) << 16 | t.charCodeAt(C++) << 8 | t.charCodeAt(C++)
                      , T = t.charCodeAt(C++) << 24 | t.charCodeAt(C++) << 16 | t.charCodeAt(C++) << 8 | t.charCodeAt(C++);
                    k ^= (n = 252645135 & (k >>> 4 ^ T)) << 4,
                    k ^= n = 65535 & ((T ^= n) >>> -16 ^ k),
                    k ^= (n = 858993459 & (k >>> 2 ^ (T ^= n << -16))) << 2,
                    k ^= n = 65535 & ((T ^= n) >>> -16 ^ k),
                    k ^= (n = 1431655765 & (k >>> 1 ^ (T ^= n << -16))) << 1,
                    k ^= n = 16711935 & ((T ^= n) >>> 8 ^ k),
                    n = (k ^= (n = 1431655765 & (k >>> 1 ^ (T ^= n << 8))) << 1) << 8 | (T ^= n) >>> 20 & 240,
                    k = T << 24 | T << 8 & 16711680 | T >>> 8 & 65280 | T >>> 24 & 240,
                    T = n;
                    for (var A = 0; A < _.length; A++)
                        _[A] ? (k = k << 2 | k >>> 26,
                        T = T << 2 | T >>> 26) : (k = k << 1 | k >>> 27,
                        T = T << 1 | T >>> 27),
                        T &= -15,
                        e = a[(k &= -15) >>> 28] | s[k >>> 24 & 15] | o[k >>> 20 & 15] | r[k >>> 16 & 15] | c[k >>> 12 & 15] | l[k >>> 8 & 15] | u[k >>> 4 & 15],
                        i = d[T >>> 28] | h[T >>> 24 & 15] | p[T >>> 20 & 15] | f[T >>> 16 & 15] | v[T >>> 12 & 15] | m[T >>> 8 & 15] | g[T >>> 4 & 15],
                        n = 65535 & (i >>> 16 ^ e),
                        y[w++] = e ^ n,
                        y[w++] = i ^ n << 16
                }
                return y
            }(t), F = 0, z = e.length, B = 0, I = 32 == S.length ? 3 : 9;
            p = 3 == I ? i ? new Array(0,32,2) : new Array(30,-2,-2) : i ? new Array(0,32,2,62,30,-2,64,96,2) : new Array(94,62,-2,32,64,2,30,-2,-2),
            2 == s ? e += "        " : 1 == s ? i && (c = 8 - z % 8,
            e += String.fromCharCode(c, c, c, c, c, c, c, c),
            8 === c && (z += 8)) : s || (e += "\0\0\0\0\0\0\0\0");
            var j = ""
              , O = "";
            for (1 == n && (f = a.charCodeAt(F++) << 24 | a.charCodeAt(F++) << 16 | a.charCodeAt(F++) << 8 | a.charCodeAt(F++),
            m = a.charCodeAt(F++) << 24 | a.charCodeAt(F++) << 16 | a.charCodeAt(F++) << 8 | a.charCodeAt(F++),
            F = 0); F < z; ) {
                for (d = e.charCodeAt(F++) << 24 | e.charCodeAt(F++) << 16 | e.charCodeAt(F++) << 8 | e.charCodeAt(F++),
                h = e.charCodeAt(F++) << 24 | e.charCodeAt(F++) << 16 | e.charCodeAt(F++) << 8 | e.charCodeAt(F++),
                1 == n && (i ? (d ^= f,
                h ^= m) : (v = f,
                g = m,
                f = d,
                m = h)),
                d ^= (c = 252645135 & (d >>> 4 ^ h)) << 4,
                d ^= (c = 65535 & (d >>> 16 ^ (h ^= c))) << 16,
                d ^= c = 858993459 & ((h ^= c) >>> 2 ^ d),
                d ^= c = 16711935 & ((h ^= c << 2) >>> 8 ^ d),
                d = (d ^= (c = 1431655765 & (d >>> 1 ^ (h ^= c << 8))) << 1) << 1 | d >>> 31,
                h = (h ^= c) << 1 | h >>> 31,
                r = 0; r < I; r += 3) {
                    for (b = p[r + 1],
                    y = p[r + 2],
                    o = p[r]; o != b; o += y)
                        l = h ^ S[o],
                        u = (h >>> 4 | h << 28) ^ S[o + 1],
                        c = d,
                        d = h,
                        h = c ^ (C[l >>> 24 & 63] | x[l >>> 16 & 63] | T[l >>> 8 & 63] | L[63 & l] | _[u >>> 24 & 63] | w[u >>> 16 & 63] | k[u >>> 8 & 63] | A[63 & u]);
                    c = d,
                    d = h,
                    h = c
                }
                h = h >>> 1 | h << 31,
                h ^= c = 1431655765 & ((d = d >>> 1 | d << 31) >>> 1 ^ h),
                h ^= (c = 16711935 & (h >>> 8 ^ (d ^= c << 1))) << 8,
                h ^= (c = 858993459 & (h >>> 2 ^ (d ^= c))) << 2,
                h ^= c = 65535 & ((d ^= c) >>> 16 ^ h),
                h ^= c = 252645135 & ((d ^= c << 16) >>> 4 ^ h),
                d ^= c << 4,
                1 == n && (i ? (f = d,
                m = h) : (d ^= v,
                h ^= g)),
                O += String.fromCharCode(d >>> 24, d >>> 16 & 255, d >>> 8 & 255, 255 & d, h >>> 24, h >>> 16 & 255, h >>> 8 & 255, 255 & h),
                512 == (B += 8) && (j += O,
                O = "",
                B = 0)
            }
            if (j = (j += O).replace(/\0*$/g, ""),
            !i) {
                if (1 === s) {
                    var $ = 0;
                    (z = j.length) && ($ = j.charCodeAt(z - 1)),
                    $ <= 8 && (j = j.substring(0, z - $))
                }
                j = decodeURIComponent(escape(j))
            }
            return j
        }

再定位到decode函数,拿下来;

 decode: function(t) {
                        var e = (t = String(t).replace(f, "")).length;
                        e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
                        (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
                        for (var n, r, i = 0, o = "", a = -1; ++a < e; )
                            r = c.indexOf(t.charAt(a)),
                            n = i % 4 ? 64 * n + r : r,
                            i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
                        return o
                    },

这种函数命名看着不得劲,改一下:

function decode(t) {
                var e = (t = String(t).replace(f, "")).length;
                e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
                (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
                for (var n, r, i = 0, o = "", a = -1; ++a < e; )
                    r = c.indexOf(t.charAt(a)),
                    n = i % 4 ? 64 * n + r : r,
                    i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
                return o
            }

3. 编写python程序尝试获取数据

好了,目前为止我们已经把我们需要的加密函数搞到了,接下来就开始编写python代码调试,到时候缺啥咱就补啥,python程序:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : 冰履踏青云
# @File    : 03.py
# @Software: PyCharm
import requests
import execjs
import json

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://www.qimingpian.com',
    'Referer': 'https://www.qimingpian.com/finosda/project/pinvestment',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
}

data = {
    'time_interval': '',
    'tag': '',
    'tag_type': '',
    'province': '',
    'lunci': '',
    'page': 1,
    'num': 20,
    'unionid': '',
}
def get_encry_data():
    url = 'https://vipapi.qimingpian.com/DataList/productListVip'
    res = requests.post(url,data=data,headers=headers)
    # print(res.json())
    return res.json()['encrypt_data']


if __name__ == '__main__':
    encrypt_data = get_encry_data()
    with open('1.js',encoding='utf-8') as f:
        s = f.read()
    result = execjs.compile(s).call('o',encrypt_data)
    print(result)
    


初次运行,报错:
JS逆向之企名科技_第4张图片
说咱们的f没有被定义,咱们去找一下f,f就在decode函数里,鼠标放上去发现f就是一串固定正则:/[\t\n\f\r ]/g,我们把它定义好放到decode函数里,即 var f = /[\t\n\f\r ]/g

JS逆向之企名科技_第5张图片
再次运行python程序:
JS逆向之企名科技_第6张图片
发现c没有被定义,依然是在decode函数里:
JS逆向之企名科技_第7张图片
分界线-------------------------------------------------------------------------

博客写到上面中断了一次(偷偷用公司电脑写的,也不算偷偷,那天办的离职手续,有一样东西需要一个老总签字,那老总几个小时还没来,于是咱就光明正大写博客了。。。)
JS逆向之企名科技_第8张图片
同样把c定义好加到dencode函数里(我这是是调试完测试确定c是定值之后才直接复制的,做逆向真正实操尽量严谨地去调试一遍,免得踩坑)。
至此js重要的加密算法算补完了,再次执行python代码又出现报错:
JS逆向之企名科技_第9张图片

JS逆向之企名科技_第10张图片
这个跟我们的python代码没啥关系,应该就是js最后编码出了问题,看一下最后的o函数:

 function o(t) {
            return JSON.parse(s("5e5062e82f15fe4ca9d24bc5",decode(t), 0, 0, "012345677890123", 1))
        }

JSON.parse在js里的作用就是将字符串转成json格式,如果对js不熟悉咱们可以用python的方式解决,
把JSON.parse去掉,直接让它返回字符串,下一步我们用python将它转成json数据。改后的o函数:

function o(t) {
            return s("5e5062e82f15fe4ca9d24bc5",decode(t), 0, 0, "012345677890123", 1)
        }

python里用json.loads转一下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : 冰履踏青云
# @File    : 03.py
# @Software: PyCharm
import json

import requests
import execjs

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://www.qimingpian.com',
    'Referer': 'https://www.qimingpian.com/finosda/project/pinvestment',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
}

data = {
    'time_interval': '',
    'tag': '',
    'tag_type': '',
    'province': '',
    'lunci': '',
    'page': 1,
    'num': 20,
    'unionid': '',
}
def get_encry_data():
    url = 'https://vipapi.qimingpian.com/DataList/productListVip'
    res = requests.post(url,data=data,headers=headers)
    # print(res.json())
    return res.json()['encrypt_data']


if __name__ == '__main__':
    encrypt_data = get_encry_data()
    with open('1.js',encoding='utf-8') as f:
        s = f.read()
    result = execjs.compile(s).call('o',encrypt_data)
    # print(result)
    js_data = json.loads(result)
    print(js_data)



接着运行python程序,结果:
JS逆向之企名科技_第11张图片
可以看到数据已经显示正常,至此js解密完成。

这一路走来 孤独而坚定,自信而坦荡,少年,加油啊!

你可能感兴趣的:(爬虫,js逆向,爬虫)