diff --git a/lib/115share.txt b/lib/115share.txt
new file mode 100644
index 0000000..088c6ef
--- /dev/null
+++ b/lib/115share.txt
@@ -0,0 +1,647 @@
+self 我的115网盘 1
+swz93883nhj?password=sa53 豆瓣|TOP250电影_1.67TB 1
+swz8h1h33xj?password=0000 豆瓣|TOP250电影_12.65Tb 1
+sw60fyp33eb?password=lcd6 排行|豆瓣2022影视排行榜_1.51T
+sw6tco83hbe?password=v517 排行|2021豆瓣年度影视榜单_832.64G
+sw6tcot3hbe?password=e9d7 排行|2022必看最热门影视剧十部_620.84G
+sw6e6ij3flt?password=t055 REMUX|4K_REMUX_774部_41.16T 1
+swz6gd93fwo?password=8888 REMUX|4K_REMUX电影2257部 1
+swzzmu33hi8?password=i5e0 REMUX|无损REMUX电影_101.32TB 1
+swz9yva3hi8?password=m332 REMUX|2267部2160p_remux_FGT_101.32TB
+swzn5913wzq?password=nbc5 REMUX|969部部欧美4K原盘电影_45.03T
+swz1t3b3hdc?password=p5c9 原盘|电影原盘已刮削(194T)
+sw62svu3nbg?password=z718 原盘|sGNB特效字幕原盘_19T
+sw620dv3wzn?password=e536 原盘|sGNB特效字幕原盘_313部_21.18T
+sw6u87633jp?password=u527 原盘|sGNB特效字幕原盘_315部_21.52T
+sw6e6i13flt?password=f794 原盘|4K原盘_16.94T
+sw3uax136w4?password=eea6 原盘|CMCT迷你蓝光原盘_2.81T
+sw69nao3h3b?password=a548 原盘|港片蓝光原盘669部_16.3T
+swnmisp3wxf?password=i1c6 原盘|剧集原盘_23.3T
+swznmd03nc7?password=p897 原盘|动漫原盘_40.49T
+swz6gp53fwo?password=8888 原盘|蓝光原盘_646T_合集
+sw313rp3zx1?password=w146 原盘|SGNB特效字幕蓝光原盘563部_26.52TB
+sw68b0u3hhq?password=gd41 原盘|蓝光原盘_666.3Pb
+swzg3ja33xj?password=f3h5 原盘|FRDS站396部_8.87TB
+swz18wn3zh9?password=yf61 原盘|演唱会原盘_820T
+sw6udf93wcx?password=na63 原盘|演唱会_蓝光原盘22TB
+sw6ug2k3nom?password=t7d0 原盘|香港电影_香港蓝光高清粤语电影合集1242部_(16T)
+sw62cfo3z23?password=ze90 原盘|3D电影_68.26T
+swz3ys93wzv?password=rc12 电影|电影频道3300部_16.33T
+swnrb3b3nat?password=pd76 电影|亚洲1080P_9.33T 1
+swz8hp033xj?password=0000 电影|多部曲电影系列_21TB 1
+swzj12t3znw?password=tff8 电影|未分类电影_4.65TB 1
+sw6uh9x3z2b?password=6666 电影|未分类电影_1620TB 1
+swzgep23wye?password=c106 电影|大陆电影_6TB 1
+swzg8dd3wye?password=m5b3 电影|日韩电影_6TB 1
+swzplko3wye?password=k596 欧美电影|合集_22TB
+swzj2cx3h4y?password=g180 欧美电影|漫威宇宙系列_1.87TB
+swz936a3znw?password=a0d3 欧美电影|指环王系列_300GB
+swz93n63z57?password=dda3 欧美电影|变形金刚_500GB
+sw629ie3nli?password=d5c7 NetFlix_6.17T
+sw6tco93hbe?password=ka54 剧集|TVB电视剧合集650部_74.3T
+swznm373w1p?password=pe35 剧集|欧美剧_60.9T 1
+swnsdrk3h2m?password=p783 剧集|海贼王_553.61G
+swntmxc3wp6?password=a3f5 剧集|皇家师姐系列
+swnsdrm3h2m?password=fea2 剧集|火影忍者全集_455.42G
+swzn9y13zwh?password=crow 剧集|老友记全十季_594.26G
+sw6q9w833o2?password=a956 剧集|柯南_766.64G
+sw6p2t63h2m?password=oea1 剧集|迷失1-6季_203.3G
+swz826g3nc0?password=ff47 剧集|甜蜜家园_Season_3
+swztlnh33xj?password=f3h5 剧集|行尸走肉全季杜比
+swz6fb3369v?password=9999 香港|GOTV_10.46TB
+swzsehq3ncb?password=5566 香港|合集8.23TB
+swz9lr83w8f?password=oc53 香港|杜琪峰(银河映像系列)
+swzdtjc3nb4?password=ef97 香港|成龙
+sw30v4b3zu2?password=a429 香港|林正英电影合集46部_209.13G
+swz8cd233xj?password=0000 香港|满清十大酷刑第一部
+sw6gqo43flt?password=qc62 香港|周星驰系列_854.96G
+swzdtj93nb4?password=d6c3 香港|周星驰
+swzv6533697?password=2618 日韩剧|合集18.12TB
+swzah0d3wvk?password=c142 国产剧|合集_51.41TB
+swz8t9x3h5k?password=n3f4 国产剧|【繁花_翡翠台源_100GB】
+swz93y53zp0?password=ef25 国产剧|【唐朝诡事录_全2季】
+sw6u7zc3fwo?password=8888 国产剧|【陈情令】_(2019)_50集全_4K中字【86G】
+sw6u7ep3fwo?password=8888 国产剧|【隐秘的角落】(2020)_12集全_4K中字【69G】
+sw6u78w3fwo?password=8888 国产剧|【庆余年】(2019)_46集全_4K中字【62G】
+sw6u79l3fwo?password=8888 国产剧|【沉默的真相】(2020)_12集全_4K中字【17G】
+sw6u79p3fwo?password=8888 国产剧|【斗罗大陆】(2021)_40集全_1080P中字【46G】
+sw6u72q3fwo?password=8888 国产剧|【开端】(2022)_15集全_4K中字【58G】
+sw6u72m3fwo?password=8888 国产剧|【狂飙】(2023)_39集全_4K中字【77G】
+sw6u7u33fwo?password=8888 国产剧|【漫长的季节】(2023)_12集全_4K中字【36G】
+sw6ukxa3fwo?password=8888 国产剧|【梦华录】(2022)_40集全_4K中字【148G】
+sw6uil53fwo?password=8888 国产剧|【琅琊榜】(2015)_54集全_4K中字【80G】
+sw6u42s3fwo?password=8888 国产剧|【苍兰诀】(2022)_36集全_4K中字【42G】
+sw6u42b3fwo?password=8888 国产剧|【后宫·甄嬛传】(2011)_76集全_4K中字【490G】
+sw6ugfa3fwo?password=8888 国产剧|【山河令】36集全_4K中字【87G】
+sw6ugfj3fwo?password=8888 国产剧|【沉香如屑·沉香重华】_(2022)_59集全_4K中字【125G】
+sw6ugl73fwo?password=8888 国产剧|【星汉灿烂·月升沧海】56集全_4K画质【71G】
+sw6ugoj3fwo?password=8888 国产剧|【武林外传】(2006)_81集全_4K中字【104GB】
+sw6ugkc3fwo?password=8888 国产剧|【白夜追凶】(2017)_32集全_4K中字【257G】
+sw6utz93fwo?password=8888 国产剧|【知否知否应是绿肥红瘦】(2018)_73集全_4K中字【119G】
+sw6utfi3fwo?password=8888 国产剧|【莲花楼】(2023)_40集全_4K中字【52G】
+sw6utft3fwo?password=8888 国产剧|【香蜜沉沉烬如霜】(2018)_60集全_4K中字【119G】
+sw6utts3fwo?password=8888 国产剧|【觉醒年代】(2021)_43集全_4K中字【86G】
+sw6ut8p3fwo?password=8888 国产剧|【长安十二时辰】(2019)_48集全_4K中字【46G】
+sw6ut8j3fwo?password=8888 国产剧|【你是我的荣耀】(2021)_32集全_4K中字【41G】
+sw6ujon3fwo?password=8888 国产剧|【亲爱的,热爱的】(2019)_41集全_4K中字【59G】
+sw6u0rm3fwo?password=8888 国产剧|【人民的名义】(2017)_55集全_4K中字【118G】
+sw6u0px3fwo?password=8888 国产剧|【三体】(2023)_4K中字【21G】
+sw6u0tb3fwo?password=8888 国产剧|【我的人间烟火】(2023)_40集全_1080P中字【45G】
+sw6u01o3fwo?password=8888 国产剧|【山海情】(2021)_4K中字【33G】
+sw6u01x3fwo?password=8888 国产剧|【你微笑时很美】(2021)_31集全_4K中字【54G】
+sw6uupp3fwo?password=8888 国产剧|【延禧攻略】(2018)_70集全_4K中字【123G】
+sw6uujx3fwo?password=8888 国产剧|【有翡】_(2020)_51集全_1080P中字【72G】
+sw6uu063fwo?password=8888 国产剧|【最好的我们】(2016)_24集全_4K中字【24G】
+swz36yf3fwo?password=8888 国产剧|【风吹半夏】(2022)_36集全_4K中字【77G】
+swz36ye3fwo?password=8888 国产剧|【余生,请多指教】(2022)_29集全_1080P种子【15G】
+swz36yt3fwo?password=8888 国产剧|【传闻中的陈芊芊】(2020)_24集全_4K中字【29G】
+swz36ka3fwo?password=8888 国产剧|【扫黑风暴】(2021)_28集全_1080P中字【31G】
+swz36dx3fwo?password=8888 国产剧|【狼殿下】(2020)_49集全_4K中字【88G】
+swz36m63fwo?password=8888 国产剧|【仙剑奇侠传三】(2009)_37集全_4K中字【137G】
+swz36me3fwo?password=8888 国产剧|【长相思】(2023)_39集全_4K中字【38G】
+swz36m03fwo?password=8888 国产剧|【锦衣之下】(2019)_55集全_4K中字【80G】
+swz365l3fwo?password=8888 国产剧|【琉璃】(2020)_59集全_4K中字【194G】
+swz36543fwo?password=8888 国产剧|【长月烬明】(2023)_40集全_4K中字【95G】
+swz365x3fwo?password=8888 国产剧|【都挺好】(2019)_46集全_4K中字【84G】
+swz36v63fwo?password=8888 国产剧|【龙岭迷窟】(2020)_18集全_4K中字【21G】
+swz3hop3fwo?password=8888 国产剧|【父母爱情】(2014)_44集全_4K中字【61G】
+swz3hks3fwo?password=8888 国产剧|【御赐小仵作】(2021)_20集36集双版本_1080P【101G】
+swz3hk73fwo?password=8888 国产剧|【仙剑奇侠传】34集全_1080P中字【24G】
+swz3hkj3fwo?password=8888 国产剧|【三生三世枕上书】(2020)_56集全_4K中字【82G】
+swz3h5j3fwo?password=8888 国产剧|【三生三世十里桃花】(2017)_58集全_4K中字【146G】
+swz3sf73fwo?password=8888 国产剧|【伪装者】(2015)_41集全_4K中字【43G】
+swz3sf43fwo?password=8888 国产剧|【4K修复】【西游记+续集】【218G】
+swz3sfv3fwo?password=8888 国产剧|【猎罪图鉴】(2022)全20集_4K中字
+swz3slh3fwo?password=8888 国产剧|【长歌行】(2021)_49集全_1080P中字【66G】
+swz3s4x3fwo?password=8888 国产剧|【爱情公寓】1-5季_全集+番外篇+大电影_4K中字【203G】
+swz3s403fwo?password=8888 国产剧|【小欢喜】(2019)_49集全_4K中字【75G】
+swz3skd3fwo?password=8888 国产剧|【重启之极海听雷】第一季_(2020)_4K中字【172G】
+swz3skm3fwo?password=8888 国产剧|【重启之极海听雷】第二季_(2020)_4K中字【42G】
+swz3sdn3fwo?password=8888 国产剧|【摩天大楼】(2020)_16集全_4K中字【62G】
+swz3sde3fwo?password=8888 国产剧|【无证之罪】(2017)_12集全_4K中字【17G】
+swz3smy3fwo?password=8888 国产剧|【如懿传】(2018)_87集全_1080P中字【194G】
+swz3sai3fwo?password=8888 国产剧|【步步惊心】(2011)_35集全_4K中字【101G】
+swz3sag3fwo?password=8888 国产剧|【我是余欢水】(2020)_12集全_4K中字【77G】
+swz3spn3fwo?password=8888 国产剧|【去有风的地方】(2023)_40集全_4K中字【101G】
+swz3lbp3fwo?password=8888 国产剧|【梦中的那片海】(2023)_38集全_4K中字【24G】
+swz3lob3fwo?password=8888 国产剧|【欢乐颂】1-4季_1080P中字【156G】
+swz3lok3fwo?password=8888 国产剧|【棋魂】(2020)_36集全_4K中字【210G】
+swz3qos3fwo?password=8888 国产剧|【叛逆者】(2021)_43集全_4K中字【49G】
+swz3qas3fwo?password=8888 国产剧|【以家人之名】(2020)_40集全_1080P中字【47G】
+swz3bge3fwo?password=8888 国产剧|【唐人街探案】(2020)_12集全_4K中字【18G】
+swz6syq3fwo?password=8888 国产剧|【警察荣誉】38集全_4K中字【57G】
+swz6sk93fwo?password=8888 国产剧|【三十而已】(2020)_43集全_1080P中字【41G】
+swz6sdq3fwo?password=8888 国产剧|【玉骨遥】40集全_4K中字【60G】
+swz6sd73fwo?password=8888 国产剧|【爱很美味】(2021)_20集全_4K中字【8.6G】
+swz6smb3fwo?password=8888 国产剧|【司藤】30集全_4K中字【74G】
+swz6smv3fwo?password=8888 国产剧|【赘婿】36集全_4K中字【54G】
+swz6s5n3fwo?password=8888 国产剧|【终极笔记】(2020)_36集全_4K中字【178G】
+swz6s5l3fwo?password=8888 国产剧|【人世间】(2022)_58集全_4K中字【63G】
+swz6s5e3fwo?password=8888 国产剧|【周生如故】(2021)_24集全_1080P中字【15G】
+swz6s2r3fwo?password=8888 国产剧|【战长沙】(2014)_32集全_1080P中字【111G】
+swz6lz23fwo?password=8888 国产剧|【你好,旧时光】(2017)_30集全_4K中字【80G】
+swz6lhb3fwo?password=8888 国产剧|【风起洛阳】(2021)_39集全_4K中字【43G】
+swz6lfp3fwo?password=8888 国产剧|【潜伏】(2008)_30集全_4K中字【41G】
+swz6ls73fwo?password=8888 国产剧|【东宫】(2019)_52集全_4K中字【119G】
+swz6lsc3fwo?password=8888 国产剧|【幸福到万家】(2022)_40集全_4K中字【64G】
+swz6lql3fwo?password=8888 国产剧|【红楼梦】(1987)_36集全_4K中字【42G】
+swz6lqe3fwo?password=8888 国产剧|【还珠格格】1-3季全_1080P中字【141G】
+swz6l753fwo?password=8888 国产剧|【鬼吹灯之精绝古城】(2016)_21集全_1080P中字【16G】
+swz6liq3fwo?password=8888 国产剧|【亮剑】(2005)_30集全_4K中字【35G】
+swz6lic3fwo?password=8888 国产剧|【大宋少年志】1-2季全_4K中字【139G】
+swz6l453fwo?password=8888 国产剧|【唐朝诡事录】(2022)_36集全_4K中字【51G】
+swz6l483fwo?password=8888 国产剧|【卿卿日常】(2022)_40集全_4K中字【79G】
+swz6lkf3fwo?password=8888 国产剧|【微微一笑很倾城】(2016)_30集全_1080P中字【22G】
+swz6lmu3fwo?password=8888 国产剧|【爱情公寓】1-5季+番外1-3季_4K中字【200G】
+swz6l5a3fwo?password=8888 国产剧|【宸汐缘】(2019)_60集全_4K中字【96G】
+swz6lve3fwo?password=8888 国产剧|【大明王朝1566】(2007)_46集全_1080P中字【30G】
+swz6lew3fwo?password=8888 国产剧|【河神】1-2季全_4K中字【51G】
+swz6lar3fwo?password=8888 国产剧|【大江大河】(2018)_47集全_4K中字【52G】
+swz6lpo3fwo?password=8888 国产剧|【女心理师】(2021)_40集全_4K中字【68G】
+swz6lus3fwo?password=8888 国产剧|【大明王朝1566】(2007)_46集全_4K中字【250G】
+swz6b2y3fwo?password=8888 国产剧|【我在他乡挺好的】(2021)_12集全_1080P中字【30G】
+swz6o6q3fwo?password=8888 国产剧|【余罪】1-2季全_1080P中字【19.5G】
+swz6ooq3fwo?password=8888 国产剧|【士兵突击】(2006)_30集全_4K中字【45G】
+swz6oyp3fwo?password=8888 国产剧|【天盛长歌】(2018)_70集全_4K中字【132G】
+swz6k9q3fwo?password=8888 国产剧|【与君初相识·恰似故人归】(2022)_42集全_4K中字【101G】
+swz6doo3fwo?password=8888 国产剧|【谁是凶手】(2021)_16集全_4K中字【18G】
+swz3qvq3fwo?password=8888 美剧|_冰与火之歌:权力的游戏【1-8季全1.31TB】
+sw6uoem3fwo?password=8888 美剧|【冰与火之歌:权力的游戏】1-8季全_4K中字杜比视界【1.85T】
+sw6u7iy3fwo?password=8888 美剧|【神探夏洛克】1-4季全_1080P中字【78G】
+sw6uotq3fwo?password=8888 美剧|【绝命毒师】1-5季全_4K中字【209G】
+sw6u7n93fwo?password=8888 美剧|【怪奇物语】1-4季_4K中字【255G】
+sw6u7y83fwo?password=8888 美剧|【老友记】1-10季全_1080P中字【209G】
+sw6u75u3fwo?password=8888 美剧|【生活大爆炸】1-12季全_1080P中字【258G】
+sw6u7es3fwo?password=8888 美剧|【行尸走肉】1-11季全_1080P中字【585G】
+swztlnh33xj?password=f3h5 美剧|【行尸走肉】1-11季全_REMUX【1.27TB】
+sw6u7tp3fwo?password=8888 美剧|【切尔诺贝利】5集全_1080P中字【13G】
+sw6u78c3fwo?password=8888 美剧|【黑镜】1-6季全_4K中字【144G】
+sw6u79h3fwo?password=8888 美剧|【后翼弃兵】(2020)_7集全_4K中字【57G】
+sw6uify3fwo?password=8888 美剧|【越狱】1-5季全+特别篇_1080P中字【182G】
+sw6u4vy3fwo?password=8888 美剧|【真探】1-3季全_1080P中字【29G】
+sw6u4j73fwo?password=8888 美剧|【嗜血法医】1-9季全_1080P中字【246G】
+sw6u4963fwo?password=8888 美剧|【黑袍纠察队】1-3季_4K中字【182G】
+sw6u41k3fwo?password=8888 美剧|【风骚律师】1-6季全_4K中字【275G】
+sw6u4c93fwo?password=8888 美剧|【纸牌屋】1-6季全_4K中字【284G】
+sw6u42n3fwo?password=8888 美剧|【浴血黑帮】1-6季全_4K中字【162G】
+sw6u42v3fwo?password=8888 美剧|【曼达洛人】1-3集全_4K中字【136G】
+swzjpfq3wrb?password=s8f0 美剧|【迷失】1-6季全_1080P中字【108G】
+sw6uakw3fwo?password=8888 美剧|【猎魔人】1-3季_4K中字【139G】
+sw6uakm3fwo?password=8888 美剧|【性爱自修室】1-4季_4K中字【193G】
+sw6uadf3fwo?password=8888 美剧|【最后生还者】第一季_4K中字【67G】
+sw6uadk3fwo?password=8888 美剧|_【致命女人】1-2季_1080P中字【29G】
+sw6uaji3fwo?password=8888 美剧|【西部世界】1-4季_4K中字【445G】
+sw6ua2t3fwo?password=8888 美剧|【办公室】1-9季全_1080P中字【200G】
+sw6ug3k3fwo?password=8888 美剧|【老爸老妈的浪漫史】1-9季全_1080P中字【273G】
+swzj8g33wrb?password=z6d8 美剧|【兄弟连】10集全_1080P中字【177.6G】
+swzj8au3wrb?password=i050 美剧|【太平洋战争】10集全_1080P中字【122G】
+sw6ugsb3fwo?password=8888 美剧|【维京传奇】1-6季全_1080P中字【137G】
+sw6ugln3fwo?password=8888 美剧|【旺达幻视】9集全_4K中字【46G】
+sw6ug5r3fwo?password=8888 美剧|【摩登家庭】1-11季_1080P中字【298G】
+sw6up8u3fwo?password=8888 美剧|【纸钞屋】1-5季全_1080P中字【46G】
+sw6upun3fwo?password=8888 美剧|【毒枭】1-3季全_4K中字【180G】
+sw6utzo3fwo?password=8888 美剧|【去他的世界】1-2季_4K中字【35G】
+sw6uty43fwo?password=8888 美剧|【暗黑】1-3季全_4K中字【69G】
+sw6uttz3fwo?password=8888 美剧|【夜魔侠】1-3季全_4K中字【204G】
+sw6ujls3fwo?password=8888 美剧|【洛基】第一季_4K中字【22G】
+sw6ujoa3fwo?password=8888 美剧|【星期三】第一季_4K中字【33G】
+sw6uxg53fwo?password=8888 美剧|【豪斯医生】1-8季全_1080P中字【222G】
+sw6u0df3fwo?password=8888 美剧|【迷离时空(原版)】1-5季全_1080P中字【308G】
+sw6u0m73fwo?password=8888 美剧|【邪恶力量】1-15季全_1080P中字【1006G】
+sw6u0mu3fwo?password=8888 美剧|【冰血暴】1-4季全_1080P中字【65G】
+sw6u0v73fwo?password=8888 美剧|【龙之家族】第一季_4K中字【25G】
+sw6u0gx3fwo?password=8888 美剧|【美国恐怖故事】1-11季_1080P中字【306G】
+sw6u0tv3fwo?password=8888 美剧|【黑客军团】1-4季全_1080P中字【32G】
+sw6u0xb3fwo?password=8888 美剧|【国土安全】1-8季全_1080P中字【132G】
+sw6uup63fwo?password=8888 美剧|【唐顿庄园】1-6季全_1080P中字【82G】
+sw6uup03fwo?password=8888 美剧|【指环王:力量之戒】第一季[全8集]4K中字【74G】
+sw6uu1g3fwo?password=8888 美剧|【心灵猎人】1-2季_4K中字【119G】
+sw6uuc23fwo?password=8888 美剧|【伦敦生活】1-2季全_4K中字【28G】
+swz36ki3fwo?password=8888 美剧|【破产姐妹】1-6季全_1080P中字【87G】
+swz36mo3fwo?password=8888 美剧|【月光骑士】6集全_4K中字【32G】
+swz36vd3fwo?password=8888 美剧|【路西法】1-6季全_1080P中字【112G】
+swz36e73fwo?password=8888 美剧|【使女的故事】1-5季全_1080P中字【62G】
+swz36ah3fwo?password=8888 美剧|【黑钱胜地】1-4季_4K中字【200G】
+swz3h4i3fwo?password=8888 美剧|【十三个原因】1-4季全_4K中字【523G】
+swz3hyk3fwo?password=8888 美剧|【大小谎言】1-2季全_1080P中字【21G】
+swz3hmf3fwo?password=8888 美剧|【汉尼拔】1-3季全_1080P中字【59G】
+swz3h543fwo?password=8888 美剧|【宋飞正传】1-9季全_4K中字【488G】
+swz3hed3fwo?password=8888 美剧|【亢奋】1-2季_4K中字【205G】
+swz3hak3fwo?password=8888 美剧|【无耻之徒】1-11季全_1080P中字【201G】
+swz3hg43fwo?password=8888 美剧|【东城梦魇】(2021)_7集全_1080P中字【11G】
+swz3swd3fwo?password=8888 美剧|【鬼庄园】(2020)_9集全_4K中字【23G】
+swz3sw73fwo?password=8888 美剧|【鬼入侵】(2018)_10集全_4K中字【20G】
+swz3sfn3fwo?password=8888 美剧|【足球教练】1-3季_1080P中字【34G】
+swz3sbi3fwo?password=8888 美剧|【你】1-4季_1080P中字【118G】
+swz3s4m3fwo?password=8888 美剧|【我们这一天】1-6季_1080P中字【101G】
+swz3sv73fwo?password=8888 美剧|【混乱之子】1-7季_1080P中字【172G】
+swz3svt3fwo?password=8888 美剧|【猎鹰与冬兵】(2021)_6集全_4K中字【21G】
+swz3se13fwo?password=8888 美剧|【废柴联盟】1-6季_4K中字【260G】
+swz3lbz3fwo?password=8888 美剧|【绯闻女孩】1-6季_1080P中字【109G】
+swz3lo83fwo?password=8888 美剧|【疑犯追踪】1-5季_1080P中字【145G】
+swz3lia3fwo?password=8888 美剧|【超能英雄】1-4季_1080P中字【115G】
+swz3qb83fwo?password=8888 美剧|【犯罪心理】1-16季全_1080P中字【395G】
+swz3q5s3fwo?password=8888 美剧|【广告狂人】1-7季全_1080P中字【373G】
+swz3qek3fwo?password=8888 美剧|【伞学院】1-3季_4K中字【201G】
+swz3qe03fwo?password=8888 美剧|【人生切割术】第一季_(2022)_4K中字【75G】
+swz3qgz3fwo?password=8888 美剧|【危机边缘】1-5季_1080P中字【90G】
+swz3qgq3fwo?password=8888 美剧|【萤火虫】(2002)_14集全_1080P中字【37G】
+swz3ba63fwo?password=8888 美剧|【斯巴达克斯】1-4季_1080P中字【491G】
+swz3bxo3fwo?password=8888 美剧|【哥谭】1-5季_1080P蓝光原盘中字【720G】
+swz6zsv3fwo?password=8888 美剧|【黑道家族】1-6季全_1080P中字【169G】
+swz6zlm3fwo?password=8888 美剧|【闪电侠】1-9季全_1080P中字【180G】
+swz6wjj3fwo?password=8888 美剧|【实习医生格蕾】1-19季全_1080P中字【1.03T】
+swz6fff3fwo?password=8888 美剧|【女子监狱】1-7季全_1080P中字【188G】
+swz6ff83fwo?password=8888 美剧|【杀死伊芙】1-4季_1080P中字【23G】
+swz6fs73fwo?password=8888 美剧|【神盾局特工】1-7季_1080P中字【124G】
+swz6fld3fwo?password=8888 美剧|【火线】1-5季全_1080P中字【61G】
+swz6s4a3fwo?password=8888 美剧|【继承之战】1-4季_4K外挂中字【368G】
+swz6sy63fwo?password=8888 美剧|【公园与游憩】1-7季全_1080P中字【255G】
+swz6skk3fwo?password=8888 美剧|【真爱如血】1-7季全_1080P中字【142G】
+swz6sd63fwo?password=8888 美剧|【超感猎杀】1-2季_4K中字【126G】
+swz6sdr3fwo?password=8888 美剧|【白莲花度假村】1-2季_1080P中字【48G】
+swz6s553fwo?password=8888 美剧|【千谎百计】1-3季全_1080P中字【125G】
+swz6lny3fwo?password=8888 美剧|【神秘博士】1-13季全_1080P中字【324G】
+swz6lww3fwo?password=8888 美剧|【X档案】1-11季+电影版两部_1080P中字【143G】
+swz6lff3fwo?password=8888 美剧|【鹰眼】(2021)_6集全_4K中字【43G】
+swz6lbk3fwo?password=8888 美剧|【IT狂人】1-4季全_标清中字【20G】
+swz6lb03fwo?password=8888 美剧|【无人生还】(2015)_3集全_1080P中字【14G】
+swz6l7f3fwo?password=8888 美剧|【童话镇】1-7季_720P中字【72G】
+swz6lyi3fwo?password=8888 美剧|【欧比旺】(2022)_6集全_4K中字【36G】
+swz6lmm3fwo?password=8888 美剧|【黄石】1-5季_4K中字【更新中】
+swz6lee3fwo?password=8888 美剧|【双峰】1-3季_1080P中字【106G】
+swz6lgx3fwo?password=8888 美剧|【杰西卡·琼斯】1-3季_1080P中字【139G】
+swz6lpz3fwo?password=8888 美剧|【怒呛人生】(2023)_10集全_4K中字【30G】
+swz6lp23fwo?password=8888 美剧|【绝望主妇】1-8季_720P中字【71G】
+swz6ltu3fwo?password=8888 美剧|【绝望主妇】1-8季_1080P中字【300G】
+swz6l033fwo?password=8888 美剧|【地球百子】1-7季全_1080P中字【206G】
+swz6b1z3fwo?password=8888 美剧|【杰茜驾到】1-7季全_1080P中字【194G】
+swz6b1r3fwo?password=8888 美剧|【正常人】(2020)_12集全_1080P中字【9.23G】
+swz6bcn3fwo?password=8888 美剧|【大西洋帝国】1-5季_1080P中字【122G】
+swz6onx3fwo?password=8888 美剧|【小谢尔顿】1-6季_1080P中字【85G】
+swz6o643fwo?password=8888 美剧|【女浩克】(2022)_9集全_4K中字【40G】
+swz6oo83fwo?password=8888 美剧|【傲慢与偏见】(1995)_6集全_1080P外挂字幕【78G】
+swz6o7w3fwo?password=8888 美剧|【贴身保镖】第一季_1080P中字【7G】
+swz6o453fwo?password=8888 美剧|【反恐24小时】1-9季全_1080P中字【399G】
+swz6oyi3fwo?password=8888 美剧|【良医】1-6季_1080P中字【64G】
+swz6k1k3fwo?password=8888 美剧|【硅谷】1-6季_1080P中字【39G】
+swz6kcq3fwo?password=8888 美剧|【副本】1-2季_4K中字【127G】
+swz6k0s3fwo?password=8888 美剧|【罪夜之奔】(2016)_8集全_1080P中字【5G】
+swz6kuu3fwo?password=8888 美剧|【艾米丽在巴黎】1-3季_1080P中字【105G】
+swz6dl23fwo?password=8888 美剧|【罗马】1-2季_1080P中字【60G】
+swz6d773fwo?password=8888 美剧|【好兆头】1-2季_4K中字【67G】
+swz6ew93fwo?password=8888 美剧|【黑色孤儿】1-5季_1080P中字【95G】
+swz6ebs3fwo?password=8888 美剧|【叶卡捷琳娜大帝】1-3季_1080P中字
+sw6u7mw3fwo?password=8888 韩剧|【阿拉姆恩之剑:阿斯达年代记】(2023)_1080P韩语中字_李准基_/_张东健_/_申世景
+sw62qsa3fwo?password=8888 韩剧|【鱿鱼游戏】第一季(2021)_4K韩语中字_李政宰_/_朴海秀_/_魏嘏隽
+sw62qq83fwo?password=8888 韩剧|【请回答1988】(2015)_20集全_4K韩语中字_成东日_/_李一花_/_罗美兰
+sw62qbl3fwo?password=8888 韩剧|【黑暗荣耀】第一季_(2022)_4K韩语中字_宋慧乔_/_李到晛_/_林智妍
+sw62q7z3fwo?password=8888 韩剧|【黑暗荣耀】第二季_(2023)_1080P韩语中字_宋慧乔_/_李到晛_/_林智妍
+sw62q773fwo?password=8888 韩剧|【孤单又灿烂的神:鬼怪】(2016)_16集全_4K韩语中字_孔刘_/_金高银_/_李栋旭
+sw62q723fwo?password=8888 韩剧|【来自星星的你】(2013)_21集全_1080P韩语中字_金秀贤_/_全智贤_/_朴海镇
+sw62qiy3fwo?password=8888 韩剧|【信号】(2016)_16集全_1080P韩语中字_李帝勋_/_赵震雄_/_金惠秀
+sw62qie3fwo?password=8888 韩剧|【太阳的后裔】(2016)_16集全_1080P韩语中字_宋慧乔_/_宋仲基_/_金智媛
+sw62qi23fwo?password=8888 韩剧|【爱的迫降】(2019)_16集全_4K韩语中字_玄彬_/_孙艺珍_/_徐智慧
+sw62q4j3fwo?password=8888 韩剧|【机智医生生活】第一季_(2020)_1080P韩语中字_曹政奭_/_柳演锡_/_郑敬淏
+sw62q4c3fwo?password=8888 韩剧|【机智医生生活】第二季_(2021)_1080P韩语中字_曹政奭_/_柳演锡_/_郑敬淏
+sw62qyq3fwo?password=8888 韩剧|【W-两个世界】(2016)_16集全_1080P韩语中字_李钟硕_/_韩孝周_/_郑幼贞
+sw62qyg3fwo?password=8888 韩剧|【机智牢房生活】(2017)_16集全_1080P韩剧|中字_朴海秀_/_郑敬淏_/_郑秀晶
+sw62qkz3fwo?password=8888 韩剧|【继承者们】(2013)_20集全_1080P韩语中字_李敏镐_/_朴信惠_/_金宇彬
+sw62qkg3fwo?password=8888 韩剧|【当你沉睡时】(2017)_32集全_1080P韩语中字_李钟硕_/_裴秀智_/_李相烨
+sw62qk93fwo?password=8888 韩剧|【窥探】(2021)_20集全_1080P韩语中字_李昇基_/_李熙俊_/_朴柱炫
+sw62qk13fwo?password=8888 韩剧|【举重妖精金福珠】(2016)_16集全_1080P韩语中字_李圣经_/_南柱赫_/_景收真
+sw62qdh3fwo?password=8888 韩剧|【甜蜜家园】(2020)_10集全_4K韩语中字_宋江_/_李施吟_/_李到晛
+sw62qdv3fwo?password=8888 韩剧|【非常律师禹英禑】(2022)_16集全_1080P韩语中字_朴恩斌_/_姜泰伍_/_姜其永
+sw62qmf3fwo?password=8888 韩剧|【那年,我们的夏天】(2021)_16集全_1080P韩语中字_崔宇植_/_金多美_/_金圣喆
+sw62qma3fwo?password=8888 韩剧|【欢迎来到王之国】(2023)_16集全_1080P韩语中字_李俊昊_/_林允儿_/_高媛熙
+sw62q5z3fwo?password=8888 韩剧|【治愈者】(2014)_20集全_1080P韩语中字_池昌旭_/_朴敏英_/_刘智泰
+sw62q5g3fwo?password=8888 韩剧|【今生是第一次】(2017)_16集全_1080P韩语中字_李民基_/_郑素敏_/_朴炳垠
+sw62qvl3fwo?password=8888 韩剧|【没关系,是爱情啊】(2014)_16集全_1080P韩语中字_赵寅成_/_孔晓振_/_成东日
+sw62qvg3fwo?password=8888 韩剧|【请回答1997】(2012)_16集全_1080P韩语中字_郑恩地_/_徐仁国_/_申素率
+sw62qan3fwo?password=8888 韩剧|【蓝色大海的传说】(2016)_20集全_720P韩语中字_全智贤_/_李敏镐_/_文素丽
+sw62qa43fwo?password=8888 韩剧|【僵尸校园】(2022)_12集全_4K韩语中字_尹灿荣_/_朴持厚_/_曹怡贤
+sw62qax3fwo?password=8888 韩剧|【社内相亲】(2022)_12集全_1080P韩语中字_安孝燮_/_金世正_/_金旻奎
+sw62qg93fwo?password=8888 韩剧|【我的解放日志】(2022)_16集全_4K韩语中字_李民基_/_金智媛_/_孙锡久
+sw62qpn3fwo?password=8888 韩剧|【365:逆转命运的1年】(2020)_24集全_1080P韩语中字_李浚赫_/_南志铉_/_金智秀
+sw62qpd3fwo?password=8888 韩剧|【财阀家的小儿子】(2022)_16集全_1080P韩语中字_宋仲基_/_李星民_/_申铉彬
+sw62q8x3fwo?password=8888 韩剧|【大力女子都奉顺】(2017)_16集全_1080P韩语中字_朴宝英_/_朴炯植_/_金志洙
+sw62bog3fwo?password=8888 韩剧|【城市猎人】(2011)_20集全_720P韩语中字_李敏镐_/_朴敏英_/_李浚赫
+sw62big3fwo?password=8888 韩剧|【哦我的鬼神大人】(2015)_16集全_1080P韩语中字_朴宝英_/_曹政奭_/_金瑟祺
+sw62bi23fwo?password=8888 韩剧|【二十五,二十一】(2022)_16集全_1080P韩语中字_金泰梨_/_南柱赫_/_金知妍
+sw62b4d3fwo?password=8888 韩剧|【超异能族】(2023)_20集全_4K韩语中字_柳承龙_/_韩孝周_/_赵寅成
+sw62b4j3fwo?password=8888 韩剧|【海岸村恰恰恰】(2021)_16集全_1080P韩语中字_申敏儿_/_金宣虎_/_李相二
+sw62byh3fwo?password=8888 韩剧|【D.P:逃兵追缉令】_第一季_(2021)_4K韩语中字_丁海寅_/_具教焕_/_金成畇_
+sw62bmt3fwo?password=8888 韩剧|【D.P:逃兵追缉令】_第二季_(2023)_4K韩语中字_丁海寅_/_具教焕_/_金成畇
+sw62b533fwo?password=8888 韩剧|【仁显王后的男人】(2012)_16集全_1080P韩语中字_刘寅娜_/_池贤宇_/_金镇宇
+sw62b5h3fwo?password=8888 韩剧|【少年法庭】(2022)_10集全_4K韩语中字_金惠秀_/_金武烈_/_李星民
+sw62bvt3fwo?password=8888 韩剧|【杀了我治愈我】(2015)_20集全_1080P韩语中字_池晟_/_黄正音_/_朴叙俊
+sw62beq3fwo?password=8888 韩剧|【未生】(2014)_20集全_1080P韩语中字_任时完_/_李星民_/_姜素拉
+sw62bep3fwo?password=8888 韩剧|【内在美】(2018)_16集全_1080P韩语中字_徐玄振_/_李民基_/_李多熙
+sw62bai3fwo?password=8888 韩剧|【语义错误】(2022)_8集全_1080P韩语中字_朴栖含_/_朴宰灿_/_宋智午
+sw62bgh3fwo?password=8888 韩剧|【我的ID是江南美人】(2018)_16集全_1080P韩语中字_林秀香_/_车银优_/_赵宇丽
+sw62bgf3fwo?password=8888 韩剧|【偶然发现的一天】(2019)_32集全_1080P韩语中字_金惠奫_/_金路云_/_李宰旭
+sw62bga3fwo?password=8888 韩剧|【国王:永远的君主】(2020)_16集全_1080P韩语中字_李敏镐_/_金高银_/_禹棹焕
+sw62bg03fwo?password=8888 韩剧|【请回答1994】(2013)_21集全_1080P韩语中字_高雅拉_/_柳演锡_/_正宇
+sw62bpy3fwo?password=8888 韩剧|【Move_to_Heaven:我是遗物整理师】(2021)_10集全_4K韩语中字_李帝勋_/_汤峻相_/_洪承熙
+sw62owv3fwo?password=8888 韩剧|【夫妻的世界】(2020)_16集全_1080P韩语中字_金喜爱_/_朴解浚_/_韩韶禧
+sw62ofn3fwo?password=8888 韩剧|【安娜】(2022)_6集全_1080P韩语中字_裴秀智_/_郑恩彩_/_金俊翰
+sw62ofi3fwo?password=8888 韩剧|【火星生活】(2018)_16集全_1080P韩语中字_郑敬淏_/_朴成雄_/_高我星
+sw62ofe3fwo?password=8888 韩剧|【春夜】(2019)_16集全_4K韩语中字_韩志旼_/_丁海寅_/_金俊翰
+sw62osq3fwo?password=8888 韩剧|【酒鬼都市女人们】(2021)_12集全_1080P韩语中字_李先彬_/_韩善花_/_郑恩地
+sw62osg3fwo?password=8888 韩剧|【棒球大联盟】(2019)_16集全_1080P韩语中字_南宫珉_/_朴恩斌_/_吴正世
+sw62oq13fwo?password=8888 韩剧|【囚犯医生】(2019)_16集全_1080P韩语中字_南宫珉_/_权娜拉_/_金炳哲
+sw62ob33fwo?password=8888 韩剧|【迷雾】(2018)_16集全_1080P韩语中字_金南珠_/_池珍熙_/_高俊
+sw62obv3fwo?password=8888 韩剧|【我的名字】(2021)_8集全_4K韩语中字_韩韶禧_/_朴熹洵_/_安普贤
+sw62oo33fwo?password=8888 韩剧|【咖啡王子1号店】(2007)_17集全_1080P韩语中字_尹恩惠_/_孔刘_/_李善均
+sw62ook3fwo?password=8888 韩剧|【黑话律师】(2022)_16集全_1080P韩语中字_李钟硕_/_林允儿_/_金周宪
+sw62oor3fwo?password=8888 韩剧|【耀眼】(2019)_12集全_1080P韩语中字_金惠子_/_韩志旼_/_南柱赫
+sw62o7s3fwo?password=8888 韩剧|【地狱公使】(2021)_6集全_4K韩语中字_刘亚仁_/_金贤珠_/_朴正民
+sw62o7r3fwo?password=8888 韩剧|【请输入搜索词:WWW】(2019)_16集全_1080P韩语中字_林秀晶_/_张基龙_/_李多熙
+sw62oid3fwo?password=8888 韩剧|【阿尔罕布拉宫的回忆】(2018)_16集全_1080P韩语中字_玄彬_/_朴信惠_/_朴勋_
+sw62oyx3fwo?password=8888 韩剧|【她很漂亮】(2015)_16集全_1080P韩语中字_黄正音_/_朴叙俊_/_高俊熙
+sw62oks3fwo?password=8888 韩剧|【我亲爱的朋友们】(2016)_16集全_1080P韩语中字_高贤贞_/_赵寅成_/_金惠子
+sw62okn3fwo?password=8888 韩剧|【Live】(2018)_18集全_720P韩语中字_郑有美_/_李光洙_/_裴晟祐
+sw62ok43fwo?password=8888 韩剧|【制作人】(2015)_12集全_1080P韩语中字_金秀贤_/_车太贤_/_孔晓振
+sw62odw3fwo?password=8888 韩剧|【她的私生活】(2019)_16集全_1080P韩语中字_朴敏英_/_金材昱_/_安普贤
+sw62odl3fwo?password=8888 韩剧|【大长今】(2003)_54集全_1080P国语韩语多音轨中字_李英爱_/_池珍熙_/_任豪
+sw62odr3fwo?password=8888 韩剧|【无法抗拒的他】(2021)_10集全_1080P韩语中字_宋江_/_韩韶禧_/_蔡钟协
+sw62omq3fwo?password=8888 韩剧|【加油吧威基基】(2018)_20集全_1080P韩语中字_金正贤_/_李伊庚_/_孙承源
+sw62omv3fwo?password=8888 韩剧|【绅士的品格】(2012)_20集全_1080P韩语中字_张东健_/_金荷娜_/_金民钟
+sw62om93fwo?password=8888 韩剧|【九回时间旅行】(2013)_20集全_1080P韩语中字_李阵郁_/_赵胤熙_/_全卢民
+sw6uayo3fwo?password=8888 日剧|【非自然死亡】全10集_1080P中字【13G】
+swz3hvx3fwo?password=8888 日剧|【胜者即是正义】(2012)_11集全_1080P中字【13G】
+swz3hv03fwo?password=8888 日剧|【胜者即是正义2】(2013)_10集全_1080P中字【13G】
+swz3l4f3fwo?password=8888 日剧|【弥留之国的爱丽丝】1-2季_4K中字【100G】
+swz6syr3fwo?password=8888 日剧|【半泽直树】1-2季全_1080P中字【38G】
+swz6sdf3fwo?password=8888 日剧|【我是大哥大】10集全_1080P中字【38G】
+swz6s5p3fwo?password=8888 日剧|【重启人生】10集全_1080P中字【11G】
+swz6s513fwo?password=8888 日剧|【轮到你了】20集全_1080P中字【20G】
+swz6o4e3fwo?password=8888 日剧|【四重奏】(2017)_10集全_1080P中字【16G】
+swz6kjm3fwo?password=8888 日剧|【我的恐怖妻子】(2016)_9集全_1080P中字【13G】
+swz6dk13fwo?password=8888 日剧|【凪的新生活】(2019)_10集全_1080P中字【9G】
+sw6uis63fwo?password=8888 台剧|【想见你】(2019)_13集全_4K中字【36G】
+sw6uj4h3fwo?password=8888 台剧|【我们与恶的距离】(2019)_10集全_4K中字【88G】
+swz6lk43fwo?password=8888 台剧|【我可能不会爱你】(2011)_23集全_1080P中字【17G】
+swz6kcg3fwo?password=8888 台剧|【俗女养成记】1-2季_4K中字【74G】
+swnvgvv3z29?password=h6b2 纪录片|中国通史全100集_64.07G
+sw682pw3nyo?password=s8c8 纪录片|国外纪录片_1.86T
+sw6xm3j3w7v?password=1111 纪录片|百家讲坛全集_2.21T
+swz6smc3fwo?password=8888 纪录片|【地球脉动】1-3季_1080P中字【436G】
+sw68md23w8m?password=q353 纪录片|盗火纪录片_9.32T
+swz6fb03fwo?password=8888 纪录片|一级方程式:疾速争胜_(2019)
+swz6fbu3fwo?password=8888 纪录片|七个世界,一个星球_(2019)
+swz6fo33fwo?password=8888 纪录片|72种危险动物:拉丁美洲_(2017)
+swz6fo43fwo?password=8888 纪录片|72种危险动物:亚洲篇_(2018)
+swz6foy3fwo?password=8888 纪录片|2022_(2022)
+swz6fok3fwo?password=8888 纪录片|阿波罗11号_(2019)
+swz6fod3fwo?password=8888 纪录片|阿莱克斯·施瓦泽:为真相而跑_(2023)
+swz6fov3fwo?password=8888 纪录片|埃及艳后_(2023)
+swz6foe3fwo?password=8888 纪录片|艾德·希兰:成名之路_(2023)
+swz6foa3fwo?password=8888 纪录片|爱犬情深_(2018)
+swz6fog3fwo?password=8888 纪录片|摆脱贫困_(2021)
+swz6fo83fwo?password=8888 纪录片|北回归线_(2010)
+swz6foj3fwo?password=8888 纪录片|北极奇观_(2014)
+swz6fo93fwo?password=8888 纪录片|北极熊_(2022)
+swz6fo13fwo?password=8888 纪录片|贝尔蒂·格雷戈里:与动物零距离_(2023)
+swz6fo03fwo?password=8888 纪录片|奔向月球_(2015)
+swz6f733fwo?password=8888 纪录片|变态者意识形态指南_(2012)
+swz6f7n3fwo?password=8888 纪录片|冰冻星球2_(2022)
+swz6f7z3fwo?password=8888 纪录片|冰河时代的巨人_(2013)
+swz6f7w3fwo?password=8888 纪录片|冰雪之巅_(2018)
+swz6f7s3fwo?password=8888 纪录片|博茨瓦纳惊人的野生动物_(2020)
+swz6f7q3fwo?password=8888 纪录片|不破不立_(2021)
+swz6f7o3fwo?password=8888 纪录片|不止考古·我与三星堆_(2022)
+swz6f7i3fwo?password=8888 纪录片|坂本龙一:终曲_(2017)
+swz6f743fwo?password=8888 纪录片|BBC_野性都市_(2018)
+swz6f7k3fwo?password=8888 纪录片|彩排_(2022)
+swz6f7d3fwo?password=8888 纪录片|茶,一片树叶的故事_(2013)
+swz6f753fwo?password=8888 纪录片|超凡动物奇观_(2022)
+swz6f7v3fwo?password=8888 纪录片|超级工程_(2012)
+swz6f7r3fwo?password=8888 纪录片|沉船搜索者澳大利亚_(2022)
+swz6f7t3fwo?password=8888 纪录片|穿越落基山脉_(2011)
+swz6f783fwo?password=8888 纪录片|从太空看地球_(2019)
+swz6f7j3fwo?password=8888 纪录片|大白鲨_(2013)
+swz6f7x3fwo?password=8888 纪录片|大堡礁探险_(2018)
+swz6f7c3fwo?password=8888 纪录片|大陆的崛起_(2013)
+swz6f703fwo?password=8888 纪录片|大秦岭_(2010)
+swz6f7u3fwo?password=8888 纪录片|大太平洋_(2017)
+swz6fi33fwo?password=8888 纪录片|大峡谷探险之河流告急_(2008)
+swz6fi63fwo?password=8888 纪录片|大象的秘密_(2023)
+swz6fih3fwo?password=8888 纪录片|大象女王_(2019)
+swz6fiw3fwo?password=8888 纪录片|大熊猫_(2018)
+swz6fif3fwo?password=8888 纪录片|登陆日:诺曼底1944_(2014)
+swz6fis3fwo?password=8888 纪录片|地球的夜晚_(2020)
+swz6fil3fwo?password=8888 纪录片|地球风暴_(2022)
+swz6fiq3fwo?password=8888 纪录片|地球脉动_(2006)
+swz6fib3fwo?password=8888 纪录片|地球脉动2_(2016)
+swz6fi73fwo?password=8888 纪录片|地球:神奇的一天_(2017)
+swz6fii3fwo?password=8888 纪录片|第四阶段_(2016)
+swz6fiy3fwo?password=8888 纪录片|帝国的崛起:奥斯曼_(2020)
+swz6fik3fwo?password=8888 纪录片|帝企鹅日记2:召唤_(2017)
+swz6fim3fwo?password=8888 纪录片|帝王蝶的迁徙_(2012)
+swz6fiv3fwo?password=8888 纪录片|东瀛大宝荐
+swz6fie3fwo?password=8888 纪录片|动物本色_(2021)
+swz6fig3fwo?password=8888 纪录片|敦煌:生而传奇_(2021)
+swz6fi83fwo?password=8888 纪录片|恶海捕蟹记:血脉篇_(2020)
+swz6fij3fwo?password=8888 纪录片|非洲_(2013)
+swz6fic3fwo?password=8888 纪录片|非洲:动物乐园_(2017)
+swz6fi23fwo?password=8888 纪录片|风味原产地_(2019)
+swz6f433fwo?password=8888 纪录片|佛罗伦萨和乌菲兹美术馆_(2015)
+swz6f4n3fwo?password=8888 纪录片|功勋_(2021)
+swz6f4s3fwo?password=8888 纪录片|孤注一掷:阿森纳_(2022)
+swz6f4q3fwo?password=8888 纪录片|孤注一掷:巴西国家队_(2020)
+swz6f4o3fwo?password=8888 纪录片|孤注一掷:曼彻斯特城_(2018)
+swz6f473fwo?password=8888 纪录片|孤注一掷:托特纳姆热刺_(2020)
+swz6f4i3fwo?password=8888 纪录片|龟女士的奥德赛_(2018)
+swz6f4y3fwo?password=8888 纪录片|国际空间站_(2002)
+swz6f4k3fwo?password=8888 纪录片|国家地理:大迁徙_(2010)
+swz6f4m3fwo?password=8888 纪录片|国家地理:远征南极_(2009)
+swz6f4r3fwo?password=8888 纪录片|海狼之岛_(2022)
+swz6f4a3fwo?password=8888 纪录片|海洋_(2010)
+swz6f4p3fwo?password=8888 纪录片|海洋:我们的蓝色星球_(2018)
+swz6f4t3fwo?password=8888 纪录片|航空母舰:七海卫士_(2016)
+swz6fyz3fwo?password=8888 纪录片|航拍中国_(2017)
+swz6fyw3fwo?password=8888 纪录片|河西走廊_(2015)
+swz6fyf3fwo?password=8888 纪录片|黑猩猩帝国_(2023)
+swz6fyb3fwo?password=8888 纪录片|黑夜跟踪狂:追捕连环杀手_(2021)
+swz6fy73fwo?password=8888 纪录片|欢迎来地球_(2021)
+swz6fyi3fwo?password=8888 纪录片|环法自行车赛:逆风飞驰_(2023)
+swz6fyy3fwo?password=8888 纪录片|回到太空_(2022)
+swz6fyk3fwo?password=8888 纪录片|急诊先锋:纽约_(2023)
+swz6fym3fwo?password=8888 纪录片|记忆的力量·抗美援朝_(2020)
+swz6fyv3fwo?password=8888 纪录片|家园_(2020)
+swz6fye3fwo?password=8888 纪录片|揭秘海军陆战队_(2017)
+swz6fyg3fwo?password=8888 纪录片|巨兽_(2023)
+swz6fyt3fwo?password=8888 纪录片|觉醒_(2018)
+swz6fyj3fwo?password=8888 纪录片|康纳·麦格雷戈:拳王万岁_(2023)
+swz6fy13fwo?password=8888 纪录片|克里斯·海姆斯沃斯:挑战极限_(2022)
+swz6fy23fwo?password=8888 纪录片|狂野日本_(2015)
+swz6fk33fwo?password=8888 纪录片|狂野之美:国家公园探险_(2016)
+swz6fkn3fwo?password=8888 纪录片|蓝色星球_(2001)
+swz6fks3fwo?password=8888 纪录片|蓝色星球2_(2017)
+swz6fkb3fwo?password=8888 纪录片|雷吉_(2023)
+swz6fki3fwo?password=8888 纪录片|李小龙传奇_(2008)
+swz6fky3fwo?password=8888 纪录片|了解宇宙如何运行_(2010)
+swz6fkk3fwo?password=8888 纪录片|绿色星球_(2022)
+swz6fkm3fwo?password=8888 纪录片|罗马四大圣殿_(2016)
+swz6fk53fwo?password=8888 纪录片|麦道夫:华尔街吸金恶霸_(2023)
+swz6fkr3fwo?password=8888 纪录片|没有极限_(2015)
+swz6fka3fwo?password=8888 纪录片|美国内战_(1990)
+swz6fkp3fwo?password=8888 纪录片|美国西海岸之旅_(2014)
+swz6fk83fwo?password=8888 纪录片|美丽星球_(2016)
+swz6fk93fwo?password=8888 纪录片|美丽中国_(2008)
+swz6fk13fwo?password=8888 纪录片|梦想之大:构建我们的世界_(2017)
+swz6fkc3fwo?password=8888 纪录片|木偶奇遇记_(2022)
+swz6fdn3fwo?password=8888 纪录片|喵星人的奇思妙想_(2022)
+swz6fdz3fwo?password=8888 纪录片|MH370:消失的马航客机_(2023)
+swz6fdh3fwo?password=8888 纪录片|纳米比亚-旷野的精神_(2016)
+swz6fdw3fwo?password=8888 纪录片|南极3D:在边缘_(2014)
+swz6fdq3fwo?password=8888 纪录片|南太平洋之旅_(2013)
+swz6fd73fwo?password=8888 纪录片|欧洲_(2016)
+swz6fdy3fwo?password=8888 纪录片|披头士乐队:回归_(2021)
+swz6fdm3fwo?password=8888 纪录片|僻壤凶案_(2022)
+swz6fd53fwo?password=8888 纪录片|婆罗洲:亚洲的魅力_(2017)
+swz6fdv3fwo?password=8888 纪录片|破发点:大满贯之路_(2023)
+swz6fda3fwo?password=8888 纪录片|破浪_(2016)
+swz6fdg3fwo?password=8888 纪录片|奇妙酒店:大堂之外的生活_(2017)
+swz6fdp3fwo?password=8888 纪录片|企鹅群里有特务_(2013)
+swz6fd83fwo?password=8888 纪录片|企鹅小镇_(2021)
+swz6fdj3fwo?password=8888 纪录片|切尔诺贝利_(2019)
+swz6fdx3fwo?password=8888 纪录片|情系斯波克_(2016)
+swz6fm33fwo?password=8888 纪录片|求偶游戏_(2021)
+swz6fmh3fwo?password=8888 纪录片|全力挥杆:高尔夫大满贯之路_(2023)
+swz6fmf3fwo?password=8888 纪录片|全美缉凶:波士顿马拉松爆炸案_(2023)
+swz6fml3fwo?password=8888 纪录片|全球绝美国家公园_(2022)
+swz6fmb3fwo?password=8888 纪录片|人间游乐场_(2022)
+swz6fmi3fwo?password=8888 纪录片|人生七年1_(1964)
+swz6fmy3fwo?password=8888 纪录片|人生七年2_(1970)
+swz6fmd3fwo?password=8888 纪录片|人生七年3_(1977)
+swz6fm53fwo?password=8888 纪录片|人生七年4_(1984)
+swz6fme3fwo?password=8888 纪录片|人生七年5_(1991)
+swz6fma3fwo?password=8888 纪录片|人生七年6_(1999)
+swz6fmp3fwo?password=8888 纪录片|人生七年7_(2006)
+swz6fmt3fwo?password=8888 纪录片|人生七年8_(2012)
+swz6fm93fwo?password=8888 纪录片|人生七年9_(2019)
+swz6fm13fwo?password=8888 纪录片|人生第一次_(2020)
+swz6fmc3fwo?password=8888 纪录片|塞伦盖蒂_(2019)
+swz6fm23fwo?password=8888 纪录片|塞伦盖蒂国家公园_(2011)
+swz6fmu3fwo?password=8888 纪录片|舌尖上的中国_(2012)
+swz6f5n3fwo?password=8888 纪录片|生门_(2017)
+swz6f563fwo?password=8888 纪录片|生命_(2009)
+swz6f5h3fwo?password=8888 纪录片|盛会_(2022)
+swz6f5w3fwo?password=8888 纪录片|时间的风景_(2012)
+swz6f5f3fwo?password=8888 纪录片|史前星球_(2022)
+swz6f5s3fwo?password=8888 纪录片|水下中国_(2019)
+swz6f5q3fwo?password=8888 纪录片|他乡的童年_(2019)
+swz6f5b3fwo?password=8888 纪录片|泰勒·斯威夫特:美利坚女士_(2020)
+swz6f5i3fwo?password=8888 纪录片|太空之旅_(2015)
+swz6f543fwo?password=8888 纪录片|徒手攀岩_(2018)
+swz6f5k3fwo?password=8888 纪录片|外星世界_(2020)
+swz6f5v3fwo?password=8888 纪录片|完美星球_(2021)
+swz6f5e3fwo?password=8888 纪录片|万物之生_(2022)
+swz6f5g3fwo?password=8888 纪录片|王朝_(2018)
+swz6f5p3fwo?password=8888 纪录片|王阳明_(2021)
+swz6f5t3fwo?password=8888 纪录片|韦科惨案:末日烈火_(2023)
+swz6f5j3fwo?password=8888 纪录片|为了全人类_(1989)
+swz6f593fwo?password=8888 纪录片|维多利亚的秘密:天使与恶魔_(2022)
+swz6f5u3fwo?password=8888 纪录片|未来漫游指南_(2022)
+swz6fvs3fwo?password=8888 纪录片|我工作故我在_(2023)
+swz6fvi3fwo?password=8888 纪录片|我们的父亲_(2022)
+swz6fvm3fwo?password=8888 纪录片|我们的浩瀚宇宙_(2022)
+swz6fv53fwo?password=8888 纪录片|我们的星球_(2019)
+swz6fvr3fwo?password=8888 纪录片|我们的自然_(2018)
+swz6fve3fwo?password=8888 纪录片|我们星球上的生命_(2023)
+swz6fva3fwo?password=8888 纪录片|我是一名杀手_(2018)
+swz6fvp3fwo?password=8888 纪录片|无穷之路_(2021)
+swz6fvj3fwo?password=8888 纪录片|武林外传_(2018)
+swz6fvx3fwo?password=8888 纪录片|小小世界_(2020)
+swz6fv03fwo?password=8888 纪录片|行星_(2019)
+swz6fvu3fwo?password=8888 纪录片|血与性:400年王室风云_(2022)
+swz6fr63fwo?password=8888 纪录片|药剂师_(2020)
+swz6frh3fwo?password=8888 纪录片|野性太平洋_(2016)
+swz6frf3fwo?password=8888 纪录片|野性英伦_(2023)
+swz6frq3fwo?password=8888 纪录片|夜色中的地球_(2020)
+swz6fr73fwo?password=8888 纪录片|移民国度_(2020)
+swz6frm3fwo?password=8888 纪录片|影响世界的中国植物_(2019)
+swz6frp3fwo?password=8888 纪录片|与浪争锋_(2022)
+swz6frx3fwo?password=8888 纪录片|宇宙时空之旅_(2014)
+swz6fe33fwo?password=8888 纪录片|遇见最极致的中国_(2022)
+swz6few3fwo?password=8888 纪录片|原味澳洲_(2013)
+swz6fel3fwo?password=8888 纪录片|约翰·威尔逊的十万个怎么做_(2020)
+swz6feb3fwo?password=8888 纪录片|找寻_(2021)
+swz6fe73fwo?password=8888 纪录片|这货哪来的_(2023)
+swz6fek3fwo?password=8888 纪录片|致富攻略_(2023)
+swz6fem3fwo?password=8888 纪录片|中国_(2020)
+swz6fev3fwo?password=8888 纪录片|中国救护_(2023)
+swz6fee3fwo?password=8888 纪录片|中国通史_(2013)
+swz6feg3fwo?password=8888 纪录片|中国之谜_(2016)
+swz6fep3fwo?password=8888 纪录片|中国最美公路_(2022)
+swz6fet3fwo?password=8888 纪录片|众神之地_(2022)
+swz6fej3fwo?password=8888 纪录片|追缉汽车大亨:卡洛斯·戈恩_(2023)
+swz6fe93fwo?password=8888 纪录片|追逐珊瑚_(2017)
+swz6fec3fwo?password=8888 纪录片|最后的珊瑚礁:海底世界_(2012)
+swz6fe23fwo?password=8888 纪录片|最后的舞动_(2020)
+swz6feu3fwo?password=8888 纪录片|最美公路_(2018)
+swz6fan3fwo?password=8888 纪录片|座头鲸_(2015)
+sw6vuxp366e?password=kd83 音乐MV|港台MV_1.14T
+sw658uq36x2?password=md98 音乐MV|音乐22万首_8.76T
+swzg9pt3wye?password=c899 音乐MV|演唱会_重编码6TB
+swzmqcr3fs6?password=xd67 音乐MV|音乐22万首_3.83TB
+swzmqca3fs6?password=j9d3 音乐MV|音乐22万首_8.76TB
+swzva8w3fs6?password=l381 音乐MV|音乐22万首_1.80TB
+swz6ft53fwo?password=8888 精选|各类无损音乐合集9万首(8.8T)
+swz6sow3fwo?password=8888 精选|1080P港台演唱会【2.55T】
+swz6soa3fwo?password=8888 精选|成龙电影合集【447G】
+swz6sot3fwo?password=8888 精选|《_成龙65部作品合集@Ourdisc_蓝光原盘_》【1.48T】
+swz6so13fwo?password=8888 精选|林正英电影合集46部【209G】
+swz6so23fwo?password=8888 精选|李连杰电影合集【210G】
+swz6s763fwo?password=8888 精选|邵氏4K【777G】
+swz6s7w3fwo?password=8888 精选|周星馳电影合集【183G】
+swz6s743fwo?password=8888 精选|动漫_已经刮削整理_394部【13.97T】
+swz6s7y3fwo?password=8888 精选|freembook全站15.72万书(kindle格式为主)_1.6t
+swz6s7d3fwo?password=8888 精选|港片蓝光原盘1--669部【16T】
+swz6s783fwo?password=8888 精选|纪录片合集_蓝光原盘
+swz6sin3fwo?password=8888 精选|泰剧【3.15T】
+swz6si63fwo?password=8888 精选|演唱会【13T】
+swz6sih3fwo?password=8888 精选|音乐22万首14.39T音乐包2
+swz6siw3fwo?password=8888 精选|印度電子圖書館部分書籍(29萬12T左右)
+swz6sil3fwo?password=8888 精选|中美百万66万书籍的超大zip压缩版.ca66萬zip【8.7T】
+swz6sib3fwo?password=8888 精选|最强爽文短剧合集373部
+swz6gd93fwo?password=8888 精选|2267部2160p_remux_FGT【120T】
+swz6gml3fwo?password=8888 精选|动画电影1000部【9.7T】
+swz6gmc3fwo?password=8888 精选|综艺【4.75T】
+swz6ges3fwo?password=8888 精选|动漫原盘【40T】
+swz6gp53fwo?password=8888 精选|蓝光原盘_646T_合集
+swz692e3fwo?password=8888 精选|高清翡翠台_合集_(18.7tb)
+swz692x3fwo?password=8888 精选|TVB【7T】
+swz69un3fwo?password=8888 精选|TVB_ATV最强电视剧合集【650部73T】
+swzfv793fwo?password=8888 精选|【_BD-ISO_】】【2224TB】
+swzt3w43hc6?password=s922 精选|希腊神话改编影视
+swzt3w23hc6?password=z631 精选|尼古拉斯凯奇
+swzt3wi3hc6?password=gf96 精选|恐怖片
+swzt3fh3hc6?password=ia38 精选|全球丧尸电影百佳合集
+swnnsis3zx1?password=g0d1 精选|600t合集
+swzlcya3wsp?password=bab4 精选|1600t合集
+swz82uz33a3?password=x1e1 精选|踢馆秘籍
+swzkpip3ncb?password=5566 精选|【电影系列合集】4K
+swzkpij3ncb?password=5566 精选|【电影系列合集】AE制作全特效字幕
+swzkpix3ncb?password=5566 精选|【电影系列合集】最佳影片合集
+swzkpi23ncb?password=5566 精选|漫威电影合集
+swzkpiu3ncb?password=5566 精选|电影系列合集2
+swzm4z63697?password=6688 大包|FRDS电视剧大包
+swzew4m3nc6?password=i0d7 大包|2.24pb大包
+swzawra3zx1?password=scf1 大包|1.6pb大合集
+swz939j3hz7?password=bcd5 日本动漫|奥特曼系列
+swzjuqj33dn?password=7777 日本动漫|火影忍者
+sw62c3o3z9p?password=s137 动漫|动画片_3.99T
+sw6upku3hqj?password=hc61 动漫|动漫394部_13.97T
+swznmd03nc7?password=p897 动漫|动漫原盘_40.49T
+sw6x8sj3zzo?password=v321 动漫|皮克斯动画合集4K_REMUX_975.83G
+sw3x2pd33zy?password=xzpq 动漫|小猪佩奇_21.95G
+swnd82q3zx1?password=ua89 动漫|奥特曼_1.1T
+sw3c8o83hgl?password=b5e6 魔戒六部曲_1.18T
+swzdt0w3nb4?password=f0a7 诺兰系列原盘访问码:d843
+swzdt933nb4?password=la51 姜文
+swny8y43z12?password=o932 NBA总决赛1991-2020_698.21G
+swzg31833xj?password=f3h5 2024欧洲杯
+sw6rt783hgh?password=ifd6 PPT素材模板_84.82G
diff --git a/lib/XBPQ.jar b/lib/XBPQ.jar
new file mode 100644
index 0000000..8b9203d
Binary files /dev/null and b/lib/XBPQ.jar differ
diff --git a/lib/aliproxy.32.gz b/lib/aliproxy.32.gz
new file mode 100644
index 0000000..aa99d1d
Binary files /dev/null and b/lib/aliproxy.32.gz differ
diff --git a/lib/aliproxy.32.md5 b/lib/aliproxy.32.md5
new file mode 100644
index 0000000..1e63534
--- /dev/null
+++ b/lib/aliproxy.32.md5
@@ -0,0 +1 @@
+cda0aee24a4c743529629adf7241f9c9
diff --git a/lib/aliproxy.gz b/lib/aliproxy.gz
new file mode 100644
index 0000000..e5b3b2b
Binary files /dev/null and b/lib/aliproxy.gz differ
diff --git a/lib/aliproxy.md5 b/lib/aliproxy.md5
new file mode 100644
index 0000000..544a25d
--- /dev/null
+++ b/lib/aliproxy.md5
@@ -0,0 +1 @@
+506bb770242856a288488acb4c659298
diff --git a/lib/alishare.ebook.txt b/lib/alishare.ebook.txt
new file mode 100644
index 0000000..94a7316
--- /dev/null
+++ b/lib/alishare.ebook.txt
@@ -0,0 +1,77 @@
+zAajGfX1cxE 中信出版图书 1
+kgCYrLpLgiZ 机械工业出版社6000册 1
+EmhjMiwBrNj 清华大学出版社2237册 1
+3XEmnpcKYwd 新知文库 1
+XpsFL9BcCbN 北京国家图书馆 1
+BPkNEszAXjr 一万本图书馆PDF 1
+STfm58hKPBu 湖湘文库 1
+LZvTLPW8fbF 亲子教育
+gfsRY67BRcb 历史传记
+vbULbViB6jg 婚恋两性
+nk24tt7C2nt 婚恋家庭
+nk24tt7C2nt 婚恋家庭
+LYHR2C7oGrN 官场商战
+h3qDZvSNJaH 影视时尚
+1Wq86hBek8P 心理励志
+erF8fL1E9SR 思想文化
+qzBiRPyuKCU 恐怖悬疑
+5b6xedKYxDB 推理侦探
+5Do3YzWGsdT 文学名著
+h8nj4ZxEhTV 旅游休闲
+W8uEmn2UEm4 武侠仙侠
+C6FdSeriQAg 武侠小说
+Q2Uyg5yXCTp 漫画绘本
+4CP6kP21RE1 玄幻奇幻
+AbmTF4S9R2u 玄幻小说
+S2r9Q7dofdw 社科经典
+Tkz17pPJ54n 科幻小说
+ZCma3m8tkqu 综合书籍
+PJc6BcfuRwn 美容养生
+1vp4gtVqHVV 职场理财
+TMXRKiUGzMe 青春校园
+vEdkxEJocnb 科教类
+AM8mtK1botT 平台类
+NkKQg1a7qM9 小说类
+1th3c74q1cu 漫画类
+auNq9mXGJ8N 新书类
+xPX311pWQP8 杂志类
+43sAoXEduDZ 我的小书屋01
+Rj2xnX7GLUW 我的小书屋02
+XMbjpWzN4Jj 我的小书屋03
+V69EqCbMHST 我的小书屋04
+zpRyQG5Sykg 我的小书屋05
+6TZTQve3haL 我的小书屋06
+FsWBsXLDyMn 全球推理小说大集合 1
+D9fe45j1eHa ePUBee整站电子书库01
+ct8cPiYpscj ePUBee整站电子书库02
+a9rZPQKHfDu ePUBee整站电子书库03
+h45mCPUZc3E ePUBee整站电子书库04
+bhDAK42pnSU ePUBee整站电子书库05
+jdPrqXLaXBU ePUBee整站电子书库06
+3exRgUFUPrv ePUBee整站电子书库07
+AMY3umXHQrH ePUBee整站电子书库08
+16ryTfdGrAP ePUBee整站电子书库09
+5W8EsnTsCRN ePUBee整站电子书库10
+D72AZeTnTVL ePUBee整站电子书库11
+Z4SyuRZZj8Z ePUBee整站电子书库12
+xMCNaJvx7tk ePUBee整站电子书库13
+MK7LwGqokKF ePUBee整站电子书库14
+p9Lnskk2e2L ePUBee整站电子书库15
+pKEdszFRn2v ePUBee整站电子书库16
+7fKJ3VC7yWg ePUBee整站电子书库17
+QXMJVQzPJzG ePUBee整站电子书库18
+eTbXLxV5HZ3 ePUBee整站电子书库19
+wvdQyRer63P ePUBee整站电子书库20
+LrLMDHopskR ePUBee整站电子书库21
+jr4xL8NvHW9 ePUBee整站电子书库22
+5tPVRsXdBk4 ePUBee整站电子书库23
+iMBCRc32UNM ePUBee整站电子书库24
+S8NodisNHcU ePUBee整站电子书库25
+4TRTbyZrKki ePUBee整站电子书库26
+iYZMj7CFPks 广东省立中山图书馆「A-G」
+unEV8t3QfTc 广东省立中山图书馆「H-K」
+uT7hzi7CnvP 广东省立中山图书馆「L-N」
+U2fcieUVKuY 广东省立中山图书馆「O-Q」
+h3s9tXNJxQK 广东省立中山图书馆「R-T」
+SXZ17uS7oju 广东省立中山图书馆「U-X」
+GwnQxogFss3 广东省立中山图书馆「Y-Z」
diff --git a/lib/alishare.txt b/lib/alishare.txt
new file mode 100644
index 0000000..5c8ef99
--- /dev/null
+++ b/lib/alishare.txt
@@ -0,0 +1,16 @@
+self 我的阿里云盘
+cdqCsAWD9wC?pwd=6666 Tacit0924-总合集 1 updated_at DESC
+mxAfB6eRgY4 阿里1T 1
+4ydLxf7VgH7 平凡中的 1
+dieULBdYP3D YYDSVIP 1
+uWa9gbM3RJ7 优源阁-资源总合集 1
+UuHi9PeYSVz YYDSVip-综艺
+v9To3HC6vhs YYDSVip-综合
+fSNHaYST47s 纪录片合集2
+ftMhRaKUfYp 掌灯者-港剧
+MLWPRHRt9W3 掌灯者-台剧
+8Fg4TNsd2A2 掌灯者-大陆剧1
+ar8Kg9azw1S 掌灯者-大陆剧2
+GMYSz3AHFaA 掌灯者-大陆剧3
+cmy3KCTRpFA 李连杰电影合集
+hMsDJ6dsGxQ 成龙电影合集
diff --git a/lib/alist.min.js b/lib/alist.min.js
new file mode 100644
index 0000000..ddd4adf
--- /dev/null
+++ b/lib/alist.min.js
@@ -0,0 +1 @@
+import{distance}from"./mod.js";import{sortListByCN}from"./sortName.js";String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};var showMode="single";var searchDriver="";var limit_search_show=200;var search_type="";var detail_order="name";var playRaw=1;const request_timeout=5e3;const VERSION="alist v2/v3 20221223";const UA="Mozilla/5.0";function print(any){any=any||"";if(typeof any=="object"&&Object.keys(any).length>0){try{any=JSON.stringify(any);console.log(any)}catch(e){console.log(typeof any+":"+any.length)}}else if(typeof any=="object"&&Object.keys(any).length<1){console.log("null object")}else{console.log(any)}}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}const http=function(url,options={}){if(options.method==="POST"&&options.data){options.body=JSON.stringify(options.data);options.headers=Object.assign({"content-type":"application/json"},options.headers)}options.timeout=request_timeout;if(!options.headers){options.headers={}}let keys=Object.keys(options.headers).map(it=>it.toLowerCase());if(!keys.includes("referer")){options.headers["Referer"]=getHome(url)}if(!keys.includes("user-agent")){options.headers["User-Agent"]=UA}try{const res=req(url,options);res.json=()=>res&&res.content?JSON.parse(res.content):null;res.text=()=>res&&res.content?res.content:"";return res}catch(e){return{json(){return null},text(){return""}}}};["get","post"].forEach(method=>{http[method]=function(url,options={}){return http(url,Object.assign(options,{method:method.toUpperCase()}))}});const __drives={};function isMedia(file){return/\.(dff|dsf|mp3|aac|wav|wma|cda|flac|m4a|mid|mka|mp2|mpa|mpc|ape|ofr|ogg|ra|wv|tta|ac3|dts|tak|webm|wmv|mpeg|mov|ram|swf|mp4|avi|rm|rmvb|flv|mpg|mkv|m3u8|ts|3gp|asf)$/.test(file.toLowerCase())}function get_drives_path(tid){const index=tid.indexOf("$");const name=tid.substring(0,index);const path=tid.substring(index+1);return{drives:get_drives(name),path:path}}function get_drives(name){const{settings,api,server}=__drives[name];if(settings.v3==null){settings.v3=false;const data=http.get(server+"/api/public/settings").json().data;if(Array.isArray(data)){settings.title=data.find(x=>x.key==="title")?.value;settings.v3=false;settings.version=data.find(x=>x.key==="version")?.value;settings.enableSearch=data.find(x=>x.key==="enable search")?.value==="true"}else{settings.title=data.title;settings.v3=true;settings.version=data.version;settings.enableSearch=false}api.path=settings.v3?"/api/fs/list":"/api/public/path";api.file=settings.v3?"/api/fs/get":"/api/public/path";api.search=settings.v3?"/api/public/search":"/api/public/search"}return __drives[name]}function init(ext){console.log("当前版本号:"+VERSION);let data;if(typeof ext=="object"){data=ext;print("alist ext:object")}else if(typeof ext=="string"){if(ext.startsWith("http")){let alist_data=ext.split(";");let alist_data_url=alist_data[0];limit_search_show=alist_data.length>1?Number(alist_data[1])||limit_search_show:limit_search_show;search_type=alist_data.length>2?alist_data[2]:search_type;print(alist_data_url);data=http.get(alist_data_url).json()}else{print("alist ext:json string");data=JSON.parse(ext)}}let drives=[];if(Array.isArray(data)&&data.length>0&&data[0].hasOwnProperty("server")&&data[0].hasOwnProperty("name")){drives=data}else if(!Array.isArray(data)&&data.hasOwnProperty("drives")&&Array.isArray(data.drives)){drives=data.drives.filter(it=>it.type&&it.type==="alist"||!it.type)}print(drives);searchDriver=(drives.find(x=>x.search)||{}).name||"";if(!searchDriver&&drives.length>0){searchDriver=drives[0].name}print(searchDriver);drives.forEach(item=>{let _path_param=[];if(item.params){_path_param=Object.keys(item.params);_path_param.sort((a,b)=>a.length-b.length)}if(item.password){let pwdObj={password:item.password};if(!item.params){item.params={"/":pwdObj}}else{item.params["/"]=pwdObj}_path_param.unshift("/")}__drives[item.name]={name:item.name,server:item.server.endsWith("/")?item.server.rstrip("/"):item.server,startPage:item.startPage||"/",showAll:item.showAll===true,search:!!item.search,params:item.params||{},_path_param:_path_param,settings:{},api:{},getParams(path){const key=this._path_param.find(x=>path.startsWith(x));return Object.assign({},this.params[key],{path:path})},getPath(path){const res=http.post(this.server+this.api.path,{data:this.getParams(path)}).json();return this.settings.v3?res.data.content:res.data.files},getFile(path){let raw_url=this.server+"/d"+path;raw_url=encodeURI(raw_url);let data={raw_url:raw_url,raw_url1:raw_url};if(playRaw===1){try{const res=http.post(this.server+this.api.file,{data:this.getParams(path)}).json();data=this.settings.v3?res.data:res.data.files[0];if(!this.settings.v3){data.raw_url=data.url}data.raw_url1=raw_url;return data}catch(e){return data}}else{return data}},isFolder(data){return data.type===1},isVideo(data){return this.settings.v3?data.type===2||data.type===0||data.type===3:data.type===3||data.type===0||data.type===4},is_subt(data){if(data.type===1){return false}const ext=/\.(srt|ass|scc|stl|ttml)$/;return ext.test(data.name)},getPic(data){let pic=this.settings.v3?data.thumb:data.thumbnail;return pic||(this.isFolder(data)?"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png":"")},getTime(data,isStandard){isStandard=isStandard||false;try{let tTime=data.updated_at||data.time_str||data.modified||"";let date="";if(tTime){tTime=tTime.split("T");date=tTime[0];if(isStandard){date=date.replace(/-/g,"/")}tTime=tTime[1].split(/Z|\./);date+=" "+tTime[0]}return date}catch(e){return""}}}});print("init执行完毕")}function home(filter){let classes=Object.keys(__drives).map(key=>({type_id:`${key}$${__drives[key].startPage}`,type_name:key,type_flag:"1"}));let filter_dict={};let filters=[{key:"order",name:"排序",value:[{n:"名称⬆️",v:"vod_name_asc"},{n:"名称⬇️",v:"vod_name_desc"},{n:"中英⬆️",v:"vod_cn_asc"},{n:"中英⬇️",v:"vod_cn_desc"},{n:"时间⬆️",v:"vod_time_asc"},{n:"时间⬇️",v:"vod_time_desc"},{n:"大小⬆️",v:"vod_size_asc"},{n:"大小⬇️",v:"vod_size_desc"},{n:"无",v:"none"}]},{key:"show",name:"播放展示",value:[{n:"单集",v:"single"},{n:"全集",v:"all"}]}];classes.forEach(it=>{filter_dict[it.type_id]=filters});print("----home----");print(classes);return JSON.stringify({class:classes,filters:filter_dict})}function homeVod(params){let _post_data={pageNum:0,pageSize:100};let _post_url="https://pbaccess.video.qq.com/trpc.videosearch.hot_rank.HotRankServantHttp/HotRankHttp";let data=http.post(_post_url,{data:_post_data}).json();let _list=[];try{data=data["data"]["navItemList"][0]["hotRankResult"]["rankItemList"];data.forEach(it=>{_list.push({vod_name:it.title,vod_id:"msearch:"+it.title,vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_remarks:it.changeOrder})})}catch(e){print("Alist获取首页推荐发送错误:"+e.message)}return JSON.stringify({list:_list})}function category(tid,pg,filter,extend){let orid=tid.replace(/#all#|#search#/g,"");let{drives,path}=get_drives_path(orid);const id=orid.endsWith("/")?orid:orid+"/";const list=drives.getPath(path);let subList=[];let vodFiles=[];let allList=[];let fl=filter?extend:{};if(fl.show){showMode=fl.show}list.forEach(item=>{if(drives.is_subt(item)){subList.push(item.name)}if(!drives.showAll&&!drives.isFolder(item)&&!drives.isVideo(item)){return}let vod_time=drives.getTime(item);let vod_size=get_size(item.size);let remark=vod_time.split(" ")[0].substr(3)+"\t"+vod_size;let vod_id=id+item.name+(drives.isFolder(item)?"/":"");if(showMode==="all"){vod_id+="#all#"}print(vod_id);const vod={vod_id:vod_id,vod_name:item.name.replaceAll("$","").replaceAll("#",""),vod_pic:drives.getPic(item),vod_time:vod_time,vod_size:item.size,vod_tag:drives.isFolder(item)?"folder":"file",vod_remarks:drives.isFolder(item)?remark+" 文件夹":remark};if(drives.isVideo(item)){vodFiles.push(vod)}allList.push(vod)});if(vodFiles.length===1&&subList.length>0){let sub;if(subList.length===1){sub=subList[0]}else{let subs=JSON.parse(JSON.stringify(subList));subs.sort((a,b)=>{let a_similar=(a.includes("chs")?100:0)+levenshteinDistance(a,vodFiles[0].vod_name);let b_similar=(b.includes("chs")?100:0)+levenshteinDistance(b,vodFiles[0].vod_name);if(a_similar>b_similar){return 1}else{return-1}});sub=subs.slice(-1)[0]}vodFiles[0].vod_id+="@@@"+sub;vodFiles[0].vod_remarks+="🏷️"}else{vodFiles.forEach(item=>{const lh=0;let sub;subList.forEach(s=>{const l=levenshteinDistance(s,item.vod_name);if(l>60&&l>lh){sub=s}});if(sub){item.vod_id+="@@@"+sub;item.vod_remarks+="🏷️"}})}if(fl.order){let key=fl.order.split("_").slice(0,-1).join("_");let order=fl.order.split("_").slice(-1)[0];print(`排序key:${key},排序order:${order}`);if(key.includes("name")){detail_order="name";allList=sortListByName(allList,key,order)}else if(key.includes("cn")){detail_order="cn";allList=sortListByCN(allList,"vod_name",order)}else if(key.includes("time")){detail_order="time";allList=sortListByTime(allList,key,order)}else if(key.includes("size")){detail_order="size";allList=sortListBySize(allList,key,order)}else if(fl.order.includes("none")){detail_order="none";print("不排序")}}else{if(detail_order!=="none"){allList=sortListByName(allList,"vod_name","asc")}}print("----category----"+`tid:${tid},detail_order:${detail_order},showMode:${showMode}`);return JSON.stringify({page:1,pagecount:1,limit:allList.length,total:allList.length,list:allList})}function getAll(otid,tid,drives,path){try{const content=category(tid,null,false,null);const isFile=isMedia(otid.replace(/#all#|#search#/g,"").split("@@@")[0]);const{list}=JSON.parse(content);let vod_play_url=[];list.forEach(x=>{if(x.vod_tag==="file"){let vid=x.vod_id.replace(/#all#|#search#/g,"");vod_play_url.push(`${x.vod_name}$${vid.substring(vid.indexOf("$")+1)}`)}});const pl=path.split("/").filter(it=>it);let vod_name=pl[pl.length-1]||drives.name;if(vod_name===drives.name){print(pl)}if(otid.includes("#search#")){vod_name+="[搜]"}let vod={vod_id:otid,vod_name:vod_name,type_name:"文件夹",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_tag:"folder",vod_play_from:drives.name,vod_play_url:vod_play_url.join("#"),vod_remarks:drives.settings.title};print("----detail1----");print(vod);return JSON.stringify({list:[vod]})}catch(e){print(e.message);let list=[{vod_name:"无数据,防无限请求",type_name:"文件夹",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg",vod_actor:e.message,vod_director:tid,vod_content:otid}];return JSON.stringify({list:list})}}function detail(tid){let isSearch=tid.includes("#search#");let isAll=tid.includes("#all#");let otid=tid;tid=tid.replace(/#all#|#search#/g,"");let isFile=isMedia(tid.split("@@@")[0]);print(`isFile:${tid}?${isFile}`);let{drives,path}=get_drives_path(tid);print(`drives:${drives},path:${path},`);if(path.endsWith("/")){return getAll(otid,tid,drives,path)}else{if(isSearch&&!isFile){return getAll(otid,tid,drives,path)}else if(isAll){let new_tid;if(isFile){new_tid=tid.split("/").slice(0,-1).join("/")+"/"}else{new_tid=tid}print(`全集模式 tid:${tid}=>tid:${new_tid}`);let{drives,path}=get_drives_path(new_tid);return getAll(otid,new_tid,drives,path)}else if(isFile){let paths=path.split("@@@");let vod_name=paths[0].substring(paths[0].lastIndexOf("/")+1);let vod_title=vod_name;if(otid.includes("#search#")){vod_title+="[搜]"}let vod={vod_id:otid,vod_name:vod_title,type_name:"文件",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_play_from:drives.name,vod_play_url:vod_name+"$"+path,vod_remarks:drives.settings.title};print("----detail2----");print(vod);return JSON.stringify({list:[vod]})}else{return JSON.stringify({list:[]})}}}function play(flag,id,flags){const drives=get_drives(flag);const urls=id.split("@@@");let vod={parse:0,playUrl:"",url:drives.getFile(urls[0]).raw_url};if(urls.length>=2){const path=urls[0].substring(0,urls[0].lastIndexOf("/")+1);vod.subt=drives.getFile(path+urls[1]).raw_url1}print("----play----");print(vod);return JSON.stringify(vod)}function search(wd,quick){print(__drives);print("可搜索的alist驱动:"+searchDriver);if(!searchDriver||!wd){return JSON.stringify({list:[]})}else{let driver=__drives[searchDriver];wd=wd.split(" ").filter(it=>it.trim()).join("+");print(driver);let surl=driver.server+"/search?box="+wd+"&url=";if(search_type){surl+="&type="+search_type}print("搜索链接:"+surl);let html=http.get(surl).text();let lists=[];try{lists=pdfa(html,"div&&ul&&a")}catch(e){}print(`搜索结果数:${lists.length},搜索结果显示数量限制:${limit_search_show}`);let vods=[];let excludeReg=/\.(pdf|epub|mobi|txt|doc|lrc)$/;let cnt=0;lists.forEach(it=>{let vhref=pdfh(it,"a&&href");if(vhref){vhref=unescape(vhref)}if(excludeReg.test(vhref)){return}if(cnt1024*1024*1024*1024){sz/=1024*1024*1024*1024;filesize="TB"}else if(sz>1024*1024*1024){sz/=1024*1024*1024;filesize="GB"}else if(sz>1024*1024){sz/=1024*1024;filesize="MB"}else if(sz>1024){sz/=1024;filesize="KB"}else{filesize="B"}let sizeStr=sz.toFixed(2)+filesize,index=sizeStr.indexOf("."),dou=sizeStr.substr(index+1,2);if(dou==="00"){return sizeStr.substring(0,index)+sizeStr.substr(index+3,2)}else{return sizeStr}}function levenshteinDistance(str1,str2){return 100-100*distance(str1,str2)/Math.max(str1.length,str2.length)}function naturalSort(options){if(!options){options={}}return function(a,b){if(options.key){a=a[options.key];b=b[options.key]}var EQUAL=0;var GREATER=options.order==="desc"?-1:1;var SMALLER=-GREATER;var re=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi;var sre=/(^[ ]*|[ ]*$)/g;var dre=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/;var hre=/^0x[0-9a-f]+$/i;var ore=/^0/;var normalize=function normalize(value){var string=""+value;return options.caseSensitive?string:string.toLowerCase()};var x=normalize(a).replace(sre,"")||"";var y=normalize(b).replace(sre,"")||"";var xN=x.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");var yN=y.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");if(!x&&!y)return EQUAL;if(!x&&y)return GREATER;if(x&&!y)return SMALLER;var xD=parseInt(x.match(hre))||xN.length!=1&&x.match(dre)&&Date.parse(x);var yD=parseInt(y.match(hre))||xD&&y.match(dre)&&Date.parse(y)||null;var oFxNcL,oFyNcL;if(yD){if(xDyD)return GREATER}for(var cLoc=0,numS=Math.max(xN.length,yN.length);cLocoFyNcL)return GREATER}return EQUAL}}const sortListByName=(vodList,key,order)=>{if(!key){return vodList}order=order||"asc";return vodList.sort(naturalSort({key:key,order:order,caseSensitive:true}))};const getTimeInt=timeStr=>{return new Date(timeStr).getTime()};const sortListByTime=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return getTimeInt(a)-getTimeInt(b)});if(order==="desc"){ASCarr.reverse()}return ASCarr};const sortListBySize=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return(Number(a)||0)-(Number(b)||0)});if(order==="desc"){ASCarr.reverse()}return ASCarr};export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search};
\ No newline at end of file
diff --git a/lib/bttt.json b/lib/bttt.json
new file mode 100644
index 0000000..259c4e4
--- /dev/null
+++ b/lib/bttt.json
@@ -0,0 +1,71 @@
+{
+ "规则名": "BT天堂",
+ "规则作者": "",
+ "请求头参数": "PC_UA",
+ "网页编码格式": "UTF-8",
+ "图片是否需要代理": "0",
+ "是否开启获取首页数据": "1",
+ "首页推荐链接": "https://www.bttt11.com",
+ "首页列表数组规则": "body&&.ul-imgtxt1",
+ "首页片单列表数组规则": "li",
+ "首页片单是否Jsoup写法": "1",
+ "首页片单标题": "h3&&Text",
+ "首页片单链接": "a&&href",
+ "首页片单图片": "img&&src",
+ "首页片单副标题": "span,-1&&Text",
+ "首页片单链接加前缀": "https://www.bt-tt.com",
+ "首页片单链接加后缀": "",
+ "分类起始页码": "0",
+ "分类链接": "https://www.bttt11.com/www.bt-tt.com/html/page-{cateId}-{catePg}.html",
+ //"分类链接": "https://www.clgod.xyz/list/{catePg}-{cateId}-0-0.html",
+ "分类名称": "畅影大陆电影&畅影港台电影&畅影欧美电影&畅影欧美剧&畅影日韩剧&畅影日韩电影&畅影动漫&畅影亚太剧&畅影亚太电影&畅影综艺&畅影纪录片",
+ "分类名称替换词": "4&3&1&6&7&2&11&10&5&12&13",
+ //"分类名称": "电影&动作&灵异&奇幻&宗教&励志&犯罪&功夫&喜剧&黑色&幽默&爱情&香港&纪录片&灾难&亲情&暴力&僵尸&丧尸&悬疑&人性&惊悚&血腥&武侠&剧情&历史&战争&经典&漫画&改编&恐怖&穿越&青春&黑帮&文艺&浪漫&同志&冒险&动画&演唱会",
+ //"分类名称替换词": "0&1&2&3&4&5&6&7&8&10&11&12&1315&16&17&18&19&20&21&22&23&24&25&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42",
+ "筛选数据": {},
+ "分类截取模式": "1",
+ "分类列表数组规则": ".ul-imgtxt2&&li",
+ "分类片单是否Jsoup写法": "1",
+ "分类片单标题": "h3&&Text",
+ "分类片单链接": "a&&href",
+ "分类片单图片": "img&&src",
+ "分类片单副标题": "span,-1--a&&Text!更新时间:",
+ "分类片单链接加前缀": "https://www.bt-tt.com",
+ "分类片单链接加后缀": "",
+ "搜索请求头参数": "User-Agent$PC_UA",
+ "搜索链接": "https://www.bt-tt.com/e/search/;post",
+ "POST请求数据": "show=title,newstext&keyboard={wd}&searchtype=影视搜索",
+ "搜索截取模式": "1",
+ "搜索列表数组规则": ".ul-imgtxt2&&li",
+ "搜索片单是否Jsoup写法": "1",
+ "搜索片单图片": "img&&src",
+ "搜索片单标题": "h3&&Text",
+ "搜索片单链接": "a&&href",
+ "搜索片单副标题": "span,-1--a&&Text!更新时间:",
+ "搜索片单链接加前缀": "https://www.bt-tt.com",
+ "搜索片单链接加后缀": "",
+ "链接是否直接播放": "0",
+ "直接播放链接加前缀": "",
+ "直接播放链接加后缀": "",
+ "直接播放直链视频请求头": "",
+ "详情是否Jsoup写法": "0",
+ "类型详情": "◎类 别&&
",
+ "年代详情": "◎年 代&&
",
+ "地区详情": "◎产 地&&
",
+ "演员详情": "",
+ "简介详情": "",
+ "线路列表数组规则": "",
+ "线路标题": "",
+ "播放列表数组规则": "body&&.container",
+ "选集列表数组规则": "a[href^=magnet]||a[href^=ed2K]",
+ "选集标题链接是否Jsoup写法": "1",
+ "选集标题": "Text",
+ "选集链接": "a&&href",
+ "是否反转选集序列": "0",
+ "选集链接加前缀": "",
+ "选集链接加后缀": "",
+ "分析MacPlayer": "0",
+ "是否开启手动嗅探": "0",
+ "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv",
+ "手动嗅探视频链接过滤词": ".html"
+}
diff --git a/lib/clash2singbox.gz b/lib/clash2singbox.gz
new file mode 100644
index 0000000..e1491e4
Binary files /dev/null and b/lib/clash2singbox.gz differ
diff --git a/lib/clash2singbox.md5 b/lib/clash2singbox.md5
new file mode 100644
index 0000000..4828b15
--- /dev/null
+++ b/lib/clash2singbox.md5
@@ -0,0 +1 @@
+37d3cc41a50b82ea371733aeba5afa7f
diff --git a/lib/douban.json b/lib/douban.json
new file mode 100644
index 0000000..2e67d52
--- /dev/null
+++ b/lib/douban.json
@@ -0,0 +1,1168 @@
+{
+ "hot_gaia": [
+ {
+ "key": "sort",
+ "name": "排序",
+ "value": [
+ {
+ "n": "热度",
+ "v": "recommend"
+ },
+ {
+ "n": "最新",
+ "v": "time"
+ },
+ {
+ "n": "评分",
+ "v": "rank"
+ }
+ ]
+ },
+ {
+ "key": "area",
+ "name": "地区",
+ "value": [
+ {
+ "n": "全部",
+ "v": "全部"
+ },
+ {
+ "n": "华语",
+ "v": "华语"
+ },
+ {
+ "n": "欧美",
+ "v": "欧美"
+ },
+ {
+ "n": "韩国",
+ "v": "韩国"
+ },
+ {
+ "n": "日本",
+ "v": "日本"
+ }
+ ]
+ }
+ ],
+ "tv_hot": [
+ {
+ "key": "type",
+ "name": "分类",
+ "value": [
+ {
+ "n": "综合",
+ "v": "tv_hot"
+ },
+ {
+ "n": "国产剧",
+ "v": "tv_domestic"
+ },
+ {
+ "n": "欧美剧",
+ "v": "tv_american"
+ },
+ {
+ "n": "日剧",
+ "v": "tv_japanese"
+ },
+ {
+ "n": "韩剧",
+ "v": "tv_korean"
+ },
+ {
+ "n": "动画",
+ "v": "tv_animation"
+ }
+ ]
+ }
+ ],
+ "show_hot": [
+ {
+ "key": "type",
+ "name": "分类",
+ "value": [
+ {
+ "n": "综合",
+ "v": "show_hot"
+ },
+ {
+ "n": "国内",
+ "v": "show_domestic"
+ },
+ {
+ "n": "国外",
+ "v": "show_foreign"
+ }
+ ]
+ }
+ ],
+ "movie": [
+ {
+ "key": "类型",
+ "name": "类型",
+ "value": [
+ {
+ "n": "全部类型",
+ "v": ""
+ },
+ {
+ "n": "喜剧",
+ "v": "喜剧"
+ },
+ {
+ "n": "爱情",
+ "v": "爱情"
+ },
+ {
+ "n": "动作",
+ "v": "动作"
+ },
+ {
+ "n": "科幻",
+ "v": "科幻"
+ },
+ {
+ "n": "动画",
+ "v": "动画"
+ },
+ {
+ "n": "悬疑",
+ "v": "悬疑"
+ },
+ {
+ "n": "犯罪",
+ "v": "犯罪"
+ },
+ {
+ "n": "惊悚",
+ "v": "惊悚"
+ },
+ {
+ "n": "冒险",
+ "v": "冒险"
+ },
+ {
+ "n": "音乐",
+ "v": "音乐"
+ },
+ {
+ "n": "历史",
+ "v": "历史"
+ },
+ {
+ "n": "奇幻",
+ "v": "奇幻"
+ },
+ {
+ "n": "恐怖",
+ "v": "恐怖"
+ },
+ {
+ "n": "战争",
+ "v": "战争"
+ },
+ {
+ "n": "传记",
+ "v": "传记"
+ },
+ {
+ "n": "歌舞",
+ "v": "歌舞"
+ },
+ {
+ "n": "武侠",
+ "v": "武侠"
+ },
+ {
+ "n": "情色",
+ "v": "情色"
+ },
+ {
+ "n": "灾难",
+ "v": "灾难"
+ },
+ {
+ "n": "西部",
+ "v": "西部"
+ },
+ {
+ "n": "纪录片",
+ "v": "纪录片"
+ },
+ {
+ "n": "短片",
+ "v": "短片"
+ }
+ ]
+ },
+ {
+ "key": "地区",
+ "name": "地区",
+ "value": [
+ {
+ "n": "全部地区",
+ "v": ""
+ },
+ {
+ "n": "华语",
+ "v": "华语"
+ },
+ {
+ "n": "欧美",
+ "v": "欧美"
+ },
+ {
+ "n": "韩国",
+ "v": "韩国"
+ },
+ {
+ "n": "日本",
+ "v": "日本"
+ },
+ {
+ "n": "中国大陆",
+ "v": "中国大陆"
+ },
+ {
+ "n": "美国",
+ "v": "美国"
+ },
+ {
+ "n": "中国香港",
+ "v": "中国香港"
+ },
+ {
+ "n": "中国台湾",
+ "v": "中国台湾"
+ },
+ {
+ "n": "英国",
+ "v": "英国"
+ },
+ {
+ "n": "法国",
+ "v": "法国"
+ },
+ {
+ "n": "德国",
+ "v": "德国"
+ },
+ {
+ "n": "意大利",
+ "v": "意大利"
+ },
+ {
+ "n": "西班牙",
+ "v": "西班牙"
+ },
+ {
+ "n": "印度",
+ "v": "印度"
+ },
+ {
+ "n": "泰国",
+ "v": "泰国"
+ },
+ {
+ "n": "俄罗斯",
+ "v": "俄罗斯"
+ },
+ {
+ "n": "加拿大",
+ "v": "加拿大"
+ },
+ {
+ "n": "澳大利亚",
+ "v": "澳大利亚"
+ },
+ {
+ "n": "爱尔兰",
+ "v": "爱尔兰"
+ },
+ {
+ "n": "瑞典",
+ "v": "瑞典"
+ },
+ {
+ "n": "巴西",
+ "v": "巴西"
+ },
+ {
+ "n": "丹麦",
+ "v": "丹麦"
+ }
+ ]
+ },
+ {
+ "key": "sort",
+ "name": "排序",
+ "value": [
+ {
+ "n": "近期热度",
+ "v": "T"
+ },
+ {
+ "n": "首映时间",
+ "v": "R"
+ },
+ {
+ "n": "高分优先",
+ "v": "S"
+ }
+ ]
+ },
+ {
+ "key": "年代",
+ "name": "年代",
+ "value": [
+ {
+ "n": "全部年代",
+ "v": ""
+ },
+ {
+ "n": "2024",
+ "v": "2024"
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2010年代",
+ "v": "2010年代"
+ },
+ {
+ "n": "2000年代",
+ "v": "2000年代"
+ },
+ {
+ "n": "90年代",
+ "v": "90年代"
+ },
+ {
+ "n": "80年代",
+ "v": "80年代"
+ },
+ {
+ "n": "70年代",
+ "v": "70年代"
+ },
+ {
+ "n": "60年代",
+ "v": "60年代"
+ },
+ {
+ "n": "更早",
+ "v": "更早"
+ }
+ ]
+ }
+ ],
+ "tv": [
+ {
+ "key": "类型",
+ "name": "类型",
+ "value": [
+ {
+ "n": "不限",
+ "v": ""
+ },
+ {
+ "n": "电视剧",
+ "v": "电视剧"
+ },
+ {
+ "n": "综艺",
+ "v": "综艺"
+ }
+ ]
+ },
+ {
+ "key": "电视剧形式",
+ "name": "电视剧形式",
+ "value": [
+ {
+ "n": "不限",
+ "v": ""
+ },
+ {
+ "n": "喜剧",
+ "v": "喜剧"
+ },
+ {
+ "n": "爱情",
+ "v": "爱情"
+ },
+ {
+ "n": "悬疑",
+ "v": "悬疑"
+ },
+ {
+ "n": "动画",
+ "v": "动画"
+ },
+ {
+ "n": "武侠",
+ "v": "武侠"
+ },
+ {
+ "n": "古装",
+ "v": "古装"
+ },
+ {
+ "n": "家庭",
+ "v": "家庭"
+ },
+ {
+ "n": "犯罪",
+ "v": "犯罪"
+ },
+ {
+ "n": "科幻",
+ "v": "科幻"
+ },
+ {
+ "n": "恐怖",
+ "v": "恐怖"
+ },
+ {
+ "n": "历史",
+ "v": "历史"
+ },
+ {
+ "n": "战争",
+ "v": "战争"
+ },
+ {
+ "n": "动作",
+ "v": "动作"
+ },
+ {
+ "n": "冒险",
+ "v": "冒险"
+ },
+ {
+ "n": "传记",
+ "v": "传记"
+ },
+ {
+ "n": "剧情",
+ "v": "剧情"
+ },
+ {
+ "n": "奇幻",
+ "v": "奇幻"
+ },
+ {
+ "n": "惊悚",
+ "v": "惊悚"
+ },
+ {
+ "n": "灾难",
+ "v": "灾难"
+ },
+ {
+ "n": "歌舞",
+ "v": "歌舞"
+ },
+ {
+ "n": "音乐",
+ "v": "音乐"
+ }
+ ]
+ },
+ {
+ "key": "综艺形式",
+ "name": "综艺形式",
+ "value": [
+ {
+ "n": "不限",
+ "v": ""
+ },
+ {
+ "n": "真人秀",
+ "v": "真人秀"
+ },
+ {
+ "n": "脱口秀",
+ "v": "脱口秀"
+ },
+ {
+ "n": "音乐",
+ "v": "音乐"
+ },
+ {
+ "n": "歌舞",
+ "v": "歌舞"
+ }
+ ]
+ },
+ {
+ "key": "地区",
+ "name": "地区",
+ "value": [
+ {
+ "n": "全部地区",
+ "v": ""
+ },
+ {
+ "n": "华语",
+ "v": "华语"
+ },
+ {
+ "n": "欧美",
+ "v": "欧美"
+ },
+ {
+ "n": "国外",
+ "v": "国外"
+ },
+ {
+ "n": "韩国",
+ "v": "韩国"
+ },
+ {
+ "n": "日本",
+ "v": "日本"
+ },
+ {
+ "n": "中国大陆",
+ "v": "中国大陆"
+ },
+ {
+ "n": "中国香港",
+ "v": "中国香港"
+ },
+ {
+ "n": "美国",
+ "v": "美国"
+ },
+ {
+ "n": "英国",
+ "v": "英国"
+ },
+ {
+ "n": "泰国",
+ "v": "泰国"
+ },
+ {
+ "n": "中国台湾",
+ "v": "中国台湾"
+ },
+ {
+ "n": "意大利",
+ "v": "意大利"
+ },
+ {
+ "n": "法国",
+ "v": "法国"
+ },
+ {
+ "n": "德国",
+ "v": "德国"
+ },
+ {
+ "n": "西班牙",
+ "v": "西班牙"
+ },
+ {
+ "n": "俄罗斯",
+ "v": "俄罗斯"
+ },
+ {
+ "n": "瑞典",
+ "v": "瑞典"
+ },
+ {
+ "n": "巴西",
+ "v": "巴西"
+ },
+ {
+ "n": "丹麦",
+ "v": "丹麦"
+ },
+ {
+ "n": "印度",
+ "v": "印度"
+ },
+ {
+ "n": "加拿大",
+ "v": "加拿大"
+ },
+ {
+ "n": "爱尔兰",
+ "v": "爱尔兰"
+ },
+ {
+ "n": "澳大利亚",
+ "v": "澳大利亚"
+ }
+ ]
+ },
+ {
+ "key": "sort",
+ "name": "排序",
+ "value": [
+ {
+ "n": "近期热度",
+ "v": "T"
+ },
+ {
+ "n": "首播时间",
+ "v": "R"
+ },
+ {
+ "n": "高分优先",
+ "v": "S"
+ }
+ ]
+ },
+ {
+ "key": "年代",
+ "name": "年代",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2024",
+ "v": "2024"
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2010年代",
+ "v": "2010年代"
+ },
+ {
+ "n": "2000年代",
+ "v": "2000年代"
+ },
+ {
+ "n": "90年代",
+ "v": "90年代"
+ },
+ {
+ "n": "80年代",
+ "v": "80年代"
+ },
+ {
+ "n": "70年代",
+ "v": "70年代"
+ },
+ {
+ "n": "60年代",
+ "v": "60年代"
+ },
+ {
+ "n": "更早",
+ "v": "更早"
+ }
+ ]
+ },
+ {
+ "key": "平台",
+ "name": "平台",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "腾讯视频",
+ "v": "腾讯视频"
+ },
+ {
+ "n": "爱奇艺",
+ "v": "爱奇艺"
+ },
+ {
+ "n": "优酷",
+ "v": "优酷"
+ },
+ {
+ "n": "湖南卫视",
+ "v": "湖南卫视"
+ },
+ {
+ "n": "Netflix",
+ "v": "Netflix"
+ },
+ {
+ "n": "HBO",
+ "v": "HBO"
+ },
+ {
+ "n": "BBC",
+ "v": "BBC"
+ },
+ {
+ "n": "NHK",
+ "v": "NHK"
+ },
+ {
+ "n": "CBS",
+ "v": "CBS"
+ },
+ {
+ "n": "NBC",
+ "v": "NBC"
+ },
+ {
+ "n": "tvN",
+ "v": "tvN"
+ }
+ ]
+ }
+ ],
+ "rank_list_movie": [
+ {
+ "key": "榜单",
+ "name": "榜单",
+ "value": [
+ {
+ "n": "实时热门电影",
+ "v": "movie_real_time_hotest"
+ },
+ {
+ "n": "一周口碑电影榜",
+ "v": "movie_weekly_best"
+ },
+ {
+ "n": "豆瓣电影Top250",
+ "v": "movie_top250"
+ }
+ ]
+ }
+ ],
+ "rank_list_tv": [
+ {
+ "key": "榜单",
+ "name": "榜单",
+ "value": [
+ {
+ "n": "实时热门电视",
+ "v": "tv_real_time_hotest"
+ },
+ {
+ "n": "华语口碑剧集榜",
+ "v": "tv_chinese_best_weekly"
+ },
+ {
+ "n": "全球口碑剧集榜",
+ "v": "tv_global_best_weekly"
+ },
+ {
+ "n": "国内口碑综艺榜",
+ "v": "show_chinese_best_weekly"
+ },
+ {
+ "n": "国外口碑综艺榜",
+ "v": "show_global_best_weekly"
+ }
+ ]
+ }
+ ],
+ "book_hot": [
+ {
+ "key": "type",
+ "name": "分类",
+ "value": [
+ {
+ "n": "综合",
+ "v": "book_hot"
+ },
+ {
+ "n": "豆瓣阅读TOP250",
+ "v": "book_top250"
+ },
+ {
+ "n": "一周热门图书榜",
+ "v": "EC645NBAI"
+ },
+ {
+ "n": "悬疑推理小说一周热门榜",
+ "v": "ECHU5PTUY"
+ },
+ {
+ "n": "科幻奇幻小说一周热门榜",
+ "v": "ECEA5SP5A"
+ },
+ {
+ "n": "绘本绘画一周热门榜",
+ "v": "EC5U5NVYQ"
+ },
+ {
+ "n": "商业经管图书一周热门榜",
+ "v": "ECE45ORCA"
+ },
+ {
+ "n": "影视戏剧图书一周热门榜",
+ "v": "ECWU5QFUI"
+ },
+ {
+ "n": "艺术设计图书一周热门榜",
+ "v": "ECI45ZBNY"
+ },
+ {
+ "n": "科学新知图书一周热门榜",
+ "v": "ECIM5L2YI"
+ },
+ {
+ "n": "社会纪实图书一周热门榜",
+ "v": "ECQU5U7HQ"
+ },
+ {
+ "n": "历史文化图书一周热门榜",
+ "v": "ECIE5S2IQ"
+ },
+ {
+ "n": "文学图书一周热门榜",
+ "v": "ECRM5OCGI"
+ },
+ {
+ "n": "小说一周热门榜",
+ "v": "ECF45REBQ"
+ }
+ ]
+ }
+ ],
+ "book": [
+ {
+ "key": "类型",
+ "name": "类型",
+ "value": [
+ {
+ "n": "类型",
+ "v": ""
+ },
+ {
+ "n": "文学",
+ "v": "文学"
+ },
+ {
+ "n": "流行",
+ "v": "流行"
+ },
+ {
+ "n": "文化",
+ "v": "文化"
+ },
+ {
+ "n": "生活",
+ "v": "生活"
+ },
+ {
+ "n": "经营",
+ "v": "经营"
+ },
+ {
+ "n": "科技",
+ "v": "科技"
+ }
+ ]
+ },
+ {
+ "key": "文学",
+ "name": "文学",
+ "value": [
+ {
+ "n": "文学",
+ "v": "文学"
+ },
+ {
+ "n": "小说",
+ "v": "小说"
+ },
+ {
+ "n": "随笔",
+ "v": "随笔"
+ },
+ {
+ "n": "日本文学",
+ "v": "日本文学"
+ },
+ {
+ "n": "散文",
+ "v": "散文"
+ },
+ {
+ "n": "诗歌",
+ "v": "诗歌"
+ },
+ {
+ "n": "童话",
+ "v": "童话"
+ },
+ {
+ "n": "名著",
+ "v": "名著"
+ },
+ {
+ "n": "港台",
+ "v": "港台"
+ }
+ ]
+ },
+ {
+ "key": "流行",
+ "name": "流行",
+ "value": [
+ {
+ "n": "流行",
+ "v": "流行"
+ },
+ {
+ "n": "漫画",
+ "v": "漫画"
+ },
+ {
+ "n": "推理",
+ "v": "推理"
+ },
+ {
+ "n": "绘本",
+ "v": "绘本"
+ },
+ {
+ "n": "科幻",
+ "v": "科幻"
+ },
+ {
+ "n": "青春",
+ "v": "青春"
+ },
+ {
+ "n": "言情",
+ "v": "言情"
+ },
+ {
+ "n": "奇幻",
+ "v": "奇幻"
+ },
+ {
+ "n": "武侠",
+ "v": "武侠"
+ }
+ ]
+ },
+ {
+ "key": "文化",
+ "name": "文化",
+ "value": [
+ {
+ "n": "文化",
+ "v": "文化"
+ },
+ {
+ "n": "历史",
+ "v": "历史"
+ },
+ {
+ "n": "哲学",
+ "v": "哲学"
+ },
+ {
+ "n": "传记",
+ "v": "传记"
+ },
+ {
+ "n": "设计",
+ "v": "设计"
+ },
+ {
+ "n": "电影",
+ "v": "电影"
+ },
+ {
+ "n": "建筑",
+ "v": "建筑"
+ },
+ {
+ "n": "回忆录",
+ "v": "回忆录"
+ },
+ {
+ "n": "音乐",
+ "v": "音乐"
+ }
+ ]
+ },
+ {
+ "key": "生活",
+ "name": "生活",
+ "value": [
+ {
+ "n": "生活",
+ "v": "生活"
+ },
+ {
+ "n": "旅行",
+ "v": "旅行"
+ },
+ {
+ "n": "励志",
+ "v": "励志"
+ },
+ {
+ "n": "教育",
+ "v": "教育"
+ },
+ {
+ "n": "职场",
+ "v": "职场"
+ },
+ {
+ "n": "美食",
+ "v": "美食"
+ },
+ {
+ "n": "灵修",
+ "v": "灵修"
+ },
+ {
+ "n": "健康",
+ "v": "健康"
+ },
+ {
+ "n": "家居",
+ "v": "家居"
+ }
+ ]
+ },
+ {
+ "key": "经营",
+ "name": "经营",
+ "value": [
+ {
+ "n": "经营",
+ "v": "经营"
+ },
+ {
+ "n": "经济学",
+ "v": "经济学"
+ },
+ {
+ "n": "管理",
+ "v": "管理"
+ },
+ {
+ "n": "商业",
+ "v": "商业"
+ },
+ {
+ "n": "金融",
+ "v": "金融"
+ },
+ {
+ "n": "营销",
+ "v": "营销"
+ },
+ {
+ "n": "理财",
+ "v": "理财"
+ },
+ {
+ "n": "股票",
+ "v": "股票"
+ },
+ {
+ "n": "企业史",
+ "v": "企业史"
+ }
+ ]
+ },
+ {
+ "key": "科技",
+ "name": "科技",
+ "value": [
+ {
+ "n": "科技",
+ "v": "科技"
+ },
+ {
+ "n": "科普",
+ "v": "科普"
+ },
+ {
+ "n": "互联网",
+ "v": "互联网"
+ },
+ {
+ "n": "编程",
+ "v": "编程"
+ },
+ {
+ "n": "交互设计",
+ "v": "交互设计"
+ },
+ {
+ "n": "算法",
+ "v": "算法"
+ },
+ {
+ "n": "通信",
+ "v": "通信"
+ },
+ {
+ "n": "神经网络",
+ "v": "神经网络"
+ }
+ ]
+ },
+ {
+ "key": "sort",
+ "name": "排序",
+ "value": [
+ {
+ "n": "近期热度",
+ "v": "T"
+ },
+ {
+ "n": "首播时间",
+ "v": "R"
+ },
+ {
+ "n": "高分优先",
+ "v": "S"
+ }
+ ]
+ }
+ ]
+}
diff --git a/lib/drpy.js b/lib/drpy.js
new file mode 100644
index 0000000..e0f05f3
--- /dev/null
+++ b/lib/drpy.js
@@ -0,0 +1,2676 @@
+// import 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/es6py.js';
+// import {是否正版,urlDeal,setResult,setResult2,setHomeResult,maoss,urlencode} from 'http://192.168.10.103:5705/libs/es6py.js';
+// import 'http://192.168.1.124:5705/libs/es6py.js';
+import cheerio from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js';
+// import cheerio from 'http://192.168.10.103:5705/libs/cheerio.min.js';
+import 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js';
+import 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/drT.js';
+import 模板 from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js';
+import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js'
+// import 'http://192.168.10.103:5705/libs/drT.js';
+// import muban from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js';
+// import muban from 'http://192.168.10.103:5705/admin/view/模板.js';
+
+// const key = 'drpy_zbk';
+// eval(req('http://192.168.1.124:5705/libs/es6py.js').content);
+function init_test(){
+ // console.log(typeof(CryptoJS));
+ console.log("init_test_start");
+ console.log("当前版本号:"+VERSION);
+ console.log(RKEY);
+ console.log(JSON.stringify(rule));
+ // console.log('123456的md5值是:'+md5('123456'));
+ // let aa = base64Encode('编码测试一下')
+ // log(aa);
+ // let bb = base64Decode(aa);
+ // log('bb:'+bb);
+ // clearItem(RULE_CK);
+ // console.log(JSON.stringify(rule));
+ // console.log(request('https://www.baidu.com',{withHeaders:true}));
+ // console.log(request('https://www.baidu.com/favicon.ico',{toBase64:true}));
+ // require('http://192.168.10.99:5705/txt/pluto/drT.js');
+ // console.log(typeof(drT));
+ // console.log(drT.renderText('{{fl.cate}},hi, {{fl}}哈哈.{{fl}}',{sort: 1,cate:'movie'},'fl'));
+ console.log("init_test_end");
+}
+
+/**
+ * 执行预处理代码
+ */
+function pre(){
+ if(typeof(rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()){
+ let code = rule.预处理.trim();
+ console.log("执行预处理代码:"+code);
+ if(code.startsWith('js:')){
+ code = code.replace('js:','');
+ }
+ try {
+ // code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie
+ // 直接操作 rule_fetch_params 这个变量 .headers.Cookie
+ eval(code);
+ }catch (e) {
+ console.log('预处理执行失败:'+e.message);
+ }
+ }
+}
+
+let rule = {};
+const VERSION = 'drpy1 3.9.49beta36 202400414';
+/** 已知问题记录
+ * 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
+ * Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
+ * 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend(合并文件了可以不管了)
+ * 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?)
+ * 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印(貌似不影响使用)
+ * 5.需要实现 stringify 函数,比起JSON.stringify函数,它会原封不动保留中文不会编码unicode
+ * 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了)
+ * 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略)
+ * done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd}
+ * * 电脑看日志调试
+ adb tcpip 5555
+ adb connect 192.168.10.192
+ adb devices -l
+ adb logcat -c
+ adb logcat | grep -i QuickJS
+ adb logcat -c -b events
+ adb logcat -c -b main -b events -b radio -b system
+ adb logcat > 2.log DRPY:E | grep -i QuickJS
+ * **/
+
+
+/*** 以下是内置变量和解析方法 **/
+const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
+const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
+const UA = 'Mozilla/5.0';
+const UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36';
+const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
+const RULE_CK = 'cookie'; // 源cookie的key值
+// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识
+const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态';
+const TAB_EXCLUDE = '猜你|喜欢|下载|剧情|热播';
+const OCR_RETRY = 3;//ocr验证重试次数
+// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口
+// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口
+// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口
+// const OCR_API = 'http://cms.nokia.press:5707/parse/ocr';//ocr在线识别接口
+const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口
+if(typeof(MY_URL)==='undefined'){
+ var MY_URL; // 全局注入变量,pd函数需要
+}
+var HOST;
+var RKEY; // 源的唯一标识
+var fetch;
+var print;
+var log;
+var rule_fetch_params;
+var fetch_params; // 每个位置单独的
+var oheaders;
+// var play_url; // 二级详情页注入变量,为了适配js模式0 (不在这里定义了,直接二级里定义了个空字符串)
+var _pdfh;
+var _pdfa;
+var _pd;
+// const DOM_CHECK_ATTR = ['url', 'src', 'href', 'data-original', 'data-src'];
+const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/;
+// 过滤特殊链接,不走urlJoin
+const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/;
+const SELECT_REGEX = /:eq|:lt|:gt|#/g;
+const SELECT_REGEX_A = /:eq|:lt|:gt/g;
+
+/**
+es6py扩展
+ */
+if (typeof Object.assign != 'function') {
+ Object.assign = function () {
+ var target = arguments[0];
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+}
+if (!String.prototype.includes) {
+ String.prototype.includes = function (search, start) {
+ if (typeof start !== 'number') {
+ start = 0;
+ }
+
+ if (start + search.length > this.length) {
+ return false;
+ } else {
+ return this.indexOf(search, start) !== -1;
+ }
+ };
+}
+
+if (!Array.prototype.includes) {
+ Object.defineProperty(Array.prototype, 'includes', {
+ value: function (searchElement, fromIndex) {
+
+ if (this == null) {//this是空或者未定义,抛出错误
+ throw new TypeError('"this" is null or not defined');
+ }
+
+ var o = Object(this);//将this转变成对象
+ var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0
+
+ if (len === 0) {//length为0直接返回false未找到目标值
+ return false;
+ }
+
+ var n = fromIndex | 0;//查找起始索引
+ var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引,因为有可能是负值
+
+ while (k < len) {//从起始索引处开始循环
+ if (o[k] === searchElement) {//如果某一位置与寻找目标相等,返回true,找到了
+ return true;
+ }
+ k++;
+ }
+ return false;//未找到,返回false
+ }
+ });
+}
+if (typeof String.prototype.startsWith != 'function') {
+ String.prototype.startsWith = function (prefix){
+ return this.slice(0, prefix.length) === prefix;
+ };
+}
+if (typeof String.prototype.endsWith != 'function') {
+ String.prototype.endsWith = function(suffix) {
+ return this.indexOf(suffix, this.length - suffix.length) !== -1;
+ };
+}
+Object.prototype.myValues=function(obj){
+ if(obj ==null) {
+ throw new TypeError("Cannot convert undefined or null to object");
+ }
+ var res=[]
+ for(var k in obj){
+ if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
+ res.push(obj[k]);
+ }
+ }
+ return res;
+}
+if (typeof Object.prototype.values != 'function') {
+ Object.prototype.values=function(obj){
+ if(obj ==null) {
+ throw new TypeError("Cannot convert undefined or null to object");
+ }
+ var res=[]
+ for(var k in obj){
+ if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
+ res.push(obj[k]);
+ }
+ }
+ return res;
+ }
+}
+if (typeof Array.prototype.join != 'function') {
+ Array.prototype.join = function (emoji) {
+ // emoji = emoji||',';
+ emoji = emoji||'';
+ let self = this;
+ let str = "";
+ let i = 0;
+ if (!Array.isArray(self)) {throw String(self)+'is not Array'}
+ if(self.length===0){return ''}
+ if (self.length === 1){return String(self[0])}
+ i = 1;
+ str = this[0];
+ for (; i < self.length; i++) {
+ str += String(emoji)+String(self[i]);
+ }
+ return str;
+ };
+}
+
+String.prototype.rstrip = function (chars) {
+ let regex = new RegExp(chars + "$");
+ return this.replace(regex, "");
+};
+
+Array.prototype.append = Array.prototype.push;
+String.prototype.strip = String.prototype.trim;
+function 是否正版(vipUrl){
+ let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv');
+ return flag.test(vipUrl);
+}
+function urlDeal(vipUrl){
+ if(!vipUrl){
+ return ''
+ }
+ if(!是否正版(vipUrl)){
+ return vipUrl
+ }
+ if(!/miguvideo/.test(vipUrl)){
+ vipUrl=vipUrl.split('#')[0].split('?')[0];
+ }
+ return vipUrl
+}
+function setResult(d){
+ if(!Array.isArray(d)){
+ return []
+ }
+ VODS = [];
+ // print(d);
+ d.forEach(function (it){
+ let obj = {
+ vod_id:it.url||'',
+ vod_name: it.title||'',
+ vod_remarks: it.desc||'',
+ vod_content: it.content||'',
+ vod_pic: it.pic_url||it.img||'',
+ };
+ let keys = Object.keys(it);
+ if(keys.includes('tname')){
+ obj.type_name = it.tname||'';
+ }
+ if(keys.includes('tid')){
+ obj.type_id = it.tid||'';
+ }
+ if(keys.includes('year')){
+ obj.vod_year = it.year||'';
+ }
+ if(keys.includes('actor')){
+ obj.vod_actor = it.actor||'';
+ }
+ if(keys.includes('director')){
+ obj.vod_director = it.director||'';
+ }
+ if(keys.includes('area')){
+ obj.vod_area = it.area||'';
+ }
+ VODS.push(obj);
+ });
+ return VODS
+}
+function setResult2(res){
+ VODS = res.list||[];
+ return VODS
+}
+function setHomeResult(res){
+ if(!res||typeof(res)!=='object'){
+ return []
+ }
+ return setResult(res.list);
+}
+// 猫了个咪
+function rc(js) {
+ if (js === 'maomi_aes.js') {
+ var a = CryptoJS.enc.Utf8.parse("625222f9149e961d");
+ var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");
+ return {
+ De: function (word) {
+ word = CryptoJS.enc.Hex.parse(word)
+ return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ },
+ En: function (word) {
+ // print(a);
+ // print(word);
+ var Encrypted = CryptoJS.AES.encrypt(word, a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ });
+ return Encrypted.ciphertext.toString();
+ }
+ };
+ }
+ return {};
+}
+
+// 千万不要用for in 推荐 forEach (for in 会打乱顺序)
+//猫函数
+function maoss(jxurl, ref, key) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ eval(getCryptoJS());
+ try {
+ var getVideoInfo = function (text) {
+ return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
+ };
+ var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key;
+ if (ref) {
+ var html = request(jxurl, {
+ headers: {
+ 'Referer': ref
+ }
+ });
+ } else {
+ var html = request(jxurl);
+ }
+ // print(html);
+ if (html.indexOf('&btwaf=') != -1) {
+ html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], {
+ headers: {
+ 'Referer': ref
+ }
+ })
+ }
+ var token_iv = html.split('_token = "')[1].split('"')[0];
+ var key = CryptoJS.enc.Utf8.parse(token_key);
+ var iv = CryptoJS.enc.Utf8.parse(token_iv);
+ // log("iv:"+iv);
+ // log(html);
+ // print(key);
+ // print(iv);
+ eval(html.match(/var config = {[\s\S]*?}/)[0] + '');
+ // config.url = config.url.replace(/,/g,'');
+ // print(config.url);
+ if (!config.url.startsWith('http')) {
+ //config.url = decodeURIComponent(AES(config.url, key, iv));
+ config.url = CryptoJS.AES.decrypt(config.url, key, {
+ iv: iv,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ }
+ return config.url;
+ } catch (e) {
+ return '';
+ }
+}
+
+function urlencode (str) {
+ str = (str + '').toString();
+ return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
+ replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
+}
+
+function base64Encode(text){
+ return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
+ // return text
+}
+
+function base64Decode(text){
+ return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text));
+ // return text
+}
+
+function md5(text) {
+ return CryptoJS.MD5(text).toString();
+}
+
+/**
+ * 字符串按指定编码
+ * @param input
+ * @param encoding
+ * @returns {*}
+ */
+function encodeStr(input,encoding){
+ encoding = encoding||'gbk';
+ if(encoding.startsWith('gb')){
+ const strTool = gbkTool();
+ input = strTool.encode(input);
+ }
+ return input
+}
+
+/**
+ * 字符串指定解码
+ * @param input
+ * @param encoding
+ * @returns {*}
+ */
+function decodeStr(input,encoding){
+ encoding = encoding||'gbk';
+ if(encoding.startsWith('gb')){
+ const strTool = gbkTool();
+ input = strTool.decode(input);
+ }
+ return input
+}
+
+function getCryptoJS(){
+ // return request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-hiker.js');
+ return 'console.log("CryptoJS已装载");'
+}
+
+// 封装的RSA加解密类
+const RSA = {
+ encode:function (data,key,option){
+ // log('encode');
+ if(typeof(rsaEncrypt)==='function'){
+ if(!option||typeof(option)!=='object'){
+ return rsaEncrypt(data,key);
+ }else{
+ return rsaEncrypt(data,key,option);
+ }
+ }else{
+ return false
+ }
+ },
+ decode:function (data,key,option){
+ // log('decode');
+ if(typeof(rsaDecrypt)==='function'){
+ if(!option||typeof(option)!=='object'){
+ return rsaDecrypt(data,key);
+ }else{
+ return rsaDecrypt(data,key,option);
+ }
+ }else{
+ return false
+ }
+ }
+};
+
+/**
+ * 获取壳子返回的代理地址
+ * @returns {string|*}
+ */
+function getProxyUrl(){
+ if(typeof(getProxy)==='function'){//判断壳子里有getProxy函数就执行取返回结果。否则取默认的本地
+ return getProxy(true)
+ }else{
+ return 'http://127.0.0.1:9978/proxy?do=js'
+ }
+}
+
+/**
+ * 强制正序算法
+ * @param lists 待正序列表
+ * @param key 正序键
+ * @param option 单个元素处理函数
+ * @returns {*}
+ */
+function forceOrder(lists,key,option){
+ let start = Math.floor(lists.length/2);
+ let end = Math.min(lists.length-1,start+1);
+ if(start >= end){
+ return lists;
+ }
+ let first = lists[start];
+ let second = lists[end];
+ if(key){
+ try {
+ first = first[key];
+ second = second[key];
+ }catch (e) {}
+ }
+ if(option && typeof(option)==='function'){
+ try {
+ first = option(first);
+ second = option(second);
+ }catch (e) {}
+ }
+ first+='';
+ second+='';
+ // console.log(first,second);
+ if(first.match(/(\d+)/)&&second.match(/(\d+)/)){
+ let num1 = Number(first.match(/(\d+)/)[1]);
+ let num2 = Number(second.match(/(\d+)/)[1]);
+ if (num1 > num2){
+ lists.reverse();
+ }
+ }
+ return lists
+}
+
+
+let VODS = [];// 一级或者搜索需要的数据列表
+let VOD = {};// 二级的单个数据
+let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
+let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']]
+globalThis.encodeUrl = urlencode;
+globalThis.urlencode = urlencode;
+
+
+
+/**
+ * url拼接
+ * @param fromPath 初始当前页面url
+ * @param nowPath 相对当前页面url
+ * @returns {*}
+ */
+function urljoin(fromPath, nowPath) {
+ fromPath = fromPath||'';
+ nowPath = nowPath||'';
+ return joinUrl(fromPath, nowPath);
+ // try {
+ // // import Uri from './uri.min.js';
+ // // var Uri = require('./uri.min.js');
+ // // eval(request('https://cdn.bootcdn.net/ajax/libs/URI.js/1.19.11/URI.min.js'));
+ // // let new_uri = URI(nowPath, fromPath);
+
+ // let new_uri = Uri(nowPath, fromPath);
+ // new_uri = new_uri.toString();
+ // // console.log(new_uri);
+ // // return fromPath + nowPath
+ // return new_uri
+ // }
+ // catch (e) {
+ // console.log('urljoin发生错误:'+e.message);
+ // if(nowPath.startsWith('http')){
+ // return nowPath
+ // }if(nowPath.startsWith('/')){
+ // return getHome(fromPath)+nowPath
+ // }
+ // return fromPath+nowPath
+ // }
+}
+var urljoin2 = urljoin;
+
+// 内置 pdfh,pdfa,pd
+const defaultParser = {
+ pdfh:pdfh,
+ pdfa:pdfa,
+ pd(html,parse,uri){
+ let ret = this.pdfh(html,parse);
+ if(typeof(uri)==='undefined'||!uri){
+ uri = '';
+ }
+ if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){
+ if(/http/.test(ret)){
+ ret = ret.substr(ret.indexOf('http'));
+ }else{
+ ret = urljoin(MY_URL,ret)
+ }
+ }
+ return ret
+ },
+};
+
+
+/**
+ * pdfh原版优化,能取style属性里的图片链接
+ * @param html 源码
+ * @param parse 解析表达式
+ * @returns {string|*}
+ */
+function pdfh2(html,parse){
+ let html2 = html;
+ try {
+ if(typeof(html)!=='string'){
+ html2 = html.rr(html.ele).toString();
+ }
+ }catch (e) {
+ print('html对象转文本发生了错误:'+e.message);
+ }
+ let result = defaultParser.pdfh(html2,parse);
+ let option = parse.includes('&&')?parse.split('&&').slice(-1)[0]:parse.split(' ').slice(-1)[0];
+ if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){
+ try {
+ result = result.match(/url\((.*?)\)/)[1];
+ // 2023/07/28新增 style取内部链接自动去除首尾单双引号
+ result = result.replace(/^['|"](.*)['|"]$/, "$1");
+ }catch (e) {}
+ }
+ return result
+}
+
+/**
+ * pdfa原版优化,可以转换jq的html对象
+ * @param html
+ * @param parse
+ * @returns {*}
+ */
+function pdfa2(html,parse){
+ let html2 = html;
+ try {
+ if(typeof(html)!=='string'){
+ html2 = html.rr(html.ele).toString();
+ }
+ }catch (e) {
+ print('html对象转文本发生了错误:'+e.message);
+ }
+ return defaultParser.pdfa(html2,parse);
+}
+
+/**
+ * pd原版方法重写-增加自动urljoin
+ * @param html
+ * @param parse
+ * @param uri
+ * @returns {*}
+ */
+function pd2(html,parse,uri){
+ let ret = pdfh2(html,parse);
+ if(typeof(uri)==='undefined'||!uri){
+ uri = '';
+ }
+ if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){
+ if(/http/.test(ret)){
+ ret = ret.substr(ret.indexOf('http'));
+ }else{
+ ret = urljoin(MY_URL,ret)
+ }
+ }
+ // MY_URL = getItem('MY_URL',MY_URL);
+ // console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`);
+ return ret
+}
+
+const parseTags = {
+ jsp:{
+ pdfh:pdfh2,
+ pdfa:pdfa2,
+ pd:pd2,
+ },
+ json:{
+ pdfh(html, parse) {
+ if (!parse || !parse.trim()){
+ return '';
+ }
+ if (typeof(html) === 'string'){
+ // print('jsonpath:pdfh字符串转dict');
+ html = JSON.parse(html);
+ }
+ parse = parse.trim();
+ if (!parse.startsWith('$.')){
+ parse = '$.' + parse;
+ }
+ parse = parse.split('||');
+ for (let ps of parse) {
+ let ret = cheerio.jp(ps, html);
+ if (Array.isArray(ret)){
+ ret = ret[0] || '';
+ } else{
+ ret = ret || ''
+ }
+ if (ret && typeof (ret) !== 'string'){
+ ret = ret.toString();
+ }
+ if(ret){
+ return ret
+ }
+ }
+ return '';
+ },
+ pdfa(html, parse) {
+ if (!parse || !parse.trim()){
+ return '';
+ }
+ if (typeof(html) === 'string'){
+ // print('jsonpath:pdfa字符串转dict');
+ html = JSON.parse(html);
+ }
+ parse = parse.trim()
+ if (!parse.startsWith('$.')){
+ parse = '$.' + parse;
+ }
+ let ret = cheerio.jp(parse, html);
+ if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1){
+ return ret[0] || []
+ }
+ return ret || []
+ },
+ pd(html,parse){
+ let ret = parseTags.json.pdfh(html,parse);
+ if(ret){
+ return urljoin(MY_URL,ret);
+ }
+ return ret
+ },
+ },
+ jq:{
+ pdfh(html, parse, base_url) {
+ if (!parse || !parse.trim()) {
+ return ''
+ }
+ let eleFind = typeof html === 'object';
+ let option = undefined;
+ if (eleFind && parse.startsWith('body&&')) {
+ parse = parse.substr(6);
+ if (parse.indexOf('&&') < 0) {
+ option = parse.trim();
+ parse = '*=*';
+ }
+ }
+ if (parse.indexOf('&&') > -1) {
+ let sp = parse.split('&&');
+ option = sp[sp.length - 1];
+ sp.splice(sp.length - 1);
+ if (sp.length > 1) {
+ for (let i in sp) {
+ //Javascript自定义Array.prototype干扰for-in循环
+ if(sp.hasOwnProperty(i)){
+ if (!SELECT_REGEX.test(sp[i])) {
+ sp[i] = sp[i] + ':eq(0)';
+ }
+ }
+ }
+ } else {
+ if (!SELECT_REGEX.test(sp[0])) {
+ sp[0] = sp[0] + ':eq(0)';
+ }
+ }
+ parse = sp.join(' ');
+ }
+ let result = '';
+ const $ = eleFind ? html.rr : cheerio.load(html);
+ let ret = eleFind ? ((parse === '*=*' || $(html.ele).is(parse)) ? html.ele : $(html.ele).find(parse)) : $(parse);
+ if (option) {
+ if (option === 'Text') {
+ result = $(ret).text();
+ }
+ else if (option === 'Html') {
+ result = $(ret).html();
+ }
+ else {
+ result = $(ret).attr(option);
+ if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){
+ try {
+ result = result.match(/url\((.*?)\)/)[1];
+ // 2023/07/28新增 style取内部链接自动去除首尾单双引号
+ result = result.replace(/^['|"](.*)['|"]$/, "$1");
+ }catch (e) {}
+ }
+ }
+ if (result && base_url && DOM_CHECK_ATTR.test(option) && !SPECIAL_URL.test(result)) {
+ if (/http/.test(result)) {
+ result = result.substr(result.indexOf('http'));
+ } else {
+ result = urljoin(base_url, result)
+ }
+ }
+ } else {
+ result = $(ret).toString();
+ }
+ return result;
+ },
+ pdfa(html, parse) {
+ if (!parse || !parse.trim()) {
+ print('!parse');
+ return [];
+ }
+ let eleFind = typeof html === 'object';
+ // print('parse前:'+parse);
+ if (parse.indexOf('&&') > -1) {
+ let sp = parse.split('&&');
+ for (let i in sp) {
+ if(sp.hasOwnProperty(i)){
+ if (!SELECT_REGEX_A.test(sp[i]) && i < sp.length - 1) {
+ if(sp[i]!=='body'){
+ // sp[i] = sp[i] + ':eq(0)';
+ sp[i] = sp[i] + ':first';
+ }
+ }
+ }
+ }
+ parse = sp.join(' ');
+ }
+ // print('parse后:'+parse);
+ const $ = eleFind ? html.rr : cheerio.load(html);
+ let ret = eleFind ? ($(html.ele).is(parse) ? html.ele : $(html.ele).find(parse)) : $(parse);
+ let result = [];
+ // print('outerHTML:');
+ // print($(ret[0]).prop("outerHTML"));
+ if (ret) {
+ ret.each(function (idx, ele) {
+ result.push({ rr: $, ele: ele });
+ // result.push({ rr: $, ele: $(ele).prop("outerHTML")}); // 性能贼差
+ });
+ }
+ return result;
+ },
+ pd(html,parse,uri){
+ return parseTags.jq.pdfh(html, parse, MY_URL);
+ },
+ },
+ getParse(p0){//非js开头的情况自动获取解析标签
+ if(p0.startsWith('jsp:')){
+ return this.jsp
+ }else if(p0.startsWith('json:')){
+ return this.json
+ }else if(p0.startsWith('jq:')){
+ return this.jq
+ }else {
+ return this.jq
+ }
+ }
+};
+
+const stringify = JSON.stringify;
+const jsp = parseTags.jsp;
+const jq = parseTags.jq;
+
+/*** 后台需要实现的java方法并注入到js中 ***/
+
+/**
+ * 读取本地文件->应用程序目录
+ * @param filePath
+ * @returns {string}
+ */
+function readFile(filePath){
+ filePath = filePath||'./uri.min.js';
+ var fd = os.open(filePath);
+ var buffer = new ArrayBuffer(1024);
+ var len = os.read(fd, buffer, 0, 1024);
+ console.log(len);
+ let text = String.fromCharCode.apply(null, new Uint8Array(buffer));
+ console.log(text);
+ return text
+}
+
+/**
+ * 处理返回的json数据
+ * @param html
+ * @returns {*}
+ */
+function dealJson(html) {
+ try {
+ // html = html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1];
+ html = html.trim();
+ if(!((html.startsWith('{') && html.endsWith('}'))||(html.startsWith('[') && html.endsWith(']')))){
+ html = '{'+html.match(/.*?\{(.*)\}/m)[1]+'}';
+ }
+ } catch (e) {
+ }
+ try {
+ html = JSON.parse(html);
+ }catch (e) {}
+ // console.log(typeof(html));
+ return html;
+}
+
+/**
+ * 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口)
+ * @type {{api: string, classification: (function(*=): string)}}
+ */
+var OcrApi={
+ api:OCR_API,
+ classification:function (img){ // img是byte类型,这里不方便搞啊
+ let code = '';
+ try {
+ // let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
+ // html = JSON.parse(html);
+ // code = html.url||'';
+ log('通过drpy_ocr验证码接口过验证...');
+ let html = request(OCR_API,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
+ code = html||'';
+ }catch (e) {}
+ return code
+ }
+};
+/**
+ * 验证码识别,暂未实现
+ * @param url 验证码图片链接
+ * @returns {string} 验证成功后的cookie
+ */
+function verifyCode(url){
+ let cnt = 0;
+ let host = getHome(url);
+ let cookie = '';
+ while (cnt < OCR_RETRY){
+ try{
+ // let obj = {headers:headers,timeout:timeout};
+ let yzm_url = `${host}/index.php/verify/index.html`;
+ console.log(`验证码链接:${yzm_url}`);
+ let hhtml = request(yzm_url,{withHeaders:true,toBase64:true},true);
+ let json = JSON.parse(hhtml);
+ if(!cookie){
+ // print(json);
+ let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie');
+ // cookie = json['set-cookie']?json['set-cookie'].split(';')[0]:'';
+ cookie = setCk?json[setCk].split(';')[0]:'';
+ }
+ // console.log(hhtml);
+ console.log('cookie:'+cookie);
+ let img = json.body;
+ // console.log(img);
+ let code = OcrApi.classification(img);
+ console.log(`第${cnt+1}次验证码识别结果:${code}`);
+ let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`;
+ console.log(submit_url);
+ let html = request(submit_url,{headers:{Cookie:cookie,'User-Agent':MOBILE_UA},'method':'POST'});
+ // console.log(html);
+ html = JSON.parse(html);
+ if(html.msg === 'ok'){
+ console.log(`第${cnt+1}次验证码提交成功`);
+ return cookie // 需要返回cookie
+ }else if(html.msg!=='ok'&&cnt+1>=OCR_RETRY){
+ cookie = ''; // 需要清空返回cookie
+ }
+ }catch (e) {
+ console.log(`第${cnt+1}次验证码提交失败:${e.message}`);
+ if(cnt+1>=OCR_RETRY){
+ cookie = '';
+ }
+ }
+ cnt+=1
+ }
+ return cookie
+}
+
+/**
+ * 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存
+ * @param k 键
+ * @param v 值
+ */
+function setItem(k,v){
+ local.set(RKEY,k,v);
+ console.log(`规则${RKEY}设置${k} => ${v}`)
+}
+
+/**
+ * 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里
+ * @param k 键
+ * @param v 值
+ * @returns {*}
+ */
+function getItem(k,v){
+ return local.get(RKEY,k) || v;
+}
+
+/**
+ * 删除数据库key对应的一条数据,并清除此key对应的内存缓存
+ * @param k
+ */
+function clearItem(k){
+ local.delete(RKEY,k);
+}
+
+/*** js自封装的方法 ***/
+
+/**
+ * 获取链接的host(带http协议的完整链接)
+ * @param url 任意一个正常完整的Url,自动提取根
+ * @returns {string}
+ */
+function getHome(url){
+ if(!url){
+ return ''
+ }
+ let tmp = url.split('//');
+ url = tmp[0] + '//' + tmp[1].split('/')[0];
+ try {
+ url = decodeURIComponent(url);
+ }catch (e) {}
+ return url
+}
+
+/**
+ * get参数编译链接,类似python params字典自动拼接
+ * @param url 访问链接
+ * @param obj 参数字典
+ * @returns {*}
+ */
+function buildUrl(url,obj){
+ obj = obj||{};
+ if(url.indexOf('?')<0){
+ url += '?'
+ }
+ let param_list = [];
+ let keys = Object.keys(obj);
+ keys.forEach(it=>{
+ param_list.push(it+'='+obj[it])
+ });
+ let prs = param_list.join('&');
+ if(keys.length > 0 && !url.endsWith('?')){
+ url += '&'
+ }
+ url+=prs;
+ return url
+}
+
+/**
+ * 远程依赖执行函数
+ * @param url 远程js地址
+ */
+function require(url){
+ eval(request(url));
+}
+/**
+ * 海阔网页请求函数完整封装
+ * @param url 请求链接
+ * @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false}
+ * @param ocr_flag 标识此flag是用于请求ocr识别的,自动过滤content-type指定编码
+ * @returns {string|string|DocumentFragment|*}
+ */
+function request(url,obj,ocr_flag){
+ ocr_flag = ocr_flag||false;
+ if(typeof(obj)==='undefined'||!obj||obj==={}){
+ if(!fetch_params||!fetch_params.headers){
+ let headers = {
+ 'User-Agent':MOBILE_UA,
+ };
+ if(rule.headers){
+ Object.assign(headers,rule.headers);
+ }
+ if(!fetch_params){
+ fetch_params = {};
+ }
+ fetch_params.headers = headers;
+ }
+ if(!fetch_params.headers.Referer){
+ fetch_params.headers.Referer = getHome(url)
+ }
+ obj = fetch_params;
+ }else{
+ let headers = obj.headers||{};
+ let keys = Object.keys(headers).map(it=>it.toLowerCase());
+ if(!keys.includes('user-agent')){
+ headers['User-Agent'] = MOBILE_UA;
+ }if(!keys.includes('referer')){
+ headers['Referer'] = getHome(url);
+ }
+ obj.headers = headers;
+ }
+ if(rule.encoding&&rule.encoding!=='utf-8'&&!ocr_flag){
+ if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
+ obj.headers["Content-Type"] = 'text/html; charset='+rule.encoding;
+ }
+ }
+ if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){
+ // let data = {};
+ // obj.body.split('&').forEach(it=>{
+ // data[it.split('=')[0]] = it.split('=')[1]
+ // });
+ // obj.data = data;
+ // delete obj.body
+
+ // 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form
+ if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
+ obj.headers["Content-Type"] = 'application/x-www-form-urlencoded; charset='+rule.encoding;
+ }
+ }else if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='object'){
+ obj.data = obj.body;
+ delete obj.body
+ }
+ if(!url){
+ return obj.withHeaders?'{}':''
+ }
+ if(obj.toBase64){ // 返回base64,用于请求图片
+ obj.buffer = 2;
+ delete obj.toBase64
+ }
+ if(obj.redirect===false){
+ obj.redirect = 0;
+ }
+ console.log(JSON.stringify(obj.headers));
+ // console.log('request:'+url+' obj:'+JSON.stringify(obj));
+ console.log('request:'+url+`|method:${obj.method||'GET'}|body:${obj.body||''}`);
+ let res = req(url, obj);
+ let html = res.content||'';
+ // console.log(html);
+ if(obj.withHeaders){
+ let htmlWithHeaders = res.headers;
+ htmlWithHeaders.body = html;
+ return JSON.stringify(htmlWithHeaders);
+ }else{
+ return html
+ }
+}
+
+/**
+ * 快捷post请求
+ * @param url 地址
+ * @param obj 对象
+ * @returns {string|DocumentFragment|*}
+ */
+function post(url,obj){
+ obj.method = 'POST';
+ return request(url,obj);
+}
+
+fetch = request;
+print = function (data){
+ data = data||'';
+ if(typeof(data)=='object'&&Object.keys(data).length>0){
+ try {
+ data = JSON.stringify(data);
+ console.log(data);
+ }catch (e) {
+ // console.log('print:'+e.message);
+ console.log(typeof(data)+':'+data.length);
+ return
+ }
+ }else if(typeof(data)=='object'&&Object.keys(data).length<1){
+ console.log('null object');
+ }else{
+ console.log(data);
+ }
+}
+log = print;
+/**
+ * 检查宝塔验证并自动跳过获取正确源码
+ * @param html 之前获取的html
+ * @param url 之前的来源url
+ * @param obj 来源obj
+ * @returns {string|DocumentFragment|*}
+ */
+function checkHtml(html,url,obj){
+ if(/\?btwaf=/.test(html)){
+ let btwaf = html.match(/btwaf(.*?)"/)[1];
+ url = url.split('#')[0]+'?btwaf'+btwaf;
+ print('宝塔验证访问链接:'+url);
+ html = request(url,obj);
+ }
+ return html
+}
+
+/**
+ * 带一次宝塔验证的源码获取
+ * @param url 请求链接
+ * @param obj 请求参数
+ * @returns {string|DocumentFragment}
+ */
+function getCode(url,obj){
+ let html = request(url,obj);
+ html = checkHtml(html,url,obj);
+ return html
+}
+
+/**
+ * 源rule专用的请求方法,自动注入cookie
+ * @param url 请求链接
+ * @returns {string|DocumentFragment}
+ */
+function getHtml(url){
+ let obj = {};
+ if(rule.headers){
+ obj.headers = rule.headers;
+ }
+ let cookie = getItem(RULE_CK,'');
+ if(cookie){
+ // log('有cookie:'+cookie);
+ if(obj.headers && ! Object.keys(obj.headers).map(it=>it.toLowerCase()).includes('cookie')){
+ log('历史无cookie,新增过验证后的cookie');
+ obj.headers['Cookie'] = cookie;
+ }else if(obj.headers && obj.headers.cookie && obj.headers.cookie!==cookie){
+ obj.headers['Cookie'] = cookie;
+ log('历史有小写过期的cookie,更新过验证后的cookie');
+ }else if(obj.headers && obj.headers.Cookie && obj.headers.Cookie!==cookie){
+ obj.headers['Cookie'] = cookie;
+ log('历史有大写过期的cookie,更新过验证后的cookie');
+ }else if(!obj.headers){
+ obj.headers = {Cookie:cookie};
+ log('历史无headers,更新过验证后的含cookie的headers');
+ }
+ }
+ let html = getCode(url,obj);
+ return html
+}
+
+/**
+ * 首页分类解析,筛选暂未实现
+ * @param homeObj 首页传参对象
+ * @returns {string}
+ */
+function homeParse(homeObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let classes = [];
+ if (homeObj.class_name && homeObj.class_url) {
+ let names = homeObj.class_name.split('&');
+ let urls = homeObj.class_url.split('&');
+ let cnt = Math.min(names.length, urls.length);
+ for (let i = 0; i < cnt; i++) {
+ classes.push({
+ 'type_id': urls[i],
+ 'type_name': names[i]
+ });
+ }
+ }
+
+ if (homeObj.class_parse) {
+ let p = homeObj.class_parse.split(';');
+ let _ps = parseTags.getParse(p[0]);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ MY_URL = rule.url;
+ if (p.length >= 3) { // 可以不写正则
+ try {
+ let html = getHtml(homeObj.MY_URL);
+ if (html) {
+ homeHtmlCache = html;
+ let list = _pdfa(html, p[0]);
+ if (list && list.length > 0) {
+ list.forEach((it,idex) => {
+ try {
+ let name = _pdfh(it, p[1]);
+ if (homeObj.cate_exclude && (new RegExp(homeObj.cate_exclude).test(name))) {
+ return;
+ }
+ // let url = pdfh(it, p[2]);
+ let url = _pd(it, p[2]);
+ if (p.length > 3 && p[3]) {
+ let exp = new RegExp(p[3]);
+ url = url.match(exp)[1];
+ }
+
+ classes.push({
+ 'type_id': url.trim(),
+ 'type_name': name.trim()
+ });
+ } catch (e) {
+ console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`);
+ }
+ });
+ }
+ }
+ } catch (e) {
+ console.log(e.message);
+ }
+
+ }
+ }
+ // 排除分类
+ classes = classes.filter(it=>!homeObj.cate_exclude || !(new RegExp(homeObj.cate_exclude).test(it.type_name)));
+ let resp = {
+ 'class': classes
+ };
+ if(homeObj.filter){
+ resp.filters = homeObj.filter;
+ }
+ console.log(JSON.stringify(resp));
+ return JSON.stringify(resp);
+
+}
+
+/**
+ * 推荐和搜索单字段继承一级
+ * @param p 推荐或搜索的解析分割;列表
+ * @param pn 自身列表序号
+ * @param pp 一级解析分割;列表
+ * @param ppn 继承一级序号
+ * @returns {*}
+ */
+function getPP(p, pn, pp, ppn){
+ try {
+ let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn]
+ return ps
+ }catch (e) {
+ return ''
+ }
+}
+
+/**
+ * 首页推荐列表解析
+ * @param homeVodObj
+ * @returns {string}
+ */
+function homeVodParse(homeVodObj){
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ MY_URL = homeVodObj.homeUrl;
+ // setItem('MY_URL',MY_URL);
+ console.log(MY_URL);
+ let t1 = (new Date()).getTime();
+ let p = homeVodObj.推荐;
+ print('p:'+p);
+ if(p==='*' && rule.一级){
+ p = rule.一级;
+ homeVodObj.double = false;
+ }
+ if(!p||typeof(p)!=='string'){
+ return '{}'
+ }
+ p = p.trim();
+ let pp = rule.一级.split(';');
+ if(p.startsWith('js:')){
+ const TYPE = 'home';
+ var input = MY_URL;
+ HOST = rule.host;
+ eval(p.replace('js:',''));
+ d = VODS;
+ }else {
+ p = p.split(';');
+ if (!homeVodObj.double && p.length < 5) {
+ return '{}'
+ } else if (homeVodObj.double && p.length < 6) {
+ return '{}'
+ }
+ let p0 = getPP(p,0,pp,0)
+ let _ps = parseTags.getParse(p0);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p0.startsWith('json:');
+ p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
+ // print(p[0]);
+ let html = homeHtmlCache || getHtml(MY_URL);
+ homeHtmlCache = undefined;
+ if(is_json){
+ // print('是json,开始处理');
+ html = dealJson(html);
+ }
+ try {
+ console.log('double:' + homeVodObj.double);
+ if (homeVodObj.double) {
+ let items = _pdfa(html, p0);
+ // console.log(items.length);
+ let p1 = getPP(p,1,pp,0);
+ let p2 = getPP(p,2,pp,1);
+ let p3 = getPP(p,3,pp,2);
+ let p4 = getPP(p,4,pp,3);
+ let p5 = getPP(p,5,pp,4);
+ let p6 = getPP(p,6,pp,5);
+ for (let item of items) {
+ // console.log(p[1]);
+ let items2 = _pdfa(item, p1);
+ // console.log(items2.length);
+ for (let item2 of items2) {
+ try {
+ let title = _pdfh(item2, p2);
+ let img = '';
+ try {
+ img = _pd(item2, p3);
+ } catch (e) {}
+ let desc = '';
+ try {
+ desc = _pdfh(item2, p4);
+ }catch (e) {}
+ let links = [];
+ for (let _p5 of p5.split('+')) {
+ let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5);
+ links.push(link);
+ }
+ let content;
+ if(p.length > 6 && p[6]){
+ content = _pdfh(item2, p6);
+ } else{
+ content = '';
+ }
+ let vid = links.join('$');
+ if(rule.二级==='*'){
+ vid = vid+'@@'+title+'@@'+img;
+ }
+ let vod = {
+ vod_name: title,
+ vod_pic: img,
+ vod_remarks: desc,
+ vod_content: content,
+ vod_id: vid
+ };
+ // print(vod);
+ d.push(vod);
+ } catch (e) {
+ console.log('首页列表处理发生错误:'+e.message);
+ }
+
+ }
+
+
+ }
+
+
+ } else {
+ let items = _pdfa(html, p0);
+ let p1 = getPP(p,1,pp,1);
+ let p2 = getPP(p,2,pp,2);
+ let p3 = getPP(p,3,pp,3);
+ let p4 = getPP(p,4,pp,4);
+ let p5 = getPP(p,5,pp,5);
+ for (let item of items) {
+ try {
+ let title = _pdfh(item, p1);
+ let img = '';
+ try {
+ img = _pd(item, p2, MY_URL);
+ } catch (e) {}
+ let desc = '';
+ try {
+ desc = _pdfh(item, p3);
+ }catch (e) {}
+ let links = [];
+ for (let _p5 of p4.split('+')) {
+ let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5);
+ links.push(link);
+ }
+ let content;
+ if(p.length > 5 && p[5]){
+ content = _pdfh(item, p5);
+ }else{
+ content = ''
+ }
+ let vid = links.join('$');
+ if(rule.二级==='*'){
+ vid = vid+'@@'+title+'@@'+img;
+ }
+ let vod = {
+ vod_name: title,
+ vod_pic: img,
+ vod_remarks: desc,
+ vod_content: content,
+ vod_id: vid
+ };
+ d.push(vod);
+
+ } catch (e) {
+
+ }
+
+ }
+
+ }
+
+ } catch (e) {
+
+ }
+ }
+ let t2 = (new Date()).getTime();
+ console.log('加载首页推荐耗时:'+(t2-t1)+'毫秒');
+ // console.log(JSON.stringify(d));
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
+ }
+ });
+ }
+ if(rule.图片来源){
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic + rule.图片来源;
+ }
+ });
+ }
+ if(d.length>0){
+ print(d.slice(0,2));
+ }
+ return JSON.stringify({
+ list:d
+ })
+}
+
+/**
+ * 一级分类页数据解析
+ * @param cateObj
+ * @returns {string}
+ */
+function categoryParse(cateObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let p = cateObj.一级;
+ if(!p||typeof(p)!=='string'){
+ return '{}'
+ }
+ let d = [];
+ // let url = cateObj.url.replaceAll('fyclass', cateObj.tid).replaceAll('fypage', cateObj.pg);
+ let url = cateObj.url.replaceAll('fyclass', cateObj.tid);
+ if(cateObj.pg === 1 && url.includes('[')&&url.includes(']')){
+ url = url.split('[')[1].split(']')[0];
+ }else if(cateObj.pg > 1 && url.includes('[')&&url.includes(']')){
+ url = url.split('[')[0];
+ }
+ if(rule.filter_url){
+ if(!/fyfilter/.test(url)){
+ if(!url.endsWith('&')&&!rule.filter_url.startsWith('&')){
+ url+='&'
+ }
+ url+=rule.filter_url;
+ }else{
+ url = url.replace('fyfilter', rule.filter_url);
+ }
+ // console.log('filter:'+cateObj.filter);
+ let fl = cateObj.filter?cateObj.extend:{};
+ // 自动合并 不同分类对应的默认筛选
+ if(rule.filter_def && typeof(rule.filter_def)==='object'){
+ try {
+ if(Object.keys(rule.filter_def).length>0 && rule.filter_def.hasOwnProperty(cateObj.tid)){
+ let self_fl_def = rule.filter_def[cateObj.tid];
+ if(self_fl_def && typeof(self_fl_def)==='object'){
+ // 引用传递转值传递,避免污染self变量
+ let fl_def = JSON.parse(JSON.stringify(self_fl_def));
+ fl = Object.assign(fl_def,fl);
+ }
+ }
+ }catch (e) {
+ print('合并不同分类对应的默认筛选出错:'+e.message);
+ }
+ }
+ let new_url;
+ new_url = cheerio.jinja2(url,{fl:fl});
+ // console.log('jinjia2执行后的new_url类型为:'+typeof(new_url));
+ if(/object Object/.test(new_url)){
+ new_url = drT.renderText(url,fl);
+ }
+ url = new_url;
+ }
+ if(/fypage/.test(url)){
+ if(url.includes('(')&&url.includes(')')){
+ let url_rep = url.match(/.*?\((.*)\)/)[1];
+ // console.log(url_rep);
+ let cnt_page = url_rep.replaceAll('fypage', cateObj.pg);
+ // console.log(cnt_page);
+ let cnt_pg = eval(cnt_page);
+ // console.log(cnt_pg);
+ url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
+ }else{
+ url = url.replaceAll('fypage',cateObj.pg);
+ }
+ }
+
+ MY_URL = url;
+ // setItem('MY_URL',MY_URL);
+ console.log(MY_URL);
+ p = p.trim();
+ const MY_CATE = cateObj.tid;
+ if(p.startsWith('js:')){
+ var MY_FL = cateObj.extend;
+ const TYPE = 'cate';
+ var input = MY_URL;
+ const MY_PAGE = cateObj.pg;
+ var desc = '';
+ eval(p.trim().replace('js:',''));
+ d = VODS;
+ }else {
+ p = p.split(';');
+ if (p.length < 5) {
+ return '{}'
+ }
+ let _ps = parseTags.getParse(p[0]);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p[0].startsWith('json:');
+ p[0] = p[0].replace(/^(jsp:|json:|jq:)/,'');
+ try {
+ let html = getHtml(MY_URL);
+ if (html) {
+ if(is_json){
+ html = dealJson(html);
+ }
+ let list = _pdfa(html, p[0]);
+ list.forEach(it => {
+ let links = p[4].split('+').map(p4=>{
+ return !rule.detailUrl?_pd(it, p4,MY_URL):_pdfh(it, p4);
+ });
+ let link = links.join('$');
+ let vod_id = rule.detailUrl?MY_CATE+'$'+link:link;
+
+ let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g,'').trim();
+ let vod_pic = _pd(it, p[2],MY_URL);
+
+ if(rule.二级==='*'){
+ vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
+ }
+ d.push({
+ 'vod_id': vod_id,
+ 'vod_name': vod_name,
+ 'vod_pic': vod_pic,
+ 'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g,'').trim(),
+ });
+ });
+ }
+ } catch (e) {
+ console.log(e.message);
+ }
+ }
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
+ }
+ });
+ }
+ if(rule.图片来源){
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic + rule.图片来源;
+ }
+ });
+ }
+ // print(d);
+ if(d.length>0){
+ print(d.slice(0,2));
+ }
+ let pagecount = 0;
+ if(rule.pagecount && typeof(rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)){
+ print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);
+ pagecount = parseInt(rule.pagecount[MY_CATE]);
+ }
+ let nodata = {
+ list:[{vod_name:'无数据,防无限请求',vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}],
+ total:1,pagecount:1,page:1,limit:1
+ };
+ let vod = d.length<1?JSON.stringify(nodata):JSON.stringify({
+ 'page': parseInt(cateObj.pg),
+ 'pagecount': pagecount||999,
+ 'limit': 20,
+ 'total': 999,
+ 'list': d,
+ });
+ // print(vod);
+ return vod
+}
+
+/**
+ * 搜索列表数据解析
+ * @param searchObj
+ * @returns {string}
+ */
+function searchParse(searchObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ if(!searchObj.searchUrl){
+ return '{}'
+ }
+ let p = searchObj.搜索==='*'&&rule.一级 ? rule.一级 : searchObj.搜索;
+ if(!p||typeof(p)!=='string'){
+ return '{}'
+ }
+ p = p.trim();
+ let pp = rule.一级.split(';');
+ let url = searchObj.searchUrl.replaceAll('**', searchObj.wd);
+ if(searchObj.pg === 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
+ url = url.split('[')[1].split(']')[0];
+ }else if(searchObj.pg > 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
+ url = url.split('[')[0];
+ }
+ if(/fypage/.test(url)){
+ if(url.includes('(')&&url.includes(')')){
+ let url_rep = url.match(/.*?\((.*)\)/)[1];
+ // console.log(url_rep);
+ let cnt_page = url_rep.replaceAll('fypage', searchObj.pg);
+ // console.log(cnt_page);
+ let cnt_pg = eval(cnt_page);
+ // console.log(cnt_pg);
+ url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
+ }else{
+ url = url.replaceAll('fypage',searchObj.pg);
+ }
+ }
+
+ MY_URL = url;
+ console.log(MY_URL);
+ // log(searchObj.搜索);
+ // setItem('MY_URL',MY_URL);
+ if(p.startsWith('js:')){
+ const TYPE = 'search';
+ const MY_PAGE = searchObj.pg;
+ const KEY = searchObj.wd;
+ var input = MY_URL;
+ var detailUrl = rule.detailUrl||'';
+ eval(p.trim().replace('js:',''));
+ d = VODS;
+ }else{
+ p = p.split(';');
+ if (p.length < 5) {
+ return '{}'
+ }
+ let p0 = getPP(p,0,pp,0);
+ let _ps = parseTags.getParse(p0);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p0.startsWith('json:');
+ p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
+ // print('1381 p0:'+p0);
+ try {
+ let req_method = MY_URL.split(';').length>1?MY_URL.split(';')[1].toLowerCase():'get';
+ let html;
+ if(req_method==='post'){
+ let rurls = MY_URL.split(';')[0].split('#')
+ let rurl = rurls[0]
+ let params = rurls.length > 1 ?rurls[1]:'';
+ print(`post=》rurl:${rurl},params:${params}`);
+ // let new_dict = {};
+ // let new_tmp = params.split('&');
+ // new_tmp.forEach(i=>{
+ // new_dict[i.split('=')[0]] = i.split('=')[1];
+ // });
+ // html = post(rurl,{body:new_dict});
+ let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let postData = {body:params};
+ Object.assign(_fetch_params,postData);
+ html = post(rurl,_fetch_params);
+ }else if(req_method==='postjson'){
+ let rurls = MY_URL.split(';')[0].split('#')
+ let rurl = rurls[0]
+ let params = rurls.length > 1 ?rurls[1]:'';
+ print(`postjson-》rurl:${rurl},params:${params}`);
+ try{
+ params = JSON.parse(params);
+ }catch (e) {
+ params = '{}'
+ }
+ let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let postData = {body:params};
+ Object.assign(_fetch_params,postData);
+ html = post(rurl,_fetch_params);
+ }else{
+ html = getHtml(MY_URL);
+ }
+ if (html) {
+ if(/系统安全验证|输入验证码/.test(html)){
+ let cookie = verifyCode(MY_URL);
+ if(cookie){
+ console.log(`本次成功过验证,cookie:${cookie}`);
+ setItem(RULE_CK,cookie);
+ }else{
+ console.log(`本次自动过搜索验证失败,cookie:${cookie}`);
+ }
+ // obj.headers['Cookie'] = cookie;
+ html = getHtml(MY_URL);
+ }
+ if(!html.includes(searchObj.wd)){
+ console.log('搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码');
+ console.log(html);
+ }
+ if(is_json){
+ // console.log(html);
+ html = dealJson(html);
+ // console.log(JSON.stringify(html));
+ }
+ // console.log(html);
+ let list = _pdfa(html, p0);
+ // print(list.length);
+ // print(list);
+ let p1 = getPP(p, 1, pp, 1);
+ let p2 = getPP(p, 2, pp, 2);
+ let p3 = getPP(p, 3, pp, 3);
+ let p4 = getPP(p, 4, pp, 4);
+ let p5 = getPP(p,5,pp,5);
+ list.forEach(it => {
+ let links = p4.split('+').map(_p4=>{
+ return !rule.detailUrl?_pd(it, _p4,MY_URL):_pdfh(it, _p4)
+ });
+ let link = links.join('$');
+ let content;
+ if(p.length > 5 && p[5]){
+ content = _pdfh(it, p5);
+ }else{
+ content = '';
+ }
+ let vod_id = link;
+ let vod_name = _pdfh(it, p1).replace(/\n|\t/g,'').trim();
+ let vod_pic = _pd(it, p2,MY_URL);
+ if(rule.二级==='*'){
+ vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
+ }
+ let ob = {
+ 'vod_id': vod_id,
+ 'vod_name': vod_name,
+ 'vod_pic': vod_pic,
+ 'vod_remarks': _pdfh(it, p3).replace(/\n|\t/g,'').trim(),
+ 'vod_content': content.replace(/\n|\t/g,'').trim(),
+ };
+ d.push(ob);
+ });
+
+ }
+ } catch (e) {
+ print('搜索发生错误:'+e.message);
+ return '{}'
+ }
+ }
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
+ }
+ });
+ }
+ if(rule.图片来源){
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic + rule.图片来源;
+ }
+ });
+ }
+ // print(d);
+ return JSON.stringify({
+ 'page': parseInt(searchObj.pg),
+ 'pagecount': 10,
+ 'limit': 20,
+ 'total': 100,
+ 'list': d,
+ });
+}
+
+/**
+ * 二级详情页数据解析
+ * @param detailObj
+ * @returns {string}
+ */
+function detailParse(detailObj){
+ let t1 = (new Date()).getTime();
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let orId = detailObj.orId;
+ let vod_name = '片名';
+ let vod_pic = '';
+ let vod_id = orId;
+ if(rule.二级==='*'){
+ // vod_id = orId.split('@@')[0]; // 千万不能分割
+ let extra = orId.split('@@');
+ vod_name = extra.length>1?extra[1]:vod_name;
+ vod_pic = extra.length>2?extra[2]:vod_pic;
+ }
+ // print(vod_pic);
+ let vod = {
+ vod_id: vod_id, //"id",
+ vod_name: vod_name,
+ vod_pic: vod_pic,
+ type_name: "类型",
+ vod_year: "年份",
+ vod_area: "地区",
+ vod_remarks: "更新信息",
+ vod_actor: "主演",
+ vod_director: "导演",
+ vod_content: "简介"
+ };
+ let p = detailObj.二级;
+ let url = detailObj.url;
+ let detailUrl = detailObj.detailUrl;
+ let fyclass = detailObj.fyclass;
+ let tab_exclude = detailObj.tab_exclude;
+ let html = detailObj.html||'';
+ MY_URL = url;
+ if(detailObj.二级访问前){
+ try {
+ print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
+ eval(detailObj.二级访问前.trim().replace('js:',''));
+ }catch (e) {
+ print(`二级访问前执行代码出现错误:${e.message}`)
+ }
+ }
+ // console.log(MY_URL);
+ // setItem('MY_URL',MY_URL);
+ if(p==='*'){
+ vod.vod_play_from = '道长在线';
+ vod.vod_remarks = detailUrl;
+ vod.vod_actor = '没有二级,只有一级链接直接嗅探播放';
+ vod.vod_content = MY_URL;
+ vod.vod_play_url = '嗅探播放$' + MY_URL.split('@@')[0];
+ }else if(typeof(p)==='string'&&p.trim().startsWith('js:')){
+ const TYPE = 'detail';
+ var input = MY_URL;
+ var play_url = '';
+ eval(p.trim().replace('js:',''));
+ vod = VOD;
+ console.log(JSON.stringify(vod));
+ }else if(p&&typeof(p)==='object'){
+ let tt1 = (new Date()).getTime();
+ if(!html){
+ html = getHtml(MY_URL);
+ }
+ print(`二级${MY_URL}仅获取源码耗时:${(new Date()).getTime()-tt1}毫秒`);
+ let _impJQP = false;
+ let _ps;
+ if(p.is_json){
+ print('二级是json');
+ _ps = parseTags.json;
+ html = dealJson(html);
+ }else if(p.is_jsp){
+ print('二级是jsp');
+ _ps = parseTags.jsp;
+ }else if(p.is_jq){
+ print('二级是jq');
+ _ps = parseTags.jq;
+ }else{
+ print('二级默认jq');
+ _ps = parseTags.jq;
+ // print('二级默认jsp');
+ // _ps = parseTags.jsp;
+ }
+ if(_ps === parseTags.jq){ // jquery解析提前load(html)
+ _impJQP = true;
+ }
+ if (_impJQP) {
+ let ttt1 = (new Date()).getTime();
+ let c$ = cheerio.load(html);
+ // print(`二级${MY_URL}仅c$源码耗时:${(new Date()).getTime()-ttt1}毫秒`);
+ html = { rr: c$, ele: c$('html')[0] };
+ print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date()).getTime()-ttt1}毫秒`);
+ }
+ let tt2 = (new Date()).getTime();
+ print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ if(p.title){
+ let p1 = p.title.split(';');
+ vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
+ let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').replace(/ /g,'').trim():'';
+ vod.type_name = type_name||vod.type_name;
+ }
+ if(p.desc){
+ try{
+ let p1 = p.desc.split(';');
+ vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
+ vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').trim():'';
+ vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g,'').trim():'';
+ // vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replaceAll('\n', ' ').trim():'';
+ vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g,'').trim():'';
+ vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g,'').trim():'';
+ }
+ catch (e) {
+
+ }
+ }
+ if(p.content){
+ try{
+ let p1 = p.content.split(';');
+ vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
+ }
+ catch (e) {}
+ }
+ if(p.img){
+ try{
+ let p1 = p.img.split(';');
+ vod.vod_pic = _pd(html, p1[0],MY_URL);
+ }
+ catch (e) {}
+ }
+
+ let vod_play_from = '$$$';
+ let playFrom = [];
+ if(p.重定向&&p.重定向.startsWith('js:')){
+ print('开始执行重定向代码:'+p.重定向);
+ html = eval(p.重定向.replace('js:',''));
+ if (_impJQP) {
+ let c$ = cheerio.load(html);
+ html = { rr: c$, ele: c$('html')[0] }
+ }
+ }
+
+// console.log(2);
+ if(p.tabs){
+ if(p.tabs.startsWith('js:')){
+ print('开始执行tabs代码:'+p.tabs);
+ if(html&&_impJQP&&typeof (html)!=='string'){
+ try { // 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错
+ html = html.rr(html.ele).toString();
+ }catch (e) {}
+ }
+ var input = MY_URL;
+ eval(p.tabs.replace('js:',''));
+ playFrom = TABS;
+ }else{
+ let p_tab = p.tabs.split(';')[0];
+ // console.log(p_tab);
+ let vHeader = _pdfa(html, p_tab);
+ console.log(vHeader.length);
+ let tab_text = p.tab_text||'body&&Text';
+ // print('tab_text:'+tab_text);
+ let new_map = {};
+ for(let v of vHeader){
+ let v_title = _pdfh(v,tab_text).trim();
+ console.log(v_title);
+ if(tab_exclude&& (new RegExp(tab_exclude)).test(v_title)){
+ continue;
+ }
+ if(!new_map.hasOwnProperty(v_title)){
+ new_map[v_title] = 1;
+ }else{
+ new_map[v_title] += 1;
+ }
+ if(new_map[v_title]>1){
+ v_title+=Number(new_map[v_title]-1);
+ }
+ playFrom.push(v_title);
+ }
+ }
+ console.log(JSON.stringify(playFrom));
+ }else{
+ playFrom = ['道长在线']
+ }
+ vod.vod_play_from = playFrom.join(vod_play_from);
+
+// console.log(3);
+ let vod_play_url = '$$$';
+ let vod_tab_list = [];
+ if(p.lists){
+ if(p.lists.startsWith('js:')){
+ print('开始执行lists代码:'+p.lists);
+ try {
+ if(html&&_impJQP&&typeof (html)!=='string'){
+ // 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错
+ try {
+ html = html.rr(html.ele).toString();
+ }catch (e) {}
+ }
+ var input = MY_URL;
+ var play_url = '';
+ eval(p.lists.replace('js:',''));
+ for(let i in LISTS){
+ if(LISTS.hasOwnProperty(i)){
+ // print(i);
+ try {
+ LISTS[i] = LISTS[i].map(it=>it.split('$').slice(0,2).join('$'));
+ }catch (e) {
+ print('格式化LISTS发生错误:'+e.message);
+ }
+ }
+ }
+ vod_play_url = LISTS.map(it=>it.join('#')).join(vod_play_url);
+ }catch (e) {
+ print('js执行lists: 发生错误:'+e.message);
+ }
+
+ }else{
+ let list_text = p.list_text||'body&&Text';
+ let list_url = p.list_url||'a&&href';
+ // print('list_text:'+list_text);
+ // print('list_url:'+list_url);
+ // print('list_parse:'+p.lists);
+ let is_tab_js = p.tabs.trim().startsWith('js:');
+ for(let i=0;i 1 && !is_tab_js ? p.tabs.split(';')[1] : '';
+ let p1 = p.lists.replaceAll('#idv', tab_name).replaceAll('#id', i);
+ tab_ext = tab_ext.replaceAll('#idv', tab_name).replaceAll('#id', i);
+ // 测试jsp提速
+ // console.log(p1);
+ // p1 = p1.replace(':eq(0)',',0').replace(' ','&&');
+ // console.log(p1);
+ // console.log(html);
+ let vodList = [];
+ try {
+ vodList = _pdfa(html, p1);
+ console.log('len(vodList):'+vodList.length);
+ }catch (e) {
+ // console.log(e.message);
+ }
+ let new_vod_list = [];
+ // print('tab_ext:'+tab_ext);
+ let tabName = tab_ext?_pdfh(html, tab_ext):tab_name;
+ console.log(tabName);
+ // console.log('cheerio解析Text');
+ // 此处存在性能问题: pt版2000集需要650毫秒,俊版1300毫秒 特么的优化不动 主要后面定位url的我拿他没法
+ // 主要性能问题在于 _pd(it, list_url, MY_URL)
+ let tt1 = (new Date()).getTime();
+ // vodList.forEach((it,idex)=>{
+ // // 请注意,这里要固定pdfh解析body&&Text,不需要下划线,没写错
+ // // new_vod_list.push(pdfh(it,'body&&Text')+'$'+_pd(it,'a&&href',MY_URL));
+ // // new_vod_list.push(cheerio.load(it).text()+'$'+_pd(it,'a&&href',MY_URL));
+ // // new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL));
+ // // new_vod_list.push(_pdfh(it, list_text).trim() + '$' +idex);
+ // // new_vod_list.push(idex + '$' +_pdfh(it, list_url));
+ // new_vod_list.push(_pdfh(it, list_text).trim() + '$' +_pd(it, list_url,MY_URL));
+ // });
+ if(vodList.length>0){
+ for(let i=0;ix.split('$')[0]);
+ console.log(`drpy影响性能代码共计列表数循环次数:${vodList.length},耗时:${(new Date()).getTime()-tt1}毫秒`);
+ }
+ let vlist = new_vod_list.join('#');
+ vod_tab_list.push(vlist);
+ }
+ vod_play_url = vod_tab_list.join(vod_play_url);
+ }
+ }
+ vod.vod_play_url = vod_play_url;
+ }
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ vod.vod_pic = vod.vod_pic.replace(replace_from,replace_to);
+ }
+ if(rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){
+ vod.vod_pic = vod.vod_pic + rule.图片来源;
+ }
+ if(!vod.vod_id||(vod_id.includes('$')&&vod.vod_id!==vod_id)){
+ vod.vod_id = vod_id;
+ }
+ let t2 = (new Date()).getTime();
+ console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
+ // print(vod);
+ vod = vodDeal(vod);
+ // print(vod);
+ return JSON.stringify({
+ list: [vod]
+ })
+}
+
+/**
+ * 获取二级待返回的播放线路没处理时的索引关系
+ * @param vod
+ * @returns {{}}
+ */
+function get_tab_index(vod){
+ let obj = {};
+ vod.vod_play_from.split('$$$').forEach((it,index)=>{
+ obj[it] = index;
+ });
+ return obj
+}
+
+/**
+ * 处理待返回的vod数据|线路去除,排序,重命名
+ * @param vod
+ * @returns {*}
+ */
+function vodDeal(vod){
+ let vod_play_from = vod.vod_play_from.split('$$$');
+ let vod_play_url = vod.vod_play_url.split('$$$');
+
+ // 移除指定线路后的列表
+ let tab_removed_list = vod_play_from;
+ // 排序后的线路列表
+ let tab_ordered_list = vod_play_from;
+ // 线路重命名后的列表
+ let tab_renamed_list = vod_play_from;
+ // 定义实际要返回线路
+ let tab_list = vod_play_from;
+ // 选集列表根据线路排序
+ let play_ordered_list = vod_play_url;
+
+ // 判断有移除线路或者线路排序
+ if((rule.tab_remove&&rule.tab_remove.length>0)||(rule.tab_order&&rule.tab_order.length>0)){
+ // 获取原来线路的索引下标
+ let tab_index_dict = get_tab_index(vod);
+
+ if(rule.tab_remove&&rule.tab_remove.length>0){
+ tab_removed_list = vod_play_from.filter(it=>!rule.tab_remove.includes(it));
+ tab_list = tab_removed_list;
+ }
+
+ if(rule.tab_order&&rule.tab_order.length>0){
+ let tab_order = rule.tab_order;
+ tab_ordered_list = tab_removed_list.sort((a, b) => {
+ return (tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a)) - (tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))
+ });
+ tab_list = tab_ordered_list;
+ }
+ play_ordered_list = tab_list.map(it=>vod_play_url[tab_index_dict[it]]);
+ }
+
+ if(rule.tab_rename&&typeof(rule.tab_rename)==='object'&Object.keys(rule.tab_rename).length>0){
+ tab_renamed_list = tab_list.map(it=>rule.tab_rename[it]||it);
+ tab_list = tab_renamed_list;
+ }
+ vod.vod_play_from = tab_list.join('$$$');
+ vod.vod_play_url = play_ordered_list.join('$$$');
+ return vod
+}
+
+/**
+ * 判断是否需要解析
+ * @param url
+ * @returns {number|number}
+ */
+function tellIsJx(url){
+ try {
+ let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split('?')[0]) && 是否正版(url);
+ return is_vip?1:0
+ }catch (e) {
+ return 1
+ }
+}
+/**
+ * 选集播放点击事件解析
+ * @param playObj
+ * @returns {string}
+ */
+function playParse(playObj){
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ MY_URL = playObj.url;
+ var MY_FLAG = playObj.flag;
+ if(!/http/.test(MY_URL)){
+ try {
+ MY_URL = base64Decode(MY_URL);
+ }catch (e) {}
+ }
+ MY_URL = decodeURIComponent(MY_URL);
+ var input = MY_URL;//注入给免嗅js
+ var flag = MY_FLAG;//注入播放线路名称给免嗅js
+ let common_play = {
+ parse:1,
+ url:input,
+ flag:flag,
+ // url:urlencode(input),
+ jx:tellIsJx(input)
+ };
+ let lazy_play;
+ if(!rule.play_parse||!rule.lazy){
+ lazy_play = common_play;
+ }else if(rule.play_parse&&rule.lazy&&typeof(rule.lazy)==='string'){
+ try {
+ let lazy_code = rule.lazy.replace('js:','').trim();
+ print('开始执行js免嗅=>'+lazy_code);
+ eval(lazy_code);
+ lazy_play = typeof(input) === 'object'?input:{
+ parse:1,
+ jx:tellIsJx(input),
+ url:input
+ };
+ }catch (e) {
+ print('js免嗅错误:'+e.message);
+ lazy_play = common_play;
+ }
+ }else{
+ lazy_play = common_play;
+ }
+ // print('play_json:'+typeof(rule.play_json));
+ // console.log(Array.isArray(rule.play_json));
+ if(Array.isArray(rule.play_json) && rule.play_json.length >0){ // 数组情况判断长度大于0
+ let web_url = lazy_play.url;
+ for(let pjson of rule.play_json){
+ if(pjson.re && (pjson.re==='*'||web_url.match(new RegExp(pjson.re)))){
+ if(pjson.json && typeof(pjson.json)==='object'){
+ let base_json = pjson.json;
+ // print('开始合并:');
+ // print(base_json);
+ lazy_play = Object.assign(lazy_play,base_json);
+ break;
+ }
+ }
+ }
+ }else if(rule.play_json && !Array.isArray(rule.play_json)){ // 其他情况 非[] 判断true/false
+ let base_json = {
+ jx:1,
+ parse:1,
+ };
+ lazy_play = Object.assign(lazy_play,base_json);
+ }else if(!rule.play_json){ // 不解析传0
+ let base_json = {
+ jx:0,
+ parse:1,
+ };
+ lazy_play = Object.assign(lazy_play,base_json);
+ }
+ console.log(JSON.stringify(lazy_play));
+ return JSON.stringify(lazy_play);
+}
+
+/**
+ * 本地代理解析规则
+ * @param params
+ */
+function proxyParse(proxyObj){
+ var input = proxyObj.params;
+ if(proxyObj.proxy_rule){
+ log('准备执行本地代理规则:\n'+proxyObj.proxy_rule);
+ try {
+ eval(proxyObj.proxy_rule);
+ if(input && input!== proxyObj.params && Array.isArray(input) &&input.length===3){
+ return input
+ }else{
+ return [404,'text/plain','Not Found']
+ }
+ }catch (e) {
+ return [500,'text/plain','代理规则错误:'+e.message]
+ }
+
+ }else{
+ return [404,'text/plain','Not Found']
+ }
+}
+
+/**
+ * 辅助嗅探解析规则
+ * @param isVideoObj
+ * @returns {boolean}
+ */
+function isVideoParse(isVideoObj){
+ var input = isVideoObj.url;
+ if(!isVideoObj.t){ // t为假代表默认传的正则字符串
+ let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
+ return re_matcher.test(input);
+ }else{
+ // 执行js
+ try {
+ eval(isVideoObj.isVideo);
+ if(typeof(input)==='boolean'){
+ return input
+ }else{
+ return false
+ }
+ }catch (e) {
+ log('执行嗅探规则发生错误:'+e.message);
+ return false
+ }
+ }
+}
+
+/**
+ * js源预处理特定返回对象中的函数
+ * @param ext
+ */
+ function init(ext) {
+ console.log('init');
+ try {
+ // make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改
+ // if (typeof (globalThis.mubanJs) === 'undefined') {
+ // let mubanJs = request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js', { 'User-Agent': MOBILE_UA });
+ // mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default');
+ // // console.log(mubanJs);
+ // globalThis.mubanJs = mubanJs;
+ // }
+ // let muban = eval(globalThis.mubanJs);
+ let muban = 模板.getMubans();
+ if (typeof ext == 'object'){
+ rule = ext;
+ } else if (typeof ext == 'string') {
+ if (ext.startsWith('http')) {
+ let js = request(ext,{'method':'GET'});
+ if (js){
+ eval(js.replace('var rule', 'rule'));
+ }
+ } else {
+ eval(ext.replace('var rule', 'rule'));
+ }
+ }
+ if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
+ print('继承模板:'+rule.模板);
+ rule = Object.assign(muban[rule.模板], rule);
+ }
+ /** 处理一下 rule规则关键字段没传递的情况 **/
+ let rule_cate_excludes = (rule.cate_exclude||'').split('|').filter(it=>it.trim());
+ let rule_tab_excludes = (rule.tab_exclude||'').split('|').filter(it=>it.trim());
+ rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split('|').filter(it=>it.trim()));
+ rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split('|').filter(it=>it.trim()));
+
+ rule.cate_exclude = rule_cate_excludes.join('|');
+ rule.tab_exclude = rule_tab_excludes.join('|');
+ rule.host = (rule.host||'').rstrip('/');
+ HOST = rule.host;
+ if(rule.hostJs){
+ console.log(`检测到hostJs,准备执行...`);
+ try {
+ eval(rule.hostJs);
+ rule.host = HOST.rstrip('/');
+ }catch (e) {
+ console.log(`执行${rule.hostJs}获取host发生错误:`+e.message);
+ }
+ }
+ rule.url = rule.url||'';
+ rule.double = rule.double||false;
+ rule.homeUrl = rule.homeUrl||'';
+ rule.detailUrl = rule.detailUrl||'';
+ rule.searchUrl = rule.searchUrl||'';
+ rule.homeUrl = rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):(rule.homeUrl||rule.host);
+ rule.detailUrl = rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;
+ rule.二级访问前 = rule.二级访问前||'';
+ if(rule.url.includes('[')&&rule.url.includes(']')){
+ let u1 = rule.url.split('[')[0]
+ let u2 = rule.url.split('[')[1].split(']')[0]
+ rule.url = rule.host && rule.url?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.url;
+ }else{
+ rule.url = rule.host && rule.url ? urljoin(rule.host,rule.url) : rule.url;
+ }
+
+ if(rule.searchUrl.includes('[')&&rule.searchUrl.includes(']')&&!rule.searchUrl.includes('#')){
+ let u1 = rule.searchUrl.split('[')[0]
+ let u2 = rule.searchUrl.split('[')[1].split(']')[0]
+ rule.searchUrl = rule.host && rule.searchUrl?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.searchUrl;
+ }else{
+ rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host,rule.searchUrl) : rule.searchUrl;
+ }
+
+ rule.timeout = rule.timeout||5000;
+ rule.encoding = rule.编码||rule.encoding||'utf-8';
+ rule.search_encoding = rule.搜索编码||rule.search_encoding||'';
+ rule.图片来源 = rule.图片来源||'';
+ rule.图片替换 = rule.图片替换||'';
+ rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
+ rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
+ rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
+ rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
+ rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
+
+ rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
+
+ rule.tab_remove = rule.hasOwnProperty('tab_remove')?rule.tab_remove:[];
+ rule.tab_order = rule.hasOwnProperty('tab_order')?rule.tab_order:[];
+ rule.tab_rename = rule.hasOwnProperty('tab_rename')?rule.tab_rename:{};
+
+ if(rule.headers && typeof(rule.headers) === 'object'){
+ try {
+ let header_keys = Object.keys(rule.headers);
+ for(let k of header_keys){
+ if(k.toLowerCase() === 'user-agent'){
+ let v = rule.headers[k];
+ console.log(v);
+ if(['MOBILE_UA','PC_UA','UC_UA','IOS_UA','UA'].includes(v)){
+ rule.headers[k] = eval(v);
+ }
+ }
+ }
+ }catch (e) {
+ console.log('处理headers发生错误:'+e.message);
+ }
+ }
+ // print(rule.headers);
+ rule_fetch_params = {'headers': rule.headers||false, 'timeout': rule.timeout, 'encoding': rule.encoding};
+ oheaders = rule.headers||{};
+ RKEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host);
+ pre(); // 预处理
+ init_test();
+ }catch (e) {
+ console.log('init_test发生错误:'+e.message);
+ }
+}
+
+let homeHtmlCache = undefined;
+
+/**
+ * js源获取首页分类和筛选特定返回对象中的函数
+ * @param filter 筛选条件字典对象
+ * @returns {string}
+ */
+function home(filter) {
+ console.log("home");
+ let homeObj = {
+ filter:rule.filter||false,
+ MY_URL: rule.homeUrl,
+ class_name: rule.class_name || '',
+ class_url: rule.class_url || '',
+ class_parse: rule.class_parse || '',
+ cate_exclude: rule.cate_exclude,
+ };
+ return homeParse(homeObj);
+}
+
+/**
+ * js源获取首页推荐数据列表特定返回对象中的函数
+ * @param params
+ * @returns {string}
+ */
+function homeVod(params) {
+ console.log("homeVod");
+ let homeVodObj = {
+ 推荐:rule.推荐,
+ double:rule.double,
+ homeUrl:rule.homeUrl,
+ detailUrl:rule.detailUrl
+ };
+ return homeVodParse(homeVodObj)
+ // return "{}";
+}
+
+/**
+ * js源获取分类页一级数据列表特定返回对象中的函数
+ * @param tid 分类id
+ * @param pg 页数
+ * @param filter 当前选中的筛选条件
+ * @param extend 扩展
+ * @returns {string}
+ */
+function category(tid, pg, filter, extend) {
+ let cateObj = {
+ url: rule.url,
+ 一级: rule.一级,
+ tid: tid,
+ pg: parseInt(pg),
+ filter: filter,
+ extend: extend
+ };
+ // console.log(JSON.stringify(extend));
+ return categoryParse(cateObj)
+}
+
+/**
+ * js源获取二级详情页数据特定返回对象中的函数
+ * @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id
+ * @returns {string}
+ */
+function detail(vod_url) {
+ let orId = vod_url;
+ let fyclass = '';
+ if(vod_url.indexOf('$')>-1){
+ let tmp = vod_url.split('$');
+ fyclass = tmp[0];
+ vod_url = tmp[1];
+ }
+ let detailUrl = vod_url.split('@@')[0];
+ let url;
+ if(!detailUrl.startsWith('http')&&!detailUrl.includes('/')){
+ url = rule.detailUrl.replaceAll('fyid', detailUrl).replaceAll('fyclass',fyclass);
+ }else if(detailUrl.includes('/')){
+ url = urljoin(rule.homeUrl,detailUrl);
+ }else{
+ url = detailUrl
+ }
+ let detailObj = {
+ orId: orId,
+ url:url,
+ 二级:rule.二级,
+ 二级访问前:rule.二级访问前,
+ detailUrl:detailUrl,
+ fyclass:fyclass,
+ tab_exclude:rule.tab_exclude,
+ }
+ return detailParse(detailObj)
+}
+
+/**
+ * js源选集按钮播放点击事件特定返回对象中的函数
+ * @param flag 线路名
+ * @param id 播放按钮的链接
+ * @param flags 全局配置的flags是否需要解析的标识列表
+ * @returns {string}
+ */
+function play(flag, id, flags) {
+ let playObj = {
+ url:id,
+ flag:flag,
+ flags:flags
+ }
+ return playParse(playObj);
+}
+
+/**
+ * js源搜索返回的数据列表特定返回对象中的函数
+ * @param wd 搜索关键字
+ * @param quick 是否来自快速搜索
+ * @returns {string}
+ */
+function search(wd, quick, pg) {
+ if(rule.search_encoding){
+ if(rule.search_encoding.toLowerCase()!=='utf-8'){
+ // 按搜索编码进行编码
+ wd = encodeStr(wd,rule.search_encoding);
+ }
+ }else if(rule.encoding && rule.encoding.toLowerCase()!=='utf-8'){
+ // 按全局编码进行编码
+ wd = encodeStr(wd,rule.encoding);
+ }
+ let searchObj = {
+ searchUrl: rule.searchUrl,
+ 搜索: rule.搜索,
+ wd: wd,
+ //pg: pg,
+ pg: pg||1,
+ quick: quick,
+ };
+ // console.log(JSON.stringify(searchObj));
+ return searchParse(searchObj)
+}
+
+/**
+ * js源本地代理返回的数据列表特定返回对象中的函数
+ * @param params 代理链接参数比如 /proxy?do=js&url=https://wwww.baidu.com => params就是 {do:'js','url':'https://wwww.baidu.com'}
+ * @returns {*}
+ */
+function proxy(params){
+ if(rule.proxy_rule&&rule.proxy_rule.trim()){
+ rule.proxy_rule = rule.proxy_rule.trim();
+ }
+ if(rule.proxy_rule.startsWith('js:')){
+ rule.proxy_rule = rule.proxy_rule.replace('js:','');
+ }
+ let proxyObj = {
+ params:params,
+ proxy_rule:rule.proxy_rule
+ };
+ return proxyParse(proxyObj)
+}
+
+/**
+ * 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
+ * @returns {*|boolean|boolean}
+ */
+function sniffer(){
+ let enable_sniffer = rule.sniffer || false;
+ if(enable_sniffer){
+ // log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
+ log('开始执行辅助嗅探代理规则...');
+ }
+ return enable_sniffer
+}
+
+/**
+ * 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
+ * @param url
+ */
+function isVideo(url){
+ let t = 0;
+ let is_video;
+ if(rule.isVideo &&rule.isVideo.trim()){
+ is_video = rule.isVideo.trim();
+ }
+ if(is_video.startsWith('js:')){
+ is_video = is_video.replace('js:','');
+ t = 1;
+ }
+ let isVideoObj = {
+ url:url,
+ isVideo:is_video,
+ t:t,
+ };
+ let result = isVideoParse(isVideoObj);
+ if(result){
+ log('成功执行辅助嗅探规则并检测到视频地址:\n'+rule.isVideo);
+ }
+ return result
+}
+
+function DRPY(){//导出函数
+ return {
+ init: init,
+ home: home,
+ homeVod: homeVod,
+ category: category,
+ detail: detail,
+ play: play,
+ search: search,
+ proxy:proxy,
+ sniffer:sniffer,
+ isVideo:isVideo
+ }
+}
+
+/**
+ * 导出函数无法简写成下面的形式:
+
+ export default {
+ ...DRPY,
+ DRPY
+ }
+
+ */
+
+// 导出函数对象
+export default {
+ init,
+ home,
+ homeVod,
+ category,
+ detail,
+ play,
+ search,
+ proxy,
+ sniffer,
+ isVideo,
+ DRPY,
+}
diff --git a/lib/drpy.min.js b/lib/drpy.min.js
new file mode 100644
index 0000000..92b815a
--- /dev/null
+++ b/lib/drpy.min.js
@@ -0,0 +1 @@
+import cheerio from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js";import"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js";import"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/drT.js";import 模板 from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js";import{gbkTool}from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log("预处理执行失败:"+e.message)}}}let rule={};const VERSION="drpy1 3.9.49beta36 202400414";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://drpy.nokia.press:8028/ocr/drpy/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;ithis.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd(html,parse,uri){let ret=this.pdfh(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse,base_url){if(!parse||!parse.trim()){return""}let eleFind=typeof html==="object";let option=undefined;if(eleFind&&parse.startsWith("body&&")){parse=parse.substr(6);if(parse.indexOf("&&")<0){option=parse.trim();parse="*=*"}}if(parse.indexOf("&&")>-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)&&!SPECIAL_URL.test(result)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX_A.test(sp[i])&&iit.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}if(obj.redirect===false){obj.redirect=0}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj.method="POST";return request(url,obj)}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",searchObj.pg)}}MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);list.forEach(it=>{let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _impJQP=false;let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}if(_ps===parseTags.jq){_impJQP=true}if(_impJQP){let ttt1=(new Date).getTime();let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]};print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date).getTime()-ttt1}毫秒`)}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""));if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print("格式化LISTS发生错误:"+e.message)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print("js执行lists: 发生错误:"+e.message)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let tt1=(new Date).getTime();if(vodList.length>0){for(let i=0;ix.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${vodList.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];vod.vod_pic=vod.vod_pic.replace(replace_from,replace_to)}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);vod=vodDeal(vod);return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return vod}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;var MY_FLAG=playObj.flag;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;var flag=MY_FLAG;let common_play={parse:1,url:input,flag:flag,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length===3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log("执行嗅探规则发生错误:"+e.message);return false}}}function init(ext){console.log("init");try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}else{eval(ext.replace("var rule","rule"))}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:`+e.message)}}rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;rule.二级访问前=rule.二级访问前||"";if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")&&!rule.searchUrl.includes("#")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl}rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.图片替换=rule.图片替换||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);pre();init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,"二级访问前":rule.二级访问前,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,DRPY:DRPY};
\ No newline at end of file
diff --git a/lib/drpy2.js b/lib/drpy2.js
new file mode 100644
index 0000000..54b4318
--- /dev/null
+++ b/lib/drpy2.js
@@ -0,0 +1,2808 @@
+import cheerio from 'assets://js/lib/cheerio.min.js';
+import 'assets://js/lib/crypto-js.js';
+import './jsencrypt.js';
+import 模板 from "../js/模板.js"
+import {gbkTool} from './gbk.js'
+
+// import cheerio from "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js";
+// import "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js";
+// import 模板 from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js";
+// import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js'
+
+function init_test(){
+ // console.log(typeof(CryptoJS));
+ console.log("init_test_start");
+ // print(模板);
+ // print(typeof(模板.getMubans));
+ console.log("当前版本号:"+VERSION);
+ console.log(RKEY);
+ console.log(JSON.stringify(rule));
+ console.log("init_test_end");
+
+
+ // log('typeof (JSEncrypt):'+typeof (JSEncrypt));
+ // let publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwEc7wBMtYKkxvrQNI3+ITBZwAkPkGvsv4TsAHFskKGZWz9eYl3scivhmlEfWHlEkdyb0m82CmB1qAgef+pD4cZu+Cdmm2e9lnExhLwm8cBgpkAen9QRNdjojZgxM0W+JcReH4W6pw+uFXiLRn4AIQkDftWGNLg6wlNS+39Z/RvP9zyATJLZ9AKDdHp62XMxEK1KZvWBuIg+Oa5UzgA9jy+2XyIqwhBtO8tPbUl21t2pvTzHoLUjSkPNm2LurcUk6+jQ2r6aiS2CN1NXIucPJU6mkuIQ821SjvkYPtIdRMntW4y2u4cyiqVEEQwlzWVMHh+/vfrWAQr9fgjDuYYtvPQIDAQAB';
+ // let privateKey = 'MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDARzvAEy1gqTG+tA0jf4hMFnACQ+Qa+y/hOwAcWyQoZlbP15iXexyK+GaUR9YeUSR3JvSbzYKYHWoCB5/6kPhxm74J2abZ72WcTGEvCbxwGCmQB6f1BE12OiNmDEzRb4lxF4fhbqnD64VeItGfgAhCQN+1YY0uDrCU1L7f1n9G8/3PIBMktn0AoN0enrZczEQrUpm9YG4iD45rlTOAD2PL7ZfIirCEG07y09tSXbW3am9PMegtSNKQ82bYu6txSTr6NDavpqJLYI3U1ci5w8lTqaS4hDzbVKO+Rg+0h1Eye1bjLa7hzKKpUQRDCXNZUweH7+9+tYBCv1+CMO5hi289AgMBAAECggEBAIRbRJUWXmEwdq64kGbELlV6CIZ2p3mvOSlIjO34Cy7IK7AMz9xOgbpj/XDK9miOIJTouu7ZC7GcZdGZ4BUCYBMMS0fKjGFuurpZlXhkslNTPqEHtCUkXhIpOR7RDrwIlErGEOIsZC4aXQcM3tF1t7mroJLh4OY4dHMu82lv5NM4hhFMNvHzXVvrPXeTzw26gddHVG/ke0WUYOcB5j3cPp8xaVp7JV8bdxtGtkqIfBLY/dIczzJu/3F3cBpU2nNwt8uVUF/w/HKlr7j8FqqFHXWh182beU0n5AIdRyRJBrRUAEhdtsUnvJOVBDqzZa+9DJ5395F7V8KRlQptxETdhCECgYEA4x/2HM9fnVIhG6wTbEt1LhGTKYb/igMAHLqquEMfRsB44tobI8gVNwR3qJQY/nKXxcQemQV29PcdqpENCKyXUXGD8SI1UPg15rHFBI8CIqlCXfzJybdHjmzlhaA9I5lofIVh+5MW7WkvHZoRy7NeDMhHUuaiveuqC4OJ8n+dD2kCgYEA2LkmUVef3WkBBwUBRdkyoog3DMwR+/ubb0ncJVYy3ItYVJltQ4HqmrRiJc8xBAoFnG8rbiqDnmTnDR3WbuxU1G2hml09fqId+rQds2UfESswCXHU43A4f77m1XyA6PprBxpozVIcmK69N4rR9jOXflLWo3O+p2ipUbmNpId7+rUCgYBSpcbBJRT+AmzZzPwkZDD32p1ady114zGfQq3s7z/qVw+mPQezNZPCuXVxerK9pKVl6b/Ynwxyh5nb/3xms6c8k7oXfQM5u5ihof63cfKs+jqUSPCE3pTDVw0OWwjkc2Z6KW9GRHgLXEMw2mevYE3RCPArUpHV2nO+TNddzuIwQQKBgQDOZwdnUNygMfEYjlu3+jOPN8u2FGTMZ8SRKPbRWFb4VH27lKPLN2AIFuOivsEf56uQYRAry7GumMq0Y0ZmPg5Mglz2dvaqNBv5OLFQuW3tHAST+iWWtroYb+fISts7B8QG79AAO8OgZksvKrbslBYj6SEiaomZRsR7YQzVNXOOQQKBgQCovElZ50c8ZJ6m9D9fw3Nes7u9vshpyyac5tt4tZ7yfU4l5pWGrIUqCE703qZp4NAqEvlZUCJbj9kkysaj/2MfFb2b9jSvdNB+V/YW9Cwg+5TziYoOcQzN1z2u4p4goTAv0S+pTNSr3qWaTUI4TXUXQajif45Fexv+MrP5AAXQyw=='
+ // // let text = '你好';
+ // let text = '[{"vod_name":"兔小贝原创儿歌","vod_pic":"https://resource-cdn.tuxiaobei.com/video-album/FnQ8ieJHgsbgCKWXNBg4uoOmKgG5.jpg","vod_remarks":"共229首","vod_content":"","vod_id":"/subject/17@@兔小贝原创儿歌@@https://resource-cdn.tuxiaobei.com/video-album/FnQ8ieJHgsbgCKWXNBg4uoOmKgG5.jpg"},{"vod_name":"英文儿歌","vod_pic":"https://resource-cdn.tuxiaobei.com/video-album/Fqjpx2H_-QaYNAYn2MekRuDpeyUv.jpg","vod_remarks":"共10首","vod_content":"","vod_id":"/subject/23@@英文儿歌@@https://resource-cdn.tuxiaobei.com/video-album/Fqjpx2H_-QaYNAYn2MekRuDpeyUv.jpg"}]';
+ // let str = RSA.encode(text, publicKey);
+ // console.log("加密数据:" + str);
+ // let str1 = 'Wa2c/868VOm0PgpGG2s2aMrDbGOlJRdZXlSGswjFgywd3nZNB7ND8kVMdNB/OsNFoQXJXSJMvPaE73BH7rs8fz54JGdYQK+qTgfQRqQZvomCjbzseSR4bm4NOrtIOOslL3WqxlzOuU0M1P1eERmkLEVU2WSyc3RGtJro3b3MOWYCNdKMoZdncfOHJndkl4wm9V3GGc3uH98hs6OxLvBWgXoW9jZQ3n0vR2FtS2KYrPGuSuKGkxlt9Kw5TD6nri142NOimz05WK55Xe04YUQ1VZd51t0wzJGXolWgfzIQaK2zzhk5Zjlm+IQJxXqEWiJ2+O6TJ+lIttvsDSaUflcDXQ==';
+ // let str2 = 'R86mW9DzBw05pxBSh9ECh1stXxINmnudgZBbzU/cz1EcFgrEgdk0Zk4ruAiJZB2fP5c7d3gMmN8+Dv19IfARWSzw85xCEjUhpdcMJ0jn6ZE5H+muadND9LzjeVisojqwYxot3YVdKof7HMhPFN8QR0jfzqhjmnGFTlY1jMXzJK0MSOLNRLDar480CdKNb/cxALC8+xKIlhM9E4B31t8J4rNMUWSCAr49lbZ3jx3PxieBpTQUdDJz96AttR93Pc+c51wrxh0Ch/Mt4Rs09HGMXwIpNV+CxsGwSGRQUlyJo2k3d0WqsVzpz6S8A4VGEMTRLGI3IjEt+eWt7wM3nAXarg==';
+ // let str3 = 'D4eOsRqua+jYA5+ZOR9PLI2PExKjKfArQfv9/wGeG50bQSjWypShJPY6RQfO+rghyf0juzHIUSxqH91OxinhCFkONaF2Vod2QVyphyn9eh73dAcEFKIFFKGXoPCjbMWrr3p4d+hgVrHzrFeGqkRq8JFOvG2L5XDxVfWbV8KmUA0DKuz6QwWg7P4kesy+C7BbLALy5W/wfZchD3gnsBvx/pjFoe11VfAify9isLxg9a15jj52xr6lzQ9kge9C2JcV8yq85bFKaUpJWgobzz+BSIv3lVMU6vgcldmOrhkyiETpFGFGGF00DphGCEoK6uAyyNDh7+Jn8P17zf/DW1wV3A==';
+ // let uncrypted = RSA.decode(str, privateKey);
+ // log('解密数据:'+uncrypted);
+ // uncrypted = RSA.decode(str1, privateKey);
+ // log('解密数据1:'+uncrypted);
+ // uncrypted = RSA.decode(str2, privateKey);
+ // log('解密数据2:'+uncrypted);
+ // uncrypted = RSA.decode(str3, privateKey);
+ // log('解密数据3:'+uncrypted);
+
+ // log('rsax:'+typeof(rsax));
+ // log('rsaX:'+typeof(rsaX));
+ // let data = base64Encode('你好');
+ // let publicKey = 'dzyyds';
+ // console.log(typeof (RSA.encode));
+ // let encryptBase64Data = RSA.encode(data,publicKey);
+ // log('encryptBase64Data:'+encryptBase64Data);
+ // let str = RSA.decode(data,publicKey);
+ // log('str:'+str);
+}
+
+/**
+ * 执行预处理代码
+ */
+function pre(){
+ if(typeof(rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()){
+ let code = rule.预处理.trim();
+ console.log("执行预处理代码:"+code);
+ if(code.startsWith('js:')){
+ code = code.replace('js:','');
+ }
+ try {
+ // code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie
+ // 直接操作 rule_fetch_params 这个变量 .headers.Cookie
+ eval(code);
+ }catch (e) {
+ console.log('预处理执行失败:'+e.message);
+ }
+ }
+}
+
+let rule = {};
+let vercode = typeof(pdfl) ==='function'?'drpy2.1':'drpy2';
+const VERSION = vercode+' 3.9.49beta40 202400426';
+/** 已知问题记录
+ * 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
+ * Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
+ * 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend(合并文件了可以不管了)
+ * 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?)
+ * 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印(貌似不影响使用)
+ * 5.需要实现 stringify 函数,比起JSON.strifngify函数,它会原封不动保留中文不会编码unicode
+ * 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了)
+ * 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略)
+ * done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd}
+ * 8.req函数不支持传递字符串的data参数 {'content-type':'text/plain'} 类型数据,因此无法直接调用alist的ocr接口
+ * * 电脑看日志调试
+ adb tcpip 5555
+ adb connect 192.168.10.192
+ adb devices -l
+ adb logcat -c
+ adb logcat | grep -i QuickJS
+ adb logcat -c -b events
+ adb logcat -c -b main -b events -b radio -b system
+ adb logcat > 2.log DRPY:E | grep -i QuickJS
+ * **/
+
+
+/*** 以下是内置变量和解析方法 **/
+const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
+const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
+const UA = 'Mozilla/5.0';
+const UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36';
+const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
+const RULE_CK = 'cookie'; // 源cookie的key值
+// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识
+const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态';
+const TAB_EXCLUDE = '猜你|喜欢|下载|剧情|热播';
+const OCR_RETRY = 3;//ocr验证重试次数
+// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口
+// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口
+// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口
+// const OCR_API = 'http://cms.nokia.press:5707/parse/ocr';//ocr在线识别接口
+const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口
+if(typeof(MY_URL)==='undefined'){
+ var MY_URL; // 全局注入变量,pd函数需要
+}
+var HOST;
+var RKEY; // 源的唯一标识
+var fetch;
+var print;
+var log;
+var rule_fetch_params;
+var fetch_params; // 每个位置单独的
+var oheaders;
+// var play_url; // 二级详情页注入变量,为了适配js模式0 (不在这里定义了,直接二级里定义了个空字符串)
+var _pdfh;
+var _pdfa;
+var _pd;
+// const DOM_CHECK_ATTR = ['url', 'src', 'href', 'data-original', 'data-src'];
+const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/;
+// 过滤特殊链接,不走urlJoin
+const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/;
+const NOADD_INDEX = /:eq|:lt|:gt|:first|:last|^body$|^#/; // 不自动加eq下标索引
+const URLJOIN_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/; // 需要自动urljoin的属性
+const SELECT_REGEX = /:eq|:lt|:gt|#/g;
+const SELECT_REGEX_A = /:eq|:lt|:gt/g;
+
+/**
+ es6py扩展
+ */
+if (typeof Object.assign != 'function') {
+ Object.assign = function () {
+ let target = arguments[0];
+ for (let i = 1; i < arguments.length; i++) {
+ let source = arguments[i];
+ for (let key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+}
+if (!String.prototype.includes) {
+ String.prototype.includes = function (search, start) {
+ if (typeof start !== 'number') {
+ start = 0;
+ }
+
+ if (start + search.length > this.length) {
+ return false;
+ } else {
+ return this.indexOf(search, start) !== -1;
+ }
+ };
+}
+
+if (!Array.prototype.includes) {
+ Object.defineProperty(Array.prototype, 'includes', {
+ value: function (searchElement, fromIndex) {
+
+ if (this == null) {//this是空或者未定义,抛出错误
+ throw new TypeError('"this" is null or not defined');
+ }
+
+ var o = Object(this);//将this转变成对象
+ var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0
+
+ if (len === 0) {//length为0直接返回false未找到目标值
+ return false;
+ }
+
+ var n = fromIndex | 0;//查找起始索引
+ var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引,因为有可能是负值
+
+ while (k < len) {//从起始索引处开始循环
+ if (o[k] === searchElement) {//如果某一位置与寻找目标相等,返回true,找到了
+ return true;
+ }
+ k++;
+ }
+ return false;//未找到,返回false
+ }
+ });
+}
+if (typeof String.prototype.startsWith != 'function') {
+ String.prototype.startsWith = function (prefix){
+ return this.slice(0, prefix.length) === prefix;
+ };
+}
+if (typeof String.prototype.endsWith != 'function') {
+ String.prototype.endsWith = function(suffix) {
+ return this.indexOf(suffix, this.length - suffix.length) !== -1;
+ };
+}
+Object.prototype.myValues=function(obj){
+ if(obj ==null) {
+ throw new TypeError("Cannot convert undefined or null to object");
+ }
+ var res=[]
+ for(var k in obj){
+ if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
+ res.push(obj[k]);
+ }
+ }
+ return res;
+}
+if (typeof Object.prototype.values != 'function') {
+ Object.prototype.values=function(obj){
+ if(obj ==null) {
+ throw new TypeError("Cannot convert undefined or null to object");
+ }
+ var res=[]
+ for(var k in obj){
+ if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
+ res.push(obj[k]);
+ }
+ }
+ return res;
+ }
+}
+if (typeof Array.prototype.join != 'function') {
+ Array.prototype.join = function (emoji) {
+ // emoji = emoji||',';
+ emoji = emoji||'';
+ let self = this;
+ let str = "";
+ let i = 0;
+ if (!Array.isArray(self)) {throw String(self)+'is not Array'}
+ if(self.length===0){return ''}
+ if (self.length === 1){return String(self[0])}
+ i = 1;
+ str = this[0];
+ for (; i < self.length; i++) {
+ str += String(emoji)+String(self[i]);
+ }
+ return str;
+ };
+}
+if (typeof Array.prototype.toReversed != 'function') {
+ Array.prototype.toReversed = function () {
+ const clonedList = this.slice();
+ // 倒序新数组
+ const reversedList = clonedList.reverse();
+ return reversedList;
+ };
+}
+
+String.prototype.rstrip = function (chars) {
+ let regex = new RegExp(chars + "$");
+ return this.replace(regex, "");
+};
+
+Array.prototype.append = Array.prototype.push;
+String.prototype.strip = String.prototype.trim;
+function 是否正版(vipUrl){
+ let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv');
+ return flag.test(vipUrl);
+}
+function urlDeal(vipUrl){
+ if(!vipUrl){
+ return ''
+ }
+ if(!是否正版(vipUrl)){
+ return vipUrl
+ }
+ if(!/miguvideo/.test(vipUrl)){
+ vipUrl=vipUrl.split('#')[0].split('?')[0];
+ }
+ return vipUrl
+}
+function setResult(d){
+ if(!Array.isArray(d)){
+ return []
+ }
+ VODS = [];
+ // print(d);
+ d.forEach(function (it){
+ let obj = {
+ vod_id:it.url||'',
+ vod_name: it.title||'',
+ vod_remarks: it.desc||'',
+ vod_content: it.content||'',
+ vod_pic: it.pic_url||it.img||'',
+ };
+ let keys = Object.keys(it);
+ if(keys.includes('tname')){
+ obj.type_name = it.tname||'';
+ }
+ if(keys.includes('tid')){
+ obj.type_id = it.tid||'';
+ }
+ if(keys.includes('year')){
+ obj.vod_year = it.year||'';
+ }
+ if(keys.includes('actor')){
+ obj.vod_actor = it.actor||'';
+ }
+ if(keys.includes('director')){
+ obj.vod_director = it.director||'';
+ }
+ if(keys.includes('area')){
+ obj.vod_area = it.area||'';
+ }
+ VODS.push(obj);
+ });
+ return VODS
+}
+function setResult2(res){
+ VODS = res.list||[];
+ return VODS
+}
+function setHomeResult(res){
+ if(!res||typeof(res)!=='object'){
+ return []
+ }
+ return setResult(res.list);
+}
+// 猫了个咪
+function rc(js) {
+ if (js === 'maomi_aes.js') {
+ var a = CryptoJS.enc.Utf8.parse("625222f9149e961d");
+ var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");
+ return {
+ De: function (word) {
+ word = CryptoJS.enc.Hex.parse(word)
+ return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ },
+ En: function (word) {
+ // print(a);
+ // print(word);
+ var Encrypted = CryptoJS.AES.encrypt(word, a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ });
+ return Encrypted.ciphertext.toString();
+ }
+ };
+ }
+ return {};
+}
+
+// 千万不要用for in 推荐 forEach (for in 会打乱顺序)
+//猫函数
+function maoss(jxurl, ref, key) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ eval(getCryptoJS());
+ try {
+ var getVideoInfo = function (text) {
+ return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
+ };
+ var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key;
+ if (ref) {
+ var html = request(jxurl, {
+ headers: {
+ 'Referer': ref
+ }
+ });
+ } else {
+ var html = request(jxurl);
+ }
+ // print(html);
+ if (html.indexOf('&btwaf=') != -1) {
+ html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], {
+ headers: {
+ 'Referer': ref
+ }
+ })
+ }
+ var token_iv = html.split('_token = "')[1].split('"')[0];
+ var key = CryptoJS.enc.Utf8.parse(token_key);
+ var iv = CryptoJS.enc.Utf8.parse(token_iv);
+ // log("iv:"+iv);
+ // log(html);
+ // print(key);
+ // print(iv);
+ eval(html.match(/var config = {[\s\S]*?}/)[0] + '');
+ // config.url = config.url.replace(/,/g,'');
+ // print(config.url);
+ if (!config.url.startsWith('http')) {
+ //config.url = decodeURIComponent(AES(config.url, key, iv));
+ config.url = CryptoJS.AES.decrypt(config.url, key, {
+ iv: iv,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8)
+ }
+ return config.url;
+ } catch (e) {
+ return '';
+ }
+}
+
+function urlencode (str) {
+ str = (str + '').toString();
+ return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
+ replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
+}
+
+function base64Encode(text){
+ return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
+ // return text
+}
+
+function base64Decode(text){
+ return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text));
+ // return text
+}
+
+function md5(text) {
+ return CryptoJS.MD5(text).toString();
+}
+
+/**
+ * 字符串按指定编码
+ * @param input
+ * @param encoding
+ * @returns {*}
+ */
+function encodeStr(input,encoding){
+ encoding = encoding||'gbk';
+ if(encoding.startsWith('gb')){
+ const strTool = gbkTool();
+ input = strTool.encode(input);
+ }
+ return input
+}
+
+/**
+ * 字符串指定解码
+ * @param input
+ * @param encoding
+ * @returns {*}
+ */
+function decodeStr(input,encoding){
+ encoding = encoding||'gbk';
+ if(encoding.startsWith('gb')){
+ const strTool = gbkTool();
+ input = strTool.decode(input);
+ }
+ return input
+}
+
+function getCryptoJS(){
+ // return request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-hiker.js');
+ return 'console.log("CryptoJS已装载");'
+}
+
+// 封装的RSA加解密类
+const RSA = {
+ decode: function (data, key, option) {
+ option = option || {};
+ if (typeof (JSEncrypt) === 'function') {
+ let chunkSize = option.chunkSize || 117; // 默认分段长度为117
+ let privateKey = this.getPrivateKey(key); // 获取私钥
+ const decryptor = new JSEncrypt(); //创建解密对象实例
+ decryptor.setPrivateKey(privateKey); //设置秘钥
+ let uncrypted = '';
+ // uncrypted = decryptor.decrypt(data);
+ uncrypted = decryptor.decryptUnicodeLong(data);
+ return uncrypted;
+ } else {
+ return false
+ }
+ },
+ encode: function (data, key, option) {
+ option = option || {};
+ if (typeof (JSEncrypt) === 'function') {
+ let chunkSize = option.chunkSize || 117; // 默认分段长度为117
+ let publicKey = this.getPublicKey(key); // 获取公钥
+ const encryptor = new JSEncrypt();
+ encryptor.setPublicKey(publicKey); // 设置公钥
+ let encrypted = ''; // 加密结果
+ // const textLen = data.length; // 待加密文本长度
+ // let offset = 0; // 分段偏移量
+ // // 分段加密
+ // while (offset < textLen) {
+ // let chunk = data.slice(offset, chunkSize); // 提取分段数据
+ // let enc = encryptor.encrypt(chunk); // 加密分段数据
+ // encrypted += enc; // 连接加密结果
+ // offset += chunkSize; // 更新偏移量
+ // }
+ encrypted = encryptor.encryptUnicodeLong(data);
+ return encrypted
+ } else {
+ return false
+ }
+ },
+ fixKey(key, prefix, endfix) {
+ if (!key.includes(prefix)) {
+ key = prefix + key;
+ }
+ if (!key.includes(endfix)) {
+ key += endfix
+ }
+ return key
+ },
+ getPrivateKey(key) {
+ let prefix = '-----BEGIN RSA PRIVATE KEY-----';
+ let endfix = '-----END RSA PRIVATE KEY-----';
+ return this.fixKey(key, prefix, endfix);
+ },
+ getPublicKey(key) {
+ let prefix = '-----BEGIN PUBLIC KEY-----';
+ let endfix = '-----END PUBLIC KEY-----';
+ return this.fixKey(key, prefix, endfix);
+ }
+};
+
+/**
+ * 获取壳子返回的代理地址
+ * @returns {string|*}
+ */
+function getProxyUrl(){
+ if(typeof(getProxy)==='function'){//判断壳子里有getProxy函数就执行取返回结果。否则取默认的本地
+ return getProxy(true)
+ }else{
+ return 'http://127.0.0.1:9978/proxy?do=js'
+ }
+}
+
+/**
+ * 根据正则处理原始m3u8里的广告ts片段,自动修复相对链接
+ * @param m3u8_text m3u8原始文本,里面是最末级的只含ts片段的。不支持嵌套m3u8链接
+ * @param m3u8_url m3u8原始地址
+ * @param ad_remove 正则表达式如: reg:/video/adjump(.*?)ts
+ * @returns {string|DocumentFragment|*|string}
+ */
+function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
+ if ((!m3u8_text && !m3u8_url) || (!m3u8_text && m3u8_url && !m3u8_url.startsWith('http'))) {
+ return ''
+ }
+ if (!m3u8_text) {
+ log('m3u8_url:' + m3u8_url);
+ m3u8_text = request(m3u8_url);
+ }
+ log('len(m3u8_text):' + m3u8_text.length);
+ if (!ad_remove) {
+ return m3u8_text
+ }
+ if (ad_remove.startsWith('reg:')) {
+ ad_remove = ad_remove.slice(4)
+ } else if (ad_remove.startsWith('js:')) {
+ ad_remove = ad_remove.slice(3)
+ }
+ let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf('#EXTINF')).trim();
+ let m3u8_body = m3u8_text.slice(m3u8_text.indexOf('#EXTINF'), m3u8_text.indexOf('#EXT-X-ENDLIST')).trim();
+ let m3u8_end = m3u8_text.slice(m3u8_text.indexOf('#EXT-X-ENDLIST')).trim();
+ let murls = [];
+ let m3_body_list = m3u8_body.split('\n');
+ let m3_len = m3_body_list.length;
+ let i = 0;
+ while (i < m3_len) {
+ let mi = m3_body_list[i];
+ let mi_1 = m3_body_list[i + 1];
+ if (mi.startsWith('#EXTINF')) {
+ murls.push([mi, mi_1].join('&'));
+ i += 2
+ } else if (mi.startsWith('#EXT-X-DISCONTINUITY')) {
+ let mi_2 = m3_body_list[i + 2];
+ murls.push([mi, mi_1, mi_2].join('&'));
+ i += 3
+ } else {
+ break;
+ }
+ }
+ let new_m3u8_body = [];
+ for (let murl of murls) {
+ if (ad_remove && new RegExp(ad_remove).test(murl)) {
+
+ } else {
+ let murl_list = murl.split('&');
+ if (!murl_list[murl_list.length - 1].startsWith('http') && m3u8_url.startsWith('http')) {
+ murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1]);
+ }
+ murl_list.forEach((it) => {
+ new_m3u8_body.push(it);
+ });
+ }
+
+ }
+ new_m3u8_body = new_m3u8_body.join('\n').trim();
+ m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join('\n').trim();
+ return m3u8_text
+}
+
+/**
+ * 智能对比去除广告。支持嵌套m3u8。只需要传入播放地址
+ * @param m3u8_url m3u8播放地址
+ * @returns {string}
+ */
+function fixAdM3u8Ai(m3u8_url) {
+ let ts = new Date().getTime();
+
+ function b(s1, s2) {
+ let i = 0;
+ while (i < s1.length) {
+ if (s1[i] !== s2[i]) {
+ break
+ }
+ i++
+ }
+ return i;
+ }
+
+ function reverseString(str) {
+ return str.split('').reverse().join('');
+ }
+
+ //log('播放的地址:' + m3u8_url);
+ let m3u8 = request(m3u8_url);
+ //log('m3u8处理前:' + m3u8);
+ m3u8 = m3u8.trim().split('\n').map(it => it.startsWith('#') ? it : urljoin(m3u8_url, it)).join('\n');
+ //log('m3u8处理后:============:' + m3u8);
+ // 获取嵌套m3u8地址
+ let last_url = m3u8.split('\n').slice(-1)[0];
+ if (last_url.includes('.m3u8') && last_url !== m3u8_url) {
+ m3u8_url = last_url;
+ //log('嵌套的m3u8_url:' + m3u8_url);
+ m3u8 = request(m3u8_url);
+ }
+ //log('----处理有广告的地址----');
+ let s = m3u8.trim().split('\n').filter(it => it.trim()).join('\n');
+ let ss = s.split('\n')
+ //找出第一条播放地址
+ let firststr = ss.find(x => !x.startsWith('#'));
+ let maxl = 0;//最大相同字符
+ let firststrlen = firststr.length;
+ //log('字符串长度:' + firststrlen);
+ let ml = Math.round(ss.length / 2).toString().length;//取数据的长度的位数
+ //log('数据条数的长度:' + ml);
+ //找出最后一条播放地址
+ let laststr = ss.toReversed().find((x) => {
+ if (!x.startsWith('#')) {
+ let k = b(reverseString(firststr), reverseString(x));
+ maxl = b(firststr, x);
+ if (firststrlen - maxl <= ml + k) {
+ return true
+ }
+ }
+ return false
+ });
+ log('最后一条切片:' + laststr);
+ //log('最小相同字符长度:' + maxl);
+ let ad_urls = [];
+ for (let i = 0; i < ss.length; i++) {
+ let s = ss[i];
+ if (!s.startsWith('#')) {
+ if (b(firststr, s) < maxl) {
+ ad_urls.push(s); // 广告地址加入列表
+ ss.splice(i - 1, 2);
+ i = i - 2;
+ } else {
+ ss[i] = urljoin(m3u8_url, s);
+ }
+ } else {
+ ss[i] = s.replace(/URI=\"(.*)\"/, 'URI=\"' + urljoin(m3u8_url, '$1') + '\"');
+ }
+ }
+ log('处理的m3u8地址:' + m3u8_url);
+ log('----广告地址----');
+ log(ad_urls);
+ m3u8 = ss.join('\n');
+ //log('处理完成');
+ log('处理耗时:' + (new Date().getTime() - ts).toString());
+ return m3u8
+}
+
+/**
+ * 强制正序算法
+ * @param lists 待正序列表
+ * @param key 正序键
+ * @param option 单个元素处理函数
+ * @returns {*}
+ */
+function forceOrder(lists,key,option){
+ let start = Math.floor(lists.length/2);
+ let end = Math.min(lists.length-1,start+1);
+ if(start >= end){
+ return lists;
+ }
+ let first = lists[start];
+ let second = lists[end];
+ if(key){
+ try {
+ first = first[key];
+ second = second[key];
+ }catch (e) {}
+ }
+ if(option && typeof(option)==='function'){
+ try {
+ first = option(first);
+ second = option(second);
+ }catch (e) {}
+ }
+ first+='';
+ second+='';
+ // console.log(first,second);
+ if(first.match(/(\d+)/)&&second.match(/(\d+)/)){
+ let num1 = Number(first.match(/(\d+)/)[1]);
+ let num2 = Number(second.match(/(\d+)/)[1]);
+ if (num1 > num2){
+ lists.reverse();
+ }
+ }
+ return lists
+}
+
+let VODS = [];// 一级或者搜索需要的数据列表
+let VOD = {};// 二级的单个数据
+let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
+let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']]
+globalThis.encodeUrl = urlencode;
+globalThis.urlencode = urlencode;
+
+
+
+/**
+ * url拼接
+ * @param fromPath 初始当前页面url
+ * @param nowPath 相对当前页面url
+ * @returns {*}
+ */
+function urljoin(fromPath, nowPath) {
+ fromPath = fromPath||'';
+ nowPath = nowPath||'';
+ return joinUrl(fromPath, nowPath);
+ // try {
+ // // import Uri from './uri.min.js';
+ // // var Uri = require('./uri.min.js');
+ // // eval(request('https://cdn.bootcdn.net/ajax/libs/URI.js/1.19.11/URI.min.js'));
+ // // let new_uri = URI(nowPath, fromPath);
+
+ // let new_uri = Uri(nowPath, fromPath);
+ // new_uri = new_uri.toString();
+ // // console.log(new_uri);
+ // // return fromPath + nowPath
+ // return new_uri
+ // }
+ // catch (e) {
+ // console.log('urljoin发生错误:'+e.message);
+ // if(nowPath.startsWith('http')){
+ // return nowPath
+ // }if(nowPath.startsWith('/')){
+ // return getHome(fromPath)+nowPath
+ // }
+ // return fromPath+nowPath
+ // }
+}
+var urljoin2 = urljoin;
+
+// 内置 pdfh,pdfa,pd
+const defaultParser = {
+ pdfh:pdfh,
+ pdfa:pdfa,
+ pd:pd,
+};
+
+
+/**
+ * pdfh原版优化,能取style属性里的图片链接
+ * @param html 源码
+ * @param parse 解析表达式
+ * @returns {string|*}
+ */
+function pdfh2(html,parse){
+ let html2 = html;
+ try {
+ if(typeof(html)!=='string'){
+ html2 = html.rr(html.ele).toString();
+ }
+ }catch (e) {
+ print('html对象转文本发生了错误:'+e.message);
+ }
+ let result = defaultParser.pdfh(html2,parse);
+ let option = parse.includes('&&')?parse.split('&&').slice(-1)[0]:parse.split(' ').slice(-1)[0];
+ if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){
+ try {
+ result = result.match(/url\((.*?)\)/)[1];
+ // 2023/07/28新增 style取内部链接自动去除首尾单双引号
+ result = result.replace(/^['|"](.*)['|"]$/, "$1");
+ }catch (e) {}
+ }
+ return result
+}
+
+/**
+ * pdfa原版优化,可以转换jq的html对象
+ * @param html
+ * @param parse
+ * @returns {*}
+ */
+function pdfa2(html,parse){
+ let html2 = html;
+ try {
+ if(typeof(html)!=='string'){
+ html2 = html.rr(html.ele).toString();
+ }
+ }catch (e) {
+ print('html对象转文本发生了错误:'+e.message);
+ }
+ return defaultParser.pdfa(html2,parse);
+}
+
+/**
+ * pd原版方法重写-增加自动urljoin
+ * @param html
+ * @param parse
+ * @param uri
+ * @returns {*}
+ */
+function pd2(html,parse,uri){
+ let ret = pdfh2(html,parse);
+ if(typeof(uri)==='undefined'||!uri){
+ uri = '';
+ }
+ if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){
+ if(/http/.test(ret)){
+ ret = ret.slice(ret.indexOf('http'));
+ }else{
+ ret = urljoin(MY_URL,ret)
+ }
+ }
+ // MY_URL = getItem('MY_URL',MY_URL);
+ // console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`);
+ return ret
+}
+
+const parseTags = {
+ jsp:{
+ pdfh:pdfh2,
+ pdfa:pdfa2,
+ pd:pd2,
+ },
+ json:{
+ pdfh(html, parse) {
+ if (!parse || !parse.trim()){
+ return '';
+ }
+ if (typeof(html) === 'string'){
+ // print('jsonpath:pdfh字符串转dict');
+ html = JSON.parse(html);
+ }
+ parse = parse.trim();
+ if (!parse.startsWith('$.')){
+ parse = '$.' + parse;
+ }
+ parse = parse.split('||');
+ for (let ps of parse) {
+ let ret = cheerio.jp(ps, html);
+ if (Array.isArray(ret)){
+ ret = ret[0] || '';
+ } else{
+ ret = ret || ''
+ }
+ if (ret && typeof (ret) !== 'string'){
+ ret = ret.toString();
+ }
+ if(ret){
+ return ret
+ }
+ }
+ return '';
+ },
+ pdfa(html, parse) {
+ if (!parse || !parse.trim()){
+ return '';
+ }
+ if (typeof(html) === 'string'){
+ // print('jsonpath:pdfa字符串转dict');
+ html = JSON.parse(html);
+ }
+ parse = parse.trim()
+ if (!parse.startsWith('$.')){
+ parse = '$.' + parse;
+ }
+ let ret = cheerio.jp(parse, html);
+ if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1){
+ return ret[0] || []
+ }
+ return ret || []
+ },
+ pd(html,parse){
+ let ret = parseTags.json.pdfh(html,parse);
+ if(ret){
+ return urljoin(MY_URL,ret);
+ }
+ return ret
+ },
+ },
+ jq:{
+ pdfh(html, parse) {
+ if (!html||!parse || !parse.trim()) {
+ return ''
+ }
+ parse = parse.trim();
+ let result = defaultParser.pdfh(html,parse);
+ // print(`pdfh解析${parse}=>${result}`);
+ return result;
+ },
+ pdfa(html, parse) {
+ if (!html||!parse || !parse.trim()) {
+ return [];
+ }
+ parse = parse.trim();
+ let result = defaultParser.pdfa(html,parse);
+ // print(result);
+ print(`pdfa解析${parse}=>${result.length}`);
+ return result;
+ },
+ pd(html,parse,base_url){
+ if (!html||!parse || !parse.trim()) {
+ return ''
+ }
+ parse = parse.trim();
+ base_url = base_url||MY_URL;
+ return defaultParser.pd(html, parse, base_url);
+ },
+ },
+ getParse(p0){//非js开头的情况自动获取解析标签
+ if(p0.startsWith('jsp:')){
+ return this.jsp
+ }else if(p0.startsWith('json:')){
+ return this.json
+ }else if(p0.startsWith('jq:')){
+ return this.jq
+ }else {
+ return this.jq
+ }
+ }
+};
+
+const stringify = JSON.stringify;
+const jsp = parseTags.jsp;
+const jq = parseTags.jq;
+
+/*** 后台需要实现的java方法并注入到js中 ***/
+
+/**
+ * 读取本地文件->应用程序目录
+ * @param filePath
+ * @returns {string}
+ */
+function readFile(filePath){
+ filePath = filePath||'./uri.min.js';
+ var fd = os.open(filePath);
+ var buffer = new ArrayBuffer(1024);
+ var len = os.read(fd, buffer, 0, 1024);
+ console.log(len);
+ let text = String.fromCharCode.apply(null, new Uint8Array(buffer));
+ console.log(text);
+ return text
+}
+
+/**
+ * 处理返回的json数据
+ * @param html
+ * @returns {*}
+ */
+function dealJson(html) {
+ try {
+ // html = html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1];
+ html = html.trim();
+ if(!((html.startsWith('{') && html.endsWith('}'))||(html.startsWith('[') && html.endsWith(']')))){
+ html = '{'+html.match(/.*?\{(.*)\}/m)[1]+'}';
+ }
+ } catch (e) {
+ }
+ try {
+ html = JSON.parse(html);
+ }catch (e) {}
+ // console.log(typeof(html));
+ return html;
+}
+
+/**
+ * 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口)
+ * @type {{api: string, classification: (function(*=): string)}}
+ */
+var OcrApi={
+ api:OCR_API,
+ classification:function (img){ // img是byte类型,这里不方便搞啊
+ let code = '';
+ try {
+ // let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
+ // html = JSON.parse(html);
+ // code = html.url||'';
+ log('通过drpy_ocr验证码接口过验证...');
+ let html = request(OCR_API,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
+ code = html||'';
+ }catch (e) {
+ log(`OCR识别验证码发生错误:${e.message}`)
+ }
+ return code
+ }
+};
+/**
+ * 验证码识别,暂未实现
+ * @param url 验证码图片链接
+ * @returns {string} 验证成功后的cookie
+ */
+function verifyCode(url){
+ let cnt = 0;
+ let host = getHome(url);
+ let cookie = '';
+ while (cnt < OCR_RETRY){
+ try{
+ // let obj = {headers:headers,timeout:timeout};
+ let yzm_url = `${host}/index.php/verify/index.html`;
+ console.log(`验证码链接:${yzm_url}`);
+ let hhtml = request(yzm_url,{withHeaders:true,toBase64:true},true);
+ let json = JSON.parse(hhtml);
+ if(!cookie){
+ // print(json);
+ let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie');
+ // cookie = json['set-cookie']?json['set-cookie'].split(';')[0]:'';
+ cookie = setCk?json[setCk].split(';')[0]:'';
+ }
+ // console.log(hhtml);
+ console.log('cookie:'+cookie);
+ let img = json.body;
+ // console.log(img);
+ let code = OcrApi.classification(img);
+ console.log(`第${cnt+1}次验证码识别结果:${code}`);
+ let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`;
+ console.log(submit_url);
+ let html = request(submit_url,{headers:{Cookie:cookie,'User-Agent':MOBILE_UA},'method':'POST'});
+ // console.log(html);
+ html = JSON.parse(html);
+ if(html.msg === 'ok'){
+ console.log(`第${cnt+1}次验证码提交成功`);
+ return cookie // 需要返回cookie
+ }else if(html.msg!=='ok'&&cnt+1>=OCR_RETRY){
+ cookie = ''; // 需要清空返回cookie
+ }
+ }catch (e) {
+ console.log(`第${cnt+1}次验证码提交失败:${e.message}`);
+ if(cnt+1>=OCR_RETRY){
+ cookie = '';
+ }
+ }
+ cnt+=1
+ }
+ return cookie
+}
+
+/**
+ * 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存
+ * @param k 键
+ * @param v 值
+ */
+function setItem(k,v){
+ local.set(RKEY,k,v);
+ console.log(`规则${RKEY}设置${k} => ${v}`)
+}
+
+/**
+ * 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里
+ * @param k 键
+ * @param v 值
+ * @returns {*}
+ */
+function getItem(k,v){
+ return local.get(RKEY,k) || v;
+}
+
+/**
+ * 删除数据库key对应的一条数据,并清除此key对应的内存缓存
+ * @param k
+ */
+function clearItem(k){
+ local.delete(RKEY,k);
+}
+
+/*** js自封装的方法 ***/
+
+/**
+ * 获取链接的host(带http协议的完整链接)
+ * @param url 任意一个正常完整的Url,自动提取根
+ * @returns {string}
+ */
+function getHome(url){
+ if(!url){
+ return ''
+ }
+ let tmp = url.split('//');
+ url = tmp[0] + '//' + tmp[1].split('/')[0];
+ try {
+ url = decodeURIComponent(url);
+ }catch (e) {}
+ return url
+}
+
+/**
+ * get参数编译链接,类似python params字典自动拼接
+ * @param url 访问链接
+ * @param obj 参数字典
+ * @returns {*}
+ */
+function buildUrl(url,obj){
+ obj = obj||{};
+ if(url.indexOf('?')<0){
+ url += '?'
+ }
+ let param_list = [];
+ let keys = Object.keys(obj);
+ keys.forEach(it=>{
+ param_list.push(it+'='+obj[it])
+ });
+ let prs = param_list.join('&');
+ if(keys.length > 0 && !url.endsWith('?')){
+ url += '&'
+ }
+ url+=prs;
+ return url
+}
+
+/**
+ * 远程依赖执行函数
+ * @param url 远程js地址
+ */
+function require(url){
+ eval(request(url));
+}
+/**
+ * 海阔网页请求函数完整封装
+ * @param url 请求链接
+ * @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false}
+ * @param ocr_flag 标识此flag是用于请求ocr识别的,自动过滤content-type指定编码
+ * @returns {string|string|DocumentFragment|*}
+ */
+function request(url,obj,ocr_flag){
+ ocr_flag = ocr_flag||false;
+ if(typeof(obj)==='undefined'||!obj||obj==={}){
+ if(!fetch_params||!fetch_params.headers){
+ let headers = {
+ 'User-Agent':MOBILE_UA,
+ };
+ if(rule.headers){
+ Object.assign(headers,rule.headers);
+ }
+ if(!fetch_params){
+ fetch_params = {};
+ }
+ fetch_params.headers = headers;
+ }
+ if(!fetch_params.headers.Referer){
+ fetch_params.headers.Referer = getHome(url)
+ }
+ obj = fetch_params;
+ }else{
+ let headers = obj.headers||{};
+ let keys = Object.keys(headers).map(it=>it.toLowerCase());
+ if(!keys.includes('user-agent')){
+ headers['User-Agent'] = MOBILE_UA;
+ }if(!keys.includes('referer')){
+ headers['Referer'] = getHome(url);
+ }
+ obj.headers = headers;
+ }
+ if(rule.encoding&&rule.encoding!=='utf-8'&&!ocr_flag){
+ if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
+ obj.headers["Content-Type"] = 'text/html; charset='+rule.encoding;
+ }
+ }
+ if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){
+ // let data = {};
+ // obj.body.split('&').forEach(it=>{
+ // data[it.split('=')[0]] = it.split('=')[1]
+ // });
+ // obj.data = data;
+ // delete obj.body
+
+ // 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form
+ if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
+ obj.headers["Content-Type"] = 'application/x-www-form-urlencoded; charset='+rule.encoding;
+ }
+ }else if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='object'){
+ obj.data = obj.body;
+ delete obj.body
+ }
+ if(!url){
+ return obj.withHeaders?'{}':''
+ }
+ if(obj.toBase64){ // 返回base64,用于请求图片
+ obj.buffer = 2;
+ delete obj.toBase64
+ }
+ if(obj.redirect===false){
+ obj.redirect = 0;
+ }
+ console.log(JSON.stringify(obj.headers));
+ // console.log('request:'+url+' obj:'+JSON.stringify(obj));
+ console.log('request:'+url+`|method:${obj.method||'GET'}|body:${obj.body||''}`);
+ let res = req(url, obj);
+ let html = res.content||'';
+ // console.log(html);
+ if(obj.withHeaders){
+ let htmlWithHeaders = res.headers;
+ htmlWithHeaders.body = html;
+ return JSON.stringify(htmlWithHeaders);
+ }else{
+ return html
+ }
+}
+
+/**
+ * 快捷post请求
+ * @param url 地址
+ * @param obj 对象
+ * @returns {string|DocumentFragment|*}
+ */
+function post(url,obj){
+ obj.method = 'POST';
+ return request(url,obj);
+}
+
+fetch = request;
+print = function (data){
+ data = data||'';
+ if(typeof(data)=='object'&&Object.keys(data).length>0){
+ try {
+ data = JSON.stringify(data);
+ console.log(data);
+ }catch (e) {
+ // console.log('print:'+e.message);
+ console.log(typeof(data)+':'+data.length);
+ return
+ }
+ }else if(typeof(data)=='object'&&Object.keys(data).length<1){
+ console.log('null object');
+ }else{
+ console.log(data);
+ }
+}
+log = print;
+/**
+ * 检查宝塔验证并自动跳过获取正确源码
+ * @param html 之前获取的html
+ * @param url 之前的来源url
+ * @param obj 来源obj
+ * @returns {string|DocumentFragment|*}
+ */
+function checkHtml(html,url,obj){
+ if(/\?btwaf=/.test(html)){
+ let btwaf = html.match(/btwaf(.*?)"/)[1];
+ url = url.split('#')[0]+'?btwaf'+btwaf;
+ print('宝塔验证访问链接:'+url);
+ html = request(url,obj);
+ }
+ return html
+}
+
+/**
+ * 带一次宝塔验证的源码获取
+ * @param url 请求链接
+ * @param obj 请求参数
+ * @returns {string|DocumentFragment}
+ */
+function getCode(url,obj){
+ let html = request(url,obj);
+ html = checkHtml(html,url,obj);
+ return html
+}
+
+/**
+ * 源rule专用的请求方法,自动注入cookie
+ * @param url 请求链接
+ * @returns {string|DocumentFragment}
+ */
+function getHtml(url){
+ let obj = {};
+ if(rule.headers){
+ obj.headers = rule.headers;
+ }
+ let cookie = getItem(RULE_CK,'');
+ if(cookie){
+ // log('有cookie:'+cookie);
+ if(obj.headers && ! Object.keys(obj.headers).map(it=>it.toLowerCase()).includes('cookie')){
+ log('历史无cookie,新增过验证后的cookie');
+ obj.headers['Cookie'] = cookie;
+ }else if(obj.headers && obj.headers.cookie && obj.headers.cookie!==cookie){
+ obj.headers['Cookie'] = cookie;
+ log('历史有小写过期的cookie,更新过验证后的cookie');
+ }else if(obj.headers && obj.headers.Cookie && obj.headers.Cookie!==cookie){
+ obj.headers['Cookie'] = cookie;
+ log('历史有大写过期的cookie,更新过验证后的cookie');
+ }else if(!obj.headers){
+ obj.headers = {Cookie:cookie};
+ log('历史无headers,更新过验证后的含cookie的headers');
+ }
+ }
+ let html = getCode(url,obj);
+ return html
+}
+
+/**
+ * 首页分类解析,筛选暂未实现
+ * @param homeObj 首页传参对象
+ * @returns {string}
+ */
+function homeParse(homeObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let classes = [];
+ if (homeObj.class_name && homeObj.class_url) {
+ let names = homeObj.class_name.split('&');
+ let urls = homeObj.class_url.split('&');
+ let cnt = Math.min(names.length, urls.length);
+ for (let i = 0; i < cnt; i++) {
+ classes.push({
+ 'type_id': urls[i],
+ 'type_name': names[i]
+ });
+ }
+ }
+
+ if (homeObj.class_parse) {
+ if(homeObj.class_parse.startsWith('js:')) {
+ var input = homeObj.MY_URL;
+ try {
+ eval(homeObj.class_parse.replace('js:', ''));
+ if (Array.isArray(input)) {
+ classes = input;
+ }
+ }catch(e){
+ log('通过js动态获取分类发生了错误:'+e.message);
+ }
+ }else {
+ let p = homeObj.class_parse.split(';');
+ let p0 = p[0];
+ let _ps = parseTags.getParse(p0);
+ let is_json = p0.startsWith('json:');
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ MY_URL = rule.url;
+ if(is_json){
+ try {
+ let cms_cate_url = homeObj.MY_URL.replace('ac=detail','ac=list');
+ let html = getHtml(cms_cate_url);
+ if (html) {
+ if(cms_cate_url === homeObj.MY_URL){
+ homeHtmlCache = html;
+ }
+ let list = _pdfa(html, p0.replace('json:',''));
+ if (list && list.length > 0) {
+ classes = list;
+ }
+ }
+ } catch (e) {
+ console.log(e.message);
+ }
+ } else if(p.length >= 3 && !is_json) { // 可以不写正则
+ try {
+ let html = getHtml(homeObj.MY_URL);
+ if (html) {
+ homeHtmlCache = html;
+ let list = _pdfa(html, p0);
+ if (list && list.length > 0) {
+ list.forEach((it, idex) => {
+ try {
+ let name = _pdfh(it, p[1]);
+ if (homeObj.cate_exclude && (new RegExp(homeObj.cate_exclude).test(name))) {
+ return;
+ }
+ // let url = pdfh(it, p[2]);
+ let url = _pd(it, p[2]);
+ if (p.length > 3 && p[3]) {
+ let exp = new RegExp(p[3]);
+ url = url.match(exp)[1];
+ }
+
+ classes.push({
+ 'type_id': url.trim(),
+ 'type_name': name.trim()
+ });
+ } catch (e) {
+ console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`);
+ }
+ });
+ }
+ }
+ } catch (e) {
+ console.log(e.message);
+ }
+
+ }
+ }
+ }
+ // 排除分类
+ classes = classes.filter(it=>!homeObj.cate_exclude || !(new RegExp(homeObj.cate_exclude).test(it.type_name)));
+ let resp = {
+ 'class': classes
+ };
+ if(homeObj.filter){
+ resp.filters = homeObj.filter;
+ }
+ console.log(JSON.stringify(resp));
+ return JSON.stringify(resp);
+
+}
+
+/**
+ * 推荐和搜索单字段继承一级
+ * @param p 推荐或搜索的解析分割;列表
+ * @param pn 自身列表序号
+ * @param pp 一级解析分割;列表
+ * @param ppn 继承一级序号
+ * @returns {*}
+ */
+function getPP(p, pn, pp, ppn){
+ try {
+ let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn]
+ return ps
+ }catch (e) {
+ return ''
+ }
+}
+
+/**
+ * 首页推荐列表解析
+ * @param homeVodObj
+ * @returns {string}
+ */
+function homeVodParse(homeVodObj){
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ MY_URL = homeVodObj.homeUrl;
+ // setItem('MY_URL',MY_URL);
+ console.log(MY_URL);
+ let t1 = (new Date()).getTime();
+ let p = homeVodObj.推荐;
+ print('p:'+p);
+ if(p==='*' && rule.一级){
+ p = rule.一级;
+ homeVodObj.double = false;
+ }
+ if(!p||typeof(p)!=='string'){
+ return '{}'
+ }
+ p = p.trim();
+ let pp = rule.一级.split(';');
+ if(p.startsWith('js:')){
+ const TYPE = 'home';
+ var input = MY_URL;
+ HOST = rule.host;
+ eval(p.replace('js:',''));
+ d = VODS;
+ }else {
+ p = p.split(';');
+ if (!homeVodObj.double && p.length < 5) {
+ return '{}'
+ } else if (homeVodObj.double && p.length < 6) {
+ return '{}'
+ }
+ let p0 = getPP(p,0,pp,0)
+ let _ps = parseTags.getParse(p0);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p0.startsWith('json:');
+ p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
+ // print(p[0]);
+ let html = homeHtmlCache || getHtml(MY_URL);
+ homeHtmlCache = undefined;
+ if(is_json){
+ // print('是json,开始处理');
+ html = dealJson(html);
+ }
+ try {
+ console.log('double:' + homeVodObj.double);
+ if (homeVodObj.double) {
+ let items = _pdfa(html, p0);
+ // console.log(items.length);
+ let p1 = getPP(p,1,pp,0);
+ let p2 = getPP(p,2,pp,1);
+ let p3 = getPP(p,3,pp,2);
+ let p4 = getPP(p,4,pp,3);
+ let p5 = getPP(p,5,pp,4);
+ let p6 = getPP(p,6,pp,5);
+ for (let item of items) {
+ // console.log(p[1]);
+ let items2 = _pdfa(item, p1);
+ // console.log(items2.length);
+ for (let item2 of items2) {
+ try {
+ let title = _pdfh(item2, p2);
+ let img = '';
+ try {
+ img = _pd(item2, p3);
+ } catch (e) {}
+ let desc = '';
+ try {
+ desc = _pdfh(item2, p4);
+ }catch (e) {}
+ let links = [];
+ for (let _p5 of p5.split('+')) {
+ let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5);
+ links.push(link);
+ }
+ let content;
+ if(p.length > 6 && p[6]){
+ content = _pdfh(item2, p6);
+ } else{
+ content = '';
+ }
+ let vid = links.join('$');
+ if(rule.二级==='*'){
+ vid = vid+'@@'+title+'@@'+img;
+ }
+ let vod = {
+ vod_name: title,
+ vod_pic: img,
+ vod_remarks: desc,
+ vod_content: content,
+ vod_id: vid
+ };
+ // print(vod);
+ d.push(vod);
+ } catch (e) {
+ console.log('首页列表双层定位处理发生错误:'+e.message);
+ }
+
+ }
+
+
+ }
+
+
+ } else {
+ let items = _pdfa(html, p0);
+ let p1 = getPP(p,1,pp,1);
+ let p2 = getPP(p,2,pp,2);
+ let p3 = getPP(p,3,pp,3);
+ let p4 = getPP(p,4,pp,4);
+ let p5 = getPP(p,5,pp,5);
+
+ for (let item of items) {
+ try {
+ let title = _pdfh(item, p1);
+ let img = '';
+ try {
+ img = _pd(item, p2, MY_URL);
+ } catch (e) {}
+ let desc = '';
+ try {
+ desc = _pdfh(item, p3);
+ }catch (e) {}
+ let links = [];
+ for (let _p5 of p4.split('+')) {
+ let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5);
+ links.push(link);
+ }
+ let content;
+ if(p.length > 5 && p[5]){
+ content = _pdfh(item, p5);
+ }else{
+ content = ''
+ }
+ let vid = links.join('$');
+ if(rule.二级==='*'){
+ vid = vid+'@@'+title+'@@'+img;
+ }
+ let vod = {
+ vod_name: title,
+ vod_pic: img,
+ vod_remarks: desc,
+ vod_content: content,
+ vod_id: vid
+ };
+ d.push(vod);
+
+ } catch (e) {
+ console.log('首页列表单层定位处理发生错误:'+e.message);
+ }
+
+ }
+
+ }
+
+ } catch (e) {
+
+ }
+ }
+ let t2 = (new Date()).getTime();
+ console.log('加载首页推荐耗时:'+(t2-t1)+'毫秒');
+ // console.log(JSON.stringify(d));
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
+ }
+ });
+ }
+ if(rule.图片来源){
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic + rule.图片来源;
+ }
+ });
+ }
+ if(d.length>0){
+ print(d.slice(0,2));
+ }
+ return JSON.stringify({
+ list:d
+ })
+}
+
+/**
+ * 一级分类页数据解析
+ * @param cateObj
+ * @returns {string}
+ */
+function categoryParse(cateObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let p = cateObj.一级;
+ if(!p||typeof(p)!=='string'){
+ return '{}'
+ }
+ let d = [];
+ // let url = cateObj.url.replaceAll('fyclass', cateObj.tid).replaceAll('fypage', cateObj.pg);
+ let url = cateObj.url.replaceAll('fyclass', cateObj.tid);
+ if(cateObj.pg === 1 && url.includes('[')&&url.includes(']')){
+ url = url.split('[')[1].split(']')[0];
+ }else if(cateObj.pg > 1 && url.includes('[')&&url.includes(']')){
+ url = url.split('[')[0];
+ }
+ if(rule.filter_url){
+ if(!/fyfilter/.test(url)){
+ if(!url.endsWith('&')&&!rule.filter_url.startsWith('&')){
+ url+='&'
+ }
+ url+=rule.filter_url;
+ }else{
+ url = url.replace('fyfilter', rule.filter_url);
+ }
+ // console.log('filter:'+cateObj.filter);
+ let fl = cateObj.filter?cateObj.extend:{};
+ // 自动合并 不同分类对应的默认筛选
+ if(rule.filter_def && typeof(rule.filter_def)==='object'){
+ try {
+ if(Object.keys(rule.filter_def).length>0 && rule.filter_def.hasOwnProperty(cateObj.tid)){
+ let self_fl_def = rule.filter_def[cateObj.tid];
+ if(self_fl_def && typeof(self_fl_def)==='object'){
+ // 引用传递转值传递,避免污染self变量
+ let fl_def = JSON.parse(JSON.stringify(self_fl_def));
+ fl = Object.assign(fl_def,fl);
+ }
+ }
+ }catch (e) {
+ print('合并不同分类对应的默认筛选出错:'+e.message);
+ }
+ }
+ let new_url;
+ new_url = cheerio.jinja2(url,{fl:fl});
+ // console.log('jinjia2执行后的new_url类型为:'+typeof(new_url));
+ url = new_url;
+ }
+ if(/fypage/.test(url)){
+ if(url.includes('(')&&url.includes(')')){
+ let url_rep = url.match(/.*?\((.*)\)/)[1];
+ // console.log(url_rep);
+ let cnt_page = url_rep.replaceAll('fypage', cateObj.pg);
+ // console.log(cnt_page);
+ let cnt_pg = eval(cnt_page);
+ // console.log(cnt_pg);
+ url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
+ }else{
+ url = url.replaceAll('fypage',cateObj.pg);
+ }
+ }
+
+ MY_URL = url;
+ // setItem('MY_URL',MY_URL);
+ console.log(MY_URL);
+ p = p.trim();
+ const MY_CATE = cateObj.tid;
+ if(p.startsWith('js:')){
+ var MY_FL = cateObj.extend;
+ const TYPE = 'cate';
+ var input = MY_URL;
+ const MY_PAGE = cateObj.pg;
+ var desc = '';
+ eval(p.trim().replace('js:',''));
+ d = VODS;
+ }else {
+ p = p.split(';');
+ if (p.length < 5) {
+ return '{}'
+ }
+ let _ps = parseTags.getParse(p[0]);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p[0].startsWith('json:');
+ p[0] = p[0].replace(/^(jsp:|json:|jq:)/,'');
+ try {
+ let html = getHtml(MY_URL);
+ if (html) {
+ if(is_json){
+ html = dealJson(html);
+ }
+ let list = _pdfa(html, p[0]);
+ list.forEach(it => {
+ let links = p[4].split('+').map(p4=>{
+ return !rule.detailUrl?_pd(it, p4,MY_URL):_pdfh(it, p4);
+ });
+ let link = links.join('$');
+ let vod_id = rule.detailUrl?MY_CATE+'$'+link:link;
+
+ let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g,'').trim();
+ let vod_pic = _pd(it, p[2],MY_URL);
+
+ if(rule.二级==='*'){
+ vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
+ }
+ d.push({
+ 'vod_id': vod_id,
+ 'vod_name': vod_name,
+ 'vod_pic': vod_pic,
+ 'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g,'').trim(),
+ });
+ });
+ }
+ } catch (e) {
+ console.log(e.message);
+ }
+ }
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
+ }
+ });
+ }
+ if(rule.图片来源){
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic + rule.图片来源;
+ }
+ });
+ }
+ // print(d);
+ if(d.length>0){
+ print(d.slice(0,2));
+ }
+ let pagecount = 0;
+ if(rule.pagecount && typeof(rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)){
+ print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);
+ pagecount = parseInt(rule.pagecount[MY_CATE]);
+ }
+ let nodata = {
+ list:[{vod_name:'无数据,防无限请求',vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}],
+ total:1,pagecount:1,page:1,limit:1
+ };
+ let vod = d.length<1?JSON.stringify(nodata):JSON.stringify({
+ 'page': parseInt(cateObj.pg),
+ 'pagecount': pagecount||999,
+ 'limit': 20,
+ 'total': 999,
+ 'list': d,
+ });
+ // print(vod);
+ return vod
+}
+
+/**
+ * 搜索列表数据解析
+ * @param searchObj
+ * @returns {string}
+ */
+function searchParse(searchObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ if(!searchObj.searchUrl){
+ return '{}'
+ }
+ let p = searchObj.搜索==='*'&&rule.一级 ? rule.一级 : searchObj.搜索;
+ if(!p||typeof(p)!=='string'){
+ return '{}'
+ }
+ p = p.trim();
+ let pp = rule.一级.split(';');
+ let url = searchObj.searchUrl.replaceAll('**', searchObj.wd);
+ if(searchObj.pg === 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
+ url = url.split('[')[1].split(']')[0];
+ }else if(searchObj.pg > 1 && url.includes('[')&&url.includes(']')&&!url.includes('#')){
+ url = url.split('[')[0];
+ }
+
+ if(/fypage/.test(url)){
+ if(url.includes('(')&&url.includes(')')){
+ let url_rep = url.match(/.*?\((.*)\)/)[1];
+ // console.log(url_rep);
+ let cnt_page = url_rep.replaceAll('fypage', searchObj.pg);
+ // console.log(cnt_page);
+ let cnt_pg = eval(cnt_page);
+ // console.log(cnt_pg);
+ url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')','');
+ }else{
+ url = url.replaceAll('fypage',searchObj.pg);
+ }
+ }
+
+ MY_URL = url;
+ console.log(MY_URL);
+ // log(searchObj.搜索);
+ // setItem('MY_URL',MY_URL);
+ if(p.startsWith('js:')){
+ const TYPE = 'search';
+ const MY_PAGE = searchObj.pg;
+ const KEY = searchObj.wd;
+ var input = MY_URL;
+ var detailUrl = rule.detailUrl||'';
+ eval(p.trim().replace('js:',''));
+ d = VODS;
+ }else{
+ p = p.split(';');
+ if (p.length < 5) {
+ return '{}'
+ }
+ let p0 = getPP(p,0,pp,0);
+ let _ps = parseTags.getParse(p0);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ let is_json = p0.startsWith('json:');
+ p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
+ // print('1381 p0:'+p0);
+ try {
+ let req_method = MY_URL.split(';').length>1?MY_URL.split(';')[1].toLowerCase():'get';
+ let html;
+ if(req_method==='post'){
+ let rurls = MY_URL.split(';')[0].split('#')
+ let rurl = rurls[0]
+ let params = rurls.length > 1 ?rurls[1]:'';
+ print(`post=》rurl:${rurl},params:${params}`);
+ // let new_dict = {};
+ // let new_tmp = params.split('&');
+ // new_tmp.forEach(i=>{
+ // new_dict[i.split('=')[0]] = i.split('=')[1];
+ // });
+ // html = post(rurl,{body:new_dict});
+ let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let postData = {body:params};
+ Object.assign(_fetch_params,postData);
+ html = post(rurl,_fetch_params);
+ }else if(req_method==='postjson'){
+ let rurls = MY_URL.split(';')[0].split('#')
+ let rurl = rurls[0]
+ let params = rurls.length > 1 ?rurls[1]:'';
+ print(`postjson-》rurl:${rurl},params:${params}`);
+ try{
+ params = JSON.parse(params);
+ }catch (e) {
+ params = '{}'
+ }
+ let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let postData = {body:params};
+ Object.assign(_fetch_params,postData);
+ html = post(rurl,_fetch_params);
+ }else{
+ html = getHtml(MY_URL);
+ }
+ if (html) {
+ if(/系统安全验证|输入验证码/.test(html)){
+ let cookie = verifyCode(MY_URL);
+ if(cookie){
+ console.log(`本次成功过验证,cookie:${cookie}`);
+ setItem(RULE_CK,cookie);
+ }else{
+ console.log(`本次自动过搜索验证失败,cookie:${cookie}`);
+ }
+ // obj.headers['Cookie'] = cookie;
+ html = getHtml(MY_URL);
+ }
+ if(!html.includes(searchObj.wd)){
+ console.log('搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码');
+ console.log(html);
+ }
+ if(is_json){
+ // console.log(html);
+ html = dealJson(html);
+ // console.log(JSON.stringify(html));
+ }
+ // console.log(html);
+ let list = _pdfa(html, p0);
+ // print(list.length);
+ // print(list);
+ let p1 = getPP(p, 1, pp, 1);
+ let p2 = getPP(p, 2, pp, 2);
+ let p3 = getPP(p, 3, pp, 3);
+ let p4 = getPP(p, 4, pp, 4);
+ let p5 = getPP(p,5,pp,5);
+ list.forEach(it => {
+ let links = p4.split('+').map(_p4=>{
+ return !rule.detailUrl?_pd(it, _p4,MY_URL):_pdfh(it, _p4)
+ });
+ let link = links.join('$');
+ let content;
+ if(p.length > 5 && p[5]){
+ content = _pdfh(it, p5);
+ }else{
+ content = '';
+ }
+ let vod_id = link;
+ let vod_name = _pdfh(it, p1).replace(/\n|\t/g,'').trim();
+ let vod_pic = _pd(it, p2,MY_URL);
+ if(rule.二级==='*'){
+ vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic;
+ }
+ let ob = {
+ 'vod_id': vod_id,
+ 'vod_name': vod_name,
+ 'vod_pic': vod_pic,
+ 'vod_remarks': _pdfh(it, p3).replace(/\n|\t/g,'').trim(),
+ 'vod_content': content.replace(/\n|\t/g,'').trim(),
+ };
+ d.push(ob);
+ });
+
+ }
+ } catch (e) {
+ print('搜索发生错误:'+e.message);
+ return '{}'
+ }
+ }
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic.replace(replace_from,replace_to);
+ }
+ });
+ }
+ if(rule.图片来源){
+ d.forEach(it=>{
+ if(it.vod_pic&&it.vod_pic.startsWith('http')){
+ it.vod_pic = it.vod_pic + rule.图片来源;
+ }
+ });
+ }
+ // print(d);
+ return JSON.stringify({
+ 'page': parseInt(searchObj.pg),
+ 'pagecount': 10,
+ 'limit': 20,
+ 'total': 100,
+ 'list': d,
+ });
+}
+
+/**
+ * 二级详情页数据解析
+ * @param detailObj
+ * @returns {string}
+ */
+function detailParse(detailObj){
+ let t1 = (new Date()).getTime();
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let orId = detailObj.orId;
+ let vod_name = '片名';
+ let vod_pic = '';
+ let vod_id = orId;
+ if(rule.二级==='*'){
+ // vod_id = orId.split('@@')[0]; // 千万不能分割
+ let extra = orId.split('@@');
+ vod_name = extra.length>1?extra[1]:vod_name;
+ vod_pic = extra.length>2?extra[2]:vod_pic;
+ }
+ // print(vod_pic);
+ let vod = {
+ vod_id: vod_id, //"id",
+ vod_name: vod_name,
+ vod_pic: vod_pic,
+ type_name: "类型",
+ vod_year: "年份",
+ vod_area: "地区",
+ vod_remarks: "更新信息",
+ vod_actor: "主演",
+ vod_director: "导演",
+ vod_content: "简介"
+ };
+ let p = detailObj.二级;
+ let url = detailObj.url;
+ let detailUrl = detailObj.detailUrl;
+ let fyclass = detailObj.fyclass;
+ let tab_exclude = detailObj.tab_exclude;
+ let html = detailObj.html||'';
+ MY_URL = url;
+ if(detailObj.二级访问前){
+ try {
+ print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
+ eval(detailObj.二级访问前.trim().replace('js:',''));
+ }catch (e) {
+ print(`二级访问前执行代码出现错误:${e.message}`)
+ }
+ }
+ // console.log(MY_URL);
+ // setItem('MY_URL',MY_URL);
+ if(p==='*'){
+ vod.vod_play_from = '道长在线';
+ vod.vod_remarks = detailUrl;
+ vod.vod_actor = '没有二级,只有一级链接直接嗅探播放';
+ vod.vod_content = MY_URL;
+ vod.vod_play_url = '嗅探播放$' + MY_URL.split('@@')[0];
+ }else if(typeof(p)==='string'&&p.trim().startsWith('js:')){
+ const TYPE = 'detail';
+ var input = MY_URL;
+ var play_url = '';
+ eval(p.trim().replace('js:',''));
+ vod = VOD;
+ console.log(JSON.stringify(vod));
+ }else if(p&&typeof(p)==='object'){
+ let tt1 = (new Date()).getTime();
+ if(!html){
+ html = getHtml(MY_URL);
+ }
+ print(`二级${MY_URL}仅获取源码耗时:${(new Date()).getTime()-tt1}毫秒`);
+ let _ps;
+ if(p.is_json){
+ print('二级是json');
+ _ps = parseTags.json;
+ html = dealJson(html);
+ }else if(p.is_jsp){
+ print('二级是jsp');
+ _ps = parseTags.jsp;
+ }else if(p.is_jq){
+ print('二级是jq');
+ _ps = parseTags.jq;
+ }else{
+ print('二级默认jq');
+ _ps = parseTags.jq;
+ // print('二级默认jsp');
+ // _ps = parseTags.jsp;
+ }
+ let tt2 = (new Date()).getTime();
+ print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ if(p.title){
+ let p1 = p.title.split(';');
+ vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
+ let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').replace(/ /g,'').trim():'';
+ vod.type_name = type_name||vod.type_name;
+ }
+ if(p.desc){
+ try{
+ let p1 = p.desc.split(';');
+ vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
+ vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g,'').trim():'';
+ vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g,'').trim():'';
+ // vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replaceAll('\n', ' ').trim():'';
+ vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g,'').trim():'';
+ vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g,'').trim():'';
+ }
+ catch (e) {
+
+ }
+ }
+ if(p.content){
+ try{
+ let p1 = p.content.split(';');
+ vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g,'').trim();
+ }
+ catch (e) {}
+ }
+ if(p.img){
+ try{
+ let p1 = p.img.split(';');
+ vod.vod_pic = _pd(html, p1[0],MY_URL);
+ }
+ catch (e) {}
+ }
+
+ let vod_play_from = '$$$';
+ let playFrom = [];
+ if(p.重定向&&p.重定向.startsWith('js:')){
+ print('开始执行重定向代码:'+p.重定向);
+ html = eval(p.重定向.replace('js:',''));
+ }
+
+// console.log(2);
+ if(p.tabs){
+ if(p.tabs.startsWith('js:')){
+ print('开始执行tabs代码:'+p.tabs);
+ var input = MY_URL;
+ eval(p.tabs.replace('js:',''));
+ playFrom = TABS;
+ }else{
+ let p_tab = p.tabs.split(';')[0];
+ // console.log(p_tab);
+ let vHeader = _pdfa(html, p_tab);
+ console.log(vHeader.length);
+ let tab_text = p.tab_text||'body&&Text';
+ // print('tab_text:'+tab_text);
+ let new_map = {};
+ for(let v of vHeader){
+ let v_title = _pdfh(v,tab_text).trim();
+ if(!v_title){
+ v_title = '线路空'
+ }
+ console.log(v_title);
+ if(tab_exclude&& (new RegExp(tab_exclude)).test(v_title)){
+ continue;
+ }
+ if(!new_map.hasOwnProperty(v_title)){
+ new_map[v_title] = 1;
+ }else{
+ new_map[v_title] += 1;
+ }
+ if(new_map[v_title]>1){
+ v_title+=Number(new_map[v_title]-1);
+ }
+ playFrom.push(v_title);
+ }
+ }
+ console.log(JSON.stringify(playFrom));
+ }else{
+ playFrom = ['道长在线']
+ }
+ vod.vod_play_from = playFrom.join(vod_play_from);
+
+// console.log(3);
+ let vod_play_url = '$$$';
+ let vod_tab_list = [];
+ if(p.lists){
+ if(p.lists.startsWith('js:')){
+ print('开始执行lists代码:'+p.lists);
+ try {
+ var input = MY_URL;
+ var play_url = '';
+ eval(p.lists.replace('js:',''));
+ for(let i in LISTS){
+ if(LISTS.hasOwnProperty(i)){
+ // print(i);
+ try {
+ LISTS[i] = LISTS[i].map(it=>it.split('$').slice(0,2).join('$'));
+ }catch (e) {
+ print('格式化LISTS发生错误:'+e.message);
+ }
+ }
+ }
+ vod_play_url = LISTS.map(it=>it.join('#')).join(vod_play_url);
+ }catch (e) {
+ print('js执行lists: 发生错误:'+e.message);
+ }
+
+ }else{
+ let list_text = p.list_text||'body&&Text';
+ let list_url = p.list_url||'a&&href';
+ // print('list_text:'+list_text);
+ // print('list_url:'+list_url);
+ // print('list_parse:'+p.lists);
+ let is_tab_js = p.tabs.trim().startsWith('js:');
+ for(let i=0;i 1 && !is_tab_js ? p.tabs.split(';')[1] : '';
+ let p1 = p.lists.replaceAll('#idv', tab_name).replaceAll('#id', i);
+ tab_ext = tab_ext.replaceAll('#idv', tab_name).replaceAll('#id', i);
+ let tabName = tab_ext?_pdfh(html, tab_ext):tab_name;
+ console.log(tabName);
+ // print('tab_ext:'+tab_ext);
+ let new_vod_list = [];
+ let tt1 = (new Date()).getTime();
+ // print('pdfl:'+typeof (pdfl));
+ if(typeof (pdfl) ==='function'){
+ new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL);
+ }else {
+ let vodList = [];
+ try {
+ vodList = _pdfa(html, p1);
+ console.log('len(vodList):'+vodList.length);
+ }catch (e) {
+ // console.log(e.message);
+ }
+ for (let i = 0; i < vodList.length; i++) {
+ let it = vodList[i];
+ new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL));
+ }
+ }
+ if(new_vod_list.length>0){
+ new_vod_list = forceOrder(new_vod_list,'',x=>x.split('$')[0]);
+ console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date()).getTime()-tt1}毫秒`);
+ }
+ // print(new_vod_list);
+ let vlist = new_vod_list.join('#');
+ vod_tab_list.push(vlist);
+ }
+ vod_play_url = vod_tab_list.join(vod_play_url);
+ }
+ }
+ vod.vod_play_url = vod_play_url;
+ }
+ if(rule.图片替换 && rule.图片替换.includes('=>')){
+ let replace_from = rule.图片替换.split('=>')[0];
+ let replace_to = rule.图片替换.split('=>')[1];
+ vod.vod_pic = vod.vod_pic.replace(replace_from,replace_to);
+ }
+ if(rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){
+ vod.vod_pic = vod.vod_pic + rule.图片来源;
+ }
+ if(!vod.vod_id||(vod_id.includes('$')&&vod.vod_id!==vod_id)){
+ vod.vod_id = vod_id;
+ }
+ let t2 = (new Date()).getTime();
+ console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
+ // print(vod);
+ vod = vodDeal(vod);
+ // print(vod);
+ return JSON.stringify({
+ list: [vod]
+ })
+}
+
+/**
+ * 获取二级待返回的播放线路没处理时的索引关系
+ * @param vod
+ * @returns {{}}
+ */
+function get_tab_index(vod){
+ let obj = {};
+ vod.vod_play_from.split('$$$').forEach((it,index)=>{
+ obj[it] = index;
+ });
+ return obj
+}
+
+/**
+ * 处理待返回的vod数据|线路去除,排序,重命名
+ * @param vod
+ * @returns {*}
+ */
+function vodDeal(vod){
+ let vod_play_from = vod.vod_play_from.split('$$$');
+ let vod_play_url = vod.vod_play_url.split('$$$');
+
+ // 移除指定线路后的列表
+ let tab_removed_list = vod_play_from;
+ // 排序后的线路列表
+ let tab_ordered_list = vod_play_from;
+ // 线路重命名后的列表
+ let tab_renamed_list = vod_play_from;
+ // 定义实际要返回线路
+ let tab_list = vod_play_from;
+ // 选集列表根据线路排序
+ let play_ordered_list = vod_play_url;
+
+ // 判断有移除线路或者线路排序
+ if((rule.tab_remove&&rule.tab_remove.length>0)||(rule.tab_order&&rule.tab_order.length>0)){
+ // 获取原来线路的索引下标
+ let tab_index_dict = get_tab_index(vod);
+
+ if(rule.tab_remove&&rule.tab_remove.length>0){
+ tab_removed_list = vod_play_from.filter(it=>!rule.tab_remove.includes(it));
+ tab_list = tab_removed_list;
+ }
+
+ if(rule.tab_order&&rule.tab_order.length>0){
+ let tab_order = rule.tab_order;
+ tab_ordered_list = tab_removed_list.sort((a, b) => {
+ return (tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a)) - (tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))
+ });
+ tab_list = tab_ordered_list;
+ }
+ play_ordered_list = tab_list.map(it=>vod_play_url[tab_index_dict[it]]);
+ }
+
+ if(rule.tab_rename&&typeof(rule.tab_rename)==='object'&Object.keys(rule.tab_rename).length>0){
+ tab_renamed_list = tab_list.map(it=>rule.tab_rename[it]||it);
+ tab_list = tab_renamed_list;
+ }
+ vod.vod_play_from = tab_list.join('$$$');
+ vod.vod_play_url = play_ordered_list.join('$$$');
+ return vod
+}
+
+/**
+ * 判断是否需要解析
+ * @param url
+ * @returns {number|number}
+ */
+function tellIsJx(url){
+ try {
+ let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split('?')[0]) && 是否正版(url);
+ return is_vip?1:0
+ }catch (e) {
+ return 1
+ }
+}
+/**
+ * 选集播放点击事件解析
+ * @param playObj
+ * @returns {string}
+ */
+function playParse(playObj){
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ MY_URL = playObj.url;
+ var MY_FLAG = playObj.flag;
+ if(!/http/.test(MY_URL)){
+ try {
+ MY_URL = base64Decode(MY_URL);
+ }catch (e) {}
+ }
+ MY_URL = decodeURIComponent(MY_URL);
+ var input = MY_URL;//注入给免嗅js
+ var flag = MY_FLAG;//注入播放线路名称给免嗅js
+ let common_play = {
+ parse:1,
+ url:input,
+ flag:flag,
+ // url:urlencode(input),
+ jx:tellIsJx(input)
+ };
+ let lazy_play;
+ if(!rule.play_parse||!rule.lazy){
+ lazy_play = common_play;
+ }else if(rule.play_parse&&rule.lazy&&typeof(rule.lazy)==='string'){
+ try {
+ let lazy_code = rule.lazy.replace('js:','').trim();
+ print('开始执行js免嗅=>'+lazy_code);
+ eval(lazy_code);
+ lazy_play = typeof(input) === 'object'?input:{
+ parse:1,
+ jx:tellIsJx(input),
+ url:input
+ };
+ }catch (e) {
+ print('js免嗅错误:'+e.message);
+ lazy_play = common_play;
+ }
+ }else{
+ lazy_play = common_play;
+ }
+ // print('play_json:'+typeof(rule.play_json));
+ // console.log(Array.isArray(rule.play_json));
+ if(Array.isArray(rule.play_json) && rule.play_json.length >0){ // 数组情况判断长度大于0
+ let web_url = lazy_play.url;
+ for(let pjson of rule.play_json){
+ if(pjson.re && (pjson.re==='*'||web_url.match(new RegExp(pjson.re)))){
+ if(pjson.json && typeof(pjson.json)==='object'){
+ let base_json = pjson.json;
+ // print('开始合并:');
+ // print(base_json);
+ lazy_play = Object.assign(lazy_play,base_json);
+ break;
+ }
+ }
+ }
+ }else if(rule.play_json && !Array.isArray(rule.play_json)){ // 其他情况 非[] 判断true/false
+ let base_json = {
+ jx:1,
+ parse:1,
+ };
+ lazy_play = Object.assign(lazy_play,base_json);
+ }else if(!rule.play_json){ // 不解析传0
+ let base_json = {
+ jx:0,
+ parse:1,
+ };
+ lazy_play = Object.assign(lazy_play,base_json);
+ }
+ console.log(JSON.stringify(lazy_play));
+ return JSON.stringify(lazy_play);
+}
+
+/**
+ * 本地代理解析规则
+ * @param params
+ */
+function proxyParse(proxyObj){
+ var input = proxyObj.params;
+ if(proxyObj.proxy_rule){
+ log('准备执行本地代理规则:\n'+proxyObj.proxy_rule);
+ try {
+ eval(proxyObj.proxy_rule);
+ if(input && input!== proxyObj.params && Array.isArray(input) &&input.length===3){
+ return input
+ }else{
+ return [404,'text/plain','Not Found']
+ }
+ }catch (e) {
+ return [500,'text/plain','代理规则错误:'+e.message]
+ }
+
+ }else{
+ return [404,'text/plain','Not Found']
+ }
+}
+
+/**
+ * 辅助嗅探解析规则
+ * @param isVideoObj
+ * @returns {boolean}
+ */
+function isVideoParse(isVideoObj){
+ var input = isVideoObj.url;
+ if(!isVideoObj.t){ // t为假代表默认传的正则字符串
+ let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
+ return re_matcher.test(input);
+ }else{
+ // 执行js
+ try {
+ eval(isVideoObj.isVideo);
+ if(typeof(input)==='boolean'){
+ return input
+ }else{
+ return false
+ }
+ }catch (e) {
+ log('执行嗅探规则发生错误:'+e.message);
+ return false
+ }
+ }
+}
+
+/**
+ * js源预处理特定返回对象中的函数
+ * @param ext
+ */
+function init(ext) {
+ console.log('init');
+ try {
+ // make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改
+ // if (typeof (globalThis.mubanJs) === 'undefined') {
+ // let mubanJs = request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js', { 'User-Agent': MOBILE_UA });
+ // mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default');
+ // // console.log(mubanJs);
+ // globalThis.mubanJs = mubanJs;
+ // }
+ // let muban = eval(globalThis.mubanJs);
+
+ let muban = 模板.getMubans();
+ // print(typeof (muban));
+ // print(muban);
+ if (typeof ext == 'object'){
+ rule = ext;
+ } else if (typeof ext == 'string') {
+ if (ext.startsWith('http')) {
+ let js = request(ext,{'method':'GET'});
+ if (js){
+ eval(js.replace('var rule', 'rule'));
+ }
+ } else {
+ eval(ext.replace('var rule', 'rule'));
+ }
+ }
+ if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
+ print('继承模板:'+rule.模板);
+ rule = Object.assign(muban[rule.模板], rule);
+ }
+ /** 处理一下 rule规则关键字段没传递的情况 **/
+ let rule_cate_excludes = (rule.cate_exclude||'').split('|').filter(it=>it.trim());
+ let rule_tab_excludes = (rule.tab_exclude||'').split('|').filter(it=>it.trim());
+ rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split('|').filter(it=>it.trim()));
+ rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split('|').filter(it=>it.trim()));
+
+ rule.cate_exclude = rule_cate_excludes.join('|');
+ rule.tab_exclude = rule_tab_excludes.join('|');
+ rule.host = (rule.host||'').rstrip('/');
+ HOST = rule.host;
+ if(rule.hostJs){
+ console.log(`检测到hostJs,准备执行...`);
+ try {
+ eval(rule.hostJs);
+ rule.host = HOST.rstrip('/');
+ }catch (e) {
+ console.log(`执行${rule.hostJs}获取host发生错误:`+e.message);
+ }
+ }
+ rule.url = rule.url||'';
+ rule.double = rule.double||false;
+ rule.homeUrl = rule.homeUrl||'';
+ rule.detailUrl = rule.detailUrl||'';
+ rule.searchUrl = rule.searchUrl||'';
+ rule.homeUrl = rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):(rule.homeUrl||rule.host);
+ rule.homeUrl = cheerio.jinja2(rule.homeUrl,{rule:rule});
+ rule.detailUrl = rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;
+ rule.二级访问前 = rule.二级访问前||'';
+ if(rule.url.includes('[')&&rule.url.includes(']')){
+ let u1 = rule.url.split('[')[0]
+ let u2 = rule.url.split('[')[1].split(']')[0]
+ rule.url = rule.host && rule.url?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.url;
+ }else{
+ rule.url = rule.host && rule.url ? urljoin(rule.host,rule.url) : rule.url;
+ }
+ if(rule.searchUrl.includes('[')&&rule.searchUrl.includes(']')&&!rule.searchUrl.includes('#')){
+ let u1 = rule.searchUrl.split('[')[0]
+ let u2 = rule.searchUrl.split('[')[1].split(']')[0]
+ rule.searchUrl = rule.host && rule.searchUrl?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.searchUrl;
+ }else{
+ rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host,rule.searchUrl) : rule.searchUrl;
+ }
+
+ rule.timeout = rule.timeout||5000;
+ rule.encoding = rule.编码||rule.encoding||'utf-8';
+ rule.search_encoding = rule.搜索编码||rule.search_encoding||'';
+ rule.图片来源 = rule.图片来源||'';
+ rule.图片替换 = rule.图片替换||'';
+ rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
+ rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
+ rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
+ rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
+ rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
+
+ rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
+
+ rule.tab_remove = rule.hasOwnProperty('tab_remove')?rule.tab_remove:[];
+ rule.tab_order = rule.hasOwnProperty('tab_order')?rule.tab_order:[];
+ rule.tab_rename = rule.hasOwnProperty('tab_rename')?rule.tab_rename:{};
+
+ if(rule.headers && typeof(rule.headers) === 'object'){
+ try {
+ let header_keys = Object.keys(rule.headers);
+ for(let k of header_keys){
+ if(k.toLowerCase() === 'user-agent'){
+ let v = rule.headers[k];
+ console.log(v);
+ if(['MOBILE_UA','PC_UA','UC_UA','IOS_UA','UA'].includes(v)){
+ rule.headers[k] = eval(v);
+ }
+ }else if(k.toLowerCase() === 'cookie'){
+ let v = rule.headers[k];
+ if(v && v.startsWith('http')){
+ console.log(v);
+ try {
+ v = fetch(v);
+ console.log(v);
+ rule.headers[k] = v;
+ }catch (e) {
+ console.log(`从${v}获取cookie发生错误:`+e.message);
+ }
+ }
+ }
+ }
+ }catch (e) {
+ console.log('处理headers发生错误:'+e.message);
+ }
+ }
+ // print(rule.headers);
+ rule_fetch_params = {'headers': rule.headers||false, 'timeout': rule.timeout, 'encoding': rule.encoding};
+ oheaders = rule.headers||{};
+ RKEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host);
+ pre(); // 预处理
+ init_test();
+ }catch (e) {
+ console.log('init_test发生错误:'+e.message);
+ }
+}
+
+let homeHtmlCache = undefined;
+
+/**
+ * js源获取首页分类和筛选特定返回对象中的函数
+ * @param filter 筛选条件字典对象
+ * @returns {string}
+ */
+function home(filter) {
+ console.log("home");
+ let homeObj = {
+ filter:rule.filter||false,
+ MY_URL: rule.homeUrl,
+ class_name: rule.class_name || '',
+ class_url: rule.class_url || '',
+ class_parse: rule.class_parse || '',
+ cate_exclude: rule.cate_exclude,
+ };
+ return homeParse(homeObj);
+}
+
+/**
+ * js源获取首页推荐数据列表特定返回对象中的函数
+ * @param params
+ * @returns {string}
+ */
+function homeVod(params) {
+ console.log("homeVod");
+ let homeVodObj = {
+ 推荐:rule.推荐,
+ double:rule.double,
+ homeUrl:rule.homeUrl,
+ detailUrl:rule.detailUrl
+ };
+ return homeVodParse(homeVodObj)
+ // return "{}";
+}
+
+/**
+ * js源获取分类页一级数据列表特定返回对象中的函数
+ * @param tid 分类id
+ * @param pg 页数
+ * @param filter 当前选中的筛选条件
+ * @param extend 扩展
+ * @returns {string}
+ */
+function category(tid, pg, filter, extend) {
+ let cateObj = {
+ url: rule.url,
+ 一级: rule.一级,
+ tid: tid,
+ pg: parseInt(pg),
+ filter: filter,
+ extend: extend
+ };
+ // console.log(JSON.stringify(extend));
+ return categoryParse(cateObj)
+}
+
+/**
+ * js源获取二级详情页数据特定返回对象中的函数
+ * @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id
+ * @returns {string}
+ */
+function detail(vod_url) {
+ let orId = vod_url;
+ let fyclass = '';
+ log('orId:'+orId);
+ if(vod_url.indexOf('$')>-1){
+ let tmp = vod_url.split('$');
+ fyclass = tmp[0];
+ vod_url = tmp[1];
+ }
+ let detailUrl = vod_url.split('@@')[0];
+ let url;
+ if(!detailUrl.startsWith('http')&&!detailUrl.includes('/')){
+ url = rule.detailUrl.replaceAll('fyid', detailUrl).replaceAll('fyclass',fyclass);
+ }else if(detailUrl.includes('/')){
+ url = urljoin(rule.homeUrl,detailUrl);
+ }else{
+ url = detailUrl
+ }
+ let detailObj = {
+ orId: orId,
+ url:url,
+ 二级:rule.二级,
+ 二级访问前:rule.二级访问前,
+ detailUrl:detailUrl,
+ fyclass:fyclass,
+ tab_exclude:rule.tab_exclude,
+ }
+ return detailParse(detailObj)
+}
+
+/**
+ * js源选集按钮播放点击事件特定返回对象中的函数
+ * @param flag 线路名
+ * @param id 播放按钮的链接
+ * @param flags 全局配置的flags是否需要解析的标识列表
+ * @returns {string}
+ */
+function play(flag, id, flags) {
+ let playObj = {
+ url:id,
+ flag:flag,
+ flags:flags
+ }
+ return playParse(playObj);
+}
+
+/**
+ * js源搜索返回的数据列表特定返回对象中的函数
+ * @param wd 搜索关键字
+ * @param quick 是否来自快速搜索
+ * @returns {string}
+ */
+function search(wd, quick, pg) {
+ if(rule.search_encoding){
+ if(rule.search_encoding.toLowerCase()!=='utf-8'){
+ // 按搜索编码进行编码
+ wd = encodeStr(wd,rule.search_encoding);
+ }
+ }else if(rule.encoding && rule.encoding.toLowerCase()!=='utf-8'){
+ // 按全局编码进行编码
+ wd = encodeStr(wd,rule.encoding);
+ }
+ let searchObj = {
+ searchUrl: rule.searchUrl,
+ 搜索: rule.搜索,
+ wd: wd,
+ //pg: pg,
+ pg: pg||1,
+ quick: quick,
+ };
+ // console.log(JSON.stringify(searchObj));
+ return searchParse(searchObj)
+}
+
+/**
+ * js源本地代理返回的数据列表特定返回对象中的函数
+ * @param params 代理链接参数比如 /proxy?do=js&url=https://wwww.baidu.com => params就是 {do:'js','url':'https://wwww.baidu.com'}
+ * @returns {*}
+ */
+function proxy(params){
+ if(rule.proxy_rule&&rule.proxy_rule.trim()){
+ rule.proxy_rule = rule.proxy_rule.trim();
+ }
+ if(rule.proxy_rule.startsWith('js:')){
+ rule.proxy_rule = rule.proxy_rule.replace('js:','');
+ }
+ let proxyObj = {
+ params:params,
+ proxy_rule:rule.proxy_rule
+ };
+ return proxyParse(proxyObj)
+}
+
+
+/**
+ * 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
+ * @returns {*|boolean|boolean}
+ */
+function sniffer(){
+ let enable_sniffer = rule.sniffer || false;
+ if(enable_sniffer){
+ // log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
+ log('开始执行辅助嗅探代理规则...');
+ }
+ return enable_sniffer
+}
+
+/**
+ * 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
+ * @param url
+ */
+function isVideo(url){
+ let t = 0;
+ let is_video;
+ if(rule.isVideo &&rule.isVideo.trim()){
+ is_video = rule.isVideo.trim();
+ }
+ if(is_video.startsWith('js:')){
+ is_video = is_video.replace('js:','');
+ t = 1;
+ }
+ let isVideoObj = {
+ url:url,
+ isVideo:is_video,
+ t:t,
+ };
+ let result = isVideoParse(isVideoObj);
+ if(result){
+ log('成功执行辅助嗅探规则并检测到视频地址:\n'+rule.isVideo);
+ }
+ return result
+}
+
+function DRPY(){//导出函数
+ return {
+ init: init,
+ home: home,
+ homeVod: homeVod,
+ category: category,
+ detail: detail,
+ play: play,
+ search: search,
+ proxy:proxy,
+ sniffer:sniffer,
+ isVideo:isVideo
+ }
+}
+
+/**
+ * 导出函数无法简写成下面的形式:
+
+ export default {
+ ...DRPY,
+ DRPY
+ }
+
+ */
+
+// 导出函数对象
+export default {
+ init,
+ home,
+ homeVod,
+ category,
+ detail,
+ play,
+ search,
+ proxy,
+ sniffer,
+ isVideo,
+ DRPY,
+}
\ No newline at end of file
diff --git a/lib/drpy2.min.js b/lib/drpy2.min.js
new file mode 100644
index 0000000..2620324
--- /dev/null
+++ b/lib/drpy2.min.js
@@ -0,0 +1,73 @@
+import cheerio from"assets://js/lib/cheerio.min.js";import"assets://js/lib/crypto-js.js";import"https://down.nigx.cn/qu.ax/cLFE.js";import"https://down.nigx.cn/qu.ax/kOUW.js";import"https://down.nigx.cn/qu.ax/ucoN.js";import 模板 from"https://down.nigx.cn/qu.ax/XUKQ.js";import{gbkTool}from"https://down.nigx.cn/qu.ax/wYCz.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log("本地代理地址:"+getProxyUrl());console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function ocr_demo_test(){let img_base64=`iVBORw0KGgoAAAANSUhEUgAAAIAAAAAoBAMAAADEX+97AAAAG1BMVEXz+/4thQTa7N6QwIFFkyNeokKozqDB3b93sWHFR+MEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVRIie2TQU+DQBCFt9vScvQpxR4xrcSjJCZ67JDGXsX+AdR4B3vpsSYm/m2HXaRLmuySepR3Gdidb/btDAjRq5dT96eCMlfBuzi1QLZUoZy2yz5sOvI+9iomaPEZ6nWnEtxqIyiM1RcAy44GNDhBXUjot/VVNweV1ah68FqWRyjKIOqAcyYF6rGcmpYnHzGt3fycNoMw0d3/THFu7hFSJ/8OXO6iTM8/KSg09obAzIHLO250LgQ0txOZSfgrV4Exdw98uGycJ0ErAeExZGhOmFHV9zHO6qVSj0MpLq7xZON56o++MjlsEgfVhbQWWME+xQX7J4V6zfi9A1Ly9rP1BvEXp+BbVJ/M77n+wfOIDVp51pZ4iBxvmj9AGrtvry6emwfKnVkW+ZRKd5ZNMvob36vXP9YPDmQki8QiCFAAAAAASUVORK5CYII=`;OcrApi.api=OCR_API;let code=OcrApi.classification(img_base64);log("测试验证码图片的ocr识别结果为:"+code)}function rsa_demo_test(){let t1=(new Date).getTime();let pkcs1_public=`
+-----BEGIN RSA PUBLIC KEY-----
+MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy
+lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE=
+-----END RSA PUBLIC KEY-----
+`.trim();let pkcs1_public_pem=`
+MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy
+lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE=
+`.trim();let pkcs8_public=`
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/
+nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ==
+-----END PUBLIC KEY-----`.trim();let pkcs8_public_pem=`
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/
+nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ==
+`.trim();let pkcs1_private=`
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOAIBAAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/nas61fIPGUUrkPenokm7
+ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQI/b6OV1z65UokQaMvSeRXt
+0Yv6wiYtduQI9qpq5nzy/ytaqsbBfClNTi/HifKPKxlRouWFkc518EQI8LBxoarJ
+AiEA4DaONMplV8PQNa3TKn2F+SDEvLOCjdL0kHKdN90Ti28CIQDDZnTBaHgZwZbA
+hS7Bbf5yvwjWMhO6Y7l04/Qm7R+35QIgPuQuqXIoUSD080mp1N5WyRW++atksIF+
+5lGv9e6GP/MCICnj8y/rl6Pd7tXDN6zcSeqLrfdNsREKhB3dKOCXgW9JAiAFYtFS
+EJNBXVRTK42SNsZ2hJ/9xLwOwnH2epT8Q43s3Q==
+-----END RSA PRIVATE KEY-----
+`.trim();let pkcs8_private=`
+-----BEGIN PRIVATE KEY-----
+MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAqyNKUPxEUaSdzrtf
+dFyXnRavOOpw2D+dqzrV8g8ZRSuQ96eiSbtkcLCsMpbEPcWNMWD6UWVGSjBHke3v
+YJkTSwIDAQABAj9vo5XXPrlSiRBoy9J5Fe3Ri/rCJi125Aj2qmrmfPL/K1qqxsF8
+KU1OL8eJ8o8rGVGi5YWRznXwRAjwsHGhqskCIQDgNo40ymVXw9A1rdMqfYX5IMS8
+s4KN0vSQcp033ROLbwIhAMNmdMFoeBnBlsCFLsFt/nK/CNYyE7pjuXTj9CbtH7fl
+AiA+5C6pcihRIPTzSanU3lbJFb75q2SwgX7mUa/17oY/8wIgKePzL+uXo93u1cM3
+rNxJ6out902xEQqEHd0o4JeBb0kCIAVi0VIQk0FdVFMrjZI2xnaEn/3EvA7CcfZ6
+lPxDjezd
+-----END PRIVATE KEY-----
+`.trim();let data=`
+NodeRsa
+这是node-rsa 现在修改集成在drpy里使用`.trim();let encryptedWithPublic=NODERSA.encryptRSAWithPublicKey(data,pkcs1_public,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("公钥加密");console.log(encryptedWithPublic);let decryptedWithPrivate=NODERSA.decryptRSAWithPrivateKey(encryptedWithPublic,pkcs1_private,{options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("私钥解密");console.log(decryptedWithPrivate);let pkcs1_sha256_sign=NODERSA.sign("1",pkcs1_private,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:"pkcs1",signingScheme:"pkcs1-sha256"}});console.log("pkcs1_sha256_sign");console.log(pkcs1_sha256_sign);let pkcs1_sha256_sign_verify=NODERSA.verify("1","Oulx2QrgeipKYBtqEDqFb2s/+ndk2cGQxO4CkhU7iBM1vyNmmvqubpsmeoUuN3waGrYZLknSEdwBkfv0tUMpFQ==",pkcs1_private,{options:{environment:"browser",encryptionScheme:"pkcs1",signingScheme:"pkcs1-sha256"}});console.log("pkcs1_sha256_sign_verify");console.log(pkcs1_sha256_sign_verify);let pkcs1_oaep_sha256=NODERSA.encryptRSAWithPublicKey(data,`-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7IsT1du
+SYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7Sxhdm
+kte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy3zD8
+PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+HP+m
+PfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEAApRb
+Dd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQAB
+-----END RSA PUBLIC KEY-----
+`,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:{scheme:"pkcs1_oaep",hash:"sha256"}}});console.log("pkcs1_oaep_sha256");console.log(pkcs1_oaep_sha256);decryptedWithPrivate=NODERSA.decryptRSAWithPrivateKey("kSZesAAyYh2hdsQnYMdGqb6gKAzTauBKouvBzWcc4+F8RvGd0nwO6mVkUMVilPgUuNxjEauHayHiY8gI3Py45UI3+km0rSGyHrS6dHiHgCkMejXHieglYzAB0IxX3Jkm4z/66bdB/D+GFy0oct5fGCMI1UHPjEAYOsazJDa8lBFNbjiWFeb/qiZtIx3vGM7KYPAZzyRf/zPbbQ8zy9xOmRuOl5nnIxgo0Okp3KO/RIPO4GZOSBA8f2lx1UtNwwrXAMpcNavtoqHVcjJ/9lcotXYQFrn5b299pSIRf2gVm8ZJ31SK6Z8cc14nKtvgnmsgClDzIXJ1o1RcDK+knVAySg==",`-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7Is
+T1duSYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7S
+xhdmkte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy
+3zD8PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+
+HP+mPfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEA
+ApRbDd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQABAoIBADZ/QGgUzInvsLp/
+zO2WbfYm39o/uhNAvk9RbLt1TIZbMFhyOpeKynHi3Swwd9xsfWX/U9zS/lGi/m31
+iKrhmaW4OA1G3vqpMcK7TBbFufYwUEaA+ZJX344euH8pIfdzyneMQ4z3Far2dS7l
+QsmjuilVV2kEFadveXewiYoVOWCu00w6bN8wy2SIHlQn+kIL6HQhWz12iKKflIKu
+eGRdzLHsKmBt6WbY1Wuhx7HU0fAKdlBDPxCHNlI+kybUYE9o5C2vJiaVM5wqJBgZ
+8Dz8kt1QbLJ910JoLXkLVQ8uC8NJKQwFtqQjTGPnEq0+wbgz6Ij599rKZkwW/xq9
+l6KoUiECgYEA6Ah42tVdkNW047f03xVYXFH96RgorHRS36mR8Y+ONUq1fwKidovC
+WjwVujt4OPf3l1W6iyn/F6cu/bsmvPrSc3HTN0B1V31QK4OjgetxQ2PSbTldH02J
+NPzkt+v+cPxXpx/P5mgt7Weefw5txU547KubGrHUV5rBKFtIx9pj16MCgYEA/EF0
+o19+D24DZAPwlDS5VbEd7FStnwY4oQ5PqbuNOSbSJLMWU0AqzXcRokp8UTyCZ0X3
+ATkS1REq97kShCuR+npTR6a6DlY7sdpPI1SMLNajgB2tkx0EOzX+PfNIbHUd4jpJ
+I0ZMAHv/OOtkzQHDaeTWBTrzsWm6/nTiykfduNECgYEA46AMD4HpPECqKAs66e5i
+tI6q7JSKskObWVdcmQEfnSAhVOwcvPb2Ptda6UuV8S0xcwDi88rLOUUFUFzc79+P
+vTkY38cYVi/VChsluDpk7ptqv0PbGu5Rf+3n4pZdEjI7OvR2W64wAAn67uIUxc7p
+yiO/ET0K9rYWb6S9jXGtKMkCgYEA2kPAqoO7zZoBMQ7/oR0lp/HC1HRIbiqx4RlC
+8Lgpb+QZPEwA6zPAVVvLVENi4d+bbcRp/xLlKpraNNJcJSSWAMbLPFoU7sbKjA87
+HnTPfRSTEA2d3Ibk3F7Rh8TzS3Ti0JZiJjVzGZAwu41iAMifzwaD8K6boUy80eNN
+QH2CaaECgYBUsLYvC/MiYg3w+LGOONuQongoVUXjGqnw2bjVa9RK7lwRdXPUqJ51
+MpVO98IkoLvGSI/0sGNP3GKNhC+eMGjJAVwFyEuOn+JsmMv9Y9uStIVi5tIHIhKw
+m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA==
+-----END RSA PRIVATE KEY-----`,{options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("decryptedWithPrivate");console.log(decryptedWithPrivate);(()=>{let key=new NODERSA.NodeRSA({b:1024});key.setOptions({encryptionScheme:"pkcs1"});let text=`你好drpy node-ras`;let encrypted=key.encrypt(text,"base64");console.log("encrypted: ",encrypted);const decrypted=key.decrypt(encrypted,"utf8");console.log("decrypted: ",decrypted)})();let t2=(new Date).getTime();console.log("rsa_demo_test 测试耗时:"+(t2-t1)+"毫秒")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log(`预处理执行失败:${e.message}`)}}}let rule={};let vercode=typeof pdfl==="function"?"drpy2.1":"drpy2";const VERSION=vercode+" 3.9.50beta31 20240617";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|下载|剧情|榜|评论";const OCR_RETRY=3;const OCR_API="https://api.nn.ci/ocr/b64/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url|style)$|^(data-|url-|src-)/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;const $js={toString(func){let strfun=func.toString();return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/,"js:").replace(/\}$/,"")}};function window_b64(){let b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out="";while(i>2);out+=b64map.charAt((c1&3)<<4);out+="==";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+="=";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out="";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(ithis.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:out+=String.fromCharCode(c);break;case 12:case 13:char2=array[i++];out+=String.fromCharCode((c&31)<<6|char2&63);break;case 14:char2=array[i++];char3=array[i++];out+=String.fromCharCode((c&15)<<12|(char2&63)<<6|(char3&63)<<0);break}}return out}function gzip(str){let arr=pako.gzip(str,{});return uint8ArrayToBase64(arr)}function ungzip(b64Data){let strData=atob(b64Data);const charData=strData.split("").map(function(x){return x.charCodeAt(0)});const binData=new Uint8Array(charData);const data=pako.inflate(binData);return Utf8ArrayToStr(data)}function encodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.encode(input)}return input}function decodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.decode(input)}return input}function getCryptoJS(){return'console.log("CryptoJS已装载");'}const RSA={decode:function(data,key,option){option=option||{};if(typeof JSEncrypt==="function"){let chunkSize=option.chunkSize||117;let privateKey=this.getPrivateKey(key);const decryptor=new JSEncrypt;decryptor.setPrivateKey(privateKey);let uncrypted="";uncrypted=decryptor.decryptUnicodeLong(data);return uncrypted}else{return false}},encode:function(data,key,option){option=option||{};if(typeof JSEncrypt==="function"){let chunkSize=option.chunkSize||117;let publicKey=this.getPublicKey(key);const encryptor=new JSEncrypt;encryptor.setPublicKey(publicKey);let encrypted="";encrypted=encryptor.encryptUnicodeLong(data);return encrypted}else{return false}},fixKey(key,prefix,endfix){if(!key.includes(prefix)){key=prefix+key}if(!key.includes(endfix)){key+=endfix}return key},getPrivateKey(key){let prefix="-----BEGIN RSA PRIVATE KEY-----";let endfix="-----END RSA PRIVATE KEY-----";return this.fixKey(key,prefix,endfix)},getPublicKey(key){let prefix="-----BEGIN PUBLIC KEY-----";let endfix="-----END PUBLIC KEY-----";return this.fixKey(key,prefix,endfix)}};function getProxyUrl(){if(typeof getProxy==="function"){return getProxy(true)}else{return"http://127.0.0.1:9978/proxy?do=js"}}function fixAdM3u8(m3u8_text,m3u8_url,ad_remove){if(!m3u8_text&&!m3u8_url||!m3u8_text&&m3u8_url&&!m3u8_url.startsWith("http")){return""}if(!m3u8_text){log("m3u8_url:"+m3u8_url);m3u8_text=request(m3u8_url)}log("len(m3u8_text):"+m3u8_text.length);if(!ad_remove){return m3u8_text}if(ad_remove.startsWith("reg:")){ad_remove=ad_remove.slice(4)}else if(ad_remove.startsWith("js:")){ad_remove=ad_remove.slice(3)}let m3u8_start=m3u8_text.slice(0,m3u8_text.indexOf("#EXTINF")).trim();let m3u8_body=m3u8_text.slice(m3u8_text.indexOf("#EXTINF"),m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();let m3u8_end=m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();let murls=[];let m3_body_list=m3u8_body.split("\n");let m3_len=m3_body_list.length;let i=0;while(i{new_m3u8_body.push(it)})}}new_m3u8_body=new_m3u8_body.join("\n").trim();m3u8_text=[m3u8_start,new_m3u8_body,m3u8_end].join("\n").trim();return m3u8_text}function fixAdM3u8Ai(m3u8_url,headers){let ts=(new Date).getTime();let option=headers?{headers:headers}:{};function b(s1,s2){let i=0;while(iit.startsWith("#")?it:urljoin(m3u8_url,it)).join("\n");m3u8=m3u8.replace(/\n\n/gi,"\n");let last_url=m3u8.split("\n").slice(-1)[0];if(last_url.length<5){last_url=m3u8.split("\n").slice(-2)[0]}if(last_url.includes(".m3u8")&&last_url!==m3u8_url){m3u8_url=urljoin2(m3u8_url,last_url);log("嵌套的m3u8_url:"+m3u8_url);m3u8=request(m3u8_url,option)}let s=m3u8.trim().split("\n").filter(it=>it.trim()).join("\n");let ss=s.split("\n");let firststr=ss.find(x=>!x.startsWith("#"));let maxl=0;let firststrlen=firststr.length;let ml=Math.round(ss.length/2).toString().length;let maxc=0;let laststr=ss.toReversed().find(x=>{if(!x.startsWith("#")){let k=b(reverseString(firststr),reverseString(x));maxl=b(firststr,x);maxc++;if(firststrlen-maxl<=ml+k||maxc>10){return true}}return false});log("最后一条切片:"+laststr);let ad_urls=[];for(let i=0;i=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];function getQuery(url){try{if(url.indexOf("?")>-1){url=url.slice(url.indexOf("?")+1)}let arr=url.split("#")[0].split("&");const resObj={};arr.forEach(item=>{let arr1=item.split("=");let key=arr1[0];let value=arr1.slice(1).join("=");resObj[key]=value});return resObj}catch(err){log(`getQuery发生错误:${e.message}`);return{}}}function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd:pd};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print(`html对象转文本发生了错误:${e.message}`)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print(`html对象转文本发生了错误:${e.message}`)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.slice(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();let result=defaultParser.pdfh(html,parse);return result},pdfa(html,parse){if(!html||!parse||!parse.trim()){return[]}parse=parse.trim();let result=defaultParser.pdfa(html,parse);print(`pdfa解析${parse}=>${result.length}`);return result},pd(html,parse,base_url){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();base_url=base_url||MY_URL;return defaultParser.pd(html,parse,base_url)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html="";if(this.api.endsWith("drpy/text")){html=request(this.api,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true)}else{html=post(this.api,{body:img})}code=html||""}catch(e){log(`OCR识别验证码发生错误:${e.message}`)}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cntit.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function $require(url){eval(request(url))}function keysToLowerCase(obj){return Object.keys(obj).reduce((result,key)=>{const newKey=key.toLowerCase();result[newKey]=obj[key];return result},{})}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA;if(typeof fetch_params==="object"&&fetch_params&&fetch_params.headers){let fetch_headers=keysToLowerCase(fetch_params.headers);if(fetch_headers["user-agent"]){headers["User-Agent"]=fetch_headers["user-agent"]}}}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}if(obj.redirect===false){obj.redirect=0}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj=obj||{};obj.method="POST";return request(url,obj)}function reqCookie(url,obj,all_cookie){obj=obj||{};obj.withHeaders=true;all_cookie=all_cookie||false;let html=request(url,obj);let json=JSON.parse(html);let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");let cookie=setCk?json[setCk]:"";if(Array.isArray(cookie)){cookie=cookie.join(";")}if(!all_cookie){cookie=cookie.split(";")[0]}html=json.body;return{cookie:cookie,html:html}}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i0){classes=list}}}catch(e){console.log(e.message)}}else if(p.length>=3&&!is_json){try{let html=homeObj.home_html||getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p0);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]&&!homeObj.home_html){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级?rule.一级.split(";"):[];if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log(`首页列表双层定位处理发生错误:${e.message}`)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log(`首页列表单层定位处理发生错误:${e.message}`)}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}url=url.replaceAll("fyclass",cateObj.tid);let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print(`合并不同分类对应的默认筛选出错:${e.message}`)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级?rule.一级.split(";"):[];let url=searchObj.searchUrl.replaceAll("**",searchObj.wd);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",searchObj.pg)}}MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);list.forEach(it=>{let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print(`搜索发生错误:${e.message}`);return"{}"}}if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""))}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();if(!v_title){v_title="线路空"}console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print(`格式化LISTS发生错误:${e.message}`)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print(`js执行lists: 发生错误:${e.message}`)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let list_url_prefix=p.list_url_prefix||"";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let new_vod_list=[];let tt1=(new Date).getTime();if(typeof pdfl==="function"){new_vod_list=pdfl(html,p1,list_text,list_url,MY_URL);if(list_url_prefix){new_vod_list=new_vod_list.map(it=>it.split("$")[0]+"$"+list_url_prefix+it.split("$").slice(1).join("$"))}}else{let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}for(let i=0;i0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];vod.vod_pic=vod.vod_pic.replace(replace_from,replace_to)}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);try{vod=vodDeal(vod)}catch(e){console.log(`vodDeal发生错误:${e.message}`)}return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return vod}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;var MY_FLAG=playObj.flag;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;var flag=MY_FLAG;let common_play={parse:SPECIAL_URL.test(input)||/^(push:)/.test(input)?0:1,url:input,flag:flag,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.trim();if(lazy_code.startsWith("js:")){lazy_code=lazy_code.replace("js:","").trim()}print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:SPECIAL_URL.test(input)||/^(push:)/.test(input)?0:1,jx:tellIsJx(input),url:input}}catch(e){print(`js免嗅错误:${e.message}`);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length>=3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log(`执行嗅探规则发生错误:${e.message}`);return false}}}function getOriginalJs(js_code){let current_match=/var rule|[\u4E00-\u9FA5]+|function|let |var |const |\(|\)|"|'/;if(current_match.test(js_code)){return js_code}let rsa_private_key="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs=";let decode_content="";function aes_decrypt(data){let key=CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A");let iv=CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A");let encrypted=CryptoJS.AES.decrypt({ciphertext:CryptoJS.enc.Base64.parse(data)},key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);return encrypted}let error_log=false;function logger(text){if(error_log){log(text)}}let decode_funcs=[text=>{try{return ungzip(text)}catch(e){logger("非gzip加密");return""}},text=>{try{return base64Decode(text)}catch(e){logger("非b64加密");return""}},text=>{try{return aes_decrypt(text)}catch(e){logger("非aes加密");return""}},text=>{try{return RSA.decode(text,rsa_private_key,null)}catch(e){logger("非rsa加密");return""}}];let func_index=0;while(!current_match.test(decode_content)){decode_content=decode_funcs[func_index](js_code);func_index++;if(func_index>=decode_funcs.length){break}}return decode_content}function runMain(main_func_code,arg){let mainFunc=function(){return""};try{eval(main_func_code+"\nmainFunc=main;");return mainFunc(arg)}catch(e){log(`执行main_funct发生了错误:${e.message}`);return""}}function init(ext){console.log("init");rule={};rule_fetch_params={};fetch_params=null;try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")||ext.startsWith("file://")){let query=getQuery(ext);let js=request(ext,{method:"GET"});if(js){js=getOriginalJs(js);eval("(function(){"+js.replace("var rule","rule")+"})()")}if(query.type==="url"&&query.params){rule.params=urljoin(ext,query.params)}else if(query.params){rule.params=query.params}}else{ext=getOriginalJs(ext);eval("(function(){"+ext.replace("var rule","rule")+"})()")}}else{console.log(`规则加载失败,不支持的规则类型:${typeof ext}`);return}rule.host=(rule.host||"").rstrip("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:${e.message}`)}}if(rule["模板"]==="自动"){try{let host_headers=rule["headers"]||{};let host_html=getCode(HOST,{headers:host_headers});let match_muban="";let muban_keys=Object.keys(muban).filter(it=>!/默认|短视2|采集1/.test(it));for(let muban_key of muban_keys){try{let host_data=JSON.parse(home({},host_html,muban[muban_key].class_parse));if(host_data.class&&host_data.class.length>0){match_muban=muban_key;console.log(`自动匹配模板:【${muban_key}】`);break}}catch(e){console.log(`自动匹配模板:【${muban_key}】错误:${e.message}`)}}if(match_muban){muban["自动"]=muban[match_muban];if(rule["模板修改"]&&rule["模板修改"].startsWith("js:")){eval(rule["模板修改"].replace("js:","").trim())}}else{delete rule["模板"]}}catch(e){delete rule["模板"]}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.类型=rule.类型||"影视";rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.homeUrl=cheerio.jinja2(rule.homeUrl,{rule:rule});rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;rule.二级访问前=rule.二级访问前||"";if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")&&!rule.searchUrl.includes("#")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl}rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.图片替换=rule.图片替换||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";if(!rule.hasOwnProperty("sniffer")){rule.sniffer=false}rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";if(rule.sniffer&&!rule.isVideo){rule.isVideo="http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*"}rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}else if(k.toLowerCase()==="cookie"){let v=rule.headers[k];if(v&&v.startsWith("http")){console.log(v);try{v=fetch(v);console.log(v);rule.headers[k]=v}catch(e){console.log(`从${v}获取cookie发生错误:${e.message}`)}}}}}catch(e){console.log(`处理headers发生错误:${e.message}`)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);pre();init_test()}catch(e){console.log(`init_test发生错误:${e.message}`)}}let homeHtmlCache=undefined;function home(filter,home_html,class_parse){console.log("home");home_html=home_html||"";class_parse=class_parse||"";if(typeof rule.filter==="string"&&rule.filter.trim().length>0){try{let filter_json=ungzip(rule.filter.trim());rule.filter=JSON.parse(filter_json)}catch(e){rule.filter={}}}let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:class_parse||rule.class_parse||"",cate_exclude:rule.cate_exclude,home_html:home_html};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";log("orId:"+orId);if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,"二级访问前":rule.二级访问前,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function getRule(key){return key?rule[key]||"":rule}function DRPY(){return{runMain:runMain,getRule:getRule,init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,fixAdM3u8Ai:fixAdM3u8Ai}}export default{runMain:runMain,getRule:getRule,init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,fixAdM3u8Ai:fixAdM3u8Ai,DRPY:DRPY};
\ No newline at end of file
diff --git a/lib/duboku.json b/lib/duboku.json
new file mode 100644
index 0000000..5a63c27
--- /dev/null
+++ b/lib/duboku.json
@@ -0,0 +1,773 @@
+{
+ "author": "takagen99",
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
+ "homeUrl": "https://www.duboku.tv/",
+ "dcVipFlag": "true",
+ "dcPlayUrl": "true",
+ "cateNode": "//ul[contains(@class,'nav-menu')]/li/a[contains(@href, 'vodtype')]",
+ "cateName": "/text()",
+ "cateId": "/@href",
+ "cateIdR": "/vodtype/(\\w+).html",
+ "cateManual": {
+ "陆剧": "13",
+ "日韩剧": "15",
+ "短剧": "21",
+ "英美剧": "16",
+ "台泰剧": "14",
+ "港剧": "20",
+ "综艺": "3",
+ "动漫": "4"
+ },
+ "homeVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a",
+ "homeVodName": "/@title",
+ "homeVodId": "/@href",
+ "homeVodIdR": "/voddetail/(\\w+).html",
+ "homeVodImg": "/@data-original",
+ "homeVodImgR": "\\S+(http\\S+)",
+ "homeVodMark": "//span[contains(@class,'pic-text')]/text()",
+ "cateUrl": "https://www.duboku.tv/vodshow/{cateId}-{area}-{by}------{catePg}---{year}.html",
+ "cateVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a",
+ "cateVodName": "/@title",
+ "cateVodId": "/@href",
+ "cateVodIdR": "/voddetail/(\\w+).html",
+ "cateVodImg": "/@data-original",
+ "cateVodImgR": "\\S+(http\\S+)",
+ "cateVodMark": "//span[contains(@class,'pic-text')]/text()",
+ "dtUrl": "https://w.duboku.io/voddetail/{vid}.html",
+ "dtNode": "//body",
+ "dtName": "//div[contains(@class,'myui-content__thumb')]/a/@title",
+ "dtNameR": "",
+ "dtImg": "//div[contains(@class,'myui-content__thumb')]/a/img/@data-original",
+ "dtImgR": "",
+ "dtCate": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '分类')]/following-sibling::a/text()",
+ "dtYear": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '年份')]/following-sibling::a/text()",
+ "dtArea": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '地区')]/following-sibling::a/text()",
+ "dtMark": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '更新')]/following-sibling::a/text()",
+ "dtDirector": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '导演')]/following-sibling::a/text()",
+ "dtActor": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '主演')]/following-sibling::a/text()",
+ "dtDesc": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '简介')]/following-sibling::a/text()",
+ "dtFromNode": "//ul[contains(@class,'nav-tabs')]/li/a",
+ "dtFromName": "/text()",
+ "dtFromNameR": "",
+ "dtUrlNode": "//ul[contains(@class,'myui-content__list')]",
+ "dtUrlSubNode": "/li/a",
+ "dtUrlId": "/@href",
+ "dtUrlIdR": "/vodplay/(\\S+).html",
+ "dtUrlName": "/text()",
+ "dtUrlNameR": "",
+
+ "playUrl": "https://w.duboku.io/vodplay/{playUrl}.html",
+ "playUa": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
+ "playReferer": "https://w.duboku.io/",
+ "searchUrl": "https://w.duboku.io/index.php/ajax/suggest?mid=1&wd={wd}&limit=10",
+ "scVodNode": "json:list",
+ "scVodName": "name",
+ "scVodId": "id",
+ "scVodIdR": "",
+ "scVodImg": "pic",
+ "scVodMark": "",
+ "filter": {
+ "13": [
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "14": [
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "16": [
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "15": [
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "2": [
+ {
+ "key": "cateId",
+ "name": "类型",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "陆剧",
+ "v": "13"
+ },
+ {
+ "n": "日韩剧",
+ "v": "15"
+ },
+ {
+ "n": "英美剧",
+ "v": "16"
+ },
+ {
+ "n": "台泰剧",
+ "v": "14"
+ },
+ {
+ "n": "港剧",
+ "v": "20"
+ }
+ ]
+ },
+ {
+ "key": "area",
+ "name": "地区",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "内地",
+ "v": "内地"
+ },
+ {
+ "n": "韩国",
+ "v": "韩国"
+ },
+ {
+ "n": "香港",
+ "v": "香港"
+ },
+ {
+ "n": "台湾",
+ "v": "台湾"
+ },
+ {
+ "n": "美国",
+ "v": "美国"
+ },
+ {
+ "n": "英国",
+ "v": "英国"
+ },
+ {
+ "n": "巴西",
+ "v": "巴西"
+ },
+ {
+ "n": "西班牙",
+ "v": "西班牙"
+ },
+ {
+ "n": "泰国",
+ "v": "泰国"
+ },
+ {
+ "n": "德国",
+ "v": "德国"
+ },
+ {
+ "n": "法国",
+ "v": "法国"
+ },
+ {
+ "n": "日本",
+ "v": "日本"
+ },
+ {
+ "n": "荷兰",
+ "v": "荷兰"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "3": [
+ {
+ "key": "area",
+ "name": "地区",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "内地",
+ "v": "内地"
+ },
+ {
+ "n": "香港",
+ "v": "香港"
+ },
+ {
+ "n": "台湾",
+ "v": "台湾"
+ },
+ {
+ "n": "韩国",
+ "v": "韩国"
+ },
+ {
+ "n": "美国",
+ "v": "美国"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "4": [
+ {
+ "key": "area",
+ "name": "地区",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "国产",
+ "v": "国产"
+ },
+ {
+ "n": "日本",
+ "v": "日本"
+ },
+ {
+ "n": "美国",
+ "v": "美国"
+ },
+ {
+ "n": "法国",
+ "v": "法国"
+ },
+ {
+ "n": "其他",
+ "v": "其他"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "20": [
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ],
+ "21": [
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": ""
+ },
+ {
+ "n": "2023",
+ "v": "2023"
+ },
+ {
+ "n": "2022",
+ "v": "2022"
+ },
+ {
+ "n": "2021",
+ "v": "2021"
+ },
+ {
+ "n": "2020",
+ "v": "2020"
+ },
+ {
+ "n": "2019",
+ "v": "2019"
+ },
+ {
+ "n": "2018",
+ "v": "2018"
+ },
+ {
+ "n": "2017",
+ "v": "2017"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "排序",
+ "v": ""
+ },
+ {
+ "n": "时间",
+ "v": "time"
+ },
+ {
+ "n": "人气",
+ "v": "hits"
+ },
+ {
+ "n": "评分",
+ "v": "score"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/lib/feimaolive.json b/lib/feimaolive.json
new file mode 100644
index 0000000..17fd17d
--- /dev/null
+++ b/lib/feimaolive.json
@@ -0,0 +1,5 @@
+[
+{"name":"范明明OfficalSite","url":"https://live.fanmingming.com/tv/m3u/global.m3u"},
+{"name":"范明明GitHub","url":"https://mirror.ghproxy.com/raw.githubusercontent.com/fanmingming/live/main/tv/m3u/global.m3u"},
+{"name":"范明明IPV6","url":"https://live.fanmingming.com/tv/m3u/ipv6.m3u"}
+]
diff --git a/lib/gbk.js b/lib/gbk.js
new file mode 100644
index 0000000..796d53a
--- /dev/null
+++ b/lib/gbk.js
@@ -0,0 +1,68 @@
+/***
+ * gbk编码解码函数
+ * strTool = gbkTool() strTool.encode(key)
+ * @returns {{encode: (function(*): *), decode: (function(*): *)}}
+ */
+export function gbkTool(){
+ var data=function(zipData){
+ var re=zipData
+ .replace(/#(\d+)\$/g,function(a,b){
+ return Array(+b+3).join('#');
+ })
+ .replace(/#/g,'####')
+ .replace(/(\w\w):([\w#]+)(?:,|$)/g,function(a,hd,dt){
+ return dt.replace(/../g,function(a){
+ if(a!='##'){
+ return hd+a;
+ }else{
+ return a;
+ }
+ });
+ });
+ return re;
+ }('4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364'),
+ U2Ghash={},
+ G2Uhash={};
+ !function(data){
+ var k=0;
+ data=data.match(/..../g);
+ for(var i=0x81;i<=0xfe;i++){
+ for(var j=0x40;j<=0xFE;j++){
+ U2Ghash[data[k++]]=('%'+i.toString(16)+'%'+j.toString(16))
+ .toUpperCase();
+ }
+ }
+ for(var key in U2Ghash){
+ G2Uhash[U2Ghash[key]]=key;
+ }
+ }(data);
+ function isAscii(unicode) {
+ return ((unicode == 0x20AC) || (unicode <= 0x007F && unicode >= 0x0000));
+ }
+ return{
+ encode:function(str){
+ return str.replace(/./g,function(a){
+ var code=a.charCodeAt(0);
+ if(isAscii(code)){
+ return encodeURIComponent(a);
+ }else{
+ var key=code.toString(16);
+ if(key.length!=4)key=('000'+key).match(/....$/)[0];
+ return U2Ghash[key]||a;
+ }
+ });
+ },
+ decode:function(str){
+ return str.replace(/%[0-9A-F]{2}%[0-9A-F]{2}/g,function(a){
+ if(a in G2Uhash){
+ return String.fromCharCode('0x'+G2Uhash[a]);
+ }else{
+ return a;
+ }
+ }).replace(/%[\w]{2}/g,function(a){
+ return decodeURIComponent(a);
+
+ });
+ }
+ };
+}
\ No newline at end of file
diff --git a/lib/geoip.dat.gz b/lib/geoip.dat.gz
new file mode 100644
index 0000000..de0f65f
Binary files /dev/null and b/lib/geoip.dat.gz differ
diff --git a/lib/getsearchtxt.py b/lib/getsearchtxt.py
new file mode 100644
index 0000000..444f02e
--- /dev/null
+++ b/lib/getsearchtxt.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python3
+
+import sys
+import re
+import json
+import requests
+import time
+import traceback
+import gzip
+
+p=re.compile(r'.*/s/(.*)')
+skipp = re.compile(r'.*(cover|screen|频道).*',re.IGNORECASE)
+reqcount=1
+sharedict=set()
+
+def getlist(w,shareid, fileid,morepage):
+ global p
+ global skipp
+ global reqcount
+ global sharedict
+
+ reqcount += 1
+ if reqcount % 5 == 0:
+ print(f"reqcount:{reqcount} shareid:{shareid} fileid:{fileid}",file=sys.stderr)
+ #time.sleep(1)
+ url = f'http://192.168.101.188:9978/proxy?do=pikpak&type=list&share_id={shareid}&file_id={fileid}&pass_code=&morepage={morepage}'
+ print(f"url: {url}",file=sys.stderr)
+ resp = requests.get(url)
+ content = resp.content.decode('utf-8')
+ lines = content.split("\n")
+ if "folder" not in content and len(lines)<=4:
+ return
+ isfirst=True
+ for line in lines:
+ if isfirst:
+ isfirst=False
+ print(f"first line:{line}",file=sys.stderr)
+ if skipp.match(line):
+ continue
+ linearr = line.split('\t')
+ if len(linearr)>2:
+ m = p.match(linearr[0])
+ if m:
+ arr = m.group(1).split("/")
+ else:
+ arr = linearr[0].split("/")
+ shareid=arr[0]
+ fileid=arr[1] if len(arr)>1 else ""
+ if shareid+"/"+fileid in sharedict:
+ print(f"skip shareid{shareid} fileid:{fileid}", file=sys.stderr)
+ continue
+ w.write(line+"\n")
+ w.flush()
+ if linearr[2] == "folder":
+ getlist(w,shareid,fileid,False)
+
+ if len(lines)>0:
+ getlist(w,shareid,fileid,True)
+
+def main():
+ try:
+ f = gzip.open(sys.argv[1]+".raw.gz",mode="rt",encoding="utf-8")
+ if f is not None:
+ print(f"found gz raw file:{sys.argv[1]}.raw.gz, extract it",file=sys.stderr)
+ with(open(sys.argv[1]+".raw","w",encoding="utf-8")) as w:
+ while(True):
+ lines = f.readlines()
+ if len(lines)<=0:
+ break
+ for line in lines:
+ line=line.strip()
+ w.write(line+"\n")
+ f.seek(0)
+ except:
+ traceback.print_exc()
+ try:
+ f = open(sys.argv[1]+".raw","r",encoding="utf-8")
+ except:
+ f = None
+ if f is not None:
+ print("found old raw file")
+ while True:
+ lines = f.readlines()
+ if len(lines)<=0:
+ break
+ for line in lines:
+ linearr = line.split("\t")
+ m = p.match(linearr[0])
+ if m:
+ arr = m.group(1).split("/")
+ else:
+ arr = linearr[0].split("/")
+ if len(arr)>1:
+ shareid = arr[0]
+ fileid = arr[1]
+ sharedict.add(shareid+"/"+fileid)
+ f.close()
+ print(f"old raw file record:{len(sharedict)}")
+ else:
+ print("no old raw file")
+ with(open(sys.argv[1]+".raw","a+",encoding="utf-8")) as w:
+ with(open(sys.argv[1],"r",encoding="utf-8")) as f:
+ j = json.load(f)
+ for c in j:
+ shareid=c.get("type_id")
+ fileid=""
+ m = p.match(shareid)
+ if m:
+ arr = m.group(1).split("/")
+ else:
+ arr = shareid.split("/")
+ shareid=arr[0]
+ fileid=arr[1] if len(arr)>1 else ""
+ if shareid+"/"+fileid in sharedict:
+ continue
+ getlist(w,shareid,fileid,False)
+
+main()
diff --git a/lib/jianpian.json b/lib/jianpian.json
new file mode 100644
index 0000000..b92fd63
--- /dev/null
+++ b/lib/jianpian.json
@@ -0,0 +1,482 @@
+{
+ "0": [
+ {
+ "key": "area",
+ "name": "地區",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "国产",
+ "v": "1"
+ },
+ {
+ "n": "中国香港",
+ "v": "3"
+ },
+ {
+ "n": "中国台湾",
+ "v": "6"
+ },
+ {
+ "n": "美国",
+ "v": "5"
+ },
+ {
+ "n": "韩国",
+ "v": "18"
+ },
+ {
+ "n": "日本",
+ "v": "2"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "2023",
+ "v": "153"
+ },
+ {
+ "n": "2022",
+ "v": "101"
+ },
+ {
+ "n": "2021",
+ "v": "118"
+ },
+ {
+ "n": "2020",
+ "v": "16"
+ },
+ {
+ "n": "2019",
+ "v": "7"
+ },
+ {
+ "n": "2018",
+ "v": "2"
+ },
+ {
+ "n": "2017",
+ "v": "3"
+ },
+ {
+ "n": "2016",
+ "v": "22"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "热门",
+ "v": "hot"
+ },
+ {
+ "n": "更新",
+ "v": "updata"
+ },
+ {
+ "n": "评分",
+ "v": "rating"
+ }
+ ]
+ }
+ ],
+ "1": [
+ {
+ "key": "area",
+ "name": "地區",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "国产",
+ "v": "1"
+ },
+ {
+ "n": "中国香港",
+ "v": "3"
+ },
+ {
+ "n": "中国台湾",
+ "v": "6"
+ },
+ {
+ "n": "美国",
+ "v": "5"
+ },
+ {
+ "n": "韩国",
+ "v": "18"
+ },
+ {
+ "n": "日本",
+ "v": "2"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "2023",
+ "v": "153"
+ },
+ {
+ "n": "2022",
+ "v": "101"
+ },
+ {
+ "n": "2021",
+ "v": "118"
+ },
+ {
+ "n": "2020",
+ "v": "16"
+ },
+ {
+ "n": "2019",
+ "v": "7"
+ },
+ {
+ "n": "2018",
+ "v": "2"
+ },
+ {
+ "n": "2017",
+ "v": "3"
+ },
+ {
+ "n": "2016",
+ "v": "22"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "热门",
+ "v": "hot"
+ },
+ {
+ "n": "更新",
+ "v": "updata"
+ },
+ {
+ "n": "评分",
+ "v": "rating"
+ }
+ ]
+ }
+ ],
+ "2": [
+ {
+ "key": "area",
+ "name": "地區",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "国产",
+ "v": "1"
+ },
+ {
+ "n": "中国香港",
+ "v": "3"
+ },
+ {
+ "n": "中国台湾",
+ "v": "6"
+ },
+ {
+ "n": "美国",
+ "v": "5"
+ },
+ {
+ "n": "韩国",
+ "v": "18"
+ },
+ {
+ "n": "日本",
+ "v": "2"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "2023",
+ "v": "153"
+ },
+ {
+ "n": "2022",
+ "v": "101"
+ },
+ {
+ "n": "2021",
+ "v": "118"
+ },
+ {
+ "n": "2020",
+ "v": "16"
+ },
+ {
+ "n": "2019",
+ "v": "7"
+ },
+ {
+ "n": "2018",
+ "v": "2"
+ },
+ {
+ "n": "2017",
+ "v": "3"
+ },
+ {
+ "n": "2016",
+ "v": "22"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "热门",
+ "v": "hot"
+ },
+ {
+ "n": "更新",
+ "v": "updata"
+ },
+ {
+ "n": "评分",
+ "v": "rating"
+ }
+ ]
+ }
+ ],
+ "3": [
+ {
+ "key": "area",
+ "name": "地區",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "国产",
+ "v": "1"
+ },
+ {
+ "n": "中国香港",
+ "v": "3"
+ },
+ {
+ "n": "中国台湾",
+ "v": "6"
+ },
+ {
+ "n": "美国",
+ "v": "5"
+ },
+ {
+ "n": "韩国",
+ "v": "18"
+ },
+ {
+ "n": "日本",
+ "v": "2"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "2023",
+ "v": "153"
+ },
+ {
+ "n": "2022",
+ "v": "101"
+ },
+ {
+ "n": "2021",
+ "v": "118"
+ },
+ {
+ "n": "2020",
+ "v": "16"
+ },
+ {
+ "n": "2019",
+ "v": "7"
+ },
+ {
+ "n": "2018",
+ "v": "2"
+ },
+ {
+ "n": "2017",
+ "v": "3"
+ },
+ {
+ "n": "2016",
+ "v": "22"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "热门",
+ "v": "hot"
+ },
+ {
+ "n": "更新",
+ "v": "updata"
+ },
+ {
+ "n": "评分",
+ "v": "rating"
+ }
+ ]
+ }
+ ],
+ "4": [
+ {
+ "key": "area",
+ "name": "地區",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "国产",
+ "v": "1"
+ },
+ {
+ "n": "中国香港",
+ "v": "3"
+ },
+ {
+ "n": "中国台湾",
+ "v": "6"
+ },
+ {
+ "n": "美国",
+ "v": "5"
+ },
+ {
+ "n": "韩国",
+ "v": "18"
+ },
+ {
+ "n": "日本",
+ "v": "2"
+ }
+ ]
+ },
+ {
+ "key": "year",
+ "name": "年份",
+ "value": [
+ {
+ "n": "全部",
+ "v": "0"
+ },
+ {
+ "n": "2023",
+ "v": "153"
+ },
+ {
+ "n": "2022",
+ "v": "101"
+ },
+ {
+ "n": "2021",
+ "v": "118"
+ },
+ {
+ "n": "2020",
+ "v": "16"
+ },
+ {
+ "n": "2019",
+ "v": "7"
+ },
+ {
+ "n": "2018",
+ "v": "2"
+ },
+ {
+ "n": "2017",
+ "v": "3"
+ },
+ {
+ "n": "2016",
+ "v": "22"
+ }
+ ]
+ },
+ {
+ "key": "by",
+ "name": "排序",
+ "value": [
+ {
+ "n": "热门",
+ "v": "hot"
+ },
+ {
+ "n": "更新",
+ "v": "updata"
+ },
+ {
+ "n": "评分",
+ "v": "rating"
+ }
+ ]
+ }
+ ]
+}
diff --git a/lib/jsencrypt.js b/lib/jsencrypt.js
new file mode 100644
index 0000000..fa3006c
--- /dev/null
+++ b/lib/jsencrypt.js
@@ -0,0 +1,265 @@
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if (typeof exports === 'object' && typeof module === 'object') {
+ // CommonJS
+ module.exports = exports = factory();
+ } else if (typeof define === 'function' && define.amd) {
+ // AMD
+ define([], factory);
+ } else {
+ // Global (browser)
+ globalThis.JSEncrypt = factory();
+ }
+})(this, () => {
+return /******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./lib/JSEncrypt.js":
+/*!**************************!*\
+ !*** ./lib/JSEncrypt.js ***!
+ \**************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\nvar _a;\n\n\nvar version = typeof process !== 'undefined'\n ? (_a = process.env) === null || _a === void 0 ? void 0 : \"3.3.2\"\n : undefined;\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n if (options === void 0) { options = {}; }\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\nvar b64map=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var b64pad=\"=\";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out=\"\";while(i>2);out+=b64map.charAt((c1&3)<<4);out+=\"==\";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+=\"=\";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out=\"\";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(i>6)+b64map.charAt(c&63)}if(i+1==h.length){c=parseInt(h.substring(i,i+1),16);ret+=b64map.charAt(c<<2)}else if(i+2==h.length){c=parseInt(h.substring(i,i+2),16);ret+=b64map.charAt(c>>2)+b64map.charAt((c&3)<<4)}while((ret.length&3)>0)ret+=b64pad;return ret}function hexToBytes(hex){for(var bytes=[],c=0;c>>4).toString(16));hex.push((bytes[i]&15).toString(16))}return hex.join(\"\")}function b64tohex(str){for(var i=0,bin=atob(str.replace(/[ \\r\\n]+$/,\"\")),hex=[];i>3};JSEncrypt.prototype.decryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)*2;try{var hexString=b64tohex(string);var decryptedString=\"\";var rexStr=\".{1,\"+maxLength+\"}\";var rex=new RegExp(rexStr,\"g\");var subStrArray=hexString.match(rex);if(subStrArray){subStrArray.forEach(function(entry){decryptedString+=k.decrypt(entry)});return decryptedString}}catch(ex){console.log(\"加密错误:\"+ex.message);return false}};JSEncrypt.prototype.encryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)-11;try{var subStr=\"\",encryptedString=\"\";var subStart=0,subEnd=0;var bitLen=0,tmpPoint=0;for(var i=0,len=string.length;imaxLength){subStr=string.substring(subStart,subEnd);encryptedString+=k.encrypt(subStr);subStart=subEnd;bitLen=bitLen-tmpPoint}else{subEnd=i;tmpPoint=bitLen}}subStr=string.substring(subStart,len);encryptedString+=k.encrypt(subStr);return hex2b64(encryptedString)}catch(ex){console.log(\"解密错误:\"+ex.message);return false}}; JSEncrypt.version = version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?");
+
+/***/ }),
+
+/***/ "./lib/JSEncryptRSAKey.js":
+/*!********************************!*\
+ !*** ./lib/JSEncryptRSAKey.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n if (asn1.sub[0].sub) {\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n modulus = asn1.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff }),\n ],\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull(),\n ],\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n ],\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex(),\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [first_sequence, bit_string],\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return obj.hasOwnProperty(\"n\") && obj.hasOwnProperty(\"e\");\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?");
+
+/***/ }),
+
+/***/ "./lib/index.js":
+/*!**********************!*\
+ !*** ./lib/index.js ***!
+ \**********************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/asn1js/asn1.js":
+/*!********************************!*\
+ !*** ./lib/lib/asn1js/asn1.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag),\n/* harmony export */ \"Stream\": () => (/* binding */ Stream)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \".concat(pos, \" on a stream of length \").concat(this.enc.length));\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/asn1js/base64.js":
+/*!**********************************!*\
+ !*** ./lib/lib/asn1js/base64.js ***!
+ \**********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/asn1js/hex.js":
+/*!*******************************!*\
+ !*** ./lib/lib/asn1js/hex.js ***!
+ \*******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/asn1js/int10.js":
+/*!*********************************!*\
+ !*** ./lib/lib/asn1js/int10.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsbn/base64.js":
+/*!********************************!*\
+ !*** ./lib/lib/jsbn/base64.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsbn/jsbn.js":
+/*!******************************!*\
+ !*** ./lib/lib/jsbn/jsbn.js ***!
+ \******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsbn/prng4.js":
+/*!*******************************!*\
+ !*** ./lib/lib/jsbn/prng4.js ***!
+ \*******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsbn/rng.js":
+/*!*****************************!*\
+ !*** ./lib/lib/jsbn/rng.js ***!
+ \*****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (typeof window !== 'undefined') {\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsbn/rsa.js":
+/*!*****************************!*\
+ !*** ./lib/lib/jsbn/rsa.js ***!
+ \*****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsbn/util.js":
+/*!******************************!*\
+ !*** ./lib/lib/jsbn/util.js ***!
+ \******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cbit\": () => (/* binding */ cbit),\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsrsasign/asn1-1.0.js":
+/*!***************************************!*\
+ !*** ./lib/lib/jsrsasign/asn1-1.0.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n * \n * This name space provides following name spaces:\n *
\n * - {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
\n * - {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
\n * - {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
\n *
\n *
\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n * \n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *
PROVIDING ASN.1 PRIMITIVES
\n * Here are ASN.1 DER primitive classes.\n * \n * - 0x01 {@link KJUR.asn1.DERBoolean}
\n * - 0x02 {@link KJUR.asn1.DERInteger}
\n * - 0x03 {@link KJUR.asn1.DERBitString}
\n * - 0x04 {@link KJUR.asn1.DEROctetString}
\n * - 0x05 {@link KJUR.asn1.DERNull}
\n * - 0x06 {@link KJUR.asn1.DERObjectIdentifier}
\n * - 0x0a {@link KJUR.asn1.DEREnumerated}
\n * - 0x0c {@link KJUR.asn1.DERUTF8String}
\n * - 0x12 {@link KJUR.asn1.DERNumericString}
\n * - 0x13 {@link KJUR.asn1.DERPrintableString}
\n * - 0x14 {@link KJUR.asn1.DERTeletexString}
\n * - 0x16 {@link KJUR.asn1.DERIA5String}
\n * - 0x17 {@link KJUR.asn1.DERUTCTime}
\n * - 0x18 {@link KJUR.asn1.DERGeneralizedTime}
\n * - 0x30 {@link KJUR.asn1.DERSequence}
\n * - 0x31 {@link KJUR.asn1.DERSet}
\n *
\n * OTHER ASN.1 CLASSES
\n * \n * - {@link KJUR.asn1.ASN1Object}
\n * - {@link KJUR.asn1.DERAbstractString}
\n * - {@link KJUR.asn1.DERAbstractTime}
\n * - {@link KJUR.asn1.DERAbstractStructured}
\n * - {@link KJUR.asn1.DERTaggedObject}
\n *
\n * SUB NAME SPACES
\n * \n * - {@link KJUR.asn1.cades} - CAdES long term signature format
\n * - {@link KJUR.asn1.cms} - Cryptographic Message Syntax
\n * - {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
\n * - {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
\n * - {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
\n *
\n * \n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n * \n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n * \n * - 'bool' - DERBoolean
\n * - 'int' - DERInteger
\n * - 'bitstr' - DERBitString
\n * - 'octstr' - DEROctetString
\n * - 'null' - DERNull
\n * - 'oid' - DERObjectIdentifier
\n * - 'enum' - DEREnumerated
\n * - 'utf8str' - DERUTF8String
\n * - 'numstr' - DERNumericString
\n * - 'prnstr' - DERPrintableString
\n * - 'telstr' - DERTeletexString
\n * - 'ia5str' - DERIA5String
\n * - 'utctime' - DERUTCTime
\n * - 'gentime' - DERGeneralizedTime
\n * - 'seq' - DERSequence
\n * - 'set' - DERSet
\n * - 'tag' - DERTaggedObject
\n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - int - specify initial ASN.1 value(V) by integer value
\n * - bigint - specify initial ASN.1 value(V) by BigInteger object
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - bin - specify binary string (ex. '10111')
\n * - array - specify array of boolean (ex. [true,false,true,true])
\n * - hex - specify hexadecimal string of ASN.1 value(V) including unused bits
\n * - obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
\n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n * \n * - str - to set a string as a value
\n * - hex - to set a hexadecimal string as a value
\n * - obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
\n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - int - specify initial ASN.1 value(V) by integer value
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n * - date - specify Date object.
\n *
\n * NOTE: 'params' can be omitted.\n * EXAMPLES
\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n * - date - specify Date object.
\n * - millis - specify flag to show milliseconds (from 1.0.6)
\n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - array - specify array of ASN1Object to set elements of content
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - array - specify array of ASN1Object to set elements of content
\n * - sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
\n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n * \n * - explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
\n * - tag - specify tag (default is 'a0' which means [0])
\n * - obj - specify ASN1Object which is tagged
\n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?");
+
+/***/ }),
+
+/***/ "./lib/lib/jsrsasign/yahoo.js":
+/*!************************************!*\
+ !*** ./lib/lib/jsrsasign/yahoo.js ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?");
+
+/***/ }),
+
+/***/ "./node_modules/process/browser.js":
+/*!*****************************************!*\
+ !*** ./node_modules/process/browser.js ***!
+ \*****************************************/
+/***/ ((module) => {
+
+eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack://JSEncrypt/./node_modules/process/browser.js?");
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./lib/index.js");
+/******/ __webpack_exports__ = __webpack_exports__["default"];
+/******/
+/******/ return __webpack_exports__;
+/******/ })()
+;
+});
\ No newline at end of file
diff --git a/lib/lf_ikanbot_min.js b/lib/lf_ikanbot_min.js
new file mode 100644
index 0000000..1c5ff9f
--- /dev/null
+++ b/lib/lf_ikanbot_min.js
@@ -0,0 +1 @@
+const _0x1db4da=_0x3948;(function(_0x119da8,_0x575b9b){const _0x3503f6=_0x3948,_0x5cd9ce=_0x119da8();while(!![]){try{const _0x4e1eb2=-parseInt(_0x3503f6(0x243))/0x1*(parseInt(_0x3503f6(0x1fc))/0x2)+parseInt(_0x3503f6(0x188))/0x3*(parseInt(_0x3503f6(0xdc))/0x4)+parseInt(_0x3503f6(0x1f6))/0x5+-parseInt(_0x3503f6(0x18d))/0x6+-parseInt(_0x3503f6(0x1da))/0x7*(-parseInt(_0x3503f6(0x1bb))/0x8)+-parseInt(_0x3503f6(0x168))/0x9*(-parseInt(_0x3503f6(0x1a0))/0xa)+-parseInt(_0x3503f6(0x1e1))/0xb;if(_0x4e1eb2===_0x575b9b)break;else _0x5cd9ce['push'](_0x5cd9ce['shift']());}catch(_0x4ba5fd){_0x5cd9ce['push'](_0x5cd9ce['shift']());}}}(_0x3d05,0x8ea29));const _0x1b26a4=(function(){let _0x5aa284=!![];return function(_0x175bd4,_0x5e46e7){const _0xdeb918=_0x5aa284?function(){const _0x1bb18b=_0x3948;if(_0x5e46e7){const _0x475303=_0x5e46e7[_0x1bb18b(0x172)+'\x6c\x79'](_0x175bd4,arguments);return _0x5e46e7=null,_0x475303;}}:function(){};return _0x5aa284=![],_0xdeb918;};}()),_0x5b7099=_0x1b26a4(this,function(){const _0x14ed0e=_0x3948;let _0x5d945e;try{const _0x376c1d=Function(_0x14ed0e(0xd9)+_0x14ed0e(0x1cc)+_0x14ed0e(0x1e4)+_0x14ed0e(0x15d)+_0x14ed0e(0x1d7)+_0x14ed0e(0x1e7)+'\x20'+('\x7b\x7d\x2e'+_0x14ed0e(0x20f)+_0x14ed0e(0x1a4)+_0x14ed0e(0x125)+_0x14ed0e(0x18b)+_0x14ed0e(0xed)+_0x14ed0e(0x150)+_0x14ed0e(0xf1)+'\x68\x69\x73'+_0x14ed0e(0x209)+'\x20\x29')+'\x29\x3b');_0x5d945e=_0x376c1d();}catch(_0x4e35cc){_0x5d945e=window;}const _0x128c2b=_0x5d945e['\x63\x6f\x6e'+_0x14ed0e(0x262)+'\x65']=_0x5d945e[_0x14ed0e(0x20f)+_0x14ed0e(0x262)+'\x65']||{},_0x1107ca=['\x6c\x6f\x67','\x77\x61\x72'+'\x6e',_0x14ed0e(0x109)+'\x6f',_0x14ed0e(0x152)+'\x6f\x72',_0x14ed0e(0x140)+'\x65\x70\x74'+'\x69\x6f\x6e',_0x14ed0e(0x234)+'\x6c\x65',_0x14ed0e(0xd8)+'\x63\x65'];for(let _0x5b050=0x0;_0x5b050<_0x1107ca[_0x14ed0e(0x221)+_0x14ed0e(0xee)];_0x5b050++){const _0x3288e6=_0x1b26a4[_0x14ed0e(0x20f)+_0x14ed0e(0x1a4)+_0x14ed0e(0x125)+'\x6f\x72'][_0x14ed0e(0xeb)+'\x74\x6f\x74'+'\x79\x70\x65'][_0x14ed0e(0x19e)+'\x64'](_0x1b26a4),_0x3f6768=_0x1107ca[_0x5b050],_0x3edcde=_0x128c2b[_0x3f6768]||_0x3288e6;_0x3288e6[_0x14ed0e(0x1bd)+_0x14ed0e(0x257)+_0x14ed0e(0xf3)]=_0x1b26a4[_0x14ed0e(0x19e)+'\x64'](_0x1b26a4),_0x3288e6[_0x14ed0e(0x239)+_0x14ed0e(0xfd)+'\x6e\x67']=_0x3edcde[_0x14ed0e(0x239)+_0x14ed0e(0xfd)+'\x6e\x67']['\x62\x69\x6e'+'\x64'](_0x3edcde),_0x128c2b[_0x3f6768]=_0x3288e6;}});function _0x3948(_0x3e93c6,_0x532539){const _0xc88bd2=_0x3d05();return _0x3948=function(_0x55ea6c,_0x1fb368){_0x55ea6c=_0x55ea6c-0xd7;let _0x119b17=_0xc88bd2[_0x55ea6c];return _0x119b17;},_0x3948(_0x3e93c6,_0x532539);}_0x5b7099();import _0x3c151b from'\x61\x73\x73\x65\x74\x73\x3a\x2f\x2f\x6a\x73\x2f\x6c\x69\x62\x2f\x63\x68\x65\x65\x72\x69\x6f\x2e\x6d\x69\x6e\x2e\x6a\x73';import'\x61\x73\x73\x65\x74\x73\x3a\x2f\x2f\x6a\x73\x2f\x6c\x69\x62\x2f\x63\x72\x79\x70\x74\x6f\x2d\x6a\x73\x2e\x6a\x73';const _0x268973={'\x70\x72\x69\x76\x61\x74\x65\x5f\x66\x6c\x61\x67':![],'\x70\x69\x63\x5f\x68\x65\x61\x64\x65\x72\x73':[_0x1db4da(0x1f5)+_0x1db4da(0x11a)+_0x1db4da(0x1d3)+_0x1db4da(0x14b)+_0x1db4da(0x12c)+_0x1db4da(0x176)+_0x1db4da(0x23e)+_0x1db4da(0x107)+'\x6e\x62\x6f'+_0x1db4da(0x217)+'\x6f\x6d\x2f',_0x1db4da(0x1f5)+_0x1db4da(0x11a)+_0x1db4da(0x1d3)+_0x1db4da(0x14b)+_0x1db4da(0x12c)+'\x2f\x2f\x77'+'\x77\x77\x2e'+'\x64\x6f\x75'+_0x1db4da(0x12f)+'\x2e\x63\x6f'+'\x6d\x2f'],'\x62\x72\x6f\x77\x5f\x68\x65\x61\x64\x65\x72\x73':[{'\x52\x65\x66\x65\x72\x65\x72':'\x68\x74\x74'+_0x1db4da(0x12c)+_0x1db4da(0x176)+_0x1db4da(0x23e)+_0x1db4da(0x107)+_0x1db4da(0x118)+_0x1db4da(0x217)+'\x6f\x6d\x2f','\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x1db4da(0x105)+'\x69\x6c\x6c'+'\x61\x2f\x35'+_0x1db4da(0x241)+'\x28\x57\x69'+_0x1db4da(0x215)+_0x1db4da(0x155)+_0x1db4da(0x20a)+'\x31\x30\x2e'+_0x1db4da(0x210)+'\x57\x69\x6e'+_0x1db4da(0x164)+_0x1db4da(0x1c6)+_0x1db4da(0x10a)+'\x41\x70\x70'+_0x1db4da(0x25d)+_0x1db4da(0x1bc)+'\x69\x74\x2f'+_0x1db4da(0x1d6)+_0x1db4da(0x15e)+_0x1db4da(0x1d8)+_0x1db4da(0x17c)+_0x1db4da(0x1a9)+_0x1db4da(0x22e)+'\x65\x20\x47'+'\x65\x63\x6b'+'\x6f\x29\x20'+'\x43\x68\x72'+_0x1db4da(0x1f2)+'\x2f\x31\x31'+_0x1db4da(0x23a)+_0x1db4da(0x1e6)+_0x1db4da(0x133)+_0x1db4da(0x1ed)+_0x1db4da(0x251)+_0x1db4da(0x1d6)+_0x1db4da(0x15e)+_0x1db4da(0x156)+_0x1db4da(0x260)+'\x31\x35\x2e'+_0x1db4da(0x169)+_0x1db4da(0x159)+_0x1db4da(0x11c)+'\x33'},{'\x52\x65\x66\x65\x72\x65\x72':'\x68\x74\x74'+_0x1db4da(0x12c)+_0x1db4da(0x176)+'\x77\x77\x2e'+_0x1db4da(0x107)+_0x1db4da(0x118)+_0x1db4da(0x217)+_0x1db4da(0x212),'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x1db4da(0x105)+_0x1db4da(0x1fe)+_0x1db4da(0x203)+'\x2e\x30\x20'+'\x28\x57\x69'+_0x1db4da(0x215)+_0x1db4da(0x155)+_0x1db4da(0x20a)+'\x31\x30\x2e'+_0x1db4da(0x210)+_0x1db4da(0xf4)+_0x1db4da(0x164)+_0x1db4da(0x1c6)+_0x1db4da(0x1fb)+_0x1db4da(0x153)+'\x31\x30\x39'+_0x1db4da(0x25f)+_0x1db4da(0x1bf)+_0x1db4da(0xe2)+_0x1db4da(0x253)+_0x1db4da(0x14e)+'\x31\x30\x31'+_0x1db4da(0x13e)+_0x1db4da(0xe4)+_0x1db4da(0x126)+_0x1db4da(0x1aa)+'\x2e\x30'},{'\x52\x65\x66\x65\x72\x65\x72':'\x68\x74\x74'+_0x1db4da(0x12c)+_0x1db4da(0x176)+_0x1db4da(0x23e)+_0x1db4da(0x107)+'\x6e\x62\x6f'+_0x1db4da(0x217)+_0x1db4da(0x212),'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x1db4da(0x105)+_0x1db4da(0x1fe)+'\x61\x2f\x35'+_0x1db4da(0x241)+'\x28\x57\x69'+'\x6e\x64\x6f'+'\x77\x73\x20'+_0x1db4da(0x20a)+'\x31\x30\x2e'+_0x1db4da(0x210)+_0x1db4da(0xf4)+_0x1db4da(0x164)+_0x1db4da(0x1c6)+'\x34\x29\x20'+'\x41\x70\x70'+'\x6c\x65\x57'+_0x1db4da(0x1bc)+_0x1db4da(0xef)+'\x35\x33\x37'+_0x1db4da(0x15e)+'\x20\x28\x4b'+_0x1db4da(0x17c)+_0x1db4da(0x1a9)+_0x1db4da(0x22e)+'\x65\x20\x47'+_0x1db4da(0xe6)+'\x6f\x29\x20'+_0x1db4da(0x1ad)+_0x1db4da(0x1f2)+_0x1db4da(0x237)+_0x1db4da(0x23a)+_0x1db4da(0x1e6)+_0x1db4da(0x133)+'\x61\x66\x61'+_0x1db4da(0x251)+_0x1db4da(0x1d6)+_0x1db4da(0x15e)},{'\x52\x65\x66\x65\x72\x65\x72':_0x1db4da(0x14b)+_0x1db4da(0x12c)+_0x1db4da(0x176)+_0x1db4da(0x23e)+_0x1db4da(0x107)+'\x6e\x62\x6f'+_0x1db4da(0x217)+_0x1db4da(0x212),'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x1db4da(0x105)+_0x1db4da(0x1fe)+_0x1db4da(0x203)+_0x1db4da(0x241)+_0x1db4da(0x205)+_0x1db4da(0x171)+'\x3b\x20\x41'+_0x1db4da(0x216)+_0x1db4da(0x181)+'\x20\x38\x2e'+'\x30\x2e\x30'+'\x3b\x20\x53'+_0x1db4da(0x1c5)+_0x1db4da(0x18e)+_0x1db4da(0x247)+'\x75\x69\x6c'+_0x1db4da(0x128)+'\x31\x36\x4e'+'\x57\x29\x20'+_0x1db4da(0x177)+_0x1db4da(0x25d)+'\x65\x62\x4b'+_0x1db4da(0xef)+'\x35\x33\x37'+'\x2e\x33\x36'+_0x1db4da(0x1d8)+'\x48\x54\x4d'+_0x1db4da(0x1a9)+_0x1db4da(0x22e)+_0x1db4da(0x22c)+'\x65\x63\x6b'+'\x6f\x29\x20'+_0x1db4da(0x1ad)+_0x1db4da(0x1f2)+_0x1db4da(0x13d)+_0x1db4da(0x1e6)+_0x1db4da(0x1eb)+_0x1db4da(0x169)+'\x34\x31\x20'+_0x1db4da(0x162)+_0x1db4da(0x1b8)+_0x1db4da(0x1f7)+_0x1db4da(0x258)+_0x1db4da(0x202)+_0x1db4da(0x17d)+_0x1db4da(0xfb)+_0x1db4da(0x23b)+'\x2f\x31\x31'+_0x1db4da(0x23a)+'\x2e\x30\x2e'+'\x30'},{'\x52\x65\x66\x65\x72\x65\x72':_0x1db4da(0x14b)+_0x1db4da(0x12c)+_0x1db4da(0x176)+_0x1db4da(0x23e)+'\x69\x6b\x61'+'\x6e\x62\x6f'+_0x1db4da(0x217)+_0x1db4da(0x212),'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':'\x4d\x6f\x7a'+_0x1db4da(0x1fe)+_0x1db4da(0x203)+_0x1db4da(0x241)+_0x1db4da(0x1dd)+'\x68\x6f\x6e'+'\x65\x3b\x20'+'\x43\x50\x55'+_0x1db4da(0x1b9)+_0x1db4da(0x197)+_0x1db4da(0x114)+_0x1db4da(0x1cf)+_0x1db4da(0x206)+_0x1db4da(0x179)+_0x1db4da(0x22e)+_0x1db4da(0x146)+'\x61\x63\x20'+'\x4f\x53\x20'+'\x58\x29\x20'+_0x1db4da(0x177)+_0x1db4da(0x25d)+_0x1db4da(0x1bc)+_0x1db4da(0xef)+_0x1db4da(0x1d2)+_0x1db4da(0x1dc)+'\x31\x35\x20'+_0x1db4da(0x1e9)+_0x1db4da(0x117)+_0x1db4da(0x193)+_0x1db4da(0x21d)+_0x1db4da(0x1bf)+_0x1db4da(0xe2)+'\x29\x20\x56'+_0x1db4da(0x16f)+'\x69\x6f\x6e'+_0x1db4da(0x151)+'\x2e\x30\x2e'+'\x33\x20\x4d'+_0x1db4da(0x167)+_0x1db4da(0x235)+_0x1db4da(0x192)+'\x31\x34\x38'+_0x1db4da(0x1f7)+'\x66\x61\x72'+_0x1db4da(0x15f)+_0x1db4da(0x218)+_0x1db4da(0x240)+_0x1db4da(0x1ba)+'\x31\x31\x35'+_0x1db4da(0x1e6)+'\x30\x2e\x30'}],'\x70\x67\x46\x61\x69\x6c':[],'\x62\x72\x5f\x72\x65\x71\x75\x65\x73\x74\x73':[],'\x62\x72\x5f\x63\x6f\x6e\x74\x65\x6e\x74\x73':[],'\x70\x6c\x61\x79\x65\x72':{},'\x66\x69\x6c\x74\x65\x72':{'\x6d\x6f\x76\x69\x65':[{'\x6b\x65\x79':0x1,'\x6e\x61\x6d\x65':'\u7c7b\u522b','\x76\x61\x6c\x75\x65':[{'\x6e':'\u70ed\u95e8','\x76':'\u70ed\u95e8'},{'\x6e':'\u6700\u65b0','\x76':'\u6700\u65b0'},{'\x6e':'\u7ecf\u5178','\x76':'\u7ecf\u5178'},{'\x6e':'\u534e\u8bed','\x76':'\u534e\u8bed'},{'\x6e':'\u6b27\u7f8e','\x76':'\u6b27\u7f8e'},{'\x6e':'\u97e9\u56fd','\x76':'\u97e9\u56fd'},{'\x6e':'\u65e5\u672c','\x76':'\u65e5\u672c'},{'\x6e':'\u52a8\u4f5c','\x76':'\u52a8\u4f5c'},{'\x6e':'\u559c\u5267','\x76':'\u559c\u5267'},{'\x6e':'\u7231\u60c5','\x76':'\u7231\u60c5'},{'\x6e':'\u79d1\u5e7b','\x76':'\u79d1\u5e7b'},{'\x6e':'\u60ac\u7591','\x76':'\u60ac\u7591'},{'\x6e':'\u6050\u6016','\x76':'\u6050\u6016'},{'\x6e':'\u6210\u957f','\x76':'\u6210\u957f'},{'\x6e':'\u8c46\u74e3\u9ad8'+'\u5206','\x76':_0x1db4da(0x229)+'\u5206'},{'\x6e':_0x1db4da(0x1f8)+_0x1db4da(0x24d)+'\x35\x30','\x76':'\u8c46\u74e3\x54'+_0x1db4da(0x24d)+'\x35\x30'},{'\x6e':'\u51b7\u95e8\u4f73'+'\u7247','\x76':'\u51b7\u95e8\u4f73'+'\u7247'}]}],'\x74\x76':[{'\x6b\x65\x79':0x1,'\x6e\x61\x6d\x65':'\u7c7b\u522b','\x76\x61\x6c\x75\x65':[{'\x6e':'\u70ed\u95e8','\x76':'\u70ed\u95e8'},{'\x6e':'\u7f8e\u5267','\x76':'\u7f8e\u5267'},{'\x6e':'\u82f1\u5267','\x76':'\u82f1\u5267'},{'\x6e':'\u97e9\u5267','\x76':'\u97e9\u5267'},{'\x6e':'\u65e5\u5267','\x76':'\u65e5\u5267'},{'\x6e':_0x1db4da(0x14a),'\x76':_0x1db4da(0x14a)},{'\x6e':'\u6e2f\u5267','\x76':'\u6e2f\u5267'},{'\x6e':'\u52a8\u753b','\x76':_0x1db4da(0x22d)+'\u753b'},{'\x6e':'\u7efc\u827a','\x76':'\u7efc\u827a'},{'\x6e':_0x1db4da(0x189),'\x76':_0x1db4da(0x189)}]}],'\x6b\x61\x6e\x6c\x69\x73\x74':[{'\x6b\x65\x79':0x1,'\x6e\x61\x6d\x65':'\u7c7b\u522b','\x76\x61\x6c\x75\x65':[{'\x6e':'\u5168\u90e8','\x76':'\u5168\u90e8'},{'\x6e':'\u5267\u60c5','\x76':'\u5267\u60c5'},{'\x6e':'\u60c5\u611f','\x76':'\u60c5\u611f'},{'\x6e':'\u6cbb\u6108','\x76':'\u6cbb\u6108'},{'\x6e':'\u7231\u60c5','\x76':'\u7231\u60c5'},{'\x6e':'\u9881\u5956','\x76':'\u9881\u5956'},{'\x6e':'\u559c\u5267','\x76':'\u559c\u5267'},{'\x6e':'\u83b7\u5956','\x76':'\u83b7\u5956'},{'\x6e':'\u79d1\u5e7b','\x76':'\u79d1\u5e7b'},{'\x6e':'\u6f2b\u5a01','\x76':'\u6f2b\u5a01'},{'\x6e':'\u751c\u871c','\x76':'\u751c\u871c'},{'\x6e':'\u60ac\u7591','\x76':'\u60ac\u7591'},{'\x6e':'\u52b1\u5fd7','\x76':'\u52b1\u5fd7'},{'\x6e':'\u70e7\u8111','\x76':'\u70e7\u8111'},{'\x6e':'\u53cb\u60c5','\x76':'\u53cb\u60c5'}]}]},'\x76\x69\x64\x65\x6f\x5f\x73\x6f\x75\x72\x63\x65\x73\x5f\x6e\x61\x6d\x65':{'\x62\x66\x7a\x79\x6d\x33\x75\x38':'\u66b4\u98ce','\x74\x6b\x6d\x33\x75\x38':'\u5929\u7a7a','\x6a\x73\x6d\x33\x75\x38':'\u6781\u901f','\x6c\x7a\x6d\x33\x75\x38':'\u91cf\u5b50','\x7a\x75\x69\x64\x61\x6d\x33\x75\x38':'\u6700\u5927','\x77\x6a\x6d\x33\x75\x38':'\u65e0\u5c3d','\x73\x64\x6d\x33\x75\x38':'\u95ea\u7535','\x67\x73\x6d\x33\x75\x38':'\u5149\u901f','\x66\x66\x6d\x33\x75\x38':'\u975e\u51e1','\x6b\x63\x6d\x33\x75\x38':'\u5feb\u8f66','\x77\x6f\x6c\x6f\x6e\x67':'\u5367\u9f99','\x6a\x69\x6e\x79\x69\x6e\x67\x6d\x33\x75\x38':'\u91d1\u9e70','\x78\x6c\x6d\x33\x75\x38':'\u65b0\u6d6a','\x6b\x75\x61\x69\x6b\x61\x6e':'\u5feb\u770b','\x66\x73\x6d\x33\x75\x38':'\u98de\u901f','\x79\x68\x6d\x33\x75\x38':'\u6a31\u82b1','\x74\x70\x6d\x33\x75\x38':'\u6dd8\u7247','\x6c\x65\x6d\x33\x75\x38':'\u9c7c\u4e50','\x64\x62\x6d\x33\x75\x38':'\u767e\u5ea6','\x62\x6a\x6d\x33\x75\x38':'\u516b\u6212','\x74\x6f\x6d\x6d\x33\x75\x38':'\u756a\u8304','\x75\x6b\x6d\x33\x75\x38':'\x55\u9177','\x69\x6b\x6d\x33\x75\x38':_0x1db4da(0x1d0)+'\x6e','\x68\x6e\x7a\x79\x6d\x33\x75\x38':_0x1db4da(0x249)+'\u7ebf','\x31\x30\x38\x30\x7a\x79\x6b':'\u4f18\u8d28','\x36\x38\x7a\x79\x5f\x6d\x33\x75\x38':'\x36\x38'},'\x63\x61\x63\x68\x65\x53\x75\x62\x44\x42':{},'\x63\x61\x63\x68\x65\x53\x65\x61\x72\x63\x68\x44\x42':{},'\x73\x5f\x74\x69\x6d\x65':'\x32\x30\x32'+_0x1db4da(0x19d)+'\x32\x33','\x73\x5f\x76\x65\x72\x73\x69\x6f\x6e':_0x1db4da(0x22a)+_0x1db4da(0x107)+'\x6e\x62\x6f'+'\x74\x35\x5f'+_0x1db4da(0x1c8)+'\x69\x6e\x2e'+'\x6a\x73','\x73\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x1db4da(0x137)+_0x1db4da(0x1ea)+_0x1db4da(0x1ff)+_0x1db4da(0x142)+_0x1db4da(0x20e)+_0x1db4da(0x12e)+_0x1db4da(0x230)+_0x1db4da(0xe9),'\x73\x5f\x74\x79\x70\x65':'\u70b9\u64ad','\x73\x5f\x63\x6f\x75\x6e\x74\x72\x79':'\u4e2d\u56fd','\x73\x5f\x61\x75\x74\x68\x6f\x72':_0x1db4da(0x255)+'\x65\x69','\x73\x5f\x64\x65\x73\x63':_0x1db4da(0x1e3)+'\u5668\u4eba\x79'+_0x1db4da(0x183),'\x73\x5f\x70\x65\x6e\x64\x69\x6e\x67':_0x1db4da(0x1ee),'\x73\x5f\x66\x75\x6c\x66\x69\x6c\x6c\x65\x64':'\ud83d\udfe2\x20'};function _0xefdcbf(_0x41cdae){const _0xacf80=_0x1db4da;_0x336310();try{!_0x268973[_0xacf80(0x1e0)+_0xacf80(0x1b7)+'\x65\x5f\x66'+_0xacf80(0x15c)]&&(console[_0xacf80(0x180)](_0xacf80(0x19c)+'\x5d'+('\u5904\u4e8e\u751f'+'\u4ea7\u73af\u5883'+_0xacf80(0x1f3)+_0xacf80(0x20f)+_0xacf80(0x262)+_0xacf80(0x17b)+_0xacf80(0x1f0)+_0xacf80(0x17f)+'\u3002')),console[_0xacf80(0x180)]=()=>{}),console[_0xacf80(0x180)](),console['\x6c\x6f\x67'](_0xacf80(0x252)+_0xacf80(0xfc)+'\u8c03\u8bd5\u65e5'+'\u5fd7\x5d'),console[_0xacf80(0x180)](_0xacf80(0x19c)+'\x5d'+(_0xacf80(0x242)+'\u59cb\u8c03\u8bd5'+_0xacf80(0x119)+'\uff01')),console['\x6c\x6f\x67'](_0xacf80(0x19c)+'\x5d'+('\x65\x78\x74'+'\x3a\x20')+_0x41cdae);}catch(_0x502433){console[_0xacf80(0x180)](_0x502433[_0xacf80(0x239)+_0xacf80(0xfd)+'\x6e\x67']()['\x72\x65\x70'+_0xacf80(0x136)+'\x65'](/(.*?Error): /,_0xacf80(0x232)+'\x5d\x3a\x20')+'\x2c\x20'+_0x502433[_0xacf80(0x1c7)+'\x63\x6b']);}}async function _0x2f8f12(_0x4d7d3b){const _0x1e8330=_0x1db4da;_0x336310();let _0x450ea2=[],_0x477fec={};_0x4d7d3b&&(_0x477fec[_0x1e8330(0x170)+'\x74\x65\x72'+'\x73']=_0x268973[_0x1e8330(0x170)+'\x74\x65\x72']);let _0x20c9b0={'\u699c\u5355':_0x1e8330(0x13f)+'\x6c\x62\x6f'+'\x61\x72\x64','\u7247\u5355':_0x1e8330(0x22f)+'\x6c\x69\x73'+'\x74','\u7535\u5f71':_0x1e8330(0x1b6)+'\x69\x65','\u5267\u96c6':'\x74\x76'};for(let _0x5a8a36 in _0x20c9b0){_0x450ea2[_0x1e8330(0x201)+'\x68']({'\x74\x79\x70\x65\x5f\x69\x64':_0x20c9b0[_0x5a8a36],'\x74\x79\x70\x65\x5f\x6e\x61\x6d\x65':_0x5a8a36});}return _0x477fec['\x63\x6c\x61'+'\x73\x73']=_0x450ea2,JSON['\x73\x74\x72'+_0x1e8330(0x16b)+'\x69\x66\x79'](_0x477fec);}function _0x2bd6db(){const _0x284062=_0x1db4da;_0x336310();let _0x21e4c2={},_0x5179de=[],_0x1ff323=http(_0x284062(0x14b)+_0x284062(0x12c)+_0x284062(0x176)+'\x77\x77\x2e'+_0x284062(0x107)+'\x6e\x62\x6f'+_0x284062(0x217)+_0x284062(0x212),{'\x68\x65\x61\x64\x65\x72\x73':_0x268973['\x62\x72\x6f'+_0x284062(0x24f)+_0x284062(0x19b)+'\x65\x72\x73'][_0x20b217(0x0,0x3)],'\x61\x73\x79\x6e\x63':![]})[_0x284062(0x20f)+_0x284062(0x101)+'\x74'],_0x265f4b=_0x3c151b[_0x284062(0x104)+'\x64'](_0x1ff323),_0x3346a6=_0x265f4b(_0x284062(0x225)+'\x77\x2e\x6c'+'\x69\x73\x74'+_0x284062(0x261)+'\x20\x61');return _0x3346a6[_0x284062(0x23f)+'\x68'](function(_0x47dd5f){const _0x99de6f=_0x284062;_0x5179de[_0x99de6f(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x265f4b(this)[_0x99de6f(0x1c1)+'\x72'](_0x99de6f(0x1d4)+'\x66')['\x72\x65\x70'+'\x6c\x61\x63'+'\x65'](_0x99de6f(0x11d)+_0x99de6f(0x200),'')+_0x99de6f(0x185)+_0x265f4b('\x70',this)['\x74\x65\x78'+'\x74'](),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x265f4b('\x70',this)[_0x99de6f(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0x265f4b(_0x99de6f(0xf5),this)[_0x99de6f(0x1c1)+'\x72'](_0x99de6f(0xe3)+_0x99de6f(0xf0)+'\x72\x63')),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});}),_0x21e4c2={'\x6c\x69\x73\x74':_0x5179de},JSON[_0x284062(0x1a4)+'\x69\x6e\x67'+_0x284062(0x1e5)](_0x21e4c2);}function _0x2b250a(_0x5d986a,_0x417257,_0x201cd1,_0x5d49d9){const _0x4439b3=_0x1db4da;_0x336310();let _0x3ffc1d={},_0x150fe8=[],_0x5932ab='',_0x5c8538='';_0x417257=parseInt(_0x417257);if(_0x5d986a[_0x4439b3(0x222)+_0x4439b3(0x1ac)+'\x66'](_0x4439b3(0x13f)+_0x4439b3(0x21a)+'\x61\x72\x64')!=-0x1){let _0x2b353f=_0x5d986a[_0x4439b3(0x1be)+'\x63\x68'](/(\d)$/m);if(_0x2b353f){let _0x492cad=_0x4439b3(0x14b)+_0x4439b3(0x12c)+_0x4439b3(0x176)+_0x4439b3(0x23e)+_0x4439b3(0x107)+'\x6e\x62\x6f'+'\x74\x2e\x63'+_0x4439b3(0x212)+_0x4439b3(0x13f)+_0x4439b3(0x21a)+_0x4439b3(0x1db)+_0x4439b3(0x1e8)+'\x6d\x6c';if(_0x5aaf2a(_0x417257,0x1))return;let _0x32596a=_0x4dba23(_0x492cad),_0x277a39=_0x3c151b[_0x4439b3(0x104)+'\x64'](_0x32596a),_0x4b3213=_0x277a39(_0x4439b3(0x225)+_0x4439b3(0x18a)+'\x20\x64\x69'+_0x4439b3(0x1ce)+_0x4439b3(0x246)+_0x4439b3(0x123)+_0x4439b3(0x16a)+_0x4439b3(0x1a5)+'\x2d\x6d\x64'+_0x4439b3(0xe0)+'\x65\x71\x28'+_0x2b353f[0x1]+('\x29\x20\x23'+_0x4439b3(0x100)+'\x65\x6f\x2d'+'\x6c\x69\x73'+_0x4439b3(0x132)+_0x4439b3(0x198)+'\x6d'));_0x4b3213[_0x4439b3(0x23f)+'\x68'](function(){const _0x1cf22e=_0x4439b3;_0x150fe8[_0x1cf22e(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x277a39(_0x1cf22e(0x266)+_0x1cf22e(0x187)+_0x1cf22e(0x186),this)[_0x1cf22e(0x1c1)+'\x72'](_0x1cf22e(0x1d4)+'\x66')[_0x1cf22e(0x12d)+'\x6c\x61\x63'+'\x65'](_0x1cf22e(0x11d)+'\x61\x79\x2f','')+_0x1cf22e(0x185)+_0x277a39(_0x1cf22e(0x266)+_0x1cf22e(0x187)+'\x6c\x20\x61',this)[_0x1cf22e(0x139)+'\x74']()[_0x1cf22e(0x12d)+'\x6c\x61\x63'+'\x65'](_0x277a39(_0x1cf22e(0x250)+'\x6c\x6c',this)[_0x1cf22e(0x139)+'\x74'](),''),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x277a39('\x2e\x64\x65'+_0x1cf22e(0x187)+'\x6c\x20\x61',this)['\x74\x65\x78'+'\x74']()[_0x1cf22e(0x12d)+_0x1cf22e(0x136)+'\x65'](_0x277a39(_0x1cf22e(0x250)+'\x6c\x6c',this)[_0x1cf22e(0x139)+'\x74'](),''),'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0x277a39(_0x1cf22e(0xf5),this)[_0x1cf22e(0x1c1)+'\x72'](_0x1cf22e(0xe3)+'\x61\x2d\x73'+'\x72\x63')),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});});}else{let _0x5d9365=0x0,_0x4a0b93=_0x4439b3(0x14b)+'\x70\x73\x3a'+'\x2f\x2f\x77'+'\x77\x77\x2e'+_0x4439b3(0x107)+'\x6e\x62\x6f'+_0x4439b3(0x217)+_0x4439b3(0x212)+_0x4439b3(0x13f)+_0x4439b3(0x21a)+_0x4439b3(0x1db)+_0x4439b3(0x1e8)+'\x6d\x6c';if(_0x5aaf2a(_0x417257,0x1))return;let _0xfbf91b=_0x4dba23(_0x4a0b93),_0x498723=_0x3c151b['\x6c\x6f\x61'+'\x64'](_0xfbf91b),_0x12ad90=_0x498723(_0x4439b3(0x225)+_0x4439b3(0x18a)+_0x4439b3(0x1a8)+_0x4439b3(0x1ce)+_0x4439b3(0x246)+_0x4439b3(0x123)+_0x4439b3(0x16a)+_0x4439b3(0x1a5)+_0x4439b3(0x256)+'\x2d\x34');_0x12ad90[_0x4439b3(0x23f)+'\x68'](function(){const _0x5b2ded=_0x4439b3;_0x150fe8[_0x5b2ded(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':'\x62\x69\x6c'+_0x5b2ded(0x21a)+'\x61\x72\x64'+_0x5d9365,'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x498723('\x68\x34',this)[_0x5b2ded(0x139)+'\x74']()[_0x5b2ded(0x12d)+_0x5b2ded(0x136)+'\x65'](_0x498723('\x73\x6d\x61'+'\x6c\x6c',this)[_0x5b2ded(0x139)+'\x74'](),''),'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0x498723(_0x5b2ded(0x149)+_0x5b2ded(0x144)+_0x5b2ded(0x173)+'\x73\x74\x20'+_0x5b2ded(0x166)+_0x5b2ded(0x1cb)+_0x5b2ded(0x24e)+_0x5b2ded(0xf8)+'\x67',this)[_0x5b2ded(0x1c1)+'\x72']('\x64\x61\x74'+_0x5b2ded(0xf0)+'\x72\x63')),'\x76\x6f\x64\x5f\x74\x61\x67':_0x5b2ded(0x1d1)+_0x5b2ded(0x1ae),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''}),_0x5d9365++;}),_0x150fe8[_0x4439b3(0x20d)]();}}else{if(_0x5d986a[_0x4439b3(0x222)+_0x4439b3(0x1ac)+'\x66'](_0x4439b3(0x22f)+'\x6c\x69\x73'+'\x74')!=-0x1){JSON[_0x4439b3(0x1a4)+_0x4439b3(0x16b)+_0x4439b3(0x1e5)](_0x5d49d9)!='\x7b\x7d'?_0x5932ab=_0x5d49d9['\x31']:_0x5932ab='\u5168\u90e8';_0x417257==0x1?_0x5c8538=_0x4439b3(0xe5)+'\x31':_0x5c8538='\x2d\x70\x2d'+_0x417257;let _0x3be820=_0x4439b3(0x14b)+_0x4439b3(0x12c)+_0x4439b3(0x176)+_0x4439b3(0x23e)+_0x4439b3(0x107)+'\x6e\x62\x6f'+_0x4439b3(0x217)+_0x4439b3(0x212)+_0x5d986a+'\x2f'+_0x5932ab+_0x5c8538+(_0x4439b3(0x1e8)+'\x6d\x6c');if(_0x5aaf2a(_0x417257,0x3e7,_0x3be820))return;let _0x4fb296=http(_0x3be820,{'\x68\x65\x61\x64\x65\x72\x73':_0x268973[_0x4439b3(0x143)+_0x4439b3(0x24f)+'\x65\x61\x64'+'\x65\x72\x73'][_0x20b217(0x0,0x3)],'\x61\x73\x79\x6e\x63':![]})[_0x4439b3(0x20f)+_0x4439b3(0x101)+'\x74'];_0x4fb296[_0x4439b3(0x1be)+'\x63\x68'](_0x4439b3(0x264)+'\u9875\u9762\u627e'+'\u4e0d\u5230')&&_0x268973['\x70\x67\x46'+_0x4439b3(0x1df)][_0x4439b3(0x201)+'\x68'](_0x3be820);let _0xa170a6=_0x3c151b[_0x4439b3(0x104)+'\x64'](_0x4fb296),_0x49205f=_0xa170a6(_0x4439b3(0x135)+_0x4439b3(0x21b)+_0x4439b3(0x15a)+_0x4439b3(0x163)+'\x6c\x74\x20'+_0x4439b3(0x199)+_0x4439b3(0x22b));_0x49205f[_0x4439b3(0x23f)+'\x68'](function(){const _0x14b3c1=_0x4439b3;_0x150fe8[_0x14b3c1(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0xa170a6(_0x14b3c1(0x226)+'\x61',this)[_0x14b3c1(0x1c1)+'\x72'](_0x14b3c1(0x1d4)+'\x66'),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0xa170a6(_0x14b3c1(0x226)+'\x61',this)[_0x14b3c1(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0xa170a6(_0x14b3c1(0xf5),this)[_0x14b3c1(0x1c1)+'\x72'](_0x14b3c1(0xe3)+'\x61\x2d\x73'+'\x72\x63')),'\x76\x6f\x64\x5f\x74\x61\x67':'\x66\x6f\x6c'+_0x14b3c1(0x1ae),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});});}else{if(_0x5d986a[_0x4439b3(0x222)+_0x4439b3(0x1ac)+'\x66'](_0x4439b3(0xdf)+_0x4439b3(0x10e)+'\x6c\x65')!=-0x1){let _0x407749=_0x4439b3(0x14b)+'\x70\x73\x3a'+_0x4439b3(0x176)+'\x77\x77\x2e'+_0x4439b3(0x107)+'\x6e\x62\x6f'+_0x4439b3(0x217)+'\x6f\x6d\x2f'+_0x5d986a;if(_0x5aaf2a(_0x417257,0x1))return;let _0x47236e=_0x4dba23(_0x407749),_0x182340=_0x3c151b['\x6c\x6f\x61'+'\x64'](_0x47236e),_0x5029e9=_0x182340(_0x4439b3(0x149)+_0x4439b3(0x144)+_0x4439b3(0x173)+'\x73\x74\x20'+_0x4439b3(0x10b)+'\x65\x6d');_0x5029e9[_0x4439b3(0x23f)+'\x68'](function(){const _0x2be4b1=_0x4439b3;_0x150fe8[_0x2be4b1(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x182340('\x61',this)[_0x2be4b1(0x1c1)+'\x72'](_0x2be4b1(0x1d4)+'\x66')[_0x2be4b1(0x12d)+_0x2be4b1(0x136)+'\x65'](_0x2be4b1(0x11d)+'\x61\x79\x2f','')+_0x2be4b1(0x185)+_0x182340(_0x2be4b1(0x1c4)+_0x2be4b1(0xf2)+'\x6c\x65',this)[_0x2be4b1(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x182340(_0x2be4b1(0x1c4)+'\x74\x69\x74'+'\x6c\x65',this)[_0x2be4b1(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0x182340(_0x2be4b1(0xf5),this)[_0x2be4b1(0x1c1)+'\x72'](_0x2be4b1(0xe3)+_0x2be4b1(0xf0)+'\x72\x63')),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});});}else{JSON[_0x4439b3(0x1a4)+_0x4439b3(0x16b)+'\x69\x66\x79'](_0x5d49d9)!='\x7b\x7d'?_0x5932ab=_0x5d49d9['\x31']:_0x5932ab='\u70ed\u95e8';_0x417257==0x1?_0x5c8538='':_0x5c8538=_0x4439b3(0xe5)+_0x417257;let _0x52f80c=_0x4439b3(0x14b)+_0x4439b3(0x12c)+_0x4439b3(0x176)+_0x4439b3(0x23e)+_0x4439b3(0x107)+_0x4439b3(0x118)+'\x74\x2e\x63'+_0x4439b3(0x212)+_0x4439b3(0x1ef)+_0x4439b3(0x127)+'\x64\x65\x78'+'\x2d'+_0x5d986a+'\x2d'+_0x5932ab+_0x5c8538+(_0x4439b3(0x1e8)+'\x6d\x6c');if(_0x5aaf2a(_0x417257,0x3e7,_0x52f80c))return;let _0x1fb1c4=http(_0x52f80c,{'\x68\x65\x61\x64\x65\x72\x73':_0x268973[_0x4439b3(0x143)+_0x4439b3(0x24f)+_0x4439b3(0x19b)+'\x65\x72\x73'][_0x20b217(0x0,0x3)],'\x61\x73\x79\x6e\x63':![]})['\x63\x6f\x6e'+_0x4439b3(0x101)+'\x74'];_0x1fb1c4[_0x4439b3(0x1be)+'\x63\x68']('\u8bbf\u95ee\u7684'+_0x4439b3(0x208)+'\u4e0d\u5230')&&_0x268973[_0x4439b3(0x21f)+'\x61\x69\x6c'][_0x4439b3(0x201)+'\x68'](_0x52f80c);let _0x55c801=_0x3c151b[_0x4439b3(0x104)+'\x64'](_0x1fb1c4),_0x15dc1a=_0x55c801('\x2e\x72\x6f'+'\x77\x2e\x6c'+'\x69\x73\x74'+_0x4439b3(0x261)+'\x20\x61');_0x15dc1a[_0x4439b3(0x23f)+'\x68'](function(){const _0x38bd6d=_0x4439b3;_0x150fe8[_0x38bd6d(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x55c801(this)[_0x38bd6d(0x1c1)+'\x72']('\x68\x72\x65'+'\x66')['\x72\x65\x70'+_0x38bd6d(0x136)+'\x65']('\x2f\x70\x6c'+'\x61\x79\x2f','')+_0x38bd6d(0x185)+_0x55c801('\x70',this)[_0x38bd6d(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x55c801('\x70',this)[_0x38bd6d(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0x55c801('\x69\x6d\x67',this)[_0x38bd6d(0x1c1)+'\x72']('\x64\x61\x74'+_0x38bd6d(0xf0)+'\x72\x63')),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});});}}}return _0x3ffc1d={'\x6c\x69\x73\x74':_0x150fe8,'\x70\x61\x67\x65':_0x417257,'\x70\x61\x67\x65\x63\x6f\x75\x6e\x74':0x3e7,'\x6c\x69\x6d\x69\x74':0x64,'\x74\x6f\x74\x61\x6c':0x3e7},JSON[_0x4439b3(0x1a4)+_0x4439b3(0x16b)+_0x4439b3(0x1e5)](_0x3ffc1d);}async function _0x32ae57(_0x5de65e,_0x2951b0,_0x3ecd29){const _0x5ea200=_0x1db4da;_0x336310(),console[_0x5ea200(0x180)](_0x5ea200(0x19c)+'\x5d'+_0x2951b0);try{let _0x2a7e9f=0x3e7;_0x3ecd29==undefined&&(_0x3ecd29='\x31');console[_0x5ea200(0x180)](_0x5ea200(0x19c)+'\x5d'+(_0x5ea200(0x1a6)+_0x5ea200(0x204)+'\x20')+_0x3ecd29);let _0x5ef023={},_0x21e992=[],_0x318fb9=[],_0x36d42c=_0x3287f6();_0x2951b0&&_0x3ecd29==0x1&&!_0x268973['\x63\x61\x63'+_0x5ea200(0x138)+_0x5ea200(0x24b)+_0x5ea200(0x213)+'\x42'][_0x5de65e]&&(_0x268973[_0x5ea200(0x102)+_0x5ea200(0x138)+'\x65\x61\x72'+_0x5ea200(0x213)+'\x42'][_0x5de65e]={'\x72\x65\x73\x75\x6c\x74':null,'\x6c\x61\x73\x74\x53\x65\x61\x72\x63\x68\x54\x69\x6d\x65':0x0});_0x2951b0&&_0x3ecd29==0x1&&_0x36d42c-_0x268973[_0x5ea200(0x102)+_0x5ea200(0x138)+_0x5ea200(0x24b)+'\x63\x68\x44'+'\x42'][_0x5de65e][_0x5ea200(0x131)+_0x5ea200(0x158)+'\x61\x72\x63'+_0x5ea200(0xe8)+'\x6d\x65']>=0x18&&(_0x268973[_0x5ea200(0x102)+_0x5ea200(0x138)+'\x65\x61\x72'+_0x5ea200(0x213)+'\x42'][_0x5de65e]={'\x72\x65\x73\x75\x6c\x74':null,'\x6c\x61\x73\x74\x53\x65\x61\x72\x63\x68\x54\x69\x6d\x65':0x0},console[_0x5ea200(0x180)](_0x5ea200(0x19c)+'\x5d'+('\u5feb\u641c\u7f13'+'\u5b58\u91cd\u7f6e'+'\u3002')));if(_0x2951b0&&_0x3ecd29==0x1&&_0x268973[_0x5ea200(0x102)+_0x5ea200(0x138)+_0x5ea200(0x24b)+_0x5ea200(0x213)+'\x42']&&_0x268973[_0x5ea200(0x102)+_0x5ea200(0x138)+_0x5ea200(0x24b)+_0x5ea200(0x213)+'\x42'][_0x5de65e][_0x5ea200(0xf9)+_0x5ea200(0x145)])return console[_0x5ea200(0x180)]('\x5b\u63d0\u793a'+'\x5d'+(_0x5ea200(0x115)+_0x5ea200(0x106)+'\u3002')),JSON['\x73\x74\x72'+'\x69\x6e\x67'+_0x5ea200(0x1e5)](_0x268973['\x63\x61\x63'+_0x5ea200(0x138)+_0x5ea200(0x24b)+_0x5ea200(0x213)+'\x42'][_0x5de65e][_0x5ea200(0xf9)+'\x75\x6c\x74']);let _0x96c672=http(_0x5ea200(0x14b)+_0x5ea200(0x12c)+_0x5ea200(0x176)+_0x5ea200(0x23e)+'\x69\x6b\x61'+_0x5ea200(0x118)+'\x74\x2e\x63'+_0x5ea200(0x212)+_0x5ea200(0x23c)+_0x5ea200(0x14c)+_0x5ea200(0x16e)+_0x5de65e+_0x5ea200(0x13c)+_0x3ecd29,{'\x68\x65\x61\x64\x65\x72\x73':_0x268973[_0x5ea200(0x143)+_0x5ea200(0x24f)+_0x5ea200(0x19b)+_0x5ea200(0x16f)][_0x20b217(0x0,0x3)],'\x61\x73\x79\x6e\x63':![]})[_0x5ea200(0x20f)+'\x74\x65\x6e'+'\x74'];_0x96c672['\x6d\x61\x74'+'\x63\x68'](/没有数据/m)&&(_0x2a7e9f=_0x3ecd29-0x1);let _0xfd71c7=_0x3c151b[_0x5ea200(0x104)+'\x64'](_0x96c672),_0x118e02=_0xfd71c7(_0x5ea200(0x199)+'\x64\x69\x61');_0x118e02[_0x5ea200(0x23f)+'\x68'](function(_0x561a50){const _0x59b53d=_0x5ea200;let _0x517f21=_0xfd71c7('\x68\x35\x20'+'\x3e\x20\x61',this)['\x61\x74\x74'+'\x72'](_0x59b53d(0x1d4)+'\x66')[_0x59b53d(0x12d)+'\x6c\x61\x63'+'\x65']('\x2f\x70\x6c'+_0x59b53d(0x200),''),_0x9a35d5=_0xfd71c7('\x68\x35\x20'+_0x59b53d(0x165)+'\x6c\x61\x62'+'\x65\x6c',this)['\x74\x65\x78'+'\x74']()[_0x59b53d(0x12d)+_0x59b53d(0x136)+'\x65'](_0x59b53d(0x1a2),'');_0x318fb9[_0x59b53d(0x201)+'\x68']('\x68\x74\x74'+_0x59b53d(0x12c)+'\x2f\x2f\x77'+_0x59b53d(0x23e)+_0x59b53d(0x107)+'\x6e\x62\x6f'+'\x74\x2e\x63'+_0x59b53d(0x212)+_0x59b53d(0xf6)+'\x2f\x67\x65'+'\x74\x52\x65'+_0x59b53d(0x1b5)+_0x59b53d(0x100)+_0x59b53d(0x12b)+'\x64\x3d'+_0x517f21+(_0x59b53d(0x103)+'\x79\x70\x65'+'\x3d\x31'));let _0x108f2b=_0xfd71c7(_0x59b53d(0x227)+_0x59b53d(0x233)+_0x59b53d(0x1cb)+_0x59b53d(0x24e),this)[_0x59b53d(0x139)+'\x74']();_0x108f2b=''+_0x108f2b['\x72\x65\x70'+_0x59b53d(0x136)+'\x65'](_0x108f2b['\x73\x70\x6c'+'\x69\x74']('\x20')[0x0]+'\x20',''),_0x21e992[_0x59b53d(0x201)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x517f21+_0x59b53d(0x185)+_0xfd71c7(_0x59b53d(0x199)+'\x64\x69\x61'+_0x59b53d(0xfe)+_0x59b53d(0x1ab)+'\x6d\x67',this)[_0x59b53d(0x1c1)+'\x72'](_0x59b53d(0x147)),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x2951b0?_0xfd71c7(_0x59b53d(0x199)+_0x59b53d(0x22b)+'\x2d\x74\x6f'+_0x59b53d(0x1ab)+'\x6d\x67',this)[_0x59b53d(0x1c1)+'\x72'](_0x59b53d(0x147)):_0x55d3a7(_0xfd71c7(_0x59b53d(0x226)+_0x59b53d(0x19a),this)[_0x59b53d(0x139)+'\x74']())+_0x108f2b,'\x76\x6f\x64\x5f\x70\x69\x63':_0x2951b0?'':_0x577b0a(_0xfd71c7(_0x59b53d(0x199)+'\x64\x69\x61'+'\x2d\x74\x6f'+'\x70\x20\x69'+'\x6d\x67',this)[_0x59b53d(0x1c1)+'\x72'](_0x59b53d(0xe3)+_0x59b53d(0xf0)+'\x72\x63')),'\x76\x6f\x64\x5f\x63\x6f\x6e\x74\x65\x6e\x74':_0x59b53d(0x259)+_0x59b53d(0x207)+'\uff1f','\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x2951b0?_0xfd71c7(_0x59b53d(0x226)+_0x59b53d(0x19a),this)[_0x59b53d(0x139)+'\x74']()[_0x59b53d(0x12d)+_0x59b53d(0x136)+'\x65'](_0xfd71c7(_0x59b53d(0x199)+'\x64\x69\x61'+'\x2d\x74\x6f'+_0x59b53d(0x1ab)+'\x6d\x67',this)[_0x59b53d(0x1c1)+'\x72'](_0x59b53d(0x147)),'')+'\x20'+_0x9a35d5:_0x9a35d5});});if(_0x3ecd29==0x1&&!_0x2951b0){console[_0x5ea200(0x180)](_0x5ea200(0x19c)+'\x5d'+(_0x5ea200(0x154)+'\u7d22\u7b2c\u4e00'+_0x5ea200(0x1d9)+'\u6700\u65b0\u96c6'+'\u6570')),_0x268973[_0x5ea200(0x1c9)+'\x63\x6f\x6e'+'\x74\x65\x6e'+'\x74\x73']=[],_0x268973[_0x5ea200(0x1c9)+_0x5ea200(0x1a7)+'\x75\x65\x73'+'\x74\x73']=[];for(let _0x32ef5b=0x0;_0x32ef5b<_0x318fb9[_0x5ea200(0x221)+'\x67\x74\x68'];_0x32ef5b++){_0x268973[_0x5ea200(0x1c9)+'\x72\x65\x71'+_0x5ea200(0x160)+'\x74\x73'][_0x5ea200(0x201)+'\x68']({'\x75\x72\x6c':_0x318fb9[_0x32ef5b],'\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':{'\x52\x65\x66\x65\x72\x65\x72':_0x5ea200(0x14b)+_0x5ea200(0x12c)+'\x2f\x2f\x77'+_0x5ea200(0x23e)+_0x5ea200(0x107)+'\x6e\x62\x6f'+'\x74\x2e\x63'+_0x5ea200(0x212)+'\x70\x6c\x61'+'\x79\x2f'+_0x318fb9[_0x32ef5b][_0x5ea200(0x1be)+'\x63\x68'](/videoId=(.*?)&/m)[0x1],'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x268973[_0x5ea200(0x143)+_0x5ea200(0x24f)+_0x5ea200(0x19b)+_0x5ea200(0x16f)][_0x20b217(0x0,0x3)][_0x5ea200(0x11f)+_0x5ea200(0x191)+'\x67\x65\x6e'+'\x74']}}});}await _0x591b50(_0x268973[_0x5ea200(0x1c9)+_0x5ea200(0x1a7)+_0x5ea200(0x160)+'\x74\x73'],_0x268973[_0x5ea200(0x1c9)+_0x5ea200(0x20f)+_0x5ea200(0x101)+'\x74\x73']);for(let _0x54ea6b=0x0;_0x54ea6b<_0x268973[_0x5ea200(0x1c9)+_0x5ea200(0x20f)+_0x5ea200(0x101)+'\x74\x73'][_0x5ea200(0x221)+_0x5ea200(0xee)];_0x54ea6b++){_0x21e992[_0x54ea6b][_0x5ea200(0x1ca)+_0x5ea200(0x1c0)+_0x5ea200(0x238)+'\x6b\x73']=_0x32fc4d(_0x268973['\x62\x72\x5f'+_0x5ea200(0x20f)+_0x5ea200(0x101)+'\x74\x73'][_0x54ea6b][_0x5ea200(0x20f)+_0x5ea200(0x101)+'\x74'])[_0x5ea200(0x12d)+_0x5ea200(0x136)+'\x65']('\uff1a','\u81f3')[_0x5ea200(0x12d)+_0x5ea200(0x136)+'\x65']('\u7b2c','')+'\x0a'+_0x21e992[_0x54ea6b][_0x5ea200(0x1ca)+_0x5ea200(0x1c0)+_0x5ea200(0x238)+'\x6b\x73'];}}else console[_0x5ea200(0x180)]('\x5b\u63d0\u793a'+'\x5d'+(_0x5ea200(0x13a)+_0x5ea200(0x1e2)+_0x5ea200(0x231)));return _0x5ef023={'\x6c\x69\x73\x74':_0x21e992,'\x70\x61\x67\x65\x63\x6f\x75\x6e\x74':_0x2a7e9f},_0x2951b0&&_0x3ecd29==0x1&&(_0x268973[_0x5ea200(0x102)+'\x68\x65\x53'+'\x65\x61\x72'+_0x5ea200(0x213)+'\x42'][_0x5de65e][_0x5ea200(0xf9)+_0x5ea200(0x145)]=_0x5ef023,_0x268973[_0x5ea200(0x102)+_0x5ea200(0x138)+'\x65\x61\x72'+_0x5ea200(0x213)+'\x42'][_0x5de65e][_0x5ea200(0x131)+_0x5ea200(0x158)+_0x5ea200(0x21b)+_0x5ea200(0xe8)+'\x6d\x65']=_0x36d42c,console[_0x5ea200(0x180)]('\x5b\u63d0\u793a'+'\x5d'+('\u5efa\u7acb\u5feb'+'\u641c\u7f13\u5b58'+'\u3002'))),JSON['\x73\x74\x72'+_0x5ea200(0x16b)+_0x5ea200(0x1e5)](_0x5ef023);}catch(_0x1c0439){console[_0x5ea200(0x180)](_0x1c0439[_0x5ea200(0x239)+'\x74\x72\x69'+'\x6e\x67']()[_0x5ea200(0x12d)+'\x6c\x61\x63'+'\x65'](/(.*?Error): /,_0x5ea200(0x232)+_0x5ea200(0x263))+'\x2c\x20'+_0x1c0439[_0x5ea200(0x1c7)+'\x63\x6b']);}}async function _0xf00623(_0x441661){const _0x2210db=_0x1db4da;try{let _0x28bade={},_0x56b82e=[],_0x21ef26=[],_0x5188b6='',_0x1a3e5a=_0x441661[_0x2210db(0x148)+'\x69\x74'](_0x2210db(0x185));_0x441661=_0x1a3e5a[0x0];_0x268973['\x63\x61\x63'+_0x2210db(0x138)+'\x75\x62\x44'+'\x42'][_0x2210db(0x14b)+'\x70\x73\x3a'+_0x2210db(0x176)+_0x2210db(0x23e)+_0x2210db(0x107)+_0x2210db(0x118)+_0x2210db(0x217)+_0x2210db(0x212)+_0x2210db(0x1ec)+'\x79\x2f'+_0x441661]&&_0x268973[_0x2210db(0x102)+_0x2210db(0x138)+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+'\x70\x73\x3a'+'\x2f\x2f\x77'+_0x2210db(0x23e)+_0x2210db(0x196)+'\x62\x61\x6e'+_0x2210db(0x1d5)+_0x2210db(0x13b)+_0x2210db(0x24b)+_0x2210db(0xd7)+'\x71\x3d'+_0x1a3e5a[0x1]]?(console[_0x2210db(0x180)](_0x2210db(0x19c)+'\x5d'+(_0x2210db(0x14d)+'\u5b58')),_0x268973[_0x2210db(0x1c9)+_0x2210db(0x1a7)+_0x2210db(0x160)+'\x74\x73']=[undefined,{'\x75\x72\x6c':_0x2210db(0x14b)+_0x2210db(0x12c)+_0x2210db(0x176)+_0x2210db(0x23e)+'\x69\x6b\x61'+_0x2210db(0x118)+_0x2210db(0x217)+_0x2210db(0x212)+'\x61\x70\x69'+_0x2210db(0x24c)+'\x74\x52\x65'+'\x73\x4e\x3f'+'\x76\x69\x64'+_0x2210db(0x12b)+'\x64\x3d'+_0x441661+('\x26\x6d\x74'+_0x2210db(0x18f)+'\x3d\x31'),'\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':{'\x52\x65\x66\x65\x72\x65\x72':'\x68\x74\x74'+_0x2210db(0x12c)+_0x2210db(0x176)+'\x77\x77\x2e'+'\x69\x6b\x61'+_0x2210db(0x118)+_0x2210db(0x217)+_0x2210db(0x212)+'\x70\x6c\x61'+'\x79\x2f'+_0x441661,'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x268973['\x62\x72\x6f'+'\x77\x5f\x68'+_0x2210db(0x19b)+_0x2210db(0x16f)][_0x20b217(0x0,0x3)][_0x2210db(0x11f)+_0x2210db(0x191)+_0x2210db(0xea)+'\x74']}}},undefined,{'\x75\x72\x6c':'\x68\x74\x74'+'\x70\x73\x3a'+_0x2210db(0xdd)+_0x2210db(0x214)+_0x2210db(0x1f4)+_0x2210db(0x23d)+_0x2210db(0x157)+'\x6e','\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':{'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x268973[_0x2210db(0x143)+'\x77\x5f\x68'+_0x2210db(0x19b)+'\x65\x72\x73'][_0x20b217(0x0,0x3)][_0x2210db(0x11f)+'\x72\x2d\x41'+_0x2210db(0xea)+'\x74']}}}]):(console[_0x2210db(0x180)](_0x2210db(0x19c)+'\x5d'+(_0x2210db(0x130)+_0x2210db(0x14f)+'\u7f13\u5b58')),_0x268973[_0x2210db(0x1c9)+_0x2210db(0x1a7)+_0x2210db(0x160)+'\x74\x73']=[{'\x75\x72\x6c':_0x2210db(0x14b)+_0x2210db(0x12c)+_0x2210db(0x176)+_0x2210db(0x23e)+_0x2210db(0x107)+_0x2210db(0x118)+'\x74\x2e\x63'+'\x6f\x6d\x2f'+_0x2210db(0x1ec)+'\x79\x2f'+_0x441661,'\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':_0x268973[_0x2210db(0x143)+_0x2210db(0x24f)+_0x2210db(0x19b)+'\x65\x72\x73'][_0x20b217(0x0,0x3)]}},{'\x75\x72\x6c':'\x68\x74\x74'+_0x2210db(0x12c)+_0x2210db(0x176)+_0x2210db(0x23e)+_0x2210db(0x107)+_0x2210db(0x118)+_0x2210db(0x217)+_0x2210db(0x212)+_0x2210db(0xf6)+_0x2210db(0x24c)+_0x2210db(0x16c)+'\x73\x4e\x3f'+_0x2210db(0x100)+'\x65\x6f\x49'+'\x64\x3d'+_0x441661+(_0x2210db(0x103)+_0x2210db(0x18f)+'\x3d\x31'),'\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':{'\x52\x65\x66\x65\x72\x65\x72':'\x68\x74\x74'+_0x2210db(0x12c)+_0x2210db(0x176)+'\x77\x77\x2e'+_0x2210db(0x107)+_0x2210db(0x118)+'\x74\x2e\x63'+'\x6f\x6d\x2f'+_0x2210db(0x1ec)+'\x79\x2f'+_0x441661,'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x268973['\x62\x72\x6f'+_0x2210db(0x24f)+_0x2210db(0x19b)+'\x65\x72\x73'][_0x20b217(0x0,0x3)][_0x2210db(0x11f)+_0x2210db(0x191)+_0x2210db(0xea)+'\x74']}}},{'\x75\x72\x6c':'\x68\x74\x74'+_0x2210db(0x12c)+_0x2210db(0x176)+'\x77\x77\x2e'+'\x64\x6f\x75'+_0x2210db(0x12f)+_0x2210db(0x1d5)+_0x2210db(0x13b)+_0x2210db(0x24b)+'\x63\x68\x3f'+'\x71\x3d'+_0x1a3e5a[0x1],'\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':_0x268973[_0x2210db(0x143)+_0x2210db(0x24f)+_0x2210db(0x19b)+'\x65\x72\x73'][_0x20b217(0x0,0x3)]}},{'\x75\x72\x6c':_0x2210db(0x14b)+_0x2210db(0x12c)+_0x2210db(0xdd)+_0x2210db(0x214)+'\x69\x74\x6f'+_0x2210db(0x23d)+_0x2210db(0x157)+'\x6e','\x6f\x70\x74\x69\x6f\x6e\x73':{'\x68\x65\x61\x64\x65\x72\x73':{'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x268973[_0x2210db(0x143)+_0x2210db(0x24f)+_0x2210db(0x19b)+_0x2210db(0x16f)][_0x20b217(0x0,0x3)][_0x2210db(0x11f)+'\x72\x2d\x41'+'\x67\x65\x6e'+'\x74']}}}]);_0x268973['\x62\x72\x5f'+_0x2210db(0x20f)+'\x74\x65\x6e'+'\x74\x73']=[],await _0x591b50(_0x268973['\x62\x72\x5f'+'\x72\x65\x71'+'\x75\x65\x73'+'\x74\x73'],_0x268973['\x62\x72\x5f'+_0x2210db(0x20f)+_0x2210db(0x101)+'\x74\x73']);let _0xff7573=_0x268973['\x63\x61\x63'+_0x2210db(0x138)+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+_0x2210db(0x12c)+_0x2210db(0x176)+_0x2210db(0x23e)+'\x69\x6b\x61'+_0x2210db(0x118)+'\x74\x2e\x63'+'\x6f\x6d\x2f'+_0x2210db(0x1ec)+'\x79\x2f'+_0x441661]?_0x268973[_0x2210db(0x102)+_0x2210db(0x138)+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+_0x2210db(0x12c)+'\x2f\x2f\x77'+_0x2210db(0x23e)+'\x69\x6b\x61'+_0x2210db(0x118)+'\x74\x2e\x63'+'\x6f\x6d\x2f'+'\x70\x6c\x61'+'\x79\x2f'+_0x441661]:_0x268973[_0x2210db(0x1c9)+_0x2210db(0x20f)+_0x2210db(0x101)+'\x74\x73'][0x0][_0x2210db(0x20f)+'\x74\x65\x6e'+'\x74'];_0x268973[_0x2210db(0x102)+_0x2210db(0x138)+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+'\x70\x73\x3a'+_0x2210db(0x176)+_0x2210db(0x23e)+'\x69\x6b\x61'+_0x2210db(0x118)+_0x2210db(0x217)+_0x2210db(0x212)+'\x70\x6c\x61'+'\x79\x2f'+_0x441661]=_0xff7573;let _0x57fcfd=_0x3c151b[_0x2210db(0x104)+'\x64'](_0xff7573),_0x51c7fd=0x1;_0x57fcfd(_0x2210db(0x266)+_0x2210db(0x187)+_0x2210db(0x24a)+'\x6d\x65\x74'+'\x61')[_0x2210db(0x221)+_0x2210db(0xee)]>0x4&&(_0x51c7fd+=0x1);let _0x555e7a={'\x76\x6f\x64\x5f\x69\x64':_0x441661,'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x1a3e5a[0x1],'\x76\x6f\x64\x5f\x70\x69\x63':_0x577b0a(_0x57fcfd('\x2e\x72\x65'+'\x73\x75\x6c'+_0x2210db(0x223)+_0x2210db(0x1f1)+_0x2210db(0xf8)+'\x67')[_0x2210db(0x1c1)+'\x72'](_0x2210db(0xe3)+_0x2210db(0xf0)+'\x72\x63')),'\x74\x79\x70\x65\x5f\x6e\x61\x6d\x65':'','\x76\x6f\x64\x5f\x79\x65\x61\x72':_0x57fcfd('\x2e\x6d\x65'+'\x74\x61\x2e'+_0x2210db(0x190)+'\x72')[_0x2210db(0x139)+'\x74']()||_0x57fcfd('\x2e\x6d\x65'+_0x2210db(0xff)+_0x2210db(0x236)+_0x51c7fd+'\x29')['\x74\x65\x78'+'\x74'](),'\x76\x6f\x64\x5f\x61\x72\x65\x61':_0x57fcfd(_0x2210db(0x199)+_0x2210db(0x12a)+_0x2210db(0x141)+_0x2210db(0x10d)+'\x79')[_0x2210db(0x139)+'\x74']()||_0x57fcfd('\x2e\x6d\x65'+_0x2210db(0xff)+_0x2210db(0x236)+(_0x51c7fd+0x1)+'\x29')[_0x2210db(0x139)+'\x74'](),'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x268973['\x73\x5f\x72'+_0x2210db(0x1b4)+'\x72\x6b\x73'],'\x76\x6f\x64\x5f\x61\x63\x74\x6f\x72':_0x57fcfd('\x2e\x6d\x65'+_0x2210db(0x12a)+_0x2210db(0x25c)+_0x2210db(0x1b2)+'\x69\x74\x79')['\x74\x65\x78'+'\x74']()?_0x57fcfd(_0x2210db(0x199)+_0x2210db(0x12a)+_0x2210db(0x25c)+_0x2210db(0x1b2)+_0x2210db(0x21c))['\x74\x65\x78'+'\x74']()[_0x2210db(0x148)+'\x69\x74']('\x2f')[0x1]:_0x57fcfd('\x2e\x6d\x65'+_0x2210db(0xff)+_0x2210db(0x236)+(_0x51c7fd+0x2)+'\x29')['\x74\x65\x78'+'\x74']()['\x73\x70\x6c'+'\x69\x74']('\x2f')[0x1],'\x76\x6f\x64\x5f\x64\x69\x72\x65\x63\x74\x6f\x72':_0x57fcfd(_0x2210db(0x199)+'\x74\x61\x2e'+'\x63\x65\x6c'+_0x2210db(0x1b2)+'\x69\x74\x79')[_0x2210db(0x139)+'\x74']()?_0x57fcfd(_0x2210db(0x199)+_0x2210db(0x12a)+_0x2210db(0x25c)+_0x2210db(0x1b2)+_0x2210db(0x21c))['\x74\x65\x78'+'\x74']()[_0x2210db(0x148)+'\x69\x74']('\x2f')[0x0]:_0x57fcfd(_0x2210db(0x199)+'\x74\x61\x3a'+'\x65\x71\x28'+(_0x51c7fd+0x2)+'\x29')['\x74\x65\x78'+'\x74']()[_0x2210db(0x148)+'\x69\x74']('\x2f')[0x0],'\x76\x6f\x64\x5f\x63\x6f\x6e\x74\x65\x6e\x74':'','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x66\x72\x6f\x6d':'','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x75\x72\x6c':''};_0xff7573=JSON[_0x2210db(0xf7)+'\x73\x65'](_0x268973['\x62\x72\x5f'+_0x2210db(0x20f)+_0x2210db(0x101)+'\x74\x73'][0x1][_0x2210db(0x20f)+_0x2210db(0x101)+'\x74']);let _0xa84506=[];_0x268973[_0x2210db(0x1e0)+_0x2210db(0x1b7)+'\x65\x5f\x66'+_0x2210db(0x15c)]&&(_0xa84506=['\u66b4\u98ce','\u4f18\u8d28','\u5feb\u770b','\u91cf\u5b50','\u975e\u51e1']);for(let _0x570727=0x0;_0x570727<_0xff7573[_0x2210db(0xe3)+'\x61'][_0x2210db(0x174)+'\x74']['\x6c\x65\x6e'+'\x67\x74\x68'];_0x570727++){let _0x116ffe=JSON['\x70\x61\x72'+'\x73\x65'](_0xff7573['\x64\x61\x74'+'\x61'][_0x2210db(0x174)+'\x74'][_0x570727]['\x72\x65\x73'+_0x2210db(0x134)+'\x61'])[0x0];_0x116ffe[_0x2210db(0x245)]=_0x116ffe['\x75\x72\x6c'][_0x2210db(0x12d)+'\x6c\x61\x63'+'\x65'](/##/g,'\x23'),_0x116ffe[_0x2210db(0x245)]=_0x116ffe[_0x2210db(0x245)][_0x2210db(0x12d)+_0x2210db(0x136)+'\x65'](/#$/g,'');let _0x15b31a=_0x116ffe[_0x2210db(0x245)][_0x2210db(0x148)+'\x69\x74']('\x23')[_0x2210db(0x221)+_0x2210db(0xee)];_0xa84506[_0x2210db(0x222)+_0x2210db(0x1ac)+'\x66'](_0x268973[_0x2210db(0x100)+_0x2210db(0x112)+_0x2210db(0x182)+_0x2210db(0x244)+_0x2210db(0x1f9)+_0x2210db(0x11e)][_0x116ffe[_0x2210db(0x184)+'\x67']])!=-0x1?(_0x56b82e[_0x2210db(0xe7)+_0x2210db(0x10c)+'\x74'](_0x268973[_0x2210db(0x100)+_0x2210db(0x112)+_0x2210db(0x182)+_0x2210db(0x244)+_0x2210db(0x1f9)+_0x2210db(0x11e)][_0x116ffe[_0x2210db(0x184)+'\x67']]+'\x20\x5b'+_0x15b31a+'\x5d'),_0x21ef26[_0x2210db(0xe7)+_0x2210db(0x10c)+'\x74'](_0x116ffe[_0x2210db(0x245)])):(_0x56b82e[_0x2210db(0x201)+'\x68'](_0x268973['\x76\x69\x64'+'\x65\x6f\x5f'+_0x2210db(0x182)+_0x2210db(0x244)+_0x2210db(0x1f9)+_0x2210db(0x11e)][_0x116ffe['\x66\x6c\x61'+'\x67']]+'\x20\x5b'+_0x15b31a+'\x5d'),_0x21ef26[_0x2210db(0x201)+'\x68'](_0x116ffe[_0x2210db(0x245)]));}let _0x4617c6=_0x21ef26[_0x2210db(0x124)+'\x6e'](_0x2210db(0x185)),_0xc2d4d1=_0x56b82e[_0x2210db(0x124)+'\x6e']('\x24\x24\x24');_0x555e7a[_0x2210db(0x1ca)+_0x2210db(0x1c3)+_0x2210db(0x219)+'\x66\x72\x6f'+'\x6d']=_0xc2d4d1,_0x555e7a[_0x2210db(0x1ca)+_0x2210db(0x1c3)+'\x61\x79\x5f'+_0x2210db(0x245)]=_0x4617c6;let _0x310ca2=_0x32fc4d(_0x4617c6);_0x555e7a[_0x2210db(0x1ca)+_0x2210db(0x1c0)+_0x2210db(0x238)+'\x6b\x73']=_0x268973[_0x2210db(0xdb)+'\x75\x6c\x66'+_0x2210db(0x1fe)+'\x65\x64']+'\x5b'+_0x310ca2+'\x5d\x20'+_0x555e7a[_0x2210db(0x1ca)+'\x5f\x72\x65'+_0x2210db(0x238)+'\x6b\x73'];_0x310ca2=='\u6b63\u7247'?(_0x555e7a[_0x2210db(0x1cd)+_0x2210db(0x110)+'\x61\x6d\x65']='\u7535\u5f71',_0x555e7a[_0x2210db(0x1ca)+_0x2210db(0x1c3)+_0x2210db(0x219)+'\x66\x72\x6f'+'\x6d']=_0x555e7a[_0x2210db(0x1ca)+_0x2210db(0x1c3)+'\x61\x79\x5f'+_0x2210db(0x248)+'\x6d'][_0x2210db(0x12d)+_0x2210db(0x136)+'\x65'](/ \[1\]/g,'')):_0x555e7a[_0x2210db(0x1cd)+_0x2210db(0x110)+_0x2210db(0x11e)]='\u7535\u89c6\u5267';let _0x3b21b1=_0x268973[_0x2210db(0x102)+'\x68\x65\x53'+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+'\x70\x73\x3a'+_0x2210db(0x176)+_0x2210db(0x23e)+'\x64\x6f\x75'+_0x2210db(0x12f)+_0x2210db(0x1d5)+_0x2210db(0x13b)+_0x2210db(0x24b)+'\x63\x68\x3f'+'\x71\x3d'+_0x1a3e5a[0x1]]?_0x268973[_0x2210db(0x102)+_0x2210db(0x138)+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+_0x2210db(0x12c)+_0x2210db(0x176)+_0x2210db(0x23e)+'\x64\x6f\x75'+_0x2210db(0x12f)+_0x2210db(0x1d5)+'\x6d\x2f\x73'+_0x2210db(0x24b)+'\x63\x68\x3f'+'\x71\x3d'+_0x1a3e5a[0x1]]:_0x268973['\x62\x72\x5f'+_0x2210db(0x20f)+_0x2210db(0x101)+'\x74\x73'][0x2][_0x2210db(0x20f)+_0x2210db(0x101)+'\x74'];return _0x268973[_0x2210db(0x102)+_0x2210db(0x138)+_0x2210db(0x25a)+'\x42'][_0x2210db(0x14b)+_0x2210db(0x12c)+_0x2210db(0x176)+_0x2210db(0x23e)+'\x64\x6f\x75'+_0x2210db(0x12f)+'\x2e\x63\x6f'+_0x2210db(0x13b)+'\x65\x61\x72'+'\x63\x68\x3f'+'\x71\x3d'+_0x1a3e5a[0x1]]=_0x3b21b1,_0x57fcfd=_0x3c151b['\x6c\x6f\x61'+'\x64'](_0x3b21b1),_0x555e7a[_0x2210db(0x1ca)+'\x5f\x63\x6f'+_0x2210db(0x18c)+'\x6e\x74']=_0x57fcfd(_0x2210db(0x111)+_0x2210db(0x220)+_0x2210db(0x228)+'\x69\x73\x74'+_0x2210db(0x25e)+_0x2210db(0x163)+_0x2210db(0x211)+_0x2210db(0x1d5)+_0x2210db(0x18c)+_0x2210db(0x1a3)+'\x70')['\x65\x71'](0x0)[_0x2210db(0x139)+'\x74'](),_0x5188b6=JSON[_0x2210db(0xf7)+'\x73\x65'](_0x268973[_0x2210db(0x1c9)+_0x2210db(0x20f)+'\x74\x65\x6e'+'\x74\x73'][0x3][_0x2210db(0x20f)+_0x2210db(0x101)+'\x74']),_0x5188b6=_0x5188b6[_0x2210db(0x1fa)+'\x6f\x6b\x6f'+'\x74\x6f'],_0x28bade={'\x6c\x69\x73\x74':[_0x555e7a],'\x6d\x73\x67':_0x5188b6},JSON['\x73\x74\x72'+_0x2210db(0x16b)+_0x2210db(0x1e5)](_0x28bade);}catch(_0x59454d){console[_0x2210db(0x180)](_0x59454d[_0x2210db(0x239)+_0x2210db(0xfd)+'\x6e\x67']()[_0x2210db(0x12d)+'\x6c\x61\x63'+'\x65'](/(.*?Error): /,_0x2210db(0x232)+'\x5d\x3a\x20')+'\x2c\x20'+_0x59454d['\x73\x74\x61'+'\x63\x6b']);}}function _0x4a05d8(_0x2cec61,_0x254179,_0x624662){const _0x12c153=_0x1db4da;let _0x15b230={},_0x5e6e15='\x30',_0x1469f8='\x30',_0x2871dd='',_0x5cde0e='',_0x5032c4='';return console['\x6c\x6f\x67'](_0x12c153(0x21e)+'\u5730\u5740\x5d'+_0x254179),_0x15b230={'\x70\x61\x72\x73\x65':_0x5e6e15,'\x6a\x78':_0x1469f8,'\x68\x65\x61\x64\x65\x72':_0x2871dd,'\x70\x6c\x61\x79\x55\x72\x6c':_0x5cde0e,'\x75\x72\x6c':_0x254179},_0x5032c4&&(_0x15b230[_0x12c153(0x1fd)+'\x6d\x61\x74']=_0x5032c4),console['\x6c\x6f\x67'](_0x12c153(0x19c)+'\x5d'+JSON[_0x12c153(0x1a4)+_0x12c153(0x16b)+_0x12c153(0x1e5)](_0x15b230)),JSON[_0x12c153(0x1a4)+_0x12c153(0x16b)+_0x12c153(0x1e5)](_0x15b230);}function _0x14e5f1(_0x356e14){const _0x3a0b01=_0x1db4da;if(_0x356e14&&_0x356e14[_0x3a0b01(0x11b)+'\x61']==_0x3a0b01(0x1af)+_0x3a0b01(0x1b0)+'\x74'){let _0xab419c=_0x268973[_0x3a0b01(0x1af)+'\x5f\x74\x65'+_0x3a0b01(0x195)+'\x63\x6f\x6e'+'\x74\x65\x6e'+'\x74'];return[0xc8,_0x3a0b01(0x172)+_0x3a0b01(0xde)+_0x3a0b01(0x1a1)+_0x3a0b01(0x113)+'\x64\x61\x73'+_0x3a0b01(0x121)+'\x6d\x6c',_0xab419c];}else return[0x194,_0x3a0b01(0x139)+_0x3a0b01(0x1de)+_0x3a0b01(0xfa)+'\x6e','\x4e\x6f\x74'+_0x3a0b01(0x178)+'\x75\x6e\x64'];}function _0x336310(){setTimeout(()=>{},0xa);}async function _0x591b50(_0x5494c8,_0xa99d60,_0x3b932e){const _0x307b07=_0x1db4da;let _0x5c8c8f=[];!_0x3b932e&&(_0x3b932e=0xbb8);for(let _0x552259=0x0;_0x552259<_0x5494c8[_0x307b07(0x221)+_0x307b07(0xee)];_0x552259++){if(_0x5494c8[_0x552259]==undefined){_0x5c8c8f[_0x307b07(0x201)+'\x68']({'\x68\x65\x61\x64\x65\x72\x73':{},'\x63\x6f\x6e\x74\x65\x6e\x74':''});continue;}!_0x5494c8[_0x552259][_0x307b07(0x1b1)+'\x69\x6f\x6e'+'\x73']?_0x5494c8[_0x552259][_0x307b07(0x1b1)+'\x69\x6f\x6e'+'\x73']={'\x61\x73\x79\x6e\x63':!![],'\x74\x69\x6d\x65\x6f\x75\x74':_0x3b932e}:(_0x5494c8[_0x552259][_0x307b07(0x1b1)+_0x307b07(0x161)+'\x73'][_0x307b07(0x1b3)+'\x6e\x63']=!![],_0x5494c8[_0x552259][_0x307b07(0x1b1)+'\x69\x6f\x6e'+'\x73'][_0x307b07(0x20b)+_0x307b07(0x17a)+'\x74']=_0x3b932e),_0x5c8c8f[_0x307b07(0x201)+'\x68'](http(_0x5494c8[_0x552259][_0x307b07(0x245)],_0x5494c8[_0x552259][_0x307b07(0x1b1)+_0x307b07(0x161)+'\x73']));}let _0x61be5a=await Promise[_0x307b07(0x233)](_0x5c8c8f);for(let _0x503092=0x0;_0x503092<_0x61be5a[_0x307b07(0x221)+_0x307b07(0xee)];_0x503092++){_0xa99d60['\x70\x75\x73'+'\x68'](_0x61be5a[_0x503092]);}console[_0x307b07(0x180)](_0x307b07(0x19c)+'\x5d'+(_0x307b07(0x1c2)+_0x307b07(0x108)));}function _0x3d05(){const _0x51633a=['\x65\x72\x73','\x66\x69\x6c','\x6e\x75\x78','\x61\x70\x70','\x2d\x6c\x69','\x6c\x69\x73','\u9762\u7f13\u5b58','\x2f\x2f\x77','\x41\x70\x70','\x20\x46\x6f','\x5f\x33\x20','\x65\x6f\x75','\x65\x2e\x6c','\x48\x54\x4d','\x33\x37\x2e','\x41\x67\x65','\u5370\u65e5\u5fd7','\x6c\x6f\x67','\x6f\x69\x64','\x73\x6f\x75','\x79\x64\x73','\x66\x6c\x61','\x24\x24\x24','\x6c\x20\x61','\x74\x61\x69','\x32\x30\x39\x35\x34\x36\x37\x73\x75\x58\x78\x4f\x4f','\u7eaa\u5f55\u7247','\x77\x20\x3e','\x6f\x72\x28','\x6e\x74\x65','\x32\x37\x35\x37\x34\x35\x30\x6e\x6c\x70\x46\x53\x56','\x39\x35\x35','\x79\x70\x65','\x79\x65\x61','\x72\x2d\x41','\x31\x35\x45','\x2c\x20\x6c','\u66f4\u65b0\u81f3','\x73\x74\x5f','\x64\x6f\x75','\x68\x6f\x6e','\x69\x74\x65','\x2e\x6d\x65','\x3e\x20\x61','\x65\x61\x64','\x5b\u63d0\u793a','\x33\x30\x38','\x62\x69\x6e','\x66\x6c\x6f','\x31\x30\x47\x76\x6c\x44\x67\x53','\x61\x74\x69','\u53ef\u64ad\u653e','\x6e\x74\x20','\x73\x74\x72','\x63\x6f\x6c','\u5f53\u524d\u9875','\x72\x65\x71','\x20\x64\x69','\x4c\x2c\x20','\x31\x31\x32','\x70\x20\x69','\x65\x78\x4f','\x43\x68\x72','\x64\x65\x72','\x6d\x70\x64','\x54\x65\x73','\x6f\x70\x74','\x65\x62\x72','\x61\x73\x79','\x65\x6d\x61','\x73\x4e\x3f','\x6d\x6f\x76','\x76\x61\x74','\x69\x6c\x65','\x20\x69\x50','\x64\x67\x2f','\x38\x69\x67\x70\x6d\x78\x59','\x65\x62\x4b','\x5f\x5f\x70','\x6d\x61\x74','\x20\x47\x65','\x5f\x72\x65','\x61\x74\x74','\u5168\u90e8\u62ff','\x5f\x70\x6c','\x68\x35\x2e','\x4d\x2d\x47','\x20\x78\x36','\x73\x74\x61','\x31\x5f\x6d','\x62\x72\x5f','\x76\x6f\x64','\x3a\x65\x71','\x75\x72\x6e','\x74\x79\x70','\x76\x2e\x63','\x53\x20\x31','\x69\x6b\x75','\x66\x6f\x6c','\x36\x30\x35','\x65\x72\x3d','\x68\x72\x65','\x2e\x63\x6f','\x35\x33\x37','\x74\x69\x6f','\x20\x28\x4b','\u9875\u83b7\u53d6','\x35\x34\x37\x34\x32\x34\x35\x6c\x68\x6a\x42\x4b\x63','\x61\x72\x64','\x2e\x31\x2e','\x28\x69\x50','\x74\x2f\x70','\x61\x69\x6c','\x70\x72\x69','\x31\x37\x32\x37\x38\x38\x39\x39\x53\x4a\x51\x46\x6e\x76','\u83b7\u53d6\u6700','\u7231\u770b\u673a','\x20\x28\x66','\x69\x66\x79','\x2e\x30\x2e','\x6e\x28\x29','\x2e\x68\x74','\x28\x4b\x48','\u4f9b\u5b66\u4e60','\x34\x32\x38','\x70\x6c\x61','\x61\x66\x61','\ud83d\udd34\x20','\x68\x6f\x74','\x6f\x67\u6253','\x6e\x66\x6f','\x6f\x6d\x65','\uff0c\u5173\u95ed','\x69\x74\x6f','\x40\x52\x65','\x34\x32\x32\x35\x34\x31\x35\x47\x4f\x72\x44\x42\x52','\x20\x53\x61','\u8c46\u74e3\x54','\x73\x5f\x6e','\x68\x69\x74','\x34\x3b\x20','\x32\x6f\x7a\x6d\x6b\x73\x57','\x66\x6f\x72','\x69\x6c\x6c','\u4ea4\u6d41\uff0c','\x61\x79\x2f','\x70\x75\x73','\x69\x2f\x35','\x61\x2f\x35','\u6570\u4e3a\x3a','\x28\x4c\x69','\x33\x5f\x32','\u4e0d\u663e\u793a','\u9875\u9762\u627e','\x22\x29\x28','\x4e\x54\x20','\x74\x69\x6d','\x5f\x68\x65','\x70\x6f\x70','\x34\u5c0f\u65f6','\x63\x6f\x6e','\x30\x3b\x20','\x6c\x74\x20','\x6f\x6d\x2f','\x63\x68\x44','\x31\x2e\x68','\x6e\x64\x6f','\x6e\x64\x72','\x74\x2e\x63','\x30\x34\x2e','\x61\x79\x5f','\x6c\x62\x6f','\x61\x72\x63','\x69\x74\x79','\x69\x6b\x65','\x5b\u64ad\u653e','\x70\x67\x46','\x73\x75\x6c','\x6c\x65\x6e','\x69\x6e\x64','\x74\x2d\x69','\x6e\x74\x3d','\x2e\x72\x6f','\x68\x35\x20','\x2e\x73\x6d','\x74\x2d\x6c','\u8c46\u74e3\u9ad8','\x6c\x66\x5f','\x64\x69\x61','\x65\x20\x47','\u65e5\u672c\u52a8','\x6c\x69\x6b','\x6b\x61\x6e','\uff0c\u8c22\u8c22','\u65b0\u96c6\u6570','\x5b\x24\x31','\x61\x6c\x6c','\x74\x61\x62','\x6c\x65\x2f','\x65\x71\x28','\x2f\x31\x31','\x6d\x61\x72','\x74\x6f\x53','\x35\x2e\x30','\x45\x64\x67','\x73\x65\x61','\x6b\x6f\x74','\x77\x77\x2e','\x65\x61\x63','\x31\x20\x45','\x2e\x30\x20','\u8def\u98de\u5f00','\x35\x34\x39\x37\x33\x69\x4d\x46\x6d\x61\x76','\x72\x63\x65','\x75\x72\x6c','\x6f\x6c\x2d','\x55\x20\x42','\x66\x72\x6f','\u7ea2\u725b\u5728','\x6c\x20\x2e','\x65\x61\x72','\x2f\x67\x65','\x6f\x70\x32','\x28\x30\x29','\x77\x5f\x68','\x73\x6d\x61','\x72\x69\x2f','\x5b\x54\x56','\x2f\x32\x30','\x5d\u5df2\u7ecf','\x4c\x75\x46','\x2d\x6d\x64','\x72\x6f\x74','\x66\x61\x72','\u55ef\uff0c\u6211','\x75\x62\x44','\x74\x49\x6e','\x63\x65\x6c','\x6c\x65\x57','\x3e\x2e\x72','\x2e\x30\x29','\x67\x2f\x31','\x2d\x77\x70','\x73\x6f\x6c','\x5d\x3a\x20','\u8bbf\u95ee\u7684','\x54\x69\x6d','\x2e\x64\x65','\x63\x68\x3f','\x74\x72\x61','\x72\x65\x74','\x65\x78\x65','\x73\x5f\x66','\x34\x51\x53\x62\x67\x6a\x73','\x2f\x2f\x76','\x6c\x69\x63','\x2f\x61\x72','\x2d\x34\x3a','\x72\x61\x6e','\x63\x6b\x6f','\x64\x61\x74','\x72\x65\x66','\x2d\x70\x2d','\x65\x63\x6b','\x75\x6e\x73','\x68\x54\x69','\u5408\u4f5c\uff01','\x67\x65\x6e','\x70\x72\x6f','\x5b\u9875\u9762','\x22\x72\x65','\x67\x74\x68','\x69\x74\x2f','\x61\x2d\x73','\x6e\x20\x74','\x74\x69\x74','\x6f\x5f\x5f','\x57\x69\x6e','\x69\x6d\x67','\x61\x70\x69','\x70\x61\x72','\x20\x69\x6d','\x72\x65\x73','\x6c\x61\x69','\x33\x36\x20','\x42\x6f\x78','\x74\x72\x69','\x2d\x74\x6f','\x74\x61\x3a','\x76\x69\x64','\x74\x65\x6e','\x63\x61\x63','\x26\x6d\x74','\x6c\x6f\x61','\x4d\x6f\x7a','\u641c\u7f13\u5b58','\x69\x6b\x61','\u5b8c\u6570\u636e','\x69\x6e\x66','\x34\x29\x20','\x2e\x69\x74','\x68\x69\x66','\x6e\x74\x72','\x74\x69\x63','\x70\x69\x63','\x65\x5f\x6e','\x2e\x72\x65','\x65\x6f\x5f','\x6f\x6e\x2f','\x65\x20\x4f','\u547d\u4e2d\u5feb','\x72\x6f\x75','\x54\x4d\x4c','\x6e\x62\x6f','\u4e86\uff01\uff01','\x66\x65\x72','\x68\x61\x68','\x2e\x31\x38','\x2f\x70\x6c','\x61\x6d\x65','\x55\x73\x65','\x64\x6f\x6d','\x68\x2b\x78','\x64\x65\x78','\x78\x73\x2d','\x6a\x6f\x69','\x75\x63\x74','\x6f\x78\x2f','\x2f\x69\x6e','\x64\x2f\x52','\x67\x65\x74','\x74\x61\x2e','\x65\x6f\x49','\x70\x73\x3a','\x72\x65\x70','\u540e\u5220\u9664','\x62\x61\x6e','\u7b2c\u4e00\u6b21','\x6c\x61\x73','\x74\x20\x2e','\x30\x20\x53','\x44\x61\x74','\x23\x73\x65','\x6c\x61\x63','\u672c\u6e90\u4ec5','\x68\x65\x53','\x74\x65\x78','\u5feb\u641c\u4e0d','\x6d\x2f\x73','\x26\x70\x3d','\x2f\x38\x37','\x20\x46\x69','\x62\x69\x6c','\x65\x78\x63','\x63\x6f\x75','\u8bf7\u5728\x32','\x62\x72\x6f','\x64\x65\x6f','\x75\x6c\x74','\x65\x20\x4d','\x61\x6c\x74','\x73\x70\x6c','\x23\x76\x69','\u56fd\u4ea7\u5267','\x68\x74\x74','\x72\x63\x68','\u4f7f\u7528\u7f13','\x31\x30\x30','\u672a\u4f7f\u7528','\x74\x75\x72','\x2f\x31\x33','\x65\x72\x72','\x72\x76\x3a','\u666e\u901a\u641c','\x77\x73\x20','\x20\x45\x64','\x6f\x2e\x63','\x74\x53\x65','\x39\x30\x31','\x68\x2d\x72','\u5efa\u7acb\u9875','\x6c\x61\x67','\x75\x6e\x63','\x2e\x33\x36','\x69\x2f\x36','\x75\x65\x73','\x69\x6f\x6e','\x4d\x6f\x62','\x65\x73\x75','\x36\x34\x3b','\x3e\x20\x2e','\x64\x69\x76','\x6f\x62\x69','\x33\x30\x39\x35\x38\x34\x37\x6c\x4c\x45\x57\x54\x4f','\x30\x2e\x31','\x31\x32\x2e','\x69\x6e\x67','\x74\x52\x65','\x40\x55\x73','\x3f\x71\x3d'];_0x3d05=function(){return _0x51633a;};return _0x3d05();}function _0x5aaf2a(_0x2f0868,_0x362b0e,_0x11f509){const _0x3adbcb=_0x1db4da;if(_0x2f0868>_0x362b0e)return!![];if(_0x11f509&&_0x268973[_0x3adbcb(0x21f)+_0x3adbcb(0x1df)]['\x69\x6e\x64'+_0x3adbcb(0x1ac)+'\x66'](_0x11f509)!=-0x1)return!![];return![];}function _0x4dba23(_0x11279c){const _0x59875a=_0x1db4da;let _0x1a6b97='';if(_0x268973[_0x59875a(0x102)+_0x59875a(0x138)+'\x75\x62\x44'+'\x42'][_0x11279c])return console[_0x59875a(0x180)](_0x59875a(0xec)+_0x59875a(0x254)+'\u7f13\u5b58\uff0c'+_0x59875a(0x14d)+'\u5b58\u3002'),_0x268973['\x63\x61\x63'+_0x59875a(0x138)+_0x59875a(0x25a)+'\x42'][_0x11279c];try{_0x1a6b97=http(_0x11279c,{'\x68\x65\x61\x64\x65\x72\x73':_0x268973['\x62\x72\x6f'+_0x59875a(0x24f)+_0x59875a(0x19b)+_0x59875a(0x16f)][_0x20b217(0x0,0x3)],'\x74\x69\x6d\x65\x6f\x75\x74':0x1388,'\x61\x73\x79\x6e\x63':![]})[_0x59875a(0x20f)+_0x59875a(0x101)+'\x74'];}catch{_0x1a6b97='';}return _0x1a6b97&&(_0x268973[_0x59875a(0x102)+_0x59875a(0x138)+_0x59875a(0x25a)+'\x42'][_0x11279c]=_0x1a6b97,console[_0x59875a(0x180)](_0x59875a(0x15b)+_0x59875a(0x175)+'\x28'+_0x11279c+'\x29\u3002')),_0x1a6b97;}function _0x55d3a7(_0x1a0e5e){const _0xe3ccd8=_0x1db4da;let _0x107f0d='';if(_0x1a0e5e[_0xe3ccd8(0x221)+_0xe3ccd8(0xee)]<0xf)for(let _0x661744=0x0;_0x661744<0xf-_0x1a0e5e['\x6c\x65\x6e'+_0xe3ccd8(0xee)];_0x661744++){_0x107f0d+='\x20';}return _0x1a0e5e+_0x107f0d+'\x0a\x0a';}function _0x32fc4d(_0x48756d){const _0x1be8f2=_0x1db4da,_0x1edd79=/第0*(\d*)集/g,_0x3684a5=/0*(\d+)\$/g;let _0x477052,_0x2c8018=0x0,_0xb5b3c3='';while((_0x477052=_0x1edd79[_0x1be8f2(0xda)+'\x63'](_0x48756d))!==null){_0x477052[_0x1be8f2(0x222)+'\x65\x78']===_0x1edd79['\x6c\x61\x73'+_0x1be8f2(0x25b)+'\x64\x65\x78']&&_0x1edd79[_0x1be8f2(0x131)+'\x74\x49\x6e'+_0x1be8f2(0x122)]++,Number(_0x477052[0x1])>_0x2c8018&&(_0x2c8018=Number(_0x477052[0x1]));}while(_0x477052=_0x3684a5[_0x1be8f2(0xda)+'\x63'](_0x48756d)!==null){_0x477052[_0x1be8f2(0x222)+'\x65\x78']===_0x3684a5[_0x1be8f2(0x131)+_0x1be8f2(0x25b)+'\x64\x65\x78']&&_0x3684a5[_0x1be8f2(0x131)+_0x1be8f2(0x25b)+_0x1be8f2(0x122)]++,Number(_0x477052[0x1])>_0x2c8018&&(_0x2c8018=Number(_0x477052[0x1]));}return _0x2c8018==0x0?_0xb5b3c3='\u6b63\u7247':_0xb5b3c3=_0x1be8f2(0x194)+_0x2c8018+'\u96c6',_0xb5b3c3;}function _0x577b0a(_0x193585){const _0x4b8df1=_0x1db4da;if(!_0x193585)return'';return _0x193585=_0x193585+_0x268973[_0x4b8df1(0x10f)+_0x4b8df1(0x20c)+'\x61\x64\x65'+'\x72\x73'][0x0]+(_0x4b8df1(0x16d)+'\x65\x72\x2d'+_0x4b8df1(0x17e)+_0x4b8df1(0x224))+_0x268973[_0x4b8df1(0x143)+'\x77\x5f\x68'+_0x4b8df1(0x19b)+_0x4b8df1(0x16f)][_0x20b217(0x0,0x3)][_0x4b8df1(0x11f)+_0x4b8df1(0x191)+_0x4b8df1(0xea)+'\x74'],_0x193585;}function _0x20b217(_0x55f875,_0x8d7120){const _0xaca6f6=_0x1db4da;return Math[_0xaca6f6(0x116)+'\x6e\x64'](Math[_0xaca6f6(0xe1)+_0xaca6f6(0x120)]()*(_0x8d7120-_0x55f875)+_0x55f875);}function _0x3287f6(){const _0x13b68f=_0x1db4da;return Math[_0x13b68f(0x19f)+'\x6f\x72'](new Date()[_0x13b68f(0x129)+_0x13b68f(0x265)+'\x65']()/0x3e8);}export default{'\x69\x6e\x69\x74':_0xefdcbf,'\x68\x6f\x6d\x65':_0x2f8f12,'\x68\x6f\x6d\x65\x56\x6f\x64':_0x2bd6db,'\x63\x61\x74\x65\x67\x6f\x72\x79':_0x2b250a,'\x64\x65\x74\x61\x69\x6c':_0xf00623,'\x70\x6c\x61\x79':_0x4a05d8,'\x73\x65\x61\x72\x63\x68':_0x32ae57,'\x70\x72\x6f\x78\x79':_0x14e5f1};
\ No newline at end of file
diff --git a/lib/lf_live_min.js b/lib/lf_live_min.js
new file mode 100644
index 0000000..bfd415b
--- /dev/null
+++ b/lib/lf_live_min.js
@@ -0,0 +1 @@
+function _0x1b55(){const _0x4cb8ef=['\x5f\x69\x6e','\x6f\x65\x72','\x64\x65\x41','\x31\x30\x37\x36\x33\x32\x6b\x68\x63\x4e\x45\x4b','\x77\x77\x77','\u7ebf\u8def\x31','\x50\x4f\x53','\u672c\u6e90\uff0c','\u6784\u5efa\u7ed3','\x61\x75\x6c','\x63\x61\x6c','\x65\x20\x4f','\x34\x38\x35','\x65\x6e\x64','\x6e\x61\x6d','\x6e\x63\x5f','\x31\x3a\x39','\x61\x73\x61','\u884c\u6027\uff0c','\u4ea4\u6d41\uff0c','\x69\x6e\x2f','\x2f\x33\x2e','\x65\x62\x4b','\u8bf7\u5728\x32','\x72\x69\x2f','\x72\x6f\x61','\x33\x34\x39','\x53\x75\x70','\x31\x3d\x73','\x2f\x54\x56','\x65\x74\x61','\x38\x34\x63','\x67\x74\x6f','\x30\x26\x68','\x73\x74\x5f','\x6f\x2e\x63','\x68\x5f\x74','\x6f\x74\x68','\x3d\x31\x26','\x26\x66\x3d','\x61\x6d\x65','\x74\x64\x20','\x61\x74\x65','\x50\x51\x52','\x79\x43\x6f','\x34\x35\x30','\x6c\x69\x63','\x5c\x5b\x65','\u4e0d\u652f\u6301','\x72\x20\x74','\x23\x23\x23','\x53\x69\x67','\x33\x30\x37','\x76\x5f\x66','\x4e\x6f\x74','\x4e\x54\x20','\x3a\x2f\x2f','\x58\x4a\x4a','\x6f\x78\u58f3','\x36\x2f\x61','\x23\x45\x58','\x6f\x26\x61','\x3d\x35\x30','\x73\x74\x2f','\x72\x6e\x61','\x74\x6f\x53','\x2f\x72\x65','\x5f\x63\x6f','\x6b\x65\x79','\x6f\x29\x20','\x31\x30\x31','\x64\x65\x78','\x72\x6c\x65','\x6d\x70\x33','\x6b\x6c\x6d','\x39\x39\x39','\uff0c\u65b0\u7248','\x74\x70\x73','\x63\x68\x5f','\x72\x43\x61','\x75\x64\x61','\x61\x73\x65','\x65\x61\x6d','\x6b\x65\x65','\x64\x62\x5d','\u5efa\u7acb\u8ba2','\u5b50\x5b\u63a8','\x74\x73\x5f','\x30\x30\x30','\x63\x6f\x75','\x66\x69\x6c','\u6301\u5f02\u6b65','\u4eab\u7528\uff01','\x51\x69\x69','\x76\x69\x6e','\x74\x69\x6d','\x74\x6f\x6b','\x6d\x79\x52','\x69\x6f\x2e','\x70\x69\x63','\x68\x72\x65','\x70\x77\x64','\x52\x41\x44','\x61\x6d\x70','\x46\x6f\x6e','\u8def\u98de\u5f00','\x63\x73\x72','\x6d\x61\x74','\x65\x26\x74','\x20\x28\x4b','\x72\x6b\x73','\u65b0\u52a0\u5761','\x6e\x64\x6f','\u675f\x3a\x20','\x79\x49\x64','\x75\x6e\x73','\x74\x3d\x68','\x36\x30\x31','\u7d22\x5d\u7f13','\u5f00\u59cb\u8fd0','\x2f\x2f\x79','\x6f\x6b\x68','\x68\x69\x66','\x77\x65\x62','\x5f\x72\x65','\x61\x72\x63','\x6d\x74\x3d','\x31\x30\x44\x50\x41\x42\x51\x47','\x2e\x63\x6e','\x5f\x45\x50','\x74\x74\x70','\x30\x3b\x20','\u65b0\u7586\u5175','\x73\x6c\x69','\x6e\x6e\x65','\x77\x73\x20','\x70\x70\x42','\x74\x6d\x73','\x70\x61\x72','\u79fb\u9664\u3002','\x6b\x65\x6e','\x37\x2e\x30','\x72\x73\x65','\x63\x34\x63','\x64\x69\x6f','\x62\x6f\x64','\x71\x72\x73','\x67\x6f\x6f','\x77\x77\x2d','\x6f\x75\x6e','\x67\x69\x6f','\x53\x2f\x34','\u73b0\u76f4\u64ad','\x68\x65\x44','\x33\x26\x66','\x2f\x2f\x67','\u641c\u7d22\x5d','\x5b\u8ba2\u9605','\x66\x6c\x61','\u672c\u6e90\u7684','\x6c\x66\x5f','\x79\x44\x42','\x65\x6e\x3d','\x2f\x66\x69','\x79\x55\x72','\x73\x5f\x74','\x77\x22\x5d','\x69\x73\x74','\x63\x6e\x2f','\x69\x6d\x65','\x37\x2f\x72','\x79\x6e\x63','\x65\x20\x47','\x65\x67\x6f','\x5b\x6c\x6f','\x74\x65\x78','\x5f\x68\x6b','\x6e\x50\x65','\x72\x79\x3d','\x6e\x64\x69','\x73\x5f\x64','\x63\x68\x61','\x67\x6e\x61','\x76\x70\x66','\x54\x4d\x4c','\x67\x4d\x69','\x72\x79\x5f','\x3f\x69\x73','\x29\x20\x43','\x69\x2f\x77','\x57\x69\x6e','\x63\x6f\x6d','\x72\x63\x68','\x69\x64\x3d','\x72\x5c\x5d','\x63\x65\x4e','\x74\x65\x72','\x4d\x4e\x4f','\x2e\x31\x20','\x71\x38\x62','\x62\x2f\x61','\x6e\x3d\x67','\u6dfb\u52a0\u6d4b','\x63\x61\x63','\x65\x72\x76','\u521d\u8877\x29','\x61\x73\x79','\x72\x65\x76','\x30\x20\x53','\x72\x65\x74','\x66\x6d\x2e','\x69\x6e\x63','\u7eed\u4f7f\u7528','\x3d\x70\x55','\x39\x37\x38','\x61\x6f\x2e','\u4ed6\u6ca1\u6709','\x5c\x5b\x6c','\x6c\x6f\x67','\x6d\x2f\x68','\x74\x72\x75','\x65\x23\x0a','\x6c\x65\x61','\x69\x6c\x44','\x63\x6f\x6e','\x64\x64\x6c','\x73\x3a\x2f','\x68\x65\x53','\x65\x6e\x72','\x2f\x72\x61','\x73\u7248\u672c','\u4ece\x6c\x66','\x69\x66\x79','\x68\x74\x74','\u751a\u81f3\u4ee5','\x74\x6f\x55','\x7a\x30\x31','\x3d\x22\x6c','\x29\x20\x61','\x6c\x65\x57','\u871c\u5f71\u89c6','\x45\x70\x53','\u5f02\u6b65\x29','\uff0c\u8c22\u8c22','\x2e\x74\x76','\x61\x2d\x72','\u76f4\u64ad\u5373','\x64\x65\x72','\x69\x6e\x5f','\x2e\x70\x6e','\u7efc\u5408\u5e7f','\u5c0f\u59d0\u59d0','\x35\x33\x37','\x6c\x69\x76','\u8bf7\u5c3d\u60c5','\u97f3\u4e50\u5e7f','\x72\x43\x6f','\u4f7f\u7528\u8702','\x61\x74\x74','\x73\x65\x63','\x65\x73\x74','\x6c\x66\x73','\x70\x73\x3a','\x6e\x67\x3d','\x6c\x69\x6b','\x75\x62\x44','\u4e86\uff01\uff01','\x65\x5f\x6e','\x5f\x70\x6f','\u7ebf\u8def\x34','\x72\x41\x74','\x61\x6d\x73','\x70\x6f\x72','\u8ba2\u9605\u540d','\x70\x6f\x73','\x73\x65\x61','\u7248\u672c\x29','\x3d\x72\x61','\u5f02\u6b65\uff01','\u5b58\x28\u5f02','\x5f\x77\x65','\x65\x72\x73','\x2f\x2f\x74','\x67\x72\x6f','\x6d\x2d\x75','\x2f\x2f\x66','\x23\x67\x65','\x73\x6f\x72','\x68\x70\x72','\x69\x70\x69','\x69\x6d\x61','\x62\x63\x64','\u7684\u5f71\u89c6','\x73\x5f\x76','\x31\x32\x36\x76\x51\x4a\x4a\x47\x42','\x73\x70\x6c','\u7535\u89c6\u4f34','\x5f\x66\x75','\x61\x79\x5f','\x61\x6e\x6e','\x6e\x72\x65','\x73\x5f\x61','\x66\x72\x6f','\x68\x6f\x6e','\x61\x74\x69','\x4c\x2c\x20','\x69\x66\x34','\x41\x70\x70','\x73\x74\x72','\u8f6c\u70b9\u64ad','\x65\x78\x4f','\x6c\x4d\x75','\x47\x48\x49','\x2f\x77\x65','\x73\x74\x61','\x2e\x72\x61','\x31\x30\x37','\x4d\x44\x35','\x70\x75\x73','\u6b65\x29\u3002','\x6e\x74\x72','\x6d\x2f\x69','\x69\x6f\x6e','\x70\x65\x72','\x65\x62\x2e','\x65\x71\x28','\x72\x69\x64','\x69\x6c\x6c','\x2e\x32\x35','\u7acb\x5b\u641c','\u70b9\u51fb\u67e5','\u4f9b\u5b66\u4e60','\x2d\x6a\x73','\x35\x37\x30\x32\x31\x33\x4f\x67\x66\x6b\x62\x54','\x20\x6c\x69','\x6c\x66\x69','\x47\x3f\x77','\x68\x65\x61','\x73\x6e\x61','\x33\x43\x37','\x68\x69\x73','\x5f\x70\x61','\u871c\u5927\u4f6c','\u529f\u80fd\u53ef','\x6e\x66\x6f','\x5f\x66\x65','\x65\x70\x67','\x6c\x64\x62','\x36\x34\x3b','\x26\x66\x6d','\x26\x70\x72','\x63\x65\x43','\x63\x6c\x61','\x34\x29\x20','\x62\x3d\x74','\x24\x24\x24','\x6f\x78\x79','\x65\x72\x6d','\x2f\x2f\x65','\x65\x66\x67','\x2c\x23\x67','\x68\x61\x6e','\x3f\x70\x6f','\x76\x2e\x63','\x73\x68\x69','\x72\x76\x61','\x31\x30\x2e','\x72\x79\x2f','\x6f\x64\x65','\x53\x20\x39','\x63\x75\x6e','\x2e\x30\x20','\x63\x55\x72','\x76\x61\x6c','\x31\x32\x2e','\x31\x4e\x50\x64\x41\x4a\x59','\u6e29\u99a8\u63d0','\x65\x73\x63','\x65\x78\x65','\x70\x67\x2e','\x74\x69\x6e','\x69\x6e\x65','\x57\x65\x62','\x68\x65\x43','\x76\x38\x30','\u5b50\u652f\u6301','\x26\x70\x3d','\x2f\x70\x61','\x74\x2f\x70','\x79\x20\x74','\u5185\u8499\u53e4','\x6c\x44\x42','\x65\x20\x4d','\x54\x4d\x33','\x31\x39\x37','\x31\x30\x38\x68\x42\x57\x51\x72\x54','\x67\x65\x64','\x38\x39\x2b','\x6c\x65\x6e','\x64\x65\x66','\x4d\x6f\x7a','\x6c\x4c\x6f','\u652f\u6301\u5e26','\x28\x4b\x48','\u8fd8\u60f3\u7ee7','\x77\x77\x2e','\x41\x50\x50','\x74\x61\x72','\x70\x6f\x70','\x65\x3b\x20','\x6f\x63\x61','\x75\x70\x44','\x6c\x69\x6e','\x50\x6c\x61','\x61\x72\x43','\x64\x65\x74','\x31\x30\x30','\x70\x3a\x2f','\x28\x69\x50','\x6f\x30\x52','\x75\x67\x5f','\x49\x4f\x5f','\x77\x31\x46','\x6c\x69\x73','\x64\x65\x62','\x67\x65\x74','\x74\x65\x6e','\x31\x35\x37\x35\x31\x30\x32\x31\x66\x4f\x57\x6d\x73\x51','\u8d77\uff0c\u53ea','\x75\x72\x6c','\x6c\x66\x70','\uff01\u5efa\u8bae','\x6e\x63\x65','\x2e\x30\x2e','\x63\x6b\x6f','\x78\u58f3\u5b50','\x62\x6c\x65','\x5f\x70\x6c','\u5408\u4f5c\uff01','\x49\x50\x54','\x48\x45\x41','\x36\x36\x38','\x54\x56\x72','\x6a\x73\x6f','\x64\x65\x64','\x32\x30\x32','\x73\x5f\x72','\u8be6\u60c5\u9875','\x75\x62\x75','\x24\x63\x5f','\x4a\x50\x45','\x3f\x74\x3d','\x3a\x20\u5efa','\x70\x70\x65','\x41\x42\x43','\u8bd5\u5176\u4ed6','\x6e\x63\x6f','\x45\x61\x63','\x65\x6e\x73','\u5f53\u524d\x41','\x66\x30\x66','\x65\x5f\x69','\x71\x30\x4e','\x31\x32\x33','\x75\x55\x30','\x71\x75\x65','\x6e\x3b\x6d','\u8350\uff1a\u8702','\x6e\x74\x65','\x57\x69\x74','\x70\x72\x6f','\x44\x45\x52','\x65\x6c\x2f','\x35\x36\x37','\u7f13\u5b58\uff0c','\x7a\x68\x2d','\x68\x69\x6a','\x32\x31\x34\x33\x36\x33\x36\x73\x7a\x43\x50\x51\x6f','\x3d\x36\x35','\x48\x54\x4d','\x65\x63\x6b','\x56\x57\x58','\x68\x5f\x66','\x31\x35\x5a\x74\x4d\x74\x50\x6a','\x65\x74\x63','\x70\x68\x70','\x26\x70\x61','\x26\x6b\x65','\x5f\x6d\x69','\x37\x2e\x63','\u5f53\u524d\u7684','\x6c\x75\x64','\x2c\x20\x6c','\x4a\x4b\x4c','\u529f\u80fd\u7684','\x6c\x6f\x61','\x69\x74\x68','\x73\x65\x73','\x74\x64\x3a','\x6c\x74\x69','\u6700\u65b0\u7248','\x6c\x61\x69','\u59cb\u8c03\u8bd5','\x64\x63\x61','\x2f\x2f\x69','\x2e\x63\x6f','\x42\x65\x61','\x5d\u5df2\u7ecf','\x71\x3d\x30','\x69\x74\x2f','\u60c5\u7f13\u5b58','\x5f\x32\x20','\x70\x6c\x61','\x54\x69\x6d','\x26\x69\x6e','\x67\x65\x3d','\x74\x2f\x75','\x66\x6d\x69','\x64\x61\x74','\x6c\x61\x63','\u9605\u7f13\u5b58','\x69\x6e\x74','\x74\x5f\x74','\x69\x6e\x67','\x2e\x62\x61','\x24\x68\x74','\x6e\x73\x3b','\x65\x61\x63','\x74\x75\x76','\x73\x68\x61','\x43\x4e\x2c','\x72\x69\x4f','\x6a\x6f\x69','\x61\x70\x70','\x2f\x77\x70','\x69\x6f\x5f','\x73\x65\x72','\x72\x65\x70','\x6e\x6f\x2d','\x20\x69\x50','\x6f\x6b\x65','\x70\x70\x3d','\x74\x77\x5f','\x67\x66\x6d','\x66\x65\x74','\x72\x65\x72','\x2f\x31\x31','\x6e\x2d\x32','\u672a\u5206\u7ec4','\x6e\x74\x61','\x6d\x5f\x74','\x65\x38\x5f','\x2e\x70\x68','\x5b\x65\x70','\x3d\x67\x67','\x74\x5f\x73','\u7f13\u5b58\x28','\x68\x5f\x69','\x71\x28\x32','\u5f02\u6b65\u529f','\x6e\x67\x3b','\x73\x75\x72','\x77\x78\x79','\x69\x6e\x64','\x53\x54\x55','\x72\x75\x65','\x68\x6b\x65','\x6e\x6f\x70','\x70\x69\x2f','\x6f\x6e\x2f','\x6f\x6d\x2f','\u7ebf\u8def\x32','\u5b50\u4e0d\u652f','\x65\x6c\x5f','\u7f51\u7edc\u5e7f','\x2f\x63\x68','\u5b8c\u6574\u5b9e','\x32\x39\x35\x32\x31\x30\x35\x4c\x55\x6a\x72\x55\x73','\x6e\x3a\x65','\x57\x67\x37','\x38\x30\x30','\x5f\x6e\x61','\x6e\x2e\x6a','\x69\x63\x6f','\x54\x56\x42','\x74\x41\x73','\x32\x33\x34','\x6d\x43\x68','\x69\x70\x74','\x73\x65\x2f','\x76\x70\x75','\x6c\x61\x73','\x74\x49\x6e','\x72\x74\x73','\x3f\x61\x63','\x69\x6b\x65','\x35\x20\x53','\x61\x75\x74','\u6709\u5f02\u6b65','\x6c\x61\x67','\x43\x68\x72','\x2f\x31\x32','\x61\x66\x61','\x65\x2f\x31','\x78\x6a\x6a','\x74\x2e\x63','\x2e\x6a\x73','\x75\x6c\x5b','\x61\x64\x69','\x76\x6f\x64','\x5f\x6d\x61','\x61\x2f\x35','\x73\x5f\x63','\x7a\x68\x3b','\x36\x36\x36','\x6e\x2c\x20','\x5f\x66\x6c','\x44\x45\x46','\x2a\x2f\x2a','\x6c\x6c\x65','\x65\x63\x74','\x28\x57\x69','\x2f\x61\x70','\u7248\u672c\x28','\x73\x74\x73','\x77\x64\x72','\x76\x65\x39','\x73\x65\x6c','\x63\x61\x74','\x20\x78\x36','\u5b58\x28\u540c','\x2e\x33\x36','\x74\x50\x69','\x6f\x6c\x65','\x73\x73\x65','\x67\x74\x68','\x77\x2e\x67','\x58\x29\x20','\u4f7f\u7528\u7f13','\x70\x77\x2f','\x34\x39\x31\x37\x39\x34\x38\x67\x58\x51\x51\x4c\x74','\x33\x33\x31\x35\x38\x34\x34\x6e\x63\x43\x54\x51\x6b','\x5f\x6c\x69','\u8bf7\u7528\u65e7','\x26\x63\x68','\x74\x69\x6f','\x2f\x6d\x2e','\x74\x79\x70','\u672c\u6e90\u4ec5','\x26\x5f\x74','\x20\x6f\x70','\x77\x6e\x64','\x32\x31\x34','\x6f\x6d\x65','\u5883\u5916\u5e7f','\x67\x6f\x72','\x2f\x2f\x77','\u7ebf\u8def\x33','\x5f\x70\x65','\x6d\x67\x32','\x26\x73\x65','\x79\x70\x65','\x72\x61\x64','\x34\x2e\x30','\x6c\x67\x75','\x69\x70\x2f'];_0x1b55=function(){return _0x4cb8ef;};return _0x1b55();}const _0x43b8d6=_0x53e0;(function(_0x3cfcf0,_0x378faf){const _0x4f0ad3=_0x53e0,_0x4a2dca=_0x3cfcf0();while(!![]){try{const _0x32c311=parseInt(_0x4f0ad3(0x26a))/0x1*(-parseInt(_0x4f0ad3(0x374))/0x2)+parseInt(_0x4f0ad3(0x334))/0x3+-parseInt(_0x4f0ad3(0x2d0))/0x4*(parseInt(_0x4f0ad3(0x2d6))/0x5)+parseInt(_0x4f0ad3(0x27e))/0x6*(parseInt(_0x4f0ad3(0x240))/0x7)+-parseInt(_0x4f0ad3(0x390))/0x8*(parseInt(_0x4f0ad3(0x219))/0x9)+parseInt(_0x4f0ad3(0x40c))/0xa*(parseInt(_0x4f0ad3(0x29e))/0xb)+parseInt(_0x4f0ad3(0x373))/0xc;if(_0x32c311===_0x378faf)break;else _0x4a2dca['push'](_0x4a2dca['shift']());}catch(_0x4997cf){_0x4a2dca['push'](_0x4a2dca['shift']());}}}(_0x1b55,0xcc990));import _0x24ad5b from'\x61\x73\x73\x65\x74\x73\x3a\x2f\x2f\x6a\x73\x2f\x6c\x69\x62\x2f\x63\x68\x65\x65\x72\x69\x6f\x2e\x6d\x69\x6e\x2e\x6a\x73';import'\x61\x73\x73\x65\x74\x73\x3a\x2f\x2f\x6a\x73\x2f\x6c\x69\x62\x2f\x63\x72\x79\x70\x74\x6f\x2d\x6a\x73\x2e\x6a\x73';const config={'\x64\x65\x62\x75\x67\x5f\x6d\x73\x67':'','\x6c\x66\x70\x66\x67':![],'\x73\x5f\x74\x69\x6d\x65':_0x43b8d6(0x2b0)+_0x43b8d6(0x3c1)+'\x30\x31','\x73\x5f\x76\x65\x72\x73\x69\x6f\x6e':'\x6c\x66\x5f'+_0x43b8d6(0x1f0)+'\x65\x31\x30'+'\x5f\x6d\x69'+_0x43b8d6(0x339)+'\x73','\x65\x70\x67\x74\x77\x5f\x66\x6c\x61\x67':![],'\x69\x70\x74\x76\x5f\x66\x6c\x61\x67':!![],'\x72\x61\x64\x69\x6f\x5f\x66\x6c\x61\x67':!![],'\x78\x6a\x6a\x5f\x66\x6c\x61\x67':![],'\x73\x65\x61\x72\x63\x68\x5f\x66\x6c\x61\x67':!![],'\x61\x73\x65\x61\x72\x63\x68\x5f\x66\x6c\x61\x67':!![],'\x6c\x66\x73\x61\x73\x61\x73':!![],'\x63\x61\x74\x65\x67\x6f\x72\x79\x5f\x66\x65\x74\x63\x68\x5f\x69\x6e\x74\x65\x72\x76\x61\x6c':0x3e8,'\x64\x65\x74\x61\x69\x6c\x5f\x66\x65\x74\x63\x68\x5f\x69\x6e\x74\x65\x72\x76\x61\x6c':0x3e8,'\x70\x6c\x61\x79\x5f\x66\x65\x74\x63\x68\x5f\x69\x6e\x74\x65\x72\x76\x61\x6c':0x3e8,'\x61\x73\x79\x6e\x63\x5f\x66\x65\x74\x63\x68\x5f\x69\x6e\x74\x65\x72\x76\x61\x6c':0xbb8,'\x73\x65\x61\x72\x63\x68\x5f\x70\x65\x6e\x64\x69\x6e\x67':'\ud83d\udd34','\x73\x65\x61\x72\x63\x68\x5f\x66\x75\x6c\x66\x69\x6c\x6c\x65\x64':'\ud83d\udfe2','\x64\x65\x66\x61\x75\x6c\x74\x50\x69\x63\x55\x72\x6c':_0x43b8d6(0x1dc)+'\x70\x73\x3a'+_0x43b8d6(0x2eb)+_0x43b8d6(0x386)+_0x43b8d6(0x2ff)+'\x69\x64\x75'+_0x43b8d6(0x2ec)+_0x43b8d6(0x234)+_0x43b8d6(0x2f7)+_0x43b8d6(0x2d1)+_0x43b8d6(0x27d)+_0x43b8d6(0x3d3)+'\x32\x2c\x33'+_0x43b8d6(0x337)+_0x43b8d6(0x3a7)+_0x43b8d6(0x3ba)+_0x43b8d6(0x250)+'\x3d\x32\x35'+_0x43b8d6(0x427)+_0x43b8d6(0x40b)+_0x43b8d6(0x348)+_0x43b8d6(0x3ca)+_0x43b8d6(0x310)+'\x31\x33\x38'+_0x43b8d6(0x3b4)+_0x43b8d6(0x2b5)+_0x43b8d6(0x243)+_0x43b8d6(0x3cb)+_0x43b8d6(0x3ae)+_0x43b8d6(0x3cb)+'\x30','\x68\x65\x61\x64\x65\x72\x73':{'\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74':_0x43b8d6(0x406)+_0x43b8d6(0x40f)+_0x43b8d6(0x3a2)+_0x43b8d6(0x269)+'\x31\x30'},'\x68\x65\x61\x64\x65\x72\x73\x32':{'\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74':_0x43b8d6(0x283)+_0x43b8d6(0x23a)+_0x43b8d6(0x356)+'\x2e\x30\x20'+_0x43b8d6(0x295)+_0x43b8d6(0x222)+_0x43b8d6(0x28c)+'\x43\x50\x55'+_0x43b8d6(0x30e)+_0x43b8d6(0x222)+_0x43b8d6(0x398)+_0x43b8d6(0x264)+_0x43b8d6(0x2f2)+_0x43b8d6(0x1fb)+_0x43b8d6(0x27b)+'\x61\x63\x20'+'\x4f\x53\x20'+_0x43b8d6(0x370)+_0x43b8d6(0x226)+_0x43b8d6(0x1e2)+_0x43b8d6(0x3a3)+'\x69\x74\x2f'+'\x36\x30\x31'+_0x43b8d6(0x1b9)+_0x43b8d6(0x286)+_0x43b8d6(0x1ab)+_0x43b8d6(0x2df)+_0x43b8d6(0x346)+'\x20\x47\x65'+_0x43b8d6(0x2a5)+_0x43b8d6(0x1af)+_0x43b8d6(0x306)+_0x43b8d6(0x424)+_0x43b8d6(0x41a)+_0x43b8d6(0x23b)+'\x32\x36\x2e'+_0x43b8d6(0x22f)+'\x20\x4d\x6f'+'\x62\x69\x6c'+_0x43b8d6(0x34e)+_0x43b8d6(0x246)+_0x43b8d6(0x347)+_0x43b8d6(0x34d)+_0x43b8d6(0x3a5)+_0x43b8d6(0x402)+'\x2e\x31\x2e'+'\x34\x36'},'\x70\x67\x46\x61\x69\x6c':[],'\x63\x61\x63\x68\x65\x43\x6c\x61\x73\x73\x65\x73':[],'\x63\x61\x63\x68\x65\x53\x75\x62\x44\x42':{},'\x63\x61\x63\x68\x65\x43\x61\x74\x65\x67\x6f\x72\x79\x44\x42':{},'\x63\x61\x63\x68\x65\x44\x65\x74\x61\x69\x6c\x44\x42':{},'\x67\x72\x6f\x75\x70\x44\x42':[],'\x63\x68\x61\x6e\x6e\x65\x6c\x44\x42':{},'\x63\x6c\x61\x73\x73\x65\x73':[],'\x70\x69\x63\x73':{},'\x70\x6c\x61\x79\x65\x72':{},'\x66\x69\x6c\x74\x65\x72':{'\x6d\x79\x52\x61\x64\x69\x6f':[{'\x6b\x65\x79':0x1,'\x6e\x61\x6d\x65':'\u7c7b\u522b','\x76\x61\x6c\x75\x65':[{'\x6e':'\u5168\u90e8','\x76':'\x30'},{'\x6e':'\u5730\u533a','\x76':'\x31'},{'\x6e':'\u7c7b\u578b','\x76':'\x32'}]}]},'\x73\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x43b8d6(0x37b)+_0x43b8d6(0x23e)+_0x43b8d6(0x3a0)+_0x43b8d6(0x3a4)+'\x34\u5c0f\u65f6'+'\u540e\u5220\u9664'+_0x43b8d6(0x1e6)+_0x43b8d6(0x2a9),'\x73\x5f\x74\x79\x70\x65':_0x43b8d6(0x1e9)+'\u70b9\u64ad','\x73\x5f\x63\x6f\x75\x6e\x74\x72\x79':'\u4e2d\u56fd','\x73\x5f\x61\x75\x74\x68\x6f\x72':'\x4c\x75\x46'+'\x65\x69','\x73\x5f\x64\x65\x73\x63':_0x43b8d6(0x1da)+_0x43b8d6(0x375)+_0x43b8d6(0x365)+_0x43b8d6(0x2db)+_0x43b8d6(0x339)+_0x43b8d6(0x1d9)+_0x43b8d6(0x29f)+_0x43b8d6(0x285)+_0x43b8d6(0x349)+_0x43b8d6(0x2e1)+'\x54\x56\x42'+_0x43b8d6(0x3c7)+_0x43b8d6(0x3e3)+_0x43b8d6(0x2c6)+_0x43b8d6(0x1e3)+'\x41\x50\x50'+'\x5d\uff0c\u5176'+_0x43b8d6(0x1cb)+_0x43b8d6(0x322)+'\u80fd\u7684\x54'+'\x56\x42\x6f'+_0x43b8d6(0x2a6)+_0x43b8d6(0x287)+_0x43b8d6(0x1c7)+_0x43b8d6(0x394)+_0x43b8d6(0x376)+_0x43b8d6(0x362)+_0x43b8d6(0x42d)+_0x43b8d6(0x1f0)+_0x43b8d6(0x31a)+'\x6d\x69\x6e'+_0x43b8d6(0x351)+'\u6216\u66f4\u4f4e'+_0x43b8d6(0x207)+'\uff0c\u65e7\u7248'+'\u672c\u5df2\u7ecf'+_0x43b8d6(0x333)+_0x43b8d6(0x425)+_0x43b8d6(0x228)+'\u529f\u80fd\x28'+_0x43b8d6(0x42c)+_0x43b8d6(0x1c0)+_0x43b8d6(0x3d9)+_0x43b8d6(0x1bd)+_0x43b8d6(0x2ba)+_0x43b8d6(0x24a)+_0x43b8d6(0x39f)+_0x43b8d6(0x1dd)+'\u540e\u8fd8\u4f1a'+_0x43b8d6(0x418)};function lftb1(_0x303996){const _0xddc24c=_0x43b8d6;console[_0xddc24c(0x1cd)](_0xddc24c(0x3f6)+_0xddc24c(0x2e9)+_0xddc24c(0x1fd)+'\uff01');config[_0xddc24c(0x2a1)+'\x66\x67']?lfcc(_0x303996):(lfaa(),lfcc(_0x303996));try{lfff(),console[_0xddc24c(0x1cd)]('\u5efa\u7acb\x5b'+_0xddc24c(0x429)+_0xddc24c(0x31f)+_0xddc24c(0x1e5)+'\u3002');}catch(_0x1adc6e){console['\x6c\x6f\x67'](_0xddc24c(0x2dd)+_0xddc24c(0x33b)+_0xddc24c(0x3c7)+'\u5b50\u4e0d\u652f'+'\u6301\u5f02\u6b65'+'\uff01\u5efa\u8bae'+_0xddc24c(0x1f4)+_0xddc24c(0x249)+_0xddc24c(0x217)+'\u6700\u65b0\u7248'+'\uff01');}}function lftb2(_0x4c68b9){const _0xdb0523=_0x43b8d6;let _0x44d1fc={'\x63\x6c\x61\x73\x73':[]};_0x4c68b9&&(_0x44d1fc[_0xdb0523(0x3e7)+'\x74\x65\x72'+'\x73']=config[_0xdb0523(0x3e7)+_0xdb0523(0x1b7)]);for(let _0x317587=0x0;_0x317587=0x2)return _0x17df4e=block_unlimited_requests(),_0x17df4e;if(config[_0x493674(0x1be)+'\x68\x65\x43'+_0x493674(0x3b7)+_0x493674(0x382)+_0x493674(0x42e)][_0xf0e27f])_0x42ff41=config['\x63\x61\x63'+_0x493674(0x272)+'\x61\x74\x65'+_0x493674(0x382)+_0x493674(0x42e)][_0xf0e27f],console[_0x493674(0x1cd)]('\x5b\u5206\u7c7b'+'\x5d\u5df2\u7ecf'+_0x493674(0x2cd)+_0x493674(0x371)+'\u5b58\u3002');else{if(_0xf0e27f==_0x493674(0x3ee)+_0x493674(0x353)+'\x6f'){let _0x5e8a59=0x0,_0x2464e8=0x0,_0x4c2f4f='';JSON['\x73\x74\x72'+_0x493674(0x2fe)+_0x493674(0x1db)](_0x6847df)!='\x7b\x7d'?_0x5630b0=_0x6847df['\x31']:_0x5630b0='\x30';if(_0x5630b0=='\x30'||_0x5630b0=='\x31'){for(let _0x563508=0x0;_0x563508=0x0;_0x29fac1--){_0x4c2f4f=ytgb_wgat_data[_0x29fac1][_0x493674(0x3cd)+'\x6d\x65'];let _0x3074fd='\x68\x74\x74'+_0x493674(0x1f9)+_0x493674(0x20d)+_0x493674(0x2fe)+'\x66\x6d\x2e'+'\x63\x6f\x6d'+_0x493674(0x309)+_0x493674(0x23f)+_0x493674(0x32c)+'\x71\x75\x65'+_0x493674(0x262)+_0x493674(0x37e)+_0x493674(0x1ff)+_0x493674(0x363)+_0x493674(0x1ae)+_0x493674(0x355)+_0x493674(0x1eb)+_0x493674(0x2c4)+_0x493674(0x1a5)+_0x493674(0x1cf)+_0x493674(0x3f9)+'\x79\x70\x65'+_0x493674(0x208)+_0x493674(0x41d)+_0x493674(0x2d9)+_0x493674(0x27f)+_0x493674(0x3b3)+'\x70\x6f\x73'+'\x74\x73\x5f'+_0x493674(0x236)+_0x493674(0x248)+_0x493674(0x2f6)+_0x493674(0x293)+_0x493674(0x37c)+_0x493674(0x258)+_0x493674(0x3d0)+'\x75\x6e\x74'+_0x493674(0x1a5)+ytgb_wgat_data[_0x29fac1][_0x493674(0x239)];_0x42ff41[_0x493674(0x400)+_0x493674(0x407)+'\x74']({'\x76\x6f\x64\x5f\x69\x64':_0x493674(0x3f3)+_0x493674(0x298)+_0x4c2f4f+_0x493674(0x256)+_0x3074fd,'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x4c2f4f['\x72\x65\x70'+'\x6c\x61\x63'+'\x65'](/\/parse$/,''),'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x493674(0x282)+_0x493674(0x396)+'\x74\x50\x69'+'\x63\x55\x72'+'\x6c'],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});}}if(_0x5630b0=='\x30'||_0x5630b0=='\x32'){let _0x14e7cf=[_0x493674(0x1f2)+'\u64ad',_0x493674(0x21b)+'\u97f3',_0x493674(0x331)+'\u64ad',_0x493674(0x381)+'\u64ad',_0x493674(0x1ed)+'\u64ad'],_0x15126e=_0x493674(0x1dc)+'\x70\x73\x3a'+_0x493674(0x428)+_0x493674(0x213)+'\x6f\x78\x79'+_0x493674(0x2ec)+_0x493674(0x1ce)+'\x74\x74\x70'+'\x73\x3a\x2f'+'\x2f\x72\x61'+_0x493674(0x36f)+_0x493674(0x2e3)+_0x493674(0x2b3)+_0x493674(0x30b)+'\x63\x6f\x6e'+'\x74\x65\x6e'+_0x493674(0x350)+'\x6f\x6d\x2f'+_0x493674(0x420)+_0x493674(0x38b)+'\x79\x30\x30'+_0x493674(0x19d)+'\x61\x64\x69'+_0x493674(0x38e)+'\x2f\x6d\x61'+_0x493674(0x3a1)+_0x493674(0x2ad)+_0x493674(0x353)+'\x6f';for(let _0x5ac8d1=0x0;_0x5ac8d1<_0x14e7cf[_0x493674(0x281)+_0x493674(0x36e)];_0x5ac8d1++){_0x42ff41[_0x493674(0x400)+_0x493674(0x407)+'\x74']({'\x76\x6f\x64\x5f\x69\x64':_0x493674(0x3f3)+_0x493674(0x298)+_0x14e7cf[_0x5ac8d1]+'\x24\x24\x24'+_0x15126e,'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x14e7cf[_0x5ac8d1][_0x493674(0x30c)+'\x6c\x61\x63'+'\x65'](/\/parse$/,'')['\x72\x65\x70'+_0x493674(0x2fa)+'\x65']('\u4f34\u97f3','')[_0x493674(0x30c)+_0x493674(0x2fa)+'\x65']('\u5e7f\u64ad','')[_0x493674(0x30c)+_0x493674(0x2fa)+'\x65']('\u5883\u5916','\u5176\u4ed6'),'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x493674(0x282)+_0x493674(0x396)+_0x493674(0x36b)+_0x493674(0x267)+'\x6c'],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''});}}}else{let _0x274926=lfii(_0xf0e27f);if(_0x274926['\x69\x6e\x64'+_0x493674(0x229)+'\x66'](_0x493674(0x3c9)+_0x493674(0x27c)+'\x55')!=-0x1){let _0x4c1e3a=/(.*),(.*)(\r\n|\n)+((?:http|rtmp|mitv)[^\s]*)/gm;while((_0x2242f6=_0x4c1e3a[_0x493674(0x26d)+'\x63'](_0x274926))!==null){_0x2242f6[_0x493674(0x326)+'\x65\x78']===_0x4c1e3a[_0x493674(0x342)+_0x493674(0x343)+_0x493674(0x3d4)]&&_0x4c1e3a['\x6c\x61\x73'+'\x74\x49\x6e'+_0x493674(0x3d4)]++;let _0x11ad4a='\u672a\u5206\u7ec4';_0x11ad4a=(_0x2242f6[0x1][_0x493674(0x3f8)+'\x63\x68'](/group-title="(.*?)"/)||[null,_0x11ad4a])[0x1],_0x11ad4a=_0x11ad4a[_0x493674(0x30c)+_0x493674(0x2fa)+'\x65'](/(^[ ]{1,})|([ ]{1,}$)/gm,''),_0x2242f6[0x2]=_0x2242f6[0x2][_0x493674(0x30c)+'\x6c\x61\x63'+'\x65'](/(^[ ]{1,})|([ ]{1,}$)/gm,''),_0x11ad4a=_0x11ad4a['\x72\x65\x70'+_0x493674(0x2fa)+'\x65'](/(#|\$)/gm,''),_0x2242f6[0x2]=_0x2242f6[0x2][_0x493674(0x30c)+_0x493674(0x2fa)+'\x65'](/(#|\$)/gm,''),_0x184f94['\x69\x6e\x64'+_0x493674(0x229)+'\x66'](_0x11ad4a)==-0x1&&(_0x184f94[_0x493674(0x231)+'\x68'](_0x11ad4a),_0x42ff41[_0x493674(0x231)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x11ad4a+_0x493674(0x256)+_0xf0e27f,'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x11ad4a[_0x493674(0x30c)+_0x493674(0x2fa)+'\x65'](/\/parse$/,''),'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x493674(0x3f0)+'\x73'][_0xf0e27f],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''}));}}else{let _0x5aa7f9=/()(.*?),?(#genre#|(?:http|rtmp|mitv)[^\s]*)/gm,_0x300170=_0x274926[_0x493674(0x3f8)+'\x63\x68'](/()(.*?),?(#genre#|(?:http|rtmp|mitv)[^\s]*)/m);_0x300170&&![_0x493674(0x211)+_0x493674(0x21f)+'\x23','\x23\x23','\u5934\x23',_0x493674(0x2b4)+_0x493674(0x39a)][_0x493674(0x1c6)+_0x493674(0x2de)+'\x65\x73'](_0x300170[0x3])&&(_0x274926='\u672a\u5206\u7ec4'+'\x2c\x23\x67'+_0x493674(0x1d7)+'\x65\x23\x0a'+_0x274926);while((_0x2242f6=_0x5aa7f9[_0x493674(0x26d)+'\x63'](_0x274926))!==null){_0x2242f6[_0x493674(0x326)+'\x65\x78']===_0x5aa7f9['\x6c\x61\x73'+_0x493674(0x343)+'\x64\x65\x78']&&_0x5aa7f9[_0x493674(0x342)+_0x493674(0x343)+'\x64\x65\x78']++;_0x2242f6[0x2]=_0x2242f6[0x2][_0x493674(0x30c)+_0x493674(0x2fa)+'\x65'](/(^[ ]{1,})|([ ]{1,}$)/gm,''),_0x2242f6[0x2]=_0x2242f6[0x2][_0x493674(0x30c)+_0x493674(0x2fa)+'\x65'](/(#|\$)/gm,'');if([_0x493674(0x211)+_0x493674(0x21f)+'\x23','\x23\x23','\u5934\x23',_0x493674(0x2b4)+'\x65\x6e\x64'][_0x493674(0x1c6)+_0x493674(0x2de)+'\x65\x73'](_0x2242f6[0x3])){let _0x3d0808=_0x2242f6[0x2];_0x184f94['\x69\x6e\x64'+_0x493674(0x229)+'\x66'](_0x3d0808)==-0x1&&(_0x184f94[_0x493674(0x231)+'\x68'](_0x3d0808),_0x42ff41[_0x493674(0x231)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x3d0808+'\x24\x24\x24'+_0xf0e27f,'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x3d0808[_0x493674(0x30c)+_0x493674(0x2fa)+'\x65'](/\/parse$/,''),'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x493674(0x3f0)+'\x73'][_0xf0e27f],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':''}));}}}}}try{setTimeout(()=>{lfee(0x3e7,_0xf0e27f),lfee(0x2);},config[_0x493674(0x367)+_0x493674(0x1a0)+_0x493674(0x1ad)+_0x493674(0x313)+_0x493674(0x3db)+_0x493674(0x2fc)+'\x65\x72\x76'+'\x61\x6c']),console[_0x493674(0x1cd)]('\u5206\u7c7b\u9875'+'\x3a\x20\u5efa'+_0x493674(0x23c)+_0x493674(0x403)+_0x493674(0x20a)+_0x493674(0x232));}catch(_0x5f1aab){console['\x6c\x6f\x67']('\u5f53\u524d\u7684'+_0x493674(0x33b)+_0x493674(0x3c7)+'\u5b50\u4e0d\u652f'+_0x493674(0x3e8)+_0x493674(0x2a2)+'\u4f7f\u7528\u8702'+_0x493674(0x1e3)+_0x493674(0x289)+_0x493674(0x2e7)+'\uff01');}return _0x17df4e={'\x6c\x69\x73\x74':_0x42ff41,'\x70\x61\x67\x65':_0x205c1f,'\x70\x61\x67\x65\x63\x6f\x75\x6e\x74':0x1,'\x6c\x69\x6d\x69\x74':0x64,'\x74\x6f\x74\x61\x6c':0x3e7},JSON[_0x493674(0x227)+'\x69\x6e\x67'+_0x493674(0x1db)](_0x17df4e);}function lftb7(_0x3b945d,_0x19c2e0){const _0x1e1743=_0x43b8d6;let _0x20bce0={},_0x245633=[];lfaa(),console[_0x1e1743(0x1cd)]('\u641c\u7d22\u9875'+_0x1e1743(0x2b7)+_0x1e1743(0x23c)+_0x1e1743(0x403)+_0x1e1743(0x369)+_0x1e1743(0x232)),lfee(0x3e7),config[_0x1e1743(0x206)+_0x1e1743(0x1b3)+_0x1e1743(0x35b)+'\x61\x67']=![],config[_0x1e1743(0x3de)+_0x1e1743(0x40a)+_0x1e1743(0x2d5)+_0x1e1743(0x34a)]=![];if(config[_0x1e1743(0x2a1)+'\x66\x67']&&config[_0x1e1743(0x24d)+_0x1e1743(0x311)+_0x1e1743(0x42b)+'\x67'])try{let _0x1a5bd1=req('\x68\x74\x74'+'\x70\x73\x3a'+_0x1e1743(0x259)+'\x70\x67\x2e'+_0x1e1743(0x372)+'\x73\x65\x61'+_0x1e1743(0x1b3)+_0x1e1743(0x332)+_0x1e1743(0x21e)+_0x1e1743(0x2cb)+'\x3f\x6c\x61'+'\x6e\x67\x3d'+'\x7a\x68\x2d'+_0x1e1743(0x25c)+'\x74',{'\x68\x65\x61\x64\x65\x72\x73':{'\x43\x6f\x6e\x74\x65\x6e\x74\x2d\x54\x79\x70\x65':'\x61\x70\x70'+_0x1e1743(0x3bb)+'\x61\x74\x69'+_0x1e1743(0x32c)+'\x78\x2d\x77'+_0x1e1743(0x421)+'\x66\x6f\x72'+_0x1e1743(0x20f)+_0x1e1743(0x3d5)+'\x6e\x63\x6f'+_0x1e1743(0x2af),'\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74':_0x1e1743(0x406)+'\x74\x74\x70'+_0x1e1743(0x3a2)+_0x1e1743(0x269)+'\x31\x30'},'\x6d\x65\x74\x68\x6f\x64':_0x1e1743(0x393)+'\x54','\x62\x6f\x64\x79':_0x1e1743(0x3f7)+_0x1e1743(0x2f8)+_0x1e1743(0x1d4)+'\x65\x77\x61'+_0x1e1743(0x1c4)+'\x6f\x6b\x65'+'\x3d\x70\x55'+_0x1e1743(0x2c1)+_0x1e1743(0x3ea)+_0x1e1743(0x336)+'\x45\x70\x53'+_0x1e1743(0x2c3)+_0x1e1743(0x299)+_0x1e1743(0x225)+_0x1e1743(0x1ba)+_0x1e1743(0x296)+_0x1e1743(0x1a4)+_0x1e1743(0x377)+'\x61\x6e\x6e'+_0x1e1743(0x330)+_0x1e1743(0x206)+_0x1e1743(0x1b3)+'\x3d'+_0x3b945d+(_0x1e1743(0x387)+'\x61\x72\x63'+_0x1e1743(0x3b1)+_0x1e1743(0x388)+'\x3d\x63')})[_0x1e1743(0x1d3)+_0x1e1743(0x29d)+'\x74'],_0x10cda3=_0x24ad5b['\x6c\x6f\x61'+'\x64'](_0x1a5bd1),_0x4947ab=_0x10cda3(_0x1e1743(0x1f6)+_0x1e1743(0x378)+_0x1e1743(0x335)+_0x1e1743(0x321)+_0x1e1743(0x1e1));if(_0x4947ab[_0x1e1743(0x281)+_0x1e1743(0x36e)]===0x0){let _0x2ab2dc=req('\x68\x74\x74'+_0x1e1743(0x1f9)+_0x1e1743(0x259)+'\x70\x67\x2e'+'\x70\x77\x2f'+'\x73\x65\x61'+'\x72\x63\x68'+_0x1e1743(0x332)+_0x1e1743(0x21e)+_0x1e1743(0x2cb)+'\x3f\x6c\x61'+_0x1e1743(0x1fa)+_0x1e1743(0x2ce)+_0x1e1743(0x25c)+'\x74',{'\x68\x65\x61\x64\x65\x72\x73':{'\x43\x6f\x6e\x74\x65\x6e\x74\x2d\x54\x79\x70\x65':'\x61\x70\x70'+'\x6c\x69\x63'+_0x1e1743(0x223)+'\x6f\x6e\x2f'+'\x78\x2d\x77'+_0x1e1743(0x421)+'\x66\x6f\x72'+_0x1e1743(0x20f)+'\x72\x6c\x65'+_0x1e1743(0x2bb)+_0x1e1743(0x2af),'\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74':_0x1e1743(0x406)+_0x1e1743(0x40f)+_0x1e1743(0x3a2)+'\x31\x32\x2e'+'\x31\x30'},'\x6d\x65\x74\x68\x6f\x64':_0x1e1743(0x393)+'\x54','\x62\x6f\x64\x79':_0x1e1743(0x3f7)+_0x1e1743(0x2f8)+_0x1e1743(0x1d4)+'\x65\x77\x61'+_0x1e1743(0x1c4)+'\x6f\x6b\x65'+_0x1e1743(0x1c8)+_0x1e1743(0x2c1)+_0x1e1743(0x3ea)+_0x1e1743(0x336)+_0x1e1743(0x1e4)+'\x75\x55\x30'+'\x77\x31\x46'+'\x69\x66\x34'+_0x1e1743(0x1ba)+_0x1e1743(0x296)+'\x6e\x50\x65'+_0x1e1743(0x377)+_0x1e1743(0x21e)+_0x1e1743(0x330)+'\x73\x65\x61'+'\x72\x63\x68'+'\x3d'+_0x3b945d+(_0x1e1743(0x387)+_0x1e1743(0x40a)+'\x68\x5f\x74'+_0x1e1743(0x388)+'\x3d\x73')})[_0x1e1743(0x1d3)+_0x1e1743(0x29d)+'\x74'],_0x8f2d16=_0x24ad5b[_0x1e1743(0x2e2)+'\x64'](_0x2ab2dc),_0x3e221c=_0x8f2d16('\x2e\x74\x61'+_0x1e1743(0x2a7)+'\x2d\x63\x6f'+_0x1e1743(0x318)+_0x1e1743(0x270)+_0x1e1743(0x3be)+_0x1e1743(0x41e)+_0x1e1743(0x278)+'\x72'),_0x10c442={};_0x3e221c[_0x1e1743(0x302)+'\x68'](function(_0x91013e){const _0x489086=_0x1e1743;let _0x1fd549=_0x8f2d16('\x74\x64',this)['\x65\x71'](0x0)[_0x489086(0x1a2)+'\x74']()[_0x489086(0x30c)+'\x6c\x61\x63'+'\x65'](/@@\d+$/,'')['\x72\x65\x70'+_0x489086(0x2fa)+'\x65']('\u53f0','')[_0x489086(0x30c)+_0x489086(0x2fa)+'\x65']('\u885b\u8996','\u536b\u89c6');_0x10c442[_0x1fd549]?_0x10c442[_0x1fd549][_0x489086(0x231)+'\x68'](_0x8f2d16(_0x489086(0x2e5)+_0x489086(0x238)+_0x489086(0x254)+'\x61',this)['\x61\x74\x74'+'\x72'](_0x489086(0x3f1)+'\x66')):_0x10c442[_0x1fd549]=[_0x8f2d16('\x74\x64\x3a'+'\x65\x71\x28'+_0x489086(0x254)+'\x61',this)[_0x489086(0x1f5)+'\x72'](_0x489086(0x3f1)+'\x66')];});for(let _0x4b7700 in _0x10c442){_0x245633[_0x1e1743(0x231)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x4b7700+(_0x1e1743(0x256)+_0x1e1743(0x31c)+_0x1e1743(0x364)+'\x5d')+_0x10c442[_0x4b7700]['\x6a\x6f\x69'+'\x6e'](_0x1e1743(0x3bf)),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x4b7700,'\x76\x6f\x64\x5f\x70\x69\x63':config['\x64\x65\x66'+_0x1e1743(0x396)+_0x1e1743(0x36b)+'\x63\x55\x72'+'\x6c'],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x1e1743(0x271)+_0x1e1743(0x40e)+'\x47'});}}else _0x4947ab[_0x1e1743(0x302)+'\x68'](function(_0x357d96){const _0x4f56d8=_0x1e1743;_0x245633[_0x4f56d8(0x231)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x10cda3(this,this)[_0x4f56d8(0x1a2)+'\x74']()+(_0x4f56d8(0x256)+_0x4f56d8(0x1dc)+_0x4f56d8(0x1f9)+_0x4f56d8(0x259)+_0x4f56d8(0x26e)+'\x70\x77')+_0x10cda3(this,this)[_0x4f56d8(0x1f5)+'\x72']('\x68\x72\x65'+'\x66'),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x10cda3(this,this)[_0x4f56d8(0x1a2)+'\x74'](),'\x76\x6f\x64\x5f\x70\x69\x63':config['\x64\x65\x66'+_0x4f56d8(0x396)+'\x74\x50\x69'+_0x4f56d8(0x267)+'\x6c'],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x4f56d8(0x271)+_0x4f56d8(0x40e)+'\x47'});});}catch{}return _0x245633=_0x245633['\x63\x6f\x6e'+_0x1e1743(0x367)](lfgg(_0x3b945d)),_0x245633=_0x245633[_0x1e1743(0x1d3)+'\x63\x61\x74'](lfhh(_0x3b945d)),_0x20bce0={'\x6c\x69\x73\x74':_0x245633},JSON[_0x1e1743(0x227)+_0x1e1743(0x2fe)+_0x1e1743(0x1db)](_0x20bce0);}function lftb5(_0x1509eb){const _0x3b3e55=_0x43b8d6;let _0x663eff=config[_0x3b3e55(0x1be)+'\x68\x65\x43'+_0x3b3e55(0x342)+_0x3b3e55(0x2e4)][_0x3b3e55(0x281)+_0x3b3e55(0x36e)]==0x0?config['\x73\x65\x61'+_0x3b3e55(0x1b3)+_0x3b3e55(0x21c)+_0x3b3e55(0x242)+_0x3b3e55(0x35e)+'\x64']:config[_0x3b3e55(0x206)+_0x3b3e55(0x1b3)+_0x3b3e55(0x385)+_0x3b3e55(0x1a6)+'\x6e\x67'],_0x3b8b83={},_0x816989={},_0xe19408=[],_0x1bd71c=_0x1509eb,_0x55eb12=_0x1509eb[_0x3b3e55(0x21a)+'\x69\x74'](_0x3b3e55(0x256))[0x1];_0x1509eb=_0x1509eb[_0x3b3e55(0x21a)+'\x69\x74'](_0x3b3e55(0x256))[0x0];_0x1509eb[_0x3b3e55(0x22d)+'\x72\x74\x73'+'\x57\x69\x74'+'\x68'](_0x3b3e55(0x2aa)+'\x56')&&(_0x55eb12=_0x3b3e55(0x1dc)+_0x3b3e55(0x294)+_0x3b3e55(0x379)+_0x3b3e55(0x33f)+_0x3b3e55(0x273)+_0x3b3e55(0x2dc)+_0x3b3e55(0x32d)+_0x55eb12);let _0x16f71f='';for(let _0x372858=0x0;_0x372858_0x5602c2&&(_0x5602c2=_0x816989[_0x418097][_0x3b3e55(0x281)+_0x3b3e55(0x36e)]);}let _0x1a1a86={};for(let _0x48c0a9=0x1;_0x48c0a9<=_0x5602c2;_0x48c0a9++){_0x1a1a86['\u7ebf\u8def'+_0x48c0a9]=[];for(let _0x5b4a5a in _0x816989){let _0x2f6be0='';_0x48c0a9<=_0x816989[_0x5b4a5a]['\x6c\x65\x6e'+_0x3b3e55(0x36e)]?_0x2f6be0=_0x816989[_0x5b4a5a][_0x48c0a9-0x1][_0x3b3e55(0x2a0)]:_0x2f6be0=_0x816989[_0x5b4a5a][_0x816989[_0x5b4a5a][_0x3b3e55(0x281)+_0x3b3e55(0x36e)]-0x1][_0x3b3e55(0x2a0)],_0x1a1a86['\u7ebf\u8def'+_0x48c0a9][_0x3b3e55(0x231)+'\x68']({'\x6e\x61\x6d\x65':_0x5b4a5a,'\x75\x72\x6c':_0x2f6be0});}}let _0x227b1e=lfdd(_0x1a1a86);_0x5e09dd[_0x3b3e55(0x354)+_0x3b3e55(0x2a8)+_0x3b3e55(0x21d)+'\x66\x72\x6f'+'\x6d']=_0x227b1e[_0x3b3e55(0x354)+'\x5f\x70\x6c'+_0x3b3e55(0x21d)+_0x3b3e55(0x221)+'\x6d'],_0x5e09dd[_0x3b3e55(0x354)+_0x3b3e55(0x2a8)+'\x61\x79\x5f'+_0x3b3e55(0x2a0)]=_0x227b1e[_0x3b3e55(0x354)+'\x5f\x70\x6c'+_0x3b3e55(0x21d)+'\x75\x72\x6c'];}}}lfjj(_0x1bd71c,_0x5e09dd['\x76\x6f\x64'+'\x5f\x70\x6c'+_0x3b3e55(0x21d)+_0x3b3e55(0x221)+'\x6d'],_0x5e09dd[_0x3b3e55(0x354)+_0x3b3e55(0x2a8)+_0x3b3e55(0x21d)+_0x3b3e55(0x2a0)]);}}}}}config[_0x3b3e55(0x29b)+_0x3b3e55(0x297)+'\x6d\x73\x67']==_0x3b3e55(0x3d8)&&(lfee(0x2),config[_0x3b3e55(0x206)+_0x3b3e55(0x1b3)+_0x3b3e55(0x35b)+'\x61\x67']=![],config[_0x3b3e55(0x3de)+_0x3b3e55(0x40a)+_0x3b3e55(0x2d5)+_0x3b3e55(0x34a)]=![]);try{setTimeout(()=>{lfee(0x2);},config[_0x3b3e55(0x292)+'\x61\x69\x6c'+_0x3b3e55(0x24c)+'\x74\x63\x68'+_0x3b3e55(0x38d)+_0x3b3e55(0x1b7)+_0x3b3e55(0x268)]),console['\x6c\x6f\x67'](_0x3b3e55(0x2b2)+_0x3b3e55(0x2b7)+_0x3b3e55(0x23c)+_0x3b3e55(0x403)+'\u5b58\x28\u5f02'+_0x3b3e55(0x232));}catch(_0x485d9d){console['\x6c\x6f\x67'](_0x3b3e55(0x2dd)+_0x3b3e55(0x33b)+_0x3b3e55(0x3c7)+_0x3b3e55(0x32f)+_0x3b3e55(0x3e8)+'\uff01\u5efa\u8bae'+_0x3b3e55(0x1f4)+_0x3b3e55(0x1e3)+_0x3b3e55(0x289)+_0x3b3e55(0x2e7));}return _0x3b8b83={'\x6c\x69\x73\x74':[_0x5e09dd]},JSON['\x73\x74\x72'+_0x3b3e55(0x2fe)+'\x69\x66\x79'](_0x3b8b83);}function lftb6(_0x5c22d8,_0x327c31,_0x3cc5c0){const _0x1d8a1d=_0x43b8d6;let _0x45e877={},_0x151118='\x30',_0x17b4be='\x30',_0x402ec7='';if(_0x327c31[_0x1d8a1d(0x326)+_0x1d8a1d(0x229)+'\x66']('\x69\x70\x74'+_0x1d8a1d(0x273)+'\x37')!=-0x1)_0x327c31=lfrr(_0x327c31);else{if(_0x327c31[_0x1d8a1d(0x326)+_0x1d8a1d(0x229)+'\x66']('\x74\x69\x6e'+_0x1d8a1d(0x312)+_0x1d8a1d(0x2ec)+'\x6d')!=-0x1)_0x327c31=lfoo(_0x327c31);else{if(_0x327c31['\x6d\x61\x74'+'\x63\x68'](/youtube\.com/m)||_0x327c31[_0x1d8a1d(0x3f8)+'\x63\x68'](/piped\.video/m))return _0x327c31;else{if(_0x327c31[_0x1d8a1d(0x3f8)+'\x63\x68'](/\/parse$/))_0x327c31=_0x327c31[_0x1d8a1d(0x30c)+_0x1d8a1d(0x2fa)+'\x65'](/\/parse$/,''),_0x151118='\x31';else{if(_0x327c31[_0x1d8a1d(0x3f8)+'\x63\x68'](/cunshao\.com\/666666\/api\/web.php/))_0x151118='\x31';else _0x327c31['\x6d\x61\x74'+'\x63\x68'](/ulivetv\.net/)&&(_0x402ec7=JSON[_0x1d8a1d(0x227)+'\x69\x6e\x67'+_0x1d8a1d(0x1db)]({'\x52\x65\x66\x65\x72\x65\x72':_0x1d8a1d(0x1dc)+_0x1d8a1d(0x1f9)+_0x1d8a1d(0x383)+_0x1d8a1d(0x288)+_0x1d8a1d(0x247)+_0x1d8a1d(0x28a)+_0x1d8a1d(0x1e7)}));}}}}_0x45e877={'\x70\x61\x72\x73\x65':_0x151118,'\x6a\x78':_0x17b4be,'\x68\x65\x61\x64\x65\x72':_0x402ec7,'\x70\x6c\x61\x79\x55\x72\x6c':'','\x75\x72\x6c':_0x327c31};try{setTimeout(()=>{lfee(0x1);},config[_0x1d8a1d(0x2f3)+'\x79\x5f\x66'+_0x1d8a1d(0x2d7)+_0x1d8a1d(0x320)+_0x1d8a1d(0x2c7)+_0x1d8a1d(0x260)+'\x6c']),console[_0x1d8a1d(0x1cd)]('\u8be6\u60c5\u9875'+'\x3a\x20\u5efa'+_0x1d8a1d(0x23c)+_0x1d8a1d(0x403)+_0x1d8a1d(0x20a)+_0x1d8a1d(0x232));}catch(_0x32b224){console[_0x1d8a1d(0x1cd)](_0x1d8a1d(0x2dd)+'\x54\x56\x42'+'\x6f\x78\u58f3'+_0x1d8a1d(0x32f)+_0x1d8a1d(0x3e8)+'\uff01\u5efa\u8bae'+_0x1d8a1d(0x1f4)+_0x1d8a1d(0x1e3)+_0x1d8a1d(0x289)+'\u6700\u65b0\u7248');}return JSON[_0x1d8a1d(0x227)+_0x1d8a1d(0x2fe)+'\x69\x66\x79'](_0x45e877);}function lfaa(){const _0x3706cc=_0x43b8d6;try{setTimeout(()=>{const _0x43bc32=_0x53e0;console['\x6c\x6f\x67'](_0x43bc32(0x2dd)+'\x54\x56\x42'+_0x43bc32(0x3c7)+_0x43bc32(0x274)+_0x43bc32(0x209)+_0x43bc32(0x1f1)+_0x43bc32(0x3e9));},0xa);}catch{!config[_0x3706cc(0x2a1)+'\x66\x67']&&(config[_0x3706cc(0x1f8)+_0x3706cc(0x39e)+'\x73']=![]),console[_0x3706cc(0x1cd)](_0x3706cc(0x2dd)+_0x3706cc(0x33b)+_0x3706cc(0x3c7)+'\u5b50\u4e0d\u652f'+_0x3706cc(0x3e8)+_0x3706cc(0x2a2)+_0x3706cc(0x1f4)+_0x3706cc(0x249)+_0x3706cc(0x217)+'\u6700\u65b0\u7248'+'\uff01');}!config[_0x3706cc(0x2a1)+'\x66\x67']&&setTimeout(()=>{const _0x26b25b=_0x3706cc;console[_0x26b25b(0x1cd)](_0x26b25b(0x404)+'\u884c\uff01');},0xa);}function _0x53e0(_0x4ca2ce,_0x586fdc){const _0x1b5534=_0x1b55();return _0x53e0=function(_0x53e0b4,_0x30b5cf){_0x53e0b4=_0x53e0b4-0x19d;let _0x5b9a89=_0x1b5534[_0x53e0b4];return _0x5b9a89;},_0x53e0(_0x4ca2ce,_0x586fdc);}function lfbb(_0x13f570,_0x583b04){const _0x56d31a=_0x43b8d6;let _0x100725='\x68\x74\x74'+_0x56d31a(0x294)+_0x56d31a(0x34c)+_0x56d31a(0x41a)+_0x56d31a(0x2a4)+_0x56d31a(0x39d)+_0x56d31a(0x1c9)+_0x56d31a(0x430)+'\x6c\x65\x2f',_0x592761=_0x583b04[_0x56d31a(0x412)+'\x63\x65'](0x0,_0x583b04[_0x56d31a(0x342)+_0x56d31a(0x343)+_0x56d31a(0x3d4)+'\x4f\x66']('\x2f')+0x1);_0x13f570['\x6d\x61\x74'+'\x63\x68'](/^(\/)/)&&(_0x592761=_0x100725);let _0x2fe83f=_0x13f570['\x73\x70\x6c'+'\x69\x74']('\x2f')['\x73\x6c\x69'+'\x63\x65'](0x0,-0x1),_0x1bee06=_0x13f570[_0x56d31a(0x21a)+'\x69\x74']('\x2f')[_0x56d31a(0x28b)]();for(let _0x2460f0=0x0;_0x2460f0<_0x2fe83f[_0x56d31a(0x281)+_0x56d31a(0x36e)];_0x2460f0++){if(_0x2fe83f[_0x2460f0]=='\x2e'){}else{if(_0x2fe83f[_0x2460f0]=='\x2e\x2e')_0x592761!=_0x100725&&(_0x592761=_0x592761['\x72\x65\x70'+_0x56d31a(0x2fa)+'\x65'](/[^\/]*\/$/,''));else{if(_0x2fe83f[_0x2460f0]==''){}else _0x592761=_0x592761+_0x2fe83f[_0x2460f0]+'\x2f';}}}return _0x592761+_0x1bee06;}function lfcc(_0x2d238c){const _0x1e3f61=_0x43b8d6,_0x40dc59=/^#([^#\n]*?)\n([^#\n]+)/gm;let _0x4d2057='',_0x502b9d='',_0x402992=req(_0x2d238c,{'\x68\x65\x61\x64\x65\x72\x73':config[_0x1e3f61(0x244)+_0x1e3f61(0x1ea)+'\x73']})[_0x1e3f61(0x1d3)+_0x1e3f61(0x29d)+'\x74'];while((_0x4d2057=_0x40dc59['\x65\x78\x65'+'\x63'](_0x402992))!==null){_0x4d2057[_0x1e3f61(0x326)+'\x65\x78']===_0x40dc59[_0x1e3f61(0x342)+_0x1e3f61(0x343)+_0x1e3f61(0x3d4)]&&_0x40dc59['\x6c\x61\x73'+_0x1e3f61(0x343)+_0x1e3f61(0x3d4)]++;if(_0x4d2057[0x1]==_0x1e3f61(0x204))continue;if(_0x4d2057[0x1][_0x1e3f61(0x3f8)+'\x63\x68'](/^lf_iptv$/i)){_0x4d2057[0x2]=='\x31'?config[_0x1e3f61(0x33f)+_0x1e3f61(0x3c2)+_0x1e3f61(0x34a)]=!![]:config[_0x1e3f61(0x33f)+_0x1e3f61(0x3c2)+'\x6c\x61\x67']=![];continue;}if(_0x4d2057[0x1]['\x6d\x61\x74'+'\x63\x68'](/^lf_radio$/i)){_0x4d2057[0x2]=='\x31'?config[_0x1e3f61(0x389)+_0x1e3f61(0x30a)+_0x1e3f61(0x42b)+'\x67']=!![]:config['\x72\x61\x64'+_0x1e3f61(0x30a)+'\x66\x6c\x61'+'\x67']=![];continue;}if(_0x4d2057[0x1][_0x1e3f61(0x3f8)+'\x63\x68'](/^lf_xjj$/i)){_0x4d2057[0x2]=='\x31'?config[_0x1e3f61(0x34f)+_0x1e3f61(0x35b)+'\x61\x67']=!![]:config['\x78\x6a\x6a'+_0x1e3f61(0x35b)+'\x61\x67']=![];continue;}let _0x5cc4fb=_0x4d2057[0x1],_0x1fead4=config[_0x1e3f61(0x282)+_0x1e3f61(0x396)+_0x1e3f61(0x36b)+_0x1e3f61(0x267)+'\x6c'];if(_0x4d2057[0x1][_0x1e3f61(0x326)+'\x65\x78\x4f'+'\x66']('\x28')!=-0x1){let _0xc748fc=_0x4d2057[0x1][_0x1e3f61(0x3f8)+'\x63\x68'](/(.*?)\((.*?)\)/);_0x5cc4fb=_0xc748fc[0x1],_0x1fead4['\x6d\x61\x74'+'\x63\x68'](/https?/)?_0x1fead4=_0xc748fc[0x2]:_0x1fead4=lfbb(_0xc748fc[0x2],_0x2d238c);}_0x4d2057[0x2]['\x6d\x61\x74'+'\x63\x68'](/https?/)?_0x502b9d=_0x4d2057[0x2]:_0x502b9d=lfbb(_0x4d2057[0x2],_0x2d238c),_0x5cc4fb=_0x5cc4fb['\x72\x65\x70'+'\x6c\x61\x63'+'\x65'](/(^[ ]{1,})|([ ]{1,}$)/gm,''),config[_0x1e3f61(0x3f0)+'\x73'][_0x502b9d]=_0x1fead4,config[_0x1e3f61(0x3f0)+'\x73'][_0x5cc4fb]=_0x1fead4,config[_0x1e3f61(0x253)+_0x1e3f61(0x36d)+'\x73'][_0x1e3f61(0x231)+'\x68']({'\x74\x79\x70\x65\x5f\x69\x64':_0x502b9d,'\x74\x79\x70\x65\x5f\x6e\x61\x6d\x65':_0x5cc4fb}),config['\x63\x61\x63'+'\x68\x65\x43'+_0x1e3f61(0x342)+_0x1e3f61(0x2e4)][_0x1e3f61(0x231)+'\x68'](_0x502b9d);}}function lfdd(_0x36b409){const _0x2b0c9e=_0x43b8d6;let _0x4f336b=[],_0x26ab9b='',_0x25e8a3='';for(let _0x1789b0 in _0x36b409){_0x26ab9b=_0x26ab9b+'\x24\x24\x24'+_0x1789b0;}for(let _0xea749c in _0x36b409){_0x25e8a3=_0x25e8a3+_0x2b0c9e(0x256),_0x36b409[_0xea749c]['\x66\x6f\x72'+_0x2b0c9e(0x2bc)+'\x68'](_0xbdf678=>{const _0x175cdb=_0x2b0c9e;_0x25e8a3=_0x25e8a3+_0xbdf678[_0x175cdb(0x39b)+'\x65']+'\x24'+_0xbdf678[_0x175cdb(0x2a0)]+'\x23';}),_0x25e8a3=_0x25e8a3[_0x2b0c9e(0x30c)+_0x2b0c9e(0x2fa)+'\x65'](/#$/m,'');}return _0x4f336b['\x76\x6f\x64'+_0x2b0c9e(0x2a8)+_0x2b0c9e(0x21d)+_0x2b0c9e(0x221)+'\x6d']=_0x26ab9b[_0x2b0c9e(0x30c)+_0x2b0c9e(0x2fa)+'\x65'](/^\$\$\$/,''),_0x4f336b[_0x2b0c9e(0x354)+_0x2b0c9e(0x2a8)+_0x2b0c9e(0x21d)+_0x2b0c9e(0x2a0)]=_0x25e8a3[_0x2b0c9e(0x30c)+_0x2b0c9e(0x2fa)+'\x65'](/^\$\$\$/,''),_0x4f336b;}function lfee(_0x5bdb4d,_0x27cc45){const _0x3fd3ee=_0x43b8d6;if(!config['\x73\x65\x61'+_0x3fd3ee(0x1b3)+_0x3fd3ee(0x35b)+'\x61\x67'])return;let _0x589abf=0x0,_0x382766=[],_0x2a09a7='',_0x29bd03=[];if(_0x27cc45)for(let _0x476bb6=0x0;_0x476bb6=_0x5bdb4d)return;_0x589abf++;for(let _0x39d4b1=0x0;_0x39d4b1{const _0x5c2bc2=_0x26f055;if(!config['\x61\x73\x65'+_0x5c2bc2(0x40a)+_0x5c2bc2(0x2d5)+_0x5c2bc2(0x34a)])return;let _0x49ceda=config[_0x5c2bc2(0x253)+_0x5c2bc2(0x36d)+'\x73'][_0x4e48d3][_0x5c2bc2(0x37a)+_0x5c2bc2(0x2c0)+'\x64'],_0x494d0f=config[_0x5c2bc2(0x253)+_0x5c2bc2(0x36d)+'\x73'][_0x4e48d3][_0x5c2bc2(0x37a)+_0x5c2bc2(0x1fe)+'\x61\x6d\x65'],_0x1dd909=[],_0x990287='',_0x1e28fe=config[_0x5c2bc2(0x1be)+_0x5c2bc2(0x272)+_0x5c2bc2(0x342)+_0x5c2bc2(0x2e4)][_0x5c2bc2(0x326)+_0x5c2bc2(0x229)+'\x66'](_0x49ceda),_0x2b66ab=[];if(_0x1e28fe==-0x1)return;for(let _0x45ca6e=0x0;_0x45ca6e0x0){for(let _0x5cd939=0x0;_0x5cd939<_0x5a6625['\x6c\x65\x6e'+_0x42c445(0x36e)];_0x5cd939++){let _0x487478=new RegExp(_0x5a6625[_0x5cd939],'\x69');_0x1e5dce[_0x42c445(0x3f8)+'\x63\x68'](_0x487478)&&(_0x3bbf5f=!![]);}_0x3bbf5f&&_0xd773ae[_0x42c445(0x231)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020][_0x42c445(0x1a9)+'\x6d\x65']+_0x42c445(0x256)+config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020][_0x42c445(0x324)+'\x6c'],'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':config['\x67\x72\x6f'+'\x75\x70\x44'+'\x42'][_0x444020][_0x42c445(0x1a9)+'\x6d\x65']['\x72\x65\x70'+_0x42c445(0x2fa)+'\x65'](/\/parse$/,''),'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x42c445(0x3f0)+'\x73'][config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020]['\x73\x6e\x61'+'\x6d\x65']],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020][_0x42c445(0x245)+'\x6d\x65']});}else _0xd773ae[_0x42c445(0x231)+'\x68']({'\x76\x6f\x64\x5f\x69\x64':config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020]['\x67\x6e\x61'+'\x6d\x65']+_0x42c445(0x256)+config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020]['\x73\x75\x72'+'\x6c'],'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020][_0x42c445(0x1a9)+'\x6d\x65'][_0x42c445(0x30c)+'\x6c\x61\x63'+'\x65'](/\/parse$/,''),'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x42c445(0x3f0)+'\x73'][config['\x67\x72\x6f'+_0x42c445(0x28e)+'\x42'][_0x444020]['\x73\x6e\x61'+'\x6d\x65']],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':config[_0x42c445(0x20e)+_0x42c445(0x28e)+'\x42'][_0x444020][_0x42c445(0x245)+'\x6d\x65']});}}return _0xd773ae;}function lfhh(_0x404e15){const _0x4d8a19=_0x43b8d6;let _0x7dafa1=[];var _0x590c5a=[],_0x158919=[];if(_0x404e15[_0x4d8a19(0x22d)+_0x4d8a19(0x344)+_0x4d8a19(0x2c8)+'\x68']('\x40')){let _0x390234=_0x404e15[_0x4d8a19(0x326)+_0x4d8a19(0x229)+'\x66']('\x20');_0x590c5a=_0x404e15[_0x4d8a19(0x412)+'\x63\x65'](0x0,_0x390234)[_0x4d8a19(0x21a)+'\x69\x74']('\x40')[_0x4d8a19(0x412)+'\x63\x65'](0x1),_0x158919=_0x404e15[_0x4d8a19(0x412)+'\x63\x65'](_0x390234+0x1)['\x72\x65\x70'+'\x6c\x61\x63'+'\x65'](/\s+/g,'\x2e\x2a');}else _0x158919=_0x404e15[_0x4d8a19(0x30c)+_0x4d8a19(0x2fa)+'\x65'](/\s+/g,'\x2e\x2a');let _0x5c352e=new RegExp(_0x158919,'\x69');for(let _0x59e834 in config[_0x4d8a19(0x1a8)+'\x6e\x6e\x65'+_0x4d8a19(0x27a)]){let _0x1572a7=_0x59e834[_0x4d8a19(0x21a)+'\x69\x74']('\x2d')[0x0]['\x72\x65\x70'+_0x4d8a19(0x2fa)+'\x65'](/[ \-_]+/gm,''),_0x4b019b=![];if(_0x590c5a[_0x4d8a19(0x281)+_0x4d8a19(0x36e)]>0x0){for(let _0x6e8af6=0x0;_0x6e8af6<_0x590c5a['\x6c\x65\x6e'+'\x67\x74\x68'];_0x6e8af6++){let _0x17cbd6=new RegExp(_0x590c5a[_0x6e8af6],'\x69');_0x1572a7['\x6d\x61\x74'+'\x63\x68'](_0x17cbd6)&&(_0x4b019b=!![]);}if(_0x4b019b)for(let _0x32af00 in config[_0x4d8a19(0x1a8)+_0x4d8a19(0x413)+_0x4d8a19(0x27a)][_0x59e834]){let _0x59cb5d=_0x32af00[_0x4d8a19(0x30c)+_0x4d8a19(0x2fa)+'\x65'](/[ \-_]+/gm,'');_0x59cb5d[_0x4d8a19(0x3f8)+'\x63\x68'](_0x5c352e)&&_0x7dafa1['\x70\x75\x73'+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x32af00+(_0x4d8a19(0x256)+_0x4d8a19(0x1a1)+'\x63\x61\x6c'+'\x64\x62\x5d')+config['\x63\x68\x61'+_0x4d8a19(0x413)+_0x4d8a19(0x27a)][_0x59e834][_0x32af00][_0x4d8a19(0x307)+'\x6e'](_0x4d8a19(0x3bf)),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x32af00,'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x4d8a19(0x3f0)+'\x73'][_0x59e834[_0x4d8a19(0x21a)+'\x69\x74']('\x2d')[0x0]],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x59e834[_0x4d8a19(0x30c)+'\x6c\x61\x63'+'\x65'](/\/parse$/,'')});}}else for(let _0x4c9b04 in config[_0x4d8a19(0x1a8)+_0x4d8a19(0x413)+_0x4d8a19(0x27a)][_0x59e834]){let _0x1877c7=_0x4c9b04[_0x4d8a19(0x30c)+_0x4d8a19(0x2fa)+'\x65'](/[ \-_]+/gm,'');_0x1877c7[_0x4d8a19(0x3f8)+'\x63\x68'](_0x5c352e)&&_0x7dafa1['\x70\x75\x73'+'\x68']({'\x76\x6f\x64\x5f\x69\x64':_0x4c9b04+('\x24\x24\x24'+_0x4d8a19(0x1a1)+_0x4d8a19(0x397)+_0x4d8a19(0x3e1))+config[_0x4d8a19(0x1a8)+_0x4d8a19(0x413)+_0x4d8a19(0x27a)][_0x59e834][_0x4c9b04][_0x4d8a19(0x307)+'\x6e'](_0x4d8a19(0x3bf)),'\x76\x6f\x64\x5f\x6e\x61\x6d\x65':_0x4c9b04,'\x76\x6f\x64\x5f\x70\x69\x63':config[_0x4d8a19(0x3f0)+'\x73'][_0x59e834[_0x4d8a19(0x21a)+'\x69\x74']('\x2d')[0x0]],'\x76\x6f\x64\x5f\x72\x65\x6d\x61\x72\x6b\x73':_0x59e834[_0x4d8a19(0x30c)+_0x4d8a19(0x2fa)+'\x65'](/\/parse$/,'')});}}return _0x7dafa1;}function lfii(_0xcb12c9){const _0x3a4d1a=_0x43b8d6;let _0x31e517='',_0x1f9f7a=config['\x68\x65\x61'+_0x3a4d1a(0x1ea)+'\x73'];_0xcb12c9[_0x3a4d1a(0x3f8)+'\x63\x68'](/(gitcode.net\/ygbh66|iptv807)/)&&(_0x1f9f7a=config[_0x3a4d1a(0x244)+_0x3a4d1a(0x1ea)+'\x73\x32']);if(config[_0x3a4d1a(0x1be)+'\x68\x65\x53'+_0x3a4d1a(0x1fc)+'\x42'][_0xcb12c9])return console[_0x3a4d1a(0x1cd)](_0x3a4d1a(0x42a)+_0x3a4d1a(0x2ee)+'\u7f13\u5b58\uff0c'+'\u4f7f\u7528\u7f13'+'\u5b58\u3002'),config[_0x3a4d1a(0x1be)+_0x3a4d1a(0x1d6)+_0x3a4d1a(0x1fc)+'\x42'][_0xcb12c9];try{_0x31e517=req(_0xcb12c9,{'\x68\x65\x61\x64\x65\x72\x73':_0x1f9f7a,'\x74\x69\x6d\x65\x6f\x75\x74':0x1388})[_0x3a4d1a(0x1d3)+_0x3a4d1a(0x29d)+'\x74'];}catch{_0x31e517='';}return config[_0x3a4d1a(0x1be)+'\x68\x65\x53'+'\x75\x62\x44'+'\x42'][_0xcb12c9]=_0x31e517,console['\x6c\x6f\x67'](_0x3a4d1a(0x3e2)+_0x3a4d1a(0x2fb)+'\x28'+_0xcb12c9+'\x29\u3002'),_0x31e517;}function lfjj(_0x10a050,_0x44b230,_0x5bd76a){const _0x16920e=_0x43b8d6;_0x44b230&&_0x5bd76a&&(config[_0x16920e(0x1be)+_0x16920e(0x426)+_0x16920e(0x3ab)+_0x16920e(0x1d2)+'\x42'][_0x10a050]={'\x76\x70\x66':_0x44b230,'\x76\x70\x75':_0x5bd76a},console[_0x16920e(0x1cd)]('\u5efa\u7acb\u8be6'+_0x16920e(0x2f1)+'\u3002'));}function lfkk(){const _0x4f7443=_0x43b8d6;try{let _0x12017a=req(_0x4f7443(0x1dc)+'\x70\x73\x3a'+_0x4f7443(0x210)+_0x4f7443(0x422)+'\x64\x61\x74'+_0x4f7443(0x235)+'\x2e\x79\x6f'+_0x4f7443(0x3dd)+_0x4f7443(0x3b0)+_0x4f7443(0x32d)+_0x4f7443(0x38c)+_0x4f7443(0x214)+_0x4f7443(0x24b),{'\x68\x65\x61\x64\x65\x72\x73':config[_0x4f7443(0x244)+'\x64\x65\x72'+'\x73']})[_0x4f7443(0x1d3)+'\x74\x65\x6e'+'\x74'];return JSON[_0x4f7443(0x417)+'\x73\x65'](_0x12017a)[_0x4f7443(0x2f9)+'\x61'][_0x4f7443(0x3e6)+_0x4f7443(0x233)+_0x4f7443(0x3b9)+'\x64\x65'];}catch{return'\x43\x4e';}}var ytgb_wgat_data=[{'\x72\x6e\x61\x6d\x65':'\u7f8e\u56fd','\x72\x69\x64':'\x39\x35'},{'\x72\x6e\x61\x6d\x65':'\u82f1\u56fd','\x72\x69\x64':'\x39\x34'},{'\x72\x6e\x61\x6d\x65':_0x43b8d6(0x3fc),'\x72\x69\x64':'\x31\x32\x33'},{'\x72\x6e\x61\x6d\x65':'\u9999\u6e2f','\x72\x69\x64':'\x33\x35'},{'\x72\x6e\x61\x6d\x65':'\u53f0\u6e7e','\x72\x69\x64':'\x33\x38'}],ytgb_province_data=[{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5927\u9646','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5317\u4eac','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x1adb0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6cb3\u5317','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x1fbd0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u4e0a\u6d77','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x4baf0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u91cd\u5e86','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x7a120},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6cb3\u5357','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x64190},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6c5f\u82cf','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x4e200},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u8d35\u5dde','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x7ef40},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u8fbd\u5b81','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x33450},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u56db\u5ddd','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x7c830},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6d59\u6c5f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x50910},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5b81\u590f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x9c400},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u798f\u5efa','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x55730},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u7518\u8083','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x975e0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5e7f\u4e1c','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x6b6c0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6c5f\u897f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x57e40},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5c71\u4e1c','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x5a550},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5c71\u897f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x222e0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6e56\u5357','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x68fb0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6e56\u5317','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x668a0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u6d77\u5357','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x704e0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5409\u6797','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x35b60},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u9ed1\u9f99\u6c5f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x38270},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u9655\u897f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x94ed0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':_0x43b8d6(0x279),'\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x249f0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5e7f\u897f','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x6ddd0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u4e91\u5357','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x81650},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u5b89\u5fbd','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x53020},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u9752\u6d77','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x99cf0},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u65b0\u7586','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x9eb10},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':'\u897f\u85cf','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0x83d60},{'\x70\x72\x6f\x76\x69\x6e\x63\x65\x4e\x61\x6d\x65':_0x43b8d6(0x411)+'\u56e2','\x70\x72\x6f\x76\x69\x6e\x63\x65\x43\x6f\x64\x65':0xa1220}],ytgb_key=_0x43b8d6(0x2bf)+_0x43b8d6(0x41c)+_0x43b8d6(0x2ac)+'\x33\x39\x32'+'\x66\x39\x66'+'\x39\x61\x34'+'\x34\x37\x65'+_0x43b8d6(0x399)+_0x43b8d6(0x3ac)+_0x43b8d6(0x37f)+'\x65\x65';function lfll(_0x2ba9b5){const _0x20e2a8=_0x43b8d6;return CryptoJS[_0x20e2a8(0x230)](_0x2ba9b5)[_0x20e2a8(0x3ce)+'\x74\x72\x69'+'\x6e\x67']()[_0x20e2a8(0x1de)+_0x20e2a8(0x2b8)+_0x20e2a8(0x3dc)+'\x73\x65']();}function lfmm(_0x422421,_0x4fbdbd){const _0x4894d1=_0x43b8d6;if(!_0x4fbdbd)_0x4fbdbd=_0x4894d1(0x29c);_0x4fbdbd=_0x4fbdbd[_0x4894d1(0x1de)+_0x4894d1(0x2b8)+_0x4894d1(0x3dc)+'\x73\x65']();if(_0x4fbdbd==='\x50\x4f\x53'+'\x54')return JSON[_0x4894d1(0x227)+_0x4894d1(0x2fe)+_0x4894d1(0x1db)](_0x422421);else{var _0x4f2ee2=Object[_0x4894d1(0x3d1)+'\x73'](_0x422421)[_0x4894d1(0x212)+'\x74'](),_0x4d6a0d=[],_0x236038='';if(_0x4f2ee2['\x6c\x65\x6e'+_0x4894d1(0x36e)])for(var _0x123e74=0x0;_0x123e74<_0x4f2ee2['\x6c\x65\x6e'+_0x4894d1(0x36e)];_0x123e74++){_0x236038=_0x4f2ee2[_0x123e74],_0x4d6a0d[_0x4894d1(0x231)+'\x68'](_0x236038+'\x3d'+_0x422421[_0x236038]);}return _0x4d6a0d[_0x4894d1(0x307)+'\x6e']('\x26');}}function lfnn(_0x1d53c0){const _0x33a31d=_0x43b8d6;var _0x4e2785=new Date()['\x67\x65\x74'+_0x33a31d(0x2f4)+'\x65'](),_0x57b75f=(_0x1d53c0?lfmm(_0x1d53c0,'\x67\x65\x74')+'\x26':'')+(_0x33a31d(0x3ec)+_0x33a31d(0x1f7)+_0x33a31d(0x3f4)+'\x3d')+_0x4e2785+(_0x33a31d(0x2da)+'\x79\x3d')+ytgb_key,_0x25fe1a={};return _0x25fe1a[_0x33a31d(0x2f4)+_0x33a31d(0x1f7)+_0x33a31d(0x3f4)]=_0x4e2785[_0x33a31d(0x3ce)+'\x74\x72\x69'+'\x6e\x67'](),_0x25fe1a[_0x33a31d(0x3c0)+'\x6e']=lfll(_0x57b75f),_0x25fe1a;}function lfoo(_0x37fb15){const _0x494790=_0x43b8d6;let _0x37cd7f='',_0x5420b2='';try{_0x5420b2=req(_0x37fb15,{'\x68\x65\x61\x64\x65\x72\x73':{'\x61\x75\x74\x68\x6f\x72\x69\x74\x79':_0x494790(0x26f)+_0x494790(0x312)+_0x494790(0x2ec)+'\x6d','\x61\x63\x63\x65\x70\x74':_0x494790(0x308)+_0x494790(0x3bb)+_0x494790(0x223)+_0x494790(0x32c)+_0x494790(0x2ae)+_0x494790(0x35a)+_0x494790(0x1a2)+'\x74\x2f\x70'+'\x6c\x61\x69'+_0x494790(0x35a)+_0x494790(0x35d),'\x61\x63\x63\x65\x70\x74\x2d\x6c\x61\x6e\x67\x75\x61\x67\x65':'\x7a\x68\x2d'+_0x494790(0x305)+_0x494790(0x358)+_0x494790(0x2ef)+'\x2e\x39','\x61\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e':_0x494790(0x2ed)+_0x494790(0x314),'\x63\x61\x63\x68\x65\x2d\x63\x6f\x6e\x74\x72\x6f\x6c':_0x494790(0x30d)+_0x494790(0x1be)+'\x68\x65','\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74':_0x494790(0x283)+_0x494790(0x23a)+_0x494790(0x356)+_0x494790(0x266)+_0x494790(0x360)+_0x494790(0x3fd)+_0x494790(0x414)+_0x494790(0x3c4)+_0x494790(0x261)+_0x494790(0x410)+_0x494790(0x1b1)+_0x494790(0x24f)+_0x494790(0x368)+_0x494790(0x254)+_0x494790(0x226)+'\x6c\x65\x57'+'\x65\x62\x4b'+'\x69\x74\x2f'+_0x494790(0x1ef)+_0x494790(0x36a)+_0x494790(0x3fa)+_0x494790(0x2d2)+_0x494790(0x224)+'\x6c\x69\x6b'+_0x494790(0x19f)+_0x494790(0x2d3)+_0x494790(0x3d2)+_0x494790(0x34b)+_0x494790(0x380)+_0x494790(0x315)+_0x494790(0x38a)+_0x494790(0x2a4)+'\x30\x20\x53'+_0x494790(0x34d)+_0x494790(0x3a5)+'\x35\x33\x37'+_0x494790(0x36a)}})[_0x494790(0x1d3)+_0x494790(0x29d)+'\x74'];let _0x17ffdd=/streaming url:([\s\S]*?)(.*?)<\/span>/m,_0x187818=/var wndt = (.*?)token":"(.*?)",/m;if(_0x5420b2[_0x494790(0x3f8)+'\x63\x68'](_0x17ffdd))return _0x37cd7f=_0x5420b2[_0x494790(0x3f8)+'\x63\x68'](_0x17ffdd)[0x2],_0x5420b2=req(_0x37cd7f,{'\x6d\x65\x74\x68\x6f\x64':_0x494790(0x2ab)+_0x494790(0x2ca),'\x68\x65\x61\x64\x65\x72\x73':config[_0x494790(0x244)+'\x64\x65\x72'+'\x73'],'\x72\x65\x64\x69\x72\x65\x63\x74':0x0}),_0x37cd7f=_0x5420b2['\x68\x65\x61'+_0x494790(0x1ea)+'\x73']['\x6c\x6f\x63'+_0x494790(0x223)+'\x6f\x6e']['\x72\x65\x70'+'\x6c\x61\x63'+'\x65']('\x3a\x34\x34'+'\x33',''),_0x37cd7f;let _0x44ae0a=_0x5420b2[_0x494790(0x3f8)+'\x63\x68'](_0x187818)[0x2],_0x33806d=_0x37fb15[_0x494790(0x412)+'\x63\x65'](_0x37fb15[_0x494790(0x342)+_0x494790(0x343)+'\x64\x65\x78'+'\x4f\x66']('\x2f')+0x1);_0x5420b2=req('\x68\x74\x74'+_0x494790(0x1f9)+_0x494790(0x20d)+_0x494790(0x2fe)+'\x66\x6d\x2e'+'\x63\x6f\x6d'+'\x2f\x77\x70'+_0x494790(0x23f)+_0x494790(0x32c)+_0x494790(0x2c4)+_0x494790(0x262)+_0x494790(0x37e)+_0x494790(0x31e)+'\x74\x72\x65'+_0x494790(0x202)+_0x494790(0x25d)+_0x494790(0x3af)+_0x494790(0x1b4)+_0x33806d+(_0x494790(0x2f5)+_0x494790(0x20b)+_0x494790(0x255)+_0x494790(0x328)),{'\x68\x65\x61\x64\x65\x72\x73':{'\x61\x75\x74\x68\x6f\x72\x69\x74\x79':_0x494790(0x26f)+'\x67\x66\x6d'+_0x494790(0x2ec)+'\x6d','\x61\x63\x63\x65\x70\x74':_0x494790(0x308)+'\x6c\x69\x63'+'\x61\x74\x69'+_0x494790(0x32c)+_0x494790(0x2ae)+_0x494790(0x35a)+'\x74\x65\x78'+_0x494790(0x277)+_0x494790(0x2e8)+_0x494790(0x35a)+_0x494790(0x35d),'\x61\x63\x63\x65\x70\x74\x2d\x6c\x61\x6e\x67\x75\x61\x67\x65':_0x494790(0x2ce)+_0x494790(0x305)+_0x494790(0x358)+_0x494790(0x2ef)+'\x2e\x39','\x61\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e':_0x494790(0x2ed)+_0x494790(0x314),'\x63\x61\x63\x68\x65\x2d\x63\x6f\x6e\x74\x72\x6f\x6c':_0x494790(0x30d)+_0x494790(0x1be)+'\x68\x65','\x73\x74\x72\x65\x61\x6d\x2d\x74\x6f\x6b\x65\x6e':_0x44ae0a,'\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74':_0x494790(0x283)+'\x69\x6c\x6c'+_0x494790(0x356)+_0x494790(0x266)+_0x494790(0x360)+_0x494790(0x3fd)+_0x494790(0x414)+_0x494790(0x3c4)+_0x494790(0x261)+_0x494790(0x410)+_0x494790(0x1b1)+'\x36\x34\x3b'+_0x494790(0x368)+_0x494790(0x254)+_0x494790(0x226)+_0x494790(0x1e2)+_0x494790(0x3a3)+_0x494790(0x2f0)+_0x494790(0x1ef)+'\x2e\x33\x36'+_0x494790(0x3fa)+_0x494790(0x2d2)+_0x494790(0x224)+_0x494790(0x1fb)+_0x494790(0x19f)+_0x494790(0x2d3)+_0x494790(0x3d2)+_0x494790(0x34b)+'\x6f\x6d\x65'+_0x494790(0x315)+_0x494790(0x38a)+'\x2e\x30\x2e'+_0x494790(0x1c3)+_0x494790(0x34d)+_0x494790(0x3a5)+_0x494790(0x1ef)+_0x494790(0x36a)}})['\x63\x6f\x6e'+'\x74\x65\x6e'+'\x74'],_0x5420b2=JSON[_0x494790(0x417)+'\x73\x65'](_0x5420b2),_0x37cd7f=_0x5420b2[_0x494790(0x2f9)+'\x61'][_0x494790(0x227)+_0x494790(0x3df)+'\x73'][0x0][_0x494790(0x2a0)];}catch(_0x1f0cf5){console[_0x494790(0x1cd)](_0x1f0cf5);}return _0x37cd7f;}var m_js_1='',m_hken='',m_hkens='',m_token='';function lfpp(_0x512055){const _0xd8d876=_0x43b8d6;var _0x1daaa8='\x41\x42\x43'+_0xd8d876(0x35c)+_0xd8d876(0x22b)+_0xd8d876(0x2e0)+'\x4d\x4e\x4f'+_0xd8d876(0x3b8)+_0xd8d876(0x327)+'\x56\x57\x58'+'\x59\x5a\x61'+_0xd8d876(0x216)+_0xd8d876(0x25a)+_0xd8d876(0x2cf)+'\x6b\x6c\x6d'+_0xd8d876(0x32a)+_0xd8d876(0x41f)+'\x74\x75\x76'+_0xd8d876(0x325)+_0xd8d876(0x1df)+_0xd8d876(0x33d)+'\x35\x36\x37'+_0xd8d876(0x280)+'\x2f\x3d',_0x374311,_0x287e7d,_0x2f1cbe,_0x56fee9,_0x5d8e1e,_0xe88284,_0x5e645a,_0x156ad5,_0x4cb5bb=0x0,_0x444a2a=0x0,_0x3a3ef2='',_0x259982=[];if(!_0x512055)return _0x512055;_0x512055+='';do{_0x56fee9=_0x1daaa8[_0xd8d876(0x326)+_0xd8d876(0x229)+'\x66'](_0x512055['\x63\x68\x61'+_0xd8d876(0x201)](_0x4cb5bb++)),_0x5d8e1e=_0x1daaa8[_0xd8d876(0x326)+_0xd8d876(0x229)+'\x66'](_0x512055[_0xd8d876(0x1a8)+_0xd8d876(0x201)](_0x4cb5bb++)),_0xe88284=_0x1daaa8[_0xd8d876(0x326)+_0xd8d876(0x229)+'\x66'](_0x512055[_0xd8d876(0x1a8)+_0xd8d876(0x201)](_0x4cb5bb++)),_0x5e645a=_0x1daaa8[_0xd8d876(0x326)+_0xd8d876(0x229)+'\x66'](_0x512055[_0xd8d876(0x1a8)+_0xd8d876(0x201)](_0x4cb5bb++)),_0x156ad5=_0x56fee9<<0x12|_0x5d8e1e<<0xc|_0xe88284<<0x6|_0x5e645a,_0x374311=_0x156ad5>>0x10&0xff,_0x287e7d=_0x156ad5>>0x8&0xff,_0x2f1cbe=_0x156ad5&0xff,_0xe88284==0x40?_0x259982[_0x444a2a++]=String[_0xd8d876(0x221)+'\x6d\x43\x68'+_0xd8d876(0x291)+_0xd8d876(0x263)](_0x374311):_0x5e645a==0x40?_0x259982[_0x444a2a++]=String[_0xd8d876(0x221)+'\x6d\x43\x68'+_0xd8d876(0x291)+_0xd8d876(0x263)](_0x374311,_0x287e7d):_0x259982[_0x444a2a++]=String[_0xd8d876(0x221)+_0xd8d876(0x33e)+_0xd8d876(0x291)+_0xd8d876(0x263)](_0x374311,_0x287e7d,_0x2f1cbe);}while(_0x4cb5bb<_0x512055[_0xd8d876(0x281)+_0xd8d876(0x36e)]);return _0x3a3ef2=_0x259982[_0xd8d876(0x307)+'\x6e'](''),_0x3a3ef2;}function lfqq(_0x456b7d,_0x1d0160,_0x4f5726,_0x4a804e){const _0x3f1633=_0x43b8d6;function _0x535a84(_0x3ea948,_0x5e25dc){const _0x312120=_0x53e0;let _0x57fbf2=_0x2896cf(_0x3ea948),_0x3d9b4e=_0x5e25dc[_0x312120(0x281)+_0x312120(0x36e)],_0x5a1ee1='';for(let _0x5d3758=0x0;_0x5d3758<_0x57fbf2['\x6c\x65\x6e'+_0x312120(0x36e)];_0x5d3758++){let _0x57a381=_0x5d3758%_0x3d9b4e;_0x5a1ee1+=String[_0x312120(0x221)+_0x312120(0x33e)+_0x312120(0x291)+_0x312120(0x263)](_0x57fbf2[_0x312120(0x1a8)+'\x72\x43\x6f'+'\x64\x65\x41'+'\x74'](_0x5d3758)^_0x5e25dc[_0x312120(0x1a8)+'\x72\x43\x6f'+_0x312120(0x38f)+'\x74'](_0x57a381));}let _0x31d4a6=_0x2896cf(_0x5a1ee1);return _0x31d4a6;}function _0x2896cf(_0x8261ad){const _0x4bd68c=_0x53e0;var _0x1add75=_0x4bd68c(0x2b9)+_0x4bd68c(0x35c)+'\x47\x48\x49'+_0x4bd68c(0x2e0)+_0x4bd68c(0x1b8)+'\x50\x51\x52'+_0x4bd68c(0x327)+_0x4bd68c(0x2d4)+'\x59\x5a\x61'+_0x4bd68c(0x216)+_0x4bd68c(0x25a)+_0x4bd68c(0x2cf)+_0x4bd68c(0x3d7)+'\x6e\x6f\x70'+_0x4bd68c(0x41f)+_0x4bd68c(0x303)+_0x4bd68c(0x325)+_0x4bd68c(0x1df)+_0x4bd68c(0x33d)+_0x4bd68c(0x2cc)+_0x4bd68c(0x280)+'\x2f\x3d',_0x2a145f,_0x1feb76,_0x57e2fc,_0x2157f9,_0x20958c,_0x49cbec,_0x1fdb53,_0x5a3ebb,_0xcda19e=0x0,_0x5a4535=0x0,_0x25a0e3='',_0x261c0a=[];if(!_0x8261ad)return _0x8261ad;_0x8261ad+='';do{_0x2157f9=_0x1add75[_0x4bd68c(0x326)+'\x65\x78\x4f'+'\x66'](_0x8261ad[_0x4bd68c(0x1a8)+'\x72\x41\x74'](_0xcda19e++)),_0x20958c=_0x1add75[_0x4bd68c(0x326)+_0x4bd68c(0x229)+'\x66'](_0x8261ad[_0x4bd68c(0x1a8)+'\x72\x41\x74'](_0xcda19e++)),_0x49cbec=_0x1add75[_0x4bd68c(0x326)+_0x4bd68c(0x229)+'\x66'](_0x8261ad[_0x4bd68c(0x1a8)+_0x4bd68c(0x201)](_0xcda19e++)),_0x1fdb53=_0x1add75[_0x4bd68c(0x326)+_0x4bd68c(0x229)+'\x66'](_0x8261ad[_0x4bd68c(0x1a8)+_0x4bd68c(0x201)](_0xcda19e++)),_0x5a3ebb=_0x2157f9<<0x12|_0x20958c<<0xc|_0x49cbec<<0x6|_0x1fdb53,_0x2a145f=_0x5a3ebb>>0x10&0xff,_0x1feb76=_0x5a3ebb>>0x8&0xff,_0x57e2fc=_0x5a3ebb&0xff;if(_0x49cbec==0x40)_0x261c0a[_0x5a4535++]=String['\x66\x72\x6f'+'\x6d\x43\x68'+_0x4bd68c(0x291)+'\x6f\x64\x65'](_0x2a145f);else _0x1fdb53==0x40?_0x261c0a[_0x5a4535++]=String[_0x4bd68c(0x221)+_0x4bd68c(0x33e)+_0x4bd68c(0x291)+_0x4bd68c(0x263)](_0x2a145f,_0x1feb76):_0x261c0a[_0x5a4535++]=String['\x66\x72\x6f'+'\x6d\x43\x68'+_0x4bd68c(0x291)+_0x4bd68c(0x263)](_0x2a145f,_0x1feb76,_0x57e2fc);}while(_0xcda19e<_0x8261ad[_0x4bd68c(0x281)+'\x67\x74\x68']);return _0x25a0e3=_0x261c0a['\x6a\x6f\x69'+'\x6e'](''),_0x25a0e3;}return _0x456b7d=_0x456b7d[_0x3f1633(0x21a)+'\x69\x74']('')[_0x3f1633(0x1c2)+_0x3f1633(0x20c)+'\x65']()[_0x3f1633(0x307)+'\x6e'](''),_0x456b7d=_0x535a84(_0x456b7d,_0x1d0160),_0x456b7d=_0x456b7d[_0x3f1633(0x30c)+'\x6c\x61\x63'+'\x65'](_0x3f1633(0x3ed)+_0x3f1633(0x42f)+_0x3f1633(0x2c2),_0x3f1633(0x3ed)+_0x3f1633(0x42f)+_0x4a804e),_0x456b7d=_0x456b7d[_0x3f1633(0x30c)+_0x3f1633(0x2fa)+'\x65'](_0x3f1633(0x3ed)+_0x3f1633(0x42f)+_0x4f5726,_0x3f1633(0x3ed)+_0x3f1633(0x42f)+_0x4a804e),_0x456b7d=_0x456b7d['\x72\x65\x70'+_0x3f1633(0x2fa)+'\x65'](_0x1d0160,''),_0x456b7d;}function lfrr(_0x2fb3e7){const _0x10ed05=_0x43b8d6;let _0x205543=_0x2fb3e7[_0x10ed05(0x21a)+'\x69\x74'](_0x10ed05(0x275))[0x0],_0x1e6867=_0x2fb3e7[_0x10ed05(0x21a)+'\x69\x74'](_0x10ed05(0x275))[0x1],_0x47364c=req(_0x205543,{'\x68\x65\x61\x64\x65\x72\x73':config[_0x10ed05(0x244)+'\x64\x65\x72'+'\x73\x32']})['\x63\x6f\x6e'+_0x10ed05(0x29d)+'\x74'],_0x56d264=_0x24ad5b['\x6c\x6f\x61'+'\x64'](_0x47364c);if(_0x1e6867>=_0x56d264('\x73\x65\x6c'+_0x10ed05(0x35f)+_0x10ed05(0x37d)+_0x10ed05(0x378)+'\x6e')[_0x10ed05(0x281)+_0x10ed05(0x36e)])return'';let _0x25afd3=_0x56d264(_0x10ed05(0x366)+'\x65\x63\x74'+_0x10ed05(0x37d)+'\x74\x69\x6f'+'\x6e')['\x65\x71'](_0x1e6867)['\x76\x61\x6c'](),_0x1545e9=_0x47364c[_0x10ed05(0x3f8)+'\x63\x68'](/